https://docs.ultralytics.com/models/yolo11/
Overview
YOLO11은 Ultralytics YOLO 시리즈의 최신 버전으로, 실시간 객체 탐지 분야에서 정확도, 속도, 효율성 측면에서 혁신을 이루었다. 이전 YOLO 버전들의 발전을 바탕으로, YOLO11은 아키텍처와 학습 방법에서 중요한 개선을 도입하여, 다양한 컴퓨터 비전 작업에 적합한 다재다능한 선택지를 제공한다.
Key Features
- 향상된 특징 추출: YOLO11은 개선된 백본(backbone)과 넥(neck) 아키텍처를 사용하여 특징 추출 능력을 향상시켜 보다 정밀한 객체 탐지와 복잡한 작업 성능을 제공함.
- 효율성 및 속도 최적화: YOLO11은 세밀한 아키텍처 디자인과 최적화된 학습 파이프라인을 도입하여 처리 속도를 높이면서 정확도와 성능 간의 최적의 균형을 유지한다.
- 더 적은 파라미터로 높은 정확도: 모델 디자인의 발전을 통해 YOLO11m은 YOLOv8m에 비해 22% 적은 파라미터로 COCO 데이터셋에서 더 높은 평균 정밀도(mAP)를 달성하여 계산 효율성을 유지하면서도 정확도를 향상시킨다.
- 다양한 환경에서의 적응성: YOLO11은 엣지 디바이스, 클라우드 플랫폼, NVIDIA GPU를 지원하는 시스템 등 다양한 환경에서 원활하게 배포될 수 있어 최대의 유연성을 제공한다.
- 다양한 작업 지원: 객체 탐지, 인스턴스 분할, 이미지 분류, 자세 추정, OBB(방향 객체 탐지) 등 다양한 컴퓨터 비전 작업을 수행하도록 설계되었다.
이번 yolov11에서는 object detection, instance segmentation, pose estimation, oriented detection, classification task를 지원한다. 하지만 현재 yolov11은 v10과 달리 nms-free 모델은 아닌것 같다. 변경하고 싶다면 model configuration을 변경해야할 것 같다.
이번 yolov11에 사용된 모델 구조를 v10과 비교해서 살펴보자.
backbone을 보면 v11에서는 C3k2를 사용하고, v10에서는 C2f를 사용했다.
- C3k2 (C3 Block with k=2):
- 구조 : C3k2는 여러 개의 경량화된 합성곱(convolution) 레이어로 구성된 블록이다. 이 블록은 주로 C3의 변형으로, 각 레이어가 특정 수의 필터를 사용해 정보를 효과적으로 압축하고, 동시에 깊이(depth)를 늘려 다양한 특징을 학습할 수 있게 설계되어있다.
- 특징 : 이 레이어는 데이터 흐름을 원할하게 하면서도 정보 손실을 줄여, 작은 객체를 보다 잘 탐지할 수 있도록 돕는다.
- C2f (C2 Block):
- 구조: C2f는 두 개의 병렬 경량 합성곱 레이어를 포함하고 있다. 이 구조는 다른 스케일의 정보를 동시에 처리할 수 있도록 하여, 서로 다른 크기의 객체를 잘 탐지 할 수 있게 설계되었다.
- 특징: C2f는 경량화와 효율성을 중시하며, 다양한 해상도의 특징을 통합하여 탐지 성능을 높이는데 중점을 두고 있다. 하지만, 이 구조는 깊이와 넓이 측면에서 C3k2만큼의 유연성을 제공하지는 않을 수 있다.
그리고 backbone의 마지막 부분을 보면 v11에서는 C2PSA를 사용하고, v10에서는 PSA를 사용했다.
- C2PSA:
- C2PSA는 두 개의 독립된 브랜치로 구성되는데, 각각의 브랜치는 서로 다른 공간적 정보와 채널 간 상호작용을 처리한다. 이로 인해 객체의 다양한 특징을 더 잘 포착할 수 있다. 즉, 하나의 브랜치가 객체의 전반적인 형태와 위치 정보를 포착하는 반면, 다른 브랜치는 더 미세한 세부 정보를 추출하는 역할을 한다.
- 이 방식은 개체의 여러 해상도에서 중요한 특징을 더 잘 추출할 수 있게 하며, 특히 크기가 작은 객체를 탐지하는 데 유리하다. 기존 PSA는 모든 정보를 한 번에 처리했기 때문에 정보 손실이 있을 수 있었으나, C2PSA는 이를 분리해 보다 세밀하게 정보를 처리할 수 있다.
이제 head를 한번 보자.
- 모듈 구성 (Modules):
일단 v11은 C3k2 모듈을 사용하고, v10은 C2f 모듈을 주로 사용한다. C3k2는 더 작은 커널 크기를 사용해 성능을 최적화하는 반면에, C2f는 피처를 더 많이 분리하여 다층 피처를 효과적으로 처리하는 구조이다. 또한, v11의 경우엔 P5 스케일에서 C2PSA 모듈이 추가되었는데, 이는 C2와 PSA(Pyramid Split Attention) 기법을 결합하여 피처맵의 전역적 중요성을 고려한 구조이다.
- 업샘플링 전략 (Upsampling Strategy):
두 모델 모두 nn.Upsample을 사용해 해상도를 증가시키지만, v11에서는 업샘플링된 피처맵을 C3k2블록과 결합해 사용하고 v10은 C2f 모듈과 결합한다.
- Detection head:
v11의 head는 v10과 마찬가지로 P3, P4, P5의 세 가지 피처맵을 기반으로 탐지를 수행하지만, v11의 최종 탐지 모듈로 v8에서 사용하던 Detect를 사용하고, v10은 v10Detect를 사용한다. v10Detect를 사용할 경우 one-to-one, one-to-many를 활용해 nms-free를 이용할 수 있지만, v11은 아닌듯 하다. v10에서는 P5 단계에 C2fCIB 모듈이 포함되어있는데, 이는 C2f블록에 추가적인 CIB(Cross Iteration Batchnorm)기법을 더해 성능을 향상시키는 구조이다.
- 레이어 반복 횟수:
v11은 C3k2 블록에서 반복 횟수가 상대적으로 적고, v10에서는 C2f 블록에서 더 많은 반복 횟수가 적용되어, 피처의 상세한 처리가 이루어진다.따라서 v11은 보다 경량화된 구조와 새로운 모듈을 도입해 성능을 높였으며, v10은 C2f와 CIB 같은 모듈로 더 깊이 있는 피처 처리를 강조한 모델이다.
혹시 yolov11을 한번 학습해 보고 싶은 사람들은 아래 링크를 참고하길 바란다.