YOLOv5 모델 리뷰
YOLOv5 모델은 백본으로 CSP-Darknet53, 그리고 넥은 SPP (Spatial Pyramid Pooling) 와 PANet, YOLOv4 에서 사용된 헤드입니다.
YOLOv5 – 싱글 스테이지 객체 탐지기 (single-stage object detectors)
객체 탐지 모델에는 두 가지 유형이 있습니다: 투 스테이지 (two-stage, 두 단계) 객체 탐지기와 싱글 스테이지 (single-stage, 단일 단계) 객체 탐지기입니다. 싱글 스테이지 객체 탐지기 (예: YOLO) 아키텍처는 백본 (backbone), 넥 (neck), 그리고 밀집 예측 (dense prediction)을 수행하는 헤드 (head)의 세 가지 구성 요소로 구성됩니다.
출처: YOLO v5 model architecture Explained
- 백본 (backbone): 백본은 이미지를 위한 풍부한 특징 표현을 추출하기 위해 사전 학습된 네트워크입니다. 이는 이미지의 공간 해상도를 줄이고 특징(채널) 해상도를 높이는 데 도움을 줍니다.
- 넥 (neck): 넥은 특징 피라미드를 추출하는 데 사용됩니다. 이는 모델이 다양한 크기와 스케일의 객체에 잘 일반화되도록 돕습니다.
- 헤드 (head): 헤드는 최종 단계 작업을 수행합니다. 특징 맵에 앵커 박스를 적용하고 최종 출력: 클래스, 객체 점수 및 경계 상자를 렌더링합니다.
YOLOv5 – 전체 아키텍처
출처: YOLO v5 model architecture Explained
YOLOv5 모델은 백본으로 CSP-Darknet53, 그리고 넥은 SPP (Spatial Pyramid Pooling) 와 PANet, YOLOv4 에서 사용된 헤드입니다.
출처: Brief Review: YOLOv5 for Object Detection by Sik-Ho Tsang
위 그림은 입력 레이어(input)를 거쳐 백본(backbone)으로 전송되어 특징을 추출합니다.
백본은 다양한 크기의 특징 맵을 얻고, 그런 다음 특징 융합 네트워크(neck)를 통해 이러한 특징들을 융합하여 세 가지 특징 맵 P3, P4, P5를 생성합니다 (YOLOv5에서는 80×80, 40×40, 20×20 크기로 표현됩니다). 이 특징 맵들은 각각 작은 객체, 중간 크기 객체 및 큰 객체를 탐지합니다.
세 개의 특징 맵이 예측 헤드 (head)로 보내지면, 사전 설정된 앵커를 사용하여 각 픽셀에 대한 신뢰도 계산 및 바운딩 박스 회귀가 실행됩니다. 이를 통해 객체 클래스, 클래스 신뢰도, 박스 좌표, 너비 및 높이 정보를 포함하는 다차원 배열(BBoxes)을 얻습니다.
해당 배열에서 유용하지 않은 정보를 필터링하기 위해 설정된 임계값 (confthreshold, objthreshold)을 사용하고, 비최대 억제 (non-maximum suppression, NMS) 프로세스를 수행하여 최종 탐지 정보를 출력합니다.
2. YOLOv5 백본 (Backbone)
출처: Brief Review: YOLOv5 for Object Detection by Sik-Ho Tsang
백본은 CSPDarknet53 입니다. 주요 구조는 여러 CBS(Conv + BatchNorm + SiLU) 모듈과 C3 모듈을 쌓은 다음, 마지막으로 하나의 SPPF 모듈이 연결된 것입니다.
CBS 모듈은 C3 모듈의 특징 추출을 보조하며, SPPF 모듈은 백본의 특징 표현 능력을 향상시킵니다.
출처: Brief Review: YOLOv5 for Object Detection by Sik-Ho Tsang
SPPF는 SPPNet과 달리 이전의 맥스 풀링된 특징들을 다시 맥스 풀링하여 반복 작업을 피했습니다. 이렇게 하면 모듈의 실행 속도가 크게 향상됩니다.
CSP-Darknet53
YOLOv5 는 CSP-Darknet53 을 백본으로 사용합니다. CSP-Darknet53 은 YOLOv3 에 사용된 컨볼루션 네트워크 Darknet53 에 Cross Stage Partial(CSP) 네트워크 전략을 적용한 것입니다.
Cross Stage Partial Network
YOLO는 깊은 네트워크로서 정보의 흐름을 최심층까지 전달하고 기울기 소실 (vanishing gradient) 문제를 해결하기 위해 잔차(residual)와 밀집(dense) 블록을 사용합니다. 그러나 이러한 블록의 사용은 중복된 기울기 (redundant gradients) 문제를 일으킵니다. CSPNet은 기울기 흐름을 절단하여 이 문제를 해결합니다.
논문 내용: CSPNet은 DenseNet의 특징 재사용 특성을 유지하면서 과도한 중복 기울기 정보를 줄이는 데 도움을 줍니다. YOLOv5는 이 전략을 적용하여 기본 계층의 특징 맵을 두 부분으로 나누고, 이를 크로스 스테이지 계층을 통해 결합합니다.
출처: YOLO v5 model architecture Explained
CSPNet 전략을 적용하면 YOLOv5는 매개변수 수와 계산량(FLOPS)을 줄여 실시간 객체 탐지 모델에서 중요한 요소인 추론 속도를 높일 수 있습니다.
YOLOv5 넥 (Neck)
출처: Brief Review: YOLOv5 for Object Detection by Sik-Ho Tsang
YOLOv5는 FPN과 PAN 방법을 사용합니다.
FPN의 기본 아이디어는 특징 추출 네트워크 (neck) 에서 다중 합성곱 다운샘플링 작업을 통해 생성된 출력 특징 맵(C3, C4, C5)을 업샘플링하여 여러 새로운 특징 맵(P3, P4, P5)을 생성하는 것입니다. 이 특징 맵들은 다양한 크기의 목표를 탐지하는 데 사용됩니다.
YOLOv5 모델의 넥 부분에서는 두 가지 주요 변경 사항이 도입되었습니다. 첫째, 공간 피라미드 풀링(SPP)의 변형이 사용되었고, 둘째, 병목 CSP(BottleNeckCSP)를 적용하여 경로 집계 네트워크(PANet)가 수정되었습니다.
경로 집계 네트워크 (PANet, Path Aggregation Network)
PANet은 특징 피라미드 네트워크로, 정보 흐름을 개선하고 마스크 예측 작업에서 픽셀의 올바른 위치를 돕기 위해 이전 버전의 YOLO(YOLOv4)에서 사용되었습니다. YOLOv5에서는 이 네트워크에 CSPNet 전략을 적용하여 수정되었습니다.
공간 피라미드 풀링 (SPP, Spatial Pyramid Pooling)
SPP 블록은 입력에서 받은 정보를 집계하여 고정된 길이의 출력을 반환합니다. 이를 통해 수용 영역을 크게 확장하고 네트워크 속도를 저하시키지 않으면서 가장 관련 있는 컨텍스트 특징을 분리하는 이점이 있습니다. 이전 버전의 YOLO(yolov3 및 yolov4)에서는 백본에서 가장 중요한 특징을 분리하기 위해 사용되었으나, YOLOv5(6.0/6.1)에서는 네트워크 속도를 개선하기 위해 SPPF가 사용되었습니다.
YOLOv5 헤드 (Head)
출처: Brief Review: YOLOv5 for Object Detection by Sik-Ho Tsang
YOLOv5는 YOLOv3 및 YOLOv4와 동일한 헤드를 사용합니다. 이 헤드는 경계 상자의 위치(x, y, 높이, 너비), 점수 및 객체 클래스를 예측하는 세 개의 컨볼루션 층으로 구성됩니다.
경계 상자의 목표 좌표를 계산하는 방정식이 이전 버전과 변경되었습니다.
특징 맵의 왼쪽 상단 모서리의 좌표 값은 (0, 0)으로 설정됩니다.
와 는 예측 중심점의 조정되지 않은 좌표입니다.
는 조정된 예측 박스의 정보를 나타냅니다.
와 는 사전 앵커의 정보를 나타냅니다.
와 는 모델에 의해 계산된 오프셋을 나타냅니다.
사전 앵커의 중심 좌표와 크기를 최종 예측 박스의 중심 좌표와 크기로 조정하는 과정입니다.
YOLOv5 활성화 함수 (Activation Function)
YOLOv5 모델에서 활성화 함수 선택은 매우 중요합니다. YOLOv5에서는 SiLU와 Sigmoid 활성화 함수를 사용합니다.
출처: YOLO v5 model architecture Explained
(a) SiLU(Sigmoid Linear Unit)는 swish 활성화 함수라고도 불리며, 은닉층의 합성곱 연산에 사용됩니다. SiLU 함수의 그래프는 다음과 같습니다.
(b) Sigmoid 활성화 함수는 출력층의 합성곱 연산에 사용됩니다. Sigmoid 함수의 그래프는 다음과 같습니다.
YOLOv5 손실 함수 (Loss Function)
YOLOv5는 탐지된 객체의 클래스, 바운딩 박스, 그리고 객체성 점수를 반환합니다. 따라서, 클래스 손실과 객체성 손실을 계산하기 위해 BCE(Binary Cross Entropy)를 사용하며, 위치 손실을 계산하기 위해 CIoU(Complete Intersection over Union) 손실을 사용합니다. 최종 손실을 계산하는 공식은 다음과 같습니다.
YOLOv5 다른 개선 사항
위에서 언급된 내용 외에도 YOLOv5에 추가된 몇 가지 작은 개선 사항들이 있습니다.
- 포커스 레이어 (Focus Layer): 네트워크의 처음 세 레이어를 대체하여 매개변수 수, FLOPS 수, CUDA 메모리를 줄이면서 전방 및 후방 패스 속도를 개선했습니다. mAP(mean Average Precision)에는 약간의 영향을 미쳤습니다.
- 그리드 민감도 (Grid Sensitivity) 제거: 이전 버전의 YOLO는 이미지 모서리에서 바운딩 박스를 감지하는 데 어려움을 겪었습니다. 새로운 방정식은 중심점 오프셋 범위를 (0-1)에서 (-0.5, 1.5)로 확장하여 이 문제를 해결했습니다. 이전 방정식에서는 높이와 너비의 스케일링 비율이 무제한이었지만, 이제는 이 문제가 감소되었습니다.
출처: YOLOv5 (6.0/6.1) brief summary · ultralytics/yolov5 · GitHub
- 실행 환경: 이전 버전의 YOLO는 C로 작성된 Darknet 프레임워크에서 구현되었지만, YOLOv5는 PyTorch로 구현되어 인코딩된 작업을 제어하는 데 더 큰 유연성을 제공합니다.
YOLOv5 vs YOLOv4
아래는 모델 저자와의 논의 후 roboflow에서 요약한 벤치마크 결과입니다.
- 더 빠른 훈련 속도
- 더 가벼움
- 더 나은 추론 (inference) 시간
- 같은 mAP (mean Average Precision)
출처: Responding to the Controversy about YOLOv5
결론
YOLOv5는 이전 버전에는 없었던 몇 가지 주요 변경 사항을 도입했습니다. Darknet53 백본에 CSPNet을 적용하고, CSP-Darknet53 백본에 포커스 레이어를 통합했으며, 모델 넥에서 SPP 블록을 SPPF 블록으로 교체했습니다. 또한 PANet 모델에 CSPNet 전략을 적용했습니다. YOLOv5와 YOLOv4는 그리드 감도 문제를 해결하여 이제 가장자리에 중심점이 있는 바운딩 박스를 쉽게 감지할 수 있습니다. 마지막으로, YOLOv5는 이전 버전보다 가볍고 빠릅니다.