CS 공부/AI
[Object Detection] Cascade RCNN, DCN, Transformer
imsmile2000
2023. 5. 6. 19:45
Cascade RCNN
- IoU threshold에 따라 다르게 학습되었을 때 결과가 다름
- Input IoU가 높을수록 높은 IoU threshold에서 학습된 모델이 더 좋은 결과를 냄
- IoU threshold에 따라 다르게 학습되었을 때 결과가 다름
- 전반적인 AP의 경우 IoU 0.5로 학습된 모델 성능이 가장 좋음
- 그러나 AP의 IoU threshold가 높아질수록 IoU threshold가 0.6, 0.7로 학습된 모델 성능이 좋음
- high quality detection을 수행하기 위해선 IoU threshold를 높여 학습할 필요가 있음
- 하지만 성능이 하락하는 문제가 존재하기 때문에 이를 해결하기 위해 Cascade RCNN 제안
Method
<Integral loss>
- Faster RCNN과 다르게 IoU threshold가 다른 classifier C1,C2,C3 학습
- Loss의 경우 각각 C1, C2, C3의 classifier loss를 합
- Inference 시, C1,C2,C3의 confidence를 평균 냄
- IoU threshold가 다른 classfier가 반복될 때 성능 향상 증명
<Cascade RCNN>
- 여러 개의 RoI head(H1, H2, H3) 학습
- 이 때, Head 별로 IoU threshold 다르게 설정
- C3, B3가 최종 결과
- IoU threshold가 다른 RoI head를 cascade로 쌓을 시 성능 향상 증명
Deformable Convolutional Networks (DCN)
CNN의 문제점
- 일정한 패턴을 지닌 CNN은 geometric transformations에 한계를 지님
- geometric transformations: 이미지에 변형주는 것(affine), 다른 관점에서 보는 것(viewpoint), pose
- 기존의 해결 방법: geometric augmentation, geometric invariant feature selection
- 하지만 기존의 사람이 넣어준 연산들만 학습할 수 있다는 것이 단점, 이를 해결하기위해 DCN 등장
Deformable Convolution
- input feature map에서 2 branch로 나뉘어져서 1 branch는 offset을 계산하고, 또 다른 branch는 offset 정보를 받아 conv 연산을 수행
- 일정한 패턴이 아니라 offset을 학습시켜 위치를 유동적으로 변화
- 주로 object detection, segmentation에서 좋은 효과 보임
- Weight가 R을 참고하면서 Input feature map의 어떤 픽셀과 곱할지 결정
- Deformable Convolution: 배경에서 conv 학습하지 않고 객체에서만 학습시켜서, 객체가 있을법한 위치 더 잘 학습
Transformer
- NLP에서 long range dependency를 해결, 이를 vision에도 적용
- ViT, DETR, Swin Transformer 등
Vision Transformer
- 이미지 데이터를 자연어 데이터처럼 sequential하게 바꿔줘야함
- Flatten 3D to 2D (이미지를 word 형태로 바꾸기)
- grid 형태의 patch 단위로 나누기
- HxWxC 크기의 채널을 Nx(P2xC)로 reshape
- Learnable한 embedding 처리 (matrix를 이용해서 학습 가능하게 만들어줌)
- class embedding, position embedding 추가
- 앞서 만들어진 embedding 값에 class embedding 추가 ([CLS] 토큰)
- 이미지의 위치에 따라 학습하기 위해 position embedding 추가
- Transformer 통과 (embedding: transformer 입력값)
- Predict
- class embedding 벡터 값을 MLP head에 입력시켜 최종 결과를 추출
DETR
- Transformer을 처음으로 object detection에 적용
- 기존 object detection의 hand-crafted post process 단계를 transformer를 이용해 없앰
- Architecture
- CNN backbone
- Transformer (Encoder-Decoder)
- highest feature map: transformer 특성상 연산량이 많아 highest level feature map만 사용
- flatten 2D / positional embedding / encoder
- 224 x 224 input image
- 7x7 feature map size: 49개의 feature 벡터를 encoder 입력값으로 사용
- Decoder
- Feed Forward Network(FFN)
- N개의 output (이미지에 존재하는 object 개수보다 높게 설정해주어야함)
- Train시 유의사항
- N=10으로 설정하고 실제 객체가 3개 존재하면 groundtruth에서 부족한 object 개수만큼 no object로 padding 처리
- groundtruth와 prediction을 N:N 매핑
- 각 예측값 N개가 unique하게 나타나 post-process 과정이 필요 없음
Swin Transformer
- ViT의 문제점
- 굉장히 많은 양의 데이터를 학습하여야 성능이 나옴
- transformer 특성상 computational cost 큼
- 일반적인 backbone으로 사용하기 어려움
- 해결방법: CNN과 유사한 구조로 설계, Window라는 개념을 활용하여 cost를 줄임
- Architecture
- Patch Partitioning: 이미지를 n개의 패치로 나누어주는 과정
- Linear Embedding: ViT와 embedding 방식 동일, class embedding 제거
- Patch Merging: 패치 사이즈 줄이고 채널을 늘림
- Swin Transformer block: attention을 두번 통과시켜줌
- 첫번째 연산에서는 Window multi-head attention 사용
- Window 단위로 embedding을 나눔
- ViT는 모든 embedding을 transformer에 입력
- Swin-T는 window 안에서만 transformer 연산을 수행해서 computational cost가 window 크기에 따라 조절 가능
- window 안에서만 수행하여 receptive field를 제한하는 단점이 존재
- 두번째 연산에서는 Shifted Window multi-head attention 사용
- window multi-head attention의 단점 해결
- Window를 위아래로 조금씩 옮긴 shifted window 사용
- window size와 다르게 나뉜 부분들 해결 필요
- 남는 부분들을 옮겨주고 masking 처리하여 self-attention 연산이 되지 않도록 함
- 첫번째 연산에서는 Window multi-head attention 사용
- 장점
- 적은 Data에도 학습이 잘 이루어짐
- Window 단위 이용하여 cost를 대폭 줄임
- CNN과 비슷한 구조로 backbone으로 general하게 활용