1. YOLO v4
1.1 Overview
Background
• Object Detection에서 사용하는 최신 방법들을 소개 및 실험
• Object Detection model을 디자인하거나 향상 할 수 있는 아이디어 다양
• 최신 Detection에서 정확도는 크게 향상시켰지만, 많은 양의 GPU를 필요
• 실시간 요구하는 task에 부적합
• Ex) 자율주행
• 다른 detector들 보다 빠르면서 정확도가 높음
=> 빠르면서 정확도가 높은 detector가 요구되고있음
Contribution
• 하나의 GPU에서 훈련할 수 있는 빠르고 정확한 Object detector
• BOF, BOS 방법들을 실험을 통해서 증명하고 조합을 찾음
• BOF (Bag of Freebies) : inference 비용을 늘리지 않고 정확도 향상시키는 방법, Training에서 비용이 조금 더 들어간다
• BOS (Bag of Specials) : inference 비용을 조금 높이지만 정확도가 크게 향상하는 방법
• GPU 학습에 더 효율적이고 적합하도록 방법들을 변형
1.2 Related work
Object Detection Model
- Backbone
▪ GPU platform : VGG, ResNet, ResNext, DenseNet, …
▪ CPU platform : SqueezeNet, MobileNet, ShuffleNet, …
- Neck
▪ Additional blocks: SPP, ASPP, …
▪ Path-aggregation blocks: FPN, PAN, NAS-FPN, BiFPN …
- Head
▪ Dense Prediction(one-stage) : RPN, YOLO, SSD, RetinaNet, CornerNet, FCOS, …
▪ Sparse Prediction(two-stage) : Faster-RCNN, R-FCN, Mask R-CNN, …
Bag of Freebies
Inference cost를 늘리지않는다 -> real time을 보장
세가지 카테고리로 나눌 수 있다
1) Data Augmentation
- 입력 이미지의 변화시켜 과적합(overfitting)을 막고, 다양한 환경에서도 강력해지는 방법
ex) cutmix
- 여러 이미지를 함께 사용하여 data augmentation 수행
- 학습 이미지의 패치영역만큼 잘라내서 다른 학습 이미지에 붙여 넣고
ground truth 라벨도 패치 영역만큼 비율로 섞는 방법
2) Semantic Distribution Bias
- 데이터셋에 특정 라벨(배경)이 많은 경우 불균형을 해결하기 위한 방법
ex) focal loss
- Label smoothing
• 라벨에 0 또는 1로 설정하는 것이 아니라 smooth하게 부여
• Ex) 원래 0이었던 라벨을 0.1로 부여, 1이었던 라벨을 0.9로 부여
• 모델의 overfitting 막아주고 regularization의 효과
3) Bounding Box Regression
- Bounding box 좌표값들을 예측하는 방법(MSE)은 거리가 일정하더라도 IoU가 다를 수 있음
- IoU 기반 loss 제안 (IoU는 1에 가까울수록 잘 예측한 것이므로 loss처럼 사용 가능)
• GIoU
• IoU 기반 loss
• IoU가 0인 경우에 대해서 차별화하여 loss 부여
• IoU의 거리를 고려
Bag of Specials
1) Enhance receptive field
- Feature map의 receptive field를 키워서 검출 성능을 높이는 방법
- SPP (Spatial Pyramid Pooling)
- conv layer의 마지막 feature map을 고정된 크기의 grid로 분할해 pooling하여 고정된 크기의 벡터 출력
2) Attention Module
둘다 Featuremap에 Attention정보가 추가됨 -> context관점에서 중요한 featuremap에 집중할 수 있게한다
3) Feature Integration
- Feature map 통합하기 위한 방법으로 Neck과 동일
4) Activation Function
5) Post-processing Method
- 불필요한 Bbox 제거하는 방법
최종결론
BoF and BoS for YOLOv4 backbone
- Activations : ReLU, leaky-ReLU, parametric-ReLU, ReLU6, SELU, Swish, or Mish
- Bounding box regression loss : MSE, IoU, GIoU, CIoU, DIoU
- Data augmentation : CutOut, MixUp, CutMix
- Regularization method : DropOut, DropPath, Spatial DropOut, DropBlock
- Normalization : Batch Normalization (BN), Cross-GPU Batch Normalization (CGBN or SyncBN), Filter Response Normalization (FRN), Cross-Iteration Batch Normalization (CBN)
- Skip-connections : Residual connections, Weighted residual connections, Multi-input weighted residual connections, Cross stage partial connections (CSP)
- Others : label smoothing
1.3 Selection of Architecture
Detector의 디자인 고려사항
• 작은 물체 검출하기 위해서 큰 네트워크 입력 사이즈 필요
• 네트워크 입력 사이즈가 증가함으로써 큰 receptive field 필요 → 많은 layer를 필요
• 하나의 이미지로 다양한 사이즈의 물체 검출하기 위해 모델의 용량이 더 커야 함
→ 많은 파라미터 필요
Cross Stage Partial Network (CSPNet)
• 정확도 유지하면서 경량화
• 메모리 cost 감소
• 다양한 backbone에서 사용가능
• 연산 bottleneck 제거
기존 Densenet에서의 CSPNET
YOLOv4의 CSPDenseNet
input channel을 전부 사용하지않고 절반을 사용
gradient information 많아지는것을 방지
Additional Improvements
새로운 data augmentation 방법
• Mosaic
• Self-Adversarial Training (SAT)
기존 방법 변형
• modified SAM
• modified PAN
• Cross mini-Batch Normalization (CmBN)
2. M2Det
2.1 Overview
Feature pyramid 한계점
• Backbone으로부터 feature pyramid 구성
▪ Classification task를 위해 설계된 backbone은 object detection task를 수행하기에 충분하지 않음
▪ Backbone network는 single-level layer로, single-level 정보만 나타냄
▪ 일반적으로, low-level feature는 간단한 외형을, high-level feature는 복잡한 외형을 나타내는데 적합합니다.
FPN은 multi scale이지만 멀리있는 신호등과 멀리있는 사람을 구분하기는 힘들다
사람이 더 복잡한 외형을 지니고 있기때문에 high level feature가 필요됨
level이 높아질수록 복잡한 외형을 갖는 객체를 더 잘 포착한다
그렇기때문에 M2Det에서는
- Multi-level, multi-scale feature pyramid 제안 (MLFPN)
- SSD에 합쳐서 M2Det이라는 one stage detector 제안
2.2 Architecture
FFM : Feature Fusion Module
- FFMv1 : base feature 생성
- Base feature : 서로 다른 scale의 2 feature map을 합쳐 semantic 정보가 풍부함
TUM : Thinned U-shape Module
• Encode-decoder 구조
• Decoder의 출력 : 현재 level에서의 multi-scale features
FFM : Feature Fusion Module
- FFMv2 : base feature와 이전 TUM 출력 중에서 가장 큰 feature concat
- 합쳐준 feature는 다음 TUM의 입력으로 들어감
SFAM : Scale-wise Feature Aggregation Module
- TUMs에서 생성된 multi-level multi-scale을 합치는 과정
- 동일한 크기를 가진 feature들끼리 연결 (scale-wise concatenation)
- 각각의 scale의 feature들은 multi-level 정보를 포함
- Channel-wise attention 도입 (SE block)
- 채널별 가중치를 계산하여 각각의 feature를 강화시키거나 약화시킴
8개의 TUM 사용
▪ 출력 : 6개의 scale features
Detection Stage
▪ 6개의 feature마다 2개의 convolution layer 추가해서 regression, classification 수행
▪ 6개의 anchor box 사용
▪ Soft-NMS사용
3. CornerNet
Anchor Box의 단점
• Anchor Box의 수가 엄청나게 많음
• Positive sample(객체)가 적고, 대부분이 negative sample(배경) → class imbalance
• Anchor Box 사용할 때 하이퍼파라미터를 고려해야함
• Anchor box 개수, 사이즈, 비율
3.1 Overview
CornerNet
- Anchor Box가 없는 1 stage detector
• 좌측 상단(top-left), 우측 하단(bottom-right)점을 이용하여 객체 검출
- Center(중심점)이 아니라 Corner(모서리) 사용하는 이유
• 중심점을 잡게 되면 4개의 면을 모두 고려해야하는 반면, corner을 사용하면 2개만 고려
3.2 Architecture
Heatmaps
- H,W,C의 featuremap
- c는 category의 개수
Embeddings
- top left와 bottom right를 mapping하기 위해 사용
- Embedding vector거리가 가까우면 같은 객체를 담당
Offsets
- 이미지가 conv연산할때 downsampling upsampling등으로 소수점 상실이 발생한다
- 작은값의 상실은 작은 boundingbox에는 큰 영향을 끼치는데 이를 조정하기위해 사용
Hourglass Network
- Human pose estimation task에서 사용하는 모델
- Global, local 정보 모두 추출 가능
- Encoder-Decoder 구조
- Encoder : 입력으로부터 특징 추출
- Decoder : Reconstruct
1) Encoding Part
• Feature 추출 : convolution layer + maxpooling layer
• 별도의 branch로 convolution 진행해서 스케일마다 feature 추출 (upsampling 과정에서 조합)
CornerNet에서는 maxpooling 대신 stride 2 사용, 스케일 5번 감소
2) Decoding Part
• Encoder 과정에서 스케일별로 추출한 feature 조합
• Upsampling 과정에서는 Nearest Neighborhood Sampling, feature조합에서는 element-wise addition 사용
Prediction module
▪ 2개의 heatmap을 통해서 예측 (top-left, bottom-right)
▪ H x W x C로 구성 (C = #of category)
▪ 각 채널은 클래스에 해당하는 corner의 위치를 나타내는 binary mask
Detecting Corner
- 2개의 heatmap을 통해서 예측 (top-left, bottom-right)
▪ H x W x C로 구성 (C = #of category)
▪ 각 채널은 클래스에 해당하는 corner의 위치를 나타내는 binary mask
- 모든 negative 위치(location)를 동일하게 패널티 주는 것 x
- Positive location 반지름 안에 들어오는 negative location들은 패널티를 감소시킴
• 반지름은 물체의 크기에 따라 결정
• 거리에 따라 패널티 감소
ex_ top_left를 구할 때 해당px만 1을 주고 나머지는 0으로 표기한다 이렇게되면 0에대해서는 전부 같은 loss를 주게되는데 이렇게 하지않고 focal loss를 변형하여 사용한다
Focal loss 변형
▪ 정답에 근접한 예측값은 낮은 loss부여
- Convolution를 통과하면서 heatmap에 floating point loss 발생
- Heatmap에서 이미지로 위치를 다시 mapping 시킬 때 차이 발생
- Offset을 사용하여 예측한 위치를 약간 조정
- Smooth L1 loss 사용
Grouping corner
- 코너에는 특징적인 부분이 없음
- 코너를 결정하기 위해서 corner pooling 과정 필요
- topleft코너에 어떤 특징점이없고 그냥 배경위에 점을 찍었다
- 코너에 객체에대한 정보를 집약시켜줘야하는데 이 방법을 coner pooling이라함
각 객체를 담고있는 featuremap의 max값이 코너값이된다
3.3 Follow-up
CenterNet
- Keypoint heatmap을 통해 중심점(center)예측
- Center사용하여 단 하나의 anchor box생성
- Keypoints grouping 과정이 필요 없어 시간 단축
- NMS 과정 x
FCOS
- 중심점으로부터 바운딩 박스의 경계까지의 거리 예측
- FPN을 통해 multi-level 예측
'부스트캠프 AI Tech 2기 > 2기 CV P-Stage-Objectdetection' 카테고리의 다른 글
Object Detection trash recycle 후기 (0) | 2021.10.17 |
---|---|
Ready for Competition (0) | 2021.10.08 |
Advanced Object Detection 1 (0) | 2021.10.05 |
EfficientDet (0) | 2021.10.02 |
1 stage Detectors (0) | 2021.10.01 |