ML & DL

YOLO Model History | YoloV1 부터 YoloV10까지 간단 요약

2024. 8. 20. 23:33
목차
  1. YoloV1 (2016)
  2. YoloV2 (2017)
  3. YoloV3 (2018)
  4. YoloV4 (2020.04)
  5. YoloV5 (2020.06)
  6. YoloX (2021.08)
  7. YoloV6 (2022.09)
  8. YoloV7 (2022.07)
  9. YoloV8 (2023.01)
  10. YoloV9 (2024.02)
  11. YoloV10 (2024.05)
728x90

 

Yolo 모델에 대해서 톺아볼 일이 있었는데 간단 요약 글을 포스팅 하면서 다시 한번 정리를 한번 해 보려고 한다.


 

객체 감지는 이미지나 비디오 내의 객체를 식별하고 위치를 찾는 computer vision task이다.

객체 감지 알고리즘은 single shot detection과 two shot detection으로 나눌 수 있다.

 

two shot detection 알고리즘은 객체를 감지하는데 두 단계 프로세스를 사용한다. 첫번째 단계에서는 잠재적으로 객체를 포함할 수 있는 bounding box를 제안을 한다. 두번째 단계에서는 box 내 객체 클래스를 분류하기 위해 제안된 영역을 합성 신경망을 통해 실행을 한다.

two shot detection 알고리즘의 대표적인 예료는 R-CNN, Fast R-CNN, Faster R-CNN이 있다.

해당 내용의 간단 정리는 아래 링크에서도 확인 가능하다.

https://iambeginnerdeveloper.tistory.com/204

 

R-CNN & Fast R-CNN & Faster R-CNN 간단 비교(feat. RPN (region proposal network))

RCNN 논문을 읽고 정리하면서 논문 하나하나를 리뷰하여 따로 포스팅하는 것 보단 각 특징들을 서로 비교하며 간단하게 정리하는게 좀 더 스스로에게 도움이 될 것 같았다. 때문에 논문에 언급된

iambeginnerdeveloper.tistory.com

 

 

Single shot detection은 bounding box와 객체의 class를 한번의 shot으로 예측하느 객체 가지 알고리즘의 한 유형이다. 네트워크의 단일 forward로 객체의 존재와 bounding box가 동시에 예측이 된다.

https://encord.com/blog/yolo-object-detection-guide/

one shot detection 알고리즘의 대표적인 예로는 YOLO(You Only Look Once)와 SSD(Singe Shot MultiBox Detector)가 있다.

 

해당 포스팅에서 살펴 볼 YOLO는 입력 이미지를 그리드로 나누고 각 그리드 셀에 대해 특정 수의 bounding box와 클래스 확률을 예측한다.

 

 

YoloV1 (2016)

- paper : https://arxiv.org/abs/1506.02640

- site : https://pjreddie.com/darknet/yolo/

- 실시간 객체 검출을 위한 딥러닝 기반 네트워크

- backbone : Darknet

- SxS grid cell로 input image를 분리 후 cell 마다 n개의 bbox, confidence score, class probabilities 예측

- NMS : 각 grid cell 마다 n개의 bbox가 생성되어 인접한 cell에서 같은 객체를 예측한 bbox가 생성되기에 confidence score와 IoU를 계산해서 가장 높은 score의 bbox를 선택하고 선택한 bbox와 IoU가 큰 나머지 bbox를 삭제

- 각 grid cell은 하나의 class만 예측

- 224x224로 pre-train하고 448x448을 input으로 사용하여 학습 진행

- 당시 SOTA들에 비해 real time 부분에서 가장 좋은 성능을 보임

 

 

YoloV2 (2017)

- paper : https://arxiv.org/abs/1612.08242

- site : https://pjreddie.com/darknet/yolo/

- backbone : Darknet-19

- 기존 darknet의 마지막 fully connected layer를 삭제하고 1x1 convolution layer로 대체

- global average pooling을 사용해 파라미터를 줄여 속도 향상

- 모든 conv layer에 batch norm 적용 -> yolov1에서 dropout layer를 제거하고 batch norm을 사용 해 mAP를 2% 향상

- anchor box 도입

  -> yolov1에서의 이미지를 일정 크기의 cell로 나누는 방식을 이용해 cell에 미리 정의 된 형태를 가진 bbox인 anchor box를 생성

  -> k-means clustering을 통해 GT와 가장 유사한 optimal anchor box를 탐색하여 데이터셋 특성에 적합한 anchor box를 생성

- fine grid feature -> 중간 feature map과 최종 feature map을 합쳐서 이용, 앞 conv layer의 high resolution feature map을 뒷 단의 conv layer의 low resolution feature map에 추가

- hight resolution classifier -> 448x448로 pre-train하여 더 큰 해상도에서의 예측 성능 개선, mAP 4% 향상

 

 

YoloV3 (2018)

- paper : https://arxiv.org/abs/1804.02767

- site : https://pjreddie.com/darknet/yolo/

- backbone : Darknet-53

- neck : FPN

- skip connection 개념 적용, pooling layer 삭제

- SSD Multi Scale feature layer와 Retina-net의 FPN과 유사한 기법 적용

- 마지막에 loss function을 softmax가 아닌 모든 class에 대해 sigmoid를 취해 각 class 별로 binary classification을 하도록 변경

- 작은 객체에 대한 성능 개선

- 속도 개선보다는 V2를 기반으로 성능 개선에 초점을 맞춤

 

 

YoloV4 (2020.04)

- paper : 

- github : 

- backbone : CSPDarknet53

- neck : SPP(multi scale feature representation) + PANet(하향식 및 상향식 경로를 통해 정보 흐름과 feature pyramid 생성을 향상) + FNP(multi scale feature map 생성)

- 작은 객체 검출 문제를 해결하고자 input image size를 512로 사용

- receptive field를 물리적으로 키우기 위해 layer 수를 늘리고 한 장의 이미지에서 다양한 종류, 다양한 크기의 객체들을 동시 검출하기 위해 파라미터 수 증가

- 다양한 데이터셋을 이용한 data augmentation과 quantization 도입으로 더 높은 성능과 더 작은 모델 사이즈를 가지게 됨

 

 

YoloV5 (2020.06)

- paper : X

- github : https://github.com/ultralytics/yolov5

- backbone : CSPDarknet53 -> 각 계층의 연산량을 균등하게 분배하여 연산 bottleneck을 없애고 CNN layer의 연산 활용을 업그레이드

https://github.com/ultralytics/yolov5/issues/280

- 모델 구조는 V4와 유사하며 V3의 darknet 프레임워크를 pytorch로 변환

- 다양한 augmentation 적용 -> mosaic augmentation으로 인해 작은 객체에 대한 성능 개선

- backbone을 depth multiple과 width multiple을 기준으로 하여 크기 별로 모델을 나눔

 

 

YoloX (2021.08)

- paper : https://arxiv.org/abs/2107.08430

- github : https://github.com/Megvii-BaseDetection/YOLOX

- backbone : Darknet-53

- neck : SPP

- anchor free model

  -> 센터 좌표 값 하나만 positive sample로 지정해 그 부젼에 괜찮게 예측한 다른 데이터들을 모두 무시

  -> positive sample을 센터 값 주변 3x3 사이즈로 모두 지정해 고품질의 예측 값에 대해 이득을 취할 수 있도록 함

  -> 하나의 지점이 다수의 박스 내부에 존재할 때 global labeling이 필요

- decoupled head 구조로 변환

- SimOTA

  -> optimal transport(OT) problem

  -> 하나의 지점이 다수의 박스 내부에 존재할 때의 문제를 해결하기 위해 OTA 적용

 

 

YoloV6 (2022.09)

- paper : https://arxiv.org/abs/2209.02976

- github : https://github.com/meituan/YOLOv6

- backbone : EfficientRep

- neck : Rep-PAN

- knowledge distillation 시 모든 학습 단계에서 student model이 지식을 효율적으로 학습할 수 있도록 teacher와 label의 지식을 동적으로 조정

- PTQ, QAT 모두 활용하여 양자화 체계 개선

- batch 32에서 869fps 달성

 

 

YoloV7 (2022.07)

- paper : https://arxiv.org/abs/2207.02696

- github : https://github.com/WongKinYiu/yolov7

- backbone : E-ELAN

- computation block을 어느 정도 많이 쌓아도 잘 학습되지만 무한대로 쌓으면 parameter utilization이 낮아지는 문제가 있음

- 마음껏 쌓아도 학습 잘 되도록 E-ELAN 제안

 

- real time으로 inference cost를 증가 시키지 않으면서 augmentation을 통해 정확도를 향상 시키고자 함

- 학습 시 여러 개의 레이어들을 학습하고 inference 시 해당 레이어들을 하나의 레이어로 fusing

- GT를 그냥 사용하는 것이 아닌 prediction, gt의 distribution을 고려 해 새로운 soft label을 생성

- SOTA보다 parameter 수 40%, 계산량 50% 감소, 더 빠른 추론 속도와 높은 정확도 달성

 

 

YoloV8 (2023.01)

- paper : X

- github : https://github.com/ultralytics/ultralytics

- backbone : CSPDarknet53

- neck : SPP + PANet + SAM(Spatial attention module)

  -> feature map 내 중요한 spatial 영역에 집중하는 네트워크의 기능을 향상 하도록 설계

  -> spatial attention을 적용 해 관련 특징을 강조하는데 도움을 주어 객체 감지와 같은 작업 성능 향상

https://github.com/ultralytics/ultralytics/issues/189

- anchor free model

- YoloV5와 차이점

  -> C3 모듈을 C2f 모듈로 교체

  -> backbone에서 첫번째 6x6 conv를 3x3 conv로 교체

  -> 두개의 conv layer 삭제

  -> ConvBottleneck에서 첫번째 1x1 Conv를 3x3 Conv로 교체

  -> 분리된 head 사용

 

 

YoloV9 (2024.02)

- paper : https://arxiv.org/abs/2402.13616

- github : https://github.com/WongKinYiu/yolov9

- backbone : GELAN

  -> information bottleneck 문제 해결 위해 PGI 제안

  -> gradient path planning에 기초한 새로운 lightweight network 아키텍처

- neck : PGI

  -> information bottleneck과 reversible function 문제를 해결하고 multiple objective를 달성하기 위해 PGI 개념 제안

 

 

YoloV10 (2024.05)

- paper : https://arxiv.org/pdf/2405.14458

 - github : https://github.com/THU-MIG/yolov10

- backbone : CSPNet

- NMS 제거 -> daul label assignments 사용

- rank-guided block design 적용

  -> 중복 연산 제거

  -> CIB (compact inerted block)

 

728x90
저작자표시 비영리 변경금지 (새창열림)
  1. YoloV1 (2016)
  2. YoloV2 (2017)
  3. YoloV3 (2018)
  4. YoloV4 (2020.04)
  5. YoloV5 (2020.06)
  6. YoloX (2021.08)
  7. YoloV6 (2022.09)
  8. YoloV7 (2022.07)
  9. YoloV8 (2023.01)
  10. YoloV9 (2024.02)
  11. YoloV10 (2024.05)
'ML & DL' 카테고리의 다른 글
  • 경량화 | QAT, Quantization Aware Training, 딥러닝 경량화, 모델 경량화, 네트워크 경량화, yolov8+QAT 코드
  • FiftyOne | 데이터셋 시각화 및 분석 도구, FiftyOne 설치, FiftyOne 사용법
  • [밑시딥2] Chapter 8. 어텐션
  • [밑시딥2] Chapter 7. RNN을 사용한 문장 생성
토오오끼
토오오끼
나의 성장 일기가 되었으면 하는 블로그 contact : ryuhyojung@naver.com
250x250
토오오끼
초보 개발자의 일기장
토오오끼
전체
오늘
어제
  • 분류 전체보기 (318)
    • 나는야 초보 개발자 (2)
    • ML & DL (33)
    • Python (36)
    • SQL (16)
    • Computer Science (8)
    • Algorithm (51)
    • Git (9)
    • Docker (2)
    • Kubernetes (9)
    • Airflow (5)
    • Jetson (7)
    • Gstreamer (1)
    • etc (21)
    • 논문 리뷰 (20)
    • 각종 에러들을 해결 해 보자 (36)
    • 자격증 (15)
      • 정보처리기사 (11)
      • 한국사 (3)
      • CKA (1)
    • 일상 (47)
      • 대학원 (1)
      • 미라클 모닝 - DONE (30)
      • 한 달에 최소 한 권의 책 읽기 - HOLD (10)
      • AIFFEL(아이펠) - FINISHED (4)
      • Etc. (2)

인기 글

태그

  • 알고리즘
  • 파이썬
  • 프로그래머스
  • 코테
  • 코딩테스트
  • 딥러닝
  • Programmers
  • Python
  • AI
  • 코딩 테스트

최근 댓글

최근 글

hELLO · Designed By 정상우.
토오오끼
YOLO Model History | YoloV1 부터 YoloV10까지 간단 요약
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.