parser_2
free_section
ํจ์ ์ด๋ฆ: free_section
์ ๋ ฅ:
section *s (์ค์ ํ์ผ์์ ํ์ฑ๋ ์น์ ์ ๋ํ๋ด๋ section ๊ตฌ์กฐ์ฒด)
๋์:
์ค์ ํ์ผ์์ ํ์ฑ๋ ์น์ ์ ํด์ (free)ํ๋ค.
์ด ํจ์๋ section ๊ตฌ์กฐ์ฒด์ ํด๋น ๊ตฌ์กฐ์ฒด์ options ๋ฆฌ์คํธ์ ์ ์ฅ๋ ๋ชจ๋ kvp(key-value pair) ์์๋ฅผ ํด์ ํ๋ค.
์ค๋ช :
s->type: ์น์ ์ ์ด๋ฆ์ ์ ์ฅํ๋ ๋ฌธ์์ด์ ํด์ ํ๋ค.
s->options: ์น์ ๋ด๋ถ์ ๋ชจ๋ ์ต์ (kvp) ์์๋ค์ ํด์ ํ๋ค. ๊ฐ ์์๋ kvp ๊ตฌ์กฐ์ฒด์ ์ ์ฅ๋์ด ์์ผ๋ฉฐ, key์ value๋ฅผ ์ ์ฅํ๋ ๋ฌธ์์ด์ ํฌํจํ๊ณ ์๋ค.
s->options->front: options ๋ฆฌ์คํธ์ ์ฒ์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ.
pair->key: kvp ๊ตฌ์กฐ์ฒด ๋ด๋ถ์์ ์ ์ฅ๋ key ๋ฌธ์์ด์ ํด์ ํ๋ค.
pair: kvp ๊ตฌ์กฐ์ฒด๋ฅผ ํด์ ํ๋ค.
n: options ๋ฆฌ์คํธ์์ ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ.
next: options ๋ฆฌ์คํธ์์ ํ์ฌ ๋ ธ๋์ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ.
s: ์ต์ข ์ ์ผ๋ก section ๊ตฌ์กฐ์ฒด๋ฅผ ํด์ ํ๋ค.
parse_data
ํจ์ ์ด๋ฆ: parse_data
์ ๋ ฅ:
char *data: ๋ถ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด ํฌ์ธํฐ
float *a: ๋ถ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ float ๋ฐฐ์ด ํฌ์ธํฐ
int n: ๋ถ์ํ ๋ฐ์ดํฐ ๊ฐ์
๋์:
์ฃผ์ด์ง ๋ฌธ์์ด ํฌ์ธํฐ data์์ ์ผํ๋ก ๊ตฌ๋ถ๋ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ float ๋ฐฐ์ด ํฌ์ธํฐ a์ ์ ์ฅํ๋ค.
n์ ๋ถ์ํ ๋ฐ์ดํฐ ๊ฐ์๋ก, n๋ณด๋ค ์ ์ ๊ฐ์์ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ ๋จ์ ๋ฐฐ์ด ์์๋ 0์ผ๋ก ์ด๊ธฐํ๋๋ค.
์ค๋ช :
parse_data ํจ์๋ CSV(comma-separated values) ํ์์ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ float ๋ฐฐ์ด๋ก ์ ์ฅํ๋ ํจ์์ด๋ค. ์ ๋ ฅ์ผ๋ก๋ ๋ถ์ํ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธด ๋ฌธ์์ด ํฌ์ธํฐ data์ ์ด๋ฅผ ์ ์ฅํ float ๋ฐฐ์ด ํฌ์ธํฐ a, ๊ทธ๋ฆฌ๊ณ ๋ถ์ํ ๋ฐ์ดํฐ ๊ฐ์๋ฅผ ์๋ฏธํ๋ ์ ์ํ ๋ณ์ n์ ๋ฐ๋๋ค.
ํจ์๋ ๋ฌธ์์ด ํฌ์ธํฐ curr์ ์ฒ์์๋ data๋ก ์ด๊ธฐํํ๊ณ , ๋ค์์ผ๋ก ๋ถ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด ํฌ์ธํฐ next๋ฅผ curr๋ก ์ด๊ธฐํํ๋ค. done ๋ณ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๋ณ์๋ก, ์ฒ์์๋ false๋ก ์ด๊ธฐํํ๋ค.
๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ n๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋ค. ๋ถ์ํ ๋ฐ์ดํฐ๊ฐ ๋ ์ด์ ์์ผ๋ฉด done ๋ณ์๋ฅผ true๋ก ๋ณ๊ฒฝํ๊ณ ๋ฐ๋ณต๋ฌธ์ ๋น ์ ธ๋์จ๋ค. ํ์ฌ ๋ถ์ํ๊ณ ์๋ ๋ฐ์ดํฐ๊ฐ ๋๋๋ ์์น(next)๋ฅผ ์ฐพ์, ํด๋น ์์น์ ๋ ๋ฌธ์('\0')๋ฅผ ๋ฃ์ด ๋ฌธ์์ด์ ์ข ๋ฃ์ํจ๋ค. curr์๋ ๋ถ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ํด๋น ๋ฐ์ดํฐ์ ์์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ next์ ๋ค์ ์์น๋ฅผ ์ ์ฅํ๋ค.
sscanf ํจ์๋ฅผ ์ด์ฉํ์ฌ curr์ด ๊ฐ๋ฆฌํค๋ ์์น์์๋ถํฐ ๋ค์ ๋ ๋ฌธ์ ์ ๊น์ง์ ๋ฌธ์์ด์ float ๊ฐ์ผ๋ก ๋ณํํ์ฌ a ๋ฐฐ์ด์ ์ ์ฅํ๋ค. ๋ถ์ํ ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ n๊ฐ๋ณด๋ค ์ ์ ๊ฒฝ์ฐ ๋จ์ ๋ฐฐ์ด ์์๋ 0์ผ๋ก ์ด๊ธฐํ๋๋ค.
parse_local
ํจ์ ์ด๋ฆ: parse_local
์ ๋ ฅ:
options: ๋ฆฌ์คํธ ํฌ์ธํฐ, ๋ ์ด์ด์ ์ค์ ์ ๋ณด
params: size_params ๊ตฌ์กฐ์ฒด, ๋ ์ด์ด ์ ๋ ฅ ์ด๋ฏธ์ง์ ํฌ๊ธฐ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์
๋์:
options์์ ํํฐ ์(n), ํํฐ ํฌ๊ธฐ(size), ์คํธ๋ผ์ด๋(stride), ํจ๋ฉ(pad), ํ์ฑํ ํจ์(activation) ์ ๋ณด๋ฅผ ํ์ฑํ์ฌ local_layer ๊ตฌ์กฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฐํํจ
batch, h, w, c๋ params์์ ๊ฐ์ ธ์ด
h, w, c๊ฐ 0์ด๋ฉด ์๋ฌ๋ฅผ ๋ฐ์์ํด
์ค๋ช :
local_layer ๊ตฌ์กฐ์ฒด๋ ๋ก์ปฌ ๋ ์ด์ด๋ฅผ ํํํ๊ธฐ ์ํ ๊ตฌ์กฐ์ฒด๋ก, ํํฐ ์(n), ํํฐ ํฌ๊ธฐ(size), ์คํธ๋ผ์ด๋(stride), ํจ๋ฉ(pad), ํ์ฑํ ํจ์(activation) ๋ฑ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์
make_local_layer ํจ์๋ฅผ ์ด์ฉํ์ฌ local_layer ๊ตฌ์กฐ์ฒด๋ฅผ ์์ฑํจ
option_find_int, option_find_str ํจ์๋ฅผ ์ด์ฉํ์ฌ options์์ ํ์ํ ์ ๋ณด๋ฅผ ํ์ฑํจ
get_activation ํจ์๋ฅผ ์ด์ฉํ์ฌ activation_s ๋ฌธ์์ด์ ํด๋นํ๋ ํ์ฑํ ํจ์๋ฅผ ๊ฐ์ ธ์ด
local_layer ์ด์ ๋ ์ด์ด๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ถ๋ ฅํ๋ ๋ ์ด์ด์ธ์ง ํ์ธํ๊ธฐ ์ํด params์์ h, w, c ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ด
h, w, c๊ฐ 0์ด๋ฉด ์ด๋ฏธ์ง๋ฅผ ์ถ๋ ฅํ๋ ๋ ์ด์ด๊ฐ ์๋๋ฏ๋ก ์๋ฌ๋ฅผ ๋ฐ์์ํด
parse_deconvolutional
ํจ์ ์ด๋ฆ: parse_deconvolutional
์ ๋ ฅ:
list *options (์ค์ ๋ฆฌ์คํธ)
size_params params (ํฌ๊ธฐ ์ ๋ณด ๊ตฌ์กฐ์ฒด)
๋์:
์ค์ ๋ฆฌ์คํธ๋ก๋ถํฐ ๋์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด๋ฅผ ํ์ฑํ์ฌ ์์ฑํ๋ค.
์ค๋ช :
์ค์ ๋ฆฌ์คํธ๋ก๋ถํฐ ํํฐ ์, ์ปค๋ ํฌ๊ธฐ, ์คํธ๋ผ์ด๋, ํ์ฑํ ํจ์ ๋ฑ์ ํ์ฑํ๋ค.
ํฌ๊ธฐ ์ ๋ณด ๊ตฌ์กฐ์ฒด์์ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋์ด, ๋๋น, ์ฑ๋, ๋ฐฐ์น ํฌ๊ธฐ ๋ฑ์ ๊ฐ์ ธ์จ๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง์ ๋์ด, ๋๋น, ์ฑ๋์ด ์ ์์ ์ผ๋ก ์ถ๋ ฅ๋์๋์ง ํ์ธํ๋ค.
๋ฐฐ์น ์ ๊ทํ, ํจ๋ฉ, ํจ๋ฉ ํฌ๊ธฐ ๋ฑ์ ์ต์ ์ ํ์ฑํ๋ค.
make_deconvolutional_layer ํจ์๋ฅผ ํธ์ถํ์ฌ ๋์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ค.
parse_convolutional
ํจ์ ์ด๋ฆ: parse_convolutional
์ ๋ ฅ:
options: ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด๋ฅผ ํ์ฑํ๊ธฐ ์ํ ์ค์ ๊ฐ๋ค์ด ๋ค์ด์๋ ๋งํฌ๋ ๋ฆฌ์คํธ
params: ๋คํธ์ํฌ์ ์ฌ์ด์ฆ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ฅํ ๊ตฌ์กฐ์ฒด
๋์:
์ค์ ๊ฐ๋ค์ ํ์ฑํ์ฌ ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด๋ฅผ ์์ฑํฉ๋๋ค.
ํ์ฑ๋ ์ค์ ๊ฐ๋ค์ ์ด์ฉํ์ฌ ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ํํฐ ์, ํํฐ ํฌ๊ธฐ, ์คํธ๋ผ์ด๋, ํจ๋ฉ ๋ฑ์ ์ค์ ํฉ๋๋ค.
์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ์ ์ฉํ ํ์ฑํ ํจ์๋ฅผ ์ค์ ํฉ๋๋ค.
์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด๋ฅผ ์์ฑํ๊ณ ๋ฐํํฉ๋๋ค.
์ค๋ช :
n: ํํฐ์ ๊ฐ์์ ๋๋ค.
size: ํํฐ์ ํฌ๊ธฐ์ ๋๋ค.
stride: ํํฐ์ ์คํธ๋ผ์ด๋์ ๋๋ค.
pad: ํํฐ ํจ๋ฉ์ ์๋ฏธํฉ๋๋ค. ์ด ๊ฐ์ด 1์ด๋ฉด padding ๊ฐ์ ํํฐ ํฌ๊ธฐ์ ์ ๋ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
padding: ํจ๋ฉ ๊ฐ์ ๋๋ค.
groups: ๊ทธ๋ฃน ์์ ๋๋ค.
activation_s: ๋ ์ด์ด์ ํ์ฑํ ํจ์์ ๋๋ค. "logistic"์ ๋ํดํธ๋ก ํฉ๋๋ค.
activation: ํ์ฑํ ํจ์์ ๊ตฌ์กฐ์ฒด์ ๋๋ค.
batch: ํ์ฌ ๋ฐฐ์น์ ํฌ๊ธฐ์ ๋๋ค.
h, w, c: ํ์ฌ ๋ ์ด์ด์ ์ธํ ์ด๋ฏธ์ง์ ๋์ด, ๋๋น, ์ฑ๋์ ๋๋ค.
batch_normalize: ๋ฐฐ์น ์ ๊ทํ ์ฌ๋ถ์ ๋๋ค.
binary: ์ด์ง ๋ถ๋ฅ ์ฌ๋ถ์ ๋๋ค.
xnor: xnor ์ฐ์ฐ ์ฌ๋ถ์ ๋๋ค.
layer.flipped: ํํฐ๋ฅผ ๋ค์ง๋ ์ฌ๋ถ์ ๋๋ค.
layer.dot: dot ์ฐ์ฐ ์ฌ๋ถ์ ๋๋ค.
parse_crnn
ํจ์ ์ด๋ฆ: parse_crnn
์ ๋ ฅ:
options: ํ์ฑํ ์ต์ ๋ฆฌ์คํธ
params: ํฌ๊ธฐ ๋งค๊ฐ๋ณ์(size_params) ๊ตฌ์กฐ์ฒด
๋์:
CRNN(Convolutional Recurrent Neural Network) ๋ ์ด์ด๋ฅผ ํ์ฑํ์ฌ ์ด๊ธฐํํ๊ณ ๋ฐํํฉ๋๋ค.
ํ์ฑํ ์ต์ ์ผ๋ก๋ output_filters, hidden_filters, activation, batch_normalize, shortcut ๋ฑ์ด ์์ต๋๋ค.
์ค๋ช :
output_filters: ์ถ๋ ฅ ํํฐ ์
hidden_filters: hidden state์ ํํฐ ์
activation_s: ํ์ฑํ ํจ์ ๋ฌธ์์ด
activation: get_activation ํจ์๋ฅผ ํตํด ๊ฐ์ ธ์จ ํ์ฑํ ํจ์
batch_normalize: ๋ฐฐ์น ์ ๊ทํ ์ฌ๋ถ(0 ๋๋ 1)
l.shortcut: shortcut ์ฐ๊ฒฐ ์ฌ๋ถ(0 ๋๋ 1)
parse_rnn
ํจ์ ์ด๋ฆ: parse_rnn
์ ๋ ฅ:
options: ๋คํธ์ํฌ ๋ ์ด์ด์ ์ค์ ์ ๋ด์ ๋ฆฌ์คํธ ํฌ์ธํฐ
params: ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ฌ์ด์ฆ ์ ๋ณด๋ฅผ ๋ด์ size_params ๊ตฌ์กฐ์ฒด
๋์:
RNN (Recurrent Neural Network) ๋ ์ด์ด๋ฅผ ํ์ฑํ์ฌ ์์ฑํ๋ค.
์ค๋ช :
RNN ๋ ์ด์ด๋ ์ฃผ์ด์ง ์ํ์ค ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
output: ์ถ๋ ฅ ๋ฒกํฐ์ ์ฐจ์ ์
activation: ํ์ฑํ ํจ์ (default: logistic)
batch_normalize: ๋ฐฐ์น ์ ๊ทํ ์ฌ์ฉ ์ฌ๋ถ (0 ๋๋ 1)
shortcut: RNN ๋ ์ด์ด์์ shortcut์ ์ฌ์ฉํ ์ง ์ฌ๋ถ (0 ๋๋ 1)
time_steps: ์ํ์ค ๋ฐ์ดํฐ์ ๊ธธ์ด (ํ์ ์คํ ์)
inputs: RNN ๋ ์ด์ด์ ์ ๋ ฅ ๋ฒกํฐ ์ฐจ์ ์ (์ด์ ํ์ ์คํ ์ ์ถ๋ ฅ ๋ฒกํฐ ์ฐจ์ ์)
parse_gru
ํจ์ ์ด๋ฆ: parse_gru
์ ๋ ฅ:
options (์ต์ ๋ฆฌ์คํธ)
params (ํฌ๊ธฐ ํ๋ผ๋ฏธํฐ)
๋์:
GRU ๋ ์ด์ด๋ฅผ ํ์ฑํ์ฌ ์์ฑํ๊ณ ๋ฐํ
์ค๋ช :
options: GRU ๋ ์ด์ด์ ๋ํ ์ต์ ๋ค์ ๋ด์ ๋ฆฌ์คํธ
params: ๋ ์ด์ด์ ํฌ๊ธฐ ํ๋ผ๋ฏธํฐ(batch, input size, time steps, adam optimizer)
output: ์ถ๋ ฅ ํฌ๊ธฐ(output size)
batch_normalize: ๋ฐฐ์น ์ ๊ทํ ์ฌ๋ถ(1 ๋๋ 0)
tanh: tanh ํ์ฑํ ํจ์ ์ฌ์ฉ ์ฌ๋ถ(1 ๋๋ 0)
l: ์์ฑ๋ GRU ๋ ์ด์ด
parse_lstm
ํจ์ ์ด๋ฆ: parse_lstm
์ ๋ ฅ:
options(์ต์ ๋ฆฌ์คํธ)
params(ํฌ๊ธฐ ๋งค๊ฐ๋ณ์)
๋์:
LSTM ๋ ์ด์ด๋ฅผ ํ์ฑํ์ฌ ์์ฑํ ํ ๋ฐํํฉ๋๋ค.
์ค๋ช :
output: ์ถ๋ ฅ ์ฐจ์ ์๋ฅผ ๋ํ๋ด๋ ์ ์ ๊ฐ
batch_normalize: ๋ฐฐ์น ์ ๊ทํ๋ฅผ ์ฌ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ 0 ๋๋ 1์ ์ ์ ๊ฐ
batch: ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ์ ์ ๊ฐ
inputs: ์ ๋ ฅ ์ฐจ์ ์๋ฅผ ๋ํ๋ด๋ ์ ์ ๊ฐ
time_steps: ์๊ฐ ๋จ๊ณ ์๋ฅผ ๋ํ๋ด๋ ์ ์ ๊ฐ
adam: ADAM ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ 0 ๋๋ 1์ ์ ์ ๊ฐ ๋ฐํ: LSTM ๋ ์ด์ด
parse_connected
ํจ์ ์ด๋ฆ: parse_connected
์ ๋ ฅ:
options (list ํฌ์ธํฐ) ํ์ฑ๋ ์ต์ ๋ฆฌ์คํธ
params: (size_params) ๋คํธ์ํฌ ์ ๋ ฅ ํฌ๊ธฐ
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ต์ ๋ฆฌ์คํธ์์ "output", "activation", "batch_normalize" ๋ฑ์ ์ต์ ๊ฐ์ ํ์ฑํ์ฌ, make_connected_layer ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ์ธต(layer)์ ์์ฑํ๊ณ , ์ค์ ๋ ์ต์ ๊ฐ์ ์ ์ฉํ์ฌ ๋ฐํํ๋ค.
์ค๋ช :
output: ์ถ๋ ฅ ๋ด๋ฐ์ ๊ฐ์๋ฅผ ์ ์ํ๋ int ํํ์ ์ต์ ๊ฐ
activation_s: ํ์ฑํ ํจ์๋ฅผ ์ ์ํ๋ ๋ฌธ์์ด ํํ์ ์ต์ ๊ฐ. "logistic", "relu", "leaky", "linear" ์ค ํ๋๋ฅผ ์ ํํ ์ ์๋ค.
activation: activation_s์ ํด๋นํ๋ ํ์ฑํ ํจ์๋ฅผ ์ ์ฅํ๋ ACTIVATION ํ์ ๋ณ์
batch_normalize: ๋ฐฐ์น ์ ๊ทํ(batch normalization)๋ฅผ ์ ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ์ ์ํ๋ int ํํ์ ์ต์ ๊ฐ. ์ ์ฉํ ๊ฒฝ์ฐ 1, ์ ์ฉํ์ง ์์ ๊ฒฝ์ฐ 0์ผ๋ก ์ค์ ํ๋ค.
l: make_connected_layer ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ์ฐ๊ฒฐ์ธต(layer)์ ์ ์ฅํ๋ layer ํ์ ๋ณ์. ์ค์ ๋ ์ต์ ๊ฐ๋ค์ด ์ ์ฉ๋ ์ํ์ด๋ค.
parse_softmax
ํจ์ ์ด๋ฆ: parse_softmax
์ ๋ ฅ:
options (์ต์ ๋ฆฌ์คํธ)
params (ํฌ๊ธฐ ๋งค๊ฐ๋ณ์ ๊ตฌ์กฐ์ฒด)
๋์:
์ต์ ๋ฆฌ์คํธ์์ ํด๋น ์ต์ ๊ฐ๋ค์ ํ์ฑํ์ฌ softmax ๋ ์ด์ด๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ค.
๊ทธ๋ฃน ์, ์จ๋, ํธ๋ฆฌ ํ์ผ, ๊ณต๊ฐ, ๋ฌด์์ค ๋ฑ์ ์ต์ ์ ์ง์ํ๋ค.
์ค๋ช :
ํ์ฑ๋ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก softmax ๋ ์ด์ด๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ค.
์ํํธ๋งฅ์ค ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํธ๋ฆฌ ํ์ผ์ ์ฝ์ด๋ค์ธ๋ค.
noloss ์ต์ ์ softmax ์์ค ๊ณ์ฐ์ ์ํฅ์ ๋ฏธ์น๋ฉฐ, spatial ์ต์ ์ ์ถ๋ ฅ ํฌ๊ธฐ์ ๋ํ ๊ณต๊ฐ ๊ฐ์ค์น๋ฅผ ์ ์ฉํ๋ค.
parse_yolo_mask
ํจ์ ์ด๋ฆ: parse_yolo_mask
์ ๋ ฅ:
char* a: YOLO ๋ง์คํฌ ๋ฌธ์์ด
int* num: ๋ง์คํฌ ๋ฐฐ์ด์ ์์ ์๋ฅผ ์ ์ฅํ ํฌ์ธํฐ
๋์:
YOLO ๋ง์คํฌ ๋ฌธ์์ด์ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ ์ ์ ๋ฐฐ์ด์ ์์ฑํ๊ณ ๋ฐํ
๋ฌธ์์ด์์ ๊ตฌ๋ถ ๊ธฐํธ(์ผํ)๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ๊ตฌ์ฑ
num ํฌ์ธํฐ๋ฅผ ํตํด ์์ฑ๋ ๋ฐฐ์ด์ ์์ ์๋ฅผ ๋ฐํ
์ค๋ช :
์ด ํจ์๋ YOLO ๋ง์คํฌ ๋ฌธ์์ด์ ์ ๋ ฅ ๋ฐ์ ํด๋น ๋ฌธ์์ด์์ ๊ตฌ๋ถ ๊ธฐํธ(์ผํ)๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ๋ฐฐ์ด์ ์์ฑํ๊ณ ๋ฐํํฉ๋๋ค.
์ด ํจ์๋ ๋ฌธ์์ด์ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด atoi ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฌธ์์ด์์ ๊ตฌ๋ถ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
ํจ์๋ ์์ฑ๋ ๋ฐฐ์ด์ ์์ ์๋ฅผ num ํฌ์ธํฐ๋ฅผ ํตํด ๋ฐํํฉ๋๋ค.
parse_yolo
ํจ์ ์ด๋ฆ: parse_yolo
์ ๋ ฅ:
options (list ํฌ์ธํฐ)
params (size_params ํ์ )
๋์:
YOLO ๋ ์ด์ด๋ฅผ ํ์ฑํ์ฌ ๋ ์ด์ด๋ฅผ ๋ง๋ค๊ณ ๋ฐํํฉ๋๋ค.
์ค๋ช :
classes (int ํ์ ): ํด๋์ค ์๋ฅผ ๋ํ๋ ๋๋ค.
total (int ํ์ ): Anchor Box์ ์๋ฅผ ๋ํ๋ ๋๋ค.
num (int ํ์ ): Anchor Box์ ์๋ฅผ ๋ํ๋ ๋๋ค.
a (char ํฌ์ธํฐ): Mask ๊ฐ์ผ๋ก, Anchor Box๋ฅผ ์ ์ฉํ ๋ ์ด์ด๋ฅผ ์ ํํฉ๋๋ค.
mask (int ํฌ์ธํฐ): Mask ๊ฐ์ผ๋ก ์ ํ๋ Anchor Box๋ฅผ ์ ์ฅํฉ๋๋ค.
l (layer ํ์ ): ๋ง๋ค์ด์ง YOLO ๋ ์ด์ด์ ๋๋ค.
max_boxes (int ํ์ ): ์ต๋ ๋ฐ์ค ์๋ฅผ ๋ํ๋ ๋๋ค.
jitter (float ํ์ ): Jitter ๊ฐ์ผ๋ก, ์ด๋ฏธ์ง์ ์์น๋ฅผ ๋ฌด์์๋ก ์ด๋์ํต๋๋ค.
ignore_thresh (float ํ์ ): Ignore Threshold ๊ฐ์ผ๋ก, ๋ฐ์ค์์ IoU ๊ฐ์ด ์ด ๊ฐ๋ณด๋ค ์์ผ๋ฉด ๋ฌด์ํฉ๋๋ค.
truth_thresh (float ํ์ ): Truth Threshold ๊ฐ์ผ๋ก, ground truth์ ์์ธก ๊ฐ์ IoU ๊ฐ์ด ์ด ๊ฐ๋ณด๋ค ํฌ๋ฉด ํด๋น ์์ธก ๊ฐ์ ground truth๋ก ์ทจ๊ธํฉ๋๋ค.
random (int ํ์ ): Random ๊ฐ์ผ๋ก, ์ด๋ฏธ์ง๋ฅผ ๋ฌด์์๋ก ๋ณํํ ๋ ์ฌ์ฉํ๋ ์๋(seed) ๊ฐ์ ๋๋ค.
map_file (char ํฌ์ธํฐ): Map ํ์ผ๋ก, ํด๋์ค ์ด๋ฆ์ ์ ์ฅํ ํ์ผ์ ๋๋ค.
a (char ํฌ์ธํฐ): Anchor ๊ฐ์ ์ ์ฅํ ๋ฌธ์์ด์ ๋๋ค.
biases (float ๋ฐฐ์ด): Anchor ๊ฐ์ ์ ์ฅํ ๋ฐฐ์ด์ ๋๋ค.
parse_iseg
ํจ์ ์ด๋ฆ: parse_iseg
์ ๋ ฅ:
list *options: ์ต์ ๋ฆฌ์คํธ ํฌ์ธํฐ
size_params params: ๋ชจ๋ธ ์ฌ์ด์ฆ ๋งค๊ฐ๋ณ์
๋์:
์ฃผ์ด์ง ์ต์ ๊ณผ ๋ชจ๋ธ ์ฌ์ด์ฆ ๋งค๊ฐ๋ณ์๋ฅผ ์ด์ฉํด iseg(layered semantic segmentation) ๋ ์ด์ด๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ค.
"classes" ์ต์ ์ ์ด์ฉํด ํด๋์ค ๊ฐ์๋ฅผ ์ค์ ํ๋ค.
"ids" ์ต์ ์ ์ด์ฉํด id ๊ฐ์๋ฅผ ์ค์ ํ๋ค.
๋ ์ด์ด์ ์ถ๋ ฅ์ด ๋ชจ๋ธ ์ ๋ ฅ๊ณผ ์ผ์นํ๋์ง ํ์ธํ๋ค.
์ค๋ช :
iseg ๋ ์ด์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ๊ฐ ํฝ์ ์ ํด๋์ค๋ณ๋ก ๋ถ๋ฅํ๋ ๋ชจ๋ธ์ด๋ค.
classes: ๋ถ๋ฅํ ํด๋์ค ๊ฐ์
ids: ๊ฐ ํด๋์ค๋ณ๋ก ํ ๋นํ ๊ณ ์ ํ id ๊ฐ์
parse_region
ํจ์ ์ด๋ฆ: parse_region
์ ๋ ฅ:
options: YOLO์ ์ค์ ๊ฐ์ ๋ด์ ๋ฆฌ์คํธ
params: ๋คํธ์ํฌ์ ์ ๋ ฅ ์ด๋ฏธ์ง ํฌ๊ธฐ ์ ๋ณด๋ฅผ ๋ด์ size_params ๊ตฌ์กฐ์ฒด
๋์:
YOLO ๋คํธ์ํฌ์์ ์ฌ์ฉ๋๋ region ๋ ์ด์ด๋ฅผ ํ์ฑํ์ฌ ์์ฑํ๋ ํจ์
์ค๋ช :
coords: ๊ฐ bounding box์ ์ขํ ์ ๋ณด ๊ฐ์ (๋ณดํต 4)
classes: ์ธ์ํ๋ ค๋ ํด๋์ค ์
num: ๊ฐ grid cell๋ง๋ค ์์ธกํ๋ ค๋ bounding box ๊ฐ์
log: bounding box ์ขํ๊ฐ์ ๋ก๊ทธ ํจ์๋ฅผ ์ ์ฉํ ์ง ์ฌ๋ถ
sqrt: bounding box ์ขํ๊ฐ์ ์ ๊ณฑ๊ทผ ํจ์๋ฅผ ์ ์ฉํ ์ง ์ฌ๋ถ
softmax: ์ํํธ๋งฅ์ค ํจ์ ์ฌ์ฉ ์ฌ๋ถ
background: ๋ฐฐ๊ฒฝ ํด๋์ค ์ฌ๋ถ
max_boxes: ์์ธกํ ์ต๋ bounding box ๊ฐ์
jitter: ์ด๋ฏธ์ง์ ๋๋คํ ์กฐ์์ ๊ฐํ๋ ์ ๋
rescore: ์์ธกํ bounding box๋ฅผ ์ฌ์ ์ํํ ์ง ์ฌ๋ถ
thresh: bounding box ์์ธก ๊ฒฐ๊ณผ ์ค confidence๊ฐ ์ด ๊ฐ๋ณด๋ค ๋ฎ์ ๊ฒฝ์ฐ ์ ๊ฑฐ
classfix: ํด๋์ค ์ธ๋ฑ์ค ๋ณด์ ๊ฐ
absolute: bounding box ์ขํ๊ฐ์ 0~1์ด ์๋ ์ ๋๊ฐ์ผ๋ก ์ง์ ํ ์ง ์ฌ๋ถ
random: bounding box ์ขํ๊ฐ์ ๋๋คํ ๊ฐ์ ๋ํ ์ง ์ฌ๋ถ
coord_scale: bounding box ์ขํ๊ฐ์ scale
object_scale: object๊ฐ ์์ ๋์ confidence score์ ๋ํ scale
noobject_scale: object๊ฐ ์์ ๋์ confidence score์ ๋ํ scale
mask_scale: mask ๊ฐ์ ๋ํ scale
class_scale: class score์ ๋ํ scale
bias_match: bias ๊ฐ์ ์ผ์น์ํค๋์ง ์ฌ๋ถ
tree_file: ํด๋์ค ํธ๋ฆฌ ํ์ผ ๊ฒฝ๋ก
map_file: ํด๋์ค ์ด๋ฆ-์ธ๋ฑ์ค ๋งคํ ํ์ผ ๊ฒฝ๋ก
anchors: ๊ฐ bounding box์ ์ฌ์ฉ๋๋ anchor box ๊ฐ
๋ฐํ๊ฐ: ์์ฑ๋ region ๋ ์ด์ด
parse_detection
ํจ์ ์ด๋ฆ: parse_detection
์ ๋ ฅ:
options (list ํฌ์ธํฐ)
params (size_params ๊ตฌ์กฐ์ฒด)
๋์:
detection_layer๋ฅผ ํ์ฑํ๊ณ ์ด๊ธฐํํ๋ฉฐ, ํ์ฑ๋ ๊ฐ๋ค์ detection_layer์ ์ ์ฅํ์ฌ ๋ฐํํ๋ค.
์ค๋ช :
coords: ๊ฐ bounding box์ ๋ํ x, y, w, h๊ฐ์ ๊ฐ์ (int)
classes: ๋ถ๋ฅํ ํด๋์ค์ ์ (int)
rescore: YOLOv2์์ ์ฌ์ฉ๋์๋ ๊ฐ์ผ๋ก, ๊ฐ์ฒด์ ๋ํ ์์ธก ์ ๋ขฐ๋(rescore)๋ฅผ ์ฌ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ (int)
num: ๊ฐ ์ธต์์ ์์ธกํ๋ bounding box์ ์ (int)
side: ์ธต์ ๋๋น ๋๋ ๋์ด (int)
layer.softmax: softmax ํจ์๋ฅผ ์ฌ์ฉํ ์ง ์ฌ๋ถ (int)
layer.sqrt: sqrt ํจ์๋ฅผ ์ฌ์ฉํ ์ง ์ฌ๋ถ (int)
layer.max_boxes: ์์ธกํ bounding box์ ์ต๋ ๊ฐ์ (int)
layer.coord_scale: ์ขํ์ ๋ํ ๊ฐ์ค์น ๊ฐ (float)
layer.forced: ๊ฐ์ ์์ธก ์ํ ์ฌ๋ถ (int)
layer.object_scale: ๊ฐ์ฒด์ ๋ํ ๊ฐ์ค์น ๊ฐ (float)
layer.noobject_scale: ๊ฐ์ฒด๊ฐ ์๋ ์์ญ์ ๋ํ ๊ฐ์ค์น ๊ฐ (float)
layer.class_scale: ํด๋์ค์ ๋ํ ๊ฐ์ค์น ๊ฐ (float)
layer.jitter: ์ด๋ฏธ์ง jittering ์ ์ฉ ์ฌ๋ถ (float)
layer.random: ์ด๋ฏธ์ง๋ฅผ ๋ฌด์์๋ก ๋ณํํ ์ง ์ฌ๋ถ (int)
layer.reorg: reorg ๋ ์ด์ด ์ฌ์ฉ ์ฌ๋ถ (int)
๋ฐํ๊ฐ: detection_layer
parse_cost
ํจ์ ์ด๋ฆ: parse_cost
์ ๋ ฅ:
list *options
size_params params
๋์:
cost_layer๋ฅผ ํ์ฑํ์ฌ ์์ฑํ๊ณ ๋ฐํํจ.
์ค๋ช :
type_s: cost_layer์ type์ ์ค์ ํ๋ฉฐ, "type" option์ ํตํด string์ผ๋ก ์ ๋ ฅ ๋ฐ์.
type: type_s๋ฅผ ๋ฐํ์ผ๋ก, COST_TYPE enum ๊ฐ์ผ๋ก ๋ณํํ์ฌ cost_layer์ type์ ์ค์ ํจ.
scale: cost_layer์ scale ๊ฐ์ ์ค์ ํจ. "scale" option์ ํตํด float ๊ฐ์ผ๋ก ์ ๋ ฅ ๋ฐ์.
layer: make_cost_layer() ํจ์๋ฅผ ํธ์ถํ์ฌ cost_layer๋ฅผ ์์ฑํจ.
ratio: cost_layer์ ratio ๊ฐ์ ์ค์ ํจ. "ratio" option์ ํตํด float ๊ฐ์ผ๋ก ์ ๋ ฅ ๋ฐ์.
noobject_scale: cost_layer์ noobject_scale ๊ฐ์ ์ค์ ํจ. "noobj" option์ ํตํด float ๊ฐ์ผ๋ก ์ ๋ ฅ ๋ฐ์.
thresh: cost_layer์ thresh ๊ฐ์ ์ค์ ํจ. "thresh" option์ ํตํด float ๊ฐ์ผ๋ก ์ ๋ ฅ ๋ฐ์.
๋ฐํ๊ฐ: ์์ฑ๋ cost_layer๋ฅผ ๋ฐํํจ.
parse_crop
ํจ์ ์ด๋ฆ: parse_crop
์ ๋ ฅ:
options(list ํฌ์ธํฐ)
params(size_params ๊ตฌ์กฐ์ฒด)
๋์:
options์์ crop layer์ ์ต์ ๊ฐ์ ํ์ฑํ์ฌ crop_layer ๊ตฌ์กฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ค.
์ค๋ช :
crop_height(int): cropํ ์์์ ๋์ด
crop_width(int): cropํ ์์์ ๋๋น
flip(int): crop ์์์ ์ํ์ผ๋ก ๋ค์ง์ ๊ฒ์ธ์ง ์ฌ๋ถ (0: ์ ๋ค์ง์, 1: ๋ค์ง์)
angle(float): crop ์์ ํ์ ๊ฐ๋ (๋ผ๋์ ๋จ์)
saturation(float): crop ์์์ ์ฑ๋ ์กฐ์ (1์ด๋ฉด ๋ณ๊ฒฝ ์์)
exposure(float): crop ์์์ ๋ ธ์ถ ์กฐ์ (1์ด๋ฉด ๋ณ๊ฒฝ ์์)
noadjust(int): crop ์์์ ๋ผ๋ฒจ๊ณผ ๊ฒฝ๊ณ์์๋ฅผ ์๋์ผ๋ก ์กฐ์ ํ์ง ์์ (0: ์๋ ์กฐ์ , 1: ์๋ ์กฐ์ ์ ํจ)
shift(float): crop ์์์ RGB ์์ ์ฑ๋ ๊ฐ์ ๋ํด์ง๋ ๊ฐ (RGB ๊ฐ์ด 0~1 ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง ์๋๋ก ์ ํํด์ผ ํจ)
parse_reorg
ํจ์ ์ด๋ฆ: parse_reorg
์ ๋ ฅ:
options (list ํฌ์ธํฐ)
params (size_params ๊ตฌ์กฐ์ฒด)
๋์:
options์์ "stride", "reverse", "flatten", "extra"์ ํด๋นํ๋ ์ ์ ๊ฐ์ ์ฐพ์์, make_reorg_layer ํจ์๋ฅผ ์ฌ์ฉํ์ฌ reorg layer๋ฅผ ๋ง๋ค๊ณ ๋ฐํํฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก options์ params๋ฅผ ๋ฐ์, reorg layer๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ ํจ์์ ๋๋ค.
options์์๋ stride, reverse, flatten, extra์ ๋ํ ๊ฐ์ ์ฐพ์์ ํด๋น ๊ฐ๋ค์ ์ด์ฉํ์ฌ reorg layer๋ฅผ ์์ฑํฉ๋๋ค.
params์์๋ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋์ด, ๋๋น, ์ฑ๋ ์, ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ๋ฐ์์ต๋๋ค.
parse_maxpool
ํจ์ ์ด๋ฆ: parse_maxpool
์ ๋ ฅ:
options (list ํฌ์ธํฐ): ํ์ฑํ maxpool ๋ ์ด์ด์ ์ต์ ๋ฆฌ์คํธ
params (size_params): maxpool ๋ ์ด์ด์ ์ ๋ ฅ ์ด๋ฏธ์ง ํฌ๊ธฐ ๋ฐ ๋ฐฐ์น ํฌ๊ธฐ ์ ๋ณด๊ฐ ๋ด๊ธด size_params ๊ตฌ์กฐ์ฒด
๋์:
ํ์ฑ๋ ์ต์ ์ ๊ธฐ๋ฐ์ผ๋ก maxpool ๋ ์ด์ด๋ฅผ ์์ฑํ๊ณ ๋ฐํํจ
์ค๋ช :
์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ํ maxpool ์ฐ์ฐ์ ์ํํ๋ ๋ ์ด์ด๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ ํจ์์ ๋๋ค.
์ต์ ๋ฆฌ์คํธ์์ stride, size, padding ๊ฐ์ ์ฝ์ด์ maxpool ๋ ์ด์ด๋ฅผ ์์ฑํฉ๋๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง ํฌ๊ธฐ์ ๋ฐฐ์น ํฌ๊ธฐ ์ ๋ณด๋ฅผ ํฌํจํ๋ size_params ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐํ๊ฐ์ maxpool_layer ๊ตฌ์กฐ์ฒด์ ๋๋ค.
parse_avgpool
ํจ์ ์ด๋ฆ: parse_avgpool
์ ๋ ฅ:
options (list): ์ต์ ๋ฆฌ์คํธ
params (size_params): ์ฌ์ด์ฆ ํ๋ผ๋ฏธํฐ (w, h, c, batch)
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ฌ์ด์ฆ ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํ์ฌ avgpool_layer๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ค.
์ค๋ช :
์ด ํจ์๋ options์ params๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ avgpool_layer๋ฅผ ์์ฑํ๋ ํจ์์ด๋ค.
ํจ์ ๋ด๋ถ์์๋ ์ฌ์ด์ฆ ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํ์ฌ avgpool_layer๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฅผ ๋ฐํํ๋ค.
๋ง์ฝ h, w, c๊ฐ 0์ด๋ผ๋ฉด "Layer before avgpool layer must output image." ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค.
์์ฑ๋ avgpool_layer๋ ์ดํ์ ๊ณ์ฐ์์ ์ฌ์ฉ๋๋ค.
parse_dropout
ํจ์ ์ด๋ฆ: parse_dropout
์ ๋ ฅ:
options (list): ์ต์ ๋ฆฌ์คํธ
params (size_params): ์ฌ์ด์ฆ ํ๋ผ๋ฏธํฐ (batch, inputs, w, h, c)
๋์:
options์์ "probability"๋ฅผ ์ฐพ์ ํ๋ฅ ์ ์ค์ ํ์ฌ dropout_layer๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ค.
์ค๋ช :
์ด ํจ์๋ options์ params๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ dropout_layer๋ฅผ ์์ฑํ๋ ํจ์์ด๋ค.
options์์ "probability" ๊ฐ์ ์ฐพ์ ์ด๋ฅผ ์ด์ฉํ์ฌ dropout_layer๋ฅผ ์์ฑํ๋ค.
์์ฑ๋ dropout_layer์ out_w, out_h, out_c๋ params์ w, h, c ๊ฐ์ ๊ฐ์ง๋ค.
์์ฑ๋ dropout_layer๋ ์ดํ์ ๊ณ์ฐ์์ ์ฌ์ฉ๋๋ค.
parse_normalization
ํจ์ ์ด๋ฆ: parse_normalization
์ ๋ ฅ:
options (list): ์ต์ ๋ฆฌ์คํธ
params (size_params): ์ฌ์ด์ฆ ํ๋ผ๋ฏธํฐ (batch, w, h, c)
๋์:
options์์ alpha, beta, kappa, size ๊ฐ์ ์ฐพ์ ์ ๊ทํ(normalization) ๋ ์ด์ด๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ค.
์ค๋ช :
์ด ํจ์๋ options์ params๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ ๊ทํ ๋ ์ด์ด๋ฅผ ์์ฑํ๋ ํจ์์ด๋ค.
options์์ "alpha", "beta", "kappa", "size" ๊ฐ์ ์ฐพ์ ์ด๋ฅผ ์ด์ฉํ์ฌ ์ ๊ทํ ๋ ์ด์ด๋ฅผ ์์ฑํ๋ค.
์์ฑ๋ ์ ๊ทํ ๋ ์ด์ด๋ ์ดํ์ ๊ณ์ฐ์์ ์ฌ์ฉ๋๋ค.
parse_batchnorm
ํจ์ ์ด๋ฆ: parse_batchnorm
์ ๋ ฅ:
options (list): ์ต์ ๋ฆฌ์คํธ
params (size_params): ์ฌ์ด์ฆ ํ๋ผ๋ฏธํฐ (batch, w, h, c)
๋์:
batchnorm_layer๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ค.
์ค๋ช :
์ด ํจ์๋ options์ params๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ batchnorm_layer๋ฅผ ์์ฑํ๋ ํจ์์ด๋ค.
make_batchnorm_layer() ํจ์๋ฅผ ์ด์ฉํ์ฌ batchnorm_layer๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ๋ฐํํ๋ค.
์์ฑ๋ batchnorm_layer๋ ์ดํ์ ๊ณ์ฐ์์ ์ฌ์ฉ๋๋ค.
parse_shortcut
ํจ์ ์ด๋ฆ: parse_shortcut
์ ๋ ฅ:
options (list): ์ต์ ๋ฆฌ์คํธ
params (size_params): ์ฌ์ด์ฆ ํ๋ผ๋ฏธํฐ (batch, w, h, c)
net (network): ๋คํธ์ํฌ
๋์:
options์์ "from" ๊ฐ์ ์ฐพ์ ํด๋น ์ธ๋ฑ์ค์ ๋ ์ด์ด์ shortcut_layer๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ค.
์ค๋ช :
์ด ํจ์๋ options์ params, net์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ shortcut_layer๋ฅผ ์์ฑํ๋ ํจ์์ด๋ค.
options์์ "from" ๊ฐ์ ์ฐพ์ ํด๋น ์ธ๋ฑ์ค์ ๋ ์ด์ด๋ฅผ ๊ฐ์ ธ์จ๋ค.
๊ฐ์ ธ์จ ๋ ์ด์ด์ make_shortcut_layer() ํจ์๋ฅผ ์ด์ฉํ์ฌ shortcut_layer๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ๋ฐํํ๋ค.
์์ฑ๋ shortcut_layer๋ ์ดํ์ ๊ณ์ฐ์์ ์ฌ์ฉ๋๋ค.
parse_l2norm
ํจ์ ์ด๋ฆ: parse_l2norm
์ ๋ ฅ:
options (list): ์ต์ ๋ฆฌ์คํธ
params (size_params): ์ฌ์ด์ฆ ํ๋ผ๋ฏธํฐ (batch, w, h, c)
๋์:
make_l2norm_layer() ํจ์๋ฅผ ํธ์ถํ์ฌ l2norm_layer๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
์ด ํจ์๋ options์ params๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ l2norm_layer๋ฅผ ์์ฑํ๋ ํจ์์ด๋ค.
make_l2norm_layer() ํจ์๋ฅผ ํธ์ถํ์ฌ l2norm_layer๋ฅผ ์์ฑํ๊ณ , ์ดํ์๋ ํด๋น layer์ ํฌ๊ธฐ๋ฅผ params์ ํฌ๊ธฐ๋ก ์ค์ ํ ํ ์ด๋ฅผ ๋ฐํํ๋ค.
์์ฑ๋ l2norm_layer๋ ์ดํ์ ๊ณ์ฐ์์ ์ฌ์ฉ๋๋ค.
parse_logistic
ํจ์ ์ด๋ฆ: parse_logistic
์ ๋ ฅ:
options (list): ์ต์ ๋ฆฌ์คํธ
params (size_params): ์ฌ์ด์ฆ ํ๋ผ๋ฏธํฐ (batch, w, h, c)
๋์:
make_logistic_layer() ํจ์๋ฅผ ํธ์ถํ์ฌ logistic_layer๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
์ด ํจ์๋ options์ params๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ logistic_layer๋ฅผ ์์ฑํ๋ ํจ์์ด๋ค.
make_logistic_layer() ํจ์๋ฅผ ํธ์ถํ์ฌ logistic_layer๋ฅผ ์์ฑํ๊ณ , ์ดํ์๋ ํด๋น layer์ ํฌ๊ธฐ๋ฅผ params์ ํฌ๊ธฐ๋ก ์ค์ ํ ํ ์ด๋ฅผ ๋ฐํํ๋ค.
์์ฑ๋ logistic_layer๋ ์ดํ์ ๊ณ์ฐ์์ ์ฌ์ฉ๋๋ค.
parse_activation
ํจ์ ์ด๋ฆ: parse_activation
์ ๋ ฅ:
options (list ํฌ์ธํฐ)
params (size_params ๊ตฌ์กฐ์ฒด)
๋์:
์ฃผ์ด์ง options์์ "activation" ์ต์ ์ ์ฐพ์ ํด๋น ํ์ฑํ ํจ์๋ฅผ ๊ฐ์ ธ์ make_activation_layer ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ํ์ฑํ ๋ ์ด์ด๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฅผ ๋ฐํํฉ๋๋ค.
์ค๋ช :
options: ์ด ํจ์์ ๋งค๊ฐ ๋ณ์๋ก ์ฃผ์ด์ง ์ต์ ๋ฆฌ์คํธ๋ ํด๋น ๋ ์ด์ด์ ์ต์ ๊ฐ๋ค์ ํฌํจํฉ๋๋ค.
activation_s: "activation" ์ต์ ์ ๊ฐ์ ๊ฐ์ ธ์ต๋๋ค. ๋ง์ฝ "activation" ์ต์ ์ด ์ฃผ์ด์ง์ง ์์ ๊ฒฝ์ฐ "linear"๋ก ์ด๊ธฐํํฉ๋๋ค.
activation: activation_s ๋ฌธ์์ด์ ์ด์ฉํ์ฌ ํด๋น ํ์ฑํ ํจ์๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
make_activation_layer ํจ์๋ฅผ ์ฌ์ฉํ์ฌ params.batch, params.inputs, activation์ ์ฌ์ฉํ์ฌ ์๋ก์ด ํ์ฑํ ๋ ์ด์ด๋ฅผ ๋ง๋ญ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์๋ก์ด ๋ ์ด์ด์ ์ถ๋ ฅ ํฌ๊ธฐ๋ฅผ params์ ๋์ผํ๊ฒ ์ค์ ํ๊ณ ๋ฐํํฉ๋๋ค.
parse_upsample
ํจ์ ์ด๋ฆ: parse_upsample
์ ๋ ฅ:
options: ์ฌ์ฉ์๊ฐ ์ ์ํ ์ต์ ์ ์ ์ฅํ ๋ฆฌ์คํธ ํฌ์ธํฐ
params: ์ ๋ ฅ ๋ ์ด์ด์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ฅํ size_params ๊ตฌ์กฐ์ฒด
net: ๋คํธ์ํฌ ๊ตฌ์กฐ์ฒด
๋์:
์ต์ ์์ stride ๊ฐ์ ์ฝ์ด์ ์ ์ํ๋ง ๋ ์ด์ด๋ฅผ ์์ฑํ๋ค.
์ ์ํ๋ง ๋ ์ด์ด์ scale ๊ฐ์ ์ค์ ํ๋ค.
์ค๋ช :
parse_upsample ํจ์๋ ์ต์ ์์ ์ง์ ํ stride ๊ฐ์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ๋ ์ด์ด๋ฅผ ์ ์ํ๋งํ๋ ๋ ์ด์ด๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ ํจ์์ด๋ค.
options ๋ฆฌ์คํธ๋ ์ฌ์ฉ์๊ฐ ์ง์ ํ ์ต์ ๋ค์ ์ ์ฅํ๊ณ ์์ผ๋ฉฐ, params๋ ์ ๋ ฅ ๋ ์ด์ด์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ฅํ ๊ตฌ์กฐ์ฒด์ด๋ค.
net์ ์ ์ฒด ๋คํธ์ํฌ ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ด๋ค.
์ ์ํ๋ง ๋ ์ด์ด๋ฅผ ์์ฑํ๊ธฐ ์ํด make_upsample_layer ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋, params์์ ์ฝ์ด์จ ์ ๋ ฅ ๋ ์ด์ด์ ํ๋ผ๋ฏธํฐ์ ์ฌ์ฉ์๊ฐ ์ง์ ํ stride ๊ฐ์ ์ฌ์ฉํ๋ค.
l.scale์ ์ฌ์ฉ์๊ฐ ์ง์ ํ scale ๊ฐ์ ์ ์ฅํ๋ค. ๋ง์ฝ, ์ต์ ์์ scale ๊ฐ์ ์ง์ ํ์ง ์์์ผ๋ฉด 1.0์ผ๋ก ์ด๊ธฐํ๋๋ค.
์์ฑ๋ ์ ์ํ๋ง ๋ ์ด์ด๋ฅผ ๋ฐํํ๋ค.
parse_route
ํจ์ ์ด๋ฆ: parse_route
์ ๋ ฅ:
options: ํ๋ผ๋ฏธํฐ ์ค์ ์ ๋ณด๋ฅผ ๋ด์ ๋ฆฌ์คํธ
params: size_params ๊ตฌ์กฐ์ฒด ๋ณ์
net: ๋คํธ์ํฌ ๊ตฌ์กฐ์ฒด ๋ณ์
๋์:
๋ผ์ฐํ ๋ ์ด์ด๋ฅผ ํ์ฑํ์ฌ ๋ ์ด์ด๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ค.
์ค๋ช :
"layers" ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํด ์ ๋ ฅ ๋ ์ด์ด๋ฅผ ๊ฒฐ์ ํ๋ค.
์ ๋ ฅ ๋ ์ด์ด์ ์ธ๋ฑ์ค์ ์ถ๋ ฅ ํฌ๊ธฐ๋ฅผ ์ ์ฅํ๊ณ , ์ด ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ๋ผ์ฐํ ๋ ์ด์ด๋ฅผ ์์ฑํ๋ค.
์ ๋ ฅ ๋ ์ด์ด๋ค ์ค ๊ฐ์ฅ ์ฒ์ ์ ๋ ฅ ๋ ์ด์ด์ ์ถ๋ ฅ ํฌ๊ธฐ๋ก ๋ผ์ฐํ ๋ ์ด์ด์ ์ถ๋ ฅ ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ค.
๋๋จธ์ง ์ ๋ ฅ ๋ ์ด์ด๋ค์ ์ถ๋ ฅ ํฌ๊ธฐ๊ฐ ์ฒซ ๋ฒ์งธ ์ ๋ ฅ ๋ ์ด์ด์ ์ถ๋ ฅ ํฌ๊ธฐ์ ์ผ์นํ๋ฉด, ์ถ๋ ฅ ์ฑ๋ ์๋ฅผ ์ถ๊ฐํ๋ค. ๋ง์ฝ ์ผ์นํ์ง ์์ผ๋ฉด, ์ถ๋ ฅ ํฌ๊ธฐ๋ฅผ 0์ผ๋ก ์ค์ ํ๋ค.
์์ฑํ ๋ผ์ฐํ ๋ ์ด์ด๋ฅผ ๋ฐํํ๋ค.
get_policy
ํจ์ ์ด๋ฆ: get_policy
์ ๋ ฅ:
char* s (๋ฌธ์์ด ํฌ์ธํฐ)
๋์:
์ฃผ์ด์ง ๋ฌธ์์ด s๊ฐ ๋ํ๋ด๋ ํ์ต๋ฅ ์ค์ผ์ค๋ง ์ ์ฑ ์ ๋ฐํํจ
์ค๋ช :
์ด ํจ์๋ learning_rate_policy ์ด๊ฑฐํ ํ์ ์ ์ฌ์ฉํ์ฌ ์ฃผ์ด์ง ๋ฌธ์์ด s๊ฐ ๋ํ๋ด๋ ํ์ต๋ฅ ์ค์ผ์ค๋ง ์ ์ฑ ์ ๋ฐํํฉ๋๋ค.
๋ฌธ์์ด s๊ฐ "random", "poly", "constant", "step", "exp", "sigmoid", "steps" ์ค ํ๋์ธ ๊ฒฝ์ฐ ํด๋น ์ ์ฑ ์ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด "Couldn't find policy %s, going with constant" ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ณ ๊ธฐ๋ณธ๊ฐ์ผ๋ก CONSTANT๋ฅผ ๋ฐํํฉ๋๋ค.
is_network
ํจ์ ์ด๋ฆ: is_network
์ ๋ ฅ:
section *s (๊ตฌ์กฐ์ฒด ํฌ์ธํฐ)
๋์:
์ฃผ์ด์ง ์น์ (s)์ด ๋คํธ์ํฌ๋ฅผ ๋ํ๋ด๋ ์น์ ์ธ์ง ์ฌ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ๋ ์น์ ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๊ฐ "[net]" ๋๋ "[network]" ๋ฌธ์์ด๊ณผ ๊ฐ์์ง๋ฅผ ํ์ธํ์ฌ ํด๋น ์น์ ์ด ๋คํธ์ํฌ๋ฅผ ๋ํ๋ด๋ ์น์ ์ธ์ง ์ฌ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค.
1์ด ๋ฐํ๋๋ฉด ๋คํธ์ํฌ๋ฅผ ๋ํ๋ด๋ ์น์ ์ ๋๋ค. 0์ด ๋ฐํ๋๋ฉด ๊ทธ๋ ์ง ์์ ๊ฒ์ ๋๋ค.
load_weights
ํจ์ ์ด๋ฆ: load_weights_upto
์ ๋ ฅ:
network *net: ๋ด๋ด ๋คํธ์ํฌ
char *filename: ๊ฐ์ค์น ํ์ผ ์ด๋ฆ
int start: ์์ ๋ ์ด์ด ์ธ๋ฑ์ค
int cutoff: ๋ก๋๋ฅผ ์ค์งํ ๋ ์ด์ด ์ธ๋ฑ์ค
๋์:
์ง์ ๋ ๊ฐ์ค์น ํ์ผ์์ ๊ฐ์ค์น๋ฅผ ๋ก๋ํ์ฌ ๋ด๋ด ๋คํธ์ํฌ์ ์ ์ฉํ๋ ํจ์
๋ก๋๋ฅผ ์์ํ๋ ๋ ์ด์ด ์ธ๋ฑ์ค์ ๋ก๋๋ฅผ ์ค์งํ๋ ๋ ์ด์ด ์ธ๋ฑ์ค๋ฅผ ์ธ์๋ก ๋ฐ์
๋ด๋ด ๋คํธ์ํฌ์์ ๋ก๋๋ฅผ ๊ฑด๋๋ธ ๋ ์ด์ด์ ๋ํ ์ฒ๋ฆฌ๋ ์ํํจ
์ค๋ช :
์ง์ ๋ ๊ฐ์ค์น ํ์ผ์ ์ด๊ณ , ํ์ผ์ด ์์ผ๋ฉด file_error ํจ์๋ฅผ ํธ์ถํ์ฌ ์ค๋ฅ ๋ฉ์์ง ์ถ๋ ฅ
๊ฐ์ค์น ํ์ผ์ ํ์์ ๋ฐ๋ผ ํ์ผ์์ major, minor, revision ๊ฐ์ ์ฝ์ด ๋ค์
major์ minor ๊ฐ์ด 2 ์ด์์ด๋ฉด net->seen ๊ฐ์ ํ์ผ์์ ์ฝ์ด ๋ค์
major์ minor ๊ฐ์ด 2 ๋ฏธ๋ง์ด๋ฉด iseen ๊ฐ์ ํ์ผ์์ ์ฝ์ด๋ค์ฌ *net->seen์ ์ ์ฅํจ
major ๊ฐ์ด 1000 ์ด์์ด๊ฑฐ๋ minor ๊ฐ์ด 1000 ์ด์์ด๋ฉด ์ ์น(transpose) ํ๋๊ทธ๋ฅผ ์ค์ ํจ
start๋ถํฐ cutoff๊น์ง์ ๋ ์ด์ด์ ๋ํด, ๊ฐ ๋ ์ด์ด์ ํ์ ์ ๋ฐ๋ผ ๊ฐ์ค์น๋ฅผ ๋ก๋ํจ
๋ก๋๋ฅผ ๊ฑด๋๋ฐ์ด์ผ ํ๋ ๋ ์ด์ด์ ๊ฒฝ์ฐ, dontload ํ๋๊ทธ๊ฐ true์ด๋ฏ๋ก continue๋ฌธ์ ํตํด ๊ฑด๋๋ฐ์ด ์ฒ๋ฆฌํจ
CONVOLUTIONAL ๋๋ DECONVOLUTIONAL ๋ ์ด์ด์ ๊ฒฝ์ฐ load_convolutional_weights ํจ์ ํธ์ถ
CONNECTED ๋ ์ด์ด์ ๊ฒฝ์ฐ load_connected_weights ํจ์ ํธ์ถ
BATCHNORM ๋ ์ด์ด์ ๊ฒฝ์ฐ load_batchnorm_weights ํจ์ ํธ์ถ
CRNN, RNN, LSTM, GRU ๋ ์ด์ด์ ๊ฒฝ์ฐ ๊ฐ๊ฐ ํด๋นํ๋ ๊ฐ์ค์น๋ฅผ ๋ก๋ํจ
LOCAL ๋ ์ด์ด์ ๊ฒฝ์ฐ biases์ weights๋ฅผ ํ์ผ์์ ์ฝ์ด ๋ค์
๋ก๋๊ฐ ๋๋๋ฉด ํ์ผ์ ๋ซ๊ณ "Done!" ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํจ
load_convolutional_weights
ํจ์ ์ด๋ฆ: load_convolutional_weights
์ ๋ ฅ:
layer l(์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด ๊ตฌ์กฐ์ฒด)
FILE *fp(ํ์ผ ํฌ์ธํฐ)
๋์:
์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ๊ฐ์ค์น(weights)์ bias๋ฅผ ํ์ผ์์ ์ฝ์ด์จ๋ค.
์ด๋, ๋ฐฐ์น ์ ๊ทํ(batch normalization)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ค์ผ์ผ(scale), ๋กค๋ง ํ๊ท (rolling mean), ๋กค๋ง ๋ถ์ฐ(rolling variance)๋ ํจ๊ป ์ฝ์ด์จ๋ค.
๊ฐ์ค์น๋ฅผ ์ฝ์ด์จ ํ, ํํฐ ํฌ๊ธฐ์ ์ฑ๋ ์ ๋ฑ์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ค์น๋ฅผ ์กฐ์ํ๋ ์ฐ์ฐ(transpose_matrix, binarize_weights)์ ์ํํ๋ค.
์ค๋ช :
์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ๊ฐ์ค์น์ bias๋ฅผ ํ์ผ์์ ์ฝ์ด์ค๋ ํจ์์ด๋ค.
์ด ํจ์๋ darknet ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ์ ๊ตฌํ์ฒด์์ ์ฌ์ฉ๋๋ฉฐ, ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ layer ๊ตฌ์กฐ์ฒด์ ๊ฐ์ค์น์ bias ์ ๋ณด๋ฅผ ์ฑ์ด๋ค.
์ด ํจ์๋ ๋ฐฐ์น ์ ๊ทํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ค์ผ์ผ, ๋กค๋ง ํ๊ท , ๋กค๋ง ๋ถ์ฐ ์ ๋ณด๋ ํจ๊ป ์ฝ์ด์จ๋ค.
์ด ํจ์๋ ๋ํ ๊ฐ์ค์น๋ฅผ ์ฝ์ด์จ ํ, ํํฐ ํฌ๊ธฐ์ ์ฑ๋ ์ ๋ฑ์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ค์น๋ฅผ ์กฐ์ํ๋ ์ฐ์ฐ(transpose_matrix, binarize_weights)์ ์ํํ๋ค.
load_batchnorm_weights
ํจ์ ์ด๋ฆ: load_batchnorm_weights
์ ๋ ฅ:
layer l(๋ฐฐ์น ์ ๊ทํ ๋ ์ด์ด ๊ตฌ์กฐ์ฒด)
FILE *fp(ํ์ผ ํฌ์ธํฐ)
๋์:
๋ฐฐ์น ์ ๊ทํ ๋ ์ด์ด์ ์ค์ผ์ผ(scale), ๋กค๋ง ํ๊ท (rolling mean), ๋กค๋ง ๋ถ์ฐ(rolling variance) ์ ๋ณด๋ฅผ ํ์ผ์์ ์ฝ์ด์จ๋ค.
์ค๋ช :
๋ฐฐ์น ์ ๊ทํ ๋ ์ด์ด์ ์ค์ผ์ผ, ๋กค๋ง ํ๊ท , ๋กค๋ง ๋ถ์ฐ ์ ๋ณด๋ฅผ ํ์ผ์์ ์ฝ์ด์ค๋ ํจ์์ด๋ค.
์ด ํจ์๋ darknet ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ์ ๊ตฌํ์ฒด์์ ์ฌ์ฉ๋๋ฉฐ, ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ layer ๊ตฌ์กฐ์ฒด์ ์ค์ผ์ผ, ๋กค๋ง ํ๊ท , ๋กค๋ง ๋ถ์ฐ ์ ๋ณด๋ฅผ ์ฑ์ด๋ค.
์ด ํจ์๋ load_convolutional_weights ํจ์์์ ํธ์ถ๋์ด ๋ฐฐ์น ์ ๊ทํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ํด๋น ์ ๋ณด๋ฅผ ํจ๊ป ์ฝ์ด์ค๋ ์ญํ ์ ํ๋ค.
load_connected_weights
ํจ์ ์ด๋ฆ: load_connected_weights
์ ๋ ฅ:
layer l(์์ ์ฐ๊ฒฐ ๋ ์ด์ด ๊ตฌ์กฐ์ฒด)
FILE *fp(ํ์ผ ํฌ์ธํฐ)
int transpose(์ ์น ์ฌ๋ถ)
๋์:
์์ ์ฐ๊ฒฐ ๋ ์ด์ด์ ํธํฅ(bias)๊ณผ ๊ฐ์ค์น(weights) ์ ๋ณด๋ฅผ ํ์ผ์์ ์ฝ์ด์จ๋ค.
์ด ๋, ์ ์น ํ๋๊ทธ(transpose)๊ฐ ์ฐธ์ด๋ฉด ๊ฐ์ค์น๋ฅผ ์ ์นํ๋ค. ๋ํ ๋ฐฐ์น ์ ๊ทํ(batch normalization)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ค์ผ์ผ(scale), ๋กค๋ง ํ๊ท (rolling mean), ๋กค๋ง ๋ถ์ฐ(rolling variance) ์ ๋ณด๋ ํ์ผ์์ ์ฝ์ด์จ๋ค.
์ค๋ช :
์์ ์ฐ๊ฒฐ ๋ ์ด์ด์ ํธํฅ๊ณผ ๊ฐ์ค์น ์ ๋ณด๋ฅผ ํ์ผ์์ ์ฝ์ด์ค๋ ํจ์์ด๋ค.
์ด ํจ์๋ darknet ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ์ ๊ตฌํ์ฒด์์ ์ฌ์ฉ๋๋ฉฐ, ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ layer ๊ตฌ์กฐ์ฒด์ ํธํฅ๊ณผ ๊ฐ์ค์น ์ ๋ณด๋ฅผ ์ฑ์ด๋ค.
์ด ํจ์๋ load_network ํจ์์์ ํธ์ถ๋์ด, ๋ชจ๋ธ์ ํ๋ผ๋ฏธํฐ๋ฅผ ํ์ผ์์ ์ฝ์ด์ค๋ ์ญํ ์ ํ๋ค.
์ ์น ํ๋๊ทธ๊ฐ ์ฐธ์ด๋ฉด ๊ฐ์ค์น๋ฅผ ์ ์นํ์ฌ ์ ์ฅํ๋ฉฐ, ๋ฐฐ์น ์ ๊ทํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ํด๋น ์ ๋ณด๋ ํจ๊ป ์ฝ์ด์ค๋ ์ญํ ์ ํ๋ค.
transpose_matrix
ํ๋ ฌ์ ์ ์น ์ํต๋๋ค.
ํจ์ ์ด๋ฆ: transpose_matrix
์ ๋ ฅ:
float *a: ์ ์นํ ํ๋ ฌ์ ํฌ์ธํฐ
int rows: ํ๋ ฌ์ ํ ์
int cols: ํ๋ ฌ์ ์ด ์
๋์:
์ฃผ์ด์ง ํ๋ ฌ์ ์ ์นํ์ฌ ๋ค์ a์ ์ ์ฅํ๋ ํจ์์ ๋๋ค. ์ ์น๋, ํ๋ ฌ์ ํ๊ณผ ์ด์ ์๋ก ๋ฐ๊พธ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ค๋ช :
ํ๋ ฌ์ ์ ์นํ๊ธฐ ์ํด์๋ ๊ฐ ์์์ ์ธ๋ฑ์ค๋ฅผ ๋ฐ๊ฟ์ฃผ๋ฉด ๋ฉ๋๋ค.
๋ฐ๋ผ์, ์ด ํจ์์์๋ ํ๋ ฌ a์ ๊ฐ ํ๊ณผ ์ด์ ๋ฐ๋ณต๋ฌธ์ ํตํด ๋๋ฉฐ transpose ๋ฐฐ์ด์ ์ ์น๋ ์์๋ฅผ ์ ์ฅํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋์, transpose ๋ฐฐ์ด์ ๋ค์ a์ ๋ณต์ฌํ์ฌ ์ ์น๋ ํ๋ ฌ์ ์ป์ต๋๋ค.
์ด๋, ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด calloc์ผ๋ก ํ ๋นํ transpose ๋ฐฐ์ด์ free ํจ์๋ฅผ ์ด์ฉํ์ฌ ํด์ ํฉ๋๋ค.
save_weights
ํจ์ ์ด๋ฆ: save_weights_upto
์ ๋ ฅ:
network *net: ์ ์ฅํ ๊ฐ์ค์น๋ฅผ ํฌํจํ๋ ์ ๊ฒฝ๋ง ๊ตฌ์กฐ์ฒด
char *filename: ๊ฐ์ค์น๋ฅผ ์ ์ฅํ ํ์ผ ์ด๋ฆ
int cutoff: ์ ์ฅํ ๊ฐ์ค์น์ ์ต๋ ๋ ์ด์ด ์
๋์:
์ฃผ์ด์ง ํ์ผ ์ด๋ฆ์ผ๋ก ๊ฐ์ค์น๋ฅผ ์ ์ฅํ๋ ํจ์
์ ์ฅํ ๊ฐ์ค์น๋ฅผ ํฌํจํ๋ ์ ๊ฒฝ๋ง ๊ตฌ์กฐ์ฒด์ ํ์ผ ์ด๋ฆ์ ์ ๋ ฅ ๋ฐ๋๋ค.
cutoff์ ์ด์ฉํด ์ ์ฅํ ๋ ์ด์ด ์๋ฅผ ์ ํํ ์ ์๋ค.
major, minor, revision ๋ฐ net->seen ๊ฐ์ ํ์ผ์ ์ ์ฅํ๋ค.
๊ฐ ๋ ์ด์ด์ ๋ํด ํด๋น ๋ ์ด์ด ์ ํ์ ๋ฐ๋ผ ์ ์ ํ ๊ฐ์ค์น ์ ์ฅ ํจ์๋ฅผ ํธ์ถํ๋ค.
ํ์ผ ํฌ์ธํฐ๋ฅผ ๋ซ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ ๊ฒฝ๋ง์ ๊ฐ์ค์น๋ฅผ ํ์ผ์ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ํ๋ค.
์ ์ฅํ ๊ฐ์ค์น๋ CONVOLUTIONAL, DECONVOLUTIONAL, CONNECTED, BATCHNORM, RNN, LSTM, GRU, CRNN, LOCAL ๋ ์ด์ด ํ์ ์ ๋ฐ๋ผ ์ ์ ํ ๊ฐ์ค์น ์ ์ฅ ํจ์๋ฅผ ํธ์ถํ์ฌ ์ ์ฅํ๋ค.
์ ์ฅ๋ ํ์ผ์ ์ถํ load_weights() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ฒฝ๋ง์ ๋ก๋ํ ์ ์๋ค.
cutoff ๊ฐ์ ์ฌ์ฉํ์ฌ ์ ๊ฒฝ๋ง์ ์ผ๋ถ ๋ ์ด์ด๋ง ์ ์ฅํ ์ ์๋ค.
save_connected_weights
ํจ์ ์ด๋ฆ: save_connected_weights
์ ๋ ฅ:
layer l: ์ ์ฅํ weights๋ฅผ ๊ฐ์ง connected layer
FILE *fp: ์ ์ฅํ ํ์ผ ํฌ์ธํฐ
๋์:
connected layer์ biases์ weights๋ฅผ ์ด์ง ํ์ผ๋ก ์ ์ฅ
batch normalization์ด ์ฌ์ฉ๋์๋ค๋ฉด, scales, rolling_mean, rolling_variance๋ ์ ์ฅ
์ค๋ช :
์ฃผ์ด์ง connected layer์ biases์ weights๋ฅผ ์ด์ง ํ์ผ๋ก ์ ์ฅํ๋ ํจ์์ด๋ค.
batch normalization์ด ์ฌ์ฉ๋ ๊ฒฝ์ฐ, scales, rolling_mean, rolling_variance๋ ์ ์ฅํ๋ค.
์ด์ง ํ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํด C ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ fwrite ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
save_batchnorm_weights
ํจ์ ์ด๋ฆ: save_batchnorm_weights
์ ๋ ฅ:
layer l (๋ฐฐ์น ์ ๊ทํ๋ฅผ ์ ์ฉํ๋ ๋ ์ด์ด), FILE *fp (ํ์ผ ํฌ์ธํฐ)
๋์:
์ฃผ์ด์ง ๋ ์ด์ด l์ ๋ฐฐ์น ์ ๊ทํ ๊ฐ์ค์น๋ฅผ ํ์ผ์ ์ ์ฅํฉ๋๋ค.
์ค๋ช :
๋ฐฐ์น ์ ๊ทํ๋ฅผ ์ ์ฉํ๋ ๋ ์ด์ด l์ ๊ฐ์ค์น๋ฅผ ํ์ผ์ ์ ์ฅํฉ๋๋ค.
l์ ๊ฐ์ค์น์๋ scales, rolling_mean, rolling_variance๊ฐ ํฌํจ๋ฉ๋๋ค.
๊ฐ๊ฐ์ ๊ฐ์ค์น๋ float ํ์์ผ๋ก ํ์ผ์ ์ ์ฅ๋ฉ๋๋ค.
save_convolutional_weights
ํจ์ ์ด๋ฆ: save_convolutional_weights
์ ๋ ฅ:
layer l (layer: ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด)
FILE *fp (fp: ํ์ผ ํฌ์ธํฐ)
๋์:
์ฃผ์ด์ง ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด์ ๊ฐ์ค์น๋ฅผ ํ์ผ์ ์ ์ฅํ๋ ํจ์. ๊ฐ ํํฐ์ bias์ weight, batch normalization์ ์ํ scale, rolling_mean, rolling_variance๋ฅผ ์ ์ฅํ๋ค.
์ค๋ช :
l.binary๊ฐ true์ธ ๊ฒฝ์ฐ ์ด์ง ํ์ผ๋ก ์ ์ฅํ๊ณ ํจ์๋ฅผ ์ข ๋ฃํ๋ค.
ํํฐ ๊ฐ์(num)๋ฅผ ๊ณ์ฐํ๊ณ biases๋ฅผ ๋จผ์ ํ์ผ์ ์ ์ฅํ๋ค.
batch_normalize๊ฐ true์ธ ๊ฒฝ์ฐ scales, rolling_mean, rolling_variance๋ ํ์ผ์ ์ ์ฅํ๋ค.
๋ง์ง๋ง์ผ๋ก weights๋ฅผ ํ์ผ์ ์ ์ฅํ๋ค.
Last updated
Was this helpful?