본문 바로가기

DeepLearning/OCR_

[KR_OCR] Training(하이퍼파라미터튜닝)_v2

반응형

데이터 셋과 모델, 그외 유틸등이 준비가 되면 학습을 시작

기본파라미터부터 시작해서 다양한 방법으로 학습시켜 loss를 최소로 줄인다

 

 

 

9. Training_CRNN_9

## Dropout은 LSTM에만 적용하고, 활성화 함수를 LeakyRelu로 변경

## 데이터셋에서 문제가 발생되서 오류를 수정했음

- 총 1084개의 데이터 ( Train : 867개, Validation : 217개)

- optimizer : SGD( lr = 0.001, decay=1e-6, momentum=0.9, nesterov=True, clipnorm=5 )

- 손실 값 : Focal CTC loss ( a : 0.75, r : 0.5 )

- activation func : LeakyRelu

- Dropout : LSTM

- freeze = ['conv1_1',  'conv2_1',  'conv3_1', 'conv3_2',  'conv4_1', 'conv5_1',]

- 500 Epoch

 

< Training Process_3 >

 

 

 

< Training Graph > 

500 Epoch

 

- activation fun를 leakyReulu로 변경하고 val_loss가 많이 떨어졌다.

- 대략 200번 에폭부터는 학습이 되지 않고 loss값이 일정하게 진행된다.

- 최소 val_loss 값 : 6점대

 

 

10. Training_CRNN_10

## 기존 셋팅값에 데이터 증식을 추가했다.

- 총 1085개의 데이터 ( Train : 868개, Validation : 217개)

- optimizer : SGD( lr = 0.001, decay=1e-6, momentum=0.9, nesterov=True, clipnorm=5 )

- 손실 값 : Focal CTC loss ( a : 0.75, r : 0.5 )

- activation func : LeakyRelu(0.05)

- Dropout : LSTM

- freeze = ['conv1_1',  'conv2_1',  'conv3_1', 'conv3_2',  'conv4_1', 'conv5_1',]

- 500 Epoch

- 배치사이즈 : 32

 

< CODE : Data Augmentation >

for w in range(len(words)):
    su = random.randrange(1,4)
    if su == 1: # Blurring
    f = words[w][:,:,0]
    blurred_f = ndimage.gaussian_filter(f, 1)
    words[w] = np.expand_dims(blurred_f, axis=2)
    elif su == 2: # Sharpening
    f = words[w][:,:,0]
    alpha = 50
    blurred_f = ndimage.gaussian_filter(f, 1)
    filter_blurred_f = ndimage.gaussian_filter(blurred_f, 1)
    sharpened = blurred_f + alpha * (blurred_f - filter_blurred_f)
    words[w] = np.expand_dims(sharpened, axis=2)
    elif su ==3:
    words[w] = words[w]

- 단어로 잘린 이미지가 들어오면 3가지 옵션 중 랜덤으로 적용된다.

- Blurring  /  Sharpening  /  Original

< Training Process_3 >

 

 

< Training Graph > 

400 Epoch

- 데이터 증식을 하고 약간의 loss가 떨어졌다

- 대략 200번 에폭부터는 학습이 되지 않고 loss값이 일정하게 진행된다.

- 최소 val_loss 값 : 6점대

반응형