Object Detection¶
✅ Two-stage detector¶
1️⃣ R-CNN¶
- Input image를 구한다.
- Selective Search 같은 것을 통해서 region proposals을 먼저 구한다.(2천개 이하)
- 이제 각 region propsals을 Image Classification Network에 넣는다. 이때 이미지의 크기는 입력에 맞게 조정해서 넣어준다.
- 그 해당 결과로 분류를 하게 된다.
📌 단점
- 각 region proposals을 다 CNN에 넣어서 처리해야 하기 때문에 속도가 굉장히 느리다.
- region proposals는 별도의 hand design된 알고리즘을 사용해서 학습을 통해서 성능 향상의 한계가 있다.
2️⃣ Fast R-CNN¶
영상 전체에 대한 feature를 한번에 추출하고 그 다음에 이를 재활용을 해서 여러 object들을 detection할 수 있게 한다.
1. 원본 이미지로 부터 Conv. feature map를 얻는다.
2. ROI(Region of Interest) pooling을 통한 feature map에서 ROI feature를 추출한다.
- 일정 size로 resize한다. ROI pooling layer는 고정된 크기를 가질 수 있게 만든다.
- ROI는 region proposal의 후보 위치를 의미한다.
3. 각 ROI에 대해서 Class와 box prediction를 구하게 된다.
📌 한계점
- 하지만 여기에서도 역시 아직 region proposals은 hand design된 알고리즘을 사용하여 한계가 존재하였다.
3️⃣ Faster R-CNN¶
📌 기본 개념¶
- 두 영역의 교집합을 합집합으로 나눈 값인 IoU를 통해서 값을 계산할 수 있다.
📌 Anchor Boxes¶
- 각 위치에서 발생할 거 같은 box들의 후보군의 크기를 미리 정해 놓는다.
- scale별로 가로,세로 비율별로 준비해 놓는다.
- GT(Ground Truth)와 IoU값 > 0.7 → positive sample
- GT와 IoU값 < 0.3 → negative sample
- 기존 영역 제안을 RPN을 통해서 제안하는 형식으로 바뀌게 된다.
RPN을 좀 더 자세히 살펴보자
- sliding window방식으로 돌면서 각 위치마다 k개의 anchor boxes를 고려한다.
- 이때 각 위치에서 256-d의 feature map을 추출한다.
- Object인지 아닌지 $2k$개의 scores를 가지고 class를 구별한다.
- $4k$개(x,y,w,h)의 좌표값을 가지고 reg layer를 지난다. 좀 더 정교한 bbox를 만들기 위해서
📌 Non-Maximum Suppression(NMS)¶
일정 score이상 나오는 box들이 많고 일정 threshold를 정하기 힘들기 때문에 매우 많이 겹쳐진 bounding box들이 생성되게 된다. NMS는 이를 효과적으로 filtering하기 위한 방법이다.
- 1 단계 : objectiveness score가 가장 높은 상자 선택
- 2 단계 : 이 상자의 IoU를 다른 상자와 비교
- 3 단계 : IoU가 50% 이상인 경계 상자 제거
- 4 단계 : 다음으로 높은 객관성 점수로 이동
- 5 단계 : 2-4 단계 반복
🔎 요약¶
✅ Single-stage detector¶
📌 One-stage vs Two-stage¶
- 큰 차이는 ROI pooling이 없다.
- 이 때문에 One-stage가 더 빠른 속도를 가진다.
1️⃣ YOLO¶
- 먼저 input image를 SxS grid로 나눈다.
- 각 grid마다 4개의 좌표와 1개의 confidence score를 B개씩 가지고 예측을 하게 된다.
- 그리고 각 위치에 따른 class score도 따로 예측하게 된다.
학습 시킬때도 이전에 fast R-CNN에서 학습한 방식과 동일하다. Ground Truth와 매치된 anchor box를 positive로 간주하고 학습 label를 positive로 걸어주게 된다.
📌 전체적인 구조¶
- 여기서
B=2
,C=20
을 사용하였다. - 따라서 마지막 결과의 channel이 30인것은 위에 5B+C를 계산한 값이 된다.
- 각 위치마다 30d의 결과가 나오게 되는 것이다.
- 여기서 grid를 SxS로 나누는데 여기서는 7의 값을 가진다.
2️⃣ SSD(Single Shot MultiBox Detector)¶
- 각 feature map에 해상도에 맞게 bounding box를 출력할 수 있는 구조로 만들어졌다.
📌 전체적인 구조¶
✅ Two-Stage detector vs One-Stage detector¶
1️⃣ Focal loss¶
📌 Class imbalance problem¶
- One-Stage의 경우 ROI pooling이 없다보니까 모든 영역에서 loss가 계산이 된다.
- 실제 영상은 배경이 더 크고 실제 찾으려는 물체는 배경보다 작은 영역에 존재하게 된다. 이는 쓸모 없는 영역에 대한 계산이 많아 지는 것을 의미한다.
- Class imbalance란 #neg. anchor boxes >> #pos. anchor boxes일 때를 의미한다.
- 모든 One-Stage의 경우 이런 문제를 가지고 있다.
📌 Focal loss¶
- Class imbalance 문제를 해결하기 위한 방안
- Cross entropy의 확장이다. Cross entropy에 $(1-p_{t})^{\gamma}$값이 곱해진 형태이다.
- $\gamma$값이 커질수록 정답이 아니었을때 gradient가 더 큰 값을 가지는 것을 알 수 있다.
- 이는 정답이 아니었을때 더 큰 weight를 주게 된다.
2️⃣ RtinaNet¶
- One-Stage Network이다.
📌 성능¶
✅ Detection with Transformer¶
Transformer는 NLP에서 굉장히 성공적이다. 이를 CV에서도 적용하면 좋겠다라는 생각으로 CV에 적용한 사례를 살펴보자.
- Vit(Vision Transformer) by Google
- DeiT(Data-efficient image Transformer) by Facebook
- DETR(DEtection TRansformer) by Facebook
1️⃣ DETR¶
'AI > 이론' 카테고리의 다른 글
Panoptic segmentation (0) | 2021.03.11 |
---|---|
Instance segmentation (0) | 2021.03.11 |
Conditional generative model (0) | 2021.03.11 |
torch.autograd (0) | 2021.03.10 |
Semantic segmentation (0) | 2021.03.09 |
Image classification II (0) | 2021.03.09 |
Annotation data efficient learning (2) | 2021.03.08 |
Image classification I (0) | 2021.03.08 |