논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

YOLOv3: An Incremental Improvement

1. Introduction

기존의 YOLO의 성능을 향상시키기 위해서 대단하진 않지만 여러가지 작은 변화들을 적용하였고 성능이 좋아졌습니다.

2. The Deal

2.1 Bouding Box Prediction

YOLO9000에서와 동일한 방법으로 박스를 유추하였습니다. 마찬가지로 학습을 위해서 sum of squared error를 로스로 사용하였습니다.

YOLOv3는 objectness score를 logistic regression을 사용하도록 변화하였습니다. 어느 한 바운딩 박스가 다른 바운딩박스들 보다 더 많이 오버랩된 경우 그 값이 1이 됩니다. 제일 많이 겹쳐진 박스가 아니지만 일정 threshold 이상 겹쳐진 박스들은 유추에서 무시됩니다. 이 값을 0.5로 사용하였습니다. 이렇게 무시된 박스들은 위치 정보와 클래스 유추의 로스는 0으로 간주되고 objectness 로스만 계산합니다.

2.2 Class Prediction

각 박스는 멀티레이블 분류를 이용해서 박스 내에 있는 클래스를 유추합니다. 이전과는 달리 Softmax를 사용하지 않아도 좋은 성능을 낼 수 있음을 알았기에 softmax를 사용하지 않고 각 레이블마다 독립적인 logistic classifier를 사용하였습니다. 학습 시에는 binary cross-entropy loss가 사용됩니다.

이러한 방법을 통해 서로 겹치는 레이블을 가지는 도메인을 대응할 수 있습니다.

2.3 Predictions Across Scales

YOLOv3는 박스를 3개의 다른 스케일에서 유추합니다. 특징 피라미드 네트워크와 비슷한 방법으로 3개의 스케일에서 특징을 추출할 것입니다. 먼저 기존의 특징 추출기에 몇개의 컨볼루셔널 레이어를 추가하였습니다. 그리고 3D 텐서로를 유추하는데 여기에는 박스와 objectness와 클래스에 대한 정보가 포함되어있습니다. 실험에서는 COCO를 위해서 각 스케일마다 3개의 박스를 유추하도록 하여 80개의 클래스를 위해 텐서의 크기가 N x N x [3 * (4 + 1 + 80)]이 됩니다.

다음 이전의 2개 전의 레이어를 가져와 그것을 2배로 업샘플링합니다. 그리고 그 이전의 특징 맵을 가져와 업샘플링한 특징에 더해줍니다. 이렇게 하여 업샘플링한 특징의 의미 정보와 그 이전의 세세한 정보를 모두 활용할 수 있게 됩니다. 여기에 몇개의 컨볼루셔널 레이어를 붙여 이전과 동일하면서 크기는 2배인, 다른 스케일에서의 텐서를 유추하게 됩니다.

이런 작업을 한번 더 하여 마지막 스케일까지 완성합니다.

여전히 k-means 클러스터링을 통해 박스 프라이어들을 정하였고, 만들어진 9개의 박스들을 크기에 따라 정렬한 뒤, 각 스케일에 균등하게 나누어 사용하였습니다.

2.4 Feature Extractor

YOLOv2에 최근의 residual 네트워크를 합쳐 새로운 네트워크를 만들었습니다. 3 x 3과 1 x 1의 컨볼루셔널 레이어가 반복되고 거기에 shortcut 연결을 갖도록 하여 53개의 컨볼루셔널 레이어를 갖는 Darknet-53을 제안합니다.

이 네트워크는 Darknet-19보다 강력하면서도 ResNet-101, ResNet-152보다 더 효율적입니다.

2.5 Training

여전히 하드 네거티브 마이닝과 같은 방법 없이 전체 이미지를 모두 사용합니다. 멀티 스케일 학습, augmentation, batch normalization 등 모두 기존대로 사용되었습니다.

3. How We Do

COCO의 average mean AP 방법으로 측정하면 RetinaNet보다 살짝 못한 수준입니다. 하지만 기존의 IOU = 0.5에서의 mAP를 측정하면 YOLOv3는 매우 강력함을 알 수 있습니다. 이로 볼 때 YOLOv3는 매우 강력한 검출기이나 IOU treshold를 증가시킬 수록 성능이 저하됨을 알 수 있었습니다.

이전의 YOLO는 작은 물체를 검출하기가 어려웠는데, 이제는 바뀌어 작은 객체에서도 AP가 상대적으로 높아졌습니다. 그럼에도 아직 중간 크기와 큰 크기보다는 성능이 낮은 상태입니다.

만약 IOU = 0.5에서 속도 대비 성능으로 평가한다면 YOLOv3가 다른 시스템보다 빠르면서도 더 좋은 성능을 보일 수 있습니다.

4. Things We Tried That Didn't Work

Anchor box x, y offset predictions. 선형 활성화 함수를 사용하여 박스 크기의 배수로 $x, y$ 오프셋을 유추하는 방법을 사용했으나 좋지 않았습니다.

Linear x, y predictions instead of logistic. Logistic 활성 함수 대신 $x, y$ 오프셋을 직접 유추하는 시도도 mAP를 매우 떨어트렸습니다.

Focal loss. focal loss를 시도해보았는데, mAP를 2 포인트 떨어트렸습니다. YOLOv3는 focal loss가 해결하려고 하는 문제에 이미 강인합니다. 클래스 유추와 objectness 유추를 별개로 하고 있기 때문입니다.

Dual IOU thresholds and truth assigment. Faster R-CNN은 두개의 IOU를 사용하여 오버랩이 0.7이 넘는 경우에는 positive 샘플로, [0.3, 0.7]에서는 무시하고, 0.3 이하는 네거티브 샘플로 사용합니다. 비슷한 전략을 사용해봤지만 좋은 결과를 얻을 수 없었습니다.

5. What This All Means

 

 


Add a Comment Trackback