๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Data Science/Computer Vision

[ML] '๋” ๋น ๋ฅธ' Faster RCNN Object Detection ๋ชจ๋ธ

๋ฐ˜์‘ํ˜•

๐Ÿ”Š ํ•ด๋‹น ํฌ์ŠคํŒ…์—์„œ ์‚ฌ์šฉ๋œ ์ปจํ…์ธ ๋Š” ์ธํ”„๋Ÿฐ์˜ ๋”ฅ๋Ÿฌ๋‹ ์ปดํ“จํ„ฐ ๋น„์ „ ์™„๋ฒฝ ๊ฐ€์ด๋“œ ๊ฐ•์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ–ˆ์Œ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค. ์„ค๋ช…์—์„œ ์‚ฌ์šฉ๋œ ์ž๋ฃŒ๋Š” ์ตœ๋Œ€ํ•œ ์ œ๊ฐ€ ์ง์ ‘ ์žฌ๊ตฌ์„ฑํ•œ ์ž๋ฃŒ์ž„์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ €๋ฒˆ์— ์†Œ๊ฐœํ–ˆ๋˜ Fast RCNN์˜ ๋Š๋ฆฐ Detection ์†๋„๋ฅผ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋Š” Faster RCNN ๋ชจ๋ธ์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•˜๋ ค ํ•œ๋‹ค. (๋งŒ์•ฝ Object Detection์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด์‹ ๋‹ค๋ฉด Object Detection ์‹œ๋ฆฌ์ฆˆ๋ฅผ ์ฝ๊ณ  ์˜ค์‹ค ๊ฒƒ์„ ๊ถŒ๊ณ ํ•ฉ๋‹ˆ๋‹ค!)

 

 

Faster RCNN์€ Fast RCNN๋ณด๋‹ค ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๊ธธ๋ž˜!?

 

์ด์ œ๊นŒ์ง€ ์‚ดํŽด๋ณธ 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 ๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฅธ ์žฅ์ ์ด ์žˆ๋‹ค. ํ…์ŠคํŠธ๋กœ ๋งํ•˜๋ฉด ๋‹น์—ฐํžˆ(?) ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ ๊ฐˆ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆผ์œผ๋กœ ์‚ดํŽด๋ณด์ž.

 

Faster RCNN ์•„ํ‚คํ…์ฒ˜

 

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๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹ค์Œ ์ˆ˜์‹์„ ์‚ดํŽด๋ณด์ž.

 

RPN 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์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋‹ค์‹œ ์ƒ๊ธฐํ‚ค์…” ๋ณด์ž.

 

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 ์ขŒํ‘œ ํšŒ๊ท€ ์ˆ˜ํ–‰
    
    

 

๋ฐ˜์‘ํ˜•