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)을 이용하여 계산하는 지표입니다.
- Precision(정확도)
- 예측한 것 중에 진짜 정답인 비율입니다.
- 미탐지가 있더라도 탐지한 것들중에는 모두 정확한 탐지를 원하는 경우 해당 지표를 이용합니다. Precision이 제일 높게나올 때를 기준으로 모델을 얻어 목표를 달성할 수 있습니다.
- Precision = TP / (TP + FP)
- TP = True Positive(정답도 Positive 예측도 Positive)
- FP = False Positive(정답은 Negative인데 예측은 Positive)
- Recall(재현율)
- 정답 중에 예측에 성공한 비율입니다.
- 오탐지가 있더라도 불량을 하나라도 놓치지 않고 싶을 때 해당 지표를 이용합니다. Recall이 제일 높게 나올 때를 기준으로 기준으로 모델을 얻어 목표를 달성할 수 있습니다.
- Recall = TP / (TP + FN)
- FN = False Negative(정답은 Positive인데 예측은 Negative)
- Metric
- mAP가 Metric으로 사용되어집니다.
- 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 precision 예측한 것 중에 진짜 정답인 비율입니다. 0 ~ 1 범위를 가지며 1로 갈수록 좋은 결과를 나타냅니다. cost <= 0.3 & precision >= 1 epoch >= 10 & precision >= max('precision') & precision > 0 recall 정답 중에 예측에 성공한 비율입니다. 0 ~ 1 범위를 가지며 1로 갈수록 좋은 결과를 나타냅니다. cost <= 0.3 & recall >= 1 epoch >= 10 & recall >= max('recall') & recall > 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 모델 설계 구조를 바탕으로 구현된 정밀한 결과를 도출하는 이미지 탐지 모델입니다.
- R FL Seg Net V2 (V2 128 / V2 256 / V2 512 / V2 1024)
- R FL Seg Net V1에서 업그레이드된 버전입니다. V1보다 더 높은 정밀도를 갖췄습니다.
- 추천 버전은 V2 512입니다.
- Mask R CNN(V1 128 / V1 256 / v1 512 / V1 1024)
- Mask R-CNN은 Facebook AI Research(FAIR)에서 개발한 객체 인식·분할 모델입니다.
- R FL Seg Net(V1 128 / V1 256 / V1 512 / V1 1024)
-
API
SetModel(EModel eModel = EModel_R_FLSegNet_V2)eModel: 학습에 사용할 모델을 설정합니다.
SetModelVersion(EModelVersion eModelVersion = EModelVersion_R_FLSegNet_V2_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)- 출력 정보로는 Class Num, Class Name, Objectness 를 선택할 수 있습니다.
- 기본 값으로 세 항목 모두 출력합니다.
- 기본 값
CInstanceSegmentationDL::EInferenceResultItemSettings_ClassNum_ClassName_Objectness
- 기본 값
SetInferenceResultRegionFigureType(EInferenceResultRegionFigureType eInferenceResultRegionType)- 도형 종류를 섵개합니다.
- Region, BoundaryRectangle, MinimumEnclosingRectangle, Circle, Ellipse, ConvexHull을 선택할 수 있습니다.
- 기본 값으로 Region이 선정됩니다.
- 기본 값
CInstanceSegmentationDL::EInferenceResultRegionFigureType_Region
- 기본 값
SetInferenceResultObjectnessThreshold(float f32Threshold)- 추론 시 결과의 객체 확신 값에 대한 임계 값을 설정합니다.
SetInferenceResultMaskThreshold(float f32Threshold)- 추론 시 결과 마스크 영역의 값들에 대한 임계 값을 설정합니다.
SetInferenceResultNMSThreshold(float f32Threshold)- 추론 시 NMS 임계 값을 설정합니다.
-
예제 코드
CInstanceSegmentationDL isDL; // 클래스 번호, 클래스 이름, 객체 확신 값 설정 if(isDL.SetInferenceResultItemSettings(CInstanceSegmentationDL::EInferenceResultItemSettings_ClassNum_ClassName_Objectness).IsFail()) break; // Region, Boundary Rect 도형 타입 설정 if(isDL.SetInferenceResultRegionFigureType((CInstanceSegmentationDL::EInferenceResultRegionFigureType)(CInstanceSegmentationDL::EInferenceResultRegionFigureType_Region | CInstanceSegmentationDL::EInferenceResultRegionFigureType_BoundaryRectangle)).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 결과의 에폭 수를 가져옵니다.
GetLearningResultLastRecall()- 마지막 재현율을 가져옵니다.
GetLearningResultMaxRecall()- 마지막 최대 재현율을 가져옵니다.
GetLearningResultMaxRecallCumulativeEpoch()- 최대 재현율 시점의 에폭을 가져옵니다.
GetLearningResultLastPrecision()- 마지막 정확도를 가져옵니다.
GetLearningResultMaxPrecision()- 마지막 최대 정확도를 가져옵니다.
GetLearningResultMaxPrecisionCumulativeEpoch()- 최대 정확도 시점의 에폭을 가져옵니다.
GetLearningResultAllHistory(Base::CFLArray<float>& flaCostHistory, Base::CFLArray<float>& flaAvgCostHistory, Base::CFLArray<float>& flaValidationHistory, Base::CFLArray<int32_t>& flaValidationEpochHistory, Base::CFLArray<float>& flaRecallHistory, Base::CFLArray<float>& flaPrecisionHistory,)- 마지막 학습의 모든 결과를 가져옵니다.
-
예제 코드
CInstanceSegmentationDL instanceSegmentation; Base::CFLArray<float> flaCostHistory; Base::CFLArray<float> flaValidationHistory; Base::CFLArray<float> flaRecallHistory; Base::CFLArray<float> flaPrecisionHistory; Base::CFLArray<int32_t> flaValidationEpochHistory; float f32ResultLastMeanAP = instanceSegmentation.GetLearningResultLastMeanAP(); float f32ResultMaxMeanAP = instanceSegmentation.GetLearningResultMaxMeanAP(); int32_t i32ResultMaxMeanAPCumulativeEpoch = instanceSegmentation.GetLearningResultMaxMeanAPCumulativeEpoch(); float f32LastRecall = instanceSegmentation.GetLearningResultLastRecall(); float f32LastPrecision = instanceSegmentation.GetLearningResultLastPrecision(); int32_t i32ResultMaxRecallCumulativeEpoch = instanceSegmentation.GetLearningResultMaxRecallCumulativeEpoch(); float f32MaxRecall = instanceSegmentation.GetLearningResultMaxRecall(); float f32MaxPrecision = instanceSegmentation.GetLearningResultMaxPrecision(); int32_t i32ResultPrecisionAPCumulativeEpoch = instanceSegmentation.GetLearningResultMaxPrecisionCumulativeEpoch(); if(instanceSegmentation.GetLearningResultAllHistory(flaCostHistory, flaValidationHistory, flaValidationEpochHistory, flaRecallHistory, flaPrecisionHistory).IsFail()) break; -
GUI에서 확인 방법
Fig. GUI 프로퍼티에서 결과 확인(Epoch, Cost, Validation)
Fig. 학습 다이얼로그에서 현황 확인(Epoch, Cost, Validation)

-
-

