Generative Adversarial Network Inpainting DL
1 개요
- Generative Adversarial Network Inpainting(GAN - Inpainting) 알고리즘은 이미지의 원하는 부분을 특정 범주나 클래스의 범주에서 재생성하는 작업을 수행하는 머신 러닝 알고리즘입니다. 주로 이미지 생성 및 수정을 하는데 사용되며, 다양한 분야에서 활용이 가능합니다. 정상, 오류 이미지 등을을 생성할 때 Generative Adversarial Network Inpainting 을 사용용할 수 있습니다.
- FLImaging®의 Generative Adversarial Network Inpainting DL에서는 자체적으로 개발한 우수한 성능의 모델인 FLGenNet-Inpainting 을 제공하고 있습니다.
Source | |
---|---|
Result | |
![]() |
![]() |
2 Generative Adversarial Network Inpainting 사용 방법
1 데이터 셋 준비
-
Figure를 이용하여 라벨링이 된 Flif 형식의 학습 이미지
- 이미지에 Figure를 삽입하여 학습 이미지를 생성할 수 있습니다. Figure에는 반드시 이름이 들어가야 하며 "클래스 번호 (클래스 이름)" 형식이거나 "클래스 번호" 형식이여야 합니다.
- FLImaging에서 지원하는 모든 형식의 Figure로 라벨링할 수 있습니다. (라벨링 방법)
- 클래스 번호는 1번부터 시작해야 합니다.
- Figure 가 서로 겹치는 영역이 있어도 괜찮습니다.
Fig. 이미지의 이름이 있는 Figure를 삽입하여 만든 학습 데이터 샘플입니다.
2 학습
2.2.1. 학습 이미지 설정
2.2.2. 검증 이미지 설정(선택)
2.2.3. 모델 설정
2.2.4. 옵티 마이저 설정
2.2.5. Augmentation 설정(선택)
1. Generative Adversarial Network Inpainting 은 Augmentation 유형 중에서 Mix Method(ObjectMix, CutMix, MixUp, Mosaic)은 지원하지 않습니다.
2.2.6. 학습 수행
2.2.7. 조건 식
- 종료 조건(Stop Condition) & 자동 저장(Auto Save)에서 사용 가능한 조건 식 입니다.
- Common Conditional Expression
- Generative Adversarial Network Inpainting Conditonal Expression
변수명 설명 Stop Condition 예시 Auto Save 예시 ssim, metric.ssim Validation 이미지와 연산 결과의 이미지간의 밝기, 대비, 구조 정보를 종합적으로 비교하여 사람의 시각 인식에 기반한 유사도를 평가하는 지표입니다. 0~1 범위를 가지며 1로 갈수록 좋은 결과입니다. cost <= 0.3 & ssim >= 1 epoch >= 10 & ssim >= max('ssim') & ssim > 0 mrq, metric.mrq Mask Region Quality 의 약자로 값이 채워진 Mask(Label Figure) 영역을 원본 Validation 의 영역과 비교하여 얼마나 유사한가를 나타내는 척도입니다. 0 ~ 1 사이의 값을 가지며 1에 가까울수록 좋은 결과를 나타냅니다. cost <= 0 | mrq >= 1 epoch >= 10 & mrq >= max('mrq') & mrq > 0 metric `ssim`과 `mrq`가 metric으로 사용됩니다. cost <= 0 | metric >= 1 epoch >= 10 & metric >= max('metric') & metric > 0 validation `ssim`과 `mrq`가 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에서 자동 저장 조건 설정
- 종료 조건 식 설정
3 추론
4 Save/Load
- Save/Load
- 모델파일을 저장하거나 불러옵니다.
- 확장자는 .flgani입니다.
3 필수 옵션
1 Learn 이미지 설정
2 모델 설정
1 모델/버전
- Generative Adversarial Network Inpainting DL에서 사용할 모델 및 모델의 버전을 설정합니다.
- 모델의 크기도 결정됩니다.
- 지원 모델
- FLGenNet-Inpainting(V1 128/V1 256/V1 512/ V1 1024)
- 포스로직에서 자체적으로 개발한 FLNet 구조를 기반으로 하는 부분 생성형 모델입니다.
- FLGenNet-Inpainting(V1 128/V1 256/V1 512/ V1 1024)
2 API
SetModel(EModel eModel = EModel_FLGenNet_Inpainting)
eModel
: 학습에 사용할 모델을 설정합니다.
SetModelVersion(EModelVersion eModelVersion = EModelVersion_FLGenNet_Inpainting_V1_256)
eModelVersion
: 학습에 사용할 모델의 버전을 설정합니다. 생성 이미지의 size 를 설정할 수 있습니다.
3 예제 코드
CGenerativeAdversarialNetworkInpaintingDL generativeAdversarialNetworkDL;
generativeAdversarialNetworkDL.SetModel(CGenerativeAdversarialNetworkInpaintingDL::EModel_FLGenNet_Inpainting);
generativeAdversarialNetworkDL.SetModelVersion(CGenerativeAdversarialNetworkInpaintingDL::EModelVersion_FLGenNet_Inpainting_V1_256);
4 GUI에서 설정 방법

Fig. GUI에서 사용할 모델을 설정하는 Dropdown List

Fig. GUI에서 사용할 모델 버전을 설정하는 Dropdown List
5 추론 필수 옵션
4 선택 옵션
1 학습 선택 옵션
- 검증 이미지 설정
- 검증 이미지를 설정합니다. 검증 이미지는 라벨링이 되어있어야 합니다.
- 검증 옵션 설정
- 옵티 마이저 설정
- Augmentation 설정
- 이미지 전처리 설정
- 종료 조건 설정
- 자동 저장 조건 설정
- Class Equalization 설정
- Optimal Learning State Preservation 설정
2 생성 이미지 관련 설정
1 개요
- 생성 이미지 관련 가중치를를 설정합니다.
- 생성 이미지의 다양성을 위해 Input Noise 의 가중치를 설정 가능합니다.
2 API
SetInferenceNoiseFactor(float f32NoiseFactor = 1.f)
f32NoiseFactor
: Input Noise 의 가중치를 설정합니다.
3 예제 코드
CGenerativeAdversarialNetworkInpaintingDL generativeAdversarialNetworkDL;
CFLImage fliInferenceImage, fliInferenceResultImage;
generativeAdversarialNetworkDL.SetInferenceImage(fliInferenceImage);
generativeAdversarialNetworkDL.SetInferenceResultImage(fliInferenceResultImage);
generativeAdversarialNetworkDL.SetInferenceNoiseFactor(.5f);
generativeAdversarialNetworkDL.Execute();
3 추론 선택 옵션
-
추론 결과 옵션 설정
-
추론 결과 옵션을 설정합니다. Contour로 받을 수 있으며 스코어를 포함 여부를 정할 수 있습니다.
-
추론 결과는 설정 된 Result Image에 Figure로 출력 되게됩니다.
-
API
SetInferenceResultItemSettings(CGenerativeAdversarialNetworkInpaintingDL::EInferenceResultItemSettings eSetting)
- 출력 정보를 선택 합니다. IncludingRegionFigures flag가 true인 경우에만 표시됩니다.
- 출력 정보로는 Class Num, Class Name 를 선택할 수 있습니다.
- 기본 값으로 Class Num, Class Name을 포함하는 Contour 를 출력합니다.
- 기본 값
CGenerativeAdversarialNetworkInpaintingDL::EInferenceResultItemSettings_ClassNum_ClassName_Contour
- 기본 값
-
예제 코드
CGenerativeAdversarialNetworkInpaintingDL generativeAdversarialNetworkDL; // 클래스 번호, 클래스 이름, 영역으로 출력되도록 설정 if(generativeAdversarialNetworkDL.SetInferenceResultItemSettings(CGenerativeAdversarialNetworkInpaintingDL::EInferenceResultItemSettings_ClassNum_ClassName_Contour).IsFail()) break;
-
GUI에서 사용 방법
Fig. GUI에서 추론 옵션 설정
5 결과 출력
1 모델 정보
1 개요
- 학습에 사용된 모델 정보를 얻어옵니다.
2 API
GetModel()
: 사용된 학습 모델을 반환합니다.GetModelVersion()
: 사용된 학습 모델의 버전을 반환합니다.
3 예제 코드
CGenerativeAdversarialNetworkInpaintingDL generativeAdversarialNetworkDL; FLImaging::AI::CGenerativeAdversarialNetworkInpaintingDL::EModel model; FLImaging::AI::CGenerativeAdversarialNetworkInpaintingDL::EModelVersion modelVersion; model = generativeAdversarialNetworkDL.GetModel(); modelVersion = generativeAdversarialNetworkDL.GetModelVersion();
4 GUI에서 확인하는 방법
아래 이미지와 같이 학습을 시작한 후 나오는 dialog 창의 model 항목을 확인하거나, 로드한 학습 정보 파일은 Parameter – Learn – Model/Model Version 항목에서 현재 사용하는 모델 정보를 확인할 수 있습니다.
Fig. 학습 시 출력되는 Dialog 창에서 Model에 대한 정보가 출력되는 부분2 학습 정보 출력
1 개요
- 학습 중 또는 학습이 완료된 마지막 결과를 얻어옵니다.
2 API
GetLearningResultLastSSIM()
: 학습 중인 상태에서 가장 마지막 SSIM 값을 가져옵니다.GetLearningResultLastMRQ()
: 학습 중인 상태에서 가장 마지막 MRQ(Mask Region Quality) 값을 가져옵니다.GetLearningResultMaximumSSIM()
: 학습하면서 나온 가장 큰 SSIM 값을 가져옵니다.GetLearningResultMaximumMRQ()
: 학습하면서 나온 가장 큰 MRQ 값을 가져옵니다.GetLearningResultMaximumSSIMCumulativeEpoch()
: 학습하면서 나온 가장 큰 SSIM 값이 나온 epoch을 가져옵니다.GetLearningResultMaximumMRQCumulativeEpoch()
: 학습하면서 나온 가장 큰 MRQ가 나온 epoch을 가져옵니다.GetLearningResultAllHistory(Base::CFLArray<float>& flaCostHistory, Base::CFLArray<float>& flaSSIMHistory, Base::CFLArray<float>& flaMRQHistory, Base::CFLArray<int32_t>& flaValidationEpochHistory)
: Generative Adversarial Network Inpainting 학습을 하면서 생성된 모든 학습 기록들을 가져옵니다.(Parameter에 포인터 타입도 사용 가능)- Generative Adversarial Network Inpainting 학습을 하면서 생성된 모든 학습 기록들을 가져옵니다.
flaCostHistory
: 각 epoch에서 나온 cost 기록을 CFLArray<float> 형태로 받아옵니다.flaSSIMHistory
: 각 epoch에서 나온 SSIM 기록을 CFLArray<float> 형태로 받아옵니다.flaMRQHistory
: 각 epoch에서 나온 MRQ 기록을 CFLArray<float> 형태로 받아옵니다.flaValidationEpochHistory
: validation을 진행한 epoch들을 CFLArray<int32_t> 형태로 받아옵니다.
3 예제 코드
CGenerativeAdversarialNetworkInpaintingDL generativeAdversarialNetworkDL; /////////////////////////////////// // 필수 or 선택 옵션 설정 /////////////////////////////////// generativeAdversarialNetworkDL.Learn(); float f32LastSSIM; float f32LastMRQ; float f32MaxSSIM; float f32MaxMRQ; int32_t i32MaxAccEpoch; int32_t i32MaxMRQEpoch; //마지막 SSIM 값 f32LastSSIM = generativeAdversarialNetworkDL.GetLearningResultLastSSIM(); //마지막 MRQ f32LastMRQ = generativeAdversarialNetworkDL.GetLearningResultLastMRQ(); //학습 진행하면서 나온 Maximum SSIM 값 f32MaxSSIM = generativeAdversarialNetworkDL.GetLearningResultMaximumSSIM(); //학습 진행하면서 나온 Maximum MRQ f32MaxMRQ = generativeAdversarialNetworkDL.GetLearningResultMaximumMRQ(); //Maximum SSIM가 나온 epoch i32MaxAccEpoch = generativeAdversarialNetworkDL.GetLearningResultMaximumSSIMCumulativeEpoch(); //Maximum MRQ가 나온 epoch i32MaxMRQEpoch = generativeAdversarialNetworkDL.GetLearningResultMaximumMRQCumulativeEpoch(); CFLArray<float> flaCostHistory; CFLArray<float> flaSSIMHistory; CFLArray<float> flaMRQHistory; CFLArray<int32_t> flaValidationEpochHistory; generativeAdversarialNetworkDL.GetLearningResultAllHistory(flaCostHistory, flaSSIMHistory, flaMRQHistory, flaValidationEpochHistory);
4 GUI에서 확인하는 방법
- 학습을 시작하면 나오는 Dialog의 Show info 버튼을 눌러 확장하여 아래와 같이 표시한 부분에서 관련된 데이터들을 확인할 수 있습니다.
Fig. Dialog 창에서 출력되는 학습 결과 정보
- property 창의 Learned Model Information의 Epoch과 Validation 항목의 표시된 부분에서 해당 함수와 관련된 데이터들을 확인할 수 있습니다.
Fig. Property 창에서 출력되는 학습 결과 정보
- All Histories의 경우 학습이 진행되면 프로그램 하단의 graph view에서 실시간으로 학습이 진행되면서 나온 cost 및 validation 등의 기록들을 확인할 수 있습니다.
Fig. 학습 결과가 출력되는 Graph View
-