본문 바로가기

갈아먹는 Object Detection [9] yolo v3

들어가며

이번 시간에 리뷰할 논문은 지난 시간에 이은 yolo v3입니다. yolo v3는 사실 논문이라기 보다는 저자의 표현에 따르면 tech report라고 합니다. 저자인 Redmon이  yolo 모델에 당시에 등장한 기법들을 적용하여 성능을 향상시킨 모델을 공개하며, 어떻게 구현했는 지를 정리한 보고서 같은 느낌입니다. 먼저 결과부터 보시죠.

 

피규에서부터 벌써 괴짜의 향기를 풀풀 풍깁니다 ㅎㅎ 해당 피규어는 당시 SOTA 모델이었던 Facebook의 Retinanet 논문에 기재된 피규어를 그대로 따와서 yolo v3의 지표를 추가한 것입니다. 심지어 yolo v3의 성능이 그래프의 축을 뚫고 나감으로써 성능이 훨씬 뛰어나다는 것을 보여줍니다.

 

그렇다면 yolo v3에서는 어떠한 변화들이 있었는지 지금부터 살펴보겠습니다.

Yolo v3

yolo v3는 사실 대부분의 아키텍쳐를 yolo v2를 그대로 사용합니다. yolo v2가 생소하신 분들인 이전 포스팅을 참고하시면 됩니다. yolo v3의 주요 변화들은 아래와 같습니다.

 

· 백 본 아키텍쳐를 Darknet-19에서 Darknet-53으로 변경

· FPN 처럼 다양한 크기의 해상도의 피쳐맵을 사용하여 바운딩 박스를 예측

· Class 예측 시에 Softmax를 사용하지 않고 개별 클래스 별로 sigmoid를 활용한 binary classification을 적용

 

보시면 아시겠지만 yolo v3에서는 그다지 큰 변화가 일어나지 않았으며, 이 모델만이 가지는 고유한 특징이랄 것이 딱히 없습니다. 사실 이 다음 버젼은 yolo v4에서도 새로운 아키텍쳐나 기법을 제시하기 보다는 현재 나와있는 가장 좋은 기법들을 모두 모아서 성능을 끌어올리는 느낌이며, 이는 다음 포스팅에서 자세히 다뤄보겠습니다.

Darknet-53

yolo v3에서 가장 도드라지는 변화는 백 본 네트워크를 Darknet-53으로 변경했다는 것입니다. 이전 yolo v2에서는 VGG 모델이 지나치게 복잡하다는 점에 착안하여 훨씬 적은 파라미터를 사용하면서도 성능이 좋은 Darknet-19 아키텍쳐를 선보였습니다. Darknet-53에서는 Darknet-19에 ResNet에서 제안된 skip connection 개념을 적용하여 레이어를 훨씬 더 많이 쌓은 모습을 보여줍니다.

아키텍쳐를 살펴보시면 먼저 3x3 컨볼루션과 1x1 컨볼루션으로 이루어진 블럭을 연속해서 쌓아갑니다. 그리고 MaxPooling 대신에 컨볼루션의 stride를 2로 취해주어 피쳐맵의 해상도를 줄여나갑니다. 또한 skip connection을 활용해서 residual 값을 전달하고 마지막 레이어에서 Average Pooling과 Fully Connected Layer를 통과한 뒤, Softmax를 거쳐 분류 결과를 출력합니다.

 

아키텍쳐만 살펴보아서는 기존의 ResNet과 큰 차이점이 없어 보입니다. 하지만 저자들은 실험 결과 ResNet-101과 ResNet-152 과 정확도는 큰 차이가 안나지만 FPS가 훨씬 높다는 점을 강조합니다.

Things We Tried That Didn't Work

이 논문에서 재미있는 점은 기존에 좋다고 알려져 있으나, yolo에 적용했을 때 그다지 효과가 없었던 기법들을 소개한 것입니다. 

 

· 앵커 박스 x, y의 offset을 너비나 높이의 비율로 예측하는 기법을 시도했으나 이는 모델 학습을 불안정하게 했다.

· 바운딩 박스의 x, y를 예측하는데 비선형 활성화 함수 말고 그냥 선형 함수를 사용해보았으나 별 효과 없었다.

· 당시 SOTA였던 RetinaNet의 Focal Loss를 적용해 보았으나 그다지 효과 없었다. (RetinaNet에 대해선 따로 다뤄보겠습니다.)

· 예측한 바운딩 박스가 True라고 판단할 IoU 기준 값을 0.3부터 0.7 사이로 설정해 보았으나 그다지 효과 없었다.

마치며

저자인 Redmon는 자신의 연구가 군사적 목적으로 사용된다는 것에 회의감을 느끼고 컴퓨터 비젼 연구를 그만 두겠다고 선언합니다. 이후의 yolo 시리즈는 Darknet의 공동 개발자인 Alexey Bochkovskiy가 개발합니다. Redmon의 논문들은 기존의 논문 틀에서 벗어나 참 읽는 재미가 있었는데 안타깝습니다. 이러한 연구 윤리에 관한 문제는 연구자들이 함께 고민해 봐야하는 문제가 아닐까 싶습니다.

 

yolo v4는 yolo v3와 마찬가지고 사실 독창적인 아키텍쳐나 기법을 제시한다기 보다는 여태까지 나온 좋은 기법들을 한데 묶어서 yolo의 성능을 높인 것입니다. 그런데 정리가 참 잘되어있고 실험도 방대하여 Object Detection 테스크 자체를 이해하는데 많은 도움이 됩니다. 그럼 다음 포스팅에서 뵙겠습니다.

 

감사합니다!

Reference

[1] J. Redmon et al, YOLOv3: An Incremental Improvement, arXiv 1804.02767