region_layer
forward_region_layer
ํจ์ ์ด๋ฆ: forward_region_layer
์ ๋ ฅ:
layer: region_layer ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ
net: network ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ region_layer ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ region layer๋ฅผ ์์ ํ(forward) ์งํ
๊ฐ๊ฐ์ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ํด region layer์ ์ถ๋ ฅ(feature map)์ ๊ณ์ฐ
๊ณ์ฐ๋ feature map์ region_layer ๊ตฌ์กฐ์ฒด์ output ๋ณ์์ ์ ์ฅ
์ค๋ช :
์ด ํจ์๋ YOLO ๊ฐ์ฒด ๊ฒ์ถ ์๊ณ ๋ฆฌ์ฆ์ region layer์ ์์ ํ๋ฅผ ์ํํ๋ ํจ์์ ๋๋ค.
region layer๋ ์ ๋ ฅ ์ด๋ฏธ์ง์ ์ฌ๋ฌ ์์ญ(region)์ ๊ฒ์ถํ๊ณ ๊ฐ ์์ญ์ ๋ํด ๊ฐ์ฒด ํด๋์ค ํ๋ฅ ๊ณผ ์์น ์ ๋ณด๋ฅผ ์์ธกํฉ๋๋ค.
์ ๋ ฅ์ผ๋ก๋ region_layer ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ์ network ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๋ฅผ ๋ฐ์ต๋๋ค.
region_layer ๊ตฌ์กฐ์ฒด๋ layer ๊ตฌ์กฐ์ฒด๋ฅผ ์์ํ๋ฉฐ, ํ์ํ ์ ๋ณด๋ค์ ํฌํจํฉ๋๋ค.
์ด ํจ์๋ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์ region layer์ ์ถ๋ ฅ(feature map)์ ๊ณ์ฐํ๊ณ , ์ด๋ฅผ region_layer ๊ตฌ์กฐ์ฒด์ output ๋ณ์์ ์ ์ฅํฉ๋๋ค.
๊ณ์ฐ๋ feature map์ ๋ค์ ๋จ๊ณ์์ YOLO ์๊ณ ๋ฆฌ์ฆ์ ๋ค๋ฅธ layer๋ค๊ณผ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.
backward_region_layer
ํจ์ ์ด๋ฆ: backward_region_layer
์ ๋ ฅ:
layer ๊ตฌ์กฐ์ฒด l
network ๊ตฌ์กฐ์ฒด net
๋์:
Region Layer์ ์ญ์ ํ(backpropagation)๋ฅผ ์ํํ๋ ํจ์์ ๋๋ค.
์ค๋ช :
์ด ํจ์๋ Region Layer์ ์ญ์ ํ๋ฅผ ์ํํ๋๋ฐ, ์ด๋ฅผ ์ํด ๋จผ์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ layer์ network ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น layer์ ์ถ๋ ฅ๊ฐ๊ณผ delta๊ฐ์ ์ด์ฉํ์ฌ gradient_array ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ฏธ๋ถ๊ฐ(gradient)์ ๊ตฌํฉ๋๋ค.
๊ทธ ํ, axpy_cpu ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ฏธ๋ถ๊ฐ์ ๋์ ์์ผ ๋คํธ์ํฌ์ ์ ์ฒด์ ์ธ delta๊ฐ์ ๊ตฌํฉ๋๋ค.
resize_reorg_layer
ํจ์ ์ด๋ฆ: resize_region_layer
์ ๋ ฅ:
layer *l: resize๋ฅผ ์ํํ region layer์ ํฌ์ธํฐ
int w: layer์ ์๋ก์ด width
int h: layer์ ์๋ก์ด height
๋์:
region layer์ ํฌ๊ธฐ๋ฅผ ์ฌ์กฐ์ ํ๋ค.
l->w, l->h ๊ฐ์ ์๋ก์ด width์ height๋ก ์ ๋ฐ์ดํธํ๋ค.
l->outputs์ l->inputs ๊ฐ์ ์ฌ๊ณ์ฐํ๋ค.
l->output๊ณผ l->delta์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์ฌํ ๋นํ๋ค.
์ค๋ช :
์ด ํจ์๋ Darknet neural network library์์ ์ฌ์ฉ๋๋ ํจ์๋ก, region layer์ ํฌ๊ธฐ๋ฅผ ์ฌ์กฐ์ ํ๋ ์ญํ ์ ํ๋ค.
region layer๋ ๊ฐ์ฒด ๊ฒ์ถ์ ์ํด ์ฌ์ฉ๋๋ layer ์ค ํ๋์ด๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ bounding box๋ฅผ ์์ธกํ๊ณ ํด๋์ค๋ณ ํ๋ฅ ์ ์ถ๋ ฅํ๋ ์ญํ ์ ํ๋ค.
์ด ํจ์๋ region layer์ ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํธ์ถ๋์ด, output๊ณผ delta ๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์ฌํ ๋นํ๊ณ , outputs๊ณผ inputs ๊ฐ์ ์๋ก์ด ํฌ๊ธฐ๋ก ์ ๋ฐ์ดํธํ๋ค.
์ด๋ฅผ ํตํด, network๊ฐ ์๋ก์ด ํฌ๊ธฐ์ region layer๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ค.
make_region_layer
ํจ์ ์ด๋ฆ: make_region_layer
์ ๋ ฅ:
int batch: layer์ batch size
int w: layer์ width
int h: layer์ height
int n: layer์ bounding box ๊ฐ์
int classes: ๋ถ๋ฅํ๊ณ ์ ํ๋ ํด๋์ค์ ๊ฐ์
int coords: ๊ฐ bounding box์ x, y, width, height๋ฅผ ๋ํ๋ด๋ ์ขํ ๊ฐ์
๋์:
region layer๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ค.
layer์ type์ REGION์ผ๋ก ์ค์ ํ๋ค.
layer์ n, batch, h, w, c, out_w, out_h, out_c, classes, coords, cost, biases, bias_updates, outputs, inputs, truths, delta, output ๋ฑ์ ๊ฐ์ ์ด๊ธฐํํ๋ค.
layer์ biases ๋ฐฐ์ด์ 0.5๋ก ์ด๊ธฐํํ๋ค.
layer์ forward์ backward ํจ์ ํฌ์ธํฐ๋ฅผ ์ค์ ํ๋ค.
detection ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค.
์์ฑ๋ layer๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
์ด ํจ์๋ Darknet neural network library์์ ์ฌ์ฉ๋๋ ํจ์๋ก, region layer๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ ์ญํ ์ ํ๋ค.
region layer๋ ๊ฐ์ฒด ๊ฒ์ถ์ ์ํด ์ฌ์ฉ๋๋ layer ์ค ํ๋์ด๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ bounding box๋ฅผ ์์ธกํ๊ณ ํด๋์ค๋ณ ํ๋ฅ ์ ์ถ๋ ฅํ๋ ์ญํ ์ ํ๋ค.
์ด ํจ์๋ region layer๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๊ธฐ ์ํด, layer์ ํ์ํ ๊ฐ๋ค์ ์ด๊ธฐํํ๋ค.
์ด๋ฅผ ํตํด, network๊ฐ region layer๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ๊ฒ์ถ์ ์ํํ ์ ์๊ฒ ๋๋ค.
์ด๊ธฐํ๋ layer๋ ๋ฐํ๋์ด, ์ดํ ๋ค๋ฅธ layer์ ๊ฒฐํฉํ์ฌ network๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
get_region_box
ํจ์ ์ด๋ฆ: get_region_box
์ ๋ ฅ:
float *x: region layer์ ์ถ๋ ฅ๊ฐ
float *biases: bounding box์ prior๊ฐ
int n: bounding box์ ๊ฐ์
int index: bounding box์ index
int i: bounding box์ x์ขํ index
int j: bounding box์ y์ขํ index
int w: region layer์ width
int h: region layer์ height
int stride: region layer์ ์ถ๋ ฅ๊ฐ์ stride ๊ฐ
๋์:
region layer์ ์ถ๋ ฅ๊ฐ๊ณผ prior๊ฐ์ ์ด์ฉํ์ฌ bounding box๋ฅผ ๊ณ์ฐํ๋ค.
๊ณ์ฐ๋ bounding box๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
์ด ํจ์๋ region layer์์ ์ถ๋ ฅ๋ ๊ฐ์ ์ด์ฉํ์ฌ bounding box๋ฅผ ๊ณ์ฐํ๋ ์ญํ ์ ํ๋ค.
region layer๋ ๊ฐ์ฒด ๊ฒ์ถ์ ์ํด ์ฌ์ฉ๋๋ layer ์ค ํ๋์ด๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ bounding box๋ฅผ ์์ธกํ๊ณ ํด๋์ค๋ณ ํ๋ฅ ์ ์ถ๋ ฅํ๋ ์ญํ ์ ํ๋ค.
์ด ํจ์๋ region layer์์ ์ถ๋ ฅ๋ ๊ฐ x์ bounding box์ prior๊ฐ biases, ๊ทธ๋ฆฌ๊ณ bounding box์ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ n, index, i, j, w, h, stride๋ฅผ ์ด์ฉํ์ฌ bounding box๋ฅผ ๊ณ์ฐํ๋ค.
๊ณ์ฐ๋ bounding box๋ box ๊ตฌ์กฐ์ฒด๋ก ๋ฐํ๋์ด, ๊ฐ์ฒด ๊ฒ์ถ์ ์ํํ๋ ๋ค๋ฅธ ํจ์์์ ํ์ฉ๋๋ค.
delta_region_box
ํจ์ ์ด๋ฆ: delta_region_box
์ ๋ ฅ:
box truth: ground truth box ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๊ตฌ์กฐ์ฒด
float *x: ๋ชจ๋ธ์ ์ถ๋ ฅ๊ฐ
float *biases: ๋ชจ๋ธ์ bias
int n: anchor box ๊ฐ์
int index: ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ box์ ๋ํ index
int i: ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ box์ ์ข์ธก ์๋จ x์ขํ
int j: ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ box์ ์ข์ธก ์๋จ y์ขํ
int w: ์ ์ฒด ์ด๋ฏธ์ง์ ๋๋น
int h: ์ ์ฒด ์ด๋ฏธ์ง์ ๋์ด
float *delta: ํ์ฌ box์ delta ๊ฐ์ ์ ์ฅํ ๋ฐฐ์ด
float scale: delta ๊ฐ์ ๊ณฑํด์ค ์ค์ผ์ผ๋ง ์ธ์
int stride: ๋ชจ๋ธ์ ์ถ๋ ฅ๊ฐ ์ค ํ์ฌ box์ ์์ ์ธ๋ฑ์ค
๋์:
ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ box์ ๊ทธ์ ๋์ํ๋ ground truth box ๊ฐ์ IoU๋ฅผ ๊ณ์ฐํ๊ณ , ์ด๋ฅผ ๋ฐํํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ฌ box์ delta ๊ฐ์ ๊ณ์ฐํ๊ณ delta ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
์ค๋ช :
์ด ํจ์๋ YOLOv3 ๋ชจ๋ธ์์ region layer์์ box์ ๋ํ delta ๊ฐ์ ๊ณ์ฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
์ด๋ฅผ ์ํด ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ box์ ๊ทธ์ ๋์ํ๋ ground truth box ๊ฐ์ IoU๋ฅผ ๊ณ์ฐํ๊ณ , ์ด๋ฅผ ๋ฐํํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ฌ box์ delta ๊ฐ์ ๊ณ์ฐํ๊ณ delta ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
์ด ํจ์๋ ๋ชจ๋ธ์ ํ์ต ๊ณผ์ ์์ ์ฌ์ฉ๋๋ค.
delta_region_mask
ํจ์ ์ด๋ฆ: delta_region_mask
์ ๋ ฅ:
float *truth: ์ค์ ๊ฐ
float *x: ์์ธก ๊ฐ
int n: ๋ง์คํฌ ๊ฐ์
int index: ์์ ์ธ๋ฑ์ค
float *delta: ์ญ์ ํ ์ ์ฌ์ฉ๋ ๋ธํ๊ฐ
int stride: ๋ฐ์ดํฐ์ ์คํธ๋ผ์ด๋(stride)
int scale: ์ค์ผ์ผ ๊ฐ
๋์:
๋ง์คํฌ(mask) ๊ฐ์๋งํผ ๋ฐ๋ณตํ๋ฉฐ, ์ญ์ ํ ์ ์ฌ์ฉ๋ ๋ธํ ๊ฐ์ ๊ณ์ฐํ๋ค.
๋ธํ ๊ฐ์ ์์ธก ๊ฐ์์ ์ค์ ๊ฐ์ ์ฐจ์ด์ ์ค์ผ์ผ ๊ฐ์ ๊ณฑํ ๊ฐ์ด๋ค.
์ค๋ช :
์ด ํจ์๋ region_layer์์ ๋ง์คํฌ ๊ฐ์ ๋ํ ์ญ์ ํ๋ฅผ ์ํํ๋ ํจ์์ด๋ค.
์์ธก ๊ฐ๊ณผ ์ค์ ๊ฐ ์ฌ์ด์ ์ฐจ์ด์ ์ค์ผ์ผ ๊ฐ์ ๊ณฑํ ๊ฐ์ ๋ธํ ๊ฐ์ผ๋ก ์ฌ์ฉํ์ฌ ์ญ์ ํ๋ฅผ ์ํํ๋ค.
์ด ํจ์๋ region_layer์์ ์ฌ์ฉ๋๋ฉฐ, ๋ง์คํฌ ๊ฐ์ ๋ํ ์ญ์ ํ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์์ ํธ์ถ๋๋ค.
delta_region_class
ํจ์ ์ด๋ฆ: delta_region_class
์ ๋ ฅ:
output: ๋ชจ๋ธ์ ์ถ๋ ฅ๊ฐ
delta: ๊ฐ์ค์น ๊ฐฑ์ ์ ์ฌ์ฉ๋๋ ์ถ๋ ฅ๊ฐ์ ๋ณํ๋
index: ํ์ฌ ์์ธก๊ฐ์ด ์ ์ฅ๋ ์ธ๋ฑ์ค
class: ์์ธก๋ ํด๋์ค ์ธ๋ฑ์ค
classes: ํด๋์ค์ ์ด ๊ฐ์
hier: ํด๋์ค๊ฐ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ ๊ฒฝ์ฐ ๊ทธ ๊ตฌ์กฐ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ํธ๋ฆฌ
scale: ์ถ๋ ฅ๊ฐ์ ๋ณํ๋์ ๊ณฑํด์ง๋ ์ค์ผ์ผ ๊ฐ
stride: ์ถ๋ ฅ๊ฐ์ ์ฐจ์
avg_cat: ์ถ๋ ฅ๊ฐ์ ํ๊ท ์นดํ ๊ณ ๋ฆฌ
tag: ๋ฏธ์ฌ์ฉ
๋์:
hier ๊ฐ null์ด ์๋ ๊ฒฝ์ฐ:
class์์ ์์ํ์ฌ hier๋ฅผ ๋ฐ๋ผ ๋ถ๋ชจ ํด๋์ค๋ก ์ด๋ํ๋ฉด์, ํด๋น ํด๋์ค์ ์ถ๋ ฅ๊ฐ์ ์์ธก๊ฐ์ผ๋ก ์ฌ์ฉํ๊ณ , ๊ณ์ธต ๊ตฌ์กฐ์์ ๊ฐ์ ๊ทธ๋ฃน์ ์ํ๋ ๋ค๋ฅธ ํด๋์ค์ ์ถ๋ ฅ๊ฐ์ 0์ผ๋ก ๋ง๋ ๋ค.
hier ๊ฐ null์ธ ๊ฒฝ์ฐ:
์ถ๋ ฅ๊ฐ์ ํด๋์ค๋ณ๋ก ์ํํ๋ฉด์, ์์ธก๋ ํด๋์ค์ ์ผ์นํ๋ ๊ฒฝ์ฐ ์ถ๋ ฅ๊ฐ์ 1์ ํ ๋นํ๊ณ , ๊ทธ ์ธ์ ๊ฒฝ์ฐ 0์ ํ ๋นํ๋ค. ์ด๋, ์ถ๋ ฅ๊ฐ์ ๋ณํ๋์ ์ค์ผ์ผ๊ณผ ์ฐจ์ด์ ๋น๋กํ๋ค.
tag ๊ฐ 1์ธ ๊ฒฝ์ฐ:
์ถ๋ ฅ๊ฐ์ด 0์ด ์๋๋ฉด ์์ธก๋ ํด๋์ค์ ํด๋นํ๋ delta ๊ฐ์ ๊ฐฑ์ ํ๋ค.
avg_cat ์์๋ hier ๊ฐ null์ธ ๊ฒฝ์ฐ, ์ถ๋ ฅ๊ฐ์ ์์ธก๋ ํด๋์ค์ ๊ฐ์ ๋ํด์ค๋ค.
logit
ํจ์ ์ด๋ฆ: logit
์ ๋ ฅ:
์ค์ x
๋์:
๋ก์ง(logit) ํจ์๋ 0์์ 1์ฌ์ด์ ๊ฐ์ ๊ฐ์ง๋ x๋ฅผ ์ ๋ ฅ๋ฐ์, ๋ก๊ทธ(odds) ๋ณํ์ ์ํํ์ฌ ์ถ๋ ฅํฉ๋๋ค.
๋ก๊ทธ ๋ณํ์ ํ๋ฅ ๊ฐ์ odds๊ฐ์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ผ๋ก, odds๊ฐ์ ํด๋น ์ฌ๊ฑด์ด ๋ฐ์ํ ํ๋ฅ ๊ณผ ๋ฐ์ํ์ง ์์ ํ๋ฅ ์ ๋น์จ์ ๋ํ๋ ๋๋ค.
๋ก์ง ํจ์๋ odds๊ฐ์ ์ค์ ๋ฒ์ ์ ์ฒด์์ ์ ์ํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
์์์ผ๋ก๋ log(x/(1.-x))๋ก ํํ๋ฉ๋๋ค.
์ค๋ช :
๋ก์ง ํจ์๋ ํ๋ฅ ๊ฐ์ odds๊ฐ์ผ๋ก ๋ณํํ์ฌ ํด๋น ๊ฐ์ ์ค์ ๋ฒ์ ์ ์ฒด์์ ์ ์ํฉ๋๋ค.
ํ๋ฅ ๊ฐ x๋ 0์์ 1์ฌ์ด์ ๊ฐ์ ๊ฐ์ง๋ฉฐ, ๋ก์ง ํจ์์ ๋ถ๋ชจ์์ 1-x๋ ํด๋น ์ฌ๊ฑด์ด ๋ฐ์ํ์ง ์์ ํ๋ฅ ์ ์๋ฏธํฉ๋๋ค.
๋ก์ง ํจ์์ ์ถ๋ ฅ ๊ฐ์ ํด๋น ์ฌ๊ฑด์ด ๋ฐ์ํ ํ๋ฅ (p)์ ๋ํด log(p/(1-p))์ ๊ฐ์ด ํํ๋ฉ๋๋ค.
๋ก์ง ํจ์๋ ๋ฅ๋ฌ๋์์ sigmoid ํจ์์ ํจ๊ป ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
tisnan
ํจ์ ์ด๋ฆ: tisnan
์ ๋ ฅ:
float x
๋์:
์ธ์๋ก ์ฃผ์ด์ง x๊ฐ NaN(Not a Number)์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ํจ์์ ๋๋ค.
์ค๋ช :
C/C++์ isnan ํจ์๋ NaN์ธ ๊ฒฝ์ฐ์๋ง true๋ฅผ ๋ฐํํฉ๋๋ค.
ํ์ง๋ง tisnan ํจ์๋ x๊ฐ NaN์ด๋ฉด true, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
์ด๋ x๊ฐ NaN์ด ์๋ ๊ฒฝ์ฐ x์ ์๊ธฐ ์์ ์ ๋น๊ตํ ๊ฒฐ๊ณผ๊ฐ false๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
x๊ฐ NaN์ธ ๊ฒฝ์ฐ, ์ด๋ค ๊ฐ๊ณผ ๋น๊ตํด๋ false๊ฐ ์๋ ํน์ง์ ์ด์ฉํฉ๋๋ค.
entry_index
ํจ์ ์ด๋ฆ: entry_index
์ ๋ ฅ:
layer l: YOLO ๋ ์ด์ด
int batch: ๋ฏธ๋๋ฐฐ์น์์ ์ฒ๋ฆฌํ ์ด๋ฏธ์ง์ ์ธ๋ฑ์ค
int location: ์์ธกํ ๊ทธ๋ฆฌ๋ ์ ์ ์ธ๋ฑ์ค
int entry: ์์ธกํ๋ ค๋ ์์ฑ(์ขํ, ํด๋์ค ๋ฑ)์ ์ธ๋ฑ์ค
๋์:
YOLO ๋ ์ด์ด์ ์ถ๋ ฅ ๋ฐฐ์ด์์ ์ง์ ํ ๋ฏธ๋๋ฐฐ์น, ๊ทธ๋ฆฌ๋ ์ , ์์ฑ์ ์ธ๋ฑ์ค์ ํด๋นํ๋ ์์์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
YOLO๋ ๊ทธ๋ฆฌ๋ ์ ์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ถํ ํ๊ณ , ๊ฐ ๊ทธ๋ฆฌ๋ ์ ์์ bounding box์ objectness, ํด๋์ค ํ๋ฅ ๋ฑ์ ์์ธกํ๋ค.
์ถ๋ ฅ ๋ฐฐ์ด์ ๋ฏธ๋๋ฐฐ์น, ๊ทธ๋ฆฌ๋ ์ , ์์ฑ์ ์์๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ ์์์ ์ธ๋ฑ์ค๋ entry_index ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ฐ๋๋ค.
๋ฏธ๋๋ฐฐ์น ๋ด์์ ๊ฐ ์ด๋ฏธ์ง๋ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก, ์์์ ์ธ๋ฑ์ค๋ batch*l.outputs์์ ์์ํ๋ค.
๊ทธ๋ฆฌ๋ ์ ์ 2์ฐจ์ ํํ์ด๋ฏ๋ก, ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด location์ ๊ทธ๋ฆฌ๋ ์ ์ ๋๋น(l.w)์ ๋์ด(l.h)๋ก ๋๋์ด์ ํ๊ณผ ์ด์ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ๋ค.
ํด๋น ์์ฑ์ ์ธ๋ฑ์ค์ ๊ทธ๋ฆฌ๋ ์ ์ ์ธ๋ฑ์ค๋ฅผ ๊ณฑํ์ฌ ํด๋น ์์ฑ์ ์ฒซ ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ๊ณ , ๊ทธ๋ฆฌ๋ ์ ์ ์ธ๋ฑ์ค๋ฅผ ๋ํ์ฌ ํด๋น ์์์ ์ธ๋ฑ์ค๋ฅผ ๊ตฌํ๋ค.
correct_region_boxes
ํจ์ ์ด๋ฆ: correct_region_boxes
์ ๋ ฅ:
detection *dets: detection ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด ํฌ์ธํฐ
int n: detection ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด์ ํฌ๊ธฐ
int w: ์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ๋ก ํฌ๊ธฐ
int h: ์ ๋ ฅ ์ด๋ฏธ์ง์ ์ธ๋ก ํฌ๊ธฐ
int netw: ์ ๊ฒฝ๋ง์ ์ ๋ ฅ ์ด๋ฏธ์ง ๊ฐ๋ก ํฌ๊ธฐ
int neth: ์ ๊ฒฝ๋ง์ ์ ๋ ฅ ์ด๋ฏธ์ง ์ธ๋ก ํฌ๊ธฐ
int relative: bounding box ์ขํ๋ฅผ ์๋ ์ขํ๋ก ๊ณ์ฐํ ์ง ์ ๋ ์ขํ๋ก ๊ณ์ฐํ ์ง ์ฌ๋ถ (0: ์ ๋ ์ขํ, 1: ์๋ ์ขํ)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง์ ์ ๊ฒฝ๋ง ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋น์จ์ ๊ณ ๋ คํ์ฌ bounding box ์ขํ๋ฅผ ์์ ํ๋ ํจ์
์ค๋ช :
์ด ํจ์๋ YOLO (You Only Look Once) ๊ฐ์ฒด ๊ฒ์ถ ์๊ณ ๋ฆฌ์ฆ์์ ์ฌ์ฉํ๋ ํจ์์ด๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง์ ์ ๊ฒฝ๋ง ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋น์จ์ ๊ณ ๋ คํ์ฌ bounding box ์ขํ๋ฅผ ์์ ํ๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง์ ์ ๊ฒฝ๋ง ์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ๋ก, ์ธ๋ก ๋น์จ์ด ๋ค๋ฅด๋ฉด ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ ๊ฒฝ๋ง ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ง๊ฒ resizeํ๊ณ , ๊ทธ ๋น์จ์ ๋ง๊ฒ bounding box ์ขํ๋ฅผ ์์ ํ๋ค.
์์ ๋ bounding box ์ขํ๋ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ํ ์๋ ์ขํ ๋๋ ์ ๋ ์ขํ๋ก ๊ณ์ฐํ ์ ์๋ค.
์๋ ์ขํ๋ก ๊ณ์ฐํ๋ ค๋ฉด relative ์ธ์๋ฅผ 1๋ก ์ค์ ํ๊ณ , ์ ๋ ์ขํ๋ก ๊ณ์ฐํ๋ ค๋ฉด relative ์ธ์๋ฅผ 0์ผ๋ก ์ค์ ํ๋ค.
get_region_detections
ํจ์ ์ด๋ฆ: get_region_detections
์ ๋ ฅ:
layer l: YOLO ๋ ์ด์ด ๊ฐ์ฒด
int w: ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋๋น
int h: ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋์ด
int netw: ๋คํธ์ํฌ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋๋น
int neth: ๋คํธ์ํฌ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋์ด
float thresh: ๊ฐ์ฒด๋ฅผ ํ์งํ๊ธฐ ์ํ threshold ๊ฐ
int *map: softmax ํธ๋ฆฌ ๋งคํ ๊ฐ
float tree_thresh: softmax ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ threshold ๊ฐ
int relative: ์๋์ ์ธ ์ขํ๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ์ง ์ฌ๋ถ
detection *dets: ๊ฒ์ถ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง์์ ๊ฐ์ฒด๋ฅผ ํ์งํ๊ณ detection ๊ฐ์ฒด ๋ฐฐ์ด์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ค. ์ ๋ ฅ ๋ ์ด์ด์์ ์ถ๋ ฅ์ ๊ฐ์ ธ์ค๊ณ , ํ์ํ ๊ฒฝ์ฐ ๋ ์ด์ด ์ถ๋ ฅ์ ๋ค์ง๋๋ค. ๊ทธ ํ, ๊ฐ ํฝ์ ๋ง๋ค bounding box์ ํด๋์ค ํ๋ฅ ์ ๊ณ์ฐํ์ฌ detection ๊ฐ์ฒด ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
๋ ์ด์ด ์ถ๋ ฅ์ ๊ฐ์ ธ์จ๋ค.
๋ ์ด์ด ๋ฐฐ์น(batch) ์๊ฐ 2์ธ ๊ฒฝ์ฐ, ๋ ์ด์ด ์ถ๋ ฅ์ ๋ค์ง๋๋ค.
๊ฐ ํฝ์ ๋ง๋ค bounding box์ ํด๋์ค ํ๋ฅ ์ ๊ณ์ฐํ์ฌ detection ๊ฐ์ฒด ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
์๋์ ์ธ ์ขํ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ขํ๋ฅผ ์ ๋ ์ขํ๋ก ๋ณํํ๋ค.
์ค๋ช :
layer l: YOLO ๋ ์ด์ด ๊ฐ์ฒด
int w: ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋๋น
int h: ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋์ด
int netw: ๋คํธ์ํฌ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋๋น
int neth: ๋คํธ์ํฌ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋์ด
float thresh: ๊ฐ์ฒด๋ฅผ ํ์งํ๊ธฐ ์ํ threshold ๊ฐ
int *map: softmax ํธ๋ฆฌ ๋งคํ ๊ฐ. ์ด ๊ฐ์ด NULL์ด ์๋๋ฉด, softmax ํธ๋ฆฌ๊ฐ ์ฌ์ฉ๋๋ค.
float tree_thresh: softmax ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ threshold ๊ฐ
int relative: ์๋์ ์ธ ์ขํ๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ์ง ์ฌ๋ถ. 1์ด๋ฉด ์๋์ ์ธ ์ขํ๋ฅผ ์ฌ์ฉํ๊ณ , 0์ด๋ฉด ์ ๋ ์ขํ๋ฅผ ์ฌ์ฉํ๋ค.
detection *dets: ๊ฒ์ถ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด. ๊ฐ ๊ฐ์ฒด๋ bounding box, ํด๋์ค ํ๋ฅ , objectness ๋ฐ mask ๊ฐ์ ๊ฐ์ง๋ค.
float *predictions = l.output: ๋ ์ด์ด ์ถ๋ ฅ์ ๊ฐ์ ธ์จ๋ค.
if (l.batch == 2): ๋ ์ด์ด ๋ฐฐ์น(batch) ์๊ฐ 2์ธ ๊ฒฝ์ฐ, ๋ ์ด์ด ์ถ๋ ฅ์ ๋ค์ง๋๋ค. ์ด๊ฒ์ ์ด๋ฏธ์ง ์ฆ๊ฐ(augmentation)์ ์ํ ๊ฒ์ด๋ค.
for (i = 0; i < l.w*l.h; ++i): ๊ฐ ํฝ์ ๋ง๋ค detection ๊ฐ์ฒด๋ฅผ ๊ณ์ฐํ๋ค.
int row = i / l.w; int col = i % l.w: ํ์ฌ ํฝ์ ์ ํ๊ณผ ์ด์ ๊ณ์ฐํ๋ค.
for(n = 0; n < l.n;
zero_objectness
ํจ์ ์ด๋ฆ: zero_objectness
์ ๋ ฅ:
layer l: region layer
๋์:
region layer์์ objectness ๊ฐ ์ค, bbox๊ฐ ์๋ ๋ถ๋ถ์ 0์ผ๋ก ์ด๊ธฐํํ๋ค.
์ค๋ช :
์ด ํจ์๋ region layer์์ objectness ๊ฐ ์ค bbox๊ฐ ์๋ ๋ถ๋ถ์ 0์ผ๋ก ์ด๊ธฐํํ๋ ์ญํ ์ ํ๋ค.
region layer๋ ๊ฐ์ฒด ๊ฒ์ถ์ ์ํด ์ฌ์ฉ๋๋ layer ์ค ํ๋์ด๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ bounding box๋ฅผ ์์ธกํ๊ณ ํด๋์ค๋ณ ํ๋ฅ ์ ์ถ๋ ฅํ๋ ์ญํ ์ ํ๋ค.
์ด ํจ์๋ region layer์์ ์ถ๋ ฅ๋ ๊ฐ ์ค, bbox๊ฐ ์๋ ๋ถ๋ถ์ objectness ๊ฐ์ 0์ผ๋ก ์ด๊ธฐํํ๋ค.
์ด๋ ๊ฐ์ฒด๊ฐ ์๋ ๋ถ๋ถ์ ๋ํ ํ๋ฅ ๊ฐ์ 0์ผ๋ก ์ค์ ํ๋ ๊ฒ์ด๋ฉฐ, ์ด๋ฅผ ํตํด ๊ฐ์ฒด ๊ฒ์ถ ์ ํ๋๋ฅผ ํฅ์์ํฌ ์ ์๋ค.
์ด ํจ์๋ bbox๊ฐ ์๋ ๋ถ๋ถ์ 0์ผ๋ก ์ด๊ธฐํํ๋ ์ญํ ์ ํ๋ฉฐ, ๋ค๋ฅธ ํจ์์์ ํธ์ถ๋์ด ์ฌ์ฉ๋๋ค.
Last updated
Was this helpful?