Deep Learning/Computer Vision

Anomaly Detection -2

frances._.sb 2022. 2. 28. 19:58
728x90

이상치 탐지

 

 이미지를 우리 눈으로 분류

  가지고 있는 사진들은 정면에서 보이는 사진, 우측 치아만 보이거나 좌측 치아만 보이는 경우, 윗 또는 아래 치아가 보이는 경우, 입술이 더 잘 보이는 경우, 치아보다는 입 위주의 사진 등 다양했습니다. 이를 더 확실하게 잡아내기 위해

 ㉮ 정면에서 치아의 모습이 보이는 경우

 ㉯ 좌측 아래 (또는 위) 치아의 모습

 ㉰ 우측 아래 (또는 위) 치아의 모습 

 

 등으로 모두 파일을 따로 만들어 분류를 하였습니다.

 

 Feature map 추출로 중간점검

 

치아 feature map

 

 저희가 가진 이미지를 이용하여 feature map을 형성하였습니다. 위 사진은 일부만을 캡처하여 온 것이며, 실제로는 feature map이 너무 많이 (사진이 만장 이상이었기 때문에) 쌓였기 때문에 차원을 줄일 필요성을 느꼈습니다.

 그 중, GAP (Global Average Pooling)을 이용하여 feature의 평균값을 이용해 차원 축소에 이용하기로 하였습니다. 다음은 GAP를 선택한 이유와 간단한 모델의 architecture입니다.

 

GAP

  • FC layer를 없애기 위해 사용 (parameter 수 증가로 인해 계산이 어려워지기 때문)
  • 입력 이미지 사이즈가 고정인 FC layer에 반해 상관이 없음
  • overfitting 측면에서도 유리함

 

VGG16

 

VGG16 architecture

 VGG 16은 convolutional filter size가 가장 작은 3x3을 이용합니다. 연산하여 발생하는 parameter 개수가 줄어드는 효과와 ReLU가 활성 함수로 들어갈 수 있는 곳이 많아진다는 장점이 있어 사용하였습니다.

 여기에 적절한 threshold를 이용하여 상대적으로 불필요하다고 계산이 되는 부분은 0으로 두고 실행하였습니다.

 

Valid와 test set의 confusion matrix를 보았을 때, 아직 완전한 분리가 되지 않아 아쉬움이 있었습니다.

 

 

AutoEncoder

미흡한 부분에 대한 보충을 위해 autoencoder를 이용하여 실행하였습니다.

autoencoder 이용한 분포 graph

 

 

다음은 Normal data에 대한 loss를 구한 사진입니다.

학교 이름이 있어서 블러처리하였습니다.

 Normal data의 loss는 대략 0.00xx... 로 표현되었습니다. 아래의 anomal data와 비교하면 상대적으로 작은 수치를 가진다는 것을 알 수 있습니다.

 

Anomal data loss

 

 

 

AutoEncoder을 이용한 confusion matrix를 확인하여보겠습니다.

 

 

나름 좋은 성능으로 나왔지만 아직 조금 아쉬운 부분이 있기에 다른 방법을 강구하던 중, 직접 CNN을 만들어 보았습니다.

 

 

CNN

 

 이번 모델은 치아, 강아지, 눈 세 가지를 이용하여 잘 분류가 되는 지 확인하였습니다.

 

 

 치아, 강아지, 눈 순서대로 잘 선별이 되었는지 confusion matrix 를 확인하였을 때, 강아지 사진 한 장이 눈으로 분류된 거 이외에는 잘 훈련이 되었습니다.

 

 이 후 완벽하게 좋은 성능을 만들었다고 생각하여, 다른 시각화 기법을 알아보던 중 CAM을 완벽하게는 힘들겠지만 이용을 하여 보았습니다.

 

CAM

 

CAM

 

 CAM (Class Activation Map) 은 CNN의 마지막 레이어를 FC-layer로 Flatten 시킬 때 우리는 그 convolution이 가지고 있던 각 pixel들의 위치 정보를 잃게 됩니다. 따라서 Classifying 정확도가 아무리 뛰어날지라도, 우리는 그 CNN이 무엇을 보고 그 class를 해당하는 class라고 판별했는지 알 수가 없었습니다.

 

 FC-layer로 바꾸는 대신에, GAP를 적용하면 별다른 추가의 supervised 없이 CNN이 특정 위치를 구별하도록 만들 수 있다는 것입니다. 위 그림을 보면 CAM을 통해 특정 이미지의 Heat Map을 생성할 수 있다는 것을 알 수 있습니다.

 

모든 결과 사진들의 인용을 원치 않습니다.

 

 나름 잘 나온 부분만을 캡처한 것입니다. 치아만을 heat map으로 잘 분류해낸 것을 알 수 있었습니다.

 

728x90
반응형

'Deep Learning > Computer Vision' 카테고리의 다른 글

[OCR] scale 의 여러 방법  (0) 2023.10.05
[OCR] EasyOCR  (2) 2023.10.04
[OCR] EAST text detection w.pytesseract  (0) 2023.08.28
[Object Detection] YOLO : You Look Only Once  (0) 2022.04.20
Anomaly Detection -1  (0) 2022.02.28