[액션파워 LAB] 이미지에서 이상 영역 탐지(Visual Anomaly Detection)는 어떻게 할까?
들어가기 전에
- 본 포스트는 액션파워에서 Research 발표를 기반으로 합니다.
요약
- Visual Anomaly Detection이란? 이미지에서 이상한 부분을 찾는 방법
- 대표적인 방법은?
- 이미지의 자체에서 특징을 추출하는 방법
- CNN Feature에서 특징을 추출하는 방법
- 정상 이미지를 생성한 후 비교하는 방법
- CNN Feature를 정교하게 생성한 후 비교하는 방법 - 설명과 함께 예시로 다루는 논문은 총 5편 (Reference 참고)
Visual Anomaly Detection?
Anomaly Detection에 대한 수요는 항상 존재해 왔습니다. 단순 반복 작업을 컴퓨터에게 시킬 수 있다면 경제적, 시간적 측면에서 큰 이득을 얻을 수 있기 때문입니다. 그런데, 사람이 이해하는 예외적인 상황에 대한 이해를 기계나 로봇에게 가르쳐주는 것은 어려운 일입니다. 어려운 이유는 다음과 같습니다.
- Class Imbalence
- 보편적으로 정상적인 상황이 이상 상황보다 많기 때문에, 대부분의 데이터가 정상에 분포하게 됩니다. - Ambiguous Normal
- 정상적인 상황과 비정상적인 상황을 규정하기가 애매합니다. 사람은 눈으로 이미지를 판단하지만, 컴퓨터에게는 숫자로 알려줘야 하는데, 항상 달라지는 이미지에서 수학적으로 이상이 있는 부분을 알려주기가 어렵습니다.
그렇다면 선행 연구들에서는 이 어려운 문제를 어떻게 풀었을까요?
이미지 자체에서 특징을 추출하는 방법
이상치 탐지(Anomaly Detection)의 보편적인 방법은 크게 세 단계로 진행됩니다.
- 알아보기 쉬운 형태로 데이터를 변경 (Filter나 Kernel을 진행)
- 이동된 데이터에서 정상 영역을 찾기
- 정상 영역을 벗어난 데이터 찾기 (Objective Function과 비교)
Traditional Method
이미지 그 자체를 모두 비교하는 건 굉장히 비효율적인 일입니다. 예를 들어 가로 640, 세로 640, RGB 색상을 가진다고 해도 1228800 개의(640 * 640 * 3) 픽셀이 나타납니다. 이 픽셀들로 만들 수 있는 모든 조합의 수를 구한다고 하면 약 n의 1228800승 + a개나 있죠!
즉, 적절하게 유사한 것들을 모아주어야 합니다. 고전적인 Computer Vision에서 정보를 축소하기 위한 예로 Local Binary Pattern (LBP)[1]가 있습니다.
LBP는 인접 픽셀을 패턴으로 나타내는 방식입니다. 그림을 설명하면 9개 픽셀 중 C인 4보다 큰 영역만 남기는 방식으로 정보를 축약하는 방법입니다. 이러한 방식은 분명 효율적으로 정보를 축약할 수는 있지만, 너무 많은 정보를 잃게 됩니다. 이미지에서 사용하기에 적합한 방식은 아닐 거에요.
다양한 Feature Extractor들이 있지만. 딥러닝이 나타난 이후 대부분의 연구들에서 CNN을 활용합니다. CNN으로 Feature를 추출하거나 특정한 Feature 형태로 변환한 후에 이상한 샘플을 찾는 방식으로 전개됩니다. 대표적인 방법으로 DeepSVDD[2]가 있습니다.
DeepSVDD: Deep one-class classification[2]
Deep SVDD(Support Vector Data Description)에서는 CNN을 이용해 이미지 샘플을 SVDD 평면으로 이동시킵니다. 과정을 자세히 표현하면 다음과 같습니다.
- 딥러닝을 이용해 데이터를 SVDD 평면으로 보내도록 합니다.
- 정상 데이터는 특정 구체 안으로, 비정상 데이터는 특정 구체에서 멀리 떨어지도록 합니다. (혹은 그렇게 구를 그린다고 생각해도 좋습니다)
- 비정상 이미지를 탐지하는 모델이 완성되면 우리는 모델을 통과시켜 정상과 비정상을 구분할 수 있게 됩니다.
- 이처럼 구체를 만들고, 초구체(원)보다 Margin($\xi$)보다 더 떨어진 영역을 이상한 데이터로 판단합니다.
CNN Feature에서 특징을 추출하는 방법
이미지를 분석해 특정한 영역으로 이동시켜 비교하는 것도 좋은 방식입니다. 그렇지만, 이런 모델들은 데이터의 패턴이 바뀌거나 복잡해지면 정확도가 떨어지게 됩니다. 이미지 자체를 변환하는 것보다, 이미지를 좀 더 잘 표현하는 Feature map을 비교하는 것이 보다 더 좋은 성능을 보입니다. 다양한 방법이 있는데, PaDiM
과 PatchCore
을 소개합니다.
PaDiM: a Patch Distribution Modeling Framework for Anomaly Detection and Localization[3]
PaDiM에서는 CNN Feature를 Gaussian Kernel을 통해 분포를 구합니다. 분포에서 많이 벗어난 이미지를 이상한 이미지로 판단하는 방법입니다. 순서대로 설명하면 다음과 같습니다.
- Pretrained CNN에서 특정 Layer의 Feature를 추출합니다.
- Feature Size를 맞춰줍니다 (논문 그림에서는 Vector로 변경하지만, 후에 코드에서는 Feature 그대로 2DFilter를 활용해 보다 가독성을 높였습니다)
- 2DGaussian Filter를 통해 평균과 표준편차를 구합니다.
- 이미지를 가우시안 분포라고 가정하면, 입력 이미지와 구해진 분포와의 마할라노비스 거리를 구할 수 있습니다.
- 이 때, 마할로노비스 거리가 특정 거리 이상이면 이상한 이미지로 인식합니다.
PatchCore: Towards Total Recall in Industrial Anomaly Detection[4]
PathCore의 저자들은 기존의 모든 Layer의 Feature map을 사용한 연구들의 문제점을 먼저 언급합니다.
- 일반적으로 Pretrained CNN은 Classification을 위해 만든 모델이다
- 특히 가장 심층 Layer일 수록 Classification을 목적으로 동작한다. - High-Level Feature들(가장 나중에 거치는 Layer의 output)은 Local Semantic을 거의 잃는다. (이상한 영역을 정확히 판단하기 어려움)
이를 해소하기 위해 두 가지 접근을 함께 진행합니다.
- Mid-level Feature를 활용
- Local 정보를 가지는 Patch 저장소를 활용
Training 시에는 이미지 Feature map에서 patch grid를 그려내고 유사한 Patch들을 Memory Bank라는 저장공간에 보관합니다. 이 때, 유사성을 판단하는 기준으로는 KNN 거리를 활용합니다.
Testing 시에는 각 Patch의 Memory Bank에서 가장 가까운 Patch를 찾습니다. 그 후, Patch Bank와의 거리를 구합니다(유클리디언). 거리를 기준으로 이상한 이미지임을 알 수 있습니다.
정상 이미지를 생성한 후 비교하는 방법
CNN Feature를 이용해 이상한 이미지를 찾는 방법을 다뤄보았습니다. 지금까지의 방법들은 비교하기 적합하게 Feature를 추출한 후, 비정상 이미지를 찾았습니다.
그런데, 우리는 수학적으로 Feature를 추출하지 않아도 정상과 비정상을 구분할 수 있습니다.
- 정상 이미지의 모습을 상상하고
- 정상과 크게 다르다면 이상이 있는 이미지
라고 판단합니다. 사람이 생각하는 것과 유사하게, 가장 직관적인 방식은 생성모델을 활용한 방식일 것입니다. 실제로 Anomaly Detection 분야에서는 샘플링을 하고 비교하듯, 이미지도 Sampling(일종의 생성)한 후 비교하는 방식으로 접근한 연구들도 있습니다.
- 생성모델을 활용해 정상 이미지를 생성한 샘플을 정상이라고 여기고,
- 입력 이미지가 생성된 샘플과 크게 다르다면 이상이 있는 이미지
라고 여기는 방법입니다. 즉, 우리가 필요한 생성모델은 정상 이미지를 샘플링할 수 있는 생성모델이 되어야합니다.
구체적으로 순서대로 표현하면,
- 생성모델은 정상 이미지를 생성하도록 학습합니다.
- 학습된 모델에 새로운 이미지가 입력되면, 정상 이미지 형태로 재생성합니다.
- 생성된 이미지와 입력 이미지와의 차이를 구해, 큰 차이가 나면 정상이 아닌 이미지로 판단합니다.
Ganomaly: Semi-Supervised Anomaly Detection via Adversarial Training
Ganomaly는 생성모델인 GAN을 활용해 Anomaly Detection을 진행한 연구입니다.
3개의 Encoder와 1개의 Decoder로 구성되어 있습니다.
- 왼쪽 상단의 Encoder와 Decoder는 생성을 담당 (일반적인 GAN 구조)
- Real과 Fake를 구분하는 Discriminator(오른쪽 하단 Encoder)
- 입력 이미지의 Encoder의 결과와 비교하기 위한 결과를 만들어내기 위한 Encoder (오른쪽 상단 Encoder)
또한 저자들은, 언급한 세 가지 기능을 동시에 학습하기 위해 세 가지 Loss를 설계합니다.
다른 생성 모델인 AE, VAE 등을 이용한 방식도 유사한 방식으로 활용됩니다. 그런데, Flow Model을 활용한 방식은 비정상 이미지 탐지에서 그다지 좋은 성능을 보이지는 못했습니다. 자세한 내용은 Why Normalizing Flows Fail to Detect Out-of-Distribution Data[5] 논문에 나타나 있는데, 요약하면 다음과 같습니다.
Normalizing Flow 모델은 Image의 Graphical한 특성(이미지 색상 등)을 너무 크게 반영해 Generalization Error가 높다.
즉, 우리가 원하는 정상 이미지를 생성하는 것이 아닌, 입력 이미지의 특성을 그대로 생성하기 때문에 Anomaly Detection에 활용하기 어렵다고 합니다. 즉, 학습되어 있더라도 입력 이미지의 균열을 그대로 생성하기 때문에 입력 이미지와 생성된 이미지와의 차이로 구분하기가 어렵습니다.
CNN Feature를 정교하게 생성한 후 비교하는 방법
그렇지만 이러한, Flow Model의 특성을 적절히 사용한 연구가 있습니다. 입력 이미지의 특성을 유지하며 이미지를 생성한다면 재현 성능이 높다고 볼 수 있습니다. Input이 CNN Feature가 된다면, Feature를 잘 복원하는 것이고, 그렇다면 이전 CNN Feature 방법론보다 좀 더 개선된 CNN Feature를 활용할 수 있을 것입니다.
CFLOW-AD: Real-Time Unsupervised Anomaly Detection with Localization via Conditional Normalizing Flows[6]
Cflow 저자들은 오히려 Normalizing Flow가 Input에 특화된 이미지를 생성한다는 특성에 집중했습니다.
PatchCore 저자들도 말했듯, CNN Feature는 Layer가 깊어질 수록 위치 정보나, 작은 이미지(Noise) 정보를 잃는 단점이 있습니다. Normalizing Flow는 재생성 시 Input의 패턴을 유지하며 생성하기 때문에, Scale이 줄고 늘었을 때, 일반적인 CNN 방법보다 Feature의 정보를 잃지 않게 됩니다.
결론적으로, Normalizing Flow로 재생성된 Feature를 이용해 기존의 CNN Feature 기반 Anomaly Detector를 보다 더 개선할 수 있었습니다.
주요 연구들 결과 비교
- Ganomaly와 DeepSVDD는 연구에서 Cifar10을 이용한 결과가 나타나지만, Target Benchmark가 다르고 성능이 아주 우수하지는 않아서 비교군에서 제외합니다.
MVTec-AD Datasets (Paper with codes)
마치며
이번 포스트에서 Visual Anomaly Detection의 몇몇 연구들을 소개했습니다. 짧은 설명으로 인해, 조금은 부족한 설명이 될 수 있을 것 같습니다.
MVTec-AD Dataset은 사실 정복된 Datasets가 되어 Benchmark로서의 가치는 크지 않습니다. 다른 Anomaly Detection Datasets도 대부분 정복이 되었기에, 단순히 특정 Benchmark에서 SOTA만을 고집하지는 않으셔도 좋을 것 같습니다. 오히려, 산업이나 상황에 맞는 방식을 쓰는 것을 추천 드립니다. 이 포스트에서는 알아두면 다음 논문을 읽거나 연구를 하기에 더 도움이 될 만한 연구들을 선별하였습니다. 그러나 짧은 설명으로 인해, 조금은 부족한 설명이 될 수 있을 것 같습니다.
이 분야를 조금 더 자세히 알아보고 싶으신 분들을 위해 소개된 논문들 외에도 다른 논문들을 첨부합니다. 이 글이 추가 논문들을 읽으실 때 조금이나마 도움이 되길 바랍니다!
더 읽어보면 좋은 논문들
CNN Feature 기반
- SPADE: Sub-Image Anomaly Detection with Deep Pyramid Correspondences (CNN Feature 기반 초기 연구)
- DRAEM: Self-Supervised Predictive Convolutional Attentive Block for Anomaly Detection
- MemSeg: A semi-supervised method for image surface defect detection using differences and commonalities (UNet 기반의 가벼운 모델을 활용한 방식)
- PNI: Image Anomaly Detection and Localization with Position and Neighborhood Information (CNN Feature의 인접픽셀의 정보를 활용하는 방식)
Flow Model 기반
- DifferNet: Same Same But DifferNet: Semi-Supervised Defect Detection with Normalizing Flows (Cflow-AD 저자의 이전 연구)
- FastFlow: FastFlow: Unsupervised Anomaly Detection and Localization via 2D Normalizing Flows
Others
- CLIP: Exposing Outlier Exposure: What Can Be Learned From Few, One, and Zero Outlier Images (Language Model 중 유명한 CLIP Model을 활용한 방식)
Reference
- Zeno, Bassel, Dmitry Yudin, and Bassel Alkhatib. “Event recognition on images using support vector machine and multi-level histograms of local patterns.” ARPN J. Eng. Appl. Sci 11.20 (2016): 12282–12287.
- Ruff, Lukas, et al. “Deep one-class classification.” International conference on machine learning. PMLR, 2018.
- Defard, Thomas, et al. “Padim: a patch distribution modeling framework for anomaly detection and localization.” Pattern Recognition. ICPR International Workshops and Challenges: Virtual Event, January 10–15, 2021, Proceedings, Part IV. Cham: Springer International Publishing, 2021.
- Roth, Karsten, et al. “Towards total recall in industrial anomaly detection.” Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022.
- Kirichenko, Polina, Pavel Izmailov, and Andrew G. Wilson. “Why normalizing flows fail to detect out-of-distribution data.” Advances in neural information processing systems 33 (2020): 20578–20589.
- Gudovskiy, Denis, Shun Ishizaka, and Kazuki Kozuka. “Cflow-ad: Real-time unsupervised anomaly detection with localization via conditional normalizing flows.” Proceedings of the IEEE/CVF Winter Conference on Applications of Computer Vision. 2022.