Instance Segmentation 3D DL
1 개요
- Instance Segmentation 3D는 입력된 Texture 이미지에서의 객체를 픽셀 단위로 탐지하면서 동일한 클래스에 대해 인스턴스 단위로 구분하고, 그러한 결과 Figure 를 ROI 로 하여 각각의 Texture 이미지와 쌍이 되는 Depth Map 이미지를 Point Cloud 정보로 변환 및 3D Match 를 수행하는 딥러닝/3D 통합 컴퓨터 비전 작업입니다.
| Texture | Depth Map | AI Result | 3D Result |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
2 Instance Segmentation 3D 사용 방법
2.1 데이터 셋 준비
-
각 객체의 라벨링 방식은 Instance Segmentation 의 방식과 동일합니다. Depth Map 이미지에서는 별도의 라벨링을 필요로 하지 않습니다.[학습 이미지 설정]
-
추가적으로 3D Model 학습을 위한 각 클래스 번호별 대표 객체를 선정해야합니다.
- "@M" 이름으로 특정 영역을 라벨링하여 결정할 수 있습니다. 해당 영역과 겹치는 부분이 존재하는 객체들이 대표 객체가 되어 3D Model 로 학습됩니다.
- 대표 객체의 개수가 전체 클래스의 개수와 같지 않거나, 대표 객체가 2개 이상인 클래스가 존재할 경우 학습을 진행할 수 없습니다.
Fig. 대표 객체 지정 예시
2.2 학습
2.2.1. 학습 이미지 설정
- Depth Map 이미지 설정
SetLearningDepthMap(const Base::CFLImage&)SetLearningDepthMap(const Base::CFLImage*)
2.2.2. 검증 이미지 설정(선택)
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
2.3 추론
- 추론 이미지 & 결과 이미지 설정
- Depth Map 이미지 설정
SetInferenceDepthMap(const Base::CFLImage&)SetInferenceDepthMap(const Base::CFLImage*)
- Depth Map 이미지 설정
- 추론 수행
- 추론 결과 옵션 설정
2.4 Save/Load
- Save/Load
- 모델파일을 저장하거나 불러옵니다.
- 확장자는 .flis3입니다.
3 필수 옵션
3.1 학습 필수 옵션
- Learn 이미지 설정
- 추가적으로 학습 이미지(Texture)와 쌍이 되는 Depth Map 이미지 설정이 필요합니다. 학습 이미지와 Page 수가 같지 않을 경우 학습을 수행할 수 없습니다.
SetLearningDepthMap(const Base::CFLImage&)SetLearningDepthMap(const Base::CFLImage*)
- 추가적으로 학습 이미지(Texture)와 쌍이 되는 Depth Map 이미지 설정이 필요합니다. 학습 이미지와 Page 수가 같지 않을 경우 학습을 수행할 수 없습니다.
- Instance Segmentation 모델 설정
3.2 추론 필수 옵션
- Inference & Inference Result Image 설정
- 추가적으로 추론 이미지(Texture)와 쌍이 되는 Depth Map 이미지 설정이 필요합니다. 추론 이미지와 Page 수가 같지 않을 경우 추론을 수행할 수 없습니다.
SetInferenceDepthMap(const Base::CFLImage&)SetInferenceDepthMap(const Base::CFLImage*)
- 추가적으로 추론 이미지(Texture)와 쌍이 되는 Depth Map 이미지 설정이 필요합니다. 추론 이미지와 Page 수가 같지 않을 경우 추론을 수행할 수 없습니다.
4 선택 옵션
4.1 학습 선택 옵션
- Instance Segmentation 옵션 설정
- 3D Match 알고리즘을 선택할 수 있습니다.
SetMatch3DMode(EMatch3DMode eMatch3DMode = EMatch3DMode_Vertex)- EMatch3DMode_Vertex : Vertex Match 3D
- EMatch3DMode_Surface : Surface Match 3D
- 3D Match 관련 파라미터를 설정합니다.
SetLearningMatch3DParameters(double f64SamplingDistance = 0.03, double f64AngleThreshold = 30.0)- 학습 시의 Match 3D 파라미터를 설정합니다.
- f64SamplingDistance : 샘플링 거리
- f64AngleThreshold : 각도 임계 값
- GUI에서 설정 방법
Fig. Learning Match 3D 파라미터 설정
- Depth Map 이미지를 Point Cloud 3D Object 로 변환하기 위한 Camera Calibrator 파라미터를 설정합니다.
SetLearningCameraCalibrator(const Foundation::CFLPoint<float>& flpFocalLength, const Foundation::CFLPoint<float>& flpPrincipalPoint, float f32DepthScale, const Base::CFLArray<double>& flaDistortionCoefficient, ThreeDim::EDirectionType eDirectionType)- Camera Calibrator 정보를 설정합니다.
- flpFocalLength, flpPrincipalPoint : 카메라의 초점 거리 및 주점
- flaDistortionCoeff : 카메라 왜곡 계수
- eDirectionType : z축의 방향
- GUI에서 설정 방법
Fig. Learning Camera Calibrator 설정
4.2 추론 선택 옵션
- Instance Segmentation 옵션 설정
- 3D Match 관련 파라미터를 설정합니다.
SetInferenceMatch3DParameters(Foundation::EEulerSequence eEulerSequence = Foundation::EEulerSequence_Extrinsic_XYZ, double f64SamplingDistance = 0.03, double f64KeypointRatio = 0.5, double f64MinScore = 0.5, double f64InitialScore = 0.3)- 추론 시의 Match 3D 파라미터를 설정합니다.
- eEulerSequence : 회전 순서
- f64SamplingDistance : 샘플링 거리
- f64KeypointRatio : 키포인트 비율
- f64MinScore : 최소 점수
- f64InitialScore : 초기 점수 임계 값
- GUI에서 설정 방법
Fig. Inference Match 3D 파라미터 설정
- Depth Map 이미지를 Point Cloud 3D Object 로 변환하기 위한 Camera Calibrator 파라미터를 설정합니다.
SetInferenceCameraCalibrator(const Foundation::CFLPoint<float>& flpFocalLength, const Foundation::CFLPoint<float>& flpPrincipalPoint, float f32DepthScale, const Base::CFLArray<double>& flaDistortionCoefficient, ThreeDim::EDirectionType eDirectionType)- Camera Calibrator 정보를 설정합니다.
- flpFocalLength, flpPrincipalPoint : 카메라의 초점 거리 및 주점
- flaDistortionCoeff : 카메라 왜곡 계수
- eDirectionType : z축의 방향
- GUI에서 설정 방법
Fig. Inference Camera Calibrator 설정
5 결과 출력
- Inference 결과 출력
- Instance Segmentation 결과 출력
- 3D Match 결과 출력
-
API
GetInferenceResultObjectGroupCount()- 3D Match 결과인 오브젝트 그룹의 개수를 가져옵니다. 사용된 Depth Map 이미지의 페이지 개수와 동일합니다.
GetInferenceResultObjectGroup(int64_t i64PageIndex, Foundation::CFL3DObjectGroup& floResult)- 입력한 페이지 인덱스의 3D 오브젝트 그룹을 가져옵니다.
GetInferenceResultObjectGroup(int64_t i64PageIndex, Foundation::CFL3DObjectGroup* pFloResult)- 입력한 페이지 인덱스의 3D 오브젝트 그룹을 가져옵니다.
IsInferenceResultPoseMatrixEnabled(int64_t i64PageIndex, int64_t i64ObjectIndex)- 입력한 페이지 인덱스와 오브젝트 인덱스의 객체가 매칭되었는지 여부를 반환합니다.
GetInferenceResultPoseMatrix(int64_t i64PageIndex, int64_t i64ObjectIndex, ThreeDim::SPoseMatrixParametersMulti& sResult)- 입력한 페이지 인덱스와 오브젝트 인덱스의 결과 포즈 행렬 파라미터를 가져옵니다.
-
예제 코드
CInstanceSegmentation3DDL instanceSegmentation3DDL; int64_t i64PageCount = instanceSegmentation3DDL.GetInferenceResultObjectGroupCount(); for(int64_t i = 0; i < i64PageCount; i++) { CFL3DObjectGroup flogResult; instanceSegmentation3DDL.GetInferenceResultObjectGroup(i, flogResult); int64_t i64ResultCount = flogResult.GetObjectCount(); for(int64_t j = 0; j < i64ResultCount; j++) { const CFL3DObject* pFloResult = flogResult.GetObjectByIndex(j); SPoseMatrixParametersMulti sResult; instanceSegmentation3DDL.GetInferenceResultPoseMatrix(i, j, sResult); } }
-
- 학습 정보
- Instance Segmentation 학습 정보 출력
- 3D Model 정보 출력
-
API
GetLearned3DModelCount()- 3D Model 개수를 가져옵니다.
GetLearned3DModelClassName(Base::CFLString<wchar_t>& strClassName, int64_t i64Index = 0)- 입력한 인덱스의 3D model 클래스 이름을 가져옵니다. 학습한 각 대표 객체의 클래스 번호와 동일합니다.
GetLearned3DModelSampleObject(const Base::CFLString<wchar_t>& strClassName, Foundation::CFL3DObject* pFloSampledLearn)- 입력한 클래스 이름의 3D 오브젝트를 가져옵니다.
-
예제 코드
CInstanceSegmentation3DDL instanceSegmentation3DDL; int64_t i64ModelCount = instanceSegmentation3DDL.GetLearned3DModelCount(); for(int64_t i = 0; i < i64ModelCount; i++) { CFLString<wchar_t> flsClassName; CFL3DObject floLearned; instanceSegmentation3DDL.GetLearned3DModelClassName(flsClassName, i); instanceSegmentation3DDL.GetLearned3DModelSampleObject(flsClassName, &floLearned); } -
GUI에서 확인 방법
Fig. Learned Sample Object 확인
-
6 추론 결과 검증
- 검증 이미지를 이용하여 추론한 결과를 분석 할 수 있습니다.
- 추론 결과 검증



