*Advanced Object Detection 1
1. Cascade RCNN
- 기존 Faster-RCNN에서는 RPN에서 0.7이상의 IoU를 갖는 anchor box를 Positive sample, 0.3이하의 IoU는 Negative sample로 정의, Head Network에서는 0.5이상을 positive, 0.5미만을 negative로 정의했음.
- 하지만 이 IoU 기준을 정하는 명확한 기준이 없었기 때문에 IoU threshold를 바꿔보면 성능이 어떻게 바뀔지에 집중한것이 Cascade RCNN이다
- IoU를 0.7로 바꾸었을때 False positive가 줄어드는것을 볼 수 있음.
- Localization Performance
- x축 : RPN을 통과한 box가 GT와 갖는 IoU값
- y축 : Box Head를 통과시킨 box와 GT와 갖는 IoU값
- IoU threshold에 따라 다르게 학습되었을 때 결과가 다름
- Input IoU가 높을수록 높은 IoU threshold 에서 학습된 model이 더 좋은 결과를 냄
- Detection Performance
- IoU threshold에 따라 다르게 학습되었을 때 결과가 다름
- 전반적인 AP의 경우 IoU threshold 0.5로 학습된 model이 성능이 가장 좋음
- 그러나 AP의 IoU threshold가 높아질수록 (ex. AP70, AP90) IoU threshold가 0.6, 0.7로 학습된 model의 성능이 좋음
* motivation
- 학습되는 IoU에 따라 대응 가능한 IoU 박스가 다름
- 그래프와 같이 high quality detection을 수행하기 위해선 IoU threshold를 높여 학습할 필요가 있음
- 단, 성능이 하락하는 문제가 존재
- 이를 해결하기 위해 Cascade RCNN을 제안
*Method
- (c) Integral Loss
- Fastern RCNN과는 다르게 IOU threshold가 다른 Classifier C1, C2, C3를 학습
- Loss의 경우 각각 C1, C2, C3의 classifier loss를 합
- Inference 시, C1, C2, C3의 confidence 를 평균 냄
- 큰 성능 향상은 없음
- (d) Cascade R-CNN
- 여러 개의 RoI head (H1, H2, h3)를 학습
- 이 때 Head 별로 IOU threshold를 다르게 설정
- C3, B3가 최종 결과
- 결과
- 결론
- Bbox pooling을 반복 수행할 시 성능 향상되는 것을 증명 (Iterative)
- IOU threshold가 다른 Classifier가 반복될 때 성능 향상 증명 (Integral)
- IOU threshold가 다른 RoI head를 cascade로 쌓을 시 성능 향상 증명 (Cascade)
2. Deformable Convolutional Networks (DCN)
CNN 문제점
- 일정한 패턴을 지닌 convolution neural networks는 geometric transformations에 한계를 지님
- what is geometric?
- Affine
- Viewpoint
- pose
- Affine
- 기존 해결 방법
- geometric augmentation
- geometric invariant feature engineering
- geometric augmentation
- 제안하는 Module
- Deformable convolution
*Deformable Convolution
- 기존 feature에서 각 픽셀마다 다양한 offset을 줘서 그 위치에 이미지와 element-wise 곱 수행
- 한 점 𝑃0 에 대한 convolution 과 deformable convolution layer
- ∆𝑃𝑛 만큼 더해줌으로써 deformable 하게 만들어줌.
*Results
- 고정된 feature가 아니라 좀 더 객체를 중점적으로 feature를 뽑을 수 있음
- 일정한 패턴을 지닌 convolution neural networks는 geometric transformations에 한계를 파악
- 일정한 패턴이 아니라 offset을 학습시켜 위치를 유동적으로 변화
- 주로 object detection, segmentation에서 좋은 효과를 보임
3. Transformer
Transformer
- NLP에서 long range dependency를 해결 이를 vision에도 적용
- Vision Transformer (ViT)
- End-to-End Object Detection with Transformers (DETR)
- Swin Transformer
*ViT
이미지를 sequential한 데이터로 바꿔줘야함 -> 이미지를 patch로 나눔.
- Flatten 3D to 2D (Patch 단위로 나누기)
- 𝑃 = 𝑝𝑎𝑡𝑐ℎ 크기
- N = HW/P 2
- Reshape image x ∈ ℝ^(H×W×C) → xp ∈ ℝ^(N×(P 2×C))
- Learnable한 embedding 처리
- 𝐸 라는 matrix를 이용해서 학습을 가능하게 만들어줌
- Add class embedding, position embedding
- 앞서 만들어진 embedding 값에 class embedding 추가 ([CLS]Token)
- 이미지의 위치 따라 학습하기 위해 position embedding 추가
- Transformer
- Embedding: Transformer 입력값
- Predict
- Class embedding vector 값을 MLP head에 입력시켜 최종 결과를 추출
- ViT의 문제점
- ViT의 실험부분을 보면 굉장히 많은양의 Data를 학습하여야 성능이 나옴
- Transformer 특성상 computational cost 큼
- 일반적인 backbone으로 사용하기 어려움
*DETR(End-to-End Object Detection with Transformer)
- Transformer를 처음으로 Object Detection에 적용
- 기존의 Object Detection의 hand-crafted post process 단계를 transformer를 이용해 없앰
- Architecture
- 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 과정이 필요 없음
- Experiments
- 전체적인 AP는 상승하였으나, highest level feature만 사용하여 APS 하락
*Swin Transformer
- Backbone으로는 transformer를 활용할 수 없었다. why?
- ViT의 실험부분을 보면 굉장히 많은량의 Data를 학습하여야 성능이 나옴
- Transformer 특성상 computational cost 큼
- 일반적인 backbone으로 사용하기 어려움
- 해결법
- CNN과 유사한 구조로 설계
- Window라는 개념을 활용하여 cost를 줄임
*Architecture
- Patch Partitioning
- Linear Embedding
- ViT와 embedding 방식은 동일, 그러나 class embedding 제거
- ViT와 embedding 방식은 동일, 그러나 class embedding 제거
- Swin Transformer Block
- Window Multi-head Attention
- Window 단위로 embedding을 나눔.
- 기존 ViT같은 경우 모든 embedding을 Transformer에 입력
- Swin-Transformer는 Window 안에서만 Transformer 연산 수행
- 따라서 이미지 크기에 따라 증가되던 computational cost가 Window 크기에 따라 조절 가능
- Window 안에서만 수행하여 receptive field를 제한하는 단점 존재 -> shifted window multi-head attention활용
- Shifted Window Multi-Head Attention
- W-MSA의 경우 Window 안에서만 수행하여 receptive field를 제한하는 단점 존재
- 이를 해결하기 위해 Shifted Window Multi-Head Attention을 Transformer Block 2번째 layer에서 수행
- Window size와 다르게 나뉜 부분들 해결 필요
- Patch Merging
*Experiment
- 적은 Data에도 학습이 잘 이루어짐
- Window 단위를 이용하여 computation cost를 대폭 줄임
- CNN과 비슷한 구조로 Object Detection, Segmentation 등의 backbone으로 general하게 활용