Validation Image Extractor DL은 딥러닝 데이터 셋을 Learn 이미지와 Validation 이미지로 분리 해주는 알고리즘입니다. Validation 이미지 비율, Validation에 포함되는 최소 클래스 개수를 정하여 손쉽게 Learn, Validation Training Set으로 분리할 수 있습니다.
Source
Result(Learn)
Result(Validation)
Fig. ValidationImageExtractorDL 동작 수행 결과. 184장의 데이터 셋을 Validation 이미지 비율 0.2로 설정하여 148장의 Learn 셋과 36장의 Validation 셋으로 분리
2 API
Execute()
로직 실행 함수입니다.
SetSourceImage(CFLImage)
소스 이미지를 설정합니다.
CFLImage : 설정할 소스 이미지입니다.
SetResultLearningImage(CFLImage)
결과로 받을 학습 이미지를 설정합니다.
CFLImage : 결과 학습 이미지입니다.
SetResultValidationImage(CFLImage)
결과로 받을 검증 이미지를 설정합니다.
CFLImage : 결과 검증 이미지입니다.
SetDatasetType(EDatasetType)
데이터 셋 종류를 선택합니다.
EDatasetType : 데이터셋 종류 입니다. EDatasetType_Classifier, EDatasetType_SemanticSegmentation, EDatasetType_ObjectDetection, EDatasetType_InstanceSegmentation,EDatasetType_CharacterBasedOCR 을 지원합니다.
SetValidationRatio(float)
Validatino 이미지 비율을 설정합니다.
float : Validation 이미지 비율입니다.
SetMinimumClassesIncluded(int32_t)
Validatino Set안의 포함될 최소 클래스 개수를 설정합니다.
int32_t : Validation Set안의 포함될 최소 클래스 개수입니다. 기본 값 : -1, -1로 설정 시 데이터 셋의 모든 클래스가 최소 하나씩은 Validation에 포함 되어집니다..
3 예제 코드:
// Semantic Segmentation Dataset Extract
CResult res;
CFLImage fliSource;
CFLImage fliLearn;
CFLImage fliValidation;
float f32ValidationRatio = 0.25f;
CValidationImageExtractorDL::EDatasetType eDatasetType = CValidationImageExtractorDL::EDatasetType_SemanticSegmentation;
int32_t i32MinimumClassesIncluded = -1;
if(IsFail(res = fliSource.Load(L"../../ExampleImages/SemanticSegmentation/Train.flif"))) // 지정된 경로에서 파일을 로드break;
CValidationImageExtractorDL validationImageExtractor;
validationImageExtractor.SetSourceImage(fliSource);
validationImageExtractor.SetResultLearningImage(fliLearn);
validationImageExtractor.SetResultValidationImage(fliValidation);
validationImageExtractor.SetDatasetType(eDatasetType);
validationImageExtractor.SetValidationRatio(f32ValidationRatio);
validationImageExtractor.SetMinimumClassesIncluded(i32MinimumClassesIncluded);
if(IsFail(res = validationImageExtractor.Execute())) // 알고리즘 수행break;
if(IsFail(res = fliLearn.Save(L"../../ExampleImages/SemanticSegmentation/Learn.flif"))) // 결과로 나온 Learn dataset을 지정된 경로에 저장break;
if(IsFail(res = fliValidation.Save(L"../../ExampleImages/SemanticSegmentation/Validation.flif"))) // 결과로 나온 Validation dataset을 지정된 경로에 저장break;
// Semantic Segmentation Dataset Extract
CResult res = new CResult();
CFLImage fliSource = new CFLImage();
CFLImage fliLearn = new CFLImage();
CFLImage fliValidation = new CFLImage();
float f32ValidationRatio = 0.25f;
CValidationImageExtractorDL.EDatasetType eDatasetType = CValidationImageExtractorDL.EDatasetType.SemanticSegmentation;
int i32MinimumClassesIncluded = -1;
if((res = fliSource.Load("../../ExampleImages/SemanticSegmentation/Train.flif")).IsFail()) // 지정된 경로에서 파일을 로드break;
CValidationImageExtractorDL validationImageExtractor = new CValidationImageExtractorDL();
validationImageExtractor.SetSourceImage(ref fliSource);
validationImageExtractor.SetResultLearningImage(ref fliLearn);
validationImageExtractor.SetResultValidationImage(ref fliValidation);
validationImageExtractor.SetDatasetType(eDatasetType);
validationImageExtractor.SetValidationRatio(f32ValidationRatio);
validationImageExtractor.SetMinimumClassesIncluded(i32MinimumClassesIncluded);
if((res = validationImageExtractor.Execute()).IsFail()) // 알고리즘 수행break;
if((res = fliLearn.Save("../../ExampleImages/SemanticSegmentation/Learn.flif")).IsFail()) // 결과로 나온 Learn dataset을 지정된 경로에 저장break;
if((res = fliValidation.Save("../../ExampleImages/SemanticSegmentation/Validation.flif")).IsFail()) // 결과로 나온 Validation dataset을 지정된 경로에 저장break;
# Semantic Segmentation Dataset Extract
fliSource = CFLImage()
fliLearn = CFLImage()
fliValidation = CFLImage()
f32ValidationRatio = 0.25
eDatasetType = CValidationImageExtractorDL.EDatasetType.SemanticSegmentation
i32MinimumClassesIncluded = -1
fliSource.Load("../../ExampleImages/SemanticSegmentation/Train.flif") # 지정된 경로에서 파일을 로드
validationImageExtractor = CValidationImageExtractorDL()
validationImageExtractor.SetSourceImage(fliSource)
validationImageExtractor.SetResultLearningImage(fliLearn)
validationImageExtractor.SetResultValidationImage(fliValidation)
validationImageExtractor.SetDatasetType(eDatasetType)
validationImageExtractor.SetValidationRatio(f32ValidationRatio)
validationImageExtractor.SetMinimumClassesIncluded(i32MinimumClassesIncluded)
validationImageExtractor.Execute() # 알고리즘 수행
fliLearn.Save("../../ExampleImages/SemanticSegmentation/Learn.flif") # 결과로 나온 Learn dataset을 지정된 경로에 저장
fliValidation.Save("../../ExampleImages/SemanticSegmentation/Validation.flif") # 결과로 나온 Validation dataset을 지정된 경로에 저장
// Classifier Dataset Extract
CResult res;
CFLImage fliSource;
CFLImage fliLearn;
CFLImage fliValidation;
float f32ValidationRatio = 0.50f;
CValidationImageExtractorDL::EDatasetType eDatasetType = CValidationImageExtractorDL::EDatasetType_Classifier;
int32_t i32MinimumClassesIncluded = -1;
if(IsFail(res = fliSource.Load(L"../../ExampleImages/SemanticSegmentation/Train.flif"))) // 지정된 경로에서 파일을 로드break;
CValidationImageExtractorDL validationImageExtractor;
validationImageExtractor.SetSourceImage(fliSource);
validationImageExtractor.SetResultLearningImage(fliLearn);
validationImageExtractor.SetResultValidationImage(fliValidation);
validationImageExtractor.SetDatasetType(eDatasetType);
validationImageExtractor.SetValidationRatio(f32ValidationRatio);
validationImageExtractor.SetMinimumClassesIncluded(i32MinimumClassesIncluded);
if(IsFail(res = validationImageExtractor.Execute())) // 알고리즘 수행break;
if(IsFail(res = fliLearn.Save(L"../../ExampleImages/SemanticSegmentation/Learn.flif"))) // 결과로 나온 Learn dataset을 지정된 경로에 저장break;
if(IsFail(res = fliValidation.Save(L"../../ExampleImages/SemanticSegmentation/Validation.flif"))) // 결과로 나온 Validation dataset을 지정된 경로에 저장break;
// Classifier Dataset Extract
CResult res = new CResult();
CFLImage fliSource = new CFLImage();
CFLImage fliLearn = new CFLImage();
CFLImage fliValidation = new CFLImage();
float f32ValidationRatio = 0.25f;
CValidationImageExtractorDL.EDatasetType eDatasetType = CValidationImageExtractorDL.EDatasetType.Classifier;
int i32MinimumClassesIncluded = -1;
if((res = fliSource.Load("../../ExampleImages/SemanticSegmentation/Train.flif")).IsFail()) // 지정된 경로에서 파일을 로드break;
CValidationImageExtractorDL validationImageExtractor = new CValidationImageExtractorDL();
validationImageExtractor.SetSourceImage(ref fliSource);
validationImageExtractor.SetResultLearningImage(fliLearn);
validationImageExtractor.SetResultValidationImage(ref fliValidation);
validationImageExtractor.SetDatasetType(eDatasetType);
validationImageExtractor.SetValidationRatio(f32ValidationRatio);
validationImageExtractor.SetMinimumClassesIncluded(i32MinimumClassesIncluded);
if((res = validationImageExtractor.Execute()).IsFail()) // 알고리즘 수행break;
if((res = fliLearn.Save("../../ExampleImages/SemanticSegmentation/Learn.flif")).IsFail()) // 결과로 나온 Learn dataset을 지정된 경로에 저장break;
if((res = fliValidation.Save("../../ExampleImages/SemanticSegmentation/Validation.flif")).IsFail()) // 결과로 나온 Validation dataset을 지정된 경로에 저장break;