lsd
#include <math.h>
#include "darknet.h"slerp
void slerp(float *start, float *end, float s, int n, float *out)
{
float omega = acos(dot_cpu(n, start, 1, end, 1));
float so = sin(omega);
fill_cpu(n, 0, out, 1);
axpy_cpu(n, sin((1-s)*omega)/so, start, 1, out, 1);
axpy_cpu(n, sin(s*omega)/so, end, 1, out, 1);
float mag = mag_array(out, n);
scale_array(out, n, 1./mag);
}ํจ์ ์ด๋ฆ: slerp
์ ๋ ฅ:
start: float ํฌ์ธํฐ. ์์ ๋ฒกํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ ๋๋ค.
end: float ํฌ์ธํฐ. ๋ ๋ฒกํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ ๋๋ค.
s: float ๊ฐ. ๋ณด๊ฐ ๋งค๊ฐ๋ณ์์ ๋๋ค. [0, 1] ๋ฒ์์ ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
n: ์ ์. ๋ฒกํฐ์ ๊ธธ์ด ๋๋ ์์ ์์ ๋๋ค.
out: float ํฌ์ธํฐ. ๊ฒฐ๊ณผ ๋ฒกํฐ๋ฅผ ์ ์ฅํ ํฌ์ธํฐ์ ๋๋ค.
๋์:
์ด ํจ์๋ ๋ ๋ฒกํฐ ์ฌ์ด๋ฅผ ๊ตฌ๋ฉด ๋ณด๊ฐ(spherical interpolation)ํ์ฌ ์๋ก์ด ๋ฒกํฐ๋ฅผ ์์ฑํฉ๋๋ค.
์์ ๋ฒกํฐ(start)์ ๋ ๋ฒกํฐ(end) ์ฌ์ด๋ฅผ ๋งค๊ฐ๋ณ์ s๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ์ ์ผ๋ก ๋ณด๊ฐํ๊ณ , ์์ฑ๋ ๋ณด๊ฐ ๋ฒกํฐ๋ฅผ out์ ์ ์ฅํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ฃผ์ด์ง ์์ ๋ฒกํฐ(start)์ ๋ ๋ฒกํฐ(end) ์ฌ์ด๋ฅผ ๊ตฌ๋ฉด ๋ณด๊ฐํ์ฌ ์๋ก์ด ๋ฒกํฐ๋ฅผ ์์ฑํฉ๋๋ค.
๋จผ์ , ๋ ๋ฒกํฐ ์ฌ์ด์ ๊ฐ๋(omega)๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด dot_cpu ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ด์ ๊ฐ์ ์ป์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ฐ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ธ(sin) ๊ฐ์ ๊ณ์ฐํฉ๋๋ค.
๊ทธ ๋ค์, ๊ฒฐ๊ณผ ๋ฒกํฐ(out)๋ฅผ 0์ผ๋ก ์ด๊ธฐํํฉ๋๋ค.
axpy_cpu ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด๊ฐ๋ ๋ฒกํฐ๋ฅผ ๊ณ์ฐํ์ฌ ๊ฒฐ๊ณผ ๋ฒกํฐ(out)์ ๋ํฉ๋๋ค.
์ฌ๊ธฐ์๋ ์์ ๋ฒกํฐ(start)์ ๋ ๋ฒกํฐ(end)๋ฅผ ๋ณด๊ฐ ๋งค๊ฐ๋ณ์(s)์ ์ฌ์ธ ๊ฐ์ ๋ฐ๋ผ ์ ํ์ ์ผ๋ก ๋ณด๊ฐํ์ฌ ๊ณ์ฐํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ๊ฒฐ๊ณผ ๋ฒกํฐ(out)์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด mag_array ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
mag_array ํจ์๋ ๋ฒกํฐ์ ํฌ๊ธฐ ๋๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋ฐํํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ scale_array ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ ๋ฒกํฐ(out)๋ฅผ ์ด ํฌ๊ธฐ๋ก ๋๋์ด ์ ๊ทํํฉ๋๋ค.
random_unit_vector_image
ํจ์ ์ด๋ฆ: random_unit_vector_image
์ ๋ ฅ:
w: ์ ์. ์์ฑํ ์ด๋ฏธ์ง์ ๋๋น์ ๋๋ค.
h: ์ ์. ์์ฑํ ์ด๋ฏธ์ง์ ๋์ด์ ๋๋ค.
c: ์ ์. ์์ฑํ ์ด๋ฏธ์ง์ ์ฑ๋ ์์ ๋๋ค.
๋์:
์ด ํจ์๋ ์ฃผ์ด์ง ๋๋น(w), ๋์ด(h), ์ฑ๋(c)์ ๊ฐ์ง๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
์์ฑ๋ ์ด๋ฏธ์ง๋ ๊ฐ ํฝ์ ์ ๊ฐ์ด ๋ฌด์์๋ก ์ ํ๋ ๋จ์ ๋ฒกํฐ(unit vector)๋ก ์ด๊ธฐํ๋ฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ฃผ์ด์ง ๋๋น(w), ๋์ด(h), ์ฑ๋(c)์ ๊ฐ์ง๋ ์ด๋ฏธ์ง(im)๋ฅผ ์์ฑํฉ๋๋ค.
make_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋๋น, ๋์ด, ์ฑ๋์ ๋ง๋ ์ด๋ฏธ์ง ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ์ ๋ฃจํ๋ฅผ ํตํด ์ํํ๋ฉด์ rand_normal ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌด์์ ๊ฐ์ผ๋ก ์ด๊ธฐํํฉ๋๋ค.
์ด๋ ๊ฐ ํฝ์ ์ ๊ฐ์ ๋ฌด์์๋ก ์ ํํ ๊ฐ์ผ๋ก ์ค์ ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ด์ด์ mag_array ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
mag_array ํจ์๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ํฌ๊ธฐ ๋๋ ๋ฒกํฐ์ ํฌ๊ธฐ๋ฅผ ๋ฐํํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ scale_array ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ด ํฌ๊ธฐ๋ก ๋๋์ด ๋จ์ ๋ฒกํฐ(unit vector)๋ก ์ ๊ทํํฉ๋๋ค.
scale_array ํจ์๋ ๋ฐฐ์ด์ ์ฃผ์ด์ง ์ค์ผ์ผ๋ก ๋๋๋ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์์ฑ๋ ์ด๋ฏธ์ง(im)๋ฅผ ๋ฐํํฉ๋๋ค.
inter_dcgan
ํจ์ ์ด๋ฆ: inter_dcgan
์ ๋ ฅ:
cfgfile: ๋ฌธ์์ด ํฌ์ธํฐ. ๋คํธ์ํฌ์ ๊ตฌ์ฑ ์ค์ ํ์ผ ๊ฒฝ๋ก์ ๋๋ค.
weightfile: ๋ฌธ์์ด ํฌ์ธํฐ. ๋คํธ์ํฌ์ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก์ ๋๋ค.
๋์:
์ด ํจ์๋ ์ฃผ์ด์ง ๊ตฌ์ฑ ์ค์ ํ์ผ(cfgfile)๊ณผ ๊ฐ์ค์น ํ์ผ(weightfile)์ ์ฌ์ฉํ์ฌ DCGAN(Deep Convolutional Generative Adversarial Network)์ ๋ณด๊ฐ(interpolation)ํฉ๋๋ค.
DCGAN์ ์ด๋ฏธ์ง ์์ฑ์ ์ํ ์์ฑ์(generator)์ ์ด๋ฏธ์ง ์๋ณ์ ์ํ ํ๋ณ์(discriminator)๋ฅผ ํฌํจํ๋ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ๋๋ค.
์ด ํจ์๋ ๋ ๊ฐ์ ๋ฌด์์ ๋จ์ ๋ฒกํฐ๋ก๋ถํฐ ์์๊ณผ ๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ , ์ด ๋ ์ด๋ฏธ์ง ์ฌ์ด๋ฅผ ๋ณด๊ฐํ์ฌ ์ค๊ฐ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ๊ตฌ์ฑ ์ค์ ํ์ผ(cfgfile)๊ณผ ๊ฐ์ค์น ํ์ผ(weightfile)์ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ๊ฐ์ฒด(net)๋ฅผ ๋ก๋ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ set_batch_network ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ์ ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ 1๋ก ์ค์ ํฉ๋๋ค. srand ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์๋๋ฅผ ์ค์ ํฉ๋๋ค.
์ด ํจ์๋ ๋ฃจํ๋ฅผ ์คํํ๋ฉด์ ๋ค์ ์์ ์ ๋ฐ๋ณตํฉ๋๋ค:
๋คํธ์ํฌ์ ๋ ์ด์ด๋ฅผ ์ํํ๋ฉด์ ์ถ๋ ฅ ์ฑ๋ ์(out_c)๊ฐ 3์ธ ๋ ์ด์ด๋ฅผ ์ฐพ์ต๋๋ค. ์ด ๋ ์ด์ด๋ฅผ ์ด๋ฏธ์ง ๋ ์ด์ด(imlayer)๋ก ์ค์ ํฉ๋๋ค.
random_unit_vector_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌด์์ ๋จ์ ๋ฒกํฐ๋ฅผ ๊ฐ์ง๋ ์์ ์ด๋ฏธ์ง(start)์ ๋ ์ด๋ฏธ์ง(end)๋ฅผ ์์ฑํฉ๋๋ค.
๋คํธ์ํฌ์ ๊ฐ๋ก(net->w), ์ธ๋ก(net->h), ์ฑ๋(net->c)์ ํฌ๊ธฐ๋ก ๊ฐ์ง๋ ์ด๋ฏธ์ง(im)์ ๋ณต์ฌ๋ ์ด๋ฏธ์ง(orig)๋ฅผ ์์ฑํฉ๋๋ค.
์นด์ดํฐ ๋ณ์(count)๊ฐ ์ต๋ ์นด์ดํธ(max_count)์ ๋๋ฌํ ๋๋ง๋ค ์ด๋ฏธ์ง๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ์์ ์ด๋ฏธ์ง(start)๋ฅผ ํด์ ํ๊ณ , ์์ ์ด๋ฏธ์ง(start)์ ๋ ์ด๋ฏธ์ง(end)๋ฅผ ํ ๋นํฉ๋๋ค. ๋ง์ฝ c๊ฐ 300์ ์ด๊ณผํ๋ฉด ๋ ์ด๋ฏธ์ง(end)๋ฅผ ์๋ ์ด๋ฏธ์ง(orig)๋ก ์ค์ ํฉ๋๋ค.
slerp ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ด๋ฏธ์ง(start)์ ๋ ์ด๋ฏธ์ง(end) ์ฌ์ด๋ฅผ ๋ณด๊ฐํ์ฌ ์ค๊ฐ ์ด๋ฏธ์ง(im)๋ฅผ ์์ฑํฉ๋๋ค.
์์ฑ๋ ์ด๋ฏธ์ง(im)๋ฅผ ๋คํธ์ํฌ๋ฅผ ํตํด ์์ธกํฉ๋๋ค.
get_network_image_layer ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ธก ๊ฒฐ๊ณผ ์ค ์ํ๋ ๋ ์ด์ด(imlayer)์ ์ด๋ฏธ์ง(out)๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
normalize_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง(out)๋ฅผ ์ ๊ทํํฉ๋๋ค.
์์ฑ๋ ์ด๋ฏธ์ง(out)๋ฅผ ์ถ๋ ฅํ๊ณ "out"์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅํฉ๋๋ค. ๋ํ ์์ฐจ์ ์ธ ๋ฒํธ๋ฅผ ๊ฐ์ง ํ์ผ ์ด๋ฆ(buff)์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํฉ๋๋ค.
test_dcgan
ํจ์ ์ด๋ฆ: test_dcgan
์ ๋ ฅ:
cfgfile: ๋ฌธ์์ด ํฌ์ธํฐ. ๋คํธ์ํฌ์ ๊ตฌ์ฑ ์ค์ ํ์ผ ๊ฒฝ๋ก์ ๋๋ค.
weightfile: ๋ฌธ์์ด ํฌ์ธํฐ. ๋คํธ์ํฌ์ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก์ ๋๋ค.
๋์:
์ด ํจ์๋ ์ฃผ์ด์ง ๊ตฌ์ฑ ์ค์ ํ์ผ(cfgfile)๊ณผ ๊ฐ์ค์น ํ์ผ(weightfile)์ ์ฌ์ฉํ์ฌ DCGAN(Deep Convolutional Generative Adversarial Network)์ ํ ์คํธํฉ๋๋ค.
DCGAN์ ์ด๋ฏธ์ง ์์ฑ์ ์ํ ์์ฑ์(generator)์ ์ด๋ฏธ์ง ์๋ณ์ ์ํ ํ๋ณ์(discriminator)๋ฅผ ํฌํจํ๋ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ๋๋ค.
์ด ํจ์๋ ์์ฑ์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ , ์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ์ถ๋ ฅํ๊ณ ์ ์ฅํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ๊ตฌ์ฑ ์ค์ ํ์ผ(cfgfile)๊ณผ ๊ฐ์ค์น ํ์ผ(weightfile)์ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ๊ฐ์ฒด(net)๋ฅผ ๋ก๋ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ set_batch_network ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ์ ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ 1๋ก ์ค์ ํฉ๋๋ค.
srand ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์๋๋ฅผ ์ค์ ํฉ๋๋ค.
๊ทธ ํ, ๋ฌดํ ๋ฃจํ๋ฅผ ์คํํ๋ฉด์ ๋ค์ ์์ ์ ๋ฐ๋ณตํฉ๋๋ค:
make_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ์ ๊ฐ๋ก(net->w), ์ธ๋ก(net->h), ์ฑ๋(net->c)์ ํฌ๊ธฐ๋ก ๊ฐ์ง๋ ์ด๋ฏธ์ง(im)๋ฅผ ์์ฑํฉ๋๋ค.
์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ์ rand_normal ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌด์์๋ก ์ด๊ธฐํํฉ๋๋ค.
network_predict ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ์ ๋คํธ์ํฌ๋ฅผ ํตํด ์ด๋ฏธ์ง๋ฅผ ์์ธกํฉ๋๋ค.
get_network_image_layer ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ธก ๊ฒฐ๊ณผ ์ค ์ํ๋ ๋ ์ด์ด(imlayer)์ ์ด๋ฏธ์ง(out)๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
normalize_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง(out)๋ฅผ ์ ๊ทํํฉ๋๋ค.
์์ฑ๋ ์ด๋ฏธ์ง(out)๋ฅผ ์ถ๋ ฅํ๊ณ "out"์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅํฉ๋๋ค.
์ฌ์ฉํ ์ด๋ฏธ์ง(im)๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํฉ๋๋ค.
set_network_alpha_beta
ํจ์ ์ด๋ฆ: set_network_alpha_beta
์ ๋ ฅ:
net: network ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ. ๋คํธ์ํฌ ๊ฐ์ฒด๋ฅผ ๋ํ๋ ๋๋ค.
alpha: ๋ถ๋ ์์์ ๊ฐ. alpha ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ ๊ฐ์ ๋๋ค.
beta: ๋ถ๋ ์์์ ๊ฐ. beta ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ ๊ฐ์ ๋๋ค.
๋์:
์ด ํจ์๋ ์ฃผ์ด์ง ๋คํธ์ํฌ ๊ฐ์ฒด(net)์ ๊ฐ ๋ ์ด์ด ์ค ํ์ ์ด SHORTCUT์ธ ๋ ์ด์ด์ alpha์ beta ๊ฐ์ ์ค์ ํฉ๋๋ค.
SHORTCUT ๋ ์ด์ด๋ skip ์ฐ๊ฒฐ์ ๋ํ๋ด๋ฉฐ, alpha์ beta๋ ์ด๋ฌํ skip ์ฐ๊ฒฐ์ ๊ฐ์ค์น๋ฅผ ์กฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ๋คํธ์ํฌ์ ๋ ์ด์ด๋ฅผ ๋ฐ๋ณตํ๋ฉด์ ๊ฐ ๋ ์ด์ด์ ํ์ ์ ํ์ธํฉ๋๋ค.
๋ง์ฝ ๋ ์ด์ด์ ํ์ ์ด SHORTCUT์ธ ๊ฒฝ์ฐ, ํด๋น ๋ ์ด์ด์ alpha์ beta ๊ฐ์ ์ฃผ์ด์ง alpha์ beta๋ก ์ค์ ํฉ๋๋ค.
์ด๋ ๊ฒ ํจ์ผ๋ก์จ SHORTCUT ๋ ์ด์ด์ ๊ฐ์ค์น๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค.
train_prog
ํจ์ ์ด๋ฆ: train_prog
์ ๋ ฅ:
cfg: ๋ฌธ์์ด ํฌ์ธํฐ. GAN ๋คํธ์ํฌ์ ์ค์ ํ์ผ ๊ฒฝ๋ก.
weight: ๋ฌธ์์ด ํฌ์ธํฐ. ์ฌ์ ํ์ต๋ GAN ๋คํธ์ํฌ์ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก.
acfg: ๋ฌธ์์ด ํฌ์ธํฐ. ํ๋ณ์(Discriminator) ๋คํธ์ํฌ์ ์ค์ ํ์ผ ๊ฒฝ๋ก.
aweight: ๋ฌธ์์ด ํฌ์ธํฐ. ์ฌ์ ํ์ต๋ ํ๋ณ์(Discriminator) ๋คํธ์ํฌ์ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก.
clear: ์ ์. ํ์ต ์ ๋คํธ์ํฌ๋ฅผ ์ด๊ธฐํํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ. 1๋ก ์ค์ ํ๋ฉด ์ด๊ธฐํ๋ฉ๋๋ค.
display: ์ ์. ํ์ต ์ค ์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ํ์ํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ. 1๋ก ์ค์ ํ๋ฉด ํ์๋ฉ๋๋ค.
train_images: ๋ฌธ์์ด ํฌ์ธํฐ. ํ์ต์ ์ฌ์ฉํ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ๊ฒฝ๋ก.
maxbatch: ์ ์. ์ต๋ ๋ฐฐ์น ์.
๋์:
์ด ํจ์๋ Deep Convolutional GAN(DCGAN)์ ํ์ตํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ค์ ํ์ผ๊ณผ ๊ฐ์ค์น ํ์ผ์ ์ฌ์ฉํ์ฌ GAN ๋ฐ ํ๋ณ์ ๋คํธ์ํฌ๋ฅผ ๋ก๋ํฉ๋๋ค.
ํ์ต ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ณ , ๋คํธ์ํฌ๋ฅผ ์ด๊ธฐํํ ํ ํ์ต์ ์์ํฉ๋๋ค. ํ์ต์ ์ฃผ์ด์ง ์ต๋ ๋ฐฐ์น ์(maxbatch)์ ๋๋ฌํ ๋๊น์ง ๋ฐ๋ณต๋ฉ๋๋ค.
๊ฐ ๋ฐฐ์น์์๋ ์์ฑ์(Generator)์ ํ๋ณ์(Discriminator) ๋คํธ์ํฌ๋ฅผ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์ ๋ฐ์ดํธํ๊ณ , ์ค์ฐจ๋ฅผ ๊ณ์ฐํ์ฌ ํ์ตํฉ๋๋ค.
ํ์ต ์ค์๋ ์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ํ์ํ๊ณ , ์ผ์ ์ฃผ๊ธฐ๋ง๋ค ๊ฐ์ค์น๋ฅผ ์ ์ฅํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ฃผ๋ก GPU๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ ํ๊ณ ์์ฑ๋์์ต๋๋ค.
GPU ์ง์์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ํด๋น ๋ถ๋ถ์ ์คํ๋์ง ์์ ์ ์์ต๋๋ค.
๋ํ, ํ์ต ์ค ์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ํ์ํ๋ ค๋ฉด OPENCV๊ฐ ํ์ํฉ๋๋ค.
train_dcgan
ํจ์ ์ด๋ฆ: train_dcgan
์ ๋ ฅ:
cfg: DCGAN์ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก (๋ฌธ์์ด)
weight: ์ฌ์ ํ์ต๋ DCGAN ๋ชจ๋ธ์ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก (๋ฌธ์์ด)
acfg: Adversarial Network(๊ฒฝ์ ์ ๊ฒฝ๋ง)์ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก (๋ฌธ์์ด)
aweight: ์ฌ์ ํ์ต๋ Adversarial Network ๋ชจ๋ธ์ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก (๋ฌธ์์ด)
clear: ๊ฐ์ค์น ์ด๊ธฐํ ์ฌ๋ถ (์ ์, 0 ๋๋ 1)
display: ํ์ต ๊ณผ์ ์์ ์ด๋ฏธ์ง๋ฅผ ํ์ํ ์ง ์ฌ๋ถ (์ ์, 0 ๋๋ 1)
train_images: ํ์ต์ ์ฌ์ฉํ ์ด๋ฏธ์ง ๊ฒฝ๋ก๊ฐ ํฌํจ๋ ํ์ผ์ ๊ฒฝ๋ก (๋ฌธ์์ด)
maxbatch: ์ต๋ ๋ฐฐ์น ์ (์ ์)
๋์:
DCGAN ๋ฐ Adversarial Network์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ์ตํ๋ ํจ์์ ๋๋ค. GPU๋ฅผ ์ฌ์ฉํ ๋๋ง ๋์ํฉ๋๋ค.
์ค๋ช :
์ฃผ์ด์ง ๊ฒฝ๋ก๋ก๋ถํฐ DCGAN ๋ฐ Adversarial Network ๋ชจ๋ธ์ ๋ก๋ํฉ๋๋ค.
์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ ์ด์ด๋ฅผ ์ฐพ๊ณ ์ด๊ธฐํ ์์ ์ ์ํํฉ๋๋ค.
ํ์ต ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ธ์๋ฅผ ์ค์ ํฉ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋ํ๊ณ , DCGAN๊ณผ Adversarial Network๋ฅผ ํ์ตํฉ๋๋ค.
ํ์ต ์งํ ์ํฉ์ ์ถ๋ ฅํ๊ณ , ์ฃผ๊ธฐ์ ์ผ๋ก ๋ชจ๋ธ ๊ฐ์ค์น๋ฅผ ์ ์ฅํฉ๋๋ค.
ํ์ต์ด ์๋ฃ๋๋ฉด ์ต์ข ๋ชจ๋ธ ๊ฐ์ค์น๋ฅผ ์ ์ฅํฉ๋๋ค.
ํ์ต ๊ณผ์ ์์ display ์ต์ ์ด ํ์ฑํ๋ ๊ฒฝ์ฐ ์ด๋ฏธ์ง๋ฅผ ํ์ํ๊ณ ์ ์ฅํฉ๋๋ค.
train_colorizer
ํจ์ ์ด๋ฆ: train_colorizer
์ ๋ ฅ:
char *cfg: ์ปฌ๋ฌ๋ผ์ด์ (Colorizer) ๋ชจ๋ธ์ ์ค์ ํ์ผ ๊ฒฝ๋ก
char *weight: ์ปฌ๋ฌ๋ผ์ด์ ๋ชจ๋ธ์ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
char *acfg: ์ปจ๋์ ๋(Conditional) ๋ชจ๋ธ์ ์ค์ ํ์ผ ๊ฒฝ๋ก
char *aweight: ์ปจ๋์ ๋ ๋ชจ๋ธ์ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
int clear: ๊ฐ์ค์น ์ด๊ธฐํ ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ
int display: ์ค๊ฐ ๊ณผ์ ์ ํ๋ฉด์ ํ์ํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ
๋์:
์ฃผ์ด์ง ์ค์ ๊ณผ ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ์ฌ ์ปฌ๋ฌ๋ผ์ด์ (Colorizer) ๋ชจ๋ธ๊ณผ ์ปจ๋์ ๋(Conditional) ๋ชจ๋ธ์ ๋ก๋ํ๋ค.
ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ณ ์ ์ฒ๋ฆฌ ์์ ์ ์ํํ๋ค.
์ปฌ๋ฌ ์ด๋ฏธ์ง์ ํ๋ฐฑ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ , ์ปจ๋์ ๋ ๋ชจ๋ธ์ ํ์ต์ ์งํํ๋ค.
์ปฌ๋ฌ๋ผ์ด์ ๋ชจ๋ธ์ ์ ๋ฐ์ดํธํ๊ณ , ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ํ์ํ๋ค.
์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐ์ค์น๋ฅผ ๋ฐฑ์ ํ๊ณ ์ ์ฅํ๋ค.
์ค๋ช :
์ด ํจ์๋ ์ปฌ๋ฌ๋ผ์ด์ (Colorizer) ๋ชจ๋ธ์ ํ์ต์ํค๋ ํจ์์ด๋ค.
์ฃผ์ด์ง ์ค์ ํ์ผ๊ณผ ๊ฐ์ค์น ํ์ผ์ ์ฌ์ฉํ์ฌ ์ปฌ๋ฌ๋ผ์ด์ ๋ชจ๋ธ๊ณผ ์ปจ๋์ ๋ ๋ชจ๋ธ์ ๋ก๋ํ๋ค.
ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ธฐ ์ํด ๊ฒฝ๋ก ๋ฐ ๋ฐ์ดํฐ ๊ด๋ จ ์ค์ ์ ์ด๊ธฐํํ๋ค.
๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ์ค๋ ๋๋ฅผ ์์ํ๊ณ , ๋ก๋ ์๋ฃ๊น์ง ๋๊ธฐํ๋ค.
๋ก๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฐฑ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ , ์ปจ๋์ ๋ ๋ชจ๋ธ์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๋ค.
์ปฌ๋ฌ๋ผ์ด์ ๋ชจ๋ธ์ ์ ๋ฐ์ดํธํ๊ณ , ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ํ์ํ๋ค(OpenCV ์ฌ์ฉ).
ํ์ต ์ค์๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐ์ค์น๋ฅผ ๋ฐฑ์ ํ๊ณ ์ ์ฅํ๋ค.
ํ์ต์ด ์๋ฃ๋๋ฉด ์ต์ข ๊ฐ์ค์น๋ฅผ ์ ์ฅํ๋ค.
์ฃผ์ํ ๋ณ์์ ๋์์ ๋ค์๊ณผ ๊ฐ๋ค:
cfg: ์ปฌ๋ฌ๋ผ์ด์ (Colorizer) ๋ชจ๋ธ์ ์ค์ ํ์ผ ๊ฒฝ๋ก
weight: ์ปฌ๋ฌ๋ผ์ด์ ๋ชจ๋ธ์ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
acfg: ์ปจ๋์ ๋(Conditional) ๋ชจ๋ธ์ ์ค์ ํ์ผ ๊ฒฝ๋ก
aweight: ์ปจ๋์ ๋ ๋ชจ๋ธ์ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
clear: ๊ฐ์ค์น ์ด๊ธฐํ ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ
display: ์ค๊ฐ ๊ณผ์ ์ ํ๋ฉด์ ํ์ํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ
test_lsd
ํจ์ ์ด๋ฆ: test_lsd
์ ๋ ฅ:
char *cfg: LSD ํ ์คํธ์ ์ฌ์ฉ๋๋ ์ค์ ํ์ผ ๊ฒฝ๋ก
char *weights: LSD ํ ์คํธ์ ์ฌ์ฉ๋๋ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
char *filename: ํ ์คํธํ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก
int gray: ๊ทธ๋ ์ด์ค์ผ์ผ ์ด๋ฏธ์ง๋ก ๋ณํํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ
๋์:
์ฃผ์ด์ง ์ค์ ๊ณผ ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ์ฌ LSD (Line Segment Detection) ๋ชจ๋ธ์ ๋ก๋ํ๋ค.
LSD ๋ชจ๋ธ์ ๋ํด ํ ์คํธ ์ด๋ฏธ์ง๋ฅผ ์ ๋ ฅ์ผ๋ก ์ ๋ฌํ๊ณ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ค.
์์ธก ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๊ณตํ์ฌ ์ถ๋ ฅํ๊ณ , ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๊ณ ํ์ํ๋ค.
์ค๋ช :
์ด ํจ์๋ LSD (Line Segment Detection) ๋ชจ๋ธ์ ํ ์คํธํ๋ ํจ์์ด๋ค.
์ฃผ์ด์ง ์ค์ ํ์ผ๊ณผ ๊ฐ์ค์น ํ์ผ์ ์ฌ์ฉํ์ฌ LSD ๋ชจ๋ธ์ ๋ก๋ํ๋ค.
ํ ์คํธํ ์ด๋ฏธ์ง ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ก๋ถํฐ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
ํ ์คํธ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ณ , ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ณ , ํ์์ ๋ฐ๋ผ ๊ทธ๋ ์ด์ค์ผ์ผ๋ก ๋ณํํ๋ค.
๋ณํ๋ ์ด๋ฏธ์ง๋ฅผ LSD ๋ชจ๋ธ์ ์ ๋ ฅ์ผ๋ก ์ ๋ฌํ์ฌ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ค.
์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๊ณ , ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๊ณ ํ์ํ๋ค.
ํ ์คํธ ์์ ์ ๋ฐ๋ณตํ์ฌ ์ฌ๋ฌ ์ด๋ฏธ์ง์ ๋ํด ํ ์คํธํ ์ ์๋ค.
์ฃผ์ํ ๋ณ์์ ๋์์ ๋ค์๊ณผ ๊ฐ๋ค:
cfg: LSD ํ ์คํธ์ ์ฌ์ฉ๋๋ ์ค์ ํ์ผ ๊ฒฝ๋ก
weights: LSD ํ ์คํธ์ ์ฌ์ฉ๋๋ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
filename: ํ ์คํธํ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก
gray: ๊ทธ๋ ์ด์ค์ผ์ผ ์ด๋ฏธ์ง๋ก ๋ณํํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ
imlayer: ์ถ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ด์ด ์ธ๋ฑ์ค
์ ๋ ฅ๋ ์ด๋ฏธ์ง ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ํ์ธํ๊ณ , ์กด์ฌํ๋ ๊ฒฝ์ฐ ํด๋น ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๋ค.
์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ก๋ถํฐ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
์ด๋ฏธ์ง ํ์ผ์ ๋ก๋ํ๊ณ , ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ณ , ํ์์ ๋ฐ๋ผ ๊ทธ๋ ์ด์ค์ผ์ผ๋ก ๋ณํํ๋ค.
๋ณํ๋ ์ด๋ฏธ์ง๋ฅผ LSD ๋ชจ๋ธ์ ์ ๋ ฅ์ผ๋ก ์ ๋ฌํ์ฌ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ค.
๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ฅผ ์ถ๋ ฅํ๊ณ , ์ ์ฅํ๋ค.
ํ ์คํธ ์์ ์ ๋ฐ๋ณตํ์ฌ ๋ค๋ฅธ ์ด๋ฏธ์ง์ ๋ํด ํ ์คํธํ ์ ์๋ค.
run_lsd
ํจ์ ์ด๋ฆ: run_lsd
์ ๋ ฅ:
int argc: ํ๋ก๊ทธ๋จ ์คํ ์ ์ ๋ฌ๋๋ ๋ช ๋ นํ ์ธ์์ ๊ฐ์
char **argv: ํ๋ก๊ทธ๋จ ์คํ ์ ์ ๋ฌ๋๋ ๋ช ๋ นํ ์ธ์ ๋ฐฐ์ด
๋์:
์ฃผ์ด์ง ๋ช ๋ นํ ์ธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก LSD (Line Segment Detection) ๊ด๋ จ ์์ ์ ์คํํ๋ ํจ์์ด๋ค.
ํ๋ก๊ทธ๋จ ์คํ ์ ํ์ํ ์ธ์์ ๊ฐ์๋ฅผ ์ฒดํฌํ๊ณ , ๋ถ์กฑํ ๊ฒฝ์ฐ ์ฌ์ฉ๋ฒ์ ์ถ๋ ฅํ๊ณ ํจ์๋ฅผ ์ข ๋ฃํ๋ค.
๋ค์ํ ์ต์ ๊ณผ ํจ๊ป LSD ๊ด๋ จ ์์ ์ ์คํํ๋ค.
์ฃผ์ด์ง ๋ช ๋ นํ ์ธ์๋ฅผ ๋ถ์ํ์ฌ ํด๋นํ๋ ์์ ์ ์ํํ๋ค.
์ค๋ช :
์ด ํจ์๋ LSD (Line Segment Detection) ๊ด๋ จ ์์ ์ ์คํํ๋ ํจ์์ด๋ค.
ํ๋ก๊ทธ๋จ ์คํ ์ ์ ๋ฌ๋๋ ๋ช ๋ นํ ์ธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ ์ ๊ฒฐ์ ํ๊ณ ํด๋น ์์ ์ ์ํํ๋ค.
ํ๋ก๊ทธ๋จ ์คํ ์ ์ธ์์ ๊ฐ์๊ฐ ์ถฉ๋ถํ์ง ์์ ๊ฒฝ์ฐ, ์ฆ์ ์ฌ์ฉ๋ฒ์ ์ถ๋ ฅํ๊ณ ํจ์๋ฅผ ์ข ๋ฃํ๋ค.
์ฃผ์ํ ์ธ์์ ์์ ์ ๋ค์๊ณผ ๊ฐ๋ค:
cfg: LSD ์์ ์ ์ฌ์ฉ๋๋ ์ค์ ํ์ผ ๊ฒฝ๋ก
weights: LSD ์์ ์ ์ฌ์ฉ๋๋ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก (์ต์ )
filename: ํ ์คํธ ์์ ์ ์ฌ์ฉ๋๋ ํ์ผ ๊ฒฝ๋ก (์ต์ )
acfg: ๋ค๋ฅธ ๋คํธ์ํฌ์ ์ค์ ํ์ผ ๊ฒฝ๋ก (์ต์ )
aweights: ๋ค๋ฅธ ๋คํธ์ํฌ์ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก (์ต์ )
clear: ์์ ์คํ ์ ์ ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ธ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ
display: ๊ฒฐ๊ณผ๋ฅผ ํ์ํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ
batches: ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ์ ์ ๊ฐ
file: ๋ฐ์ดํฐ ํ์ผ ๊ฒฝ๋ก
์ฃผ์ด์ง ๋ช ๋ นํ ์ธ์๋ฅผ ๋ถ์ํ์ฌ ํด๋นํ๋ ์์ ์ ์ํํ๋ค.
์ฃผ์ ์ฒ๋ฆฌ๋ ์ฝ๋๋ ์ฃผ์์ ํด์ ํ๊ณ ํด๋นํ๋ ํจ์๋ฅผ ํธ์ถํ๋ ๋ถ๋ถ์ด๋ค.
์ฃผ๋ก
train_*,test_*๋ฑ์ ํจ์๋ฅผ ํธ์ถํ์ฌ LSD ๊ด๋ จ ์์ ์ ์ํํ๋ค.
Last updated
Was this helpful?