String Based OCR DL
1 개요
String Based OCR은 입력된 이미지에서 문자를 찾는 딥러닝 알고리즘입니다.
Source Image | Result Image |
---|---|
![]() |
![]() |
문자열 단위로 라벨링을 하여 학습합니다. 다른 딥러닝 모델과는 달리 라벨에 클래스 번호를 추가하지 않고 문자열를 클래스 이름으로 사용합니다.
2 String Based OCR 사용 방법
1 데이터 셋 준비
-
Figure를 이용하여 라벨링이 된 Flif 형식의 학습 이미지
- 이미지에 Figure를 삽입하여 학습 이미지를 생성할 수 있습니다. Figure에는 반드시 이름이 들어가야 하며 이름의 모든 문자가 클래스로 등록됩니다.
- String Based OCR의 경우 Figure의 Rotated Boundary Box를 기준으로 학습을 수행하며 Figure 의 각도 정보 또한 학습에 반영됩니다. 따라서 회전되거나 그렇지 않은 Rect Figure로 라벨링하는 것을 권장합니다. (라벨링 방법)
Fig. 이미지의 이름이 있는 Figure를 삽입하여 만든 학습 데이터 샘플입니다.
2.2 학습
2.2.1. 학습 이미지 설정
2.2.2. 검증 이미지 설정(선택)
2.2.3. 모델 설정
2.2.4. 옵티 마이저 설정
2.2.5. Augmentation 설정(선택)
2.2.6. 학습 수행
- String Based OCR 의 경우 종료 조건은 metric((1 - ned + mAP) / 2) = 1이 나왔을 때 모두 맞췄다는 의미므로 metric >= 1 로 설정하는게 좋습니다.
- 추천 종료 조건
metric >= 1
(1 - ned + map) / 2 >= 1
2.2.7. 조건 식
- 종료 조건(Stop Condition) & 자동 저장(Auto Save)에서 사용 가능한 조건 식 입니다.
- Common Conditional Expression
- String Based OCR DL Expression
변수명 설명 Stop Condition 예시 Auto Save 예시 ned, metric.ned Normalized Edit Distance 의 약자로 추론된 문자열과 정답 문자열간의 최소 편집 거리를 계산하여 정확성을 나타내는 척도입니다. 0 ~ 1 사이의 값을 가지며 0에 가까울수록 좋은 결과를 나타냅니다. cost <= 0.3 & ned <= 0 epoch >= 10 & ned <= min('ned') & ned < 1 map, metric.map 클래스 별로 정밀도(Precision)와 재현율(Recall)을 이용하여 여러 임계값에서 Precision-Recall 곡선을 그리고, 그 면적을 계산한 값의 평균입니다. 0 ~ 1 범위를 가지며 1로 갈수록 좋은 결과를 나타냅니다. cost <= 0.3 & map >= 1 epoch >= 10 & map >= max('map') & map > 0 metric `(1 - ned + map) / 2` 값이 metric으로 사용됩니다. cost <= 0 | metric >= 1 epoch >= 10 & metric >= max('metric') & metric > 0 validation `(1 - ned + map) / 2` 값이 validation으로 사용됩니다. cost <= 0 | validation >= 1 epoch >= 10 & validation >= max('validation') & validation > 0 - GUI 에서 설정 방법
- 종료 조건 식 설정
cost <= 0 | validation >= 1 | metric >= 1
Fig. GUI에서 종료 조건 설정 - 자동 저장 조건 식설정
epoch >= 10 & metric >= max('metric') & metric > 0
Fig. GUI에서 자동 저장 조건 설정
- 종료 조건 식 설정
2.3 추론
2.4 Save/Load
- Save/Load
- 모델파일을 저장하거나 불러옵니다.
- 확장자는 .flsbocrdl입니다.
3 필수 옵션
3.1 학습 필수 옵션
-
모델 설정
-
지원 모델
- FLNet(V1 32 256 B3 / V1 256 32 B3 / V1 256 32 B2 / V1 256 32 B2)
- V1 32 256 는 수평 방향으로 정렬된 문자열 인식 모델입니다.
- V1 256 32 는 수직 방향으로 정렬된 문자열 인식 모델입니다.
- ResNet(V1 32 256 / V1 256 32)
- VGGNet(V1 32 256 / V1 256 32)
- FLNet(V1 32 256 B3 / V1 256 32 B3 / V1 256 32 B2 / V1 256 32 B2)
-
API
SetModel(CStringBasedOCRDL::EModel eModel = CStringBasedOCRDL::EModel_FLNet)
eModel
: 학습에 사용할 모델을 설정합니다.
SetModelVersion(CStringBasedOCRDL::EModelVersion eModelVersion = CStringBasedOCRDL::EModelVersion_FLNet_V1_32_256_B3)
eModelVersion
: 학습에 사용할 모델의 버전을 설정합니다.
-
예제 코드
CResult res; CStringBasedOCRDL stringBasedOCRDL; if((res = stringBasedOCRDL.SetModel(CStringBasedOCRDL::EModel_FLNet)).IsFail()) break; if((res = stringBasedOCRDL.SetModelVersion(CStringBasedOCRDL::EModelVersion_FLNet_V1_32_256_B3)).IsFail()) break;
-
GUI에서 설정 방법
Fig. GUI에서 사용할 모델을 설정하는 Dropdown List
Fig. GUI에서 사용한 모델 확인(학습 현황 다이얼로그)
-
3.2 추론 필수 옵션
4 선택 옵션
4.1 학습 선택 옵션
- 검증 이미지 설정
- 검증 이미지를 설정합니다. 검증 이미지는 라벨링이 되어있어야 합니다. 검증지표는 1-NED, mAP입니다.
- 검증 옵션 설정
-
검증 옵션을 설정합니다.
-
API
SetLearningValidationStep(int32_t i32ValidationStep = 1)
-
예제 코드
CStringBasedOCRDL stringBasedOCRDL; if(stringBasedOCRDL.SetLearningValidationStep(5).IsFail()) break;
-
GUI에서 사용 방법
Fig. GUI에서 검증 옵션 설정
-
- 옵티 마이저 설정
- Augmentation 설정
- 이미지 전처리 설정
- 종료 조건 설정
- 자동 저장 조건 설정
- Optimal Learning State Preservation 설정
- Pretrained Model 사용
4.2 추론 선택 옵션
-
추론 결과 옵션 설정
-
추론 결과 옵션을 설정합니다. Contour 혹은 Boundary Rect로 받을 수 있으며 스코어를 포함 여부를 정할 수 있습니다.
-
추론 결과는 설정 된 Result Image에 Figure로 출력 되게됩니다.
-
API
SetInferenceResultItemSettings(CStringBasedOCRDL::EInferenceResultItemSettings eSetting)
- 출력 정보를 선택 합니다. IncludingRegionFigures flag가 true인 경우에만 표시됩니다.
- 출력 정보로는 Confidence Score 를 선택할 수 있습니다. 추론 문자열은 기본적으로 포함됩니다.
- 기본 값으로 추론 문자열을 이름으로 하는 Boundary Rect, Contour 를 출력합니다.
- 기본 값
CStringBasedOCRDL::EInferenceResultItemSettings_BoundaryRect_Contour
- 기본 값
SetInferenceResultNMSThreshold(float f32Threshold)
- 추론 시 NMS 임계 값을 설정합니다.
-
예제 코드
CStringBasedOCRDL stringBasedOCRDL; // 문자열, 객체 확신 값, 바운더리 박스, 영역으로 출력되도록 설정 if(stringBasedOCRDL.SetInferenceResultItemSettings(CStringBasedOCRDL::EInferenceResultItemSettings_Objectness_BoundaryRect_Contour).IsFail()) break; // NMS Threshold 설정 if(stringBasedOCRDL.SetInferenceResultNMSThreshold(0.2f).IsFail()) break;
-
GUI에서 사용 방법
Fig. GUI에서 추론 옵션 설정
5 결과 출력
- Inference 결과 출력
- Inference & Inference Result Image 설정을 통해 설정한 Result Image에 추론 결과가 출력 되어집니다.
- 학습 정보
-
학습 중 또는 학습이 완료된 마지막 결과를 얻어옵니다.
-
API
GetLearningResultLastMeanAP()
- 마지막 1-NED(검증 Metric) 결과를 가져옵니다.
GetLearningResultMax1MNED()
- 최대 1-NED(검증 Metric) 결과를 가져옵니다.
GetLearningResultMax1MNEDCumulativeEpoch()
- 최대 학습 검증 1-NED(검증 Metric) 결과의 에폭 수를 가져옵니다.
GetLearningResultLastMeanAP()
- 마지막 mAP 결과를 가져옵니다.
GetLearningResultMaxMeanAP()
- 최대 mAP 결과를 가져옵니다.
GetLearningResultMaxMeanAPCumulativeEpoch()
- 최대 학습 검증 mAP 결과의 에폭 수를 가져옵니다.
GetLearningResultAllHistory(Base::CFLArray<float>& flaCostHistory, Base::CFLArray<float>& fla1MNEDHistory, Base::CFLArray<float>& flaMeanAPHistory, Base::CFLArray<int32_t>& flaValidationEpochHistory)
- 마지막 학습의 모든 결과를 가져옵니다.
- Cost, 1-NED, mAP, Validation Epoch
-
예제 코드
CStringBasedOCRDL stringBasedOCRDL; float f32ResultLast1MNED; float f32ResultMax1MNED; int32_t i32ResultMax1MNEDCumulativeEpoch; float f32ResultLastMeanAP; float f32ResultMaxMeanAP; int32_t i32ResultMaxMeanAPCumulativeEpoch; CFLArray<float> flaCostHistory; CFLArray<float> fla1MNEDHistory; CFLArray<float> flaMeanAPHistory; CFLArray<int32_t> flaValidationEpochHistory; f32ResultLast1MNED = stringBasedOCRDL.GetLearningResultLast1MNED(); f32ResultMax1MNED = stringBasedOCRDL.GetLearningResultMax1MNED(); i32ResultMax1MNEDCumulativeEpoch = stringBasedOCRDL.GetLearningResultMax1MNEDCumulativeEpoch(); f32ResultLastMeanAP = stringBasedOCRDL.GetLearningResultLastMeanAP(); f32ResultMaxMeanAP = stringBasedOCRDL.GetLearningResultMaxMeanAP(); i32ResultMaxMeanAPCumulativeEpoch = stringBasedOCRDL.GetLearningResultMaxMeanAPCumulativeEpoch(); if(stringBasedOCRDL.GetLearningResultAllHistory(flaCostHistory, fla1MNEDHistory, flaMeanAPHistory, flaValidationEpochHistory).IsFail()) break;
-
GUI에서 확인 방법
Fig. GUI 프로퍼티에서 결과 확인(Epoch, Cost, Validation)
Fig. 학습 다이얼로그에서 현황 확인(Epoch, Cost, Validation)
Fig. 그래프 뷰에서 현황 확인(Cost, Validation)
-
-