Measurement DL
1 개요
Measurement는 Semantic Segmenation 기반 모델로 특정 Shape 를 검출, 측정하는 딥러닝 알고리즘입니다.
| Source Image | Result Image |
|---|---|
![]() |
![]() |
Figure Type 으로 구분하여 라벨링합니다. 다른 딥러닝 모델과는 달리 별도의 라벨 이름을 필요로 하지 않습니다.
2 Measurement 사용 방법
1 데이터 셋 준비
-
Figure를 이용하여 라벨링이 된 Flif 형식의 학습 이미지
- 이미지에 Figure를 삽입하여 학습 이미지를 생성할 수 있습니다. Figure 의 이름이 없어도 무방합니다.
- 현재 FLImaging에서 지원하는 Figure의 형식 중 Line, Rectangle, Circle, Ellipse 로 라벨링할 수 있습니다. 알고리즘 내부에서 자동으로 Figure 형식과 클래스 번호를 매핑 처리합니다. (라벨링 방법)
Fig. 이미지에 Rect, Circle 형식의 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. 학습 수행
- Measurement 의 경우 의 경우 모든 픽셀에 대해 맞춰야 하므로 mIoU(ZE)가 1이 나오기는 어렵습니다.
- Measurement 의 경우 종료 조건은 mIoU(ZE) 0.95 정도로 설정 하는 게 적절합니다.
- 추천 종료 조건
mIoU(ZE) >= 0.95
2.2.7. 조건 식
- 종료 조건(Stop Condition) & 자동 저장(Auto Save)에서 사용 가능한 조건 식 입니다.
- Common Conditional Expression
- Measurement 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
- 모델파일을 저장하거나 불러옵니다.
- 확장자는 .flmsdl입니다.
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; CMeasurementDL measurementDL; if((res = measurementDL.SetModelVersion(CMeasurementDL::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)
-
예제 코드
CMeasurementDL measurementDL; if(measurementDL.SetLearningValidationStep(5).IsFail()) return;
-
- 옵티 마이저 설정
- Augmentation 설정
- 타일링 설정
- 이미지 전처리 설정
- 종료 조건 설정
- 자동 저장 조건 설정
- Class Equalization 설정
- Optimal Learning State Preservation 설정
- Pretrained Model 사용
4.2 추론 선택 옵션
-
측정 도형 설정
- 측정할 도형(Figure Type)을 설정합니다.
-
- API
SetMeasurementFigureType(EMeasurementFigureType eMeasurementFigureType = EMeasurementFigureType_Line_Rect_Circle_Ellipse)- Figure Type으로 Line, Rect, Circle, Ellipse 중 선택할 수 있습니다.
- API
-
측정 결과 옵션 설정
-
출력할 측정 결과 옵션을 설정합니다. 스코어 포함여부를 정할 수 있습니다.
-
API
SetMeasuredResultType(EMeasuredResultType eMeasuredResultType = EMeasuredResultType_FigureType_Score_Object_ValidPoint_InvalidPoint)- 출력 정보로는 Figure Type, Score, Object, Valid Point, Invalid Point를 선택할 수 있습니다.
-
예제 코드
CMeasurementDL measurementDL; // Rect, Circle 만 측정되도록 설정 if(measurementDL.SetMeasurementFigureType(CMeasurementDL::EMeasurementFigureType_Rect_Circle).IsFail()) return; // Figure Type, Object, Valid Point로 출력되도록 설정 if(measurementDL.SetMeasuredResultType(CMeasurementDL::EMeasuredResultType_FigureType_Object_ValidPoint).IsFail()) return;
-
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
-
예제 코드
CMeasurementDL measurementDL; 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(measurementDL.GetLearningResultClassNames(0, flaClassNames).IsFail()) break; i32ResultClassCount = measurementDL.GetLearningResultClassCount(); f32ResultLastAccuracy = measurementDL.GetLearningResultLastAccuracy(); f32ResultLastAccuracyZE = measurementDL.GetLearningResultLastAccuracyZE(); f32ResultLastMeanIOU = measurementDL.GetLearningResultLastMeanIoU(); f32ResultLastMeanIOUZE = measurementDL.GetLearningResultLastMeanIoUZE(); f32ResultMaximumAccuracy = measurementDL.GetLearningResultMaximumAccuracy(); f32ResultMaximumAccuracyZE = measurementDL.GetLearningResultMaximumAccuracy(); f32ResultMaximumMeanIoU = measurementDL.GetLearningResultMaximumMeanIoU(); f32ResultMaximumMeanIoUZE = measurementDL.GetLearningResultMaximumMeanIoUZE(); i32ResultMaximumAccuracyCumulativeEpoch = measurementDL.GetLearningResultMaximumAccuracyCumulativeEpoch(); i32ResultMaximumMeanIoUCumulativeEpochZE = measurementDL.GetLearningResultMaximumMeanIoUCumulativeEpochZE(); if(measurementDL.GetLearningResultMeanIoUHistory(flaMeanIoUHistory).IsFail()) break; if(measurementDL.GetLearningResultMeanIoUZEHistory(flaMeanIoUZEHistory).IsFail()) break; if(measurementDL.GetLearningResultAllHistory(flaCostHistory, flaValidationHistory, flaMeanIoUHistory, flaValidationZEHistory, flaMeanIoUZEHistory, flaValidationEpochHistory).IsFail()) break; -
GUI에서 확인 방법
Fig. GUI 프로퍼티에서 결과 확인(Epoch, Cost, Validation)
Fig. 학습 다이얼로그에서 현황 확인(Epoch, Cost, Validation)
Fig. 그래프 뷰에서 현황 확인(Cost, Validation)
-

