YOLOv4부터 YOLO 시리즈의 release를 시작한 Alexey Bochkovski(이름 어려움 주의)가 YOLOv4의 확장 버전인 Scaled-YOLOv4를 작년 12월에 내놓았고, 현재 Object Detection 분야의 SOTA baseline으로 보여진다.
Alexey는 기존에 YOLO의 여러가지 플랫폼 버전을 개발하던 사람이라고 하고, 아래 정리한 내용은 Alexey가 직접 Medium에 작성한 내용을 간략하게 정리한 내용이다.
원문링크
Scaled YOLO v4 is the best neural network for object detection on MS COCO dataset
Paper: https://arxiv.org/abs/2011.08036
alexeyab84.medium.com
현존하는 가장 정확한 object detection용 네트워크(55.8% AP MS COCO Test-dev)
15FPS에서부터 1774FPS까지 가능할 정도로 속도 관련해서도 좋음.
Scaled Yolo v4가 능가한 네트워크는 다음과 같다
- Google EfficientDet D7x / DetectoRS or SpineNet-190(self-trained on extra-data)
- Amazon Cascade-RCNN ResNest200
- Microsoft RepPoints v2
- Facebook RetinaNet SpineNet-190
- Google EfficientDet D0-D7x
- Google SpineNet S49s — S143
- Baidu Paddle-Paddle PP YOLO
- And many others...
Scaled YOLO v4는 YOLO v4의 개선되고 (scale면에서)확장된 버전이다
그리고 pretrained weight 없이 처음부터 학습되었다(trained from scratch)
YOLO v4 -CSP는 EfficientDetD3과 비교했을 때 병렬처리 면에서 4.7배 정도 더 좋은 효율을 보여준다고 한다
(on GPU V100)
- YOLOv4-SP (640x640) — 47.5% AP — 70 FPS — 120 BFlops (60 FMA) Based on BFlops, it should be 933 FPS = (112,000 / 120), but in fact we get 70 FPS, i.e. 7.5% GPU used = (70/933)
- EfficientDetD3 (896x896) — 47.5% AP — 36 FPS — 50 BFlops (25 FMA) Based on BFlops, it should be 2240 FPS = (112,000 / 50), but in fact we get 36 FPS, i.e. 1.6% GPU used = (36/2240)
YOLO v4에 대해 개선한 점
- scaling technique을 이용하여 YOLOv4-CSP -> P5 -> P6 -> P7을 차례대로 확장시켜 만듦
- 개선된 네트워크 구조 : Backbone이 최적화되었고, Neck(PAN)은 Cross-stage-partial(CSP) connection과 Mish activation 이용
- 학습 중에 Exponential moving average(EMA)를 사용 - 이는 stochastic weight averaging의 일종임
(pytorch.org/blog/pytorch-1.6-now-includes-stochastic-weight-averaging/)
- 네트워크의 각 해상도에 대해 독립적인 뉴럴 네트워크가 학습 (기존 YOLOv4에서는 하나의 네트워크만이 모든 해상도를 위해 학습되었음)
- 개선된 objectness normalizer in [yolo] layers
- 네트워크의 Width와 Height에 대해 activation을 변경하여 더 빠른 학습을 가능케함
Loss function에서도 변화가 생겼다 (YOLOv3 vs YOLOv4 vs Scaled-YOLOv4)
- bx, by : YOLOv4의 loss처럼 grid sensitivity를 더 강력하게(aggressively) 제거
- bw, bh : bounded box의 크기를 4 x Anchor_size로 제한
Scaled-YOLOv4는 AP50에 대해서는 똑같은 정확도를 얻었지만, 같은 해상도-같은속도 대비 더 높은 AP를 얻을 수 있다
Pytorch버전은 Darknet버전에 비해 더 높은 AP를 얻고(bounded box예측이 더 뛰어남), 더 낮은 AP50을 얻었다(더 적은 물체를 검출)
- YOLOv4(Darknet) — 608x608— 62 FPS — 43.5% AP — 65.7% AP50
- YOLOv4(Pytorch) — 608x608 — 62 FPS — 45.5% AP — 64.1% AP50
(참조링크 - 다크프로그래머의 AP와 AP50에 대한 고찰 : darkpgmr.tistory.com/179)
CSP connection은 극도로 효율적이고 단순하며 어느 뉴럴넷에도 적용이 가능하다
- 출력 signal의 절반은 main path로 간다 (큰 recieving field와 함께 더 많은 semantic information 생성)
- 나머지 절반은 bypass로 간다 (작은 percieving field로 더 많은 공간적 정보를 보존)
결론
- 좀더 확인을 해봐야겠지만 해당 논문만 봤을 때는 Scaled-YOLOv4가 현존하는 최고의 Object Detector로 여겨짐
- 실제 영상인식 업무에 적용할 때도 feasibility가 높은지 앞으로 파악이 필요함
- 이 분야는 상당히 고인물 분야로 보이는데 여전히 최적화하고 성능을 높인다는게 신기해보일 따름..