[20′ Arxiv] SPADE : Sub-Image Anomaly Detection with Deep Pyramid Correspondences

This entry is part 15 of 40 in the series Anomaly Detection

내용 요약

공장에서 사용할 수 있는 Anomaly Detection 알고리즘의 대표적 사용처로 공장의 불량 검출 공정을 들 수 있습니다. 하지만 기존 방법들은 학습 방법이 복잡하고 segmentation 성능이 좋지 않다는 한계를 갖습니다. 이에 사전 학습된 모델을 사용하여 공장에의 적용이 편리하며 kNN을 사용하여 쉽게 동작하는 SPADE를 제안합니다. SPADE는 특히 모든 patch feautre들을 비교하여 alignment 효과를 내며, feature pyramid를 사용하여 다양한 정보를 사용할 수 있습니다. mvTec, STC 데이터셋에서의 실험을 통해 기존 방법들보다 성능이 좋음을 보였습니다.

1. 들어가며

이번 글에서는 2020년 발표된 Sub-Image Anomaly Detection with Deep Pyramid Correspondences 논문을 리뷰합니다. 이 논문은 SPADE는 별칭으로 불리며, 이번 글에서는 SPADE로 지칭하겠습니다. Anomaly Detection에 관한 기본적인 내용은 Anomaly Detection에 관한 모든 것 글을 참고해주세요.

먼저 제목의 의미를 살펴보겠습니다.
제목을 통해 저자들은 크게 두 가지를 강조하고 있음을 알 수 있습니다.
첫 번째는 sub image 단위의 Anomaly Detection 기능의 구현, 즉 pixel level로 불량을 찾을 수 있는 능력입니다.
두 번째는 deep pyramid correspondence에서 알 수 있듯 pyramid 방식으로 feature를 추출한 뒤 correspondence를 비교하는 방법을 사용한다는 것입니다.
이 두 가지를 염두에 두고 논문을 자세히 살펴보겠습니다.

SAPDE는 산업용으로 사용되는 Anomaly Detection 방법론을 목표로 합니다. 즉 공장에서 사용될 불량 검출 알고리즘을 목표로 한다고 할 수 있습니다.
이를 위해서는 크게 세 가지 조건을 만족해야 합니다.
첫 번째는 당연히 성능입니다. 기존 작업자들보다 더 빠르고 정확하게 불량을 검출할 수 있어야 합니다.
두 번째는 segmentation 기능입니다. 이는 어느 부분이 불량인지를 설명할 수 있는 기능에 해당합니다.
세 번째는 편리한 사용성입니다. 공장에서 사용하기 위해서는 복잡한 학습 과정, 복잡한 모델 구조는 걸림돌이 됩니다.
저자들은 이러한 조건들을 모두 만족하는 Anomaly Detection 방법이 없음을 문제로 지적합니다.

3. 제안 방법

이러한 문제를 해결하기 위한 SPADE의 방법을 살펴보겠습니다.

3-1. 큰 그림

먼저 SPADE의 큰 그림을 살펴보겠습니다.

1.사전학습 모델로 feature 추출하기
그림1. 사전학습 모델로 feature 추출하기

SPADE는 별도의 정상 이미지 학습 과정을 거치지 않습니다. 대신 위의 그림처럼 이미지넷 등의 큰 데이터셋으로 사전학습된 모델을 사용하여 feature를 추출합니다. 이는 사전학습된 모델은 이미 다양한 특징을 구분할 수 있는 능력이 있음을 전제로 합니다. 따라서 사전학습된 모델을 사용하여 추출한 feature는 정상 feature들끼리 모여있고 비정상 feature는 이로부터 떨어져 있을 것으로 가정합니다.

2.feature 공간에서의 정상 feature와 비정상 feature
그림2. feature 공간에서의 정상 feature와 비정상 feature

위 그림은 사전학습된 모델로 추출한 feature들의 feature 공간상에서의 분포를 나타냅니다.
검은색 점은 학습용 정상 이미지의 feature 분포입니다. 파란색 X는 테스트용 정상 이미지의 feature입니다. 학습용 정상 이미지 feature 분포와 유사한 공간에 위치한 모습을 볼 수 있습니다. 반면 테스트용 불량 이미지 feature인 빨간색 X를 보겠습니다. 정상 이미지 feature 분포와는 멀찍이 떨어져 있는 모습을 볼 수 있습니다. 따라서 ‘정상 이미지 feature들로부터 멀리 떨어져 있을수록 불량’이라고 판단하면 되지 않을까요? 이때 ‘멀리 떨어져 있는 정도’는 kNN (k Nearest Neighbor)을 사용할 수 있을 겁니다.

3.kNN으로 anomal score 측정하기
그림3. kNN으로 anomal score 측정하기

위 그림은 k=3의 KNN을 사용하여 정상 이미지 feature들과 떨어진 정도를 측정하는 모습을 보여줍니다. 테스트용 정상 이미지 feature인 파란색 X는 kNN의 값이 작게 나온 반면, 테스트용 불량 이미지 feature인 빨간색 X는 kNN값이 크게 나오는 모습을 볼 수 있습니다.

자 그럼 SPADE의 큰 그림은 이렇게 요약할 수 있겠네요.
첫 번째는 별도의 학습 과정 없이 사전학습된 모델을 사용하여 feature를 추출한다는 것입니다.
두 번째는 이렇게 추출한 학습용 정상 이미지 feature들로부터 멀리 떨어져 있을수록 불량으로 판단한다는 것입니다.
세 번째는 이때 멀리 떨어져 있는 정도는 kNN을 사용하여 측정한다는 것입니다.

3-2. Image level

SPADE는 image level에서의 측정 방식과 pixel level에서의 측정 방식이 다릅니다. 먼저 image level의 측정 방식을 살펴보겠습니다.

4.image level의 측정 방법
그림4. image level의 측정 방법

Image level에서의 측정 방식은 간단합니다. 사전 학습된 모델을 사용하여 feature를 추출합니다. 이렇게 추출한 feature를 Global Pooling을 해서 최종 feature로 만들어줍니다. 이렇게 만든 최종 feature들로부터 kNN으로 거리를 측정해주면 됩니다.

이때 Global Pooling은 어떤 의미를 가질까요?
Global Pooling은 모든 위치 정보에 대해 평균값을 취하는 방식입니다. 위의 그림에서 보면 4×4의 위치 정보가 1×1의 평균값으로 나오게 되는 거죠. 이는 주요 정보가 (1,1) 위치에 있었건 (4,4) 위치에 있었건 같은 값으로 나오게 된다는 것이고, 이는 위치랑은 상관없이 ‘무엇이 있는지’만 보겠다는 의미가 됩니다. Image level에서 Anomaly Detection을 하려면 정보가 어느 위치에 있건 상관없이 ‘무엇이 있는지’에만 초점을 맞춰야 하므로 Global Pooling을 사용했다고 생각할 수 있습니다.

3-3. Pixel level

다음으로 pixel level에서의 측정 방법을 살펴보겠습니다.
SPADE의 제목에서도 알 수 있듯 SPADE는 pixel level에서의 측정 방법에 힘을 준 방법입니다.

크게 두 가지 포인트에 집중해서 살펴보겠습니다.
첫 번째 포인트는 patch 단위의 메모리 구성입니다.

5.pixel level의 측정 방법
그림5. pixel level의 측정 방법

위 그림은 pixel level에서의 측정 방법을 나타낸 것입니다.
Image level에서는 사전학습된 모델로부터 추출한 feature를 Global Pooling 하여 최종 feature로 만들어주었죠. Pixel level로 측정할 때는 추출한 feature를 pooling 하지 않고 모든 patch 별 feature를 메모리에 저장해 줍니다. 이렇게 모든 모든 patch들의 feature를 사용하여 테스트 단계에서 kNN으로 anomal score를 측정할 것입니다. 위 그림에서는 하나의 이미지 feature당 총 16개의 patch가 존재하므로, N개의 학습 이미지로부터 총 16N개의 patch feature가 나오게 됩니다. 이 16N개의 patch feature를 모두 feature gallery라고 하는 메모리에 올려놓고 테스트 단계에서 kNN으로 anomal score를 측정하는 것이죠.

3-4. Patch 단위 계산의 의의

이렇게 모든 patch의 feature들에 대해 비교를 한다는 것이 무슨 의미를 가질까요?

6.모든 patch feature와 비교하는 의미
그림6. 모든 patch feature와 비교하는 의미

위 그림은 mvTec 데이터셋의 hazelnut 이미지 샘플입니다.
왼쪽은 학습용 정상 이미지, 오른쪽은 테스트 이미지라고 가정하겠습니다. 이미지당 총 4개의 patch로 구성되었다고 생각해 볼게요. 이제 테스트 이미지의 patch에 대해 anomal score를 측정한다고 상상해 보겠습니다. 만약 모든 patch들의 feature들에 대해 비교하지 않고 동일 위치의 patch들과 비교해야 한다고 생각해 볼게요. 테스트 이미지의 1번 patch는 학습용 정상 이미지의 1번 패치랑만 비교해야 합니다. 두 patch는 hazelnut의 전혀 다른 부위를 나타내고 있죠. 따라서 kNN으로 거리를 측정하면 꽤나 먼 거리가 나오게 될 겁니다. 사실상 불량이라고 판단한 거죠.

반면 모든 patch들의 feature와 비교하게 되면 어떻게 될까요?
테스트 이미지의 1번 패치는 학습용 정상 이미지의 1~4번 패치들과 비교하게 되겠죠? kNN으로 거리를 측정하면 4번 패치와 비교하여 아주 가까운 거리가 나올 겁니다. 마찬가지로 2번 patch는 학습용의 3번과, 3번 patch는 학습용의 2번과, 4번 patch는 학습용의 1번과 비교하여 모두 아주 가까운 거리가 나오게 될 겁니다. 즉 모든 patch의 feature들과 비교할 수 있게 함으로써 이미지의 alignment 틀어짐을 보정해주는 효과를 갖게 된 겁니다. 이미지가 아무리 돌아가 있어도 내 patch와 가장 유사한 patch를 찾아 비교할 수 있게 되었으니까요.

두 번째는 feature pyramid matching입니다.
CNN은 학습 과정에서 layer의 level에 따라 다른 특성을 학습한다고 알려져 있죠. High level layer에서는 semantic 한 정보를 많이 갖고 있고, low level layer에서는 noise에 가까운 정보를 많이 갖고 있다고 알려져 있습니다. 이에 SPADE 저자들은 이런 생각을 합니다. ‘layer level마다 다른 특성의 정보를 갖는다면, 모든 layer의 정보를 다 사용할 때 성능이 가장 좋겠네.’ 그래서 다양한 level의 layer feature를 사용하기 위한 방식이 feature pyramid 방법입니다.

7.feature pyramid matching
그림7. feature pyramid matching

위 그림을 보면 세 개 layer로부터 추출한 feature가 하나로 합쳐지는 과정을 볼 수 있습니다. 다른 layer의 feature들은 resolution이 다르므로 가장 큰 resolution에 맞게 resize 하여 channel 방향으로 합쳐 하나의 feature로 만들어주는 모습을 볼 수 있습니다. SPADE는 이러한 방법으로 마지막 M개 block의 feature를 합치는 방법을 사용합니다.

4. 실험 결과

이번에는 다양한 데이터셋을 사용한 실험을 통해 SPADE의 성능을 확인해 보겠습니다.

4-1. mvTec

먼저 산업용 데이터셋인 mvTec에서의 성능을 살펴보겠습니다.

8.mvTec image level 성능
그림8. mvTec image level 성능

위 표는 image level에서의 성능입니다. Classification, GAN, AutoEncoder 방식의 다른 방법들에 비해 가장 좋은 성능을 볼 수 있습니다.

9.mvtec pixel level 성능
그림9. mvtec pixel level 성능

위 표는 pixel level의 성능입니다. 마찬가지로 가장 좋은 성능인데, image level에서보다 압도적으로 좋은 성능임을 볼 수 있습니다.

10.mvTec SPADE 샘플 이미지
그림10. mvTec SPADE 샘플 이미지

위 그림은 mvTec 데이터셋의 hazelnut과 metal_nut 클래스로 SPADE를 돌린 샘플입니다.
첫 번째 행은 불량 이미지 샘플입니다.
두 번째 행은 SPADE를 사용하여 패치별로 가장 가까운 정상 patch로 대체한 사진입니다.
세 번째 행은 불량의 Ground Truth, 네 번째는 SPADE가 예측한 anomal pixel들입니다.
두 번째 이미지를 보면 각 patch별로 본인과 가장 유사한 정상 patch를 잘 찾아내는 모습을 볼 수 있습니다.
이를 통해 왜 pixel level에서 유독 성능이 좋은지 추측할 수 있습니다.

4-2. STC

다음은 상하이 테크 캠퍼스(STC) 데이터셋입니다. STC 데이터셋은 대학 캠퍼스의 CCTV 영상 데이터셋입니다.

11.STC image level 성능
그림11. STC image level 성능

위 표는 STC 데이터셋의 image level Anomaly Detection 성능입니다.

12.STC pixel level 성능
그림12. STC pixel level 성능

위 표는 STC 데이터셋의 pixel level Anomaly Detection 성능입니다. Image level에서는 1등이 아니지만, pixel level에서 가장 좋은 성능을 확인할 수 있습니다.

5. Ablations

다음은 ablation을 통해 왜 SPADE의 성능이 좋은지 살펴보겠습니다.

5-1. Feature pyramid matching의 효과

과연 다양한 level의 feature를 사용한 전략은 얼마나 효과적이었을까요?

13.feature pyramid matching 효과
그림13. feature pyramid matching 효과

위 표는 mvTec 데이터셋에서 다양한 level의 feature를 사용하여 성능을 측정한 표입니다.
각 클래스별로 가장 성능이 좋은 layer의 level이 다른 모습을 볼 수 있습니다. 하지만 이를 모두 사용하는 SPADE는 모든 정보를 종합하여 평균적으로 가장 좋은 성능을 내는 모습을 볼 수 있습니다. 이 실험을 통해 feature pyramid matching 방식이 효과적임을 알 수 있습니다.

6. 의의와 한계

SPADE의 의의는 다음과 같습니다.
첫 번째로 사전 학습된 네트워크를 사용하는 거의 최초의 산업용 Anomaly Detection 방법이라는 것입니다.
물론 Deep Neares Neighbor 같이 사전 학습된 네트워크를 사용하는 Anomaly Detection 방법론이 존재하긴 했습니다. 하지만 산업용 알고리즘으로 사용될 수 있을 만큼 성능이 좋고, pixel level로도 측정 가능한 알고리즘은 최초라고 할 수 있습니다. SPADE는 이후 Mahalanobis AD, PaDiM, PatchCore등에 영감을 주었습니다.
두 번째로 이후 사전 학습된 네트워크를 사용하는 방법론들에 영감을 제공했다는 점입니다. 특히 Anomaly Detection의 가장 중요한 논문 중 하나인 PatchCore의 핵심 철학에 큰 영감을 주었습니다.

7. 결론

Patch feature들을 모두 사용함으로써 alignment 효과를 보는 Anomaly Detection 방법론인 SPADE를 살펴봤습니다. SPADE는 image level detection과 pixel level segmentation이 모두 가능한 방법입니다. Feature pyramid 방식을 사용하여 모든 특성을 정보를 사용하게 되고, 이를 통해 성능을 향상할 수 있었습니다. SPADE는 높은 정확도뿐만 아니라 사용하기에도 편리하다는 장점을 갖고 있습니다. 이는 산업용 Anomaly Detection으로서의 큰 장점이라고 할 수 있습니다.

Series Navigation<< [Pretrained Feature Matching 방식의 Anomaly Detection][20′ ICPR] Mahalanobis AD : Modeling the Distribution of Normal Data in Pre-Trained Deep Features for Anomaly Detection >>
0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
Scroll to Top