YOLO v2 모델은 다양한 아이디어를 도입해 정확도와 속도 사이의 trade-off 균형을 잘 맞춰 좋은 성능을 보였다.
Main ideas
Better
Batch Normalization
모든 conv layer 뒤에 BN을 추가하여 mAP 값이 2% 정도 향상되었고, 과적합 없이 기타 정규화 방식이나 dropout을 제거할 수 있었습니다.
High Resolution Classifier
v1 모델은 DarkNet의 입력 이미지 사이즈를 224x224로 사전 학습 시켰지만 detection task에서는 448x448 크기의 입력 이미지를 사용한다. 이는 모델이 object detection task를 학습하면서 동시에 새로운 입력 이미지 해상도에 적응해야 한다는 것이다.
v2 모델은 처음부터 448x448 사이즈의 입력 이미지로 사전 학습시켜 모델이 상대적으로 높은 해상도의 이미지에 적응하도록 한다. 이 방법을 통해 mAP 값이 4% 정도 향상된다.
Convolutional with Anchor boxes
YOLO v2에서는 anchor box를 도입했다. anchor box를 정의한 후 bounding box regression을 통해 x, y좌표와 offset을 조정하는 과정을 거치는데, 이는 문제가 보다 단순해지고 네트워크가 학습하기 쉽다는 장점이 있다. 먼저 conv layer의 output이 더 높은 해상도를 가지도록 pooling layer를 제거한다. 또한 입력 이미지를 448x448 크기로 사용한다고 했지만 구조를 줄여 416x416 크기의 입력 이미지를 사용한다. 416크기의 이미지는 최종 output feature map의 사이즈가 홀수가 되어 중앙 cell이 있도록 한다. 크기가 큰 객체의 경우 이미지 내의 중심을 차지할 확률이 높아 하나의 중심 cell이 있으면 이를 잘 포착하도록 한다.
v1 모델은 총 98개의 bounding box를 예측하지만 v2 모델은 anchor box를 사용하여 더 많은 수의 bounding box를 예측한다. anchor box를 사용할 경우 mAP 69.5%, recall 값은 81%이고 사용한 경우 mAP 69.2%, recall은 88%로 recall 값이 향상되었다. object detection task에서 recall값이 높다는 것은 실제 객체의 위치를 예측한 비율이 높다는 것이다.
Dimension Clusters
기존의 anchor box의 크기와 aspect ratio를 사전에 정의하는 방식보다 더 나은 prior를 선택하면 detection 성능이 향상될 것이라고 한다. 이를 위해 k-means clustering을 통해 최적의 prior를 탐색하는 방법을 제시한다. 이 때 데이터셋의 모든 ground truth의 width, height 값을 사용하여 K-means clustering을 진행한다.
일반적인 k-means clustering의 경우 유클리디안 거리를 사용해 centroid와 sample 간의 거리를 계산하는데, 이 경우 큰 box가 작은 box에 비해 큰 Error를 발생시킨다. 하지만 box 크기와 상관 없이 선택한 prior이 좋은 IoU 값을 가지도록 하기 위해서 새로운 distance metric을 사용한다. 이는 box와 centroid의 IoU값이 클 수록 겹치는 영역이 크기 때문에 거리가 가깝다는 점을 나타낸다.
저자는 다양한 k값으로 k-means clustering을 진행했고 k=5 때 모델의 복잡도와 recall 값이 적절한 trade-off관계를 보여준다고 한다.
Fine-Grained Features
YOLO v2는 최종적으로 13x13 사이즈의 feature map 크기를 출력하는데, 이처럼 output의 크기가 작은 경우 큰 객체를 예측하기 용이하지만 작은 객체는 예측하기 어렵다는 문제가 있다.
해당 문제를 보완하기 위해 마지막 pooling 연산을 수행하기 전의 feature map을 추출해 26x26 사이즈의 feature map에서 channel은 유지하면서 4개의 feature map으로 분할하여 결합해 13x13 사이즈의 feature map을 얻는다. 이러한 feature map은 보다 작은 객체에 대한 정보를 함축하고 있다고 한다. 이렇게 얻은 13x13(x2048)사이즈의 feature map을 최종적으로 얻은 13x13(x1024)사이즈의 feature map에 추가하여 13x13(x3072) 사이즈의 feature map을 얻는다.
Fine-grained - 하나의 작업을 작은 단위의 프로세스로 나눈 뒤, 다수의 호출을 통해 작업 결과를 생성해내는 방식
최종적으로 3x3 conv layer와 1x1 conv layer를 적용해 13x13(x125)사이즈이 feature map을 얻는다. 여기서 channel이 125인 이유는 각 grid cell 별로 5개의 bounding box가 20개의 class score(5x(20+5))를 예측하기 때문이다. fine-grained 방식을 통해 1% 정도의 성능이 향상되었다고 한다.
Multi-Scale Training
YOLO v2 모델은 더 강건한 구조를 위해 다양한 사이즈의 입력 이미지를 사용해 네트워크를 학습시킨다. 논문에서는 10batch마다 입력 이미지의 크기를 랜덤하게 선택하여 학습하도록 설계되었다.
이를 통해 네트워크는 다양한 사이즈의 이미지를 입력받을 수 있고, 속도와 정확도의 균형을 맞춘다. 아래 표에서 확인할 수 있듯이 입력 이미지의 사이즈가 작은 경우 더 높은 FPS를 가지며, 입력 이미지의 크기가 큰 경우 더 높은 maP 값을 가지게 된다.
Faster
DarkNet-19
Yolo v2는 DarkNet-19라는 독자적인 classification 모델을 backbone network로 사용한다.
YOLO v2는 v1과 다르게 네트워크 마지막에 fc layer가 아닌 global averge pooling을 사용한다. 일르 통해 detection 속도가 증가하고, 파라미터 수가 감소한다.
Training for classification
DarkNet-19는 YOLO v1과 마찬가지로 ImageNet 데이터셋을 통해 1000개의 class를 학습힌다.
Training for detection
DarkNet-19를 detection task로 사용하기 위해 마지막 conv layer를 제거하고 3x3(x1024) conv layer로 대체하고, 이후 1x1 conv alyer를 추가한다. 이 때 1x1 conv layer의 output channel 수는 예측할 때 필요한 수로, 앞서 확인했듯이 125(5x(5+20))으로 지정한다.
Stronger
논문에서는 학습 시 classification을 위한 데이터와 detection을 위한 데이터를 섞어 학습하는 기법으로 보다 많은 class를 예측하는 YOLO 9000을 제안한다. detection 데이터셋은 일반적이고 범용적인 객체에 대한 정보를 가지고 있는 반면, classification 데이터셋은 보다 세부적인 객체에 대한 정보를 가지고 있다.
Hierarchical classification
classification과 detection 을 위한 데이터셋이 차이를 보이는 문제를 해결하기 위해, 논문에서는 ImageNet Label로부터 Hierarchical tree인 WordTree를 구성하는 방법을 제안한다. WordTree에서 각 노드는 범주를 의미하고 하위 범주는 자식 노드가 되는 구조가 있다. 먼저 물리적 객체를 루트 노드로 두고, 하위 범주는 자식 노드가 되고, 자식 노드의 하위 범주는 자식 노드가 되어 점차 뻗어나가는 식이다.ImageNet 데이터셋을 통해 WordTree를 구성할 경우, 최상위 노드부터 최하위 노드까지 총 범주를 합치면 1369개의 범주가 존재한다.
Dataset combination with WordTree
Joint classification and detection
논문에서는 COCO 데이터셋과 ImageNet 데이터셋을 합쳐 9418개의 범주를 가지는 WordTree를 구성한다. 이 때 ImageNet과 COCO 데이터셋의 비율이 4:1이 되도록 조정한다.
모델이 detection 데이터셋의 이미지를 보면 평소와 같이 loss를 backward pass하며, classification일 경우 특정 범주와 상위 범주에 대해서만 loss를 계산한다. 이 때 ground truth box와 IoU 값이 0.3 이상인 경우에만 역전파를 수행한다.
이 같이 Joint Training 방식을 통해 YOLO9000 모델은 COCO 데이터셋을 활용해 보다 넓은 범주의 객체를 분류할 수 있도록 학습된다.
Training
1. Feature extraction by DarkNet-19
pre-trained DarkNet-19를 통해 416x416의 이미지에서 13x13x1024 사이즈의 feature map을 얻는다.
2. Reorganize feature map & Concat feature maps
Fine-Grained Features 부분에서 언급했듯이 작은 객체의 detection을 위해 마지막 pooling 전 26x26x512 사이즈의 feature map에서 channel을 유지한 채로 feature map을 4개로 분할한 후 결합하여 13x13x2048크기의 feature map을 얻고, 이를 최종 output에 결합시켜 13x13x3072 사이즈이 feature map을 얻는다.
3. Prediction by appling conv layers
2번 과정을 통해 얻은 feature map에 3x3 conv layer와 1x1 conv layer를 적용해 최종적으로 13x13x125 크기의 feature map을 얻는다. 이는 grid cell별로 125개의 값을 갖는 것을 의미한다(class score 20 + confidence scoer1, x1, y1, w1, h1).
4. Train YOLO v2 by loss function
YOLO v2의 Loss function은 Localization loss, Confidence loss, Classification loss로 구성되어 있다. 또한 v1과 같이 전체 loss가 SSE이다.
Localization loss의 경우 객체의 중심에 위치한 grid cell의 anchor box는 객체를 예측하도록, 아닌 cell들은 예측하지 않도록 fucntion이 설정되어 있습니다.
Confidence loss 또한 Localization loss와 마찬가지로 객체를 예측하는 cell과 예측하지 않는 cell에 대해 둘 다 학습이 가능하도록 되어있습니다.
https://brunch.co.kr/@kmbmjn95/35
Performance
당시 성능이 높던 Faster R-CNN Resnet, SSD512 등과 비교해 YOLOv2가 비슷한 성능을 보여주면서 속도 측면에서 굉장히 우월한 모습을 보여줍니다. 또한 입력 이미지의 크기에 따라 정확도와 속도에서 trade-off를 보여주면서, 입력 이미지에 대한 다양한 선택지를 보여줍니다. 입력 이미지의 크기가 클 경우 정확도가 높아지지만 속도가 감소하고, 작을 경우 정확도는 낮지만 속도가 빨라집니다.
'DL > Object detection' 카테고리의 다른 글
Mask R-CNN (0) | 2024.01.18 |
---|---|
FPN (Feature Pyramid Networks for Object Detection) (0) | 2024.01.17 |
YOLO v1 (1) | 2024.01.05 |
Faster R-CNN (1) | 2024.01.05 |
Fast R-CNN (0) | 2024.01.05 |