VAD Features
기능 개요
VAD의 pipeline
AI Contents의 pipeline은 기능 단위인 asset의 조합으로 이루어져 있습니다. Train pipeline은 3개의 asset, Inference pipeline은 4개의 asset으로 구성되어있습니다.
Train pipeline
Input - Readiness - Train
Inference pipeline
Input - Readiness - Inference - Output
input
VAD는 학습할 때 Ground Truth 데이터라고 하는 이미지의 경로와 정답 라벨로 이루어진 tabular 형태의 데이터로 동작합니다. VAD는 정상 이미지만으로 학습이 가능하기 때문에 정상 이미지만 있는 경우 라벨명은 정상을 표시하는 이름(예를 들어 OK나 good, normal 등)으로 작성하시면 됩니다. input asset에서는 Ground Truth 데이터를 읽고 다음 asset으로 전달하는 역할을 수행합니다. 만약 inference 단계에서 이미지에 대한 정보가 담긴 파일이 없다면 이미지의 경로만 가지고 이를 생성하여 추론에 활용하기 위해 다음 asset으로 전달합니다. 위 도표에서 보듯 학습 파이프라인인 경우 train
으로, 추론 파 이프라인인 경우 inference asset
으로 전달됩니다.
readiness
Ground Truth 데이터의 데이터 품질을 검사합니다.이미지 경로 항목이나 정답지 항목에 결측치가 있는 경우 warning을 띄우고 결측값을 제외하여 학습이 진행됩니다. 또한 데이터 구성에 따라 적합한 argument 설정값을 검사하고 경우에 따라서는 변경합니다.
modeling(train)
VAD에서 train asset
은 input
에서 전달 받은 Ground Truth 데이터를 읽고 pytorch dataloader로 학습 데이터와 검증 데이터를 올립니다. 사용자가 미리 experimental_plan.yaml
에 작성한 모델명에 따라 VAD에서 지원하는 모델인 FastFlow 혹은 PatchCore모델을 생성하고 학습을 수행합니다. 학습이 완료되면 검증 데이터에 이상 데이터가 있는 경우 예측 결과가 표시된 output.csv
파일과 confusion matrix, 그리고 classification report와 anomaly_threshold
를 변경할 경우 변동되는 성능 표와 그래프가 출력됩니다. anomaly_threshold
에 따른 성능 표의 경우, AIOps 운영 상황에 따라 특정 성능을 극대화한 모델이 필요할 수 있기 때문에 표를 확인하여 적합한 threshold값을 추론 시 설정할 수 있습니다.
modeling(inference)
inference asset
에서는 input asset
에서 전달받은 inference 데이터의 경로를 기반으로 이미지를 읽고, 이전 학습 단계에서 저장한 최고의 모델을 불러와서 라벨을 추론하고 이를 저장합니다. 만약 운영이 아닌 실험을 하고 있는 단계이고 정답 라벨이 파일에 있다면 성능을 저장합니다. 운영을 위한 파일인 inference_summary.yaml
도 저장합니다.
output
각 과제마다 필요한 정보가 다를 수 있습니다. 현재는 inference 데이터가 단일 이미지에 대해 추론한 경우 result에는 추론 라벨, score는 모델의 확실성(1-shanon entropy)이 저장되고, 여러 이미지에 대한 추론을 한 경우 result에는 전체 유형 별 개수를, score에는 모델의 확실성에 대한 평균이 저장됩니다. result에 저장할 수 있는 글자 수 제한이 있기 때문에 현재는 32글자까지 저장됩니다.
사용 팁
Ground Truth 파일 및 이미지 데이터 준비하기
Ground Truth(GT) 데이터와 이미지를 같은 폴더에 넣어주세요. ALO에서 GT파일과 이미지를 한 번에 실행 환경으로 복사합니다. GT 데 이터는 이미지 경로(image_path) 항목과 라벨(label) 항목으로 이루어져야 합니다. 만약 학습/검증 데이터셋을 구분하고 싶다면 데이터를 train
과 valid
로 구분하여 신규 항목을 생성하고 train_validate_column
에 해당 항목명을 작성해주세요. 만약 GT 데이터 내에 다른 항목이 있어도 분석에 사용되지 않습니다. 이 때 준비하는 이미지의 사이즈는 모든 데이터에 대해 일정한 것이 좋습니다. 만약 다른 사이즈의 이미지가 있는 경우 성능이 떨어질 수 있으며 가능하면 crop을 하거나 resize를 통해 미리 일정한 사이즈로 유지하는게 좋습니다. 데이터 구성은 정상 데이터로만 구성하거나 대부분의 정상 데이터와 소수의 이상 데이터로 구성해야 하며, 여러 종류의 이상 데이터를 사용할 수 있습니다. 예를 들어 고양이와 그 외 동물을 구분하고 싶다면 90%정도의 고양이 이미지를 준비하고 나머지 10%는 개, 쥐, 고양이 인형과 같이 전혀 다른 종류의 이상 데이터를 준비해도 상관없습니다. 물론 실제 운영 환경에서 발생할 수 있는 이상 데이터를 준비하게 되면 운영 상황에서 성능 하락을 예방할 수 있습니다.
이상 탐지 기준점 설정하는 방법 선택하기
VAD는 정상 데이터로만 학습할 수 있으나 소수의 이상 데이터가 존재한다면 좀 더 엄밀한 이상탐지를 모델을 생성할 수 있습니다. 엄밀하게 설명하자면 학습에 있어서 이상 데이터를 활 용하지 않지만 이상 여부를 판별하기 위한 수치인 anomaly_threshold
를 조절하는데 활용됩니다. 특별히 설정하지 않더라도 성능에 심각한 영향이 예상되는 경우 자동으로 설정방법을 변경하지만 상황에 맞춰 설정해준다면 VAD 운영 상황에 적합한 방법을 지정할 수 있습니다. 만약 정상 데이터만 확보한 경우 VAD에서 제공하는 threshold_method
설정 방법은 Percentile
입니다. 아주 극소수의 이상 데이터가 있는 경우 마찬가지로 Percentile
로 설정하는게 좋습니다. 정상 이미지 수에 따라 다르겠지만 최소 5장을 초과하는 약간의 이상 데이터가 있는 경우 F1
방법을 사용하면 적합한 anomaly_threshold
를 찾을 수 있습니다. 학습 argument에 percentile
를 통해 정상 이미지만 있는 경우 abnormal로 판별할 anomaly_score의 수준을 결정할 수 있습니다.
모델 선택하기
VAD에서 지원하는 모델은 FastFlow와 PatchCore 두 가지입니다. 통상 PatchCore는 성능이 더 우수하고 학습 시간도 FastFlow에 비해 적게 소요되지만 FastFlow보다 추론 시간이 오래 걸리고 필요한 RAM 메모리량도 약간 더 많습니다. 운영 인프라 환경에 따라 선택하면 됩니다.
학습 조건 설정하기
VAD에서 설정할 수 있는 학습 조건은 크게 이미지 사이즈(img_size
), 배치 사이즈(batch_size
), 최대 학습 횟수(max_epochs
)가 있습니다. 빠르고 가벼운 추론을 위해 VAD에서는 기 입력한 이미지 사이즈에 맞춰 resize를 수행합니다. FastFlow의 경우 모델에서 요구하는 이미지 형태가 고정되어있기 때문에 가로 256 픽셀, 세로 256 픽셀로 고정됩니다. PatchCore의 경우 내부적으로 Patch를 잘라서 추론하기 때문에 직사각형 형태로 입력할 수 있습니다. 배치 사이즈의 경우 한 번에 학습할 때 이미지 개수로 증가시킬 수록 빠르게 학습이 완료가 되고 학습 안정성도 올라가지만 학습 인프라의 RAM 메모리을 많이 소요합니다. 최대 학습 횟수는 FastFlow에서만 필요한 argument로 딥러닝 알고리즘에서는 미리 설정한 학습 횟수만큼 학습을 반복 진행하여 학습 횟수가 부족할 경우 under-fitting 현상이 발생하여 충분한 성능을 확보할 수 없습니다. 증가할 수록 학습 시간은 오래걸리며 EarlyStopping기능이 있기 때문에 지정한 횟수 이전에 성능이 확보되면 학습이 완료됩니다.
기능 상세
Visual Anomaly Detection의 다양한 기능을 활용하기 위한 상세 설명입니다.
Train pipeline: input asset
Read Ground Truth file
Ground Truth 파일을 읽고 이미지 경로와 라벨을 input asset
에서 파악합니다.
Train pipeline: readiness asset
Check data quality
Ground Truth 파일을 읽고 argument로 입력된 column명을 확인하고 결측치를 제거합니다. 또한 Ground Truth에 이미지 경로에 실제로 이미지가 존재하는지 확인하고 정상 이미지에 대한 라벨을 확인합니다.VAD는 학습/검증 데이터셋을 나누어 검증 데이터셋에 존재하는 데이터를 활용하여 최적화된 방식으로 학습을 수행합니다.이 때 학습/검증 데이터셋을 구분하는 항목명이 없으면 생성하고, 있다면 VAD에서 요구하는 방식으로 분리되어 있는지 확인합니다. VAD에서는 정상 이미지만 확보가 되어있거나 다수의 정상 이미지와 극소수의 이상 이미지로 구성된 경우 사용할 수 있습니다. readiness
에서는 검증 데이터에 대해 정상/이상 비율과 최소 이상 데이터 수에 따라 적합한 사용자 argument(threshold_method
와 monitor_metric
)로 변경합니다.
Train pipeline: modeling(train) asset
Load image file
Ground Truth 내 image_path
에 있는 데이터로부터 이미지를 읽습니다.
Training parameters
검증 데이터에 이상 데이터가 있는 경우 이상 여부를 판별하는 anomaly_threshold
를 F1-score를 최대화하는 방법으로 학습이 진행되고 설정이 됩니다. 만약 이상 데이터가 없는 경우 미리 설정한 percentile
argument에 따라 학습이 진행되며 anomaly_threshold 값이 설정이 됩니다. FastFlow의 경우 학습이 부족한 경우 max_epochs
를 증가시켜 충분히 학습이 이뤄질 수 있도록 설정할 수 있습니다.
Train
설정된 parameter에 따라 학습을 진행합니다.
Save outputs
Ground Truth 파일에 추론 결과에 대한 예측 결과와 확률을 파일에 추가하여 output.csv
에 저장합니다. 검증 데이터에 이상 데이터가 포함된 경우 confusion matrix, classification report가 저장됩니다. 이상 이미지거나 이상으로 추론한 이미지는 모두 extra_output
폴더에 저장 합니다.
Inference pipeline: modeling(inference) asset
Load image file
전달받은 추론 파일 내 image_path
에 있는 데이터로부터 이미지를 메모리에 올려 dataloader object를 생성하여 추론합니다.
Predict label
학습한 모델을 이용하여 이상 여부와 이상 이미지 영역을 표시한 이미지를 생성합니다.
Save outputs
추론 파이프라인에서의 산출물은 학습과 마찬가지 구성입니다. 이상 영역에 대한 이미지(XAI이미지)는 extra_output
폴더에 모두 저장됩니다.
Inference pipeline: output asset
Modify infernece summary
각 도메인의 Solution에 맞게 inference summary를 수정할 수 있습니다.
VAD Version: 1.0.0