Pix2Pix DL
목차
1 개요
- Pix2Pix 알고리즘은 이미지 대 이미지 변환 기능을 수행합니다.
- 입력 이미지와 목표 이미지를 가지고 학습을 진행합니다.
| Source | |
|---|---|
| Result | |
![]() |
![]() |
2 Pix2Pix DL 사용 방법
1 데이터 셋 준비
- Pix2Pix은 Input, Target 이미지쌍을 가지고 학습을 진행합니다.
2.2 학습
2.2.1. 학습 이미지 설정
2.2.2. 검증 이미지 설정
2.2.3. 모델 설정
2.2.4. 배율 설정
2.2.5. 옵티 마이저 설정
2.2.6. Augmentation 설정(선택)
2.2.7. 학습 수행
- Pix2Pix 의 경우 PSNR 이 높을수록 SSIM 이 1에 가까울수록 좋은 결과 입니다.
- Pix2Pix 의 경우 종료 조건은 45 PSNR 이상과 SSIM 0.95 정도로 설정 하는 게 적절합니다.
- 추천 종료 조건
SSIM >= 0.95 && PSNR >=45
2.2.8 조건 식
- 종료 조건(Stop Condition) & 자동 저장(Auto Save)에서 사용 가능한 조건 식 입니다.
- Common Conditional Expression
- Pix2Pix DL Expression
변수명 설명 Stop Condition 예시 Auto Save 예시 accuracy 상관계수로 Validation 이미지와 연산 결과의 이미지와의 선형적 관계를 나타내는 정확도 지표입니다. 0~1 범위를 가지며 1로 갈수록 좋은 결과입니다. cost <= 0.3 & accuracy >= 1 epoch >= 10 & accuracy >= max('accuracy') & accuracy > 0 psnr Validation 이미지와 연산 결과의 이미지와의 유사도를 평가하는 지표로 두 이미지 간의 픽셀 오차(Mean Squared Error)를 기반으로, 최대 픽셀값 대비 신호 대 잡음비를 로그 스케일로 측정하여 유사도를 평가하는 지표입니다. 0보다 큰 범위를 가지며 값이 클수록 좋은 결과입니다. cost <= 0.3 & psnr >= 45 epoch >= 10 & psnr >= max('psnr') & psnr > 0 ssim Validation 이미지와 연산 결과의 이미지간의 밝기, 대비, 구조 정보를 종합적으로 비교하여 사람의 시각 인식에 기반한 유사도를 평가하는 지표입니다. 0~1 범위를 가지며 1로 갈수록 좋은 결과입니다. cost <= 0 | ssim >= 1 epoch >= 10 & ssim >= max('ssim') & ssim > 0 metric `psnr`과 `ssim`이 metric 사용됩니다. cost <= 0 | metric >= 1 epoch >= 10 & metric >= max('metric') & metric > 0 validation accuracy가 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 추론
- 추론 이미지 & 결과 이미지 설정
- 추론 수행
- Source 이미지가 Target 이미지로 변환됩니다.
2.4 Save/Load
- Save/Load
- 모델파일을 저장하거나 불러옵니다.
- 확장자는 .flpp입니다.
3 필수 옵션
3.1 학습 필수 옵션
-
Pix2Pix 학습 이미지 설정
- Pix2Pix 의 경우 입력과 목표 두 이미지를 설정해야 됩니다.
- 저화질 Learn Image 설정
SetLearningImage(const Base::CFLImage&)SetLearningImage(const Base::CFLImage*)
- 고화질 Learn Image 설정
SetLearningTargetImage(const Base::CFLImage&)SetLearningTargetImage(const Base::CFLImage*)
- 저화질 Learn Image 설정
- Pix2Pix 의 경우 입력과 목표 두 이미지를 설정해야 됩니다.
-
Pix2Pix 검증 이미지 설정(선택)
- Pix2Pix 의 경우 입력과 목표 두 이미지를 설정해야 됩니다.
- 저화질 Validation Image 설정(선택)
SetLearningValidationImage(const Base::CFLImage&)SetLearningValidationImage(const Base::CFLImage*)
- 고화질 Validation Image 설정(선택)
SetLearningValidationTargetImage(const Base::CFLImage&)SetLearningValidationTargetImage(const Base::CFLImage*)
- 저화질 Validation Image 설정(선택)
- Pix2Pix 의 경우 입력과 목표 두 이미지를 설정해야 됩니다.
-
모델 설정
-
지원 모델
- FLGenNet_Pix2Pix(V1 32/V1 64/V1 128/V1 256/V1 512/V1 1024)
- GAN 방법론을 적용한 모델입니다.
- FLGenNet_Diffusion_Pix2Pix(V1 32/V1 64/V1 128/V1 256/V1 512/V1 1024)
- Denoising Diffusion 방식을 적용한 모델입니다.
- FLGenNet_Pix2Pix(V1 32/V1 64/V1 128/V1 256/V1 512/V1 1024)
-
API
SetModel(EModel eModel = EModel_FLGenNet_Pix2Pix)eModel: 학습에 사용할 모델을 설정합니다.
SetModelVersion(EModelVersion eModelVersion = EModelVersion_FLGenNet_Pix2Pix_V1_256)eModelVersion: 학습에 사용할 모델의 버전을 설정합니다.
-
예제 코드
-
CPix2PixDL pix2pixDL;
CFLImage fliLearnImage;
Pix2PixDL.SetLearningImage(&fliLearnImage);
CFLImage fliLearnTargetImage;
Pix2PixDL.SetLearningTargetImage(&fliLearnTargetImage);
CFLImage fliValidationImage;
Pix2PixDL.SetLearningValidationImage(&fliValidationImage);
CFLImage fliValidationTargetImage;
Pix2PixDL.SetLearningValidationTargetImage(&fliValidationTargetImage);
pix2pixDL.SetModel(CPix2PixDL::EModel_FLGenNet_Pix2Pix);
pix2pixDL.SetModelVersion(CPix2PixDL::EModelVersion_FLGenNet_Pix2Pix_V1_256);
- GUI에서 설정 방법
Fig. GUI에서 사용할 이미지를 설정하는 Dropdown List
Fig. GUI에서 사용할 모델을 설정하는 Dropdown List
3.2 추론 필수 옵션
3.3 추론 선택 옵션
- 추론 옵션 설정 (FLGenNet Diffusion Pix2Pix 모델 버전 한정)
- API
EnableInferenceFastMode(bool bFastMode = false)bFastMode: 빠른 생성 모드를 설정합니다.
- API
4 선택 옵션
4.1 학습 선택 옵션
- 검증 이미지 설정
- 검증 이미지를 설정합니다. 정상 이미지만을 입력합니다.
- 옵티 마이저 설정
- Augmentation 설정
- 이미지 전처리 설정
- 종료 조건 설정
- 자동 저장 조건 설정
- Optimal Learning State Preservation 설정
- 배치 프로세싱 설정
5 결과 출력
- Inference 결과 출력
- Inference & Inference Result Image 설정을 통해 설정한 Result Image에 추론 결과가 출력 되어집니다.
- Input 이미지를 Target 이미지로 만들어줍니다.
- 학습 정보
-
학습 중 또는 학습이 완료된 마지막 결과를 얻어옵니다.
-
API
GetLearningResultLastAccuracy(): 학습 중인 상태에서 가장 마지막 accuracy 값을 가져옵니다.GetLearningResultLastPSNR(): 학습 중인 상태에서 가장 마지막 PSNR 값을 가져옵니다.GetLearningResultLastSSIM(): 학습 중인 상태에서 가장 마지막 SSIM 값을 가져옵니다.GetLearningResultMaximumAccuracy(): 학습하면서 나온 가장 큰 accuracy 값을 가져옵니다.GetLearningResultMaximumPSNR(): 학습하면서 나온 가장 큰 PSNR 값을 가져옵니다.GetLearningResultMaximumSSIM(): 학습하면서 나온 가장 큰 SSIM 값을 가져옵니다.GetLearningResultMaximumAccuracyCumulativeEpoch(): 학습하면서 나온 가장 큰 accuracy 값이 나온 epoch을 가져옵니다.GetLearningResultMaximumPSNRCumulativeEpoch(): 학습하면서 나온 가장 큰 PSNR 값이 나온 epoch을 가져옵니다.GetLearningResultMaximumSSIMCumulativeEpoch(): 학습하면서 나온 가장 큰 SSIM 값이 나온 epoch을 가져옵니다.GetLearningResultAllHistory(Base::CFLArray<float>& flaCostHistory, Base::CFLArray<float>& flaValidationHistory, Base::CFLArray<float>& flaPSNRHistory, Base::CFLArray<float>& flaSSIMHistory, Base::CFLArray<int32_t>& flaValidationEpochHistory): Pix2Pix 학습을 하면서 생성된 모든 학습 기록을 가져옵니다.(Parameter에 포인터 타입도 사용 가능)- Pix2Pix 학습을 하면서 생성된 모든 학습 기록들을 가져옵니다.
flaCostHistory: 각 epoch에서 나온 cost 기록을 CFLArray<float> 형태로 받아옵니다.flaValidationHistory: 각 epoch에서 나온 validation 기록을 CFLArray<float> 형태로 받아옵니다.flaPSNRHistory: 각 epoch에서 나온 PSNR 기록을 CFLArray<float> 형태로 받아옵니다.flaSSIMHistory: 각 epoch에서 나온 SSIM 기록을 CFLArray<float> 형태로 받아옵니다.flaValidationEpochHistory: validation을 진행한 epoch들을 CFLArray<int32_t> 형태로 받아옵니다.
-
예제 코드
-
CPix2PixDL pix2pixDL;
///////////////////////////////////
// 필수 or 선택 옵션 설정
///////////////////////////////////
if(pix2pixDL.Learn().IsFail())
break;
// thread로 실행 시 학습 진행 중인 상태의 정보
// 일반 실행 시 마지막 학습 결과 정보
float f32LastAccuracy;
float f32LastPSNR;
float f32LastSSIM;
float f32MaxAccuracy;
float f32MaxPSNR;
float f32MaxSSIM;
int32_t i32MaxAccEpoch;
int32_t i32MaxPSNREpoch;
int32_t i32MaxSSIMEpoch;
//마지막 accuracy 값
f32LastAccuracy = pix2pixDL.GetLearningResultLastAccuracy();
//마지막 PSNR 값
f32LastPSNR = pix2pixDL.GetLearningResultLastPSNR();
//마지막 SSIM 값
f32LastSSIM = pix2pixDL.GetLearningResultLastSSIM();
//학습 진행하면서 나온 Maximum accuracy 값
f32MaxAccuracy = pix2pixDL.GetLearningResultMaximumAccuracy();
//학습 진행하면서 나온 Maximum PSNR 값
f32MaxPSNR = pix2pixDL.GetLearningResultMaximumPSNR();
//학습 진행하면서 나온 Maximum SSIM 값
f32MaxSSIM = pix2pixDL.GetLearningResultMaximumSSIM();
//Maximum accuracy가 나온 epoch
i32MaxAccEpoch = pix2pixDL.GetLearningResultMaximumAccuracyCumulativeEpoch();
//Maximum PSNR가 나온 epoch
i32MaxPSNREpoch = pix2pixDL.GetLearningResultMaximumPSNRCumulativeEpoch();
//Maximum SSIM가 나온 epoch
i32MaxSSIMEpoch = pix2pixDL.GetLearningResultMaximumSSIMCumulativeEpoch();
CFLArray<float> flaCostHistory;
CFLArray<float> flaValidationHistory;
CFLArray<float> flaPSNRHistory;
CFLArray<float> flaSSIMHistory;
CFLArray<int32_t> flaValidationEpochHistory;
pix2pixDL.GetLearningResultAllHistory(flaCostHistory, flaValidationHistory, flaPSNRHistory, flaSSIMHistory, 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

