Super Resolution DL
목차
1 개요
- Super Resolution 알고리즘은 저해상도 이미지를 고해상도 이미지로 복원하는 연산입니다.
- 저해상도와 고해상도 이미지를 가지고 학습을 진행합니다.
- 저해상도의 이미지를 고해상도의 이미지로 만들어줍니다.
Source | |
---|---|
Result | |
![]() |
![]() |
2 Super Resolution DL 사용 방법
1 데이터 셋 준비
- Super Resolution은 정상 이미지만 가지고 학습을 진행합니다.
2.2 학습
2.2.1. 학습 이미지 설정
2.2.2. 검증 이미지 설정
2.2.3. 모델 설정
2.2.4. 배율 설정
2.2.5. 옵티 마이저 설정
2.2.6. Augmentation 설정(선택)
2.2.7. 학습 수행
- Super Resolution 의 경우 PSNR 이 높을수록 SSIM 이 1에 가까울수록 좋은 결과 입니다.
- Super Resolution 의 경우 종료 조건은 45 PSNR 이상과 SSIM 0.95 정도로 설정 하는 게 적절합니다.
- 추천 종료 조건
SSIM >= 0.95 && PSNR >=45
2.2.8 조건 식
- 종료 조건(Stop Condition) & 자동 저장(Auto Save)에서 사용 가능한 조건 식 입니다.
- Common Conditional Expression
- Super Resolution 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 이미지가 고배율 확대됩니다.
2.4 Save/Load
- Save/Load
- 모델파일을 저장하거나 불러옵니다.
- 확장자는 .flsr입니다.
3 필수 옵션
3.1 학습 필수 옵션
-
Super Resolution 학습 이미지 설정
- Super Resolution 에 경우 저화질과 고화질 두 이미지를 설정해야 됩니다.
- 저화질 Learn Image 설정
SetLearningLowResolutionImage(const Base::CFLImage&)
SetLearningLowResolutionImage(const Base::CFLImage*)
- 고화질 Learn Image 설정
SetLearningHighResolutionImage(const Base::CFLImage&)
SetLearningHighResolutionImage(const Base::CFLImage*)
- 저화질 Learn Image 설정
- Super Resolution 에 경우 저화질과 고화질 두 이미지를 설정해야 됩니다.
-
Super Resolution 검증 이미지 설정(선택)
- Super Resolution 에 경우 저화질과 고화질 두 이미지를 설정해야 됩니다.
- 저화질 Validation Image 설정(선택)
SetLearningLowResolutionValidationImage(const Base::CFLImage&)
SetLearningLowResolutionValidationImage(const Base::CFLImage*)
- 고화질 Validation Image 설정(선택)
SetLearningHighResolutionValidationImage(const Base::CFLImage&)
SetLearningHighResolutionValidationImage(const Base::CFLImage*)
- 저화질 Validation Image 설정(선택)
- Super Resolution 에 경우 저화질과 고화질 두 이미지를 설정해야 됩니다.
-
모델 설정
- 지원 모델
- SRCNN(V1 32/V1 64/V1 128/V1 256/V1 512/V1 1024)
- super Resolution 분야에서 처음으로 CNN이 적용된 모델입니다.
- SRCNN(V1 32/V1 64/V1 128/V1 256/V1 512/V1 1024)
- API
SetModel(EModel eModel = EModel_SRCNN)
eModel
: 학습에 사용할 모델을 설정합니다.
SetModelVersion(EModelVersion eModelVersion = EModelVersion_SRCNN_V1_512)
eModelVersion
: 학습에 사용할 모델의 버전을 설정합니다.
- 지원 모델
-
배율 설정
- 저화질에서 고화질로 될 때 증가하는 크기를 배율로 설정할 수 있습니다.
- 학습 이미지를 해당 배율에 맞는 크기의 배율로 맞춰야 됩니다.
- Low Resolution Learning Image가 256일 경우 High Resolution Learning Image는 512를 입력해 줘야됩니다.
SetScaleRatio(int32_t i32ScaleRatio = 2)
- 학습 이미지를 해당 배율에 맞는 크기의 배율로 맞춰야 됩니다.
- 예제 코드
- 저화질에서 고화질로 될 때 증가하는 크기를 배율로 설정할 수 있습니다.
CSuperResolutionDL superResolutionDL;
CFLImage fliLearnLowResolutionImage;
SuperResolutionDL.SetLearningLowResolutionImage(&fliLearnLowResolutionImage);
CFLImage fliLearnHighResolutionImage;
SuperResolutionDL.SetLearningHighResolutionImage(&fliLearnHighResolutionImage);
CFLImage fliLowResolutionValidationImage;
SuperResolutionDL.SetLearningLowResolutionValidationImage(&fliLowResolutionValidationImage);
CFLImage fliHighResolutionValidationImage;
SuperResolutionDL.SetLearningHighResolutionValidationImage(&fliHighResolutionValidationImage);
superResolutionDL.SetScaleRatio(2);
superResolutionDL.SetModel(CSuperResolutionDL::EModel_FLDefNet);
superResolutionDL.SetModelVersion(CSuperResolutionDL::EModelVersion_SRCNN_V1_512);
- GUI에서 설정 방법

Fig. GUI에서 사용할 이미지를 설정하는 Dropdown List

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

Fig. GUI에서 사용할 배율을 설정하는 Dropdown List
3.2 추론 필수 옵션
4 선택 옵션
4.1 학습 선택 옵션
- 검증 이미지 설정
- 검증 이미지를 설정합니다. 정상 이미지만을 입력합니다.
- 옵티 마이저 설정
- Augmentation 설정
- 이미지 전처리 설정
- 종료 조건 설정
- 자동 저장 조건 설정
- Optimal Learning State Preservation 설정
- 배치 프로세싱 설정
5 결과 출력
- Inference 결과 출력
- Inference & Inference Result Image 설정을 통해 설정한 Result Image에 추론 결과가 출력 되어집니다.
- 저화질 이미지를 고화질 이미지로 만들어줍니다.
- 학습 정보
-
학습 중 또는 학습이 완료된 마지막 결과를 얻어옵니다.
-
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)
: Super Resolution 학습을 하면서 생성된 모든 학습 기록을 가져옵니다.(Parameter에 포인터 타입도 사용 가능)- Super Resolution 학습을 하면서 생성된 모든 학습 기록들을 가져옵니다.
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> 형태로 받아옵니다.
-
예제 코드
-
CSuperResolutionDL superResolutionDL;
///////////////////////////////////
// 필수 or 선택 옵션 설정
///////////////////////////////////
if(superResolutionDL.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 = superResolutionDL.GetLearningResultLastAccuracy();
//마지막 PSNR 값
f32LastPSNR = superResolutionDL.GetLearningResultLastPSNR();
//마지막 SSIM 값
f32LastSSIM = superResolutionDL.GetLearningResultLastSSIM();
//학습 진행하면서 나온 Maximum accuracy 값
f32MaxAccuracy = superResolutionDL.GetLearningResultMaximumAccuracy();
//학습 진행하면서 나온 Maximum PSNR 값
f32MaxPSNR = superResolutionDL.GetLearningResultMaximumPSNR();
//학습 진행하면서 나온 Maximum SSIM 값
f32MaxSSIM = superResolutionDL.GetLearningResultMaximumSSIM();
//Maximum accuracy가 나온 epoch
i32MaxAccEpoch = superResolutionDL.GetLearningResultMaximumAccuracyCumulativeEpoch();
//Maximum PSNR가 나온 epoch
i32MaxPSNREpoch = superResolutionDL.GetLearningResultMaximumPSNRCumulativeEpoch();
//Maximum SSIM가 나온 epoch
i32MaxSSIMEpoch = superResolutionDL.GetLearningResultMaximumSSIMCumulativeEpoch();
CFLArray<float> flaCostHistory;
CFLArray<float> flaValidationHistory;
CFLArray<float> flaPSNRHistory;
CFLArray<float> flaSSIMHistory;
CFLArray<int32_t> flaValidationEpochHistory;
superResolutionDL.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