upsample_layer
Upsample Layer๋?
Upsample Layer๋ Feature Maps์ ํฌ๊ธฐ๋ฅผ ํค์ฐ๋ Layer์ ๋๋ค.
upsample_layer.c
forward_upsample_layer
ํจ์ ์ด๋ฆ: forward_upsample_layer
์ ๋ ฅ:
l: layer ๊ตฌ์กฐ์ฒด
net: network ๊ตฌ์กฐ์ฒด
๋์:
์ ์ํ๋ง ๋ ์ด์ด๋ฅผ ์ ๋ฐฉํฅ ํจ์ค(forward pass)๋ก ์ฒ๋ฆฌํ๋ ํจ์์ ๋๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ ์ํ๋งํ์ฌ ์ถ๋ ฅ๊ฐ์ ๊ณ์ฐํฉ๋๋ค. ์ด๋, ์ถ๋ ฅ๊ฐ์ l.output์ ์ ์ฅ๋ฉ๋๋ค.
์ค๋ช :
fill_cpu() ํจ์๋ l.output์ 0์ผ๋ก ์ด๊ธฐํํฉ๋๋ค.
l.reverse๊ฐ ์ฐธ(True)์ผ ๊ฒฝ์ฐ, upsample_cpu() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ l.output์ ์ ์ํ๋ง๋ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํฉ๋๋ค. ์ด๋, ์ ๋ ฅ ์ด๋ฏธ์ง๋ net.input์ ๋๋ค.
l.reverse๊ฐ ๊ฑฐ์ง(False)์ผ ๊ฒฝ์ฐ, upsample_cpu() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ net.input ์ด๋ฏธ์ง๋ฅผ ์ ์ํ๋งํ์ฌ l.output์ ์ ์ฅํฉ๋๋ค. ์ด๋, ์ถ๋ ฅ ํฌ๊ธฐ๋ l.w, l.h๋ก ์ค์ ๋์ด ์์ต๋๋ค.
์ต์ข ์ ์ผ๋ก, ์ถ๋ ฅ๊ฐ์ l.output์ ์ ์ฅ๋ฉ๋๋ค.
backward_upsample_layer
ํจ์ ์ด๋ฆ: backward_upsample_layer
์ ๋ ฅ:
l: layer ๊ตฌ์กฐ์ฒด
net: network ๊ตฌ์กฐ์ฒด
๋์:
์ ์ํ๋ง ๋ ์ด์ด์ ์ญ์ ํ(backward pass) ์ฐ์ฐ์ ์ํํฉ๋๋ค.
์ ๋ ฅ๊ฐ์ผ๋ก๋ l๊ณผ net์ ๋ฐ์ผ๋ฉฐ, l์ ํ์ฌ ๋ ์ด์ด์ ์ ๋ณด์ ์ด์ ๋ ์ด์ด์ ์ถ๋ ฅ๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ผ๋ฉฐ, net์ ์ ์ฒด ๋คํธ์ํฌ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
์ ์ํ๋ง ๋ ์ด์ด๋ ์ ๋ ฅ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๋ ์์ ์ ์ํํ๋๋ฐ, ์ด๋ฅผ ์ญ์ ํ ํ ๋๋ ์ด์ ๋ ์ด์ด์ delta ๊ฐ์ ํ์ฌ ๋ ์ด์ด์ ํฌ๊ธฐ์ ๋ง๊ฒ ์ถ์(upsample)ํ์ฌ ์ ๋ฌํฉ๋๋ค. ์ด ๊ณผ์ ์์ scale ๊ฐ์ ์ฌ์ฉํ์ฌ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ Darknet ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ์ ์ ์ํ๋ง ๋ ์ด์ด์ ๋ํ ์ญ์ ํ ์ฐ์ฐ์ ๋ด๋นํฉ๋๋ค.
Darknet์์๋ ์ ๋ ฅ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๋ ์์ ์ ์ํํ๋ ๋ฐ์ ์ ์ํ๋ง ๋ ์ด์ด๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ด ๋ ์ด์ด์ ์ถ๋ ฅ๊ฐ์ ๋ค์ ๋ ์ด์ด์ ์ ๋ ฅ๊ฐ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ด์ ๋ ์ด์ด์ delta ๊ฐ์ ํ์ฌ ๋ ์ด์ด์ ํฌ๊ธฐ์ ๋ง๊ฒ ์ถ์ํ์ฌ ์ ๋ฌํด์ผ ํฉ๋๋ค.
์ด๋ฅผ ์ํด upsample_cpu() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ด ํจ์์์๋ ์ ๋ ฅ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๋ ์์ ์ ์ํํฉ๋๋ค.
scale ๊ฐ์ ์ฌ์ฉํ์ฌ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ฉฐ, reverse ๊ฐ์ด 1์ธ ๊ฒฝ์ฐ์๋ ์ด์ ๋ ์ด์ด์ delta ๊ฐ์ ์ถ์ํ์ฌ ์ ๋ฌํ๊ณ , 0์ธ ๊ฒฝ์ฐ์๋ net์์ ์ด์ ๋ ์ด์ด์ delta ๊ฐ์ ๊ฐ์ ธ์์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฐ ํ ํ์ฌ ๋ ์ด์ด์ delta ๊ฐ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
resize_upsample_layer
ํจ์ ์ด๋ฆ: resize_upsample_layer
์ ๋ ฅ:
layer *l: upsample ๋ ์ด์ด์ ํฌ์ธํฐ
int w: upsample ๋ ์ด์ด์ ์ถ๋ ฅ ์ด๋ฏธ์ง ๊ฐ๋ก ๊ธธ์ด
int h: upsample ๋ ์ด์ด์ ์ถ๋ ฅ ์ด๋ฏธ์ง ์ธ๋ก ๊ธธ์ด
๋์:
upsample ๋ ์ด์ด์ ์ถ๋ ฅ ์ด๋ฏธ์ง ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๋ฅผ ์กฐ์ ํ๋ ํจ์์ด๋ค.
์ ๋ ฅ์ผ๋ก ๋ฐ์ ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๋ก ๋ ์ด์ด์ ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๋ฅผ ์ ๋ฐ์ดํธํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ถ๋ ฅ ์ด๋ฏธ์ง ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๋ฅผ ๋ค์ ๊ณ์ฐํ๋ค.
๋ง์ฝ ๋ ์ด์ด๊ฐ reverse ๋ชจ๋์ด๋ฉด ์ถ๋ ฅ ์ด๋ฏธ์ง ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๋ ์ ๋ ฅ ์ด๋ฏธ์ง ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด์ stride๋ฅผ ๋๋ ๊ฐ์ด ๋๊ณ , outputs ๊ฐ๋ ์ด์ ๋ง๊ฒ ๊ณ์ฐ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ์ด์ด์ ์ ๋ ฅ ์ฑ๋ ์์ ๋ง๊ฒ outputs ๊ฐ์ ๊ณ์ฐํ๋ค. ๋ง์ง๋ง์ผ๋ก delta์ output์ ์ ๋ฐ์ดํธํ๋ค.
์ค๋ช :
upsample ๋ ์ด์ด๋ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ํ๋ํ๋ ์ญํ ์ ํ๋ค. ์ด ํจ์๋ upsample ๋ ์ด์ด์ ์ถ๋ ฅ ์ด๋ฏธ์ง ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๋ฅผ ์กฐ์ ํ๋ ํจ์์ด๋ค.
์ด ํจ์๋ l->w์ l->h๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด๋ก ๋ณ๊ฒฝํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก l->out_w์ l->out_h๋ฅผ ๋ค์ ๊ณ์ฐํ๋ค.
์ด๋, l->out_w์ l->out_h๋ upsample ๋ ์ด์ด์ ์ถ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด์ด๋ค.
๋ง์ฝ upsample ๋ ์ด์ด๊ฐ reverse ๋ชจ๋์ด๋ฉด, l->out_w์ l->out_h๋ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ๋ก, ์ธ๋ก ๊ธธ์ด์ stride๋ฅผ ๋๋ ๊ฐ์ด ๋๋ค.
๊ทธ๋ฆฌ๊ณ l->outputs ๊ฐ๋ ์ด์ ๋ง๊ฒ ๊ณ์ฐ๋๋ค. l->outputs๋ upsample ๋ ์ด์ด์ ์ถ๋ ฅ ์ฑ๋ ์์ ๋ง๊ฒ ์ถ๋ ฅ ์ด๋ฏธ์ง์ ํฝ์ ์๋ฅผ ๋ํ๋ธ๋ค.
๋ง์ง๋ง์ผ๋ก delta์ output์ ์ ๋ฐ์ดํธํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค.
make_upsample_layer
ํจ์ ์ด๋ฆ: make_upsample_layer
์ ๋ ฅ:
batch: int ํ์์ ๋ฐฐ์น ํฌ๊ธฐ
w: int ํ์์ ์ ๋ ฅ ๋๋น
h: int ํ์์ ์ ๋ ฅ ๋์ด
c: int ํ์์ ์ ๋ ฅ ์ฑ๋ ์
stride: int ํ์์ ์ ์ํ๋ง ๋ฐฐ์จ ๋๋ ๋ค์ด์ํ๋ง ๋ฐฐ์จ(์์)
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ batch, w, h, c, stride ๊ฐ์ ์ฌ์ฉํ์ฌ upsample ๋ ์ด์ด๋ฅผ ์์ฑํ๋ค.
stride ๊ฐ์ด ์์์ธ ๊ฒฝ์ฐ ๋ค์ด์ํ๋ง์ผ๋ก ๋์ํ๋ค.
๋ ์ด์ด์ ์ถ๋ ฅ ํฌ๊ธฐ(out_w, out_h, out_c)์ ์ถ๋ ฅ ์์ ์(outputs)๋ฅผ ๊ณ์ฐํ๋ค.
๋ ์ด์ด์ ์ ๋ ฅ ์์ ์(inputs), ๋ธํ(delta), ์ถ๋ ฅ(output)์ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๊ณ , 0์ผ๋ก ์ด๊ธฐํํ๋ค.
์ ์ํ๋ง ๋ ์ด์ด์ forward์ backward ํจ์๋ฅผ ์ค์ ํ๋ค.
์ ์ํ๋ง ๋ ์ด์ด์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ค.
์ค๋ช :
์ ์ํ๋ง ๋ ์ด์ด๋ฅผ ๋ง๋๋ ํจ์์ด๋ค.
์ด ํจ์์์ ์์ฑ๋ ๋ ์ด์ด๋ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ upsample ๋๋ downsampleํ์ฌ ์ถ๋ ฅํ๋ ์ญํ ์ ํ๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ํค์ฐ๋ upsample๊ณผ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ downsample์ด ์๋ค.
์ด ํจ์์์๋ stride ๊ฐ์ ์ด์ฉํ์ฌ upsample๊ณผ downsample์ ๊ตฌ๋ถํ๊ณ , ์ญ์ ํ ํจ์์์ ํด๋น ์ฐ์ฐ์ ์ฒ๋ฆฌํ๋ค.
๋ ์ด์ด์ ์ถ๋ ฅ ํฌ๊ธฐ๋ ์ ๋ ฅ ํฌ๊ธฐ์ stride ๊ฐ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค.
์ด ํจ์์์๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ์ด๊ธฐํ๋ฅผ ์ํํ๊ณ , forward์ backward ํจ์๋ฅผ ์ค์ ํ๋ ์์ ์ ํ๋ค.
Last updated
Was this helpful?