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 ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚œ์ˆ˜ ์‹œ๋“œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ•จ์ˆ˜๋Š” ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ๋‹ค์Œ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค:

  1. ๋„คํŠธ์›Œํฌ์˜ ๋ ˆ์ด์–ด๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์ถœ๋ ฅ ์ฑ„๋„ ์ˆ˜(out_c)๊ฐ€ 3์ธ ๋ ˆ์ด์–ด๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ด ๋ ˆ์ด์–ด๋ฅผ ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด(imlayer)๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  2. random_unit_vector_image ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์ž‘์œ„ ๋‹จ์œ„ ๋ฒกํ„ฐ๋ฅผ ๊ฐ€์ง€๋Š” ์‹œ์ž‘ ์ด๋ฏธ์ง€(start)์™€ ๋ ์ด๋ฏธ์ง€(end)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  3. ๋„คํŠธ์›Œํฌ์˜ ๊ฐ€๋กœ(net->w), ์„ธ๋กœ(net->h), ์ฑ„๋„(net->c)์„ ํฌ๊ธฐ๋กœ ๊ฐ€์ง€๋Š” ์ด๋ฏธ์ง€(im)์™€ ๋ณต์‚ฌ๋œ ์ด๋ฏธ์ง€(orig)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  4. ์นด์šดํ„ฐ ๋ณ€์ˆ˜(count)๊ฐ€ ์ตœ๋Œ€ ์นด์šดํŠธ(max_count)์— ๋„๋‹ฌํ•  ๋•Œ๋งˆ๋‹ค ์ด๋ฏธ์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘ ์ด๋ฏธ์ง€(start)๋ฅผ ํ•ด์ œํ•˜๊ณ , ์‹œ์ž‘ ์ด๋ฏธ์ง€(start)์— ๋ ์ด๋ฏธ์ง€(end)๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ c๊ฐ€ 300์„ ์ดˆ๊ณผํ•˜๋ฉด ๋ ์ด๋ฏธ์ง€(end)๋ฅผ ์›๋ž˜ ์ด๋ฏธ์ง€(orig)๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  5. slerp ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ์ด๋ฏธ์ง€(start)์™€ ๋ ์ด๋ฏธ์ง€(end) ์‚ฌ์ด๋ฅผ ๋ณด๊ฐ„ํ•˜์—ฌ ์ค‘๊ฐ„ ์ด๋ฏธ์ง€(im)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  6. ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€(im)๋ฅผ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์˜ˆ์ธกํ•ฉ๋‹ˆ๋‹ค.

  7. get_network_image_layer ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์ธก ๊ฒฐ๊ณผ ์ค‘ ์›ํ•˜๋Š” ๋ ˆ์ด์–ด(imlayer)์˜ ์ด๋ฏธ์ง€(out)๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

  8. normalize_image ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€(out)๋ฅผ ์ •๊ทœํ™”ํ•ฉ๋‹ˆ๋‹ค.

  9. ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€(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 ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚œ์ˆ˜ ์‹œ๋“œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ทธ ํ›„, ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ๋‹ค์Œ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค:

  1. make_image ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ์˜ ๊ฐ€๋กœ(net->w), ์„ธ๋กœ(net->h), ์ฑ„๋„(net->c)์„ ํฌ๊ธฐ๋กœ ๊ฐ€์ง€๋Š” ์ด๋ฏธ์ง€(im)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  2. ์ด๋ฏธ์ง€์˜ ๊ฐ ํ”ฝ์…€์„ rand_normal ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์ž‘์œ„๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

  3. network_predict ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ์ž ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ์˜ˆ์ธกํ•ฉ๋‹ˆ๋‹ค.

  4. get_network_image_layer ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์ธก ๊ฒฐ๊ณผ ์ค‘ ์›ํ•˜๋Š” ๋ ˆ์ด์–ด(imlayer)์˜ ์ด๋ฏธ์ง€(out)๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

  5. normalize_image ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€(out)๋ฅผ ์ •๊ทœํ™”ํ•ฉ๋‹ˆ๋‹ค.

  6. ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€(out)๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  "out"์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  7. ์‚ฌ์šฉํ•œ ์ด๋ฏธ์ง€(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?