๐ ํด๋น ํฌ์คํ ์์ ์ฌ์ฉ๋ ์ปจํ ์ธ ๋ ์ธํ๋ฐ์ ๋ฅ๋ฌ๋ ์ปดํจํฐ ๋น์ ์๋ฒฝ ๊ฐ์ด๋ ๊ฐ์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํ์์ ์๋ฆฝ๋๋ค. ์ค๋ช ์์ ์ฌ์ฉ๋ ์๋ฃ๋ ์ต๋ํ ์ ๊ฐ ์ง์ ์ฌ๊ตฌ์ฑํ ์๋ฃ์์ ์๋ฆฝ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ์ ๋ฒ์ ์๊ฐํ๋ Fast RCNN์ ๋๋ฆฐ Detection ์๋๋ฅผ ๊ทน๋ณตํ ์ ์๋ Faster RCNN ๋ชจ๋ธ์ ๋ํด ์๊ฐํ๋ ค ํ๋ค. (๋ง์ฝ Object Detection์ ๋ํด ์ ๋ชจ๋ฅด์ ๋ค๋ฉด Object Detection ์๋ฆฌ์ฆ๋ฅผ ์ฝ๊ณ ์ค์ค ๊ฒ์ ๊ถ๊ณ ํฉ๋๋ค!)
์ด์ ๊น์ง ์ดํด๋ณธ RCNN, SPP Net, Fast RCNN ๋ชจ๋ธ๋ค์ ๊ณตํต์ ์ ๊ฐ์ฒด๊ฐ '์์ ๋ฒํ' ์์ญ์ ์ถ์ฒํด์ฃผ๋ Region Proposal ๋จ๊ณ๋ฅผ Selective Search ๋ฐฉ๋ฒ์ ์ฌ์ฉํด ๊ตฌํํ๋ค๋ ์ ์ด๋ค. ํ์ง๋ง Selective Search๋ ๋คํธ์ํฌ ๊ตฌ์กฐ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค๋ ๋จ์ ์ด ์กด์ฌํ๋ค. ๊ทธ๋์ ๋ฐ์ด๋ ์ฐ๊ตฌ์ ๋ถ๋ค์ Region Proposal ๋จ๊ณ๋ ๋ฅ๋ฌ๋๊ณผ ๊ฐ์ ๋คํธ์ํฌ ๊ตฌ์กฐ๋ก ๋ง๋ค์ด ํ์ง ์๋๋ฅผ ๋์ด์๋ ๋ชฉํ๋ฅผ ์ค์ ํ๋ค. ๊ทธ ๊ฒฐ๊ณผ RPN(Regions Proposal Network)๊ฐ ํ์ํ๋ค.
1. RPN(Regions Proposal Network)๋?
RPN์ด๋, VGG, Resnet๊ณผ ๊ฐ์ Feature Extractor์ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ๋ฃ์ด ๋์จ Feature Map์๋ค๊ฐ ์ปจ๋ณผ๋ฃจ์ ์ ์ ์ฉํด ํด๋น Region๋ค์ ๊ฐ์ฒด๊ฐ ์๋์ง ์๋์ง ๋ถ๋ฅํ๊ณ ๋์์ ๊ทธ ๊ฐ์ฒด๊ฐ ์์ ๋งํ Region์ ๋ฐ์ด๋ฉ ๋ฐ์ค ์ขํ๋ฅผ ํ๊ทํ๋ ๊ฒ์ ํจ๊ป ์ํํ๋ ๋คํธ์ํฌ๋ฅผ ์๋ฏธํ๋ค. ๊ทธ๋์ ๋คํธ์ํฌ๋ผ๋ ํน์ฑ์ผ๋ก ์ธํด GPU ์ด์ฉ์ด ๊ฐ๋ฅํ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ธฐ์กด์ Selective Search ๋ณด๋ค ์๋๊ฐ ๋น ๋ฅธ ์ฅ์ ์ด ์๋ค. ํ ์คํธ๋ก ๋งํ๋ฉด ๋น์ฐํ(?) ์ ์ดํด๊ฐ ์ ๊ฐ ๊ฒ์ด๋ค. ๊ทธ๋ฆผ์ผ๋ก ์ดํด๋ณด์.
RPN์ ์ ๊ทธ๋ฆผ์์ ๋ณด๋ ๊ฒ์ฒ๋ผ Feature Map์ ์ปจ๋ณผ๋ฃจ์ ์ 2๋ฒ ์ฌ์ฉํด Fully Convolutional Layer๋ฅผ ๋ง๋ ๋ค. ์ค๊ฐ์ $1 \times 1$ ์ปจ๋ณผ๋ฃจ์ ์ ์ฌ์ฉํ๋ ์ด์ ๋ $Channel$ ๊ฐ์๋ฅผ 2๊ฐ, 4๊ฐ๋ก ๋ง์ถ์ด ์ฃผ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.(์ฐธ๊ณ ๋ก $1 \times 1$ ์ปจ๋ณผ๋ฃจ์ ์ ์ปจ๋ณผ๋ฃจ์ ์ด์ ์ ๋์ด, ๋๋น๋ ๋์ผํ๋ $Channel$์ ๋ง์๋๋ก ์กฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.)
$1 \times 1$ ์ปจ๋ณผ๋ฃจ์ ์ ํตํด ๋์จ ๊ฒฐ๊ณผ๊ฐ์ Ground Truth์์ IoU๊ฐ์ ๋น๊ตํ๋ฉด์ IoU๊ฐ์ด 0.5๋ณด๋ค ํฌ๋ฉด Positive Anchor Box, ์์ผ๋ฉด Negative Anchor Box๋ก ๋ถ๋ฅํ๋ค. ๊ฒฐ๊ตญ ํด๋น Region์ ๊ฐ์ฒด๊ฐ ์์ ๋ฒํ์ง ์๋์ง(์ด์ง ๋ถ๋ฅ)๋ฅผ ์ํํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐ์ด๋ฉ ๋ฐ์ค์ ์ขํ($x_1, y_1, x_2, y_2$)๋ฅผ ํ๊ท๋ ๋์์ ์ํํ๊ฒ ๋๋ค.
์ฐธ๊ณ ๋ก ์์ ๊ฐ์ด RPN์์ 2๋ฒ์ ์ปจ๋ณผ๋ฃจ์ ์ ๊ฑฐ์น๋ ์ด์ ๋ $1 \times 1$ ์ปจ๋ณผ๋ฃจ์ ์ ๊ฑฐ์ณ์ผ Anchor Box๋ณ๋ก ํ์ต๋ ํด๋์ค์ ๋ฐ์ด๋ฉ ๋ฐ์ค ์ขํ๋ฅผ ์ฝ๊ฒ ์ถ์ถํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํ๋ค.
2. RPN์ Loss
RPN๋ ๋ฅ๋ฌ๋๊ณผ ๊ฐ์ด ์ผ์ข ์ ๋คํธ์ํฌ๋ผ๊ณ ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ๋คํธ์ํฌ ๋ด๋ถ์์ ํ์ต์ ์ํค๊ธฐ ์ํด์๋ Cost Function์ด ํ์ํ๋ค. RPN ๋ํ ๋ถ๋ฅ์ ํ๊ท ๋ฌธ์ ๋ฅผ ๋์์ ์ํํ๊ธฐ ๋๋ฌธ์ Multi-task Loss๋ฅผ ์ฌ์ฉํ๋ค. ๋ค์ ์์์ ์ดํด๋ณด์.
๋ค๋ฅธ ๋ชจ๋ธ๋ค๊ณผ Multi-task Loss๋ผ๋ ์ ์์๋ ์ ์ฌํ์ง๋ง ์ฃผ๋ชฉํ ๋งํ ์ ์ ๋ฐ๋ก RPN์ ํตํด์ ๋์ค๋ Positive/Negative Anchor Box๋ค์ด๋ค. Negative Anchor Box๋ก ๋ถ๋ฅ๋๋ Regions๋ค์ 0์ผ๋ก ๊ณ์ฐ๋์ด $L_1\ smooth$ ํจ์๋ฅผ ๊ณ์ฐํ ํ์๊ฐ ์๊ฒ ๋๋ค.
๋ ํ๋ ์ฃผ๋ชฉํ ์ ์ Mini-batch๋ผ๋ ๊ฐ๋ ์ด ์ฌ์ฉ๋ ๊ฒ์ด๋ค. Mini-batch๋ผ๋ ์ฉ์ด์ ์ ์์ ๋ํด ์ ์ ์ค๋ช ํ์๋ฉด, ๋ณดํต ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ํ์ต์ํฌ ๋ ์ ์ฒด ๋ฐ์ดํฐ์ ์ ์ผ๋ถ(batch)๋ก ๋ถํ ํด ์ฐจ๋ก์ฐจ๋ก ๋ฃ์ด์ ํ์ต์ํค๋ ๊ฒ์ ์๋ฏธํ๋ค.
RPN๋ ์ด์จ๊ฑฐ๋ ๋คํธ์ํฌ์ด๋ฉฐ 'ํ์ต'์ด๋ผ๋ ๊ฒ์ ์์ผ์ผ ํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ฐฉ๋ํ ์์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ํ์ต์ํจ๋ค๋ฉด ๋ฐฉ๋ํ ์์ Positive ๋๋ Negative Region๋ค์ด ํ์ต๋๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด ๋คํธ์ํฌ ํ์ต ์ ํจ์จ์ฑ์ด ๋จ์ด์ง๊ฒ ๋๋ค. ๋ฐ๋ผ์ ํน์ ์ฌ์ด์ฆ๋ก ๋ฐ์ดํฐ์ ์ ๋ถํ ํด ํ์ต์ํค๋ Mini-batch ํ์ต์ ์์ผ์ค๋ค.
(์ฐธ๊ณ ๋ก Mini-batch๋ก ํ์ต์ํฌ ๋ ์ด๋ฐ์๋ Positive/Negative Anchor Box๋ค์ด ๋น์ทํ ๋น์จ๋ก ๋ถํฌ์์ผ ํ์ต ์ํจ๋ค. ๊ทธ๋ฆฌ๊ณ ์ดํ ํ์ต ํ๋ฐ๋ถ์ batch์๋ Negative Anchor Box๋ค์ด ๋ ๋ง์ ์ ๋ฐ์ ์์ด์ง๋ค. ์๋ํ๋ฉด ๋ณดํต ์ด๋ฏธ์ง๊ฐ ๊ฐ์ฒด๋ก๋ง ๊ฐ๋ํ ๊ฒฝ์ฐ๊ฐ ํํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค)
3. RPN์ ๋ ํ ๋ฒ์ Region Proposal ?
์ง๊ธ๊น์ง RPN์์ ์ด๋ค ๋ฐฉ์์ผ๋ก, ์ด๋ค Loss ํจ์๋ฅผ ์ฌ์ฉํด Region Proposal์ด ๋๋์ง ์์๋ณด์๋ค. ๊ทธ๋ฐ๋ฐ 2๋ฒ ๋ชฉ์ฐจ๊น์ง์ ๊ณผ์ ์ ํตํด์ Region Proposal์ด ์๋ฃ๋๋ค๋ฉด ์ด๋ฏธ์ง๊ฐ ์ด๋ค์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ฒ ์ง๋ง ์๋ง์ Positive Anchor Box๋ก ๋ถ๋ฅ๋ Region๋ค์ด ์ถ์ฒ์ด ๋๋ค. ๋ค์ ๋งํด ์ด๋ป๊ฒ ๋ณด๋ฉด ์ข ์ธ๋ฐ์๋(?) Region๋ค๋ ์ถ์ฒ์ด ๋๋ค๋ ์๋ฏธ์ด๋ค. ๋ฐ๋ผ์ ์ด ์ถ์ฒ๋ ์๋ง์ Region๋ค์ ๋ํด ๋ค์ ํ ๋ฒ ํํฐ๋ง ๊ณผ์ ์ ๊ฑฐ์น๋ค. ๊ทธ๋์ ๋ชฉ์ฐจ์ ์ ๋ชฉ์ "๋ ํ ๋ฒ์ Region Proposal" ์ด๋ผ๊ณ ์ง์๋ค.
์ด ๋ ํ ๋ฒ์ ํํฐ๋ง ์ ์ฌ์ฉํ๋ ๊ฐ๋ ์ด Objectness Score์ด๋ค. ์ฆ, 1์ฐจ์ ์ผ๋ก RPN์ ๊ฒฐ๊ณผ๋ก ๋์จ Positive Anchor Box๋ค๋ง์ ๋์์ผ๋ก ๊ฐ Box ๋น Objectness Score๋ฅผ ๊ณ์ฐํด์ฃผ๊ณ ์ด Score ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ ํ ์์ $N$๊ฐ์ Positive Anchor Box๋ค๋ง ์ต์ข Region Proposal ํ๊ฒ ๋๋ค.
์ฐธ๊ณ ๋ก Objectness Score์ Positive Anchor๊ฐ Object์ผ Softmax ํ๋ฅ ๊ฐ(A๋ผ๊ณ ํ์)๊ณผ ์ด Positive Anchor Box์ Ground Truth Bounding Box์์ IoU๊ฐ(B๋ผ๊ณ ํ์)์ ๊ณฑ์ด ๋๋ค.
$$Objectness\ Score = A * B$$
4. Faster RCNN์ ๋์ ๊ณผ์
์, ์ด์ RPN์ ๋ํด ์์๋ณด์์ผ๋ ์ฒ์์ ์ฌ์ง์ผ๋ก ์ดํด๋ณด์๋ Faster RCNN์ ์ํคํ ์ฒ๋ฅผ ๋ค์ ์๊ธฐํค์ ๋ณด์.
Region Proposal์ RPN์ผ๋ก ์๋ฃํ์ผ๋ RPN๊ณผ๋ ๊ฐ๋ณ๋ก ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ Feature Extractor์ ๋ฃ์ ํ ๋์จ Feature Map์ RPN์ ๊ฑฐ์ณ๋์จ ๊ฒฐ๊ณผ์ ๋งคํ์ ์ํค๊ณ Fast RCNN์ ROI Pooling ๊ณผ์ ์ ๊ฑฐ์ณ ๊ณ ์ ๋ ์ฌ์ด์ฆ์ ๋ฒกํฐ๋ก ๊ฒฐํฉ์ํจ๋ค.
๋ง์ง๋ง์ผ๋ก, ์ ๊ทธ๋ฆผ์์๋ $\cdots$ ๋ก ์๋ต๋์ด ์์ง๋ง FC Layer์ ํตํด์ ์ต์ข Object Classifcation์ ํ๊ธฐ ์ํด Softmax Layer, ์ต์ข ๋ฐ์ด๋ฉ ๋ฐ์ค์ ์ขํ๋ฅผ Regression ํ๊ฒ ๋๋ค.
5. Faster RCNN์ Alternating Training
๋ฐฉ๊ธ ์์์ ์ดํด๋ณด์๋ค์ํผ Faster RCNN์ ๊ฒฐ๊ณผ์ ์ผ๋ก Feature Map์ผ๋ก๋ถํฐ 2๊ฐ์ ๋คํธ์ํฌ ํ์ต์ ์ํํ๋ค. ๊ทธ๋ฐ๋ฐ RPN ๋คํธ์ํฌ๋ฅผ ํตํด ํ์ต๋ ํ๋ผ๋ฏธํฐ๋ก ๋ค๋ฅธ ๋คํธ์ํฌ(Object Detectionํ๋ ๋คํธ์ํฌ)๋ฅผ ํ์ตํ๊ฒ ๋๋ค. ์ด๋ ๊ฒฐ๊ตญ RPN์ ํ๋ผ๋ฏธํฐ๋ก ์ต์ข Object Detection์ ํ๊ฒ ๋๋ ์ ์ด๋ค.
๊ทธ๋์ ์ด๋ฅผ ํด๊ฒฐํ๊ณ ์ Alternating Training์ด ๋ฑ์ฅํ๋ค. Alternating Training์ด๋, RPN ๋คํธ์ํฌ๋ฅผ ๋จผ์ ํ์ตํ๊ณ Object Detection Network(Fast RCNN)๋ฅผ ํ์ตํ๋ค. ๊ทธ๋ฆฌ๊ณ RPN์ Fine Tuningํ๊ณ Object Detection Network๋ฅผ Fine Tuning ํ๋ ๊ณผ์ ์ ์๋ฏธํ๋ค.
๊ทธ๋ฐ๋ฐ ํ์๋ ์ด Alternating Training ๋์ ๊ณผ์ ์ ๋ํด ์ง๊ด์ ์ผ๋ก ์ดํด๊ฐ ์ ๋์ง ์์ ๊ฐ์ ์ ์์ ์ ์๋๊ป ๋ง์ ์ง๋ฌธ์ ์์ฒญํ๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ ์๋๊ป์ ์น์ ํ์๊ฒ๋ RPN์ด ๋์ํ๋ pseudo-code๋ฅผ ์ ๊ณตํด์ฃผ์ จ๋ค. ๊ทธ๋์ ๋ง์ง๋ง์ผ๋ก ์ด ์ฝ๋๋ฅผ ๊ณต์ ํจ์ผ๋ก์จ ํน์ฌ๋ RPN์ด ๋์ํ๋ ๊ณผ์ ์ด ์ง๊ด์ ์ผ๋ก ์ดํด๊ฐ ์๋๋ ๋ถ๋ค์๊ฒ ํฐ ๋์์ด ๋๊ธธ ๋ฐ๋๋ค.
# Python ์ฝ๋
import sys
rpn = rpn_network() # RPN ๋คํธ์ํฌ ๋ชจ๋ธ ์์ฑ
fast_rcnn = fast_rcnn_network() # Object Detection Network(Fast RCNN) ์์ฑ
# ํ์ต์ํฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์
์ผ๋ก Mini-batch๋ก ํ์ต
# gt = Ground Truth
for batch in batch_steps:
# RPN
x_gt_box, x_gt_label = get_dataset_batch() # Batch ์ ๋ฐ์ดํฐ๋งํผ์ Ground Truth ์ขํ์ ๋ ์ด๋ธ ํ๋
rpn.train_on_batch(x_gt_box, x_gt_label) # Ground Truth์ ๊ธฐ๋ฐ์ผ๋ก RPN ํ์ต
predicted_objects = rpn.predict_on_batch() # Batch์ ๋ํด RPN์์ Object์ฌ๋ถ ๋ถ๋ฅ, ์ขํ๊ฐ ํ๊ท ์์ธก
x_samples, x_labels = get_positive_negative_anchors(predicted_objects) # ์์ธก๋ ๊ฐ ๊ธฐ๋ฐ์ผ๋ก Anchor Box๋ค์ Positive/Negative๋ก ๋ถ๋ฅํ๊ณ ํด๋น ํด๋์ค ๋ ์ด๋ธ ํ ๋น
# Fast RCNN
fast_rcnn.train_on_batch(x_samples, x_labels) # RPN์ด Region Proposalํ ์์ญ๋ค์ ๋ํด ์ต์ข
ํด๋์ค ๋ถ๋ฅ, Bounding Box ์ขํ ํ๊ท ์ํ
'Data Science > Computer Vision' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ML] YOLO(You Only Look Once) Object Detection ๋ชจ๋ธ (5) | 2021.04.22 |
---|---|
[ML] SSD(Single Shot Detector) Object Detection ๋ชจ๋ธ (0) | 2021.04.20 |
[ML] Fast RCNN Object Detection ๋ชจ๋ธ (0) | 2021.04.13 |
[ML] SPP(Spatial Pyramid Pooling) Object Detection ๋ชจ๋ธ (2) | 2021.04.11 |
[ML] RCNN(Regions with CNN) Object Detection ๋ชจ๋ธ (0) | 2021.04.10 |