[20′ ACCV] Patch SVDD : Patch-level SVDD for Anomaly Detection and Segmentation

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

내용 요약

기존에 존재했던 Deep SVDD는 intra class variance가 큰 데이터셋에서는 Anomaly Detection 성능이 떨어진다는 한계가 존재했습니다. Patch SVDD는 이를 해결하기 위해 patch level의 Deep SVDD 방법과 추가적인 Self Supervised Learning 방법을 적용합니다. Patch SVDD는 산업용 Anomaly Detection 데이터셋인 mvTec에서 기존 방법들 대비 가장 좋은 성능을 보였습니다.

1. 들어가며

이번 글에서는 2020년 ACCV에 발표된 Patch SVDD : Patch-level SVDD for Anomaly Detection and Segmentation 논문을 리뷰합니다. 이 논문은 Patch SVDD라고 불리며, 이번 글에서도 Patch SVDD라고 지칭하겠습니다. 이번 글은 독자들이 Anomaly Detection의 기본적인 내용을 알고 있다고 가정하고 있습니다. Anomaly Detection에 관한 기본적인 내용은 Anomaly Detection에 관한 모든 것을 참고해주세요.

2. 기존 방법의 문제점

2-1. 문제점

기존에 Deep SVDD라는 Anomaly Detection 방법이 존재했습니다. Deep SVDD는 SVDD에 딥러닝을 접목한 방법입니다. 고차원 공간에 존재하는 정상 데이터들은 저차원 공간상의 한 점에 모이도록 매핑해주는 방법을 사용했습니다. 테스트 단계에서는 이 한 점으로부터 떨어진 거리를 바탕으로 anomal score를 측정하는 방법입니다. Patch SVDD를 이해하기 위해서는 Deep SVDD 방식을 먼저 이해해야 합니다.

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

하지만 Deep SVDD는 intra class variance가 작은 데이터에서는 성능이 좋지만, 반대로 intra class variance가 큰 데이터셋에서는 성능이 떨어진다는 한계가 있습니다.

1.intra class variance에 따른 Deep SVDD 성능의 차이
그림1. intra class variance에 따른 Deep SVDD 성능의 차이

위 그림은 mvTec 데이터셋의 leather 클래스와 cable 클래스에 대해 Deep SVDD를 사용하여 Anomaly Detection을 수행한 결과입니다.
Leather 이미지에 대해서는 불량 부분을 잘 찾은 모습을 볼 수 있습니다. 반면 cable 이미지에 대해서는 불량 부분을 잘 못 찾는 모습입니다.

2-2. 원인

왜 이런 문제가 생겼을까요?
Leather 같은 경우 이미지 전체가 다 비슷한 특징을 갖고 있습니다. 아마 여러 장의 leather 이미지를 놓고 봐도 멀찍이서 보면 어디가 다른지 잘 모를 겁니다. 이렇게 동일 클래스 데이터들 간의 차이가 적은 경우를 intra class variance가 작다고 표현합니다. Intra class variance가 작은 데이터셋들은 고차원 공간에서도 넓지 않은 공간에 조밀하게 분포할 겁니다. Deep SVDD는 모든 정상 데이터를 한 공간으로 모으는 방법이라고 말씀드렸습니다. Intra class variance가 작은 데이터들은 이렇게 Deep SVDD를 사용하여 한 공간으로 모으면 큰 문제가 없을 겁니다. 왜냐하면 애초에 모든 데이터들이 비슷한 특성을 갖고 조밀하게 분포했으니까요.

반면 cable의 경우는 어떨까요?
Cable은 leather와는 반대로 intra class variance가 큰 클래스라고 할 수 있습니다. 여러 장의 cable 사진을 놓고 보면 각 사진별로 특징이 보이겠죠? 또한 모양, 색상 등 한 장의 이미지 안에서도 다양한 특징들이 존재합니다. 동일한 정상 cable 이미지라고 하더라도 특정 위치마다의 이미지 특성이 다 다를 겁니다. 따라서 이미지 공간상에서도 정상 데이터들은 아주 넓게 분포할 겁니다. 이렇게 넓고 규칙 없이 분포하는 점들을 leather와 마찬가지로 한 점으로 모아주려면 문제가 생기겠죠. 애초 의도와는 다르게 정상 데이터의 사이사이 존재하던 비정상 데이터들도 몽땅 한 점으로 같이 끌려와서 정상과 비정상 구분이 안되게 될 겁니다.

그럼 intra class variance가 큰 데이터셋에서도 잘 동작하려면 Deep SVDD를 어떻게 수정해줘야 할까요?

3. 제안 방법

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

3-1. 큰 그림

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

위에서 Deep SVDD 방법은 intra class variance가 작은 데이터셋에서는 잘 동작하지만, intra class variance가 큰 데이터셋에서는 잘 동작하지 못하는 이유를 살펴봤습니다.
그럼 이렇게 생각해보면 어떨까요? Intra class variance가 큰 데이터셋은 intra class variance가 작은 분포를 여러 개 포함하는 분포라고 생각해보는 거죠. 만약 Deep SVDD가 intra class variance가 작은 데이터셋에서는 잘 동작한다면, intra class variance가 큰 데이터셋에서는 여러 개의 Deep SVDD를 적용하면 되지 않겠어요? Intra class variance가 큰 데이터셋도 이를 패치별로 보면 intra class variance가 작은 여러 개의 분포를 합쳐놓은 것으로 볼 수 있을 겁니다. 위의 Cable 예시에서도 cable 이미지 전체를 놓고 보면 다양한 특징이 있지만 동일한 위치의 32×32 사이즈 패치만 잘라서 놓고 보면 거의 비슷하지 않겠어요?

2.Patch SVDD의 큰 그림
그림2. Patch SVDD의 큰 그림

그럼 위와 같은 큰 그림이 그려질 겁니다.
Deep SVDD는 이미지별 하나의 feature를 만들어서 한 점으로 모이도록 해줬죠. Patch SVDD는 이미지를 작은 패치별로 나누어 각 패치별 하나의 feature로 만들어줄 겁니다. 이때 패치별로 특징이 다 다를 거니 하나의 점이 아닌, 여러 개의 점에 나눠서 ‘각자 모이도록’ 분포하게 만들어줄 겁니다. 이를 네트워크를 사용하여 구현하면 다음과 같은 방식이 되겠네요.

3.Patch SVDD의 네트워크 구성
그림3. Patch SVDD의 네트워크 구성

그림의 위쪽은 Deep SVDD 방식을 나타낸 것입니다.
N개의 정상 이미지 데이터를 저차원 공간상에서 한 곳에 모이도록 N개의 점으로 매핑하는 모습을 볼 수 있습니다. 반면 아래쪽은 Patch SVDD 방식을 나타낸 것입니다. N개의 이미지가 N개의 feature로 매핑되는 것이 아닌 패치별로 나뉘어 4N개의 feature로 매핑되는 모습을 볼 수 있습니다. 이 그림에서는 이미지를 4개의 패치로 나눴다고 가정했습니다. 이렇게 나온 4N개의 patch feature는 각각 서로 가까운 feature들끼리 모이도록 학습할 겁니다.

위에서 설명하지 않은 부분이 하나 더 있습니다. 아래쪽에 초록색의 classifier가 병렬로 연결되어 있는 모습을 볼 수 있습니다. 이는 self supervised learning까지 동시에 학습하기 위한 classifier입니다. 이 부분은 아래에서 자세히 설명하겠습니다.

3-2. Patch level Deep SVDD

이제 patch level로 Deep SVDD를 구현하는 부분을 살펴보겠습니다.

4.Deep SVDD와 Patch SVDD의 비교
그림4. Deep SVDD와 Patch SVDD의 비교

위에서 왜 patch level로 Deep SVDD를 구현해야 하는지 설명했습니다. 이는 위 그림과 같이 각 semantic별로 비슷한 의미를 가진 feature들끼리 각각 모이게 만들게 하기 위함입니다.
위 그림의 Deep SVDD와 Patch SVDD 부분을 비교해 보겠습니다.
Deep SVDD는 너트 이미지를 하나의 feature로 매핑하는 모습을 볼 수 있습니다. 반면 Patch SVDD는 너트 이미지를 패치별로 나누어 각각 다른 공간의 feature로 매핑하는 모습을 볼 수 있습니다. 이때 Deep SVDD와 달리 Patch SVDD 방식에는 한 가지 문제가 발생합니다. Deep SVDD는 N개 feature의 중심으로 모든 feature가 모이도록 학습해주면 됩니다.

Patch SVDD는 몇 개의 center를 만들어줘야 할까요?
생각해보면 이걸 하이퍼파라미터로 설정해주는 건 불합리합니다. 각 center는 패치마다의 특징을 의미함을 생각했을 때 이 특징이 몇 가지가 되는지 우리가 정해줄 수는 없기 때문이죠. 이에 Patch SVDD는 ‘각자 비슷한 semantic을 가진 patch들끼리 모이도록’ 유도합니다. ‘특정 center를 정해주지 않을 테니, 지금 너랑 가까운 feature들끼리 모여’라고 해주는 거죠. 이를 수식으로 표현하면 다음과 같습니다.

5.Patch SVDD loss
그림5. Patch SVDD loss
  • pi’ : pi의 근처에 있는 patch

3-3. Self Supervised Learning

Patch SVDD는 여기서 멈추지 않고 당시 핫한 주제였던 self supervised learning 방법을 추가해 줍니다. Patch별로 모이도록 유도해주는 SVDD loss 외에 병렬로 self supervised learning loss를 연결해주는 겁니다. 이때의 self supervised learning은 각 패치의 상대위치를 맞추는 classifier를 학습하는 방법을 사용합니다.

6.Self Supervised Learning 구성
그림6. Self Supervised Learning 구성

위의 그림을 보면 3×3 patch 중 두 개의 patch가 각각 encoder에 들어가 feature로 추출된 모습을 볼 수 있습니다. 두 개의 patch는 3×3중 가운데 있는 패치와 랜덤으로 선택된 patch입니다. 이렇게 나온 두 개의 feature는 classifier에 들어가게 됩니다. 이때 classifier가 맞춰야 하는 정보는 랜덤으로 선택한 patch의 상대 위치입니다. 위의 예시에서는 classifier가 ‘첫 번째’라고 대답해야겠네요. 이렇게 패치들의 상대 위치를 classifier로 학습하는 것만으로도 해당 이미지의 다양한 feature를 학습할 수 있다고 알려져 있습니다.

3-4. Hierarchical encoding

이번에는 feature를 추출하는 방법에 대해 살펴보겠습니다.
Patch SVDD는 Deep SVDD와 달리 MNIST, CIFAR10등의 one class classification이 아닌 산업용 Anomaly Detection 데이터셋인 mvTec을 타깃으로 합니다. mvTec 데이터셋의 특징 중 하나는 다양한 사이즈의 anomaly들이 포함되어 있다는 것입니다. 이 말은 고정된 receptive field 사이즈로는 모든 anomaly를 검출할 수 없다는 말이죠. 작은 receptive field 사이즈를 사용하면 큰 anomaly에 취약할 것이고, 반대로 큰 receptive field 사이즈를 사용하면 작은 anomaly에 취약할 테니까요. 이에 저자들은 작은 receptive field 사이즈와 큰 receptive field 사이즈를 다 사용하는 방법을 사용합니다.

7.Hierarchical encoding 구성
그림7. Hierarchical encoding 구성

위 그림을 보면 patch가 2×2로 나뉘어 네트워크로 들어가는 모습을 볼 수 있습니다.
그리고 뒤의 네트워크는 이렇게 나온 feature들을 concat 하여 한번에 입력으로 받는 모습이죠. 앞의 네트워크는 작은 receptive field size를 갖는 네트워크이고, 뒤의 네트워크는 큰 receptive field size를 갖는 네트워크입니다. 작은 네트워크를 통해 나온 feature에는 작은 receptive field size의 정보가 담겼을 것입니다. 반면 큰 네트워크를 통해 나온 feature에는 큰 receptvie field size의 정보가 담겼겠죠. 우리는 두 정보 모두 활용할 것이기 때문에 작은 네트워크의 output feature와 큰 네트워크의 output feature 각각에게 모두 loss function을 적용해줄 겁니다. 그래야 다양한 관점에서의 feature를 추출할 수 있게 되니까요.

3-5. Loss function

이제 위에서 말한 모든 내용을 구현할 loss function을 살펴보겠습니다.

첫 번째는 patch들끼리 가까워지도록 유도해주는 SVDD’ loss입니다.

8.Patch SVDD loss
그림8. Patch SVDD loss

i번째 feature는 본인과 가까운 feature와 가까워지도록 유도해주는 모습을 볼 수 있습니다. 위에서 언급했듯이 이때의 loss는 작은 네트워크의 feature와 큰 네트워크의 feature 각각에 적용해줘야 합니다.

두 번째는 patch의 상대위치를 맞추는 Self Supervised Learning (SSL) loss입니다.

9.SSL loss
그림9. SSL loss

2개 patch의 feature에 대해 상대 위치를 cross entropy loss로 학습하는 모습을 볼 수 있습니다. 이 또한 마찬가지로 작은 네트워크의 feature와 큰 네트워크의 feature 각각에 모두 적용해줘야 합니다.

최종 loss function은 위의 두 가지 loss를 조합하여 구성합니다.

10.total loss
그림10. total loss

이렇게 함으로써 Patch SVDD는 비슷한 semantic patch들끼리 한 곳에 모이면서 patch의 다양한 특징도 SSL 방식을 사용하여 학습할 수 있습니다.

3-6. Anomal score

마지막으로 학습이 완료된 뒤 anomal score를 측정하는 방법을 살펴보겠습니다.

Patch SVDD는 가까운 patch별로 서로 모이도록 학습을 해줬죠. 그럼 어떻게 anomal score를 측정하는 게 합리적일까요? 비정상 patch라면 어떤 patch들의 feature 군집과도 가까이 있지 않겠죠? 따라서 특정 패치의 anomal score는 가장 가까운 patch feature와의 거리로 측정할 수 있습니다. 수식으로는 다음과 같습니다.

11.patch별 anomal score
그림11. patch별 anomal score

나의 patch feature와 가장 가까운 정상 patch feature와의 L2 distance를 측정하는 모습입니다. 그런데 이건 patch별로 anomal score를 측정하는 방법이고, 이미지 전체에 대해서는 어떻게 측정해야 할까요?

12.이미지 별 anomal score 구하는 방법
그림12. 이미지 별 anomal score 구하는 방법

이미지는 패치로 구성되어 있으니 패치별로 나누어 sliding window 방식을 사용하여 구하면 될 겁니다. Sliding window 방식이란 일정한 간격만큼씩 양옆, 위아래로 움직여가며 측정하여 종합하는 방식을 말합니다.

위 그림을 보겠습니다.
가장 왼쪽에는 anomal score를 측정하려고 하는 테스트 이미지가 있습니다. 바로 옆 이미지는 조금씩 옆으로 이동하며 patch로 잘라 나타낸 모습입니다. 이렇게 나온 patch들을 Patch SVDD 방식을 사용하여 가장 가까운 patch와 매칭시킨 이미지가 세 번째 이미지입니다. 만약 정상 patch라면 가까이에 있는 거의 비슷하게 생긴 patch가 매칭되었을 테니 거의 변화가 없겠죠. 반면 비정상 patch라면 멀리 있는 아주 다른 patch가 매칭되어 전혀 다른 patch가 되었을 겁니다. 이때의 거리를 토대로 anomaly score를 측정한 이미지가 네 번째 이미지입니다.

그런데 우리는 작은 receptive field size와 큰 receptive field size 모두를 사용해서 feature를 추출할 수 있잖아요? 따라서 이 두 가지 feature로부터 모두 anomal score를 뽑을 수 있습니다. 이제 이 두 가지 anomal score를 종합하면 최종 anomal score가 됩니다. 이때의 종합하는 방법은 element wise multiplication 방법을 사용합니다. 동일 위치의 anomal score를 곱해서 최종 anomal score로 만들어준다는 의미입니다. 수식으로는 다음과 같습니다.

13.hierarchical encoding을 적용한 anomal score
그림13. hierarchical encoding을 적용한 anomal score

이렇게 구한 anomal score는 패치별로 anomal score가 나올 테니 anomal score map, 즉 segmantion score가 됩니다. 이 segmentation score 중 가장 큰 anomal score가 해당 이미지의 최종 anomal score가 됩니다.

14.이미지의 최종 anomal score
그림14. 이미지의 최종 anomal score

4. 실험 결과

Patch SVDD의 Anomaly Detection 성능을 실험을 통해 확인해 보겠습니다.

4-1. mvTec Anomaly Detection

mvTec 데이터셋에 대한 Anomaly Detection 성능을 다른 방법들과 비교해 보겠습니다.

mvTec 데이터셋은 산업용 Anomaly Detection 데이터셋입니다. 기존 MNIST, CIFAR10 데이터셋을 사용한 one class classification은 한 가지 클래스를 학습하고 다른 클래스를 비정상으로 찾아내는 방식으로 성능을 측정했습니다. 반면 mvTec 데이터셋은 한 가지 클래스를 학습하고 해당 클래스의 불량 이미지를 찾아내는, 진정한 Anomaly Detection 성능을 테스트합니다.

15.mvtec 성능
그림15. mvtec 성능

위 그림은 mvTec 데이터셋에 대한 다양한 방법들의 성능을 비교한 표입니다. 왼쪽은 image level로 측정한 성능 결과입니다. 각 이미지별로 anomal score를 측정하여 정확도를 비교한 것입니다. 기존의 방법들 중 가장 좋은 성능을 확인할 수 있습니다.

오른쪽은 pixel level로 측정한 성능 결과입니다. mvTec 데이터셋은 불량 Ground Truth를 pixel 단위로 제공합니다. 따라서 pixel 단위의 anomal score를 측정, 평가할 수 있습니다. Pixel 단위의 Anomaly Detection에서도 기존 방법들보다 가장 좋은 성능을 확인할 수 있습니다.

5. Ablations

다음은 어떠한 요인이 Patch SVDD의 좋은 성능을 만들어 냈는지  ablation 실험을 통해 살펴보겠습니다.

5-1. t-SNE visualization

먼저 학습 완료된 Patch SVDD가 추출한 feature 들의 t-SNE 분포를 확인해 보겠습니다.
이를 통해 정말 비슷한 semantic patch들을 비슷한 위치의 feature 공간에 매핑하는 능력을 학습했는지 확인해볼 수 있습니다.

16.t-SNE 결과
그림16. t-SNE 결과

위 그림은 mvTec 데이터셋의 cable과 leather 클래스의 patch feature들의 t-SNE를 나타낸 것입니다. mvTec 데이터셋에서도 Cable 클래스는 상대적으로 intra class variance가 큰 클래스에 속하고, leather 클래스는 상대적으로 intra class variance가 작은 클래스에 속합니다. 이러한 intra class variance의 차이에 따라 어떠한 결과가 나왔는지 보겠습니다.

결과를 해석하기 앞서, 그림 b를 보겠습니다.
그림 b는 t-SNE 결과에 나타낼 이미지 패치의 색상과 크기를 나타냅니다. 즉 그림 a, c에 있는 각 점들이 원래 이미지상에서 어디에 있던 patch인지는 그림 b를 통해 확인할 수 있습니다.

이를 생각하며 그림 a를 보겠습니다.
전체적으로 비슷한 색상과 크기의 점들끼리 모여있는 모습을 볼 수 있습니다. 파란색 점은 파란색점끼리, 빨간색 점은 빨간색 점끼리 모여 있습니다. 또 작은 점은 작은 점들끼리 모여 있습니다. 원래 이미지상에서 비슷한 위치에 있던 patch 들은 비슷한 semantic을 갖고 있었겠죠? 따라서 cable 클래스는 비슷한 semantic의 patch들끼리 비슷한 feature 공간상에 분포하도록 매핑되었다고 해석할 수 있습니다.

이제 그림 c를 보겠습니다.
그림 a와 달리 그림 c는 모든 색상과 크기의 점들이 섞여 무작위로 분포하는 모습입니다. 이는 마찬가지로 논리로 생각해보면 비슷한 semantic patch들끼리 모여있지 않다고 볼 수 있습니다. Cable과 비교해보면 leather는 모든 patch들이 다 비슷하게 생겼을 겁니다. 따라서 위에 있는 leather의 patch나, 아래에 있는 leather의 patch나 비슷하기 때문에 feature 공간상에서 모두 섞여 분포하게 되었다고 해석해볼 수 있습니다.

5-2. Self Supervised Learning의 효과

Patch SVDD에는 patch 간의 상대 위치를 맞추는 SSL 방식이 도입되었습니다. 이 SSL은 성능 향상에 얼마나 도움이 되었을까요? 실험을 통해 확인해 보겠습니다.

5-2-1. mvTec 성능

17.loss 방식 별 mvtec 성능
그림17. loss 방식 별 mvtec 성능

위 그림은 다양한 Loss를 적용하여 mvTec 성능을 측정한 결과입니다.
SVDD Loss는 Deep SVDD 방식의 loss를 의미합니다. SVDD’ loss는 patch별로 모이게 하는 Patch SVDD 방식의 loss를 의미합니다. SSL loss는 Self Supervised Learning loss를 의미합니다. 따라서 첫 번째 행은 Deep SVDD 방식의 loss만 적용했을 때의 성능을 의미합니다. 두 번째 행은 Patch SVDD 방식의 loss만 적용했을 때의 성능을 의미합니다. 세 번째 행은 Patch SVDD 방식의 loss에 SSL loss까지 적용했을 때의 성능을 의미합니다.

첫 번째와 두 번째 행을 비교해 보겠습니다.
Patch끼리 모이도록 loss를 변경했더니 detection과 segmentation 모두에서 성능이 향상된 모습을 볼 수 있습니다.

이번에는 두 번째와 세 번째 행을 비교해 보겠습니다.
SSL loss를 추가해주었더니 detection과 segmentation 모두에서 성능이 드라마틱하게 오른 모습을 볼 수 있습니다. 수치만 놓고 봤을 때 Patch SVDD의 성능 향상 효과는 사실 patch끼리 모이도록 해준 것보다는 SSL의 효과가 컸다고 말할 수 있겠네요.

5-2-2. Object / Texture Class별 분석

그럼 SSL loss는 mvTec 데이터셋의 모든 클래스에 대해 효과적이었을까요?

18.object, texture 클래스별 성능
그림18. object, texture 클래스별 성능

위 그림은 mvTec의 클래스를 object와 texture 클래스로 구분하여 실험한 결과입니다.
object class는 cable, transistor와 같이 상대적으로 intra class variance가 큰 클래스들을 의미합니다. 반면 texture class는 tile, wood와 같이 상대적으로 intra class variance가 작은 클래스들을 의미합니다. 빨간색은 Deep SVDD loss를, 주황색은 Patch SVDD loss를, 파란색은 Patch SVDD loss + SSL loss의 성능을 의미합니다.

먼저 왼쪽의 object 클래스들의 결과를 보겠습니다.
빨간색, 주황색 바 보다 파란색 바가 월등히 높은 모습이네요. 따라서 object 클래스들에서는 SSL loss가 매우 효과적이었음을 알 수 있습니다.

19.loss 구성에 따른 transistor의 t-SNE
그림19. loss 구성에 따른 transistor의 t-SNE

위 그림은 object 클래스에 해당하는 transistor의 loss별 feature 분포를 나타낸 그림입니다.
가장 왼쪽은 Deep SVDD loss로 학습했을 때의 feature 분포입니다. 같은 색상의 점들끼리 분포하지 않고 모두 섞여 분포하는 모습이네요.

두 번째는 Patch SVDD loss로 학습했을 때의 feature 분포입니다. 첫 번째보다는 비교적 같은 색상의 점들끼리 모인 모습입니다.
마지막 세 번째는 Patch SVDD loss에 SSL loss까지 추가하여 학습했을 때의 feature 분포입니다. 확연하게 같은 색상의 점들끼리 모인 모습입니다.
Object 클래스에 대해서는 SSL loss가 매우 효과적임을 알 수 있습니다.

반면 오른쪽의 texture 클래스들의 결과를 보겠습니다.
object 클래스의 결과와는 달리 빨간색, 주황색, 파란색 바의 높이가 크게 차이 나지 않는 모습입니다. 따라서 SSL loss는 object 클래스들에서는 효과적인 반면, texture 클래스에서는 효과적이지 않다고 결론 내릴 수 있습니다.

5-2-3. 원인

왜 SSL loss는 texture 클래스에서는 효과적이지 않았을까요?
Patch SVDD에서 사용한 SSL은 패치들의 상대 위치를 맞추는 방식이었습니다. Object 클래스들의 경우는 패치별로 명확히 다른 semantic 차이가 있었을 겁니다. 왼쪽에는 초록색 케이블, 오른쪽에는 파란색 케이블 이런 식으로요. 따라서 patch들의 상대 위치를 학습하여 해당 클래스의 특징을 학습할 수 있었을 겁니다.

반면 texture 클래스들에서 패치별 상대 위치를 학습하는 것이 도움이 될까요?
우리가 직접 학습한다고 상상해 볼까요? 모든 patch가 비슷하게 생긴 가죽 사진을 놓고 우리는 상대 위치를 맞출 수 있을까요? 아마 우리도 구분하기 어려울 겁니다. 상대 위치를 유추할 만한 특징적인 단서가 없으니까요. 이는 딥러닝 모델에게도 마찬가지겠죠. 따라서 texture 클래스에서는 SSL loss가 효과가 없었을 것으로 추측해볼 수 있습니다.

5-3. Hierarchical Encoding의 효과

Patch SVDD는 다양한 receptive field size로 feature를 추출하는 hierarchical encoding 방법을 적용했습니다. 이 방법은 성능 향상에 얼마나 도움이 되었을까요?

20.hierarchical encoding 여부에 따른 성능
그림20. hierarchical encoding 여부에 따른 성능

위 그림은 hierarchical encoding을 적용하지 않을 때, 적용했을 때, aggregation까지 적용했을 때의 성능을 나타낸 것입니다.
Hierarchical encoding을 적용하지 않았다는 것 하나의 receptive field 사이즈로 feature를 추출했다는 의미입니다. 반면 hierarchical encoding을 적용했다는 건 두 가지 receptive field 사이즈로 feature를 추출하고 각 feature별로 loss를 적용하여 학습한 뒤, 성능은 각 receptive field 사이즈의 feature 별로 측정한 방식입니다. 마지막 aggregation 방식은 hierarchical encoding을 적용한 뒤 마지막 성능 측정 방법에서 두 가지 feature로부터 나온 anomal score를 element wise multiplication으로 aggregation 해준 방법을 의미합니다.

결과를 보겠습니다.
우선 첫 번째, 두 번째 실험을 비교해보면 hierarchical encoding을 적용하면 성능이 오르는 모습을 볼 수 있습니다.
또한 두 번째, 세 번째 실험을 비교해보면 추가로 aggragation을 해줬을 때 성능이 가장 좋은 모습을 볼 수 있습니다.
따라서 hierarchical encoding과 aggregation 방식 모두 성능 향상에 도움이 된다고 결론 내릴 수 있습니다.

왜 hieararchical encoding과 aggregation이 성능 향상에 도움이 될까요?

21.hierarchical encoding에 따른 anomal score map
그림21. hierarchical encoding에 따른 anomal score map

위 그림은 hierarchical encoding을 적용했을 때와 aggregation까지 적용했을 때의 anomal score map을 나타낸 것입니다.
가운데 왼쪽 그림을 보면 큰 receptive field 사이즈일 때는 불량 부분을 듬성듬성하게 보는 모습을 볼 수 있습니다. 반면 가운데 오른쪽 그림을 보면 작은 receptive field 사이즈일 때는 예민하게 불량을 찾는 모습을 볼 수 있습니다. 각자 장단점이 있을 텐데요, 오른쪽의 aggregation 그림을 보면 둘의 장점만 혼합하여 큰 그림에서 불량을 찾고 정교하게 강화하여 결과를 내는 모습을 볼 수 있습니다.

6. 결론

Deep SVDD를 patch level로 적용하는 Patch SVDD 방법을 살펴봤습니다. Patch SVDD는 Deep SVDD의 철학뿐만 아니라 SSL 방식까지 도입하였습니다. 산업용 Anomaly Detection 데이터셋인 mvTec에서 성능을 측정한 결과 기존 방법들 대비 가장 좋은 성능을 보였습니다. 또한 Deep SVDD와 달리 pixel level anomal score로 정교하게 측정할 수 있어, 실제 산업 환경에서 사용할 수 있는 실용적인 Anomaly Detection 방법임을 보였습니다.

Series Navigation<< [20′ ICLR] DEEP SEMI-SUPERVISED ANOMALY DETECTION (Deep SAD) 핵심 리뷰[21′ ICLR] EXPLAINABLE DEEP ONE-CLASS CLASSIFICATION (FCDD) 핵심 리뷰 >>
5 1 vote
Article Rating
Subscribe
Notify of
guest

1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
송정효
송정효
4 minutes ago

안녕하세요 정말 좋은 글 감사합니다. 덕분에 쉽게 논문들을 이해하고 있습니다.

한 가지 읽다가 궁금한 점이 생겼는데,
Hierarchical encoding 부분에서 네트워크를 CNN을 사용하는 것으로 알고 있는데, 그렇다면 앞의 네트워크는 작은 receptive field size를 얻으므로 뒤에 네트워크보다 CNN의 depth가 얕다는 것으로 이해를 하면 되는 것일까요?

그림 상으로는 같게 그려져 있어서 어떻게 다른 receptive field를 갖는 건지 단순히 궁금해져서 댓글 남깁니다.

감사합니다!

1
0
Would love your thoughts, please comment.x
()
x
Scroll to Top