[21′ ICPR] PaDiM : a Patch Distribution Modeling Framework for Anomaly Detection and Localization

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

내용 요약

기존의 SPADE와 Mahalanobis AD는 각각의 한계가 존재했습니다. 이를 해결하기 위해 PaDiM은 patch단위의 multivariate gaussian modeling을 사용하는 Anomaly Detection 방법을 제안합니다. PaDiM은 mvTec, STC 데이터셋에서 다른 방법들보다 성능이 우수함을 보였습니다.

1. 들어가며

이번 글에서는 2021년 ICPR에 발표된 PaDiM : a Patch Distribution Modeling Framework for Anomaly Detection and Localization 논문을 리뷰합니다. 이 논문은 PaDiM이라는 별칭으로 불리며, 따라서 이번 글에서는 PaDiM으로 지칭하겠습니다. Anomaly Detection에 관한 기본적인 내용은 Anomaly Detection에 관한 모든 것 글을 참고해주세요.

먼저 제목의 의미를 통해 저자들이 가장 강조하고자 했던 내용을 생각해 보겠습니다.
PaDiM의 제목은 기존의 distribution modeling을 사용하는 Anomaly Detection 방법을 patch level로 확장한 방법이라는 의미를 갖고 있습니다. 이번 글에서는 이러한 내용에 초점을 맞춰 살펴보도록 하겠습니다.

PaDiM의 contribution은 다음과 같이 요약할 수 있습니다.
첫 번째는 각각의 patch를 multivariate gaussian distribution으로 설명했다는 것입니다.
기존 방법인 Mahalanobis AD에서는 patch가 아닌 image별로 multivariate gaussian distribution을 적용했습니다.
두 번째는 pretrained CNN의 layer별 특성을 한 번에 고려하는 방법을 제안했다는 것입니다.
세 번째는 mvTec, STC 데이터셋뿐만 아니라 자체 제작한 non-aligned mvTec 데이터셋에서도 기존 방법들보다 좋은 성능을 보였다는 것입니다.

PaDim 전에도 pretrained network를 사용하거나 Mahalanobis distance를 사용하는 Anomaly Detection 방법은 존재했습니다. 예를 들어 SPADE는 pretrained network를 사용하여 추출한 feature들로부터 kNN을 사용하여 anomal score를 측정했습니다. 하지만 SPADE는 성능이 충분히 높지 않았죠. PaDiM의 저자들은 이에 대한 원인으로 kNN을 지목합니다. kNN은 너무 단순한 알고리즘으로 정상 데이터 전체의 특성을 반영하지 못하기 때문에 성능이 높지 않다고 지적하죠.
또한 pretrained network를 사용하여 추출한 feature들로부터 Mahalanobis distance를 사용하여 anomal score를 측정하는 Mahalanobis AD 방법도 있었죠. 이는 각각의 이미지 feature들이 multivariate gaussian distribution을 하고 있음을 전제로 합니다. Mahalanobis AD는 이러한 전제를 patch level이 아닌 image level로 제한하여 성능 향상을 극대화하지 못했다는 한계가 있습니다.

PaDiM은 SPADE와 Mahalanobis AD의 한계를 개선한 방법입니다.
따라서 이번 글에서는 다양한 측면에서 PaDiM을 SPADE와 Mahalanobis AD와 비교하며 논리를 전개합니다.

SPADE의 자세한 내용은 해당글을 참고해 주세요.

Mahalanobis AD의 자세한 내용은 해당글을 참고해 주세요.

2. 제안 방법

그럼 이러한 한계를 극복하기 위한 PaDiM의 아이디어를 살펴보겠습니다.

2-1. 큰 그림

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

1.PaDiM 작동 방식
그림1. PaDiM 작동 방식

위 그림은 PaDiM의 작동 방식을 구조화 한 그림입니다.
먼저 가장 왼쪽은 N개의 학습용 정상 이미지를 나타냅니다. 가운데 그림은 특정 위치 patch feature를 추출하는 모습입니다. 이때 세 개 layer에서 추출한 feature를 합하여 하나의 feature로 구성하는 모습을 볼 수 있습니다. 오른쪽 그림은 이렇게 추출한 WxH개의 patch들이 각각의 mean과 covariance를 갖는 모습을 나타냅니다. 복잡하게 보일 수 있는데요, Mahalanobis AD와 비교해보면 간단합니다.

2.Mahalanobis AD, PaDiM 작동 방식 비교
그림2. Mahalanobis AD, PaDiM 작동 방식 비교

위 그림은 Mahalanobis AD와 PaDiM의 동작 방식을 비교한 그림입니다.
먼저 Mahalanobis AD를 보겠습니다. 한 개 이미지에서 추출한 feature에 pooling을 적용하여 대표 feature를 만듭니다. 그리고는 Mahalanobis distance를 적용하는 모습을 볼 수 있습니다.

이번에는 PaDiM을 보겠습니다.
PaDiM은 Mahalanobis AD와 달리 feature를 추출한 뒤 pooling을 하지 않습니다. 대신 feature를 patch별로 나눕니다. 위 그림에서는 총 4×4개의 patch로 분리합니다. 그럼 각각 N 개씩의 정상 patch feature들이 있는 4×4개의 다른 위치의 patch 덩어리들이 생길 겁니다. 이제 각각의 patch 덩어리들에 각각의 Mahalanobis distance를 적용해 줍니다.

즉 Mahalanobis AD는 Pooling 한 feature에 한 번의 Mahalanobis distance를 적용하는 반면, PaDiM은 Pooling 하지 않은 feature에 patch별로 Mahalanobis distance를 적용한다는 차이점이 있습니다.

2-2. Feature 추출 방법

SPADE와 Mahalanobis AD에서는 다양한 layer에서의 feature를 모두 사용해야 하는 중요성에 대해 강조했습니다. PaDiM은 어떤 방법으로 다양한 layer의 feature를 사용할까요?
PaDiM은 SPADE와 동일한 철학을 공유합니다. 즉 layer별로 추출한 feature를 모두 concat 하여 하나의 feature로 구성한 뒤 anomal score를 측정하는 방법이 가장 유용하다는 것이죠.

3.feature 추출 방식
그림3. feature 추출 방식

위 그림은 PaDiM과 SPADE의 feature를 통합하는 방법을 나타낸 그림입니다.
위에서 사용된 pretrained CNN은 총 세 개의 layer에서 feature를 추출했다고 가정하겠습니다. 이제 각각의 이미지에서는 세 개의 feature 덩어리들이 나올 겁니다. 이 feature 덩어리들을 가장 큰 resolution feature에 맞게 resize 하여 resolution을 맞춰줍니다. 그리고 channel 방향으로 concat 하여 하나의 feature 덩어리로 만들어줍니다. 이러한 feature 사용 방법의 효과는 아래의 실험 항목에서 살펴보도록 하겠습니다.

2-3. 정상 분포 학습

이번에는 PaDiM의 정상 분포 학습 과정을 살펴보겠습니다.
논문에서는 learning of normality라고 표현했지만, 사실 딥러닝에서 말하는 학습 과정은 아닙니다. 단지 patch별 mahalanobis distance를 구하기 위해 정상 데이터 patch feature들의 covariance를 구하는 과정이죠. 이 과정은 Mahalanobis AD와 정확하게 동일합니다. 다만 Mahalanobis AD는 이러한 과정을 pooling 된 feature에 대해 한번 적용할 뿐이고, PaDiM은 pooling 하지 않은 feature에 대해 patch별로 적용했다는 차이가 있습니다.

이 내용에 대해서는 아래 Mahalanobis AD글의 Mahalanobis distance를 구하는 과정을 참고해 주세요.

2-4. Anomal score

다음은 anomal score를 측정하는 방법을 살펴보겠습니다.
PaDiM은 patch별로 anomal score를 측정합니다. 따라서 이미지 하나당 patch 개수만큼의 anomal score가 나오게 됩니다. 위에서 예시로 사용한 그림대로라면 이미지당 4×4개의 anomal score가 나옵니다. 이 score map은 그대로 pixel level의 segmentation anomal score가 됩니다. 또한 PaDiM은 이 중 가장 큰 anomal score를 해당 이미지의 대표 anomal score로 정해줍니다. 이는 이미지 중 가장 불량인 부분이 해당 이미지의 불량 정도라는 철학을 내포하고 있습니다.

2-5. SPADE, Mahalanobis AD, PaDiM의 비교 

이번에는 SPADE와 Mahalanobis AD, PaDiM을 다양한 측면에서 비교, 정리해 보겠습니다.
먼저 anomal score를 측정하는 단위가 되는 feature를 어떻게 구분하는지 비교해 보겠습니다. SPADE와 PaDiM은 patch level로 구분하여 feature를 선택합니다. 반면 Mahalanobis AD는 image level에서의 feature를 그대로 사용합니다. SPADE와 PaDiM은 모두 patch level의 feature를 사용하지만 이 둘은 결정적인 차이가 존재합니다. SPADE는 모든 patch를 메모리에 올려 비교합니다. 즉 위치와 상관없이 모든 patch와 비교해 anomal score를 측정하죠.

하지만 PaDiM은 다릅니다. 모든 위치의 patch와 비교하지 않죠. PaDiM은 나와 동일한 위치의 patch들과만 비교를 한다는 차이가 있습니다.

다음은 anomal score 측정 방법을 비교해 보겠습니다.
SPADE는 kNN을 사용하여 anomal score를 측정합니다. 반면 Mahalanobis AD와 PaDiM은 Mahalanobis distance를 사용하여 anomal score를 측정합니다.

다음은 다양한 layer의 feature를 사용하는 방법을 비교해 보겠습니다.
SPADE와 PaDiM은 feature pyramid 방식을 사용하여 하나의 feature로 구성한 뒤 anomal score를 측정합니다. 반면 Mahalanobis AD는 각 layer feature별로 anomal score를 측정한 뒤 모두 합치는 방식을 적용합니다.

3. 실험 결과

이제 PaDiM은 기존의 다른 방법들보다 얼마나 성능이 좋은지 실험을 통해 확인해 보겠습니다.

3-1. mvTec

먼저 산업용 데이터셋인 mvTec에서의 성능을 다른 방법들과 비교해 보겠습니다.

mvTec은 크게 두 가지 종류의 클래스로 구분해서 생각해볼 수 있습니다.
첫 번째는 carpet, grid, leather, tile, wood 등의 texture 클래스입니다. 이들은 이미지 내에 뚜렷한 특성을 지닌 부분이 적고, 이미지 모든 영역이 비슷하게 생겼다는 특징이 있습니다.
두 번째는 bottle, cable, capsule, hazelnut, metal nut, pill, screw, toothbrush, transistor, zipper 등의 object 클래스입니다. 이들은 하나의 뚜렷한 물체와 배경으로 구성되었다는 특징이 있습니다.
대부분의 Anomaly Detection 방법들이 texture 클래스와 object 클래스에 대해 강약점이 다르게 나타납니다.

4.mvtec image level 성능
그림4. mvtec image level 성능

위 표는 mvTec 데이터셋에 대한 다양한 방법들의 image level 성능을 비교한 것입니다.
성능을 texture 클래스, object 클래스, 모든 클래스로 나누어 측정한 모습입니다. PaDiM의 주요 비교 방법은 SPADE와 Mahalanobis AD, Patch SVDD입니다.

먼저 SPADE와 성능을 비교해 보겠습니다.
SPADE는 전체 클래스에 대해서만 성능을 측정했습니다. PaDiM은 SPADE처럼 patch 단위로 성능을 측정했지만 kNN이 아닌 Mahalanobis distance를 사용하는 방법으로 전체 클래스 기준 10% 이상의 성능 향상을 보였습니다.

이번엔 Mahalanobis AD와 성능을 비교해 보겠습니다.
Mahalanobis AD의 방식을 patch 단위로 적용하여 PaDiM은 texture 클래스, object 클래스 모두에서 조금씩의 성능 향상을 보였습니다. 또한 PaDiM은 patch level의 접근법이라는 측면에서 Patch SVDD도 비슷한 철학이라고 할 수 있습니다. 마찬가지로 모든 클래스에서 PaDiM이 Patch SVDD보다 훨씬 높은 성능을 보입니다. 기타 다른 방법들보다도 훨씬 높은 성능을 확인할 수 있습니다.

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

위 표는 mvTec 데이터셋에 대한 pixel level 성능을 비교한 것입니다.
이번에는 모든 클래스들 각각에 대한 성능을 확인할 수 있습니다. 종합 성능 면에서는 PaDiM이 다른 방법들보다 높은 모습을 볼 수 있습니다.

재미있는 건 texture 클래스와 object 클래스에서의 SPADE와 PaDiM의 성능입니다.
결과를 보면 PaDiM은 SPADE에 비해 texture 클래스에서는 강하고, object 클래스에서는 약한 모습을 볼 수 있습니다.

이 결과에 대해서는 조금 더 생각해볼 필요가 있습니다. 왜 PaDiM은 SPADE보다 texture 클래스에서 강하고 object 클래스에서 약할까요?
PaDiM은 동일 위치의 patch들에 관해서만 분포를 추정합니다. 즉 translation, rotation 등의 변화로 위치가 틀어져있는 이미지들에 대해서는 성능이 급격하게 떨어질 수밖에 없습니다.
반면 SPADE는 모든 patch들의 관계를 고려하므로 이러한 면에서 조금 더 자유롭다고 할 수 있습니다. 따라서 PaDiM은 위치 틀어짐이 거의 없는 texture 클래스에서는 강하지만, 조금씩 위치 틀어짐이 있는 object 클래스에서는 약하다고 해석할 수 있습니다.

3-2. STC

다음은 상하이 테크 캠퍼스 데이터셋 (STC)에서의 성능 비교를 살펴보겠습니다.
STC 데이터셋은 대학 캠퍼스의 CCTV 영상 데이터셋입니다. mvTec과 비교했을 때 캠퍼스라는 환경과 영상 데이터라는 차이가 있습니다.

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

위 표는 STC 데이터셋에 대한 다양한 방법들의 성능을 비교한 것입니다.
Localization 성능만 제시하고 있는데요, 일단 주어진 방법들 중에서는 PaDiM이 가장 좋은 성능을 보이고 있습니다. STC 데이터셋은 고정된 CCTV 영상 데이터셋이므로 배경은 고정된 상태고 사람들만 움직인다는 특징이 있습니다. 따라서 비교적 위치 틀어짐이 적은 편이라 PaDiM에게는 나쁘지 않은 조건의 데이터셋이라고 생각할 수 있습니다.

4. Ablations

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

4-1. Inter layer correlations 

먼저 layer별 성능을 비교해 보겠습니다.

7.inter layer correlations
그림7. inter layer correlations

위 표는 다양한 layer의 feature로 측정한 PaDiM의 mvTec 성능입니다.
이때 layer 1+2+3은 layer1,2,3으로 성능을 각각 측정한 뒤 모두 더하는 방식입니다.

위 표를 통해 두 가지 사실을 관찰할 수 있습니다.
첫 번째는 layer1, 2, 3을 각각 사용하는 것보다 모두 더해서 사용하는 게 더 좋다는 것입니다.
두 번째는 score를 단순히 더하는 방법보다 PaDiM의 방식대로 모든 feature를 concat 하여 사용하는 게 더 좋다는 것입니다.

4-2. Dimensionality reduction

다음은 차원 축소가 PaDiM에 미치는 영향에 대한 분석입니다.

PaDiM은 patch별로 Mahalanobis distance를 구하기 위해 convariance를 구해야 합니다. 한 번의 covariance를 구하는 것도 시간이 꽤 걸리는데, 이를 모든 patch에 대해 구해야 하기 때문에 이 부분이 bottleneck이 됩니다. 따라서 차원 개수라도 줄여주면 속도 측면에서 큰 도움이 될 겁니다.

8.차원 축소의 효과
그림8. 차원 축소의 효과

위 표는 차원을 축소해서 동일한 PaDiM 방식으로 실험했을 때의 성능을 비교한 것입니다.
Rd는 랜덤으로 차원을 선택한 방법이고, PCA는 주성분 분석을 사용하여 차원을 선택한 방법입니다.
첫 번째 행의 Rd100, PCA100은 100개의 차원만 선택했을 때의 성능을 의미합니다.
두 번째 행의 Rd200, PCA200은 200개의 차원만 선택했을 때의 성능을 의미합니다.
세 번째 행의 all (448)은 448개 모든 차원을 사용했을 때의 성능을 의미합니다.

위 표를 통해 두 가지 사실을 관찰할 수 있습니다.
첫 번째는 PCA보다 랜덤 선택의 성능이 더 낫다는 것입니다. 이건 통념과는 반대되는 결과라 의아할 수 있습니다. Mahalanobis AD에서도 이와 비슷한 실험을 진행했습니다. Pretrained network와 Mahalanobis distance를 결합한 방식에서는 PCA보다 그 반대 방법인 NPCA가 더 효과적임을 밝혔죠. 자세한 내용은 Mahalanobis AD 글의 ablation 편을 참고해 주세요. PaDiM도 같은 방식이므로 같은 관점에서 이해할 수 있습니다.
두 번째는 랜덤으로 차원을 선택해도 성능 저하는 크지 않다는 것입니다. 반면 차원이 1/4 이상 줄어들었으므로 속도는 16배 이상 빨라졌을 겁니다.

따라서 PaDiM은 랜덤으로 선택한 소수의 차원만으로 사용하는 편이 유리하다고 결론 내릴 수 있습니다.

4-3. Anomaly localization on a non-aligned dataset

이번에는 데이터셋의 alignment가 틀어졌을 때의 성능을 비교해 보겠습니다.

9.dataset alignment의 효과
그림9. dataset alignment의 효과

위 표는 mvTec을 조작하여 alignment를 망가뜨린 데이터셋(RD-mvTec)으로 측정한 성능입니다.

크게 두 가지 조작을 가했습니다.
첫 번째는 위치입니다. 기존 256×256에서 224×224로 random crop 하여 위치 틀어짐을 구현해 주었습니다.
두 번째는 회전입니다. 학습용 테스트용 데이터셋 모두에 10도 정도의 랜덤 회전을 적용해 주었습니다.

성능을 보겠습니다.
PaDiM은 원본 mvTec 성능 대비 크게 떨어지지 않은 모습입니다. 반면 SPADE는 성능 하락폭이 큰 모습을 보입니다. 위의 mvTec 메인 실험에서 PaDiM은 alignment에 강인하지 않다고 해석했었는데요, 이 결과는 그 반대 결과를 보여주고 있어서 의아합니다.

4-4. Time complexity

다음은 동작 시간에 관한 분석 실험입니다.

10.time complexity
그림10. time complexity

위 표는 mvTec 데이터셋에 대해 다양한 방법들의 inference time을 측정한 것입니다.
우선 SPADE는 압도적으로 느린 모습을 보입니다. kNN을 사용하기 때문에 데이터셋에 커질수록 더 느린 모습을 보일 겁니다.
반면 PaDiM은 VAE 방식과 비슷한 수준의 속도를 보여줍니다. 이때의 속도 측정은 covariance를 구하는 단계는 제외한 속도입니다. 이는 학습 단계라고 생각하고, 순수하게 inference 시간만 측정한 것입니다.
Inference 속도만 생각했을 때는 충분히 좋은 사용성을 보여준다고 할 수 있습니다.

4-5. Memory complexity

다음은 메모리 사용량에 대한 분석 실험입니다.

11.memory complexity
그림11. memory complexity

위 표는 mvTec, STC 데이터셋에 대해 다양한 방법들의 메모리 요구량을 나타낸 것입니다.
SPADE는 데이터셋 사이즈가 커지면 메모리 사용량도 그에 따라 커지는 모습을 볼 수 있습니다. 왜냐하면 모든 patch 정보를 메모리에 올려야 하기 때문입니다.
반면 PaDiM은 데이터셋 사이즈와 메모리 사용량은 관계가 없습니다. 그저 pretrained network와 covariance 정도만 메모리에 올려놓기 때문입니다. 단지 resolution에 따라 구해야 하는 covariance가 늘어나 약간의 메모리 사용량이 늘어난다는 특징 정도만 있습니다.

5. 결론

Pretrained network를 사용하여 추출한 patch feature에 Mahalanobis distance를 사용하여 anomal score를 측정하는 PaDiM 방법을 살펴봤습니다. PaDiM은 mvTec과 STC 데이터셋에서 다른 방법들보다 성능이 우수함을 보였습니다. 게다가 non-aligned mvTec 데이터셋에서도 비교적 성능 하락이 크지 않음을 보였습니다. 또한 메모리 사용량도 적으며 inference 속도가 빨라 실제 산업 환경에서 사용하기에 적합함을 보였습니다. PaDiM은 학습 단계 없이 바로 사용할 수 있는 성능이 아주 좋고 빠른 Anomaly Detection 방법이라는 의의가 있습니다.

Series Navigation<< [20′ ICPR] Mahalanobis AD : Modeling the Distribution of Normal Data in Pre-Trained Deep Features for Anomaly Detection[22′ CVPR] PatchCore : Towards Total Recall in Industrial 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