Faster Character Based OCR DL
1 개요
Faster Character Based OCR은 문자 단위로 문자열을 인식하는 딥러닝 알고리즘입니다. Semantic Segmenation 기반 모델로 Character Based OCR 보다 더 빠른 속도로 문자를 추론합니다.
| Source Image | Result Image |
|---|---|
![]() |
![]() |
문자 단위로 라벨링을 하여 학습합니다. 다른 딥러닝 모델과는 달리 라벨에 클래스 번호를 추가하지 않고 문자를 클래스이름으로 사용합니다.
2 Faster Character Based OCR 사용 방법
1 데이터 셋 준비
-
Figure를 이용하여 라벨링이 된 Flif 형식의 학습 이미지
- 이미지에 Figure를 삽입하여 학습 이미지를 생성할 수 있습니다. Figure에는 반드시 이름이 들어가야 하며 "문자 이름" 형식이여야 합니다.
- FLImaging에서 지원하는 모든 형식의 Figure로 라벨링할 수 있습니다. (라벨링 방법)
Fig. 이미지의 이름이 있는 Figure를 삽입하여 만든 학습 데이터 샘플입니다.
2.2 학습
2.2.1. 학습 이미지 설정
2.2.2. 검증 이미지 설정(선택)
- 검증 지표
- Pixel Accuracy
- 픽셀 정확도입니다. 각 픽셀별로 클래스의 정답 유무로 계산합니다.
- 계산 수식
- 맞춘 픽셀 개수 / 총 픽셀 개수
- 범위는 0~1이며 1로 갈수록 높은 성능을 의미합니다.
- Pixel Accuracy(Zero Exeception)
- 0번 클래스를 제외하고 Pixel Accuracy를 계산한 지표 값입니다. 0번은 배경에 대한 클래스 번호입니다.
- mean IoU
- IoU의 평균입니다. Semgentation에서 주로 사용되는 지표입니다. 클래스 별로 IoU를 구하고 평균을 구합니다.
- 예측 영역 ∩ 실제 영역 / 예측 영역 ∪ 실제 영역

- 범위는 0~1이며 1로 갈수록 높은 성능을 의미합니다.
- mean IoU(ZE)
- 0번 클래스를 제외하고 mIoU를 계산한 지표 값입니다. 0번은 배경에 대한 클래스 번호입니다.
- Pixel Accuracy
2.2.3. 모델 설정
2.2.4. 옵티 마이저 설정
2.2.5. Augmentation 설정(선택)
2.2.6. 학습 수행
- Faster Character Based OCR 의 경우 의 경우 모든 픽셀에 대해 맞춰야 하므로 mIoU(ZE)가 1이 나오기는 어렵습니다.
- Faster Character Based OCR 의 경우 종료 조건은 mIoU(ZE) 0.95 정도로 설정 하는 게 적절합니다.
- 추천 종료 조건
mIoU(ZE) >= 0.95
2.2.7. 조건 식
- 종료 조건(Stop Condition) & 자동 저장(Auto Save)에서 사용 가능한 조건 식 입니다.
- Common Conditional Expression
- Faster Character Based OCR Conditonal Expression
변수명 설명 Stop Condition 예시 Auto Save 예시 mIoU 클래스별 IoU의 평균 지표입니다. 0 ~ 1 범위를 가지며 1로 갈수록 좋은 결과를 나타냅니다. cost <= 0.3 & mIoU >= 1 epoch >= 10 & mIoU >= max('mIoU') & mIoU > 0 mIoU.ZE 클래스별 IoU의 평균 지표입니다. 0 ~ 1 범위를 가지며 1로 갈수록 좋은 결과를 나타냅니다. ZE는 Zero Exception의 약자로 배경클래스인 0번을 제외하고 계산합니다. 배경이 중요하지 않은 경우 사용합니다. cost <= 0.3 & mIoU.ZE >= 1 epoch >= 10 & mIoU.ZE >= max('mIoU.ZE') & mIoU.ZE > 0 accuracy 정확도입니다. 맞춘 픽셀 개수 / 총 픽셀 개수로 계산 되어집니다. 0 ~ 1 범위를 가지며 1로 갈수록 좋은 결과를 나타냅니다. cost <= 0.3 & accuracy >= 1 epoch >= 10 & accuracy >= max('accuracy') & accuracy > 0 accuracy.ze 정확도입니다. 맞춘 픽셀 개수 / 총 픽셀 개수로 계산 되어집니다. 0 ~ 1 범위를 가지며 1로 갈수록 좋은 결과를 나타냅니다. ZE는 Zero Exception의 약자로 배경클래스인 0번을 제외하고 계산합니다. 배경이 중요하지 않은 경우 사용합니다. cost <= 0.3 & accuracy.ze >= 1 epoch >= 10 & accuracy.ze >= max('accuracy.ze') & accuracy.ze > 0 metric miou가 metric 사용됩니다. cost <= 0 | metric >= 1 epoch >= 10 & metric >= max('metric') & metric > 0 metric.ze miou.ze가 metric.ze으로 사용됩니다. cost <= 0 | metric.ze >= 1 epoch >= 10 & metric.ze >= max('metric.ze') & metric.ze > 0 validation accuracy가 validation으로 사용됩니다. cost <= 0 | validation >= 1 epoch >= 10 & validation >= max('validation') & validation > 0 validation.ze accuracy.ze가 validation.ze으로 사용됩니다. cost <= 0 | validation.ze >= 1 epoch >= 10 & validation.ze >= max('validation.ze') & validation.ze > 0 - GUI 에서 설정 방법
- 종료 조건 식 설정
cost <= 0 | validation >= 1 | metric >= 1 | validation.ze >= 1 | metric.ze >= 1
Fig. GUI에서 종료 조건 설정
- 자동 저장 조건 식설정
epoch >= 10 && (metric > max('metric') || metric.ze > max('metric.ze'))
Fig. GUI에서 자동 저장 조건 설정
- 종료 조건 식 설정
2.3 추론
2.4 Save/Load
- Save/Load
- 모델파일을 저장하거나 불러옵니다.
- 확장자는 .flfocrdl입니다.
3 필수 옵션
3.1 학습 필수 옵션
-
모델 설정
-
지원 모델
- FL Seg Net(V1 128 B1~B4/V1 256 B1~B4/V1 512 B1~B4/V1 512 B1~B4)
- 포스로직만의 효율적인 최신 AI 모델 설계 구조를 바탕으로 구현된 빠른 속도, 정밀한 결과 및 낮은 메모리 사용을 갖춘 최고의 이미지 탐지 모델입니다.
- 추천 버전은 V1 512 B3입니다.
- FL Seg Net(V1 128 B1~B4/V1 256 B1~B4/V1 512 B1~B4/V1 512 B1~B4)
-
API
SetModelVersion(EModelVersion eModelVersion = EModelVersion_FLSegNet_V1_512_B3)eModelVersion: 학습에 사용할 모델의 버전을 설정합니다.
-
예제 코드
CResult res; CFasterCharacterBasedOCRDL ocrDL; if((res = ocrDL.SetModelVersion(CFasterCharacterBasedOCRDL::EModelVersion_FLSegNet_V1_512_B3)).IsFail()) return; -
GUI에서 설정 방법
Fig. GUI에서 사용할 모델을 설정하는 Dropdown List
Fig. GUI에서 사용한 모델 확인(학습 현황 다이얼로그)
-
3.2 추론 필수 옵션
4 선택 옵션
4.1 학습 선택 옵션
- 검증 이미지 설정
- 검증 이미지를 설정합니다. 검증 이미지는 라벨링이 되어있어야 합니다. 검증지표는 mIoU.ze입니다.
- 검증 옵션 설정
-
검증 옵션을 설정합니다.
-
API
SetLearningValidationStep(int32_t i32ValidationStep = 1)
-
예제 코드
CFasterCharacterBasedOCRDL ocrDL; if(ocrDL.SetLearningValidationStep(5).IsFail()) return;
-
- 옵티 마이저 설정
- Augmentation 설정
- 타일링 설정
- 이미지 전처리 설정
- 종료 조건 설정
- 자동 저장 조건 설정
- Class Equalization 설정
- Optimal Learning State Preservation 설정
- Pretrained Model 사용
4.2 추론 선택 옵션
-
추론 결과 옵션 설정
-
추론 결과 옵션을 설정합니다. Contour로 받을 수 있으며 스코어 포함여부를 정할 수 있습니다.
-
추론 결과는 설정 된 Result Image에 Figure로 출력 되게됩니다.
-
API
EnableInferenceResultStringMode(bool bEnable)- 기본값은
true이며 출력 결과를 String단위로 얻어옵니다. false로 설정 시 문자 단위로 얻어옵니다.
- 기본값은
SetInferenceResultItemSettings(CSemanticSegmentationDL::EInferenceResultItemSettings eSetting)- 출력 정보로는 Confidence Score, Contour를 선택할 수 있습니다.
SetInferenceMinimumConfidenceScore(double f64MinConfidenceScore = .5)- 추론 결과를 출력할 최소 점수를 설정합니다.
- ConfidenceMapCreated가 활성화 되어있어야 합니다.
-
예제 코드
CFasterCharacterBasedOCRDL ocrDL; // 출력 결과를 String으로 출력하도록 설정 if(ocrDL.EnableInferenceResultStringMode(true).IsFail()) return; // Score, 영역으로 출력되도록 설정 if(ocrDL.SetInferenceResultItemSettings(CSemanticSegmentationDL::EInferenceResultItemSettings_ConfidenceScore_RegionType_Contour).IsFail()) return; // Minimum Confidence Score 설정 if(ocrDL.SetInferenceMinimumConfidenceScore(.5).IsFail()) break;
-
5 결과 출력
- Inference 결과 출력
- Inference & Inference Result Image 설정을 통해 설정한 Result Image에 추론 결과가 출력 되어집니다.
- 학습 정보
-
학습 중 또는 학습이 완료된 마지막 결과를 얻어옵니다.
-
API
GetLearningResultLastAccuracy()- 마지막 픽셀 정확도 결과
GetLearningResultLastMeanIoU()- 마지막 mIoU(검증 Metric) 결과
GetLearningResultLastMeanIoUZE()- 배경을 제외한 마지막 mIoU 결과
GetLearningResultMaximumAccuracy()- 마지막 최대 픽셀 정확도 결과
GetLearningResultMaximumMeanIoU()- 마지막 최대 mIoU 결과
GetLearningResultMaximumAccuracyCumulativeEpoch()- 마지막 최대 정확도의 Epoch
GetLearningResultMaximumMeanIoUCumulativeEpoch()- 마지막 최대 mIoU의 Epoch
GetLearningResultMaximumMeanIoUCumulativeEpochZE()- 배경을 제외한 마지막 최대 mIoU의 Epoch
GetLearningResultAllHistory(Base::CFLArray<float>&, Base::CFLArray<float>&, Base::CFLArray<float>&, Base::CFLArray<float>&, Base::CFLArray<float>&, Base::CFLArray<int32_t>&)- 마지막 학습의 모든 결과
- Cost, Accuracy, mIoU, ZE Accuracy, ZE mIoU, Validation Epoch
-
예제 코드
CFasterCharacterBasedOCRDL ocrDL; int32_t i32ResultClassCount; Base::CFLArray<Base::CFLString<wchar_t>> flaClassNames; float f32ResultLastAccuracy; float f32ResultLastAccuracyZE; float f32ResultLastMeanIOU; float f32ResultLastMeanIOUZE; float f32ResultMaximumAccuracy; float f32ResultMaximumAccuracyZE; float f32ResultMaximumMeanIoU; float f32ResultMaximumMeanIoUZE; int32_t i32ResultMaximumAccuracyCumulativeEpoch; int32_t i32ResultMaximumMeanIoUCumulativeEpochZE; Base::CFLArray<float> flaMeanIoUHistory; Base::CFLArray<float> flaMeanIoUZEHistory; Base::CFLArray<float> flaCostHistory; Base::CFLArray<float> flaValidationHistory; Base::CFLArray<float> flaValidationZEHistory; Base::CFLArray<int32_t> flaValidationEpochHistory; if(ocrDL.GetLearningResultClassNames(0, flaClassNames).IsFail()) break; i32ResultClassCount = ocrDL.GetLearningResultClassCount(); f32ResultLastAccuracy = ocrDL.GetLearningResultLastAccuracy(); f32ResultLastAccuracyZE = ocrDL.GetLearningResultLastAccuracyZE(); f32ResultLastMeanIOU = ocrDL.GetLearningResultLastMeanIoU(); f32ResultLastMeanIOUZE = ocrDL.GetLearningResultLastMeanIoUZE(); f32ResultMaximumAccuracy = ocrDL.GetLearningResultMaximumAccuracy(); f32ResultMaximumAccuracyZE = ocrDL.GetLearningResultMaximumAccuracy(); f32ResultMaximumMeanIoU = ocrDL.GetLearningResultMaximumMeanIoU(); f32ResultMaximumMeanIoUZE = ocrDL.GetLearningResultMaximumMeanIoUZE(); i32ResultMaximumAccuracyCumulativeEpoch = ocrDL.GetLearningResultMaximumAccuracyCumulativeEpoch(); i32ResultMaximumMeanIoUCumulativeEpochZE = ocrDL.GetLearningResultMaximumMeanIoUCumulativeEpochZE(); if(ocrDL.GetLearningResultMeanIoUHistory(flaMeanIoUHistory).IsFail()) break; if(ocrDL.GetLearningResultMeanIoUZEHistory(flaMeanIoUZEHistory).IsFail()) break; if(ocrDL.GetLearningResultAllHistory(flaCostHistory, flaValidationHistory, flaMeanIoUHistory, flaValidationZEHistory, flaMeanIoUZEHistory, flaValidationEpochHistory).IsFail()) break; -
GUI에서 확인 방법
Fig. GUI 프로퍼티에서 결과 확인(Epoch, Cost, Validation)
Fig. 학습 다이얼로그에서 현황 확인(Epoch, Cost, Validation)
Fig. 그래프 뷰에서 현황 확인(Cost, Validation)
-

