[Object Detection] Yolo Vx

나감빛·2023년 3월 17일

YOLO(You Only Look Once)는 여러 버전이 출시되면서 점차적으로 발전해왔습니다. 주요 버전들과 그 차이점은 다음과 같습니다.

  1. YOLOv1 YOLO의 초기 버전으로, 다른 객체 감지 모델과 비교해 빠른 속도를 보였지만, 작은 객체를 감지하는 능력이 부족했습니다.

  2. YOLOv2 YOLOv1과 비교해 정확도를 개선하고, 더 작은 객체를 감지할 수 있는 능력을 향상시켰습니다. 또한, batch normalization을 도입해 학습을 안정화시켰습니다.

  3. YOLOv3 YOLOv2와 비교해 성능을 크게 개선했습니다. 다양한 크기의 객체를 감지하는 능력이 향상되었으며, 다양한 모양의 객체를 더 정확하게 감지할 수 있습니다.

  4. YOLOv4 YOLOv3보다 높은 정확도와 빠른 속도를 동시에 제공합니다. 또한, CSPNet(Convoluted Channel Splitting)이라는 새로운 구조를 도입하여 더욱 빠르고 효과적인 객체 감지를 가능케 했습니다.

  5. YOLOv5 YOLO 시리즈의 최신 버전으로, YOLOv4보다 더욱 높은 정확도와 빠른 속도를 제공합니다. 또한, PaddlePaddle 및 TensorRT 등의 다양한 프레임워크를 지원하며, YOLOv4에서 사용되는 CSPNet 대신 SPP(Spatial Pyramid Pooling) 모듈을 도입했습니다.

이러한 버전들은 계속해서 개발되고 있으며, 최신 기술을 도입해 객체 감지 분야에서 높은 성능을 보입니다.

YOLOv1 vs YOLOv2

YOLOv1과 YOLOv2의 차이점은 크게 3가지로 나눌 수 있습니다.

  1. Darknet에서의 개선: YOLOv2는 YOLOv1의 네트워크 구조인 Darknet-19를 개선하여 Darknet-53으로 변경하였습니다. 이로 인해 YOLOv2는 더 깊은 네트워크를 사용하므로, 더욱 정확한 객체 검출이 가능해졌습니다.

  2. Anchor box를 사용한 개선: YOLOv1은 하나의 그리드 셀당 하나의 객체만 검출 가능했지만, YOLOv2에서는 Anchor box를 도입하여 하나의 그리드 셀에서 여러 객체를 검출할 수 있게 되었습니다. 이로 인해 작은 객체도 높은 정확도로 검출이 가능해졌습니다.

  3. 다단계 검출 방식: YOLOv2는 다단계 검출 방식을 사용하여 객체 검출 성능을 개선했습니다. 먼저 전체 이미지를 작은 그리드로 나눈 후, 각 그리드 셀에서 미리 정해진 Anchor box와의 일치 정도를 계산합니다. 이후, 각 그리드 셀에서 가장 일치 정도가 높은 Anchor box를 사용하여 객체를 검출합니다. 이 과정을 여러 단계로 반복하면서 객체를 검출하므로, 더욱 높은 검출 정확도를 보장할 수 있습니다.

이러한 개선으로 YOLOv2는 YOLOv1보다 더욱 높은 검출 정확도를 보이며, 작은 객체도 높은 정확도로 검출할 수 있습니다.

YOLOv2 vs YOLOv3

YOLOv3과 YOLOv2의 차이점은 다음과 같습니다.

  1. Backbone network: YOLOv3은 Darknet-53이라는 더 큰 백본 네트워크를 사용합니다. 이로 인해 YOLOv3은 더 깊은 네트워크를 사용하여 더 정확한 객체 감지가 가능합니다.

  2. Feature pyramid: YOLOv3은 특징 피라미드 네트워크 (Feature Pyramid Network, FPN)를 사용하여 더 다양한 크기의 객체를 탐지할 수 있습니다. 반면 YOLOv2는 하나의 특징 맵에서 객체를 탐지합니다.

  3. Anchor boxes: YOLOv3은 anchor box의 개수가 더 많습니다. YOLOv2는 하나의 anchor box를 사용하여 객체를 예측하지만, YOLOv3은 여러 개의 anchor box를 사용하여 더 다양한 객체의 크기와 비율을 예측할 수 있습니다.

  4. Non-maximum suppression: YOLOv3에서는 IOU (Intersection over Union) 임계값을 낮추어 보다 많은 박스를 유지합니다. 이로 인해 더 많은 객체를 검출할 수 있습니다.

  5. 더 높은 정확도: YOLOv3은 YOLOv2보다 더 높은 정확도를 가지며, 더 다양한 객체를 탐지할 수 있습니다.

  6. 더 빠른 속도: YOLOv3은 Darknet-53을 사용하여 더 깊은 네트워크를 가지지만, CUDA 및 cuDNN의 최적화로 인해 YOLOv2보다 더 빠른 속도를 보입니다.

이러한 차이점들로 YOLOv3은 더욱 정확하고 빠른 객체 감지를 제공합니다.

FPN(Feature Pyramid Network;FPN)

특징 피라미드 네트워크(Feature Pyramid Network, FPN)는 객체 감지(Object Detection) 분야에서 대표적으로 사용되는 네트워크 구조 중 하나입니다. FPN은 물체의 크기가 다양한 경우에도 효과적으로 객체를 탐지할 수 있는 특징 추출 방법을 제공합니다.

FPN은 입력 이미지를 여러 단계로 분해하여 다양한 크기의 특징 맵(Feature Map)을 생성하고, 이를 활용하여 다양한 크기의 물체를 탐지할 수 있는 방법을 제공합니다. 이를 위해 FPN은 ResNet과 같은 백본 네트워크에서 다양한 스케일의 특징 맵을 추출하고, 이를 다양한 스케일의 특징 피라미드로 변환합니다. 이렇게 생성된 특징 피라미드는 탐지 모델의 다양한 레이어에서 활용됩니다.

FPN은 다양한 크기의 물체를 탐지할 수 있는 능력을 제공하면서도 연산량과 메모리 사용량을 효과적으로 제어할 수 있는 장점을 가지고 있습니다. 이를 통해 높은 정확도와 빠른 속도를 동시에 달성할 수 있습니다.

YOLOv3 vs YOLOv4

  1. Backbone Network: YOLOv3는 Darknet-53을 사용했지만, YOLOv4는 CSPDarknet-53을 사용하여 더 나은 성능을 보여줍니다.

  2. Feature Pyramid Network: YOLOv3에서는 FPN을 사용했지만, YOLOv4에서는 SPP와 PAN을 결합하여 CSP-PANet라는 새로운 FPN을 구현하여 성능을 개선했습니다.

  3. 데이터 증강 기술: YOLOv4는 다양한 데이터 증강 기술을 사용하여 데이터 세트의 다양성을 높였습니다. 이는 성능 향상에 큰 영향을 미쳤습니다.

  4. 더 나은 네트워크 구조 및 최적화: YOLOv4는 네트워크 구조를 최적화하여 성능을 향상시켰습니다. 또한, 네트워크를 더 빠르게 실행하기 위해 CUDA와 cuDNN을 사용하여 최적화를 진행했습니다.

  5. Bag of Freebies와 Bag of Specials: YOLOv4는 Bag of Freebies와 Bag of Specials라는 두 가지 기술을 사용하여 성능을 향상시켰습니다. Bag of Freebies는 네트워크 최적화를 위한 기술로, 데이터 증강, 경량화 및 최적화 기술 등을 포함합니다. Bag of Specials는 네트워크 구조를 개선하기 위한 기술로, 새로운 레이어와 레이어 조합을 사용하여 성능을 향상시켰습니다.

Bag of Freebies, Bag of Specials

Bag of Freebies는 딥러닝 모델 학습에서 발생하는 일련의 문제를 완화시키기 위한 기법들의 모음입니다. 이러한 기법들은 모델 성능을 향상시키 기술들로, 데이터 증강 기법, 가중치 초기화 방법, 정규화 방법 등이 포함됩니다. 이러한 기술들은 모델의 학습 속도와 안정성을 향상시키고, 과적합과 같은 문제를 완화시켜 최종 성능을 향상시킵니다.

Bag of Specials는 딥러닝 모델 개발에서 사용되는 기법의 하나로, 효율적인 네트워크 설계와 성능 향상을 위한 여러 가지 특수 연산을 모아놓은 기법입니다. 이러한 기법들은 모델 구조를 최적화하고, 모델의 파라미터 수를 줄여 계산 효율성을 높이는 데 도움을 줍니다. "Bag of Specials"에는 Weight Normalization, Channel Shuffle, Linear Bottleneck, Patch Normalization 등이 포함됩니다. 이러한 특수 연산들은 모델의 효율성과 성능을 모두 향상시키는 효과를 가집니다.

CSPnet (Cross Stage Partial Network; CSPnet)

CSPnet은 기존의 ResNet과 같은 모델에서 발생하는 연산량과 메모리 사용량의 증가 문제를 해결하면서, 성능을 향상시키는 방법입니다. 이를 위해, CSPnet은 모델의 구조를 변경하여, 병목 현상을 최소화하고, 정보를 효율적으로 전달할 수 있도록 합니다.

CSPnet은 크게 세 가지 구성 요소로 이루어져 있습니다. 첫 번째는 CSP block으로, 이는 다양한 크기의 필터를 사용하여 특징 추출을 수행합니다. 두 번째는 CSP backbone으로, 이는 CSP block을 이용하여 특징 맵을 추출하는 기능을 수행합니다. 마지막으로, CSP head로, 이는 추출된 특징 맵을 분류나 검출을 위한 출력층으로 전달하는 기능을 수행합니다.

CSPnet은 이미지 분류, 객체 검출 등 다양한 컴퓨터 비전 태스크에서 우수한 성능을 발휘하고 있으며, 최근의 딥러닝 모델들에서도 적용되고 있습니다.

  1. layer의 일부만 쪼개서 convolution 연산을 진행하기 때문에 계산량을 줄일 수 있으며 정확도 또한 줄어들지 않는다.

  2. 각 layer의 연산량을 균등하게 분배하기 때문에 병목효과를 없애기 때문에 과부화를 줄이고 연산속도를 높일 수 있다.

  3. 백본 모델들의 구조를 변형시키지 않아도 되기 때문에 모든 모델에 적용이 가능하며 성능 향상이 나타난다.

YOLOv4 vs YOLOv5

YOLOv5는 YOLOv4의 개선된 버전으로, 더 높은 정확도와 더 빠른 속도를 제공합니다. YOLOv5는 PaddlePaddle, TensorFlow, PyTorch 등 다양한 프레임워크에서 지원되며, 다양한 모델 사이즈를 제공하므로 다양한 엣지 디바이스에서 사용하기에 적합합니다.

반면 YOLOv4는 YOLOv3보다 더욱 높은 정확도와 빠른 속도를 제공합니다. YOLOv4는 CSPNet, SPP, PAN 등의 기술을 적용하여 성능을 향상시켰습니다. YOLOv4는 또한 대규모 데이터셋에서 훈련되어 더 다양한 객체에 대한 인식 능력을 갖추고 있습니다.

  1. 모델 구조: YOLOv5는 YOLOv4에서 사용되던 CSPNet 구조를 제거하고, 더 간단한 SPP(Spatial Pyramid Pooling) 모듈을 Backbone 구조를 채택하였습니다.

  2. 파라미터 수: YOLOv5는 YOLOv4와 비교했을 때 파라미터 수가 약 50% 감소했으며, YOLOv4보다 더 빠른 추론 속도를 보입니다.

  3. 성능: YOLOv5는 YOLOv4와 비교했을 때 큰 성능 향상을 보이며, mAP 기준으로 약 10% 이상의 성능 향상을 보입니다.

  4. 데이터 증강: YOLOv5는 YOLOv4와 비교했을 때 더 다양한 데이터 증강 기법을 사용하며, 이를 통해 더 다양한 상황에서 좋은 성능을 보입니다.

  5. 속도: YOLOv5는 YOLOv4와 비교했을 때 추론 속도가 약 2배 이상 빠릅니다.

SPP(Spatial Pyramid Pooling; SPP)

Spatial Pyramid Pooling (SPP)는 입력 이미지의 크기가 다를 때, 고정된 크기의 피처 맵을 출력하기 위한 방법 중 하나입니다. 입력 이미지의 크기가 달라지면 일반적으로 피처 맵의 크기도 달라지기 때문에, 이를 보완하기 위한 기술입니다.

SPP는 입력 이미지를 여러 단계로 나누어 피처 맵을 추출합니다. 각각의 단계에서는 서로 다른 크기의 피처 맵을 생성하고, 이를 하나의 고정된 크기의 벡터로 결합합니다. 이렇게 생성된 벡터는 Fully Connected Layer로 전달됩니다. 이를 통해 입력 이미지의 크기와 상관없이 고정된 크기의 피처 맵을 생성할 수 있습니다.

SPP는 객체 검출, 인식 및 분할과 같은 컴퓨터 비전 분야에서 사용됩니다. SPP를 사용하면 입력 이미지의 크기가 다른 다양한 데이터셋에서 더 좋은 일반화 성능을 보일 수 있습니다.

YOLOv4 백본 vs YOLOv5 백본

YOLOv5와 YOLOv4는 모두 EfficientNet을 백본(backbone)으로 사용하고 있습니다. 하지만 YOLOv5에서는 YOLOv4와 달리 CSPNet을 이용하여 EfficientNet을 보완하고 있습니다. 이를 통해 YOLOv5는 YOLOv4보다 더욱 높은 정확도와 빠른 속도를 보여주고 있습니다. 또한 YOLOv5에서는 YOLOv4와는 달리 Swish activation 함수를 사용하고 있으며, 더욱 높은 학습 및 추론 속도를 위해 레이어 정규화(Layer Normalization)와 더 많은 파라미터 축소 기술들이 사용되고 있습니다.

YOLOv5는 CSPNet 백본 구조를 사용합니다. 이 구조는 크게 두 가지 파트로 나눌 수 있습니다.

첫 번째 파트는 backbone CSPNet입니다. CSPNet은 Cross Stage Partial Network의 약자로, 네트워크의 병목을 줄이기 위해 제안된 방법입니다. 이를 위해, 입력 데이터를 두 개로 나눈 뒤, 각각 다른 경로로 전달하여 각각의 경로에서 feature map을 추출하고 이를 연결하는 방식으로 네트워크를 구성합니다. 이를 통해, 정보의 흐름이 다양한 경로로 흐르게 되므로 네트워크의 성능이 향상됩니다.

두 번째 파트는 YOLOv5 헤드입니다. 이 헤드는 각 feature map에서 object detection과 classification을 수행하는 방식으로 구성됩니다. 특히, YOLOv5에서는 더 많은 anchor box와 더 세밀한 조정을 통해 높은 정확도를 달성할 수 있도록 개선되었습니다. 또한, 기존 YOLOv4에 비해 더 경량화되어 있으며, 최신 하드웨어에서도 빠르게 실행될 수 있도록 최적화되어 있습니다.

Swish activation

ReLU를 대체하기 위해 구글이 고안한 함수입니다. 시그모이드 함수에 x를 곱한 아주 간단한 형태를 보입니다. 깊은 레이어를 학습시킬 때 ReLU보다 더 뛰어난 성능을 보여준다고 합니다.Swish activation은 ReLU와 비교하여 부드러운 곡선을 가지고 있어, 일부 데이터셋에서 더 높은 정확도를 보이는 것으로 알려져 있습니다. 또한, Swish는 계산이 비교적 간단하고 빠르게 처리될 수 있어, 딥러닝 모델의 학습 속도를 높일 수 있는 장점이 있습니다.

레이어 정규화(Layer Normalization)

Layer Normalization(층 정규화)은 딥 러닝에서 사용되는 정규화 방법 중 하나입니다. Batch Normalization과 비슷한 개념이지만, 각 샘플 별로 정규화하는 것이 아니라 레이어 별로 정규화합니다.

레이어 정규화는 배치 정규화와 달리 배치 크기에 따라 영향을 받지 않습니다. 또한, 배치 정규화와 달리 학습과정에서 배치 단위의 평균, 분산을 이용하지 않기 때문에 배치 크기의 제약이 없습니다.

레이어 정규화는 다양한 딥 러닝 모델에 적용될 수 있으며, 다양한 활성화 함수와 함께 사용될 수 있습니다. 또한, 적절한 하이퍼파라미터를 설정하면 모델의 성능을 향상시킬 수 있습니다.

EfficientNet

EfficientNet은 Google Brain 팀이 개발한 CNN 기반 딥러닝 모델입니다. EfficientNet은 기존 모델들의 문제점을 해결하고자 하여, 네트워크 규모를 조정하면서 최적화된 네트워크 구조를 찾아내는 방식으로 설계되었습니다.

EfficientNet은 네트워크의 깊이, 폭, 해상도를 조절하여 여러 크기의 모델을 만들 수 있습니다. 이를 위해 네트워크 규모를 조정하는 계수인 compound scaling을 도입했습니다. 또한 EfficientNet은 기존 모델들에서 사용되던 연산을 최적화하여 높은 정확도와 작은 모델 사이즈를 동시에 달성합니다. 이를 위해 Swish activation function, MobileNetV2의 Inverted Residual Block, Squeeze-and-Excitation(SE) block 등의 기술을 활용합니다.

EfficientNet은 다양한 이미지 분류, 검출, 세그멘테이션 문제에서 SOTA(state-of-the-art) 성능을 보이며, 작은 모델부터 대형 모델까지 다양한 크기의 모델을 제공하여 다양한 플랫폼에서 적용이 가능합니다.

0개의 댓글