nightmare
abs_mean
ํจ์ ์ด๋ฆ: abs_mean
์ ๋ ฅ:
x: floatํ ํฌ์ธํฐ. ๊ณ์ฐํ ๋์ ๋ฐ์ดํฐ์ ๋ฐฐ์ด.
n: intํ. ๋ฐ์ดํฐ์ ๊ฐ์.
๋์:
์ฃผ์ด์ง ๋ฐฐ์ด x์ ์์๋ค์ ์ ๋๊ฐ ํ๊ท ์ ๊ณ์ฐํ๋ค.
์ค๋ช :
์ด ํจ์๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ฐฐ์ด x์ ๊ฐ ์์๋ค์ ๋ํด ์ ๋๊ฐ์ ์ทจํ ํ ๊ทธ ํ๊ท ๊ฐ์ ๊ณ์ฐํ์ฌ ๋ฐํํ๋ค.
๋ฐํ๋ ๊ฐ์ ์ ๋ ฅ๋ ๋ฐ์ดํฐ์ ์ ๋๊ฐ ํ๊ท ์ ๋ํ๋ธ๋ค.
calculate_loss
ํจ์ ์ด๋ฆ: calculate_loss
์ ๋ ฅ:
float *output: ์ถ๋ ฅ ๋ฐฐ์ด ํฌ์ธํฐ
float *delta: ๋ณํ ๋ฐฐ์ด ํฌ์ธํฐ
int n: ๋ฐฐ์ด์ ์์ ๊ฐ์
float thresh: ์๊ณ๊ฐ
๋์:
์ฃผ์ด์ง ์ถ๋ ฅ ๋ฐฐ์ด(output)๊ณผ ๋ณํ ๋ฐฐ์ด(delta)์ ์ฌ์ฉํ์ฌ ์์ค์ ๊ณ์ฐํ๋ ํจ์์ด๋ค.
์ถ๋ ฅ ๋ฐฐ์ด๊ณผ ๋ณํ ๋ฐฐ์ด์ ํ๊ท (mean)๊ณผ ๋ถ์ฐ(var)์ ๊ณ์ฐํ๋ค.
๋ฐ๋ณต๋ฌธ์ ํตํด ๋ค์์ ์ํํ๋ค:
๋ง์ฝ ๋ณํ ๋ฐฐ์ด์ ์์(delta[i])๊ฐ (ํ๊ท + ์๊ณ๊ฐ * ๋ถ์ฐ์ ์ ๊ณฑ๊ทผ)๋ณด๋ค ํฌ๋ค๋ฉด, ๋ณํ ๋ฐฐ์ด์ ํด๋น ์์๋ฅผ ์ถ๋ ฅ ๋ฐฐ์ด์ ๊ฐ(output[i])์ผ๋ก ๋์ฒดํ๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด, ๋ณํ ๋ฐฐ์ด์ ํด๋น ์์๋ฅผ 0์ผ๋ก ์ค์ ํ๋ค.
์ค๋ช :
์ด ํจ์๋ ์ฃผ์ด์ง ์ถ๋ ฅ ๋ฐฐ์ด๊ณผ ๋ณํ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ์์ค์ ๊ณ์ฐํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค.
์ถ๋ ฅ ๋ฐฐ์ด์ ๋คํธ์ํฌ์ ์์ธก ์ถ๋ ฅ ๊ฐ์ด๋ฉฐ, ๋ณํ ๋ฐฐ์ด์ ์์ธก๊ณผ ์ค์ ๊ฐ ์ฌ์ด์ ์ฐจ์ด(์ค์ฐจ)๋ฅผ ๋ํ๋ธ๋ค.
์ถ๋ ฅ ๋ฐฐ์ด์ ํ๊ท ๊ณผ ๋ถ์ฐ์ ๊ณ์ฐํ์ฌ ๋ณํ ๋ฐฐ์ด์ ์์๋ฅผ ํํฐ๋งํ๋ ์ญํ ์ ํ๋ค.
๋ณํ ๋ฐฐ์ด์ ๊ฐ ์์๊ฐ ์ฃผ์ด์ง ์๊ณ๊ฐ์ ๋์ด์ค ๊ฒฝ์ฐ, ํด๋น ์์๋ ์ถ๋ ฅ ๋ฐฐ์ด์ ๊ฐ์ ์ ์งํ๋ค.
์๊ณ๊ฐ์ ๋์ด์์ง ์๋ ๊ฒฝ์ฐ์๋ ํด๋น ์์๋ฅผ 0์ผ๋ก ์ค์ ํ์ฌ ์์ค์ ๊ณ์ฐ์ ๋ฐ์ํ์ง ์๋๋ค.
optimize_picture
ํจ์ ์ด๋ฆ: optimize_picture
์ ๋ ฅ:
network *net: ์ ๊ฒฝ๋ง(network) ํฌ์ธํฐ
image orig: ์๋ณธ ์ด๋ฏธ์ง
int max_layer: ์ต๋ ๋ ์ด์ด ์ธ๋ฑ์ค
float scale: ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ธฐ ์ํ ์ค์ผ์ผ ๊ฐ
float rate: ์ด๋ฏธ์ง๋ฅผ ์ ๋ฐ์ดํธํ๋ ์๋(ํ์ต๋ฅ )
float thresh: ๋ณํ ๋ฐฐ์ด์ ํํฐ๋งํ๋ ์๊ณ๊ฐ
int norm: ์ด๋ฏธ์ง๋ฅผ ์ ๊ทํํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ (0 ๋๋ 1)
๋์:
์ฃผ์ด์ง ์ ๊ฒฝ๋ง์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ต์ ํํ๋ ํจ์์ด๋ค.
์๋ณธ ์ด๋ฏธ์ง(orig)๋ฅผ ๋ณํํ์ฌ ์ต์ ํ ๊ณผ์ ์ ์ํํ๋ค.
๋ค์ ๊ณผ์ ์ ์ํํ๋ค:
๋๋คํ๊ฒ dx, dy, flip ๊ฐ์ ์ ํํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ด๋ ๋ฐ ๋ค์ง๋๋ค.
crop_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์๋ฅธ๋ค.
resize_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ค.
ํ์ํ ๊ฒฝ์ฐ ์ด๋ฏธ์ง๋ฅผ ๋ค์ง๋๋ค.
resize_network ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ฒฝ๋ง์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ค.
make_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ delta ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ค.
forward_network ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ฒฝ๋ง์ ์์ ํ๋ฅผ ์ํํ๋ค.
calculate_loss ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ค์ ๊ณ์ฐํ๊ณ delta ์ด๋ฏธ์ง๋ฅผ ํํฐ๋งํ๋ค.
backward_network ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ฒฝ๋ง์ ์ญ์ ํ๋ฅผ ์ํํ๋ค.
ํ์ํ ๊ฒฝ์ฐ delta ์ด๋ฏธ์ง๋ฅผ ๋ค์ง๋๋ค.
resize_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ delta ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์๋ณธ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ก ์กฐ์ ํ๋ค.
crop_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์๋ฅธ๋ค.
grayscale_image ๋ฐ fill_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ณํํ๋ค.
normalize_array ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ ๊ทํํ๋ค.
axpy_cpu ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
constrain_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ๊ฐ์ ์ ํํ๋ค.
๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค.
์ค๋ช :
์ด ํจ์๋ ์ฃผ์ด์ง ์ ๊ฒฝ๋ง์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ต์ ํํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค.
์๋ณธ ์ด๋ฏธ์ง๋ฅผ ๋ณํํ๊ณ ์ ๊ฒฝ๋ง์ ํตํด ์ญ์ ํํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
์ด๋ฏธ์ง์ ์ด๋, ํฌ๊ธฐ ์กฐ์ , ๋ค์ง๊ธฐ ๋ฑ์ ํตํด ๋ค์ํ ๋ณํ์ ์ ์ฉํ ์ ์๋ค.
๋ณํ๋ ์ด๋ฏธ์ง๋ฅผ ์ ๊ฒฝ๋ง์ ์ ๋ ฅ์ผ๋ก ์ ๋ฌํ์ฌ ์ญ์ ํ๋ฅผ ์ํํ๊ณ , ์ถ๋ ฅ๊ฐ๊ณผ ์ค์ ๊ฐ ์ฌ์ด์ ์์ค์ ๊ณ์ฐํ๋ค.
smooth
ํจ์ ์ด๋ฆ: smooth
์ ๋ ฅ:
recon: ์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ (image*)
update: ์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ (image*)
lambda: ๋ถ๋ ์์์ ๊ฐ (float)
num: ์ ์ (int)
๋์:
recon ์ด๋ฏธ์ง๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์, num ๊ฐ์ ๋ฐ๋ผ ๋ธ๋ฌ(ํ๋ฆผ) ํจ๊ณผ๋ฅผ ์ ์ฉํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ update ์ด๋ฏธ์ง์ ์ ์ฅํ๋ค.
๊ฐ ์ฑ๋ ๋ณ๋ก ๋ธ๋ฌ๋ง์ ์ํํ๋ฉฐ, num์ ๊ฐ์ด ํด์๋ก ๋ธ๋ฌ๋ง ์ ๋๊ฐ ๋์์ง๋ค.
๋ธ๋ฌ๋ง์ ์ํํ๋ ๊ณผ์ ์์, lambda ๊ฐ์ ๋ฐ๋ผ smoothing ํจ๊ณผ๋ฅผ ์ ์ฉํ๋ค.
์ค๋ช :
์ ๋ ฅ ์ด๋ฏธ์ง์ธ recon์ ๊ฐ ํฝ์ ์ ๋ํด์, ์ฃผ๋ณ num x num ํฝ์ ์ ๊ฐ๋ค์ ํ๊ท ์ ๊ณ์ฐํ๊ณ , ํด๋น ํฝ์ ๊ฐ์ ํด๋น ํ๊ท ๊ฐ์ผ๋ก ๋์ฒดํ๋ค. ์ด๋ฅผ ํตํด ๋ธ๋ฌ๋ง ํจ๊ณผ๋ฅผ ๊ตฌํํ๋ค.
๋ธ๋ฌ๋ง์ ์ํํ๋ ๊ณผ์ ์์ smoothing ํจ๊ณผ๋ฅผ ์ ์ฉํ๊ธฐ ์ํด, recon ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ๊ฐ๊ณผ, ๋ธ๋ฌ๋ง์ผ๋ก ๊ตฌํด์ง ํด๋น ํฝ์ ์ฃผ๋ณ ๊ฐ์ ํ๊ท ๊ฐ์ lambda ๋น์จ๋ก ์กฐ์ ํ์ฌ update ์ด๋ฏธ์ง์ ์ ์ฅํ๋ค.
์ต์ข ์ ์ผ๋ก smoothing ํจ๊ณผ๊ฐ ์ ์ฉ๋ ์ด๋ฏธ์ง๋ update์ ์ ์ฅ๋๋ฉฐ, ์ดํ ํ์ต์ ์ํด ์ฌ์ฉ๋๋ค.
reconstruct_picture
ํจ์ ์ด๋ฆ: reconstruct_picture
์ ๋ ฅ:
net: ์ ๊ฒฝ๋ง ๊ตฌ์กฐ์ฒด
features: float ํฌ์ธํฐ, ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ํ ํน์ง ๋ฒกํฐ
recon: ์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด, ์ฌ๊ตฌ์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ ํฌ์ธํฐ
update: ์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด, ์ ๋ฐ์ดํธ ๋ ๊ฐ์ ์ ์ฅํ ํฌ์ธํฐ
rate: float, ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์์ ์ฌ์ฉํ ํ์ต๋ฅ
momentum: float, ๊ด์ฑ์ ๋ํ ๊ฐ์ค์น
lambda: float, ์ฌ๊ตฌ์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋๋ฝ๊ฒ ๋ง๋๋ ์ ๊ทํ ๊ฐ์ค์น
smooth_size: int, ๋ถ๋๋ฌ์ด ํจ๊ณผ๋ฅผ ์ํด ์ฌ์ฉ๋๋ ์ปค๋ ํฌ๊ธฐ
iters: int, ์ฌ๊ตฌ์ฑ์ ์ํ ๋ฐ๋ณต ํ์
๋์:
์ฌ๊ตฌ์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ์ ๋ฐ์ดํธํ๊ณ , ์ ๊ฒฝ๋ง์์ backward propagation์ ์ํํ์ฌ ์ญ์ ํ๋ฅผ ์ํํฉ๋๋ค.
์ ๋ฐ์ดํธ๋ ์ด๋ฏธ์ง๋ฅผ ํ์ฌ ์ด๋ฏธ์ง์ ๋ํ๊ณ , ๋ถ๋๋ฌ์ด ํจ๊ณผ๋ฅผ ์ํด smooth ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ ๋ฐ์ดํธ๋ ์ด๋ฏธ์ง๋ฅผ ์ด์ ์ด๋ฏธ์ง์ ๋ํ ํ์ต๋ฅ ๊ณผ ๊ด์ฑ ๊ฐ์ค์น๋ฅผ ๊ณ ๋ คํ์ฌ ์ ๋ฐ์ดํธํฉ๋๋ค.
์ฌ๊ตฌ์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ์ ์ฝ ์กฐ๊ฑด์ ๋ฐ๋ผ ํด๋ฆฌํํฉ๋๋ค.
์ค๋ช :
reconstruct_picture ํจ์๋ ์ ๊ฒฝ๋ง์์ ํน์ง ๋ฒกํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ํจ์์ ๋๋ค.
์ด ํจ์๋ ์ญ์ ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์ด๋ฏธ์ง์ ํน์ง ๋ฒกํฐ์ ์ถ๋ ฅ ๋ฒกํฐ ๊ฐ์ ์ค์ฐจ๋ฅผ ์ค์ด๊ณ , ์ฌ๊ตฌ์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
์ด ํจ์๋ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ฌ๊ตฌ์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋๋ฝ๊ฒ ๋ง๋ค๊ณ , ์ ๋ฐ์ดํธ๋ ์ด๋ฏธ์ง๋ฅผ ํ์ฌ ์ด๋ฏธ์ง์ ๋ํ๋ ๊ฒ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์ฌ๊ตฌ์ฑํฉ๋๋ค.
์ด ํจ์๋ ์ฌ๊ตฌ์ฑ๋ ์ด๋ฏธ์ง์ ์ ์ฝ ์กฐ๊ฑด์ ์ ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ํด๋ฆฌํํฉ๋๋ค.
run_nightmare
ํจ์ ์ด๋ฆ: run_nightmare
์ ๋ ฅ:
argc: int ํ์ , ํ๋ก๊ทธ๋จ ์คํ ์ ์ ๋ฌ๋ ์ธ์์ ๊ฐ์
argv: char** ํ์ , ํ๋ก๊ทธ๋จ ์คํ ์ ์ ๋ฌ๋ ์ธ์๋ค์ ๋ฐฐ์ด
argv[0]: ํ๋ก๊ทธ๋จ ์คํ ํ์ผ ์ด๋ฆ
argv[1]: ์คํ ์ต์
argv[2]: char* ํ์ , ๋ชจ๋ธ์ ๊ตฌ์ฑ ํ์ผ(config file) ๊ฒฝ๋ก
argv[3]: char* ํ์ , ๋ชจ๋ธ์ ๊ฐ์ค์น(weight) ํ์ผ ๊ฒฝ๋ก
argv[4]: char* ํ์ , ์ ๋ ฅ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก
argv[5]: int ํ์ , ์ต๋ ๋ ์ด์ด ์
๋์:
์ ๋ ฅ๋ ์ธ์๋ค์ ํ์ฑํ๊ณ , reconstruct๊ฐ 1์ด๋ฉด ์ฃผ์ด์ง ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ฌ๊ตฌ์ฑํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฃผ์ด์ง ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ต์ ํํฉ๋๋ค.
์ด๋, ๋ค์ํ ์ต์ ๋ค์ด ์ค์ ๋ ์ ์์ต๋๋ค. ์ต์ ํ๋ ์ด๋ฏธ์ง๋ ํ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ Darknet ํ๋ ์์ํฌ์์ ์ฌ์ฉ๋๋ "nightmare" ๊ธฐ๋ฅ์ ๊ตฌํํ ํจ์์ ๋๋ค.
"nightmare"๋ DeepDream ๊ธฐ์ ์ ์์ฉํ์ฌ ์ฃผ์ด์ง ์ด๋ฏธ์ง๋ฅผ ์ต์ ํํ๋ ๊ธฐ์ ๋ก, ์ด๋ฏธ์ง์ ๋ด๋ถ feature๋ฅผ ์๊ฐํํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ด ํจ์๋ C์ธ์ด๋ก ์์ฑ๋์ด ์์ผ๋ฉฐ, ์ฃผ์ด์ง ๋ชจ๋ธ ํ์ผ๊ณผ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ ํ๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
์ด ํจ์๋ ํ๋ก๊ทธ๋จ ์คํ ์ ์ ๋ฌ๋ ์ธ์๋ค์ ํ์ฑํ์ฌ ์ฌ์ฉํ๋ฉฐ, ์ต์ ์ ๋ฐ๋ผ ์ต์ ํ ๊ณผ์ ์์ ๋ค์ํ ๋ณํ๋ค์ด ์ ์ฉ๋ฉ๋๋ค.
์ต์ข ์ ์ผ๋ก ์์ฑ๋ ์ด๋ฏธ์ง๋ ํ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
Last updated
Was this helpful?