Deep-learning

[Deep Learning] YOLOv2 정리 - Anchor 적용

Sims. 2024. 7. 15. 21:26
728x90

지난번 포스팅은  YOLO의 기반이 되는 최초의 YOLO를 정리하였다.

혹시 YOLOv1을 아직 모른다면, 최소한 한번쯤은 학습을 하고 v2,3,4,5.... 다음 step의 모델들을 보는게 좋다.

이유는 YOLOv1이 전체적인 YOLO의 틀이며 next step으로 나온 버전들은 YOLOv1을 기반으로 개선작업을 통해 스피드, 정확도를 높힌 YOLO 모델이기 때문에 Base Model이 되는 YOLOv1은 꼭 살펴보길 바란다.

https://sims-solve.tistory.com/118

 

[Deep Learning] YOLOv1 정리 - YOLO의 시작

해당 포스팅은 YOLO의 가장 기초가 되는 V1을 정리하고자 합니다. YOLO의 관심을 가지고 살펴본 분들은 현재 기준 v10까지 나온걸 알고 있을겁니다.그리고, YOLO가 object detecting, segmentation 등 테스크

sims-solve.tistory.com

 

YOLOv2는 해당 영상을 참여했습니다.

https://www.youtube.com/watch?v=vLdrI8NCFMs

https://www.youtube.com/watch?v=PYpn1GSwWnc

 

YOLOv2는 YOLOv1의 단점인

1. 제한된 최대 Object수 탐지

2. 한개의 cell에 다수의 오브젝트 표현 x

3. 바운딩박스 성능 낮음

을 개선하는데 초점을 맞춘 모델이다.

 

 

그럼 어떻게 성능을 개선 할 수 있었을까??

아래 표를 봐보자.

위의 표는 적용한 기법들을 나열하고, 해당 기법을 적용했을때 mAP개선을 보여준다.

 

1. batch normalization

딥러닝을 하다보면 많이 볼 수 있는 batch norm을 적용했다. 약 2%mAP가 증가했으며, Batch norm을 적용하여 오버피팅을 피하고, 정규화 효과를 볼 수 있어서 기존에 있던 dropout layer들은 제거했다고 한다.

 

 

2. High Resolution Classifier

YOLO의 입력값으로 224 x 224로 이미지 사이즈를 줄여 넣게 되는데, V2는 마지막 YOLO 입력(10 에폭)을 488x488로 파인튜닝하여 성능을 개선했다고 한다.

 

3. Pass-through layer

YOLO의 아키텍쳐를 살펴보면 최종적으로 13x13의 크기로 바뀌는 것을 볼 수 있다. 이것도 홀수 x 홀수로 해줘야 하는 이유가 있는데, 그 이유는 홀수로 설정해야 사진의 중간 cell이 정중앙을 표현할 수 있기 때문이다.

일단, 이건 접어두고, Pass-through layer를 살펴보면, 기존 상위 layer를 reshape하여 하위 layer 출력에다 concatenate 하여 사용한다. 이럴경우, 작은 object를 탐지하는데 도움이 된다고 한다.

 

Grid cell을 7x7에서 13x13으로 변경하여 탐지할 수 있는 전체 object 수를 늘렸음.


13x13 으로 grid cell로 설정을 하더라도 총 169개 object만 탐지가 가능한 단점이 있고, 여전히 object간 겹쳐있을때 중점이 하나의 cell에 있을 수 있다는 단점이 존재한다.

 

하지만 YOLOv1에서 마지막 head부분이 FC layer을 통해서 진행되게 되는데, grid cell수가 많아질 수록 연산 및 학습할 값들이 많아져 속도가 느려지게 된다.

 

이 부분을 해결하고자, FC layer을 사용하는게 아닌, Convolution layer을 대체로 사용했다.

처음부터 끝까지 Convolution layer을 사용하여 최종 값을 예측하므로 Fully Convolution Network라 부른다.

 

위와같이 셀 중심으로 매우 큰 object를 탐지하는건 어렵다. 이를 해결하기 위한 것이 anchor box을 적용하는거다.

anchor box는 사전에 미리 bbox의 크기를 설정 후 사용하는 것이다. 

Anchor Box는 사전 학습 데이터셋의 GT Box의 분포를 토대로 사전에 정의하게 된다. 

 

Anchor 박스를 적용했을때 mAP의 성능은 줄어드는 걸 볼 수있다. 하지만 Recall의 경우 7%가 증가하는 모습을 볼 수 있다. 이 의미는 YOLO가 탐지를 못하는 경우가 줄어드는 상황이므로 Anchor 박스의 적용은 약간의 mAP의 손실로 높은 recall을 얻을 수 있게 해준다.  

 

Bbox 성능이 낮은 다른 이유는 YOLOv1은 단순히 Linear activation을 통해 regression을 진행한다. 즉, [-inf ~ +inf]까지 예측하기 때문에 Loss가 매우 높을 수 있으며, 이로 인해 학습이 불안정할 수 있다. YOLO 데이터셋 형식으로 인해 target은  0~1까지만 존재하므로 예측시 0~1까지 표현하도록 변경해 주었다. 변경하는 방법은 sigmoid activation function과 exponential function을 통해 진행한다.

 

X,Y 중점은 Sigmoid function을 이용하고, W,H는 exp function을 이용하여 사용하게 된다.

 

YOLOv2의 예측값을 구하는 공식은 위와 같다. b는 예측하는 Box을 의미한다. 추가로 object Score는 v1과는 다르게 IOU를 추가적으로 이용하여 구하게 된다. 

 

Anchor box가 추가됐기때문에 YOLOv2는 Anchor Box만큼 각각 객체를 탐지하게 된다. 

탐지를 한 후 위와같은 공식을 통해 Loss을 구하게 된다. YOLOv1과 매우 유사한것을 알 수 있다.

 

YOLOv2는 YOLOv1의 단점을 개선하여 속도 및 정확도를 개선하였다.

가장 눈에 띄는 부분은 Anchor Box의 도입.

Anchor Box의 도입으로 인하여 mAP는 소폭 줄었지만, Recall 수치를 이끌어 낼 수 있었으며, Anchor Box별 Object Score가 threshold이상이면 표현해주면 되므로, 같은 grid cell에 중점이 있더라도, 크기에 따라 Bbox를 여러개 그릴 수 있어 Recall을 개선한 부분이 눈에 띄었다.

 

반응형