Semantic Segmentation DL
목차
1 개요
- Semantic Segmentation은 입력된 이미지의 각 픽셀을 클래스나 개체로 분류하는 딥러닝 컴퓨터 비전 작업입니다. 분류 결과들은 클래스에 맞게 라벨이 되며 동일 클래스는 같은 Label이 사용되어 추가 분류 없이 표시 되어집니다. FL AI에서 강력한 GUI 프레임워크 기능을 통해 학습 이미지의 Labeling을 손쉽게 할 수 있으며, 자체 개발된 FLSegNet을 통하여 고속 고성능 결과를 얻을 수 있습니다.
Source | |
---|---|
Result | |
![]() |
![]() |
2 Semantic Segmentation DL 사용 방법
1 데이터 셋 준비
- Figure를 이용하여 라벨링이 된 Flif 형식의 학습 이미지
- 이미지에 Figure를 삽입하여 학습 이미지를 생성할 수 있습니다. Figure에는 반드시 이름이 들어가야 하며 "클래스 번호 (클래스 이름)" 형식이거나 "클래스 번호" 형식이여야 합니다.
- FLImaging에서 지원하는 모든 형식의 Figure로 라벨링할 수 있습니다. (라벨링 방법)
- 클래스 번호는 1번부터 시작해야 합니다.
Fig. 이미지의 이름이 있는 Figure를 삽입하여 만든 학습 데이터 샘플입니다.
- 원본 이미지 + 마스크 이미지
- 원본 이미지와 라벨 번호가 담긴 마스크 이미지로 학습 데이터 셋을 준비할 수 있습니다.
- 마스크 이미지의 경우 1채널 이여야 하며 클래스 번호는 1번부터 시작해야 합니다.
Fig. 원본 이미지와 마스크 이미지로 구성된 학습 데이터 샘플입니다.(좌 : 원본 이미지, 중간 : 마스크 이미지, 우 : 마스크 이미지 확대)
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
- 검증 지표
- 모델 설정
- 옵티 마이저 설정
- Augmentation 설정(선택)
- 학습 수행
- Semantic Segmentation 의 경우 모든 픽셀에 대해 맞춰야 하므로 mIoU(ZE)가 1이 나오기는 어렵습니다.
- Semantic Segmentaiton 의 경우 종료 조건은 mIoU(ZE) 0.95 정도로 설정 하는 게 적절합니다.
- 추천 종료 조건
mIoU(ZE) >= 0.95
- 조건 식
- 종료 조건과 자동 저장에서 사용 가능한 조건 식 입니다.
- Common Conditional Expression
- Semantic Segmentation DL Expression
mIoU
- 클래스별 IoU의 평균 지표입니다. 0 ~ 1 범위를 가지며 1로 갈수록 좋은 결과를 나타냅니다.
mIoU.ZE
- 클래스별 IoU의 평균 지표입니다. 0 ~ 1 범위를 가지며 1로 갈수록 좋은 결과를 나타냅니다.
- ZE는 Zero Exception의 약자로 배경클래스인 0번을 제외하고 계산합니다. 배경이 중요하지 않은 경우 사용합니다.
accuracy
- 픽셀 정확도입니다. 픽셀별 클래스 맞춘개수 / 픽셀 개수 로 계산되어집니다.
accuracy.ze
- 픽셀 정확도입니다. 픽셀별 클래스 맞춘개수 / 픽셀 개수 로 계산되어집니다.
- ze는 Zero Exception의 약자로 배경클래스인 0번을 제외하고 계산합니다. 배경이 중요하지 않은 경우 사용합니다.
metric
mIoU
가 metric으로 사용됩니다.
metric.ze
mIoU.ze
가 metric으로 사용됩니다.
validation
accuracy
가 validation으로 사용됩니다.
validation.ze
accuracy.ze
가 validation으로 사용됩니다.
- 사용 예시
- 종료 조건 식 설정
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
- 모델파일을 저장하거나 불러옵니다.
- 확장자는 .flss입니다.
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입니다.
- Deep Lab(V1 512)
- PSP Net(V3)
- FL Seg Net(V1 128 B1~B4/V1 256 B1~B4/V1 512 B1~B4/V1 512 B1~B4)
-
API
SetModel(EModel eModel = EModel_FLSegNet)
eModel
: 학습에 사용할 모델을 설정합니다.
SetModelVersion(EModelVersion eModelVersion = EModelVersion_FLSegNet_V1_512_B3)
eModelVersion
: 학습에 사용할 모델의 버전을 설정합니다.
-
예제 코드
CResult res; CSemanticSegmentationDL segDL; if(IsFail(res = segDL.SetModel(CSemanticSegmentationDL::EModel_FLSegNet))) break; if(IsFail(res = segDL.SetModelVersion(CSemanticSegmentationDL::EModelVersion_FLSegNet_V1_512_B3))) break;
-
GUI에서 설정 방법
-
Fig. GUI에서 사용할 모델을 설정하는 Dropdown List

Fig. GUI에서 사용한 모델 확인(학습 현황 다이얼로그)
3.2 추론 필수 옵션
4 선택 옵션
4.1 학습 선택 옵션
- 마스크 이미지 설정
-
Figure를 대신하여 1Ch 이미지를 정답 라벨로사용합니다. Figure가 담긴 이미지 대신 원본 이미지 + 마스크 이미지로 학습할 때 설정합니다.
-
API
- Learning Mask Image 모드 활성화 API
EnableLearningMaskImage(bool bEnable)
- Learning Mask Image 입력 API
SetLearningMaskLabelImage(const Base::CFLImage& fliMaskImage)
SetLearningMaskLabelImage(const Base::CFLImage*)
- Learning Validation Mask Image 모드 활성화 API
EnableLearningValidationMaskImage(bool bEnable)
- Learning Validation Mask Image 입력 API
SetLearningValidationMaskLabelImage(const Base::CFLImage& fliValidationMaskImage)
SetLearningValidationMaskLabelImage(const Base::CFLImage* pFliValidationMaskImage)
- Learning Mask Image 모드 활성화 API
-
예제 코드
CFLImage fliLearnMaskImage; CFLImage fliLearnValidationMaskImage; CSemanticSegmentationDL semanticSegmentation; if(semanticSegmentation.EnableLearningMaskImage(true).IsFail()) break; if(semanticSegmentation.SetLearningMaskLabelImage(fliLearnMaskImage).IsFail()) break; if(semanticSegmentation.EnableLearningValidationMaskImage(true).IsFail()) break; if(semanticSegmentation.SetLearningValidationMaskLabelImage(fliLearnValidationMaskImage).IsFail()) break;
-
GUI에서 설정 방법
-
Fig. GUI에서 마스크 이미지 설정 방법
- 검증 이미지 설정
- 검증 이미지를 설정합니다. 검증 이미지는 라벨링이 되어있어야 합니다. 검증지표는 accuracy와, mIoU입니다.
- 옵티 마이저 설정
- Augmentation 설정
- 타일링 설정
- 이미지 전처리 설정
- 종료 조건 설정
- 자동 저장 조건 설정
- Class Equalization 설정
- Optimal Learning State Preservation 설정
- Pretrained Model 사용
4.2 추론 선택 옵션
-
추론 결과 옵션 설정
-
추론 결과를 어떤 형태로 받을지 결정합니다. 라벨 번호 값이 담긴 이미지로 받거나 Figure형태로 받을 수 있습니다.
-
추론 결과는 설정 된 ResultImage에 Figure로 출력 되게됩니다.
-
API
EnableInferenceResultIncludingRegionFigures(bool bEnable)
- True인 경우 결과 정보에 Figure를 포함하여 출력합니다.(기본값)
SetInferenceResultItemSettings(CSemanticSegmentationDL::EInferenceResultItemSettings eSetting)
- 출력 정보를 선택 합니다. IncludingRegionFigures flag가 true인 경우에만 표시됩니다.
- 출력 정보로는 Class Num, Class Name, Confidence Score를 선택할 수 있습니다.
- 기본 값으로 세 항목 모두 출력합니다.
- 기본 값
EInferenceResultItemSettings_ClassNum_ClassName_ConfidenceScore_RegionType_Contour
- 기본 값
EnableInferenceResultLabelImage(bool bEnable)
- True인 경우 결과 이미지를 Mask Label 이미지로 출력하도록 설정합니다.
- False인 경우 원본 이미지로 출력합니다.
EnableInferenceResultConfidenceMapCreated(bool bEnable)
- True인 경우 ConfidenceMap을 출력합니다.
SetInferenceMinimumConfidenceScore(double f64MinConfidenceScore = .5)
- 추론 결과를 출력할 최소 점수를 설정합니다.
- ConfidenceMapCreated가 활성화 되어있어야 합니다.
SetInferenceResultConfidenceMapImage(Base::CFLImage& fliInferenceResultConfidenceMapImage)
- ConfidenceMap결과를 받을 이미지를 설정합니다.
-
예제 코드
CSemanticSegmentationDL semanticSegmentation; if(semanticSegmentation.EnableInferenceResultIncludingRegionFigures(true).IsFail()) break; if(semanticSegmentation.SetInferenceResultItemSettings(CSemanticSegmentationDL::EInferenceResultItemSettings_ClassName).IsFail()) break; if(semanticSegmentation.EnableInferenceResultLabelImage(true).IsFail()) break; if(semanticSegmentation.EnableInferenceResultConfidenceMapCreated(false).IsFail()) break; if(semanticSegmentation.SetInferenceMinimumConfidenceScore(.5).IsFail()) break;
-
GUI에서 사용 방법
Fig. GUI에서 추론 옵션 설정하는 법
-
5 결과 출력
- Inference 결과 출력
- Inference & Inference Result Image 설정을 통해 설정한 Result Image에 추론 결과가 출력 되어집니다.
- 옵션에 따라 라벨 값으로 이루어진 이미지 또는 찾은 영역의 Figure가 포함되게 됩니다.
- 학습 정보
-
학습 중 또는 학습이 완료된 마지막 결과를 얻어옵니다.
-
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
-
예제 코드
CSemanticSegmentationDL semanticSegmentation; 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(semanticSegmentation.GetLearningResultClassNames(0, flaClassNames).IsFail()) break; i32ResultClassCount = semanticSegmentation.GetLearningResultClassCount(); f32ResultLastAccuracy = semanticSegmentation.GetLearningResultLastAccuracy(); f32ResultLastAccuracyZE = semanticSegmentation.GetLearningResultLastAccuracyZE(); f32ResultLastMeanIOU = semanticSegmentation.GetLearningResultLastMeanIoU(); f32ResultLastMeanIOUZE = semanticSegmentation.GetLearningResultLastMeanIoUZE(); f32ResultMaximumAccuracy = semanticSegmentation.GetLearningResultMaximumAccuracy(); f32ResultMaximumAccuracyZE = semanticSegmentation.GetLearningResultMaximumAccuracy(); f32ResultMaximumMeanIoU = semanticSegmentation.GetLearningResultMaximumMeanIoU(); f32ResultMaximumMeanIoUZE = semanticSegmentation.GetLearningResultMaximumMeanIoUZE(); i32ResultMaximumAccuracyCumulativeEpoch = semanticSegmentation.GetLearningResultMaximumAccuracyCumulativeEpoch(); i32ResultMaximumMeanIoUCumulativeEpochZE = semanticSegmentation.GetLearningResultMaximumMeanIoUCumulativeEpochZE(); if(semanticSegmentation.GetLearningResultMeanIoUHistory(flaMeanIoUHistory).IsFail()) break; if(semanticSegmentation.GetLearningResultMeanIoUZEHistory(flaMeanIoUZEHistory).IsFail()) break; if(semanticSegmentation.GetLearningResultAllHistory(flaCostHistory, flaValidationHistory, flaMeanIoUHistory, flaValidationZEHistory, flaMeanIoUZEHistory, flaValidationEpochHistory).IsFail()) break;
-
GUI에서 확인 방법
Fig. GUI 프로퍼티에서 결과 확인(Epoch, Cost, Validation)
Fig. 학습 다이얼로그에서 현황 확인(Epoch, Average Cost, Validation)
Fig. 그래프 뷰에서 현황 확인(Cost, Average Cost, Validation)
6 GUI 설명
- Semantic Segmentation DL GUI 관련 설명입니다.
GUI Part 1 GUI Part 2 GUI Part 3 - Button
- 모델 기능을 수행하는 버튼입니다.
- Learn
- Execute
- Save
- Augmentation Preview
- Augmentation 결과를 미리 볼수 있는 기능을 수행합니다. Augmentation View가 설정되어있어야 합니다.
- Show Learned Labels
- 모델이 학습한 데이터 셋의 라벨 정보를 확인합니다.
- Clear Learned Data
- Load
- Make Pretrained Model
- 모델 기능을 수행하는 버튼입니다.
- Image
- 학습&검증 이미지를 설정합니다.
- Pretrained Model 파일을 설정합니다.
- Learn
- Inference
- Augmentation Preview
- Augmentation 결과를 확인할 이미지 뷰를 설정합니다.
- Parameters
- 공통, 학습, 추론 파라미터를 설정합니다.
- Commons
- Preprocessing
- Log
- 활성화 시 학습 정보가 Log파일에 기록됩니다.
- Memory Saving Mode
- Learn
- Inference
- Commons
- 공통, 학습, 추론 파라미터를 설정합니다.
- Learned Model Information
- 모델의 학습된 정보를 확인합니다.
- Pretrain
- Pretrained 모델이 적용 되었는지 나타내는 플래그입니다.
- Reset
- Labels
- 학습한 이미지의 정보를 확인합니다.
- Cost
- 모델의 Cost 값을 합니다.
- Validation
- 모델의 검증 값을 확인합니다.
- Time
- 모델의 학습 소요시간을 확인합니다.
- Pretrain
- 모델의 학습된 정보를 확인합니다.
-