Instance Segmentation DL
1 개요
- Instance Segmentation은 입력된 이미지에서의 객체를 픽셀 단위로 탐지하면서 동일한 클래스에 대해 인스턴스 단위로 구분하는 딥러닝 컴퓨터 비전 작업입니다. Segmentation과 다르게 동일한 클래스여도 동일한 객체가 아니면 구분되어 표시됩니다. 자체 개발된 R FL Seg Net을 통하여 고성능 결과를 얻을 수 있습니다.
Source | |
---|---|
Result | |
![]() |
![]() |
2 Instance Segmentation 사용 방법
1 데이터 셋 준비
-
Figure를 이용하여 라벨링이 된 Flif 형식의 학습 이미지
- 이미지에 Figure를 삽입하여 학습 이미지를 생성할 수 있습니다. Figure에는 반드시 이름이 들어가야 하며 "클래스 번호 (클래스 이름)" 형식이거나 "클래스 번호" 형식이여야 합니다.
- FLImaging에서 지원하는 모든 형식의 Figure로 라벨링할 수 있습니다. (라벨링 방법)
- 클래스 번호는 1번부터 시작해야 합니다.
Fig. 이미지의 이름이 있는 Figure를 삽입하여 만든 학습 데이터 샘플입니다.
Fig. 좌측 : Instance Segmentation 라벨링 우측 : Semantic Segmetnation 라벨링, Instance Segmetnation의 경우 반드시 인스턴스 별로 라벨링 해야합니다.
-
Group Labeling 을 이용한 Flif 형식의 학습 이미지
- Instance Segmentaiton의 Rect영역과 Region영역을 임의로 설정하여 학습을 하고 싶을 때 Group Labeling을 이용합니다.
- 두 개이상의 Figure를 드래그하여 Group(Ctrl+G)하여 라벨링을 적용 할 수 있으며 그룹 내의 Figure 중 "B"또는 "Box" 이름을 가진 피겨는 Boundary Rect를 지정하는데에만 사용됩니다.
Fig. Group 처리된 Figure를 삽입하여 만든 학습 데이터 샘플입니다.
Fig. 좌측 : 그룹 전 라벨링 우측 : 그룹된 라벨링, 그룹 되기전 Box로 지정할 피겨는 반드시 "B"또는 "Box" 이름으로 지정하여야 합니다.
2.2 학습
2.2.1. 학습 이미지 설정
2.2.2. 검증 이미지 설정(선택)
- 검증 지표
- mAP(mean Average precision)
- 정확도(precision)와 재현율(recall)을 이용하여 계산하는 지표입니다.
- 정확도(precision)
- 예측한 것 중에 진짜 정답인 비율입니다.
- Precision = TP / (TP + FP)
- TP = True Positive(정답도 Positive 예측도 Positive)
- FP = False Positive(정답은 Negative인데 예측은 Positive)
- 재현율(Recall)
- 정답 중에 예측에 성공한 비율입니다.
- Recall = TP / (TP + FN)
- FN = False Negative(정답은 Positive인데 예측은 Negative)
- 정확도(precision)
- 예측한 결과들을 Score로 정렬하여 각 Threshold마다 정확도와 재현율을 계산하여 PR곡선을만들고 PR곡선 아래 면적을 계산하여 AP를 구합니다.
Fig. PR Curve
- 각 클래스별 AP를 구하고 평균낸 것이 mAP입니다.
- 범위는 0~1이며 1로 갈수록 높은 성능을 나타냅니다.
- 정확도(precision)와 재현율(recall)을 이용하여 계산하는 지표입니다.
- mAP(mean Average precision)
2.2.3. 모델 설정
2.2.4. 옵티 마이저 설정
2.2.5. Augmentation 설정(선택)
2.2.6. 학습 수행
- Instance Segmentation 의 경우 종료 조건은 mAP 1이 나왔을 때 모두 맞췄다는 의미므로 1로 설정하는게 좋습니다.
- 추천 종료 조건
mAP >= 1
2.2.7. 조건 식
- 종료 조건(Stop Condition) & 자동 저장(Auto Save)에서 사용 가능한 조건 식 입니다.
- Common Conditional Expression
- Instance Segmentation Expression
변수명 설명 Stop Condition 예시 Auto Save 예시 map 클래스 별로 정밀도(Precision)와 재현율(Recall)을 이용하여 여러 임계값에서 Precision-Recall 곡선을 그리고, 그 면적을 계산한 값의 평균입니다. 0 ~ 1 범위를 가지며 1로 갈수록 좋은 결과를 나타냅니다. cost <= 0.3 & map >= 1 epoch >= 10 & map >= max('map') & map > 0 metric map가 metric 사용됩니다. cost <= 0 | metric >= 1 epoch >= 10 & metric >= max('metric') & metric > 0 validation map가 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
- 모델파일을 저장하거나 불러옵니다.
- 확장자는 .flis입니다.
3 필수 옵션
3.1 학습 필수 옵션
-
모델 설정
-
지원 모델
- R FL Seg Net(V1 128 / V1 256 / V1 512 / V1 1024)
- 포스로직만의 효율적인 최신 AI 모델 설계 구조를 바탕으로 구현된 정밀한 결과를 도출하는 이미지 탐지 모델입니다.
- 추천 버전은 V1 512입니다.
- Mask R CNN(V1 128 / V1 256 / v1 512 / V1 1024)
- R FL Seg Net(V1 128 / V1 256 / V1 512 / V1 1024)
-
API
SetModel(EModel eModel = EModel_FLSegNet)
eModel
: 학습에 사용할 모델을 설정합니다.
SetModelVersion(EModelVersion eModelVersion = EModelVersion_Mask_R_CNN_V1_512)
eModelVersion
: 학습에 사용할 모델의 버전을 설정합니다.
-
예제 코드
CResult res; CInstanceSegmentationDL instanceSegDL; if(IsFail(res = instanceSegDL.SetModel(CInstanceSegmentationDL::EModel_R_FLSegNet))) break; if(IsFail(res = instanceSegDL.SetModelVersion(CInstanceSegmentationDL::EModelVersion_R_FLSegNet_V1_512))) break;
-
GUI에서 설정 방법
-
Fig. GUI에서 사용할 모델을 설정하는 Dropdown List

Fig. GUI에서 사용한 모델 확인(학습 현황 다이얼로그)
3.2 추론 필수 옵션
4 선택 옵션
4.1 학습 선택 옵션
- 검증 이미지 설정
- 검증 이미지를 설정합니다. 검증 이미지는 라벨링이 되어있어야 합니다. 검증지표는 mAP입니다.
- 검증 옵션 설정
-
검증 옵션을 설정합니다.
-
API
SetLearningValidationStep(int32_t i32ValidationStep = 1)
SetValidationObjectnessThreshold(float f32Threshold)
- 검증에 사용할 객체 임계 값을 설정합니다.
SetValidationIoUThreshold(float f32Threshold)
- 검증에 사용할 IoU Threshold 값을 설정합니다.
- 검증 시 추론한 영역과 정답 영역의 IoU 임계 값입니다.
SetValidationNMSThreshold(float f32Threshold)
- 검증에 사용할 NMS 임계값을 설정합니다. 추천 값
0.5f
- 검증에 사용할 NMS 임계값을 설정합니다. 추천 값
SetValidationMaskThreshold(float f32Threshold)
- 검증에 사용할 Mask 임계값을 설정합니다.
-
예제 코드
CInstanceSegmentationDL isDL; if(isDL.SetLearningValidationStep(5).IsFail()) break; if(isDL.SetValidationObjectnessThreshold(0.5).IsFail()) break; if(isDL.SetValidationIoUThreshold(0.5).IsFail()) break; if(isDL.SetValidationMaskThreshold(0.5).IsFail()) break; if(isDL.SetValidationNMSThreshold(0.5).IsFail()) break;
-
GUI에서 사용 방법
Fig. GUI에서 검증 옵션 설정
-
- 옵티 마이저 설정
- Augmentation 설정
- 타일링 설정
- 이미지 전처리 설정
- 종료 조건 설정
- 자동 저장 조건 설정
- Class Equalization 설정
- Optimal Learning State Preservation 설정
- Pretrained Model 사용
- 이미지 당 최대 인스턴스 개수 설정
- 학습 시 이미지당 최대 인스턴스 개수를 설정합니다.
- API
SetLearningMaximumInstanceCount(int64_t i64MaximumInstanceCount = 128)
- GUI에서 설정 방법
Fig. GUI에서 학습 시 최대 인스턴스 개수 설정
4.2 추론 선택 옵션
-
추론 결과 옵션 설정
-
추론 결과 옵션을 설정합니다. Contour 혹은 Boundary Rect로 받을 수 있으며 클래스 번호, 클래스 이름, 스코어를 포함여부를 정할 수 있습니다.
-
추론 결과는 설정 된 ResultImage에 Figure로 출력 되게됩니다.
-
API
SetInferenceResultItemSettings(CInstanceSegmentationDL::EInferenceResultItemSettings eSetting)
- 출력 정보를 선택 합니다. IncludingRegionFigures flag가 true인 경우에만 표시됩니다.
- 출력 정보로는 Class Num, Class Name, Confidence Score를 선택할 수 있습니다.
- 기본 값으로 세 항목 모두 출력합니다.
- 기본 값
CInstanceSegmentationDL::EInferenceResultItemSettings_ClassNum_ClassName_Objectness_BoundaryRect_Contour
- 기본 값
SetInferenceResultObjectnessThreshold(float f32Threshold)
- 추론 시 결과의 객체 확신 값에 대한 임계 값을 설정합니다.
SetInferenceResultMaskThreshold(float f32Threshold)
- 추론 시 결과 마스크 영역의 값들에 대한 임계 값을 설정합니다.
SetInferenceResultNMSThreshold(float f32Threshold)
- 추론 시 NMS 임계 값을 설정합니다.
-
예제 코드
CInstanceSegmentationDL isDL; // 클래스 번호, 클래스 이름, 객체 확신 값, 바운더리 박스, 영역으로 출력되도록 설정 if(isDL.SetInferenceResultItemSettings(CInstanceSegmentationDL::EInferenceResultItemSettings_ClassNum_ClassName_Objectness_BoundaryRect_Contour).IsFail()) break; // Objectness Threshold 설정 if(isDL.SetInferenceResultObjectnessThreshold(0.5f).IsFail()) break; // Mask Threshold 설정 if(isDL.SetInferenceResultMaskThreshold(0.5f).IsFail()) break; // NMS Threshold 설정 if(isDL.SetInferenceResultNMSThreshold(0.5f).IsFail()) break;
-
GUI에서 사용 방법
Fig. GUI에서 추론 옵션 설정
이미지 당 최대 인스턴스 개수 설정
- 추론 시 이미지당 최대 인스턴스 개수를 설정합니다.
- API
SetInferenceMaximumInstanceCount(int64_t i64MaximumInstanceCount = 128)
- GUI에서 설정 방법
Fig. GUI에서 추론 시 최대 인스턴스 개수 설정
5 결과 출력
- Inference 결과 출력
- Inference & Inference Result Image 설정을 통해 설정한 Result Image에 추론 결과가 출력되어집니다.
- 옵션에 따라 라벨 값으로 이루어진 이미지 또는 찾은 영역의 Figure가 포함되게 됩니다.
- 학습 정보
-
학습 중 또는 학습이 완료된 마지막 결과를 얻어옵니다.
-
API
GetLearningResultLastMeanAP()
- 마지막 mAP(검증 Metric) 결과를 가져옵니다.
GetLearningResultMaxMeanAP()
- 최대 mAP(검증 Metric) 결과를 가져옵니다.
GetLearningResultMaxMeanAPCumulativeEpoch()
- 최대 학습 검증 MeanAP 결과의 에폭 수를 가져옵니다.
GetLearningResultAllHistory(Base::CFLArray<float>& flaCostHistory, Base::CFLArray<float>& flaValidationHistory, Base::CFLArray<int32_t>& flaValidationEpochHistory)
- 마지막 학습의 모든 결과를 가져옵니다.
- Cost, Accuracy, mIoU, ZE Accuracy, ZE mIoU, Validation Epoch
-
예제 코드
CInstanceSegmentationDL InstanceSegmentation; float f32ResultLastMeanAP; float f32ResultMaxMeanAP; int32_t i32ResultMaxMeanAPCumulativeEpoch; Base::CFLArray<float> flaCostHistory; Base::CFLArray<float> flaValidationHistory; Base::CFLArray<int32_t> flaValidationEpochHistory; f32ResultLastMeanAP = InstanceSegmentation.GetLearningResultLastMeanAP(); f32ResultMaxMeanAP = InstanceSegmentation.GetLearningResultMaxMeanAP(); i32ResultMaxMeanAPCumulativeEpoch = InstanceSegmentation.GetLearningResultMaxMeanAPCumulativeEpoch(); if(InstanceSegmentation.GetLearningResultAllHistory(flaCostHistory, flaValidationHistory, flaValidationEpochHistory).IsFail()) break;
-
GUI에서 확인 방법
Fig. GUI 프로퍼티에서 결과 확인(Epoch, Cost, Validation)
Fig. 학습 다이얼로그에서 현황 확인(Epoch, Cost, Validation)
Fig. 그래프 뷰에서 현황 확인(Cost, Validation)
-
-