갓생살기프로젝트

[논문리뷰] Multi-scale patch-based representation learning for image anomaly detection and segmentation 본문

인공지능/논문리뷰

[논문리뷰] Multi-scale patch-based representation learning for image anomaly detection and segmentation

Heeyeon.dev 2023. 5. 30. 15:41
728x90
오늘 리뷰할 논문은
"Multi-scale patch-based representation learning for image anomaly detection and segmentation"[1]
입니다.

링크 : https://openaccess.thecvf.com/content/WACV2022/papers/Tsai_Multi-Scale_Patch-Based_Representation_Learning_for_Image_Anomaly_Detection_and_Segmentation_WACV_2022_paper.pdf


이 논문은 제목에서도 알 수 있듯이 Representation Learning(Self-Supervised Learning)을 활용하여 anomaly detection과 anomaly segmentation을 수행한 논문입니다. 이미 알고있는 간단한 방법들로 task를 수행했는데 생각보다 성능적인 부분에서 우수한 성능을 낸 논문입니다.

1. Training Stage

Training overview

Training 단계에서는 제목에서 Multi-scale patch-based라고 말한 것 처럼 다양한 크기의 패치를 사용하여 encoder를 학습시킵니다. 논문에서는 64x64, 32x32, 그리고 16x16 사이즈의 패치를  학습에 사용하여 사용하여 각각 다른 크기의 input을 받는 encoder Enc64, Enc32, Enc16을 학습시킵니다.그리고 이 encoder들의 결과로 나온 feature를 k-means clustering을 활용해 군집화하고, Classifier로 보내 두 패치 사이의 relative angle을 추론합니다.이것이 전반적인 training 단계 과정인데, loss함수를 보면서 좀 더 자세하게 설명해보도록 하겠습니다.

2. Objective Functions

(1) SVDD Loss & Cos Loss

먼저 SVDD Loss는 유사한 패치 사이의 semantic한 정보를 모으고자 설계한 loss인데 단순히 패치 사이의 L2 norm으로 계산합니다. 하지만 이 경우에 패치 사이의 거리가 멀면 의미적으로 덜 유사할 수 있기 때문에 Cos Loss를 추가해주었습니다.
Cos Loss는 Cosine Similarity를 활용하여 Contrastive Learning과 유사하게 디자인한 loss function입니다.

SVDD/Cos Loss를 사용할 때 patch selection

위 그림은 SVDD와 Cos Loss를 사용하여 Encoder를 학습시킬 때 patch를 선택하는 방법입니다.
먼저 기준이 되는 Pi 패치를 뽑고 인접한 픽셀에서 패치 Pj를 뽑습니다. 이 때, Enc64는 Pi패치의 start point기준으로 +4~-4 픽셀 안에서 Pj의 start point를 선택하고 Enc32는 +2~-2, Enc16은 +1~-1 픽셀 안에서 선택합니다.
왜냐하면, 근처에 있는 패치를 뽑아야지만 그 유사성이 보장되기 때문입니다.

그리고 Cos Loss는 추가적으로 패치 Pk를 뽑는데 위의 Loss에서 알 수 있듯이 Pk의 목적은 contrastive learing의 negative pair를 생성하는 것에 있습니다.
가까이에서 뽑은 Pi와 Pj패치의 유사성은 높게, 멀리서 뽑은 Pk와 기준이 되는 Pi의 유사성은 작게 가져가겠다는 것이지요.


(2) SSL Loss

SSL Loss는 Self-Supervised Learning Loss인데 이 논문에서는 pretext task로 패치 사이의 각도를 추론하는 것으로 설정하였습니다. (단순히 Cross Entropy 사용함. )라벨 y는 0~11까지 11개가 있으며, 각각의 라벨은 0도, 30도, 60도, ... 330도 입니다.

단순하게 패치만 주고 각도를 맞출수는 없기 때문에 학습과정에서 패치를 뽑을때 각도를 설정하고 패치를 뽑아줍니다.

(그림 상에서는 Pm, Pn으로 나와있지만 loss function의 Pi, Pj와 동일합니다. //Pm == Pi, Pn == Pj)
(1) 기준이 되는 Pm 패치를 랜덤하게 뽑고 (2) Pn을 패치 사이즈만큼 떨어진 간격 안에서 랜덤하게 선택된 각도에 맞춰서 뽑습니다.

(3) Kmean Loss
좀 더 나은 feature representation을 학습하기 위해서 K-means clustering 도입하였는데, embedding된 patch를 가지고 cluster를 구분하였고, 그 feature들이 클러스터의 센터와 가까워지게끔 loss를 구성하였습니다.
(각 클러스터의 센터점인 Ck는 5 epoch마다 업데이트 합니다.)
(논문에서 K의 숫자(클러스터의 개수)는 언급하지 않음)

앞에서는 patch를 선택할 때 제한조건이 있었지만, Kmeans loss는 제약 조건 없이 random하게 patch selection을 진행합니다.
* Overall Loss

이렇게 모든 loss를 합해서 전체 loss를 구성하는데 이 때 학습데이터가 similar pattern일 수록 λ를 크게 세팅합니다.
아마, 유사한 패턴인 경우 SSL Loss로 학습하기 어려울 것이기 때문에 SSL의 영향을 덜 받게끔 한 것 같습니다. 

(ex. 그물망 사진에서 두 개의 패치를 뽑아 그 각도를 추론하기 힘듬) 

3. Inference Stage

 Inference Stage에서는 앞서 학습시킨 Encoder를 사용하여  Anomaly Map을 생성합니다.

Inference phase overview

먼저, Inference 할 이미지가 주어지면, 각각에 encoder에 넣어줄 수 있게끔 patch를 뽑습니다. 각각 64, 32, 16 사이즈의 패치를 오버랩핑하여 추출하는데 이 때, 64사이즈의 패치는 stride 16, 32와 16사이즈의 패치는 stride 4로 설정하여 패치를 추출합니다.
(추출한 패치는 encoder에 들어가 feature로 나옴.)

수식에서 $\theta$는 encoder의 각 크기를 의미함. $(\theta = {64, 32, 16})$

위 식처럼 모든 패치 $P_r^\theta$는 training dataset을 활용해 모든 normal feature embedding과의 L2 distance를 구하고 그 중 가장 작은 값을 abnormality $D_\theta$로 정의합니다.

* 이 부분에서 논문은 'calculating the shortest L2-distance between its feature embedding and all the normal feature embeddings in the training dataset' 이라고 표현하였는데 저는 모든 training dataset 안에 있는 데이터들과 inference로 들어온 input 이미지를 비교하겠다는 것으로 이해하였습니다.
과연 이게 맞는 것인지...? 만약 맞다면 굉장히 많은 cost를 요구하는 알고리즘이고, 성능적인 측면에서 안되는게 이상할 정도로 heuristic한 알고리즘이라고 생각되네요...
아무래도 실제 산업에서는 사용하기 힘든 방법일 것 같습니다. (inference 도중에 모든 training dataset에 접근하는 것이 현실적으로 가능할지? / 실시간성 보장도 안될 듯)

모든 패치에서 가장 작은 L2 distance로 abnormality를 계산한 다음, 패치가 overlapping 되는 부분들을 단순히 평균내어 anomaly map을 정의합니다.

그리고 모든 인코더에서 각각 anomaly map을 생성하였다면, 각 인코더에서 나온 anomaly map을 element-wise addition으로 연산해 최종 anomaly map을 생성합니다.

최종적으로 만든 anomaly map을 통해 anomaly detection을 수행하는데 특정 픽셀 하나에서 튀는 값(outlier) 때문에 모델이 이를 anomaly라고 인식하는 것을 방지하고자 sliding window(8x8, stride=4)를 사용합니다. (이 방법을 통해 논문에서는 false positive를 효과적으로 줄였다고 함.)

8x8 윈도우 안에 있는 값을 모두 더해 평균내어 최종 anomaly score로 정합니다.

하지만 이 방법이 false positive를 줄이는데는 좋았을 수 있겠지만, 이 모델의 anomaly segmentation 결과를 보면 이 윈도우 때문에 결과가 grid 하게 조각조각 색칠되지 않았나 싶습니다.

4. Experiments

논문에서는 다양한 실험들과 그 결과에 대해서 얘기하고 있지만 다른 것들은 크게 유의미하지 않다고 생각합니다...
왜냐면 위에서도 얘기했지만 inference 할 때, training data를 쓰는 것 자체가 다른 방법들과 비교하는 것이 과연 맞나..?라는 생각이 듭니다.

그래도 논문에서 제시한 Table 7의 결과는 논문에서 사용한 여러 loss가 결과에 얼마나 영향력이 있나를 확인할 수 있었습니다.
두 패치 사이의 각도를 추론하게 하는 pretext task에 사용한 SSL loss가 생각보다 꽤 많은 영향을 준다는 것을 확인하였습니다.
두 패치 사이의 Sementic 한 정보를 학습함으로써 model학습에 도움을 주지 않았나 생각합니다.

ref : 
[1] Tsai, Chin-Chia, Tsung-Hsuan Wu, and Shang-Hong Lai. "Multi-scale patch-based representation learning for image anomaly detection and segmentation." Proceedings of the IEEE/CVF Winter Conference on Applications of Computer Vision. 2022.

논문의 기본적인 알고리즘과 철학을 중심으로 담고자 생략한 부분이 많이 있으니 더 궁금하신 분들은 원본 논문을 참고하시기 바랍니다. 감사합니다.
728x90