Anomaly Detection DL
목차
1 개요
- Anomaly Detection 알고리즘은 정상 이미지를 가지고 비정상인 부분이 있는지 검사하는 알고리즘입니다.
- 정상 제품들의 사진들을 가지고 학습을 시키며, 제품이 비정상인지 판별할 수 있도록 학습을 시킵니다.
- FLImaging®의 Anomaly Detection DL에서는 자체적으로 개발한 우수한 성능의 모델인 FL_DefNet을 제공하고 있습니다.
Source | |
---|---|
Result | |
![]() |
![]() |
2 Anomaly Detection DL 사용 방법
1 데이터 셋 준비
- Anomaly Detection은 정상 이미지만 가지고 학습을 진행합니다.
2.2 학습
2.2.1. 학습 이미지 설정
2.2.2. 검증 이미지 설정(선택)
2.2.3. 모델 설정
2.2.4. 옵티 마이저 설정
2.2.5. Augmentation 설정(선택)
2.2.6. 학습 수행
- Anomaly Detection 의 경우 정상적인 이미지가 무엇인지 학습이 필요하므로 오랜 시간 학습이 필요합니다.
- Anomaly Detection 의 경우 종료 조건은 3000 epoch 이상과 Validation 0.95 정도로 설정 하는 게 적절합니다.
- 추천 종료 조건
validation >= 0.95 && epoch >=3000
2.2.7. 조건 식
- 종료 조건(Stop Condition) & 자동 저장(Auto Save)에서 사용 가능한 조건 식 입니다.
- Common Conditional Expression
- 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 - GUI 에서 설정 방법
- 종료 조건 식 설정
cost <= 0 | validation >= 1 | metric >= 1
Fig. GUI에서 종료 조건 설정 - 자동 저장 조건 식설정
epoch >= 10 & metric >= max('metric') & metric > 0
Fig. GUI에서 자동 저장 조건 설정
- 종료 조건 식 설정
2.3 추론
2.4 Save/Load
- Save/Load
- 모델파일을 저장하거나 불러옵니다.
- 확장자는 .flad입니다.
3 필수 옵션
3.1 학습 필수 옵션
- Learn 이미지 설정
- 모델 설정
-
지원 모델
- FL Def Net(V1 128 /V1 256 /V1 512 /V1 512)
- 포스로직에서 자체적으로 개발한 모델입니다. 비지도 학습 모델로 정상 이미지만 가지고 학습이 가능합니다.
- 추천 버전은 V1 512 입니다.
- FL Def Net(V1 128 /V1 256 /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;
GUI에서 설정 방법
Fig. GUI에서 사용할 모델을 설정하는 Dropdown List
3.2 추론 필수 옵션
4 선택 옵션
4.1 추론 선택 옵션
- 어떠한 추론 결과 항목들을 출력할지 설정합니다.
-
Anomaly Detection의 추론 결과 정보에서는 오류로 추정되는 부분을 출력합니다.
-
출력하는 값의 임계치를 사용자가 설정할 수 있습니다.
- 오류로 판단하는 임계치를 설정할 수 있습니다.
- 오류로 판단하는 최소 넓이를 설정할 수 있습니다.
-
API
-
Inference Threshold
- Anomaly Detection DL에서 결과의 오류 값을 판단하는 임계값을 설정합니다.
SetInferenceAnomalyThreshold(float f32InferenceAnomalyThreshold = ETilingMode_NoTiling_Fit)
- Anomaly Detection DL에서 결과의 오류 값을 판단하는 임계값을 설정합니다.
-
Minimum Anomaly Area
- Anomaly Detection DL에서 오류 값이라 판단하는 최소 넓이를 설정합니다.
SetInferenceMinimumAnomalyArea(int32_t i32InferenceMinimumAnomalyArea = 4)
- Anomaly Detection DL에서 오류 값이라 판단하는 최소 넓이를 설정합니다.
-
-
예제 코드
-
CAnomalyDetectionDL anomalyDetectionDL; anomalyDetectionDL.SetInferenceAnomalyThreshold(0.5f); anomalyDetectionDL.SetInferenceMinimumAnomalyArea(4);
- GUI에서 설정 방법
Fig. 임계치를 설정하는 방법
- 검증 이미지 설정
- 검증 이미지를 설정합니다. 정상 이미지만을 입력합니다.
- 옵티 마이저 설정
- Augmentation 설정
- 타일링 설정
- 이미지 전처리 설정
- 종료 조건 설정
- 자동 저장 조건 설정
- Optimal Learning State Preservation 설정
- 배치 프로세싱 설정
5 결과 출력
- Inference 결과 출력
- Inference & Inference Result Image 설정을 통해 설정한 Result Image에 추론 결과가 출력 되어집니다.
- 정상/비정상적인 이미지인지 판별을 하며, 비정상적인 이미지에 경우 Region으로 비정상적인 부분을 표시합니다.
- 학습 정보
- 학습 중 또는 학습이 완료된 마지막 결과를 얻어옵니다.
- 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);
4 GUI에서 확인하는 방법
- 학습을 시작하면 나오는 Dialog의 Show info 버튼을 눌러 확장하여 아래와 같이 표시한 부분에서 관련된 데이터들을 확인할 수 있습니다.
Fig. Dialog 창에서 출력되는 학습 결과 정보
- property 창의 Learned Model Information의 Epoch과 Validation 항목의 표시된 부분에서 해당 함수와 관련된 데이터들을 확인할 수 있습니다.
Fig. Property 창에서 출력되는 학습 결과 정보
- All Histories의 경우 학습이 진행되면 프로그램 하단의 graph view에서 실시간으로 학습이 진행되면서 나온 cost 및 validation 등의 기록을 확인할 수 있습니다.
Fig. 학습 결과가 출력되는 Graph View
-