Anomaly Detection DL

목차

  1. 개요
  2. 사용 방법
  3. 필수 옵션
  4. 선택 옵션
  5. 결과 출력

1 개요

Source
Result
Source Result

2 Anomaly Detection DL 사용 방법

1 데이터 셋 준비

  1. Anomaly Detection은 정상 이미지만 가지고 학습을 진행합니다.

2.2 학습

2.2.1. 학습 이미지 설정
2.2.2. 검증 이미지 설정(선택)
2.2.3. 모델 설정
2.2.4. 옵티 마이저 설정
2.2.5. Augmentation 설정(선택)
2.2.6. 학습 수행
  1. Anomaly Detection 의 경우 정상적인 이미지가 무엇인지 학습이 필요하므로 오랜 시간 학습이 필요합니다.
  2. Anomaly Detection 의 경우 종료 조건은 3000 epoch 이상과 Validation 0.95 정도로 설정 하는 게 적절합니다.
  3. 추천 종료 조건
    1. validation >= 0.95 && epoch >=3000
2.2.7. 조건 식
  1. 종료 조건(Stop Condition) & 자동 저장(Auto Save)에서 사용 가능한 조건 식 입니다.
  2. Common Conditional Expression
  3. Anomaly Detection DL Conditonal Expression
    변수명 설명 Stop Condition 예시 Auto Save 예시
    accuracy 상관계수로 Validation 이미지와 연산 결과의 이미지와의 선형적 관계를 나타내는 정확도 지표입니다. 0~1 범위를 가지며 1로 갈수록 좋은 결과입니다. cost <= 0.3 & accuracy >= 1 epoch >= 10 & accuracy >= max('accuracy') & accuracy > 0
    metric accuracy가 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
  4. GUI 에서 설정 방법
    1. 종료 조건 식 설정
      1. cost <= 0 | validation >= 1 | metric >= 1
      Graph View Result

      Fig. GUI에서 종료 조건 설정
    2. 자동 저장 조건 식설정
      1. epoch >= 10 & metric >= max('metric') & metric > 0
      Graph View Result

      Fig. GUI에서 자동 저장 조건 설정

2.3 추론

  1. 추론 이미지 & 결과 이미지 설정
  2. 추론 수행
  3. 추론 결과 옵션 설정

2.4 Save/Load

  1. Save/Load
    • 모델파일을 저장하거나 불러옵니다.
    • 확장자는 .flad입니다.

3 필수 옵션

3.1 학습 필수 옵션

  1. Learn 이미지 설정
  2. 모델 설정
    • 지원 모델

      • FL Def Net(V1 128 /V1 256 /V1 512 /V1 512)
        • 포스로직에서 자체적으로 개발한 모델입니다. 비지도 학습 모델로 정상 이미지만 가지고 학습이 가능합니다.
        • 추천 버전은 V1 512 입니다.
    • API

      • SetModel(EModel eModel = EModel_FLDefNet)
        • eModel : 학습에 사용할 모델을 설정합니다.
      • SetModelVersion(EModelVersion eModelVersion = EModelVersion_FLDefNet_V1_512)
        • eModelVersion : 학습에 사용할 모델의 버전을 설정합니다.
    • 예제 코드

      CResult res;
      CAnomalyDetectionDL adDL;
      
      if(IsFail(res = adDL.SetModel(CAnomalyDetectionDL::EModel_FLDefNet)))
          break;
      if(IsFail(res = adDL.SetModelVersion(CAnomalyDetectionDL::EModelVersion_FLDefNet_V1_512)))
          break;
      
      CResult res = new CResult();
      CAnomalyDetectionDL adDL = new CAnomalyDetectionDL();
      
      if((res = adDL.SetModel(CAnomalyDetectionDL.EModel.FLDefNet)).IsFail())
          break;
      if((res = adDL.SetModelVersion(CAnomalyDetectionDL.EModelVersion.FLDefNet_V1_512)).IsFail())
          break;
      
      res = CResult()
      adDL = CAnomalyDetectionDL()
      
      if((res := adDL.SetModel(CAnomalyDetectionDL.EModel.FLDefNet)).IsFail()):
          break
      
      if((res := adDL.SetModelVersion(CAnomalyDetectionDL.EModelVersion.FLDefNet_V1_512)).IsFail()):
          break
      
    • GUI에서 설정 방법

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

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

3.2 추론 필수 옵션

  1. Inference & Inference Result Image 설정

4 선택 옵션

4.1 추론 선택 옵션

  1. 어떠한 추론 결과 항목들을 출력할지 설정합니다.
    • Anomaly Detection의 추론 결과 정보에서는 오류로 추정되는 부분을 출력합니다.

    • 출력하는 값의 임계치를 사용자가 설정할 수 있습니다.

      • 오류로 판단하는 임계치를 설정할 수 있습니다.
      • 오류로 판단하는 최소 넓이를 설정할 수 있습니다.
    • API

      • Inference Threshold

        • Anomaly Detection DL에서 결과의 오류 값을 판단하는 임계값을 설정합니다.
          • SetInferenceAnomalyThreshold(float f32InferenceAnomalyThreshold = ETilingMode_NoTiling_Fit)
      • Minimum Anomaly Area

        • Anomaly Detection DL에서 오류 값이라 판단하는 최소 넓이를 설정합니다.
          • SetInferenceMinimumAnomalyArea(int32_t i32InferenceMinimumAnomalyArea = 4)
    • 예제 코드

CAnomalyDetectionDL anomalyDetectionDL;

anomalyDetectionDL.SetInferenceAnomalyThreshold(0.5f);
anomalyDetectionDL.SetInferenceMinimumAnomalyArea(4);
Inference Result

Fig. 임계치를 설정하는 방법

  1. 검증 이미지 설정
    • 검증 이미지를 설정합니다. 정상 이미지만을 입력합니다.
  2. 옵티 마이저 설정
  3. Augmentation 설정
  4. 타일링 설정
  5. 이미지 전처리 설정
  6. 종료 조건 설정
  7. 자동 저장 조건 설정
  8. Optimal Learning State Preservation 설정
  9. 배치 프로세싱 설정

5 결과 출력

  1. Inference 결과 출력
    • Inference & Inference Result Image 설정을 통해 설정한 Result Image에 추론 결과가 출력 되어집니다.
    • 정상/비정상적인 이미지인지 판별을 하며, 비정상적인 이미지에 경우 Region으로 비정상적인 부분을 표시합니다.
  2. 학습 정보
    • 학습 중 또는 학습이 완료된 마지막 결과를 얻어옵니다.
    • API
      • GetLearningResultLastAccuracy()
        • 마지막 픽셀 정확도 결과
      • GetLearningResultMaximumAccuracy()
        • 마지막 최대 픽셀 정확도 결과
      • GetLearningResultMaximumAccuracyCumulativeEpoch()
        • 마지막 최대 정확도의 Epoch
      • GetLearningResultAllHistory(Base::CFLArray<float>& flaCostHistory, Base::CFLArray<float>& flaValidationHistory, Base::CFLArray<int32_t>& flaValidationEpochHistory)
        • 마지막 학습의 모든 결과
        • Cost, Accuracy, Validation Epoch
    • 예제 코드
CAnomalyDetectionDL anomalyDetectionDL;

///////////////////////////////////
// 필수 or 선택 옵션 설정
///////////////////////////////////

if(anomalyDetectionDL.Learn().IsFail())
    break;

// thread로 실행 시 학습 진행 중인 상태의 정보
// 일반 실행 시 마지막 학습 결과 정보

float f32LastAccuracy;
float f32MaxAccuracy;
int32_t i32MaxAccEpoch;

//마지막 accuracy 값
f32LastAccuracy = anomalyDetectionDL.GetLearningResultLastAccuracy();
//학습 진행하면서 나온 Maximum accuracy 값
f32MaxAccuracy = anomalyDetectionDL.GetLearningResultMaximumAccuracy();
//Maximum accuracy가 나온 epoch
i32MaxAccEpoch = anomalyDetectionDL.GetLearningResultMaximumAccuracyCumulativeEpoch();  

CFLArray<float> flaCostHistory;
CFLArray<float> flaValidationHistory;
CFLArray<int32_t> flaValidationEpochHistory;

anomalyDetectionDL.GetLearningResultAllHistory(flaCostHistory, flaValidationHistory,  flaValidationEpochHistory);
CAnomalyDetectionDL anomalyDetectionDL = new CAnomalyDetectionDL();

///////////////////////////////////
// 필수 or 선택 옵션 설정
///////////////////////////////////

if(anomalyDetectionDL.Learn().IsFail())
    break;

// thread로 실행 시 학습 진행 중인 상태의 정보
// 일반 실행 시 마지막 학습 결과 정보

float f32LastAccuracy;
float f32MaxAccuracy;
int i32MaxAccEpoch;

//마지막 accuracy 값
f32LastAccuracy = anomalyDetectionDL.GetLearningResultLastAccuracy();
//학습 진행하면서 나온 Maximum accuracy 값
f32MaxAccuracy = anomalyDetectionDL.GetLearningResultMaximumAccuracy();
//Maximum accuracy가 나온 epoch
i32MaxAccEpoch = anomalyDetectionDL.GetLearningResultMaximumAccuracyCumulativeEpoch();  

List<float> flaCostHistory= new List<float>();
List<float> flaValidationHistory = new List<float>();
List<int> flaValidationEpochHistory = new List<int>();

anomalyDetectionDL.GetLearningResultAllHistory(ref flaCostHistory, ref flaValidationHistory, ref flaValidationEpochHistory);
anomalyDetectionDL = CAnomalyDetectionDL()

///////////////////////////////////
// 필수 or 선택 옵션 설정
///////////////////////////////////

res = CResult()

if(res := anomalyDetectionDL.Learn().IsFail()):
    break

// thread로 실행 시 학습 진행 중인 상태의 정보
// 일반 실행 시 마지막 학습 결과 정보

//마지막 accuracy 값
f32LastAccuracy = anomalyDetectionDL.GetLearningResultLastAccuracy()
//학습 진행하면서 나온 Maximum accuracy 값
f32MaxAccuracy = anomalyDetectionDL.GetLearningResultMaximumAccuracy()
//Maximum accuracy가 나온 epoch
i32MaxAccEpoch = anomalyDetectionDL.GetLearningResultMaximumAccuracyCumulativeEpoch()  

flaCostHistory = List[Single]()
flaValidationHistory = List[Single]()
flaValidationEpochHistory = List[int32]()

anomalyDetectionDL.GetLearningResultAllHistory(flaCostHistory, flaValidationHistory, flaValidationEpochHistory);

4 GUI에서 확인하는 방법

  1. 학습을 시작하면 나오는 Dialog의 Show info 버튼을 눌러 확장하여 아래와 같이 표시한 부분에서 관련된 데이터들을 확인할 수 있습니다.
Dialog Result

Fig. Dialog 창에서 출력되는 학습 결과 정보


  1. property 창의 Learned Model Information의 Epoch과 Validation 항목의 표시된 부분에서 해당 함수와 관련된 데이터들을 확인할 수 있습니다.
Property Result

Fig. Property 창에서 출력되는 학습 결과 정보


  1. All Histories의 경우 학습이 진행되면 프로그램 하단의 graph view에서 실시간으로 학습이 진행되면서 나온 cost 및 validation 등의 기록을 확인할 수 있습니다.
Graph View Result

Fig. 학습 결과가 출력되는 Graph View