Week 9-12 ํ์ต ์ ๋ฆฌ
Object Detection ํ๊ฐ: ์ฑ๋ฅ๊ณผ ์๋ ์งํ ์ดํดํ๊ธฐ
Object Detection์ ์ด๋ฏธ์ง ๋ด ๊ฐ์ฒด์ ์์น์ ์ข ๋ฅ๋ฅผ ๋์์ ํ๋ณํ๋ ๋ณตํฉ์ ์ธ ํ์คํฌ์ ๋๋ค. ๋จ์ํ ๋ถ๋ฅ(classification) ๋ฌธ์ ๋ณด๋ค ๋ ๋ณต์กํ ์ด ๋ฌธ์ ๋ ์์จ ์ฃผํ, OCR, ์ง๋ณ ์ง๋จ, CCTV ๋ชจ๋ํฐ๋ง ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ํต์ฌ ์ญํ ์ ์ํํฉ๋๋ค. ์ด ํฌ์คํธ์์๋ Object Detection์ ์ฑ๋ฅ ํ๊ฐ ์งํ์ ์๋ ํ๊ฐ ์งํ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
1. Object Detection ์ฑ๋ฅ ํ๊ฐ: mAP (mean Average Precision)
1-1. Precision๊ณผ Recall ๋ณต์ต
- Precision: ์์ธกํ ๊ฐ์ฒด ์ค ์ค์ ๊ฐ์ฒด๊ฐ ์ฐจ์งํ๋ ๋น์จ
- Recall: ์ค์ ๊ฐ์ฒด ์ค ์์ธก๋ ๊ฐ์ฒด์ ๋น์จ
์ด ๋ ์งํ๋ฅผ ๋ฐํ์ผ๋ก Precision-Recall (PR) Curve ๋ฅผ ๊ทธ๋ฆฝ๋๋ค.
PR Curve ์๋ ๋ฉด์ ์ ๊ณ์ฐํ ๊ฐ์ด **Average Precision (AP)**์ด๋ฉฐ, ์ฌ๋ฌ ํด๋์ค์ ๋ํด AP๋ฅผ ํ๊ท ํ ๊ฐ์ด mAP์
๋๋ค. mAP ๊ฐ์ด ๋์์๋ก ๋ชจ๋ธ์ ๊ฐ์ฒด ๊ฒ์ถ ์ฑ๋ฅ์ด ์ฐ์ํ๋ค๊ณ ํ๊ฐํ ์ ์์ต๋๋ค.
1-2. Bounding Box ํ๊ฐ: IoU (Intersection over Union)
Object Detection์์๋ ๊ฐ์ฒด์ ์์น๋ฅผ bounding box (bbox)๋ก ๋ํ๋ด๋๋ฐ, ์์ธก bbox๊ฐ Ground Truth bbox์ ์ผ๋ง๋ ์ผ์นํ๋์ง๋ฅผ ํ๊ฐํ๋ ์งํ๋ก IoU๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- IoU ๊ฐ์ด 1์ ๊ฐ๊น์ธ์๋ก ์์ธกํ bbox๊ฐ GT bbox์ ์ ์ผ์นํฉ๋๋ค.
- ๋ณดํต IoU threshold๋ฅผ ์ค์ ํ์ฌ, ์๋ฅผ ๋ค์ด
์ด๋ฉด ์ด๋ฉด ๋ bbox๊ฐ ์ผ์นํ๋ค๊ณ ํ๋จํฉ๋๋ค. ์ด threshold์ ๋ฐ๋ผ mAP50, mAP60 ๋ฑ ๋ค์ํ ๊ธฐ์ค์ผ๋ก ์ฑ๋ฅ์ ํ๊ฐํ ์ ์์ต๋๋ค.
1-3. mAP ๊ณ์ฐ ๊ณผ์
- ๊ฐ ํด๋์ค๋ณ๋ก, ๋ชจ๋ธ์ ์์ธก bbox์ ๋ํด IoU ๊ธฐ์ค์ ๋ง์กฑํ๋ True Positive (TP)์ False Positive (FP)๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
- confidence score์ ๋ฐ๋ผ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ ํ, Precision-Recall Curve๋ฅผ ์์ฑํฉ๋๋ค.
- ๊ฐ ํด๋์ค์ AP (Average Precision)๋ฅผ ๊ณ์ฐํ๊ณ , ์ด๋ฅผ ํ๊ท ํ ๊ฐ์ด mAP์ ๋๋ค.
2. Object Detection ์๋ ํ๊ฐ
์ฑ๋ฅ ์ธ์๋, ์ค์๊ฐ ์ฒ๋ฆฌ๊ฐ ์๊ตฌ๋๋ ๊ฒฝ์ฐ ์๋ ์งํ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค.
2-1. FPS (Frames Per Second)
- ์ ์:
1์ด์ ์ฒ๋ฆฌํ ์ ์๋ frame์ ์๋ฅผ ๋ํ๋ด๋ฉฐ, FPS ๊ฐ์ด ๋์์๋ก ๋ชจ๋ธ์ ์๋๊ฐ ๋น ๋ฆ ๋๋ค.
2-2. FLOPs (Floating Point Operations)
- ์ ์:
๋ชจ๋ธ์ด 1์ด ๋์ ์ํํ ์ ์๋ ๋ถ๋์์์ ์ฐ์ฐ ํ์๋ฅผ ์๋ฏธํฉ๋๋ค.
FLOPs ๊ฐ์ด ๋์์๋ก ๋ ๋ง์ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ์ํํ ์ ์์์ ๋ํ๋ด์ง๋ง, ๋ชจ๋ธ์ ํจ์จ์ฑ๊ณผ๋ ๋ฐ์ ํ ๊ด๋ จ์ด ์์ต๋๋ค.
๊ฒฐ๋ก
Object Detection์ ํ๊ฐ์์๋ ์ฑ๋ฅ๊ณผ ์๋ ๋ ๊ฐ์ง ์ธก๋ฉด์ด ๋ชจ๋ ๊ณ ๋ ค๋ฉ๋๋ค.
- ์ฑ๋ฅ ํ๊ฐ:
- mAP๋ฅผ ํตํด ๋ชจ๋ธ์ด ์ผ๋ง๋ ์ ํํ๊ฒ ๊ฐ์ฒด๋ฅผ ๊ฒ์ถํ๋์ง ํ์ธํ๋ฉฐ, IoU ๊ธฐ์ค์ ๋ฐ๋ผ mAP50, mAP60 ๋ฑ์ ํ๊ฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ์๋ ํ๊ฐ:
- FPS์ FLOPs๋ฅผ ํตํด ๋ชจ๋ธ์ ์ค์๊ฐ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ์ธก์ ํฉ๋๋ค.
์ด๋ฌํ ํ๊ฐ ์งํ๋ค์ ์ข ํฉํ์ฌ, ์ค์ ์๋น์ค์ ์ ํฉํ Object Detection ๋ชจ๋ธ์ ์ ํํ๊ณ ์ต์ ํํ ์ ์์ต๋๋ค.
Object Detection ๋ชจ๋ธ์ ๋ฐ์ ๊ณผ 2 Stage Detector์ ๊ตฌ์กฐ
Object Detection์ ์ด๋ฏธ์ง ๋ด์์ ๊ฐ์ฒด์ ์์น์ ์ข ๋ฅ๋ฅผ ๋์์ ํ๋ณํ๋ ๋ณตํฉ์ ์ธ ํ์คํฌ์ ๋๋ค. ๋จ์ํ ๋ถ๋ฅ ๋ฌธ์ ๋ณด๋ค ๋ณต์กํ ์ด ๋ฌธ์ ๋ ์์จ ์ฃผํ, OCR, ์ง๋ณ ์ง๋จ, CCTV ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ํต์ฌ ์ญํ ์ ์ํํฉ๋๋ค. ์ค๋์ ๊ฐ์ฒด ์ธ์ง๋ฅผ ์ธ๊ฐ์ ์ธ์ ๊ณผ์ ๊ณผ ์ ์ฌํ๊ฒ ๋ ๋จ๊ณ๋ก ๋๋์ด ์ฒ๋ฆฌํ๋ 2 Stage Detector ๋ชจ๋ธ์ ๋ฐ์ ๊ณผ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. 2 Stage Detector ๋ฐ์ ๊ณผ์
2 Stage Detector๋ ์ธ๊ฐ์ด ๋ฌผ์ฒด๋ฅผ ์ธ์งํ ๋ ๋จผ์ ์์น๋ฅผ ํ์ ํ ํ, ํด๋น ๋ฌผ์ฒด์ ์ข ๋ฅ๋ฅผ ํ๋ณํ๋ ๋ฐฉ์์ ๋ชจ๋ฐฉํฉ๋๋ค. ์ด ๊ณผ์ ์ ์๋์ ๊ฐ์ด R-CNN ๊ณ์ด ๋ชจ๋ธ์ ๋ฐ์ ์ ํตํด ์ด๋ฃจ์ด์ก์ต๋๋ค.
1-1. R-CNN (Region-based Convolutional Neural Network)
- ํ๋ก์ธ์ค:
- Selective Search:
- ์ด๋ฏธ์ง์์ ์๊ฒ segmentation ํ, ์ฐ๊ด ํฝ์ ๋ค์ ๋ณํฉํ์ฌ ์ฝ 2000๊ฐ์ Region of Interest (RoI)๋ฅผ ์ถ์ถํฉ๋๋ค.
- ์ด์ ์ Sliding Window ๋ฐฉ์๋ณด๋ค ํจ์ฌ ํจ์จ์ ์ ๋๋ค.
- RoI ์กฐ์ :
- ๋ชจ๋ RoI๋ฅผ CNN์ FC layer ์ ๋ ฅ์ ๋ง๊ฒ ๋์ผํ ํฌ๊ธฐ๋ก ์กฐ์ ํฉ๋๋ค.
- Feature ์ถ์ถ:
- ๊ฐ RoI๋ฅผ Pretrained CNN(AlexNet ๋ฑ)์ ํต๊ณผ์์ผ feature๋ฅผ ์ถ์ถํฉ๋๋ค.
- ๋ถ๋ฅ ๋ฐ ํ๊ท:
- ์ถ์ถํ feature๋ฅผ SVM์ ๋ฃ์ด ๊ฐ์ฒด(๋๋ ๋ฐฐ๊ฒฝ)๋ฅผ ๋ถ๋ฅํ๊ณ , bbox regressor๋ก ์์น๋ฅผ ๋ณด์ ํฉ๋๋ค.
- Positive sample (์: IoU > 0.5)๊ณผ negative sample (์: IoU < 0.5, ํน์ < 0.3)์ ์ฌ์ฉํ๋ฉฐ, hard negative mining ๊ธฐ๋ฒ์ผ๋ก False Positive๋ฅผ ์ค์ ๋๋ค.
- Selective Search:
- ๋จ์ :
- ์ฝ 2000๊ฐ์ RoI๊ฐ ๊ฐ๊ฐ CNN์ ํต๊ณผํด์ผ ํ๋ฏ๋ก ์ฐ์ฐ ๋น์ฉ์ด ๋งค์ฐ ๋์ต๋๋ค.
- CNN, SVM, bbox regressor๊ฐ ๋ณ๋๋ก ํ์ต๋๊ธฐ ๋๋ฌธ์ end-to-end ํ์ต์ด ์ด๋ฃจ์ด์ง์ง ์์ ๋นํจ์จ์ ์ ๋๋ค.
1-2. SPPNet (Spatial Pyramid Pooling Network)
- ํ์ :
- ์ ๋ ฅ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ ๋ก ๊ณ ์ ํ์ง ์๊ณ , CNN์ ๋ง์ง๋ง ๋จ๊ณ์์ ๊ณ ์ ๊ธธ์ด์ feature vector๋ฅผ ์์ฑํ ์ ์๋๋ก Spatial Pyramid Pooling์ ๋์ ํฉ๋๋ค.
- ์ฅ์ :
- ๋ค์ํ ํฌ๊ธฐ์ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋๋ก ์ฒ๋ฆฌํ ์ ์์ด ์ฑ๋ฅ ํ๋ฝ์ ๋ฐฉ์งํฉ๋๋ค.
- CNN์ ํ ๋ฒ๋ง ํต๊ณผํ๋ฏ๋ก ์ฐ์ฐ ๋น์ฉ์ด ํฌ๊ฒ ์ค์ด๋ญ๋๋ค.
- ๋จ์ :
- ์ฌ์ ํ CNN, SVM, bbox regressor๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ํ์ตํด์ผ ํฉ๋๋ค.
1-3. Fast R-CNN
- ํ์ :
- CNN, SVM, bbox regressor๋ฅผ ํตํฉํ์ฌ end-to-end๋ก ํ์ตํ ์ ์๋๋ก ๊ฐ์ ํ์ต๋๋ค.
- ํ๋ก์ธ์ค:
- Feature Map ์ถ์ถ:
- VGG16 ๊ฐ์ CNN์ ์ฌ์ฉํด ์ ์ฒด ์ด๋ฏธ์ง๋ฅผ ํ ๋ฒ๋ง ์ฒ๋ฆฌํ์ฌ feature map์ ์ป์ต๋๋ค.
- RoI Projection & RoI Pooling:
- Selective Search๋ฅผ ํตํด ์ป์ region proposal์ feature map์ ๋งคํํ์ฌ ๊ณ ์ ํฌ๊ธฐ์ feature vector๋ก ๋ณํํฉ๋๋ค.
- ๋ถ๋ฅ ๋ฐ ํ๊ท:
- FC layer๋ฅผ ๊ฑฐ์ณ softmax classifier๋ก ๊ฐ์ฒด ๋ถ๋ฅ ๋ฐ bbox ํ๊ท(Smooth L1 Loss) ์ํ.
- Feature Map ์ถ์ถ:
- ๋ฐ์ดํฐ ๊ตฌ์ฑ:
- Positive sample: IoU > 0.5, Negative sample: 0.1 < IoU < 0.5 (๋น์จ 25% : 75%)
- ์ฅ์ :
- ๋ชจ๋ ๊ตฌ์ฑ ์์๊ฐ ํ๋์ ๋คํธ์ํฌ๋ก ํตํฉ๋์ด ํ์ต ๋ฐ ์ต์ ํ๊ฐ ์ฉ์ดํฉ๋๋ค.
1-4. Faster R-CNN
- ํ์ :
- Region Proposal Network (RPN)์ ๋์ ํ์ฌ, CNN ๋ด๋ถ์์ region proposal์ ์์ฑํ๊ณ , Fast R-CNN ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
- ํ๋ก์ธ์ค (RPN ๋ถ๋ถ):
- Feature Map ์ถ์ถ:
- ์ด๋ฏธ์ง๋ฅผ CNN์ ์ ๋ ฅํ์ฌ feature map์ ์์ฑํฉ๋๋ค.
- Sliding Window & Anchor Boxes:
- Sliding window ๋ฐฉ์์ผ๋ก feature map์ ์ค์บํ๋ฉฐ, 9๊ฐ์ ๋ค์ํ ํฌ๊ธฐ ๋ฐ ๋น์จ์ anchor box๋ฅผ ์์ฑํฉ๋๋ค.
- Objectness Score & Regression:
- ๊ฐ anchor box์ ๋ํด ๊ฐ์ฒด ์กด์ฌ ๊ฐ๋ฅ์ฑ(objectness score)๊ณผ bbox ๋ณด์ ์ ์ํ regression์ ์ํํฉ๋๋ค.
- Non-Maximum Suppression (NMS):
- ๊ฒน์น๋ bounding box๋ค์ ์ ๊ฑฐํ์ฌ ์ต์ข ํ๋ณด ์์ญ์ ๊ฒฐ์ ํฉ๋๋ค.
- Feature Map ์ถ์ถ:
- ์ฅ์ :
- RPN์ ํตํด region proposal ๋จ๊ณ๊ฐ ํตํฉ๋์ด ์ ์ฒด ํ๋ก์ธ์ค๊ฐ end-to-end๋ก ์ด๋ฃจ์ด์ง๋๋ค.
- ์ด์ ๋ชจ๋ธ๋ค๋ณด๋ค ๋น ๋ฅด๊ณ , ์ฑ๋ฅ์ด ํฅ์๋์์ต๋๋ค.
2. Object Detection ๋ชจ๋ธ์ Framework
2 Stage Detector ๋ชจ๋ธ์ Backbone, Neck, Head๋ก ๊ตฌ์ฑ๋ ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- Backbone:
- ์ด๋ฏธ์ง์์ ๊ธฐ๋ณธ์ ์ธ feature๋ฅผ ์ถ์ถํ๋ ๋ถ๋ถ์ผ๋ก, ๋ณดํต ์ฌ์ ํ์ต๋ CNN(์: ResNet-50 ๋ฑ)์ด ์ฌ์ฉ๋ฉ๋๋ค.
- Neck:
- Backbone์์ ์ถ์ถํ feature map์ ์ฌ๊ตฌ์ฑํ์ฌ, ๋ค์ํ scale๊ณผ aspect ratio์ ๊ฐ์ฒด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์งํ ์ ์๋๋ก ๊ฐ๊ณตํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, Feature Pyramid Networks (FPN)์ด Neck ์ญํ ์ ํฉ๋๋ค.
- Head:
- Neck์์ ๊ฐ๊ณต๋ feature map์ ์ ๋ ฅ๋ฐ์ ๊ฐ ๊ฐ์ฒด์ ์์น์ ํด๋์ค๋ฅผ ์ต์ข ์ ์ผ๋ก ์์ธกํฉ๋๋ค.
- Dense Head:
- feature map์ dense location์ ์ํํฉ๋๋ค.
- RoI Head:
- RoI pooling์ ํตํด ์ป์ feature๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด ๋ถ๋ฅ์ bbox ํ๊ท๋ฅผ ์ํํฉ๋๋ค.
๊ฒฐ๋ก
Object Detection ๋ชจ๋ธ์ R-CNN์์ ์์ํด SPPNet, Fast R-CNN, Faster R-CNN์ผ๋ก ๋ฐ์ ํด ์์ต๋๋ค.
- R-CNN:
- Selective Search๋ฅผ ํตํด 2000๊ฐ์ RoI๋ฅผ ์ถ์ถํ๊ณ , CNN, SVM, bbox regressor๋ฅผ ๋ณ๋๋ก ํ์ตํ์ฌ ๊ฐ์ฒด๋ฅผ ๊ฒ์ถํ์์ต๋๋ค.
- SPPNet:
- Spatial Pyramid Pooling์ ๋์ ํ์ฌ ๋ค์ํ ํฌ๊ธฐ์ ์ด๋ฏธ์ง๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ, ์ฐ์ฐ ๋น์ฉ์ ์ค์์ต๋๋ค.
- Fast R-CNN:
- ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ end-to-end๋ก ํ์ตํ์ฌ ์ต์ ํ์ ์ฑ๋ฅ์ ํฅ์์์ผฐ์ต๋๋ค.
- Faster R-CNN:
- RPN์ ํตํด region proposal ๊ณผ์ ์ ๋ด๋ถํํ๊ณ , NMS๋ฅผ ์ ์ฉํ์ฌ ๋น ๋ฅด๊ณ ์ ํํ ๊ฐ์ฒด ๊ฒ์ถ์ ์คํํ์์ต๋๋ค.
๋ํ, ์ด๋ฌํ 2 Stage Detector ๋ชจ๋ธ์ ๊ตฌ์กฐ๋ Backbone, Neck, Head๋ก ๋๋๋ฉฐ, ์ด๋ฅผ ํตํด ๋ค์ํ ๊ฐ์ฒด์ ํฌ๊ธฐ์ ํํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ฒ์ถํ ์ ์์ต๋๋ค.
Object Detection ๋ชจ๋ธ์ ๋ฐ์ : IoU Threshold๋ถํฐ Transformer๊น์ง
์ด๊ธฐ ๋ชจ๋ธ๋ค์ ๊ฐ์ฒด์ ์์น์ ํด๋์ค๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ฒ๋ฆฌํ์ง๋ง, ์๊ฐ์ด ํ๋ฅด๋ฉด์ ํจ์จ์ฑ๊ณผ ์ ํ๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ฌ๋ฌ ๊ฐ์ง ํ์ ์ ๊ธฐ๋ฒ๋ค์ด ๋์ ๋์์ต๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ Fast R-CNN์์ ์์ํด Cascade R-CNN, Deformable Convolutional Networks, DETR, ๊ทธ๋ฆฌ๊ณ Swin Transformer์ ์ด๋ฅด๊ธฐ๊น์ง์ ๋ฐ์ ๊ณผ์ ์ ์ดํด๋ณด๊ณ , IoU Threshold ์ค์ ์ด detection ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ํจ๊ป ์์๋ณด๊ฒ ์ต๋๋ค.
1. Fast R-CNN๊ณผ IoU Threshold์ ์ํฅ
Fast R-CNN์ ๊ธฐ์กด R-CNN์ ๋จ์ ์ ๋ณด์ํ์ฌ end-to-end๋ก ํ์ตํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ๊ธฐ์กด ๋ฐฉ์:
- IoU 0.5๋ฅผ ๊ธฐ์ค์ผ๋ก Positive sample๊ณผ Negative sample์ ๊ตฌ๋ถํ์ฌ ํ์ตํ์ต๋๋ค.
- IoU Threshold ๋ณํ ํจ๊ณผ:
- ๋์ IoU Threshold (์: 0.6, 0.7):
- ๋ชจ๋ธ์ด ํ์ต ์ ๋ณด๋ค ์๊ฒฉํ ๊ธฐ์ค์ผ๋ก bbox๋ฅผ ์ ํํ๋ฏ๋ก, False Positive๊ฐ ์ค์ด๋ค๊ณ localization ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
- ๋ค๋ง, ์ ๋ ฅ ๋ฐ์ดํฐ์ IoU๊ฐ ๋์์ผ ์ด๋ฌํ ๊ธฐ์ค์ด ํจ๊ณผ์ ์ ๋๋ค.
- ๋ฎ์ IoU Threshold:
- ์ ๋ ฅ IoU๊ฐ ๋ฎ์ ๊ฒฝ์ฐ, ๋ฎ์ threshold๋ก ํ์ตํ ๋ชจ๋ธ์ด ๋ ๋์ localization ์ฑ๋ฅ์ ๋ณด์ ๋๋ค.
- ๋์ IoU Threshold (์: 0.6, 0.7):
- Detection Performance:
- ์ต์ข ์ ์ผ๋ก, ๋์ IoU threshold์์ ํ์ตํ ๋ชจ๋ธ์ ๋์ IoU ์กฐ๊ฑด์ ํ๊ฐ์์ ์ฐ์ํ ์ฑ๋ฅ์ ๋ํ๋ ๋๋ค.
์ด์ ๊ฐ์ ์คํ ๊ฒฐ๊ณผ๋ ๋จ์ํ IoU threshold๋ฅผ ๋์ธ๋ค๊ณ ํด์ ํญ์ ์ฑ๋ฅ์ด ํฅ์๋๋ ๊ฒ์ด ์๋๋ผ, ๋ฐ์ดํฐ์ ํน์ฑ๊ณผ ํ์ต ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ์ ํ threshold๋ฅผ ์ ํํด์ผ ํ๋ค๋ ์ ์ ์์ฌํฉ๋๋ค.
2. Cascade R-CNN
Cascade R-CNN์ IoU threshold์ ๋ฐ๋ฅธ ๋ชจ๋ธ ์ฑ๋ฅ์ ๋ณ๋์ฑ์ ์ฒด๊ณ์ ์ผ๋ก ๊ฐ์ ํ๊ธฐ ์ํด ๊ณ ์๋์์ต๋๋ค.
- ํต์ฌ ์์ด๋์ด:
- ์ฌ๋ฌ ๊ฐ์ RoI head๋ฅผ cascade(์ฐ์์ ์ผ๋ก) ์์, ๊ฐ ๋จ๊ณ๋ง๋ค ์ ์ง์ ์ผ๋ก IoU threshold๋ฅผ ๋์ฌ๊ฐ๋ฉฐ ํ์ตํฉ๋๋ค.
- ์ด์ ๋จ๊ณ์ bbox๊ฐ ๋ค์ ๋จ๊ณ์ ์ ๋ ฅ์ผ๋ก ๋ค์ด๊ฐ๋ฉด์, ๋ณด๋ค ์ ํํ ์์น ์ถ์ ์ ์ํํฉ๋๋ค.
- ํจ๊ณผ:
- IoU threshold๊ฐ ๋ค๋ฅธ ์ฌ๋ฌ classifier๋ฅผ ์ฐ์์ ์ผ๋ก ํ์ต์์ผ, ๋์ IoU ์กฐ๊ฑด์์ ๋ฐ์ด๋ detection ์ฑ๋ฅ์ ๋ณด์ฅํฉ๋๋ค.
3. Deformable Convolutional Networks
๊ธฐ์กด์ ๊ณ ์ ๋ convolution filter๋ ์ด๋ฏธ์ง์ ๊ธฐ์ธ๊ธฐ, ์์ ๋ณํ, ํฌ์ฆ ๋ณํ ๋ฑ์ geometric transform์ด ๊ฐํด์ก์ ๋ ํ๊ณ๊ฐ ์์์ต๋๋ค.
- Deformable Convolution์ ํต์ฌ:
- Convolution filter์ ๊ฐ kernel ์์๋ง๋ค ํ์ต ๊ฐ๋ฅํ offset์ ๋์ ํ์ฌ, ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ค์ํ ๊ธฐํํ์ ๋ณํ์ ์ ์ฐํ๊ฒ ๋์ํฉ๋๋ค.
- ์ฅ์ :
- ๊ณ ์ ๋ filter size์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ์ฌ, ๊ฐ์ฒด๊ฐ ์์ ๋ฒํ ์์น๋ฅผ ๋ณด๋ค ์ ํฌ์ฐฉํ ์ ์์ต๋๋ค.
4. DETR (DEtection TRansformer)
DETR์ Transformer๋ฅผ object detection์ ์ฒ์ ๋์
ํ ๋ชจ๋ธ๋ก, ๊ธฐ์กด ๋ชจ๋ธ๋ค์ ๋ณต์กํ ํ๋ณด ์์ญ(NMS ๋ฑ) ํ์ฒ๋ฆฌ ๋จ๊ณ๋ฅผ ์ ๊ฑฐํ์ต๋๋ค.
- ๊ตฌ์ฑ:
- Backbone์ผ๋ก CNN์ ์ฌ์ฉํ์ฌ feature map์ ์ถ์ถํ ํ, Transformer์ ํต๊ณผ์ํต๋๋ค.
- Transformer์ prediction head์์ N (> ํ ์ด๋ฏธ์ง์ ์กด์ฌํ๋ ๊ฐ์ฒด ์)๊ฐ์ bbox์ ํด๋์ค ์ ๋ณด๋ฅผ ๋์์ ์์ธกํฉ๋๋ค.
- Ground Truth์ ๋ถ์กฑํ ์๋ "no object"๋ก padding ์ฒ๋ฆฌํ์ฌ N:N ๋งคํ์ ์ํํฉ๋๋ค.
- ํน์ง:
- NMS(Post-processing)๊ฐ ํ์ ์๊ณ , end-to-end ํ์ต์ด ๊ฐ๋ฅํด์ก์ต๋๋ค.
5. Swin Transformer
Transformer๋ ์๋ ๊ณ์ฐ ๋น์ฉ์ด ๋งค์ฐ ๋์ง๋ง, Swin Transformer๋ CNN๊ณผ ์ ์ฌํ ๊ณ์ธต์ ๊ตฌ์กฐ์ window ๊ธฐ๋ฐ self-attention์ ๋์
ํด ์ด๋ฅผ ๊ทน๋ณตํ์ต๋๋ค.
- ์ฃผ์ ๊ตฌ์ฑ ์์:
- Patch Partitioning: ์ด๋ฏธ์ง๋ฅผ ์์ ํจ์น๋ก ๋๋์ด ์ฒ๋ฆฌํฉ๋๋ค.
- Linear Embedding: ๊ฐ ํจ์น๋ฅผ ์ ํ ์๋ฒ ๋ฉํ์ฌ ํน์ง ๋ฒกํฐ๋ก ๋ณํํฉ๋๋ค.
- Swin Transformer Block:
- Window Multi-head Self Attention (W-MSA): ๊ฐ window ๋ด์์ self-attention์ ์ํํ์ฌ ๊ณ์ฐ ๋น์ฉ์ ์ค์ ๋๋ค.
- Shifted Window MSA (SW-MSA): window ๊ฐ ๊ฒฝ๊ณ๋ฅผ ๋ณด์ํ์ฌ ์ ์ฒด receptive field๋ฅผ ํ์ฅํฉ๋๋ค.
- Patch Merging: feature map ํฌ๊ธฐ๋ฅผ ์ค์ด๋ฉด์ ์ฑ๋ ์๋ฅผ ๋๋ ค, ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ํ์ฑํฉ๋๋ค.
- ์ฅ์ :
- ๊ณ์ฐ ํจ์จ์ฑ์ด ๋์์ง๋ฉด์๋, ๊ฐ์ฒด detection๊ณผ ๊ฐ์ ํ์คํฌ์์ ๋์ ์ฑ๋ฅ์ ์ ์งํฉ๋๋ค.
๊ฒฐ๋ก
Object Detection ๋ชจ๋ธ์ Fast R-CNN์ ์์์ผ๋ก Cascade R-CNN, Deformable Convolutional Networks, DETR, ๊ทธ๋ฆฌ๊ณ Swin Transformer์ ์ด๋ฅด๊ธฐ๊น์ง ์ง์์ ์ผ๋ก ๋ฐ์ ํด์์ต๋๋ค.
- IoU Threshold์ ์ํฅ:
- ์ ์ ํ IoU threshold ์ ํ์ localization ์ฑ๋ฅ๊ณผ False Positive ๊ฐ์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
- Cascade R-CNN:
- ์ฌ๋ฌ ๋จ๊ณ์ RoI head๋ฅผ ํตํด, ๋ค์ํ IoU ์กฐ๊ฑด์ ํจ๊ณผ์ ์ผ๋ก ๋์ํฉ๋๋ค.
- Deformable Convolution:
- geometric transform์ ์ ์ฐํ๊ฒ ๋์ํ์ฌ ๊ฐ์ฒด์ ์์น๋ฅผ ๋ณด๋ค ์ ํํ๊ฒ ๊ฒ์ถํฉ๋๋ค.
- DETR:
- Transformer๋ฅผ ๋์ ํด ๋ณต์กํ ํ๋ณด ์์ญ ํ์ฒ๋ฆฌ ๊ณผ์ ์ ์ ๊ฑฐํ๊ณ , end-to-end detection์ ์คํํฉ๋๋ค.
- Swin Transformer:
- ํจ์จ์ ์ธ ๊ณ์ฐ๊ณผ ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ํตํด Transformer ๊ธฐ๋ฐ ๋ชจ๋ธ์ ์ฅ์ ์ ๊ทน๋ํํฉ๋๋ค.
Neck ๋ชจ๋: Backbone๊ณผ Head ์ฌ์ด์ ๋ค๋ฆฌ ์ญํ
2 stage detector ๋ชจ๋ธ์ ํฌ๊ฒ Backbone, Neck, Head๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- Backbone: ์ด๋ฏธ์ง์์ ๊ธฐ๋ณธ ํน์ง(feature)์ ์ถ์ถ
- Head: ์ถ์ถ๋ feature๋ฅผ ๋ฐํ์ผ๋ก ๊ฐ์ฒด์ ์์น ๋ฐ ํด๋์ค ์ ๋ณด๋ฅผ ์์ธก
- Neck: Backbone์์ ์ถ์ถํ ๋ค์ํ ์์ค์ feature map์ ๊ฐ๊ณตํด, Head์ ์ ๋ฌํ๋ ์ญํ ์ ํฉ๋๋ค.
๊ธฐ์กด์ object detection ๋ชจ๋ธ๋ค์ Backbone์ ๋ง์ง๋ง layer์์ ์ถ์ถ๋ ๋จ์ผ feature map์ RPN(Region Proposal Network)์ ์ฐ๊ฒฐํด ๊ฐ์ฒด๋ฅผ ํ์งํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ฒด์ ํฌ๊ธฐ๊ฐ ๋ค์ํ๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ ๋จ๊ณ์ feature map์ ํ์ฉํ์ฌ ์ ๋ณด์ ํ๋ถํจ๊ณผ ์ธ๋ฐํจ์ ๋์์ ํ๋ณดํ๋ ๊ฒ์ด ํ์ํด์ก์ต๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ ๋ค์ํ Neck ๊ตฌ์กฐ์ ๊ทธ ๋ฐ์ ๊ณผ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. Feature Pyramid Network (FPN)
FPN์ Neck ๋ชจ๋์ ๋ํ์ ์ธ ๊ตฌ์กฐ๋ก, CNN์ ํต๊ณผํ๋ฉฐ ์ฌ๋ฌ ์์ค์ feature map์ ์์ฑํ ํ, ์์ level์ semantic ์ ๋ณด(์ ํด์๋, ์๋ฏธ, ํจํด)์ ํ์ level์ ์ธ๋ถ ์ ๋ณด(๊ณ ํด์๋, ๊ตฌ์กฐ)๋ฅผ ๊ฒฐํฉํฉ๋๋ค.
- Top-Down Pathway:
์์ level์์ ํ์ level๋ก Nearest Neighbor Upsampling์ ์ ์ฉํ์ฌ ํด์๋๋ฅผ ์ ์ฐจ ๋์ ๋๋ค. - Lateral Connections:
upsampling๋ ์์ level feature map๊ณผ ํ์ level feature map์ ๊ฒฐํฉํ์ฌ, ๋ ์ ๋ณด๊ฐ ๋ชจ๋ ๋ฐ์๋ ํ๋ถํ feature map์ ์์ฑํฉ๋๋ค.
์ฅ์ :
- ๋ค์ํ ํฌ๊ธฐ์ ๊ฐ์ฒด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์งํ ์ ์์ผ๋ฉฐ, ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ๋ก ๋ฆฌ์ฌ์ด์งํ์ง ์์ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ์ฐ์ฐ ๋น์ฉ์ ์ค์ด๋ฉด์๋ ๋ค์ค scale ์ ๋ณด๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
ํ๊ณ:
- top-down ๊ฒฝ๋ก๋ง ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ํ์ level์ ์ธ๋ถ ์ ๋ณด๊ฐ ์์ level๋ก ์ถฉ๋ถํ ์ ๋ฌ๋์ง ์๋ ๋จ์ ์ด ์์ต๋๋ค.
2. Path Aggregation Network (PANet)
PANet์ FPN์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋์ ๋์์ต๋๋ค.
- ์๋ฐฉํฅ ์ ๋ณด ์ ๋ฌ:
FPN์ top-down pathway์ ๋ํด, bottom-up ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํด ํ์ level์ ์ธ๋ถ ์ ๋ณด๋ฅผ ์์ level๋ก ์ ๋ฌํฉ๋๋ค. - Adaptive Feature Pooling:
๊ฐ ๊ฐ์ฒด์ ํฌ๊ธฐ์ ๋ง์ถฐ ์ ์ ํ ํผ๋ผ๋ฏธ๋ ๋ ๋ฒจ์์ ํน์ง์ poolingํ ์ ์๋๋ก ํ์ฌ, ๋ณด๋ค ์ ์ฐํ ๋์์ด ๊ฐ๋ฅํฉ๋๋ค.
์ฅ์ :
- ์์ level์ semantic ์ ๋ณด์ ์ธ๋ถ ์ ๋ณด ๋ชจ๋๋ฅผ ํฌํจํ๊ฒ ๋์ด, ๋ณด๋ค ์ ๋ฐํ ๊ฐ์ฒด ํ์ง๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
3. DetectoRS: Recurrent Feature Pyramid
DetectoRS๋ PANet์ ์์ด๋์ด๋ฅผ ํ ๋จ๊ณ ๋ฐ์ ์์ผ, ์์์ ํ์ level์ feature map ๊ฐ ์ ๋ณด ๊ตํ์ ๋ฐ๋ณต(recurrent) ํ์ฌ ๋์ฑ ํ๋ถํ ํํ์ ํ์ตํฉ๋๋ค.
- Recursive Feature Pyramid:
์ฌ๋ฌ ๋ฒ์ top-down, bottom-up ๊ฒฝ๋ก๋ฅผ ํตํด feature map์ด ์ ๋ณด๋ฅผ ์ถฉ๋ถํ ๊ตํํ ์ ์๋๋ก ํฉ๋๋ค. - Switchable Atrous Convolution (SAC):
๋ค์ํ dilation rate(ํฝ์ฐฝ๋ฅ )๋ฅผ ๋์์ ์ ์ฉํ์ฌ, ๊ฐ๊ธฐ ๋ค๋ฅธ ์ค์ผ์ผ์ ์ ๋ณด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ถ์ถํ๊ณ , receptive field๋ฅผ ํ์ฅํฉ๋๋ค.
์ฅ์ :
- ๋ฐ๋ณต์ ์ธ ์ ๋ณด ๊ตํ์ผ๋ก, ๋ณต์กํ ๊ฐ์ฒด์ ๋ค์ํ ํฌ๊ธฐ์ ๊ฐ์ฒด์ ๋ํ ํ์ง ์ฑ๋ฅ์ ๊ทน๋ํํ ์ ์์ต๋๋ค.
4. Bi-directional Feature Pyramid (BiFPN)
BiFPN์ EfficientDet ๋ชจ๋ธ์์ ๋์
๋ ๊ตฌ์กฐ๋ก, PANet์ฒ๋ผ top-down ๋ฐ bottom-up ๊ฒฝ๋ก๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ฉด์๋, ๋ถํ์ํ ์ฐ๊ฒฐ์ ์ ๊ฑฐํด ๋ณด๋ค ๋จ์ํ๋ฉด์๋ ํจ๊ณผ์ ์ผ๋ก ์ค์ํ ์ ๋ณด๋ฅผ ๊ฒฐํฉํฉ๋๋ค.
- ๊ฐ์ค์น ์กฐ์ :
์ค์ํ feature map์ ๋์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ๊ณ , ๋ ์ค์ํ feature map์ ๋ฎ์ ๊ฐ์ค์น๋ฅผ ์ฃผ์ด, ์ต์ข ๊ฒฐํฉ ์ ์ค์ํ ์ ๋ณด๊ฐ ๋ ํฌ๊ฒ ๋ฐ์๋๋๋ก ํฉ๋๋ค.
์ฅ์ :
- ๊ฒฝ๋ก๊ฐ ๊ฐ๊ฒฐํด์ง๋ฉด์๋, ์ค์ํ ์ ๋ณด๋ ์ ์ ํ ๊ฐ์กฐ๋์ด ์ ์ฒด ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
5. NAS-FPN
NAS-FPN์ Neural Architecture Search (NAS)๋ฅผ ์ด์ฉํ์ฌ ์ต์ ์ Feature Pyramid Network ๊ตฌ์กฐ๋ฅผ ์๋์ผ๋ก ํ์ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์๋ ์ต์ ํ:
NAS๋ฅผ ํตํด ๋ค์ํ ํผ๋ผ๋ฏธ๋ ๊ตฌ์กฐ์ ์ฐ๊ฒฐ ๋ฐฉ์์ ์คํํ๊ณ , ์ต์ ์ ๊ตฌ์กฐ๋ฅผ ์ฐพ์๋ด์ด ์ฑ๋ฅ์ ๊ทน๋ํํฉ๋๋ค. - ๋จ์ :
- COCO dataset๊ณผ ResNet์ ๊ธฐ์ค์ผ๋ก ์ต์ ํ๋์ด ๋ฒ์ฉ์ฑ์ด ๋จ์ด์ง ์ ์์
- ์ต์ ๊ตฌ์กฐ๋ฅผ ์ฐพ๊ธฐ ์ํ ์ถ๊ฐ์ ์ธ search ๋น์ฉ์ด ๋ฐ์ํจ
6. Augmented Feature Pyramid Network (AugFPN)
AugFPN์ FPN์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ธฐ๋ฒ์ ๊ฒฐํฉํ ๋ชจ๋ธ์ ๋๋ค.
- Bottom-Up Path Augmentation:
ํ์ level์ ์ ๋ณด๋ฅผ ์์ level๋ก ์ ๋ฌํฉ๋๋ค. - Residual Feature Augmentation:
๋ค์ํ scale์ feature map์ ์์ฑํ๊ณ , ๋์ผํ ํฌ๊ธฐ๋ก upsampling ํ ๊ฐ์ค์น๋ฅผ ๋์ด ํฉ์ฐํฉ๋๋ค. - Soft RoI Selection:
๋ชจ๋ scale์ feature์์ RoI projection ๋ฐ pooling์ ์ํํ ํ, channel-wise ๊ฐ์ค์น ๊ณ์ฐ์ ํตํด ์ต์ข feature๋ฅผ summationํฉ๋๋ค.
์ฅ์ :
- ๋ค์ํ augmentation ๊ธฐ๋ฒ์ ๊ฒฐํฉํ์ฌ, ๋ณด๋ค ์ ๋ฐํ๊ณ ์ ์ฐํ feature aggregation์ ์ํํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
Neck ๋ชจ๋์ 2 stage detector์์ Backbone๊ณผ Head ์ฌ์ด์ ๋ค๋ฆฌ ์ญํ ์ ํ๋ฉฐ, ๋ค์ํ scale์ feature๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ฒฐํฉํด ๊ฐ์ฒด ํ์ง ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
- FPN: Top-down pathway์ lateral connection์ ํตํด semantic๊ณผ ์ธ๋ถ ์ ๋ณด๋ฅผ ๊ฒฐํฉ
- PANet: ์๋ฐฉํฅ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ์ฌ ์ ๋ณด ์ ๋ฌ์ ๊ฐํ
- DetectoRS: ๋ฐ๋ณต์ ์ ๋ณด ๊ตํ๊ณผ SAC๋ฅผ ํตํด ํ๋ถํ ํํ ํ์ต
- BiFPN: ์ค์ํ feature์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ๋ฉฐ ๊ฐ๊ฒฐํ ๊ตฌ์กฐ๋ก ์ ๋ณด ๊ฒฐํฉ
- NAS-FPN: NAS๋ก ์ต์ ๊ตฌ์กฐ๋ฅผ ์๋์ผ๋ก ํ์
- AugFPN: ๋ค์ํ ๊ธฐ๋ฒ์ ๊ฒฐํฉํ์ฌ ์ธ๋ฐํ feature aggregation ์ํ
Object Detection ๋ชจ๋ธ ๋ฐ์ ๊ณผ ์ต์ ๊ธฐ์ ๋ํฅ
์ด๊ธฐ์ 2 stage detector๋ ๊ฐ์ฒด์ ์์น์ ๋ถ๋ฅ๋ฅผ ๋ถ๋ฆฌํด ์ฒ๋ฆฌํ์ฌ ๋์ ์ ํ๋๋ฅผ ๋ณด์์ง๋ง, ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ ธ์ต๋๋ค. ์ด์ ๋ฐํด, 1 stage detector๋ ์ ์ฒด ์ด๋ฏธ์ง๋ฅผ ํ ๋ฒ์ ์ฒ๋ฆฌํ์ฌ ์ค์๊ฐ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์์ผฐ์ต๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ 1 stage detector์ ๋ํ ๋ชจ๋ธ๋ค๊ณผ ํจ๊ป, ์ต์ ๊ธฐ์ ๋ค์ด object detection์ ์ด๋ป๊ฒ ์ ์ฉ๋๊ณ ์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. 1 Stage Detector์ ๋ฑ์ฅ
1-1. YOLO ์๋ฆฌ์ฆ
YOLO (You Only Look Once) ๋ 1 stage detector์ ๋ํ์ ์ธ ์์์ ๋๋ค.
-
YOLO v1:
- GoogLeNet์ ๋ณํํ์ฌ 24๊ฐ์ convolution layer์ 2๊ฐ์ Fully-Connected (FC) layer๋ก ๊ตฌ์ฑ๋จ
- ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ 7ร7 grid๋ก ๋๋๊ณ , ๊ฐ grid๋ง๋ค 2๊ฐ์ bounding box์ confidence score, ๊ทธ๋ฆฌ๊ณ conditional class probability๋ฅผ ์์ธก
- NMS (Non-Maximum Suppression)๋ฅผ ํตํด ์ต์ข bbox ๋์ถ
- ์ฅ์ : ์ด๋ฏธ์ง ์ ์ฒด๋ฅผ ๋ณด๊ณ ๊ฐ์ฒด์ ๋งฅ๋ฝ์ ์ ๋ณด๋ฅผ ๋ฐ์ํ์ฌ ์ ํ๋๊ฐ ๋์
- ๋จ์ : grid๋ณด๋ค ์์ ๊ฐ์ฒด ํ์ง์ ํ๊ณ๊ฐ ์์
-
YOLO v2:
- Batch Normalization ๋์ , ์ต์ปค ๋ฐ์ค ๋์ , K-means clustering์ ํตํ ์ต์ปค ๋ฐ์ค ํฌ๊ธฐ ๊ฒฐ์
- ์ขํ ๋์ offset ์์ธก, Passthrough Layer๋ฅผ ํตํด early feature map์ late feature map์ ๊ฒฐํฉ
- ํฅ์: mAP๊ฐ ์ฝ 2% ์์นํ๊ณ , ๋ค์ํ ํฌ๊ธฐ์ ์ ๋ ฅ ์ด๋ฏธ์ง ์ง์ ๋ฐ ์๋ ๊ฐ์
-
YOLO v3:
- Skip connection ์ ์ฉ, ์๋ก ๋ค๋ฅธ 3๊ฐ์ ์ค์ผ์ผ์ feature map์ ํ์ฉํ multi-scale detection
- FPN๊ณผ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ์์ ๋ ๋ฒจ์ semantic ์ ๋ณด์ ํ์ ๋ ๋ฒจ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ๊ฒฐํฉ
-
YOLO v4:
- ์ ํ๋์ ์๋๋ฅผ ๋ชจ๋ ํฅ์์ํค๊ธฐ ์ํด Bag of Freebies (BOF) ์ Bag of Specials (BOS) ์ ๋ต ๋์
- BOF: ์ถ๊ฐ์ ์ธ inference ๋น์ฉ ์์ด ๋ฐ์ดํฐ ์ฆ๊ฐ, label smoothing, GIoU Loss ๋ฑ์ผ๋ก ์ฑ๋ฅ ํฅ์
- BOS: receptive field ํ์ฅ, global attention, ํ์ฒ๋ฆฌ(NMS) ๊ฐ์ ๋ฑ์ผ๋ก ์ ํ๋ ๊ฐํ
- Backbone: CSPDarknet53๋ฅผ ์ฌ์ฉํ์ฌ gradient ์ฌ์ฌ์ฉ ๋ฌธ์ ๊ฐ์
- ํน์ง: ํฐ ์ ๋ ฅ ์ฌ์ด์ฆ, ๊น์ ๋คํธ์ํฌ, ๋ค์ํ augmentation ๋ฐ multi-scale feature integration
- ์ ํ๋์ ์๋๋ฅผ ๋ชจ๋ ํฅ์์ํค๊ธฐ ์ํด Bag of Freebies (BOF) ์ Bag of Specials (BOS) ์ ๋ต ๋์
1-2. SSD (Single Shot Multibox Detector)
- ๊ตฌ์ฑ:
- VGG16์ backbone์ผ๋ก ์ฌ์ฉํ๊ณ , extra convolution layer์์ 6๊ฐ์ ์๋ก ๋ค๋ฅธ ์ค์ผ์ผ์ feature map์ ์ถ์ถ
- ๊ฐ feature map ์ ์์ ๋ฏธ๋ฆฌ ๊ณ์ฐ๋ default anchor box๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด์ ์์น์ ํด๋์ค๋ฅผ ์์ธก
- ํ์ต:
- Hard negative mining๊ณผ NMS๋ฅผ ์ ์ฉ, localization loss์ confidence loss๋ฅผ ์ฌ์ฉ
- ์ฅ์ :
- ์ฌ๋ฌ scale์ feature map์ ์ฌ์ฉํด ์์ ๊ฐ์ฒด์ ํฐ ๊ฐ์ฒด ๋ชจ๋๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ง
1-3. RetinaNet
- ๋ฌธ์ ํด๊ฒฐ:
- 1 stage detector์์๋ anchor box๊ฐ ๋๋ถ๋ถ ๋ฐฐ๊ฒฝ(negative sample)์ธ class imbalance ๋ฌธ์ ๊ฐ ๋ฐ์
- ํด๊ฒฐ:
- Focal Loss: cross entropy loss์ scaling factor๋ฅผ ๋์ , ์ฌ์ด ์์ ๋ ๊ฐ์ค์น๋ฅผ ๋ฎ์ถ๊ณ ์ด๋ ค์ด ์์ ๋ ๋์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ์ฌ ํ์ต ์ง์ค๋ ํฅ์
- ํจ๊ณผ:
- ๋ฐฐ๊ฒฝ ํ์ต์ ์ค์ด๊ณ ์ค์ ๊ฐ์ฒด ํ์ต์ ์ง์คํ์ฌ ์ฑ๋ฅ ํฅ์
2. ์ต์ ๊ธฐ์ ๋ฐ Anchor-Free ์ ๊ทผ๋ฒ
2-1. M2Det
- ๋ฌธ์ :
๊ธฐ์กด FPN์ ๋จ์ผ ๋ ๋ฒจ์ ์ ๋ณด๋ง ํ์ฉํ์ฌ ๋จ์ํ ์ธํ๊ณผ ๋ณต์กํ ์ธํ์ ๋์์ ์ฒ๋ฆฌํ๋ ๋ฐ ํ๊ณ๊ฐ ์์ - ํด๊ฒฐ:
- MLFPN (Multi-Level Feature Pyramid Network):
- Backbone์์ ๋์จ ๋ค์ํ scale์ feature map์ fusionํ๋ ์ฌ๋ฌ ๋ชจ๋๋ก ๊ตฌ์ฑ
- FFMv1: ์๋ก ๋ค๋ฅธ scale์ feature map 2๊ฐ๋ฅผ ํฉ์ณ base feature map ์์ฑ
- TUM (Thinned U-shape Module): encoder-decoder ๊ตฌ์กฐ๋ก ๋ค์ํ scale์ feature ์์ฑ
- FFMv2: ์ด์ TUM ์ถ๋ ฅ ์ค ๊ฐ์ฅ ํฐ feature map์ ํฉ์ณ ๋ค์ TUM ์ ๋ ฅ
- SFAM (Scale-wise Feature Aggregation Module): ์ฑ๋-wise attention์ ์ ์ฉํด ๊ฐ scale์ ์ค์๋๋ฅผ ์กฐ์
- Backbone์์ ๋์จ ๋ค์ํ scale์ feature map์ fusionํ๋ ์ฌ๋ฌ ๋ชจ๋๋ก ๊ตฌ์ฑ
- ๊ฒฐ๊ณผ:
- shallow level์ ๋จ์ํ ์ธํ, deep level์ ๋ณต์กํ ์ธํ์ ํจ๊ณผ์ ์ผ๋ก ํ์ง
- MLFPN (Multi-Level Feature Pyramid Network):
2-2. Anchor-Free Approaches
- CornerNet:
- Anchor box ์์ด, ๊ฐ์ฒด์ top-left์ bottom-right corner๋ฅผ ์ง์ ์์ธก
- Hourglass Network: encoder-decoder ๊ตฌ์กฐ๋ก ๊ธ๋ก๋ฒ ๋ฐ ๋ก์ปฌ ์ ๋ณด๋ฅผ ๋ชจ๋ ์ถ์ถ
- Corner Pooling: ๋ชจ์๋ฆฌ ์ ๋ณด๋ฅผ ๊ฐํํ์ฌ ์ ํํ corner ์์น๋ฅผ ์์ธก
- CenterNet:
- ๊ฐ์ฒด ์ค์ฌ์ ์ ์์ธกํ์ฌ, ํ๋์ anchor box๋ฅผ ์์ฑํ๋ ๋ฐฉ์
- FCOS:
- ์ค์ฌ์ ์ผ๋ก๋ถํฐ bbox ๊ฒฝ๊ณ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ง์ ์์ธก
2-3. DETR (Detection Transformer)
- ํ์ :
- Transformer๋ฅผ object detection์ ๋์ ํ์ฌ, ๊ธฐ์กด์ ๋ณต์กํ ํ๋ณด ์์ญ(NMS) ํ์ฒ๋ฆฌ ๋จ๊ณ๋ฅผ ์ ๊ฑฐ
- ๊ตฌ์ฑ:
- Backbone์ผ๋ก CNN์ ์ฌ์ฉํด feature map์ ์ถ์ถํ ํ Transformer์ ์ ๋ ฅ
- Transformer๋ N๊ฐ์ ์ถ๋ ฅ(๊ฐ์ฒด ์)์ ์์ฑํ๋ฉฐ, ๋ถ์กฑํ ๊ฒฝ์ฐ "no object"๋ก padding
- ์ฅ์ :
- End-to-end ํ์ต ๊ฐ๋ฅ, NMS ๋ถํ์
2-4. Swin Transformer
- ๋ฌธ์ :
- Transformer๋ ์๋ ๊ณ์ฐ ๋น์ฉ์ด ๋์ ์ค์๊ฐ object detection์ ๋ถ์ ํฉํ ์ ์์
- ํด๊ฒฐ:
- Swin Transformer:
- ์ด๋ฏธ์ง ํจ์น๋ฅผ ๋๋์ด ์ฒ๋ฆฌํ๊ณ , window ๊ธฐ๋ฐ self-attention(W-MSA)๊ณผ Shifted Window MSA(SW-MSA)๋ฅผ ๋์ ํด ๊ณ์ฐ ํจ์จ์ฑ์ ๋์
- ๊ฐ stage๋ง๋ค feature map ํฌ๊ธฐ๋ฅผ ์ ๋ฐ์ผ๋ก ์ค์ฌ ํจ์จ์ ์ธ multi-scale feature extraction ์ ๊ณต
- Swin Transformer:
- ์ฅ์ :
- ๋์ ํจ์จ์ฑ๊ณผ ์ฐ์ํ ์ฑ๋ฅ
๊ฒฐ๋ก
1 stage detector๋ ์ ์ฒด ์ด๋ฏธ์ง๋ฅผ ํ ๋ฒ์ ์ฒ๋ฆฌํจ์ผ๋ก์จ, 2 stage detector์์ ๋ฐ์ํ๋ region proposal์ ์ฐ์ฐ ๋น์ฉ๊ณผ ์๋ ๋ฌธ์ ๋ฅผ ํฌ๊ฒ ๊ฐ์ ํฉ๋๋ค.
- YOLO ์๋ฆฌ์ฆ์ SSD:
- ์ค์๊ฐ ์ฑ๋ฅ๊ณผ ๋งฅ๋ฝ์ ์ ๋ณด๋ฅผ ํ์ฉํ detection์ ๊ฐ์ ์ ๋ณด์ ๋๋ค.
- RetinaNet:
- Focal Loss ๋์ ์ผ๋ก ํด๋์ค ๋ถ๊ท ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
- M2Det:
- multi-level, multi-scale feature integration์ ํตํด ๋ค์ํ ๊ฐ์ฒด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์งํฉ๋๋ค.
- Anchor-Free ์ ๊ทผ๋ฒ (CornerNet, CenterNet, FCOS):
- Anchor box์ ๋ณต์ก์ฑ์ ์ ๊ฑฐํ๊ณ , ๋ณด๋ค ์ง๊ด์ ์ธ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ๊ฒ์ถํฉ๋๋ค.
- Transformer ๊ธฐ๋ฐ ๋ชจ๋ธ (DETR, Swin Transformer):
- End-to-end ํ์ต๊ณผ ๊ณ์ฐ ํจ์จ์ฑ ๊ฐ์ ์ ํตํด ์ต์ object detection ๊ธฐ์ ์ ์๋ก์ด ๋ฐฉํฅ์ ์ ์ํฉ๋๋ค.
MMDetection: PyTorch ๊ธฐ๋ฐ Object Detection ๋ฅ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉํ๊ธฐ
MMDetection์ด๋ Detectron2์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฏธ๋ฆฌ ๊ฐ์ถฐ์ง configuration ํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๊ฒ object detection ๋ชจ๋ธ์ ๊ตฌ์ถํ๊ณ ํ์ตํ ์ ์์ต๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ MMDetection์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ๋ฐ configuration ์์ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ปค์คํ ๋ฐฑ๋ณธ ๋ชจ๋ธ ๋ฑ๋ก ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
1. MMDetection ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
MMDetection์ PyTorch ๊ธฐ๋ฐ์ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๋ค์ํ ์ต์ object detection ์๊ณ ๋ฆฌ์ฆ(Faster R-CNN, Mask R-CNN, RetinaNet ๋ฑ)์ ์ง์ํฉ๋๋ค.
1-1. ์ฃผ์ Import
from mmcv import Config
from mmdet.datasets import build_dataset, build_dataloader, replace_ImageToTensor
from mmdet.models import build_detector
from mmdet.apis import train_detector # (์ฃผ์: 'apls'๊ฐ ์๋๋ผ 'apis' ์
๋๋ค.)
from mmdet.utils import get_device
1-2. Configuration ํ์ผ ๋ค๋ฃจ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก MMDetection์ ๋ฏธ๋ฆฌ ์์ฑ๋ configuration ํ์ผ์ ์์๋ฐ์ ํ์ํ ๋ถ๋ถ๋ง ์์ ํด์ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด Faster R-CNN์ ๊ธฐ๋ฐ์ผ๋ก Trash detection ๋ชจ๋ธ์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
# configuration ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
cfg = Config.fromfile('./configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py')
# ๋ฐ์ดํฐ ๊ฒฝ๋ก ์ค์
route = './dataset/'
# ํด๋์ค ์์
classes = ("General Trash", "Paper", "Paper pack", "Metal", "Glass",
"Plastic", "Styrofoam", "Plastic bag", "Battery", "Clothing")
cfg.model.roi_head.bbox_head.num_classes = len(classes)
# training set ์ค์
cfg.data.train.classes = classes
cfg.data.train.img_prefix = route
cfg.data.train.ann_file = route + 'train.json'
cfg.data.train.pipeline[2]['img_scale'] = (512, 512) # resize ํฌ๊ธฐ
# validation set ์ค์
cfg.data.val.classes = classes
cfg.data.val.img_prefix = route
cfg.data.val.ann_file = route + 'val.json'
cfg.data.val.pipeline[1]['img_scale'] = (512, 512)
# test set ์ค์
cfg.data.test.classes = classes
cfg.data.test.img_prefix = route
cfg.data.test.ann_file = route + 'test.json'
cfg.data.test.pipeline[1]['img_scale'] = (512, 512)
# ๊ธฐํ ํ์ต ์ค์
cfg.data.samples_per_gpu = 4
cfg.seed = 2020
cfg.gpu_ids = [0]
cfg.work_dir = './work_dirs/faster_rcnn_r50_fpn_1x_trash'
cfg.optimizer_config.grad_clip = dict(max_norm=35, norm_type=2)
cfg.checkpoint_config = dict(max_keep_ckpts=3, interval=1)
cfg.device = get_device()
1-3. Dataset, Model ๋ฐ ํ์ต
# Dataset ์ ์ (ํ์ต์ฉ)
datasets = [build_dataset(cfg.data.train)]
# Model ์ ์
model = build_detector(cfg.model)
model.init_weights() # ๊ฐ์ค์น ์ด๊ธฐํ
# ํ์ต ์ํ
train_detector(model, datasets[0], cfg, distributed=False, validate=True)
2. Custom Backbone ๋ชจ๋ธ ๋ฑ๋กํ๊ธฐ
MMDetection์์๋ ๊ธฐ๋ณธ ์ ๊ณต๋๋ ๋ค์ํ ๋ฐฑ๋ณธ ์ธ์๋, ์ง์ ๊ตฌํํ ์ปค์คํ ๋ฐฑ๋ณธ์ ๋ฑ๋กํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
2-1. Custom Backbone ๋ชจ๋ธ ์ฝ๋ ์์
import torch.nn as nn
from ..builder import BACKBONES # mmdetection์ ๋ฐฑ๋ณธ ๋น๋ ๋ชจ๋
@BACKBONES.register_module()
class MyModel(nn.Module):
def __init__(self, args):
super(MyModel, self).__init__()
# ํ์ํ layer ์ ์
# ์) self.conv = nn.Conv2d(...)
def forward(self, x):
# forward pass๋ฅผ ๊ตฌํ (tuple ํํ์ feature map์ returnํด์ผ ํจ)
# ์) feat = self.conv(x)
return (feat,) # tuple๋ก ๋ฐํ
์ด ํ์ผ์ mmdetection/mmdet/models/backbones/mymodel.py
๊ฒฝ๋ก์ ์ ์ฅํฉ๋๋ค.
2-2. Configuration์ Custom Backbone ์ ์ฉ
cfg.model.backbone = dict(
type='MyModel',
args='arg1' # MyModel์์ ํ์๋ก ํ๋ ์ธ์ ๊ฐ
)
์ด๋ ๊ฒ ์์ ํ ํ, ๊ธฐ์กด๊ณผ ๋์ผํ๊ฒ model์ buildํ๊ณ ํ์ตํ๋ฉด ์ปค์คํ ๋ฐฑ๋ณธ์ด ์ ์ฉ๋ object detection ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
MMDetection์ ๋ฏธ๋ฆฌ ๊ตฌ์ฑ๋ configuration ํ์ผ์ ์์ ํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ต์ object detection ๋ชจ๋ธ์ ์ฝ๊ฒ ๊ตฌ์ถํ๊ณ ํ์ตํ ์ ์๋๋ก ๋์์ค๋๋ค.
- ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ: ์ค์ ํ์ผ์์ ๋ฐ์ดํฐ, ๋ชจ๋ธ, ํ์ต ํ๋ผ๋ฏธํฐ ๋ฑ์ ์์ ํ์ฌ ์ฌ์ฉํฉ๋๋ค.
- Custom Backbone ๋ฑ๋ก: ์ง์ ๋ง๋ ๋ฐฑ๋ณธ ๋ชจ๋ธ์ ๋ฑ๋กํด ํ์ฉํ ์ ์์ด, ๋ณด๋ค ๋ค์ํ ๋ชจ๋ธ ๊ตฌ์กฐ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
Detectron2๋ก Object Detection ๋ชจ๋ธ ๊ตฌ์ถํ๊ธฐ
Detectron2๋ Facebook AI Research์์ ๊ฐ๋ฐํ PyTorch ๊ธฐ๋ฐ ๋ฅ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, object detection, segmentation ๋ฑ ๋ค์ํ ์ปดํจํฐ ๋น์ ํ์คํฌ๋ฅผ ์์ฝ๊ฒ ์ํํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ์ง์ ๊ตฌํํ๊ธฐ์๋ ๋ณต์กํ object detection ๋ชจ๋ธ์ ๋ฏธ๋ฆฌ ์ค๋น๋ configuration ํ์ผ ํ๋๋ง ์์ ํ์ฌ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ปค์คํฐ๋ง์ด์ง๋ ์ฉ์ดํฉ๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ Detectron2์ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ๊ณผ ํจ๊ป, ์ปค์คํ ๋ฐ์ดํฐ augmentation, dataset ๋ฑ๋ก, ํ์ต, ๊ทธ๋ฆฌ๊ณ custom backbone ๋ชจ๋ธ ๋ฑ๋ก ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
1. Detectron2 ๊ธฐ๋ณธ ์ค์
1-1. Import ๋ฐ Logger ์ค์
import os
import detectron2
from detectron2.utils.logger import setup_logger
setup_logger()
from detectron2 import model_zoo
from detectron2.config import get_cfg
from detectron2.engine import DefaultTrainer
from detectron2.data import DatasetCatalog, MetadataCatalog, register_coco_instances
import detectron2.data.transforms as T
from detectron2.evaluation import COCOEvaluator
from detectron2.data import build_detection_train_loader, build_detection_test_loader
- ์ค๋ช
:
Detectron2์ ๋ก๊ทธ๋ฅผ ์ค์ ํ๊ณ , ๋ชจ๋ธ, configuration, ๋ฐ์ดํฐ์ , ํ์ต, ํ๊ฐ์ ํ์ํ ๋ชจ๋๋ค์ importํฉ๋๋ค.
2. Configuration ํ์ผ ๋ค๋ฃจ๊ธฐ
๋ฏธ๋ฆฌ ์ค๋น๋ configuration ํ์ผ์ ๋ถ๋ฌ์์ ํ์ํ ๋ถ๋ถ๋ง ์์ ํฉ๋๋ค.
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file('COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml'))
# Dataset ์ค์
cfg.DATASETS.TRAIN = ("coco_trash_train",)
cfg.DATASETS.TEST = ("coco_trash_val",)
# ํ์ต ์ค์
cfg.DATALOADER.NUM_WORKERS = 2
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url('COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml')
cfg.SOLVER.IMS_PER_BATCH = 4
cfg.SOLVER.BASE_LR = 0.001
cfg.SOLVER.MAX_ITER = 3000
cfg.SOLVER.STEPS = (1000, 1500)
cfg.SOLVER.GAMMA = 0.05
cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 128
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 10
cfg.TEST.EVAL_PERIOD = 500
- ์ค๋ช
:
๋ชจ๋ธ ๊ตฌ์ฑ, ๋ฐ์ดํฐ์ , ํ์ต ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ์์ ํฉ๋๋ค.
3. ๋ฐ์ดํฐ์ ๋ฑ๋ก ๋ฐ ๋ฉํ๋ฐ์ดํฐ ์ค์
COCO ํ์์ annotation ํ์ผ๊ณผ ์ด๋ฏธ์ง ๋๋ ํ ๋ฆฌ๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ์ ์ ๋ฑ๋กํฉ๋๋ค.
# train dataset ๋ฑ๋ก
register_coco_instances('coco_trash_train', {}, '/home/data/train.json', '/home/data')
# validation dataset ๋ฑ๋ก
register_coco_instances('coco_trash_val', {}, '/home/data/val.json', '/home/data')
# ๋ฉํ๋ฐ์ดํฐ ์ค์ (์ ํ ์ฌํญ)
classes = ["General Trash", "Paper", "Paper pack", "Metal", "Glass",
"Plastic", "Styrofoam", "Plastic bag", "Battery", "Clothing"]
MetadataCatalog.get('coco_trash_train').set(thing_classes=classes)
MetadataCatalog.get('coco_trash_val').set(thing_classes=classes)
- ์ค๋ช
:
register_coco_instances
๋ฅผ ํตํด dataset์ ์ด๋ฆ, annotation ํ์ผ ๊ฒฝ๋ก, ์ด๋ฏธ์ง ํด๋๋ฅผ ์ง์ ํฉ๋๋ค.
4. Augmentation Mapper ์ ์
Detectron2๋ MMDetection์ฒ๋ผ ๋ด์ฅ๋ augmentation ๊ธฐ๋ฅ์ด ์ ํ์ ์ด๋ฏ๋ก, ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ๋ฐ augmentation์ custom mapper๋ก ์ง์ ์ ์ํฉ๋๋ค.
import copy
import torch
from detectron2.data import detection_utils as utils
def MyMapper(dataset_dict):
dataset_dict = copy.deepcopy(dataset_dict)
image = utils.read_image(dataset_dict['file_name'], format='BGR')
transform_list = [
T.RandomFlip(prob=0.5, horizontal=False, vertical=True),
T.RandomBrightness(0.8, 1.8),
T.RandomContrast(0.6, 1.3)
]
image, transforms = T.apply_transform_gens(transform_list, image)
dataset_dict['image'] = torch.as_tensor(image.transpose(2, 0, 1).astype('float32'))
annos = [
utils.transform_instance_annotations(obj, transforms, image.shape[:2])
for obj in dataset_dict.pop('annotations')
if obj.get('iscrowd', 0) == 0
]
instances = utils.annotations_to_instances(annos, image.shape[:2])
dataset_dict['instances'] = utils.filter_empty_instances(instances)
return dataset_dict
- ์ค๋ช
:
์ด๋ฏธ์ง์ annotation์ ์ ์ฉํ augmentation์ ์ ์ํ๊ณ , ์ด๋ฅผ ์ ์ฉํ ํ ๊ฒฐ๊ณผ๋ฅผ tensor ํ์์ผ๋ก ๋ณํํ์ฌ ๋ฐํํฉ๋๋ค.
5. Trainer ํด๋์ค ์ ์ ๋ฐ ํ์ต
Custom trainer๋ฅผ ์ ์ํ์ฌ, ํ์ต ๋ฐ์ดํฐ ๋ก๋์ augmentation mapper๋ฅผ ์ ์ฉํ๊ณ , evaluator๋ฅผ ์ค์ ํฉ๋๋ค.
class MyTrainer(DefaultTrainer):
@classmethod
def build_train_loader(cls, cfg, sampler=None):
return build_detection_train_loader(cfg, mapper=MyMapper, sampler=sampler)
@classmethod
def build_evaluator(cls, cfg, dataset_name, output_folder=None):
if output_folder is None:
os.makedirs('./output_eval', exist_ok=True)
output_folder = './output_eval'
return COCOEvaluator(dataset_name, cfg, False, output_folder)
os.makedirs(cfg.OUTPUT_DIR, exist_ok=True)
trainer = MyTrainer(cfg)
trainer.resume_or_load(resume=False)
trainer.train()
- ์ค๋ช
:
MyTrainer
๋DefaultTrainer
๋ฅผ ์์๋ฐ์, custom train loader์ evaluator๋ฅผ ์ ์ฉํฉ๋๋ค.
6. Custom Backbone ๋ชจ๋ธ ๋ฑ๋กํ๊ธฐ
์ํ๋ ๋ชจ๋ธ์ด ์๋ ๊ฒฝ์ฐ, ์ปค์คํ ๋ฐฑ๋ณธ์ ๋ฑ๋กํ ์ ์์ต๋๋ค.
from detectron2.modeling import BACKBONE_REGISTRY, Backbone, ShapeSpec
import torch.nn as nn
@BACKBONE_REGISTRY.register()
class MyBackbone(Backbone):
def __init__(self, cfg, input_shape: ShapeSpec):
super(MyBackbone, self).__init__()
# ํ์ํ layer ์ ์ (์: CNN layers)
self.conv = nn.Conv2d(input_shape.channels, 64, kernel_size=3, stride=1, padding=1)
self._out_features = ["res5"] # ์ถ๋ ฅ feature ์ด๋ฆ ์ ์
def forward(self, x):
# forward pass ๊ตฌํ
x = self.conv(x)
return {"res5": x} # dict ํํ๋ก feature map ๋ฐํ
def output(self):
# ์ถ๋ ฅ ํน์ฑ ์ ๋ณด ๋ฐํ (์: ์ฑ๋ ์, stride ๋ฑ)
return {"res5": ShapeSpec(channels=64, stride=1)}
# configuration ์์ ํ์ฌ custom backbone ์ฌ์ฉ
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file('COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml'))
cfg.MODEL.BACKBONE.NAME = 'MyBackbone'
model = build_model(cfg)
- ์ค๋ช
:
MyBackbone
ํด๋์ค๋ฅผ ์ ์ํ๊ณ , Detectron2์ BACKBONE_REGISTRY์ ๋ฑ๋กํ ํ, configuration์์ custom backbone์ผ๋ก ์ง์ ํฉ๋๋ค.
๊ฒฐ๋ก
Detectron2๋ ๋ฏธ๋ฆฌ ๊ตฌ์ฑ๋ configuration ํ์ผ์ ์์ ํ๋ ๊ฒ๋ง์ผ๋ก๋ object detection ๋ชจ๋ธ์ ์์ฝ๊ฒ ๊ตฌ์ถํ๊ณ ํ์ตํ ์ ์๋ ๊ฐ๋ ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- Configuration: Model Zoo์ config ํ์ผ์ ๋ถ๋ฌ์ dataset, ํ์ต ํ๋ผ๋ฏธํฐ ๋ฑ์ ์์ ํ ์ ์์ต๋๋ค.
- Augmentation: Custom mapper๋ฅผ ์ ์ํ์ฌ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ๋ฐ augmentation์ ์ ์ฉํ ์ ์์ต๋๋ค.
- Custom Trainer: ์ปค์คํฐ๋ง์ด์ฆ๋ trainer๋ฅผ ํตํด ํ์ต ๋ฐ ํ๊ฐ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- Custom Backbone: ์ํ๋ ๋ชจ๋ธ์ด ์์ ๊ฒฝ์ฐ, ์ปค์คํ ๋ฐฑ๋ณธ์ ๋ฑ๋กํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.