코딩하는 해맑은 거북이
[컴퓨터비전] Advanced Object Detection 본문
본 게시물의 내용은 '부스트캠프 AI Tech - Object Det(송원호)' 강의를 듣고 작성하였다.
해당 글은 아래의 8가지를 다룬다.
📌 Cascade RCNN
📌 Deformable Convolutional Networks (DCN)
📌 Transformer
📌 YOLO v4
📌 M2Det
📌 CornerNet
📌 CenterNet
📌 FCOS
📌 Cascade RCNN
🔷 Motivation
1) Input IoU가 높을수록 높은 IoU threshold 에서 학습된 model이 더 좋은 결과를 낸다.
2) 전반적인 AP의 경우 IoU threshold 0.5로 학습된 model이 성능이 가장 좋다. 그러나 AP의 IoU threshold가 높아질수록
(ex. AP70, AP90) IoU threshold가 0.6, 0.7로 학습된 model의 성능이 좋다.
그래프와 같이 high quality detection을 수행하기 위해선 IoU threshold를 높여 학습할 필요가 있다.
하지만, IoU threshold를 무작정 높이게 되면 성능이 하락하는 문제가 존재한다.
따라서 Cascade RCNN은 이를 해결하려고 하였다.
🔷 Method
- 여러 개의 RoI head (H1, H2, h3)를 학습
- 이 때 Head 별로 IOU threshold를 다르게 설정 (뒤로 갈수록 높은 IoU threshold를 가진다)
- C3, B3가 최종 결과
→ 이렇게 함으로써 더 높은 AP IoU threshold에서 훨씬 향상된 성능을 얻을 수 있다.
Cascade R-CNN은 (b) Iterative BBox at inference + (c) Intergral Loss를 활용한 구조이다.
- Bbox pooling을 반복 수행할 시 성능 향상되는 것을 증명 (Iterative)
- IOU threshold가 다른 Classifier가 반복될 때 성능 향상 증명 (Integral)
- IOU threshold가 다른 RoI head를 cascade로 쌓을 시 성능 향상 증명 (Cascade)
📌 Deformable Convolutional Networks (DCN)
🔷 Motivation
CNN은 커널의 모양이 직사각형이기에 일정한 패턴을 지닌 convolution neural networks는 geometric transformations에 한계를 지닌다는 문제점이 있다.
이를 해결하기 위한 기존 해결 방법은 2가지가 있다.
1) Geometric augmentation
: Rotate, Shift 등의 Augmentation을 적용한다
2) Geometric invariant feature engineering
: geometric invariant한 feature(gradients)들을 뽑아서 모델에 전달한다
→ 이 두가지 방법은 사람이 해야한다는 단점이 있다.
🔷 Method
Deformable Convolution은 가중치(Weight)와 offset에 해당하는 R이 있다.
Output feature map의 값은 y(p) 공식으로 구한다.
R 값은 learnable parameter로 두어 geometric feature를 학습 가능하게 한다.
즉, CNN과 달리 일정한 패턴이 아니라 offset을 학습시켜 위치를 유동적으로 변화시킨다.
주로 object detection, segmentation에서 좋은 효과를 보인다.
📌 Transformer
NLP에서 long range dependency를 해결하였고, 이를 CV 분야에도 적용하는 시도가 이어지고 있다.
🔷 Vision Transformer (ViT)
🔹학습과정
1. Flatten 3D to 2D (Patch 단위로 나누기)
2. Learnable한 embedding 처리
E라는 matrix를 이용해서 학습을 가능하게 만들어준다.
3. Add class embedding, position embedding
앞서 만들어진 embedding 값에 class embedding 추가 ([CLS]Token)
이미지의 위치 따라 학습하기 위해 position embedding 추가
4. Transformer
Embedding: Transformer 입력값
5. Predict
Class embedding vector 값을 MLP head에 입력시켜 최종 결과를 추출
🔹ViT의 문제점
- ViT의 실험부분을 보면 굉장히 많은양의 Data를 학습하여야 성능이 나옴
- Transformer 특성상 computational cost 큼
- 일반적인 backbone으로 사용하기 어려움
🔷 End-to-End Object Detection with Transformer
Transformer를 처음으로 Object Detection에 적용하였고,
기존의 Object Detection의 hand-crafted post process 단계를 transformer를 이용해 없앴다.
🔹Prediction Head
🔹Arichitecture
- CNN backbone
- Transformer (Encoder-Decoder)
- Prediction Heads
- Highest level feature map
- Transformer 특성상 많은 연산량이 필요하여 highest level feature map만 사용
- Flatten 2D
- Positional embedding
- Encoder
- 224 x 224 input image
- 7 x 7 feature map size
- 49 개 의 feature vector 를 encoder 입력값으로 사용
- Decoder
- Feed Forward Network (FFN)
- N개의 output
- 이 때 N은 한 이미지에 존재하는 object 개수 보다 높게 설정
🔹Train
- 이 때 groundtruth에서 부족한 object 개수만큼 no object로 padding 처리
- 따라서 groundtruth와 prediction이 N:N 매핑
- 각 예측 값이 N개 unique하게 나타나 post-process 과정이 필요 없음
→ 전체적인 AP는 상승하였으나, highest level feature만 사용하여 APs 하락하였다.
🔷 Swin Transformer
앞서 ViT의 문제점이 3가지가 있었는데, 이를 해결한 방법이 Swin Transformer이다.
🔹해결법
- CNN과 유사한 구조로 설계
- Window라는 개념을 활용하여 cost를 줄임
🔹Arichitecture
- Patch Partitioning
- 전체 이미지를 patch 단위로 나누고 채널방향으로 concat 하는 것을 의미한다.
- Linear Embedding
- ViT와 embedding 방식은 동일하나 class embedding을 제거한다.
- Swin Transformer Block
- W-MSA(Window Multihead Self Attention)과 SW-MSA(Shifted Window Multihead Self Attention)을 사용
- Window Multi-head Attention
- Window 단위로 embedding을 나눔.
- 기존 ViT같은 경우 모든 embedding을 Transformer에 입력
- Swin-Transformer는 Window 안에서만 Transformer 연산 수행
- 따라서 이미지 크기에 따라 증가되던 computational cost가 Window 크기에 따라 조절 가능
- Window 안에서만 수행하여 receptive field를 제한하는 단점 존재
- Shifted Window Multi-Head Attention
- W-MSA의 경우 Window 안에서만 수행하여 receptive field를 제한하는 단점 존재
- 이를 해결하기 위해 Shifted Window Multi-Head Attention을 Transformer Block 2번째 layer에서 수행
- Window size와 다르게 나뉜 부분들 해결 필요
- (오른쪽 그림) 남는 부분들 (A, B, C)를 그림과 같이 옮겨줌
- 이 때 남는 부분들을 masking 처리하여 self-attention 연산이 되지 않도록 함
- Patch Merging
- input feature map의 H, W의 크기는 절반으로 줄이고, 채널방향으로 concat 한다.
- 이를 다시 linear layer에 통과시켜 채널 차원을 맞춰주어 다음 stage의 input으로 사용한다.
🔹정리
- 적은 Data에도 학습이 잘 이루어짐
- Window 단위를 이용하여 computation cost를 대폭 줄임
- CNN과 비슷한 구조로 Object Detection, Segmentation 등의 backbone으로 general하게 활용
📌 YOLO v4
🔷 등장배경
Object Detection에서 사용하는 최신 방법들을 소개 및 실험이 이루어지고 있고, 최신 Detection에서 정확도는 크게 향상시켰지만, 많은 양의 GPU가 필요하다. 즉, 실시간 요구하는 task에는 부적합하다.
이를 위해 하나의 GPU에서 훈련할 수 있는 빠르고 정확한 Object detector인 YOLO v4가 등장하였다.
YOLO v4는 BOF, BOS 방법들을 실험을 통해서 증명하고 조합을 찾았으며, GPU 학습에 더 효율적이고 적합하도록 방법들을 변형시켰다.
- BOF (Bag of Freebies) : inference 비용을 늘리지 않고 정확도 향상시키는 방법
- BOS (Bag of Specials) : inference 비용을 조금 높이지만 정확도가 크게 향상하는 방법
🔷 Object Detection Model
- Input
- Image, Patches, Image Pyramid, …
- 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
- Data Augmentation
- 입력 이미지의 변화시켜 과적합(overfitting)을 막고, 다양한 환경에서도 강력해지는 방법
- CutMix
- 여러 이미지를 함께 사용하여 data augmentation 수행
- 학습 이미지의 패치영역만큼 잘라내서 다른 학습 이미지에 붙여넣고 ground truth 라벨도 패치 영역만큼 비율로 섞는 방법
- Semantic Distribution Bias
- 데이터셋에 특정 라벨(배경)이 많은 경우 불균형을 해결하기 위한 방법
- Label smoothing
- 라벨에 0 또는 1로 설정하는 것이 아니라 smooth하게 부여
- Ex) 원래 0이었던 라벨을 0.1로 부여, 1이었던 라벨을 0.9로 부여
- 모델의 overfitting 막아주고 regularization의 효과
- 라벨에 0 또는 1로 설정하는 것이 아니라 smooth하게 부여
- Bounding Box Regression
- Bounding box 좌표값들을 예측하는 방법(MSE)은 거리가 일정하더라도 IoU가 다를 수 있음
- IoU 기반 loss 제안 (IoU는 1에 가까울수록 잘 예측한 것이므로 loss처럼 사용 가능)
- GIoU
- IoU 기반 loss
- IoU가 0인 경우에 대해서 차별화하여 loss 부여
🔷 Bag of Specials
- Enhance receptive field
- Feature map의 receptive field를 키워서 검출 성능을 높이는 방법
- SPP (Spatial Pyramid Pooling)
- conv layer의 마지막 feature map을 고정된 크기의 grid로 분할해 pooling하여 고정된 크기의 벡터 출력
- Attention Module
- Feature Integration
- Feature map 통합하기 위한 방법
- Activation Function
- 좋은 activation 함수는 gradient가 더 효율적으로 전파
- ReLU
- Gradient vanishing 문제 해결하기 위한 활성 함수로 등장
- 음수 값이 나오면 훈련이 되지 않는 현상 발생
- Swish / Mish
- 약간의 음수 허용하기 때문에 ReLU의 zero bound보다 gradient 흐름에 좋은 영향
- 모든 구간에서 미분 가능
- 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
🔷 Architecture
🔹 디자인 고려사항
- 작은 물체 검출하기 위해서 큰 네트워크 입력 사이즈 필요
- 네트워크 입력 사이즈가 증가함으로써 큰 receptive field 필요
→ 많은 layer를 필요 - 하나의 이미지로 다양한 사이즈의 물체 검출하기 위해 모델의 용량이 더 커야 함
→ 많은 파라미터 필요
🔹 Cross Stage Partial Network (CSPNet)
기존에 Backbone으로 사용하던 DenseNet는 가중치 업데이트할 때 gradient 정보가 재사용되었다. 그래서 CSP 알고리즘을 적용시켜 CSPNet 구조로 변형하여 gradient information가 많아지는 것을 방지하였다.
이는 정확도를 유지하면서 경량화에 도움을 주었고, 메모리 cost도 감소하였다.
또한, 다양한 backbone에서 사용가능하고, 연산 bottleneck을 제거한다.
🔹 Additional Improvements
- 새로운 data augmentation 방법
- Mosaic
- Self-Adversarial Training (SAT)
- 기존 방법 변형
- modified SAM
- modified PAN
- Cross mini-Batch Normalization (CmBN)
📌 M2Det
🔷 등장배경
Object Detection에서 물체에 대한 스케일 변화는 중요한 과제이다.
일반적으로 low-level feature는 간단한 외형을, high-level feature는 복잡한 외형을 나타내는데 적합하다.
이러한 정보를 사용하기 위해 Backbone으로 Feature pyramid 구조를 사용한다. 하지만, 이는 Classification task를 위해 설계된 backbone은 object detection task를 수행하기에 충분하지 않고, Backbone network는 single-level layer로 single-level 정보만을 나타낸다는 단점이 있다.
따라서 M2Det은 Multi-level과 Multi-Scale Feature Pyramid를 모두 사용하는 새로운 FPN인 MLFPN을 제안하였고, SSD에 합쳐서 1 Stage detector 를 제안하였다.
🔷 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
- 다음 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를 강화시키거나 약화시킴
- Channel-wise attention 도입 (SE block)
- 8개의 TUM 사용
- 출력 : 6개의 scale features
- Detection Stage
- 6개의 feature마다 2개의 convolution layer 추가해서 regression, classification 수행
- 6개의 anchor box 사용
- Soft-NMS사용
📌 CornerNet
🔷 등장배경
🔹Anchor Box의 단점
- Anchor Box의 수가 엄청나게 많다
- Positive sample(객체)가 적고, 대부분이 negative sample(배경) → class imbalance
- Anchor Box 사용할 때 하이퍼파라미터를 고려해야한다
- Anchor box 개수, 사이즈, 비율
→ 해당 단점들을 해결하려는 시도에서 CornerNet이 등장하였다.
🔹CornerNet
- Anchor Box가 없는 1 stage detector
- 좌측 상단(top-left), 우측 하단(bottom-right)점을 이용하여 객체 검출
- Center(중심점)이 아니라 Corner(모서리) 사용하는 이유
- 중심점을 잡게 되면 4개의 면을 모두 고려해야하는 반면, corner을 사용하면 2개만 고려
🔷 Architecture
🔹Hourglass
- Human pose estimation task에서 사용하는 모델
- Global, local 정보 모두 추출 가능
- Encoder-Decoder 구조
- Encoder : 입력으로부터 특징 추출
- Feature 추출 : convolution layer + maxpooling layer
- 별도의 branch로 convolution 진행해서 스케일마다 feature 추출 (upsampling 과정에서 조합)
- CornerNet에서는 maxpooling 대신 stride 2 사용, 스케일 5번 감소
- Decoder : Reconstruct
- Encoder 과정에서 스케일별로 추출한 feature 조합
- Upsampling 과정에서는 Nearest Neighborhood Sampling, feature 조합에서는 element-wise addition
사용
🔹Prediction module
Hourglass를 거쳐 추출된 feature map은 prediction module에 전달된다.
prediction module은 detecting corner, grouping corner, corner pooling 과정으로 구성된다.
- 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들은 패널티를 감소시킴
- 반지름은 물체의 크기에 따라 결정
- 거리에 따라 패널티 감소
- Focal loss 변형
- 정답에 근접한 예측값은 낮은 loss부여
- Convolution를 통과하면서 heatmap에 floating point loss 발생
- Heatmap에서 이미지로 위치를 다시 mapping 시킬 때 차이 발생
- Offset을 사용하여 예측한 위치를 약간 조정
- Smooth L1 loss 사용
- 2개의 heatmap을 통해서 예측 (top-left, bottom-right)
- Grouping corner
- Top-left코너와 bottom-right코너의 짝을 맞춰주는 과정
- Top-left코너와 bottom-right코너의 임베딩값의 차이에 따라서 그룹지어줌
- embedding값 사이의 거리가 작으면 같은 물체의 bounding box에 속함
- Corner pooling
- 코너에는 특징적인 부분이 없음
- 코너를 결정하기 위해서 corner pooling 과정 필요
CornerNet 이후로 anchor에 대한 모델들이 발표되고 있다.
📌 CenterNet
- Keypoint heatmap을 통해 중심점(center) 예측
- Center사용하여 단 하나의 anchor box생성
- Keypoints grouping 과정이 필요 없어 시간 단축
- NMS 과정 x
📌 FCOS
- 중심점으로부터 바운딩 박스의 경계까지의 거리 예측
- FPN을 통해 multi-level 예측
'AI' 카테고리의 다른 글
[컴퓨터비전] Semantic Segmentation - FCN 한계를 극복한 Model (0) | 2023.06.13 |
---|---|
[컴퓨터비전] Semantic Segmentation - FCN (0) | 2023.06.13 |
[컴퓨터비전] Object Detection - EfficientDet (0) | 2023.05.03 |
[컴퓨터비전] Object Detection - 1 Stage Detectors (0) | 2023.05.03 |
[컴퓨터비전] Object Detection - Neck (0) | 2023.05.03 |