본문 바로가기
논문 정리

YOLOv5 - Introduction

by winston1214 2020. 9. 27.
반응형

YOLOv5는 가장 최근에 나온 yolo 시리즈다. 이에 대해서 직접 학습하고 실행해보았다.

일단 개발환경은 Ubuntu 18.04.5, GPU : TitanXP 이다. anaconda 버전은 가장 최근 버전을 사용하였다.

Training dataset은 COCO dataset을 활용하였고 test dataset은 KITTI dataset을 활용하였다.

기본적인 진행은 github.com/ultralytics/yolov5

 

ultralytics/yolov5

YOLOv5 in PyTorch > ONNX > CoreML > iOS. Contribute to ultralytics/yolov5 development by creating an account on GitHub.

github.com

원작자의 진행을 참고하였다.

일단 먼저 YOLOv5에 대해 간단한 소개를 하겠다.

YOLOv5는 YOLOv3를 pytorch로 implementation한 사람과 동일인이다. 하지만 몇몇 커뮤니티에서 비판을 받고 있는데 이 이유는 그 전의 YOLO의 특성과 많이 다르고 괜히 YOLO가 유명하니까 그 유명세를 이용해서 v5라는 이름을 붙인거란 것이다. 그래도 이걸 만든다는게 대단한거니까...

아무튼 YOLOv5의 성능은 다음 그림과 같다

yolov5

기존의 yolov3가 FPS(Frame per seconds)는 높은 반면에 mAP(mean Average Precision)는 비교적 낮은 모델이었다. 하지만 yolov5는 FPS와 mAP 측면에서 모두 뛰어난 성능을 발휘한다.(yolov3와 비교하기 위해 옛날자료에 yolov5 첨부)

그리고 yolov5는 다른 yolo 모델들과 달리 크기별로 나눠져 있다.

Yolov5s, Yolov5m, YOlov5l, Yolov5x -> 이는 small, medium,large, xlarge라고 생각하면 구분하기 쉽다.

이를 나눈 기준은 depth multiple(model depth multiple)과 width multiple(layer width multiple)의 차이이다.

물론 x로 갈수록 더 배수가 높아지는 것이다. 이에 따른 속도와 정확도 차이는 다음 그림과 같다

yolov5 모델 별 성능 차이

정확도와 속도는 상충관계이기 때문에 모두 잡을 순 없다. s 가 가장 빠른 대신 정확도는 떨어지고 x가 가장 느린 대신 정확도는 향상된다.

YOLOv5가 기존의 yolo 시리즈 보다 빠른 이유는 무엇일까?

그 이유는 backbone과 head의 차이에 있다. 또한 backbone 아키텍쳐의 차이도 있다.

Backbone 부분 은 이미지로부터 Feature Map을 추출하는 부분인데 이는 yolov4와 유사하다. 여기서 포인트는 CSPNet을 사용했다는 것이다. CSPNet에 대한 정확한 파악을 못했지만 keyog.tistory.com/30

 

CSPNet : CNN의 학습능력을 향상 시킬 수 있는 새로운 Backbone

SOTA를 확인하다 읽었던 CSPNet에 대해 작성해보려고 한다. 논문의 제목은 CSPNET: A NEW BACKBONE THAT CAN ENHANCE LEARNING CAPABILITY OF CNN 으로 직역 하자면 이 포스팅의 제목과 같이 CNN의 학습능력을 향..

keyog.tistory.com

 

이분의 블로그에 CSPNet 논문 리뷰에 따르면 CNN의 학습 능력을 향상시킬 수 있는 방법인 것이다.

Head 부분은 Feature Map을 바탕으로 물체의 위치를 찾는 것이다. Anchor Box(Default Box)를 처음에 설정 후 이를 이용하여 최종적인 Bounding Box를 생성한다. 3개의 스케일에서 바운딩 박스 생성하고 각 스케일에서 3개의 엥커 박스 사용한다.

Yolov5의 아키텍쳐 부분은 앞서 backbone에서 말했듯이 CSPNet이 들어가는데 BottleneckCSP를 사용한다.

Yolov5s architecture

핵심 포인트인 BottleneckCSP를 자세히 보면 다음과 같다.

BottleneckCSP

이 구조는 기본적으로 4개의 convolution layer 생성한다.

Conv1,conv4 -> convolution을 하고 Conv2,conv3 -> convolution+ batch_norm을 한다.

그리고 CSP 구조 답게 y 값을 2개 생성한다. y1은 conv1에서 conv3로 갈때의 연산값이 나오고 y2는 conv2의 값을 받는다. 그리고 이를 conv4에 합치고 이를 반환한다.

이제 yolov5에 대해 알아보았으니 다음엔 이를 직접 training 하고 test 까지 해보겠다.

 

 

반응형

'논문 정리' 카테고리의 다른 글

Auto Encoding Variational Bayes(VAE) -1  (5) 2021.03.29
Deep Residual Learning for Image Recognition(ResNet)  (4) 2021.03.13
Towards open set deep networks  (4) 2021.01.20
YOLOv5 - training & test  (23) 2020.09.27
YOLO  (0) 2020.09.11

댓글