반응형
YOLO v1(2016.05)
- Anchor Box를 사용하지 않음
- Anchor Box - object detecion 을 위해 크기, 비율 미리 정해놓은 Bbox
- Cell 단위로 Bounding Box Regressor 과정을 통해 Box를 찾음
- Localization Error로 인해 성능이 낮다
- 각 Grid Cell에 대해 2개의 Bounding Box를 찾음
- Classification은 한 개에 대해서만 수행
- 따라서 겹치는 Object는 Detection하기 어려움
- 작은 물체에 대해서는 성능이 나쁨
YOLO v2(2017.12)
- YOLO v2는 Classification 문제에 비해 Object Detection 문제는 예측 가능한 Class의 개수가 매우 적음을 지적
- 이를 해결하기 위한 방법을 제시한다.
- 1. 속도 성능 향상
- BackBone으로 Darknet19 사용
- 2. 성능 개선
2-1. Batch Normalization
- Vanishing Gradient 문제 해결
- 모든 Conv Layer 뒤 Batch Normalization 적용
2-2. High Resolution Classifer
- 기존 v1 (224x224) pre-train / 실제 입력 (448x448)
- v2는 (224x224) pre-train 중 마지막 10epoch 에서 (448x448)의 이미지로 fine tuning, 최종 입력 사이즈 416x416
2-3. Convolutional with Anchor Boxes
- 각 grid cell에 대해 5개의 anchor box 예측
- 기존(box는 2개, 분류는 한번)
- v2(모든 anchor box)에 대해 분류
2-4. Dimension Cluster
- optimal anchor box 탐색 - K-means Clustering활용
- GT들의 width, height로 K-means Clustering 수행, K개의 Anchor box 찾음
- YOLO v2에서는 K를 5개로 진행(Anchor Box 5개)
2-5. Direct Location Prediction
- Box에 Sigmoid 함수 적용
- Box의 중심점을 Cell내 존재하도록 → 학습 초기 iteration으로 모델 불안정 해결
- 2-6. Fine-Grained Features
- YOLO v1 : input image(416x416) → output feature map(7x7)
- YOLO v2 : input image(416x416) → output feature map(13x13)
- 작은 물체 검출이 잘 안되는 문제 해결을 위해 Passthrogh layer 추가
- Multi-Scale Training
- YOLO v1 : 마지막 layer(Fully Connected Layer)적용
- YOLO v2 : 마지막 layer(CNN Layer)적용
YOLO v3(2018.04)
- Multilabel Classification
- 실제 어떤 물체가 사람이면서 동시에 여성일수도 있음.(즉, 한 물체에 대해 multi classlabel을 가질 수 있음)
- v2 : 마지막에 softmax
- v3 : 모든 class에 대해 sigmoid를 취함( 각 class별 binary classification 가능하도록)
- Backbone
- v2 : Darknet-19
- v3 : Darknet-53
- Prediction Across Scales
- v1부터 small object detecion이 어려움
- -> prediction feature map으로 3개의 scale 사용
- 13by13 size의 feature map에서 큰 이물을 Detection
- 26by26 size의 feature map에서 중간 크기의 이물을 Detection
- 52by52 size의 feature map에서 작은 이물을 Detection
- -> prediction feature map으로 3개의 scale 사용
- v1부터 small object detecion이 어려움
YOLO v4(2020.04)
- 기존 YOLO단독으로 쓰이는게 정확도의 문제라고 지적
- → YOLO v4 = YOLO v3 + CSPDarknet53(backbone) + SPP + PAN + BoF + BoS
- SPP(Spatial Pyramid Pooling)
- Receptive field를 늘리는 방법 중 하나
- feature map을 정해준 grid에 맞추어 max pooling진행
- 가장 왼쪽 pooling layer는 feature map을 4x4로 나눔
- 각 grid cell별 max pooling하여 한 줄로 flat, 마지막 layer는 전체를 한 값으로 pooling
- PAN(Path Augmented Network)
- YOLO v3(FPN) → YOLO v4 (PAN)
- FPN - 최하단 Layer가 최상단 도달까지 100Layer 이상을 거쳐야 함
- PAN - FPN이 생성한 {P2, P3, P4, P5}를 활용 → {N2, N3, N4, N5} 생성
- → 최하단 Layer가 최상단 도달까지 몇 개의 Layer만 거치면 됨
- → low-level정보가 high-level에 온전히 전달 가능
- → Bottom-up Path Augmentation을 통해 Low-level feature정보를 High-level feature에 효과적 전달(object detection시 localization 성능 향상)
- Low-level feature의 특성
- small object 검출에 유용
- 물체의 경계 추출하는 역할
- High-level feature의 특성
- large object 검출에 유용
- 학습과정 중 표현력이 커지며 이미지의 context 포착하는 역할
- BOF(Bag of Freebies)
- inference 시간은 늘리지 않으면서 높은 정확도를 위해 학습시키는 방법
- ex) Data Augmentation, Regulaization, Loss Function 등을 통한 실험 진행
- 1-1. Data Augmentation
- 입력 이미지에 변동성↑
- 설계된 모델이 다른 환경에서 얻은 이미지에 보다 강건해지도록
- 1-2. Sementic Distribution Bias
- Class Imbalance 문제 해결을 위해 Focal Loss적용
- Class : 물체/배경 - 대부분의 이미지에서 물체보다 배경 영역이 더 큼
- Label refinement network, Label smoothing 방법 사용
- 서로 다른 category 간 연관성 표현을 위해
- ex) [고양이 : 0.9, 강아지 : 0.1, 사람 : 0]
- 모델을 보다 robust하게 함
- 분류 문제에서 효과 좋음 / 탐지 문제에서 성능 하락
- Class Imbalance 문제 해결을 위해 Focal Loss적용
- 1-3. BBox Loss Function
- 기존 MSE외 IoU기반 Loss function(GIoU, CIoU, DIoU) 실험
- MSE보다 IoU기반 Loss들이 성능이 좋음
- 최종 CIoU 사용
- 기존 MSE외 IoU기반 Loss function(GIoU, CIoU, DIoU) 실험
- 1-4. Regularization method
- DropOut, DropPath, Spatial DropOut, DropBlock 실험
- overfitting 막기 위해
- DropBlock 적용 시 성능 제일 좋음
- DropOut, DropPath, Spatial DropOut, DropBlock 실험
- 2. BoS(Bag of Specials)
- inference시간 조금 증가, 정확도 향상시키는 방법
- 모델 및 후처리에 적용하는 기술들
- 2-1. Enhance receptive field
- backbone에서 얻은 feature map에 대한 receptive field 키우는 방법
- SPP, ASPP, RFB 등의 방법 사용
- v4는 SPP사용
- 2-2. Attention module
- SE(Squeeze-and-Excitation) / SAM(Spatial Atention Module) 사용
- SE - 2% 연산량 증가, GPU 10% 연산량 증가1% 정확도 향상
- SAM - GPU inference 속도 영향x, 정확도 향상
- 2-3. Feature Integration
- feature map 통합을 위해 SFAM/ASFF/BiFPN 실험
- 2-4. Activation Function
- Leakly ReLU / Parametric ReLU / ReLu6 / SELU / Swish / Hard-Swish / Msih 실험
- Mish가 효과 좋음
- 2-5. Post-Processing Method
- NMS(같은 객체 예측 Bbox 제거) - Greedy NMS / Soft NMS / DIoU NMS 실험
- DIoU NMS 사용
- 2-6. Normalization of the network activations by their mean and variance
- BN(Batch Normalization) / CCBN or SyncBN / FRN / CBN 실험
- CBN이 좋음
- 2-7. Skip-connections
- Residual connections / Weighted residual connections / Mini-input weighted residual connections / CSP
- CSP가 포함된 CSPDarknet-53 backbone으로 사용
- 3. Backbone
- 3-1. CSPDarknet-53 사용 이유
- small object 예측을 위해 input Resolution을 크게 사용 가능(512x512)
- Receptive Field를 키워주기 위해 깊은 Layer 쌓음
- 모델 성능을 위한 파라미터 수↑
- inference속도 빠름
- 3-2. Neck
- Additional Block으로 SPP, SAM사용
- 3-3. Head
- YOLO v3과 같은 3 scale 사용
- 3-1. CSPDarknet-53 사용 이유
- 1-1. Data Augmentation
- → 최하단 Layer가 최상단 도달까지 몇 개의 Layer만 거치면 됨
- YOLO v3(FPN) → YOLO v4 (PAN)
YOLOX
- 기존의 YOLO Detector에 Anchor-free 방식 적용
- Decoupled Head, SimOTA와 같은 다양한 탐지 테크닉 적용
YOLO v5(2020.06)
- 논문x, 코드만 공개
- 블로그에서 설명(성능 외 다른 부분에 대한 설명 없음)
- Backbone
- YOLO v4 - Darknet(C로 구현)
- YOLO v5 - pytorch로 구현
- Focus() → Conv Layer
- SPP() → SPPF()
- BottleNeckCSP() → C3()
- Mosaic
- Image Augmentation 기법 중 하나
- 4장의 이미지를 한 장으로 만드는 기법
- 각 이미지의 사이즈는 random하게 하여 자유도 부여
- → 이미지 사이즈가 작아져, 작은 물체가 많아짐
- → 기존 YOLO의 small object detect의 단점 극복 하도록 함
- → 4장이 1장으로 되니 적은 이미지 학습으로 적은 batch size로 학습 가능하도록 함
YOLO v6(2021.10)
- 논문x, 코드만 공개
- 블로그에서 설명(성능 외 다른 부분에 대한 설명 없음)
- 기존 3개 scale → 4개 scale
참고자료
# https://leedakyeong.tistory.com/entry/Object-Detection-YOLO-v1v6-%EB%B9%84%EA%B5%90
반응형
댓글