Sub-Image Anomaly Detection with Deep Pyramid Correspondences

똑딱뚝딱·2023년 3월 9일
0

Sub-Image Anomaly Detection with Deep Pyramid Correspondences

  • arXiv 2020


출처 : paperswithcode

MVTec dataset을 사용한 anomaly detection task에서의 rank

Introduction

대부분의 제품은 정상으로 존재하지만, 일부 제품에 결함이 존재할 수 있음
이 때, 이러한 결함이 존재하는 제품을 빨리 감지하는 것이 중요
각 제품의 결함을 탐지하기 위해서는 computer vision solution이 필요

본 논문에서는 이미지에 존재하는 이상 부분을 탐지하기 위한 방법을 제시
제안하는 방법은 Semantic Pyramid Anomaly Detetion(SPADE)라고 칭함
기존의 kNN based methods의 한계점이었던 segmentation 성능을 보완하고, feature pyramid를 사용하여 다양한 resolution의 정보를 사용하여 task를 수행하고자 함

SPADE는 sub-image의 anomaly detection과 segmentation task를 해결하여 각 image에서 어떤 부분이 이상인지를 탐지하고자 함



Details of SPADE

Image feature extraction

SPADE는 task를 수행하기 위하여 따로 학습 과정을 거치지 않고 사전에 학습된 모델을 사용하여 image feature를 추출
본 논문에서는 ImageNet으로 학습한 ResNet을 사용

  • pre-trained model을 사용하여 따로 학습하는 시간 감소
  • pre-trained model 큰 dataset을 사용하여 학습했기 때문에 다양한 feature를 구분할 수 있을 것

➔ 큰 dataset으로 학습한 pre-trained model을 사용하여 따로 학습하는 시간을 줄이고 보장된 성능의 model을 사용하여 이미지의 feature를 추출



K Nearest Neighbor Normal Image Retrieval

pre-trained model을 사용하여 추출한 noraml data의 feature들은 서로 가까운 거리에 위치할 것
test dataset의 normal 이미지 feature의 분포는 train dataset의 feature의 분포와 유사할 것
반면 abnormal 이미지의 feature는 normal data의 featrue와 먼 거리에 위치할 것

➔ kNN을 사용하여 feature들이 얼마나 멀리 떨어져 있는지 측정



Image-level detection

하나의 image에 대해 normal/abnormal을 판단
SPADE에서는 마지막 convolutional layer를 통과한 feature에 global pooling을 적용하여 최종 feature를 추출

* ResNet의 마지막 layer의 구조

출처 : Deep Residual Learning for Image Recognition(CVPR 2016)

  • Global Average Pooling
    feature map 내의 값들의 평균을 사용
    max 값을 대푯값으로 사용하는 maxpooling과 달리 일정 구역 내의 평균 값을 사용
    때문에 어느 위치에 있는지보다 해당 구역 내에 있는지 없는지에 중점을 둠


Pixel-level detection

SPADE가 초점을 맞춘 detection method

image level에서와 달리 average pooling을 하지 않고 feature를 patch 단위로 분리
(본 논문에서는 pixel이란 단어를 사용했지만, ViT에서 사용하는 patch라는 단어가 익숙해서 patch로 작성)

모든 patch들을 모아둔 것을 feature gallery로 칭하고 해당 patch들을 anomaly score를 측정하는 단계에서 사용



Anomaly Score

FF : feature extractor
xix_i : image
fif_i : extracted feature

fi=F(xi)f_i = F(x_i)

yy : test image

Image-level

Euclidean distance를 이용하여 image-level feature 간의 거리를 측정

Nk(fy)N_k(f_y) : 가장 가까운 k개의 training set의 normal image feature

Anomalyscore(y)=1KfNk(fy)ffy2Anomaly \: score(y) = \frac{1}{K} \sum_{f \in N_k(f_y)} \|f - f_y \|^{2}


training set의 normal image feature와 test set의 image feature와의 거리

  • normal : 가장 가까운 k개의 정상 featue와의 평균 거리는 가까울 것
  • abnormal : 평균 거리가 멀게 계산될 것

➔ training set의 normal feature들로부터 먼 거리에 위치할수록 anomaly로 판단


Pixel-level

feature map이 m개의 patch로 나뉘었다면, 각 patch를 모든 patch와의 거리를 측정
image-level의 경우 normal data임에도 training set에 존재하는 image의 형태와 다르면 anomaly 판단할 것
또한, 같은 위치에 존재하는 patch 끼리만 비교하게 되면 같은 image의 다른 부분이 해당 위치에 존재할 경우 feature patch의 거리가 멀게 측정될 것

➔ 모든 patch와의 거리를 비교하여 같은 이미지가 회전 등의 이유로 변형되었을 경우에도 이를 normal로 판단할 수 있도록 함

Anomalyscore(y,p)=1kfNk(F(y,p))fF(yp)2Anomaly\:score(y,p) = \frac{1}{k} \sum_{f \in N_k(F(y,p))} \|f - F(y-p) \|^{2}


Feature Pyramid Matching

CNN based model의 각 layer는 layer의 위치에 따라 서로 다른 feature 정보를 학습

  • low level feature : local 정보 ↑ / contextual(global) 정보 ↓
    higher resolution features encodingn less context
  • high level feature : local 정보 ↓ / contextual 정보 ↑

각 layer level에 따라 지니고 있는 정보의 특징이 다름
본 논문에서는 각 level에 따른 feature 정보를 모두 사용하여 각 level에서 부족한 정보량을 보완하여 성능을 향상시키고자 함
최종적인 feature는 fine-grained local features와 global context features 모두 인코딩함

본 논문에서는 3개의 layer의 output을 사용
서로 다른 resolution의 feature를 concat하기 위해서 bilinear interpolation을 통해 resize 후에 concat으로 하나의 feature map으로 만들어 줌



Conclusion

MVTec dataset의 hazelnut과 metal net class SPADE example

첫 번째 행 : anomalous image
두 번째 행 : 가장 비슷한 normal image
세 번째 행 : anomalous image piexel의 ground truth
네 번째 행 : SPADE가 예측한 anomalous image pixels

test image와 가장 비슷한 normal image를 탐색하고 해당 image와 비교를 통해 anomalous 영역을 예측



요약

SPADE는 image 내부의 결함 영역을 탐지하고자 함
pre-trained model을 사용하여 feature extraction을 수행 ➔ normal image를 학습시키는 시간 감소 & 사용 편리
kNN 방법을 사용하여 정상과 비정상을 구분
image-level detection과 piexel-level detection이 모두 가능
feature pyramid 방식을 사용 ➔ 다양한 feature 정보를 사용

* 현재 SOTA인 PatchCore의 기반이 되는 모델

Github
SPADE github

0개의 댓글