network
get_base_args
ν¨μ μ΄λ¦: get_base_args
μ λ ₯:
network *net (μ κ²½λ§ κ΅¬μ‘°μ²΄ ν¬μΈν°)
λμ:
μ λ ₯μΌλ‘ λ°μ μ κ²½λ§ κ΅¬μ‘°μ²΄ ν¬μΈν°μ μ 보λ₯Ό μ΄μ©νμ¬ load_args ꡬ쑰체λ₯Ό μ΄κΈ°ννκ³ λ°νν¨.
μ€λͺ :
load_args ꡬ쑰체λ λ°μ΄ν° λ‘λ© μ νμν λ€μν μΈμλ€μ λ΄κ³ μλ ꡬ쑰체μ΄λ€.
μ΄ ν¨μλ μ λ ₯μΌλ‘ λ°μ μ κ²½λ§ κ΅¬μ‘°μ²΄ ν¬μΈν°μμ λ°μ΄ν° λ‘λ© μ νμν μΈμλ€μ μΆμΆνμ¬ load_args ꡬ쑰체λ₯Ό μ΄κΈ°νν ν λ°ννλ€.
μ΄κΈ°ννλ μΈμλ€λ‘λ λ°μ΄ν° ν¬κΈ°, μ΄λ―Έμ§ μ μ²λ¦¬μ μ¬μ©λλ κ°λ€ (crop, angle, aspect, exposure, center, saturation, hue) λ±μ΄ μλ€.
load_network
ν¨μ μ΄λ¦: load_network
μ λ ₯:
char *cfg: λ€νΈμν¬ κ΅¬μ± νμΌμ κ²½λ‘λ₯Ό λνλ΄λ λ¬Έμμ΄ ν¬μΈν°
char *weights: νμ΅λ κ°μ€μΉ νμΌμ κ²½λ‘λ₯Ό λνλ΄λ λ¬Έμμ΄ ν¬μΈν°
int clear: λ€νΈμν¬μ seen κ°μ 0μΌλ‘ μ€μ ν μ§ μ¬λΆλ₯Ό λνλ΄λ μ μ
λμ:
parse_network_cfg ν¨μλ₯Ό μ¬μ©νμ¬ cfg νμΌμμ λ€νΈμν¬ κ΅¬μ±μ μ½μ΄μ λ€νΈμν¬λ₯Ό μ΄κΈ°ν
weightsκ° μ£Όμ΄μ§λ©΄ load_weights ν¨μλ₯Ό μ¬μ©νμ¬ κ°μ€μΉλ₯Ό λ‘λ
clearκ° 1μ΄λ©΄ λ€νΈμν¬μ seen κ°μ 0μΌλ‘ μ€μ
μ΄κΈ°νλ λ€νΈμν¬ ν¬μΈν°λ₯Ό λ°ν
μ€λͺ :
μ΄ ν¨μλ κ΅¬μ± νμΌκ³Ό νμ΅λ κ°μ€μΉ νμΌλ‘λΆν° λ€νΈμν¬λ₯Ό λ‘λνλ ν¨μμ΄λ€.
cfgμ weights μΈμλ νμΌ κ²½λ‘λ₯Ό λνλ΄λ λ¬Έμμ΄ ν¬μΈν°μ΄λ€.
clear μΈμλ λ€νΈμν¬μ seen κ°μ μ΄κΈ°νν μ§ μ¬λΆλ₯Ό κ²°μ νλ€.
μ΄ ν¨μλ λ¨Όμ parse_network_cfg ν¨μλ₯Ό μ¬μ©νμ¬ cfg νμΌμμ λ€νΈμν¬ κ΅¬μ±μ μ½μ΄μ λ€νΈμν¬λ₯Ό μ΄κΈ°ννλ€.
weightsκ° μ£Όμ΄μ‘λ€λ©΄ load_weights ν¨μλ₯Ό μ¬μ©νμ¬ κ°μ€μΉλ₯Ό λ‘λνλ€.
clearκ° 1μ΄λ©΄ λ€νΈμν¬μ seen κ°μ 0μΌλ‘ μ€μ νλ€.
μ΄κΈ°νλ λ€νΈμν¬ ν¬μΈν°λ₯Ό λ°ννλ€.
get_current_batch
ν¨μ μ΄λ¦: get_current_batch
μ λ ₯:
network ꡬ쑰체 ν¬μΈν° λ³μ net
λμ:
νμ¬κΉμ§ μ²λ¦¬λ λ°μ΄ν° μν μμ λ°°μΉ ν¬κΈ°, μλΈλλΉμ κ°μΌλ‘λΆν° νμ¬ λ°°μΉμ λ²νΈλ₯Ό κ³μ°νμ¬ λ°ννλ€.
μ€λͺ :
get_current_batch ν¨μλ νμ¬κΉμ§ μ²λ¦¬λ λ°μ΄ν° μν μμ λ°°μΉ ν¬κΈ°, μλΈλλΉμ κ°μ μ΄μ©νμ¬ νμ¬ λ°°μΉμ λ²νΈλ₯Ό κ³μ°νκ³ , κ·Έ κ°μ size_t νμ μΌλ‘ λ°ννλ€.
μ΄ ν¨μλ νμ΅ μ€μΈ μ κ²½λ§μμ νμ¬ λͺ λ²μ§Έ λ°°μΉμΈμ§ νμΈν λ μ¬μ©λλ€.
get_current_rate
ν¨μ μ΄λ¦: get_current_rate
μ λ ₯:
network ꡬ쑰체 ν¬μΈν°(net)
λμ:
νμ¬ λ°°μΉ(batch_num)μ λ€νΈμν¬μ νμ΅λ₯ (learning_rate) λ° νμ΅ μ μ± (policy)μ λ°λΌ νμ¬ νμ΅ μλ(rate)λ₯Ό κ³μ°νλ€.
μ€λͺ :
νμ¬ λ°°μΉ(batch_num)λ (*net->seen) / (net->batch * net->subdivisions)λ‘ κ³μ°λλ€.
μ΄λ (*net->seen)μ λ€νΈμν¬κ° μ§κΈκΉμ§ λ³Έ μ΄λ―Έμ§ μλ₯Ό λνλ΄κ³ , net->batchμ net->subdivisionsλ λ€νΈμν¬κ° ν λ²μ μμ ν λ¨κ³μμ μ²λ¦¬ν μ΄λ―Έμ§μ κ°μμ μλΈ λ°°μΉ(sub-batch)μ μλ₯Ό μλ―Ένλ€.
νμ΅ μλλ λ€νΈμν¬μ νμ΅ μ μ± (policy)μ λ°λΌ κ³μ°λλ€.
μ¬λ¬ κ°μ§ νμ΅ μ μ± μ μ§μνλ€. CONSTANT(κ³ μ ), STEP(λ¨κ³), STEPS(λ¨κ³ μ¬λ¬ κ°), EXP(μ§μ), POLY(λ€ν), RANDOM(λλ€), SIG(μκ·Έλͺ¨μ΄λ) λ±μ΄ μλ€.
κ° νμ΅ μ μ± μ λν μμΈν μ€λͺ μ darknet 곡μ λ¬Έμλ₯Ό μ°Έμ‘°νλ©΄ λλ€.
λ°νκ°: νμ¬ νμ΅ μλ(rate)
get_layer_string
ν¨μ μ΄λ¦: get_layer_string
μ λ ₯:
LAYER_TYPE a (μ΄κ±°ν)
λμ:
μ λ ₯μΌλ‘ λ°μ λ μ΄μ΄ μ νμ ν΄λΉνλ λ¬Έμμ΄μ λ°ννλ€.
switch λ¬Έμ μ¬μ©νμ¬ μ λ ₯λ μ νμ λ°λΌ λ¬Έμμ΄μ λ°ννλ€.
λ§μ½μ ν΄λΉνλ μ νμ΄ μμ κ²½μ° "none" λ¬Έμμ΄μ λ°ννλ€.
μ€λͺ :
μ΄ ν¨μλ Darknet νλ μμν¬μμ μ¬μ©λλ λ μ΄μ΄ μ νμ λ¬Έμμ΄λ‘ λ³νν΄μ£Όλ ν¨μμ΄λ€.
Darknetμμ μ¬μ©λλ λͺ¨λ λ μ΄μ΄ μ νμ μ΄κ±°νμΌλ‘ μ μνκ³ μμΌλ©°, μ΄ ν¨μλ ν΄λΉ μ΄κ±°ν λ³μλ₯Ό μ λ ₯λ°μ λ¬Έμμ΄μ λ°ννλ€.
Darknetμ μ½λμμ μμ£Ό μ¬μ©λλ ν¨μ μ€ νλμ΄λ€.
make_network
ν¨μ μ΄λ¦: make_network
μ λ ₯:
n (int): λ€νΈμν¬κ° κ°μ§ λ μ΄μ΄ μ
λμ:
λ€νΈμν¬ κ΅¬μ‘°μ²΄λ₯Ό ν λΉνκ³ μ΄κΈ°ννλ€. layers, seen, t, cost λ±μ ꡬ쑰체 λ³μλ μ΄κΈ°ννλ€.
μ€λͺ :
μΈμλ‘ λ°μ nμ λ μ΄μ΄ μλ‘ κ°μ§λ λ€νΈμν¬ κ΅¬μ‘°μ²΄λ₯Ό μμ±νκ³ , νμν ꡬ쑰체 λ³μλ€μ μ΄κΈ°ννλ ν¨μμ΄λ€.
ν¨μκ° νΈμΆλλ©΄, calloc()μ μ¬μ©νμ¬ λ©λͺ¨λ¦¬λ₯Ό ν λΉνκ³ , ꡬ쑰체 λ³μλ€μ 0μΌλ‘ μ΄κΈ°νν ν, ꡬ쑰체 ν¬μΈν°λ₯Ό λ°ννλ€.
forward_network
ν¨μ μ΄λ¦: forward_network
μ λ ₯:
network *netp (ν¬μΈν° ννμ network ꡬ쑰체)
λμ:
μ λ°©ν₯ κ³μ°μ μννκ³ λ€νΈμν¬ λΉμ©μ κ³μ°νλ€.
ν¨μ λ΄λΆμμλ μ λ¬λ netpλ₯Ό 볡μ¬νμ¬ net ꡬ쑰체λ₯Ό λ§λ ν, λ€νΈμν¬ λ΄μ λͺ¨λ λ μ΄μ΄λ₯Ό μμ°¨μ μΌλ‘ μ€ννλ©΄μ κ²°κ³Όκ°μ κ³μ°νλ€.
λν νμ¬ λ μ΄μ΄μ μΆλ ₯κ°μ λ€μ λ μ΄μ΄μ μ λ ₯κ°μΌλ‘ μ¬μ©νλ€.
μ€λͺ :
λ€νΈμν¬μ μ λ°©ν₯ κ³μ°(forward propagation)μ μννλ ν¨μμ΄λ€. μ λ ₯ λ°μ΄ν°κ° λ€νΈμν¬λ₯Ό ν΅κ³Όνλ©΄μ κ° λ μ΄μ΄μμ μ°μ°μ μννκ³ μ΅μ’ μΆλ ₯κ°μ κ³μ°νλ€.
μ΄λ μ λ ₯ λ°μ΄ν°λ μ²μ λ μ΄μ΄μ μ λ ₯λκ³ , κ° λ μ΄μ΄λ μ΄μ λ μ΄μ΄μ μΆλ ₯κ°μ μ λ ₯μΌλ‘ λ°λλ€.
ν¨μκ° μ€νλλ©΄, μ λ¬λ netp ꡬ쑰체λ₯Ό 볡μ¬νμ¬ net ꡬ쑰체λ₯Ό λ§λ λ€.
κ·Έ ν, λͺ¨λ λ μ΄μ΄λ₯Ό μμ°¨μ μΌλ‘ μ€ννλ©΄μ μΆλ ₯κ°μ κ³μ°νκ³ , νμ¬ λ μ΄μ΄μ μΆλ ₯κ°μ λ€μ λ μ΄μ΄μ μ λ ₯κ°μΌλ‘ μ¬μ©νλ€.
μ΄λ, λ μ΄μ΄μμλ forward ν¨μλ₯Ό νΈμΆνμ¬ μΆλ ₯κ°μ κ³μ°νκ³ , μ΄ μΆλ ₯κ°μ λ€μ net ꡬ쑰체μ input νλμ μ μ₯λλ€.
λ§μ§λ§μΌλ‘, calc_network_cost ν¨μλ₯Ό νΈμΆνμ¬ λ€νΈμν¬ λΉμ©μ κ³μ°νλ€.
update_network
ν¨μ μ΄λ¦: update_network
μ λ ₯:
network ν¬μΈν°(netp)
λμ:
λ€νΈμν¬μ λ μ΄μ΄λ€μ μ λ°μ΄νΈν©λλ€.
update_args ꡬ쑰체λ₯Ό μμ±νμ¬ κ° λ μ΄μ΄μ update ν¨μλ₯Ό νΈμΆνκ³ , μ΄μ λ μ΄μ΄μ μΆλ ₯μ λ€μ λ μ΄μ΄μ μ λ ₯μΌλ‘ μ λ¬ν©λλ€.
μ€λͺ :
net: network ꡬ쑰체 λ³μλ‘, μ λ ₯μΌλ‘ λ°μ netpλ₯Ό μμ°Έμ‘°νμ¬ μμ±ν©λλ€.
i: λ°λ³΅λ¬Έμμ μ¬μ©ν μΈλ±μ€ λ³μμ λλ€.
a: update_args ꡬ쑰체λ‘, μ λ°μ΄νΈ ν¨μμ νμν μΈμλ€μ λ΄κ³ μμ΅λλ€.
a.batch: ν λ²μ μ²λ¦¬ν μ΄λ―Έμ§μ μ(batch size)μ λλ€.
a.learning_rate: νμ¬ νμ΅λ₯ (learning rate)μ κ°μ Έμ΅λλ€.
a.momentum: λͺ¨λ©ν (momentum) κ°μ κ°μ Έμ΅λλ€.
a.decay: κ°μ€μΉ κ°μ(weight decay) κ°μ κ°μ Έμ΅λλ€.
a.adam: Adam μ΅μ ν(Optimization) μκ³ λ¦¬μ¦μ μ¬μ©ν μ§ μ¬λΆλ₯Ό λνλ λλ€.
a.B1: Adam μκ³ λ¦¬μ¦μ 첫 λ²μ§Έ λͺ¨λ©νΈ κ³μμ λλ€.
a.B2: Adam μκ³ λ¦¬μ¦μ λ λ²μ§Έ λͺ¨λ©νΈ κ³μμ λλ€.
a.eps: Adam μκ³ λ¦¬μ¦μ μ‘μ€λ‘ (epsilon) κ°μ λλ€.
*net.t: νμ¬κΉμ§ μνν λ°λ³΅ νμμ λλ€. μ΄ κ°μ 1 μ¦κ°μν€κ³ , a.tμ μ μ₯ν©λλ€.
l: νμ¬ λ μ΄μ΄λ₯Ό λνλ΄λ layer ꡬ쑰체 λ³μμ λλ€.
l.update: νμ¬ λ μ΄μ΄μ update ν¨μ ν¬μΈν°μ λλ€. μ΄ κ°μ΄ NULLμ΄ μλλ©΄ l.update ν¨μλ₯Ό νΈμΆνμ¬ λ μ΄μ΄λ₯Ό μ λ°μ΄νΈν©λλ€.
calc_network_cost
ν¨μ μ΄λ¦: calc_network_cost
μ λ ₯:
network ꡬ쑰체 ν¬μΈν°(netp)
λμ:
λ€νΈμν¬ λ΄μ λͺ¨λ λ μ΄μ΄μ λΉμ©(cost) κ°μ ν©μ°νμ¬ νκ· κ°μ κ³μ°νκ³ , κ·Έ κ²°κ³Όλ₯Ό net ꡬ쑰체μ cost λ³μμ μ μ₯νλ€.
μ€λͺ :
μ λ ₯μΌλ‘ λ°μ λ€νΈμν¬ κ΅¬μ‘°μ²΄ ν¬μΈν°(netp)λ‘λΆν° λ€νΈμν¬ κ΅¬μ‘°μ²΄(net)λ₯Ό μμ±νλ€.
for 루νλ₯Ό μ¬μ©νμ¬ λͺ¨λ λ μ΄μ΄μ λν΄ λΉμ©(cost) κ°μ νμΈνλ€.
λΉμ©μ΄ μ‘΄μ¬νλ λ μ΄μ΄μ cost κ°μ ν©μ°(sum)νκ³ , κ°μ(count)λ₯Ό μΉ΄μ΄νΈνλ€.
λͺ¨λ λ μ΄μ΄μ λΉμ© κ°μ νκ· κ°μ κ³μ°νμ¬, net ꡬ쑰체μ cost λ³μμ μ μ₯νλ€.
get_predicted_class_network
ν¨μ μ΄λ¦: get_predicted_class_network
μ λ ₯:
network *net (μ κ²½λ§ ν¬μΈν°)
λμ:
μ κ²½λ§μ μΆλ ₯ 벑ν°μμ μμΈ‘λ ν΄λμ€μ μΈλ±μ€λ₯Ό λ°νν©λλ€.
max_index() ν¨μλ₯Ό μ¬μ©νμ¬ κ°μ₯ ν° κ°μ μΈλ±μ€λ₯Ό μ°Ύμ΅λλ€.
μ€λͺ :
μ΄ ν¨μλ λΆλ₯ μμ μμ μ κ²½λ§μ μΆλ ₯κ°μμ κ°μ₯ ν° κ°μ κ°μ§ ν΄λμ€μ μΈλ±μ€λ₯Ό λ°ννλλ° μ¬μ©λ©λλ€.
μΆλ ₯ 벑ν°λ νλ₯ λΆν¬μ μ μ¬νλ©°, κ°μ₯ ν° κ°μ μ κ²½λ§μ΄ μμΈ‘ν ν΄λμ€μ νλ₯ μ λλ€.
max_index() ν¨μλ λ°°μ΄μμ κ°μ₯ ν° κ°μ κ°μ§ μμμ μΈλ±μ€λ₯Ό μ°Ύμ λ°νν©λλ€.
backward_network
ν¨μ μ΄λ¦: backward_network
μ λ ₯:
network ꡬ쑰체 ν¬μΈν° (network *netp)
λμ:
λ€νΈμν¬μ κ° λ μ΄μ΄μ backward ν¨μλ₯Ό νΈμΆνμ¬ μμ ν(backpropagation)λ₯Ό μνν©λλ€.
μΆλ ₯κ°(output)μ λν μ€μ°¨λ₯Ό κ³μ°νκ³ κ° λ μ΄μ΄μ deltaκ°μ μ λ°μ΄νΈν©λλ€.
μ€λͺ :
μ λ ₯μΌλ‘ λ°μ ν¬μΈν°λ‘λΆν° network ꡬ쑰체λ₯Ό κ°μ Έμ¨ λ€, κ° λ μ΄μ΄μ backward ν¨μλ₯Ό μμμΌλ‘ μ€νν©λλ€.
λ μ΄μ΄λ₯Ό κ±°κΎΈλ‘ μ€ννλ μ΄μ λ, κ° λ μ΄μ΄μμ κ³μ°λ deltaκ°μ μ΄μ λ μ΄μ΄λ‘ μ λ¬ν΄μ£Όμ΄μΌ νκΈ° λλ¬Έμ λλ€.
iκ° 0μΌ λλ 첫 λ²μ§Έ λ μ΄μ΄μ΄λ―λ‘, μ λ ₯κ°μ λ€μ μλλλ‘ λλλ € λμ΅λλ€.
l.stopbackwardκ° trueμ΄λ©΄ ν΄λΉ λ μ΄μ΄μ backward ν¨μλ₯Ό μ€ννμ§ μκ³ , μ΄μ λ μ΄μ΄λ‘ λμ΄κ°λλ€.
μΆλ ₯: μμ (void)
train_network_datum
ν¨μ μ΄λ¦: train_network_datum
μ λ ₯:
(network*) net: νμ΅ν μ κ²½λ§
λμ:
μ λ ₯ λ°μ΄ν°μ λν΄ νμ΅μ μννκ³ , μλ¬λ₯Ό λ°ννλ€.
μ€λͺ :
*net->seen κ°μ net->batch κ°μ λνλ€.
net->train κ°μ 1λ‘ μ€μ νμ¬ μ κ²½λ§μ΄ νμ΅ μ€μμ λνλΈλ€.
forward_network ν¨μλ₯Ό νΈμΆνμ¬ μμ νλ₯Ό μννλ€.
backward_network ν¨μλ₯Ό νΈμΆνμ¬ μμ νλ₯Ό μννλ€.
*net->cost κ°μ error λ³μμ λμ νλ€.
(*net->seen)/net->batch κ°μ΄ net->subdivisionsλ‘ λλμ΄ λ¨μ΄μ§λ©΄, update_network ν¨μλ₯Ό νΈμΆνμ¬ κ°μ€μΉλ₯Ό μ λ°μ΄νΈ νλ€.
μλ¬(error)λ₯Ό λ°ννλ€.
train_network_sgd
ν¨μ μ΄λ¦: train_network_sgd
μ λ ₯:
network *net: μ κ²½λ§μ κ°λ¦¬ν€λ ν¬μΈν°
data d: νμ΅ λ°μ΄ν°μ
int n: νμ΅ λ°μ΄ν°μ μμ λλ€νκ² μ νν λ°μ΄ν° μ
λμ:
μ£Όμ΄μ§ νμ΅ λ°μ΄ν°μ μμ nκ°μ λ°μ΄ν°λ₯Ό λλ€νκ² μ νν΄ μ κ²½λ§μ νμ΅μν΅λλ€.
κ° λ°μ΄ν°λ train_network_datum ν¨μλ₯Ό μ¬μ©ν΄ νμ΅νλ©°, μλ¬λ₯Ό λμ νμ¬ νκ· μλ¬λ₯Ό κ³μ°νκ³ λ°νν©λλ€.
μ€λͺ :
batch: ν λ²μ μ²λ¦¬λ λ°μ΄ν°μ μμ λλ€.
err: train_network_datum ν¨μμμ κ³μ°λ μλ¬μ λλ€.
sum: nκ°μ λ°μ΄ν°μμ κ³μ°λ μ΄ μλ¬μ λλ€.
train_network
ν¨μ μ΄λ¦: train_network
μ λ ₯:
network *net (μ κ²½λ§ λͺ¨λΈ ν¬μΈν°)
data d (νμ΅μ© λ°μ΄ν°μ )
λμ:
μ£Όμ΄μ§ λ°μ΄ν°μ μ μ΄μ©νμ¬ μ κ²½λ§ λͺ¨λΈμ νμ΅μν΄.
λ°°μΉ ν¬κΈ°λ₯Ό κ³ λ €νμ¬ λ°μ΄ν°μ μ λ―Έλλ°°μΉλ‘ λλμ΄ κ°κ°μ νμ΅ λ°μ΄ν°λ‘ μ¬μ©νκ³ , κ° λ―Έλλ°°μΉλ§λ€ train_network_datum ν¨μλ₯Ό νΈμΆνμ¬ λͺ¨λΈμ νμ΅μν΄.
νμ΅ λ°μ΄ν° μ 체μ λν μ€μ°¨μ νκ· κ°μ λ°νν¨.
μ€λͺ :
assert λ¬Έμ μ¬μ©νμ¬ λ°μ΄ν°μ μ ν¬κΈ°κ° λ°°μΉ ν¬κΈ°μ λ°°μμΈμ§ νμΈν¨.
μ λ ₯μΌλ‘ μ£Όμ΄μ§ λ°μ΄ν°μ d λ₯Ό λ°°μΉ ν¬κΈ°λ‘ λλμ΄ λ―Έλλ°°μΉμ κ°μ n μ ꡬν¨.
n λ§νΌ λ°λ³΅νλ©°, i λ²μ§Έ λ―Έλλ°°μΉλ₯Ό κ°μ Έμμ get_next_batch ν¨μλ₯Ό νΈμΆνμ¬ net->input, net->truth λ°°μ΄μ μ λ ₯ λ°μ΄ν°μ μ λ΅ λ°μ΄ν°λ₯Ό μ€μ ν¨.
train_network_datum ν¨μλ₯Ό νΈμΆνμ¬ λͺ¨λΈμ νμ΅μν΄. μ΄ λ, κ° λ―Έλλ°°μΉλ§λ€μ μ€μ°¨λ₯Ό sum λ³μμ λν΄μ€.
μ 체 νμ΅ λ°μ΄ν°μ λν μ€μ°¨μ νκ· κ°μ κ³μ°νμ¬ λ°νν¨.
set_temp_network
ν¨μ μ΄λ¦: set_temp_network
μ λ ₯:
network ꡬ쑰체 ν¬μΈν°(net)
λΆλ μμμ κ°(t)
λμ:
λ€νΈμν¬μ λͺ¨λ λ μ΄μ΄μ μ¨λλ₯Ό μ£Όμ΄μ§ κ°μΌλ‘ μ€μ νλ€.
μ€λͺ :
μ λ ₯μΌλ‘ λ°μ λ€νΈμν¬(net)μ κ° λ μ΄μ΄μ μ¨λ(temperature)λ₯Ό μ£Όμ΄μ§ κ°(t)μΌλ‘ μ€μ νλ€.
μ΄ ν¨μλ κ° λ μ΄μ΄μ μ¨λλ₯Ό μ μ΄νμ¬, νλ ¨ μ€ λ€νΈμν¬κ° μλ ΄νκΈ° μ μ μ§μ μ΅μ μ μ λΉ μ§μ§ μλλ‘ νλ€.
set_batch_network
ν¨μ μ΄λ¦: set_batch_network
μ λ ₯:
net (network* νμ ): λ°°μΉ ν¬κΈ°λ₯Ό μ€μ ν μ κ²½λ§ κ΅¬μ‘°μ²΄ ν¬μΈν°
b (int νμ ): μ€μ ν λ°°μΉ ν¬κΈ° κ°
λμ:
μ λ ₯μΌλ‘ λ°μ λ°°μΉ ν¬κΈ° κ°μ μ κ²½λ§ κ΅¬μ‘°μ²΄μ λ°°μΉ ν¬κΈ°μ μ€μ νκ³ , λͺ¨λ λ μ΄μ΄μ λ°°μΉ ν¬κΈ°λ μ λ ₯κ°μΌλ‘ μ€μ ν κ°μΌλ‘ λ³κ²½νλ€.
μ€λͺ :
ν΄λΉ ν¨μλ μ κ²½λ§μ λ°°μΉ ν¬κΈ°λ₯Ό μ€μ νλ ν¨μμ΄λ€.
μ λ ₯μΌλ‘ λ°μ μ κ²½λ§ κ΅¬μ‘°μ²΄ ν¬μΈν°μ λ°°μΉ ν¬κΈ°λ₯Ό μ λ ₯μΌλ‘ λ°μ λ°°μΉ ν¬κΈ° κ°μΌλ‘ μ€μ νκ³ , λͺ¨λ λ μ΄μ΄μ λ°°μΉ ν¬κΈ°λ κ°μ κ°μΌλ‘ λ³κ²½νλ€.
λ°°μΉ ν¬κΈ°λ ν λ²μ μ²λ¦¬ν λ°μ΄ν°μ κ°μλ₯Ό μλ―Ένλ€.
λ°°μΉ ν¬κΈ°λ₯Ό μ€μ νλ κ²μ μ κ²½λ§ νμ΅ μ ν λ²μ μ²λ¦¬ν λ°μ΄ν°μ κ°μλ₯Ό κ²°μ νλ μ€μν μμ μ€ νλμ΄λ€.
λ°°μΉ ν¬κΈ°λ₯Ό μ μ ν μ€μ νλ©΄ νμ΅ μλμ μ νλλ₯Ό κ°μ ν μ μλ€.
resize_network
ν¨μ μ΄λ¦: resize_network
μ λ ₯:
network *net (μ κ²½λ§ λͺ¨λΈ ν¬μΈν°)
int w (λ³κ²½ν λλΉ)
int h (λ³κ²½ν λμ΄)
λμ:
μ λ ₯λ λλΉμ λμ΄λ₯Ό κΈ°λ°μΌλ‘ λ€νΈμν¬ λͺ¨λΈμ μ¬μ‘°μ νκ³ , μλ‘μ΄ ν¬κΈ°μ λ§κ² κ° λ μ΄μ΄λ₯Ό μ¬μ€μ ν©λλ€.
μ΄ ν¨μλ λλΉμ λμ΄λ₯Ό μ‘°μ νλ κ² μΈμλ, μλ‘μ΄ μ λ ₯κ³Ό μΆλ ₯ ν¬κΈ°λ₯Ό κ³μ°νκ³ , μ λ ₯ λ° μΆλ ₯ λ©λͺ¨λ¦¬λ₯Ό ν λΉνλ©°, μμ 곡κ°μ ν¬κΈ°λ₯Ό μ‘°μ ν©λλ€.
μ€λͺ :
network *net: λ₯λ¬λ λͺ¨λΈμ λνλ΄λ ν¬μΈν°
int w: λ³κ²½ν μ λ ₯ μ΄λ―Έμ§μ λλΉ
int h: λ³κ²½ν μ λ ₯ μ΄λ―Έμ§μ λμ΄
int i: λ°λ³΅λ¬Έμμ μ¬μ©λλ μΈλ±μ€ λ³μ
int inputs: μ λ ₯μ ν¬κΈ°λ₯Ό μ μ₯νλ λ³μ
size_t workspace_size: μμ 곡κ°μ ν¬κΈ°λ₯Ό μ μ₯νλ λ³μ
layer l: νμ¬ μ²λ¦¬ μ€μΈ λ μ΄μ΄
layer out: λ€νΈμν¬ μΆλ ₯ λ μ΄μ΄
float *input: μ λ ₯ λ°μ΄ν°λ₯Ό μ μ₯νλ λ°°μ΄
float *truth: μ€μ μΆλ ₯ λ°μ΄ν°λ₯Ό μ μ₯νλ λ°°μ΄
float *output: λ€νΈμν¬μ μΆλ ₯ λ°μ΄ν°λ₯Ό μ μ₯νλ λ°°μ΄
μ΄ ν¨μλ μ λ ₯λ λλΉμ λμ΄λ₯Ό κΈ°λ°μΌλ‘ λ€νΈμν¬ λͺ¨λΈμ μ¬μ‘°μ ν©λλ€.
κ·Έλ¬λ©΄μ, λͺ¨λ λ μ΄μ΄μ λν΄ μλ‘μ΄ ν¬κΈ°μ λ§κ² κ° λ μ΄μ΄λ₯Ό μ¬μ€μ ν©λλ€.
μ΄ λ, λ°λ³΅λ¬Έμ μ¬μ©νμ¬ λͺ¨λ λ μ΄μ΄λ₯Ό μ²λ¦¬νλ©°, λ μ΄μ΄ μ νμ λ°λΌ ν΄λΉνλ resize ν¨μλ₯Ό νΈμΆν©λλ€.
κ° λ μ΄μ΄μ μμ κ³΅κ° ν¬κΈ°λ₯Ό κ³μ°νκ³ , μ΅λ ν¬κΈ°λ₯Ό workspace_size λ³μμ μ μ₯ν©λλ€.
μ΄ν, μλ‘μ΄ μ λ ₯ λ° μΆλ ₯ ν¬κΈ°λ₯Ό κ³μ°νκ³ , μ λ ₯ λ° μΆλ ₯ λ°°μ΄μ ν λΉν©λλ€.
λ§μ§λ§μΌλ‘, μμ 곡κ°μ ν¬κΈ°λ₯Ό μ‘°μ νκ³ , μμ 곡κ°μ ν λΉν©λλ€.
get_network_detection_layer
ν¨μ μ΄λ¦: get_network_detection_layer
μ λ ₯:
network *net (μ κ²½λ§ κ΅¬μ‘°μ²΄)
λμ:
μ£Όμ΄μ§ μ κ²½λ§μμ νμ§(Detection) λ μ΄μ΄λ₯Ό μ°Ύμ ν΄λΉ λ μ΄μ΄λ₯Ό λ°ννλ€.
νμ§ λ μ΄μ΄κ° μλ κ²½μ° μ€λ₯ λ©μμ§λ₯Ό μΆλ ₯νκ³ λΉ layer ꡬ쑰체λ₯Ό λ°ννλ€.
μ€λͺ :
μ΄ ν¨μλ YOLO(Object Detection) μκ³ λ¦¬μ¦μμ μ¬μ©λλ€.
YOLO μ κ²½λ§μμλ μΆλ ₯κ°μ μμ±νλ λ§μ§λ§ λ μ΄μ΄κ° νμ§ λ μ΄μ΄μ΄λ€.
μ΄ ν¨μλ μ κ²½λ§μ λ μ΄μ΄λ€μ λ°λ³΅νμ¬ DETECTION νμ μ λ μ΄μ΄λ₯Ό μ°Ύλλ€.
νμ§ λ μ΄μ΄λ₯Ό μ°ΎμΌλ©΄ ν΄λΉ λ μ΄μ΄λ₯Ό λ°ννκ³ , μ°Ύμ§ λͺ»νλ©΄ μ€λ₯ λ©μμ§λ₯Ό μΆλ ₯νκ³ λΉ layer ꡬ쑰체λ₯Ό λ°ννλ€.
get_network_image_layer
ν¨μ μ΄λ¦: get_network_image_layer
μ λ ₯:
network ꡬ쑰체 ν¬μΈν°
int ν λ³μ i
λμ:
μ£Όμ΄μ§ networkμμ iλ²μ§Έ λ μ΄μ΄μ μΆλ ₯ μ΄λ―Έμ§λ₯Ό κ°μ Έμ¨λ€. λ§μ½ ν΄λΉ λ μ΄μ΄μ μΆλ ₯ μ΄λ―Έμ§κ° μμΌλ©΄ λΉμ΄μλ μ΄λ―Έμ§λ₯Ό λ°ννλ€.
μ€λͺ :
μ£Όμ΄μ§ networkμμ iλ²μ§Έ λ μ΄μ΄λ₯Ό κ°μ Έμ¨λ€.
ν΄λΉ λ μ΄μ΄μ μΆλ ₯ μ΄λ―Έμ§κ° μ‘΄μ¬νλ©΄ ν΄λΉ μ΄λ―Έμ§λ₯Ό float_to_image ν¨μλ₯Ό μ¬μ©νμ¬ μμ±νλ€.
ν΄λΉ λ μ΄μ΄μ μΆλ ₯ μ΄λ―Έμ§κ° μμΌλ©΄ (out_w, out_h, out_cκ° 0) λΉμ΄μλ μ΄λ―Έμ§λ₯Ό λ°ννλ€.
get_network_image
ν¨μ μ΄λ¦: get_network_image
μ λ ₯:
network *net (λ€νΈμν¬ λͺ¨λΈ)
λμ:
λ€νΈμν¬ λͺ¨λΈμ μΆλ ₯ λ μ΄μ΄λ€ μ€μμ λ§μ§λ§ μΆλ ₯ λ μ΄μ΄λΆν° μμνμ¬ μΆλ ₯ μ΄λ―Έμ§λ₯Ό κ°μ Έμ΄
μ€λͺ :
YOLO μκ³ λ¦¬μ¦μμ μΆλ ₯ μ΄λ―Έμ§λ₯Ό κ°μ Έμ€κΈ° μν΄ μ¬μ©λλ ν¨μλ‘, λ€νΈμν¬ λͺ¨λΈμ μΆλ ₯ λ μ΄μ΄λ€ μ€μμ λ§μ§λ§ μΆλ ₯ λ μ΄μ΄λΆν° μμνμ¬ μΆλ ₯ μ΄λ―Έμ§λ₯Ό κ°μ Έμ€λ μν μ μννλ€.
κ°μ Έμ¨ μ΄λ―Έμ§λ image κ΅¬μ‘°μ²΄λ‘ λ°νλλ©°, λ§μ½ μΆλ ₯ μ΄λ―Έμ§κ° μ‘΄μ¬νμ§ μλλ€λ©΄ ν¬κΈ°κ° 0μΈ image κ΅¬μ‘°μ²΄κ° λ°νλλ€.
visualize_network
ν¨μ μ΄λ¦: visualize_network
μ λ ₯:
network ꡬ쑰체 ν¬μΈν°(net)
λμ:
λ€νΈμν¬μ κ° λ μ΄μ΄λ₯Ό μκ°ννμ¬ μΆλ ₯ν©λλ€.
CONVOLUTIONAL λ μ΄μ΄μΈ κ²½μ° visualize_convolutional_layer ν¨μλ₯Ό νΈμΆνμ¬ μκ°νν©λλ€.
μ€λͺ :
μ λ ₯μΌλ‘ λ€νΈμν¬ κ΅¬μ‘°μ²΄ ν¬μΈν°λ₯Ό λ°μ κ° λ μ΄μ΄λ₯Ό μκ°νν©λλ€.
μκ°νν κ²°κ³Όλ μ΄μ λ μ΄μ΄μ μΆλ ₯ μ΄λ―Έμ§λ₯Ό μ΄μ΄μ μΆλ ₯λ©λλ€.
λν, CONVOLUTIONAL λ μ΄μ΄μΈ κ²½μ° visualize_convolutional_layer ν¨μλ₯Ό νΈμΆνμ¬ ν΄λΉ λ μ΄μ΄λ₯Ό μκ°νν©λλ€.
κ° λ μ΄μ΄μ μ΄λ¦μ "Layer i"λ‘ μ§μ λλ©°, iλ ν΄λΉ λ μ΄μ΄μ μΈλ±μ€μ λλ€.
top_predictions
ν¨μ μ΄λ¦: top_predictions
μ λ ₯:
network *net (μ κ²½λ§ κ΅¬μ‘°μ²΄)
int k (μμ μμΈ‘κ°μ κ°μ)
int *index (μμ μμΈ‘κ°λ€μ μΈλ±μ€λ₯Ό μ μ₯ν λ°°μ΄ ν¬μΈν°)
λμ:
μ λ ₯μΌλ‘ λ€μ΄μ¨ μ κ²½λ§μ μΆλ ₯κ°μ κΈ°λ°μΌλ‘, μμ kκ°μ μμΈ‘κ°κ³Ό ν΄λΉ μμΈ‘κ°λ€μ μΈλ±μ€λ₯Ό κ³μ°νμ¬ index λ°°μ΄μ μ μ₯νλ€.
μ€λͺ :
top_k() ν¨μλ₯Ό νΈμΆνμ¬, μ κ²½λ§μ μΆλ ₯κ°μμ μμ kκ°μ κ°μ μ°Ύκ³ , ν΄λΉ κ°λ€μ μΈλ±μ€λ₯Ό index λ°°μ΄μ μ μ₯νλ€.
network_predict
ν¨μ μ΄λ¦: network_predict
μ λ ₯:
network *net: μ κ²½λ§μ κ°λ¦¬ν€λ ν¬μΈν°
float *input: μ λ ₯ λ°μ΄ν°λ₯Ό κ°λ¦¬ν€λ ν¬μΈν°
λμ:
orig λ³μμ netμ 볡μ¬
net->inputμ μ λ ₯ λ°μ΄ν°λ‘ μ€μ
net->truth, net->train, net->deltaλ₯Ό 0μΌλ‘ μ€μ
forward_network ν¨μλ₯Ό νΈμΆνμ¬ μμ ν μν
net->outputμ λ°ν
*netμ origλ‘ λλλ¦Ό
μ€λͺ :
μ£Όμ΄μ§ μ κ²½λ§ netκ³Ό μ λ ₯ λ°μ΄ν° inputμ μ΄μ©νμ¬ μμΈ‘μ μννλ ν¨μμ λλ€.
μ λ ₯ λ°μ΄ν°λ net->inputμ μ€μ λλ©°, forward_network ν¨μλ₯Ό νΈμΆνμ¬ μ κ²½λ§μ μμ νμν΅λλ€.
μ΅μ’ μΆλ ₯κ°μΈ net->outputμ λ°ννκ³ , μ κ²½λ§ netμ μλ μνλ‘ λλ립λλ€.
num_detections
ν¨μ μ΄λ¦: num_detections
μ λ ₯:
network *net (YOLO λλ Detection λ μ΄μ΄κ° ν¬ν¨λ λ€νΈμν¬)
float thresh (μκ³κ°)
λμ:
μ λ ₯λ λ€νΈμν¬μμ YOLO λ° Detection λ μ΄μ΄μμ μκ³κ°μ λλ κ²μΆ μλ₯Ό μ λλ€.
μ€λͺ :
μ λ ₯λ λ€νΈμν¬μ λͺ¨λ λ μ΄μ΄λ₯Ό νμΈνλ©΄μ YOLO λ μ΄μ΄μμ yolo_num_detections ν¨μλ₯Ό νΈμΆνμ¬ μκ³κ°μ λλ κ²μΆ μλ₯Ό μΈ‘μ νκ³ , DETECTION λλ REGION λ μ΄μ΄μ λλΉ, λμ΄ λ° μ±λ μ 보λ₯Ό κΈ°λ°μΌλ‘ μ΄ κ²μΆ μλ₯Ό κ³μ°ν©λλ€.
make_network_boxes
ν¨μ μ΄λ¦: make_network_boxes
μ λ ₯:
network *net : YOLO λ€νΈμν¬
float thresh : κ²μΆ μκ³κ°
int *num : κ²μΆλ λ°μ΄λ© λ°μ€ κ°μλ₯Ό μ μ₯ν ν¬μΈν° λ³μ
λμ:
YOLO λ€νΈμν¬μ μΆλ ₯μμ κ²μΆλ λ°μ΄λ© λ°μ€ κ°μλ₯Ό κ³μ°νμ¬ num λ³μμ μ μ₯νκ³ , κ²μΆλ λ°μ΄λ© λ°μ€λ₯Ό μ μ₯ν detection ꡬ쑰체 λ°°μ΄μ μμ±νκ³ λ°νν¨
μμ±λ detection ꡬ쑰체 λ°°μ΄μ κ° μμλ§λ€ ν΄λμ€λ³ νλ₯ (prob)κ³Ό λ§μ€ν¬(mask)λ₯Ό μν λ©λͺ¨λ¦¬λ₯Ό ν λΉν¨
μ€λͺ :
YOLO λ€νΈμν¬μ μΆλ ₯μμ κ²μΆλ λ°μ΄λ© λ°μ€ κ°μλ₯Ό κ³μ°νκΈ° μν΄ num_detections ν¨μλ₯Ό νΈμΆν¨
κ²μΆλ λ°μ΄λ© λ°μ€ κ°μμ ν΄λΉνλ ν¬κΈ°μ detection ꡬ쑰체 λ°°μ΄μ λμ μΌλ‘ ν λΉν¨
ν λΉλ detection ꡬ쑰체 λ°°μ΄μ κ° μμλ§λ€ ν΄λμ€λ³ νλ₯ (prob)μ μ μ₯ν float λ°°μ΄μ λμ μΌλ‘ ν λΉν¨
λ§μ½ YOLO λ μ΄μ΄μ coords κ°μ΄ 4λ³΄λ€ ν¬λ€λ©΄, κ° μμλ§λ€ λ§μ€ν¬(mask)λ₯Ό μ μ₯ν float λ°°μ΄λ λμ μΌλ‘ ν λΉν¨
μμ±λ detection ꡬ쑰체 λ°°μ΄μ λ°νν¨
fill_network_boxes
ν¨μ μ΄λ¦: fill_network_boxes
μ λ ₯:
network *net: YOLO, Region, Detection λ μ΄μ΄λ₯Ό κ°μ§κ³ μλ λ€νΈμν¬
int w: μ λ ₯ μ΄λ―Έμ§μ λλΉ
int h: μ λ ₯ μ΄λ―Έμ§μ λμ΄
float thresh: λ°μ€ νλ₯ μκ³κ°
float hier: YOLO λ μ΄μ΄μμ μ¬μ©νλ hierachical softmax μκ³κ°
int *map: μ΄λ―Έμ§μ λλΉμ λμ΄μ λ°λΌ μ μ μΈλ±μ€λ₯Ό κ³μ°νκΈ° μν μΈλ±μ€ λ§΅
int relative: YOLO λ μ΄μ΄μ κ²½μ° λ°μ€ μ’νλ₯Ό μλμ μΈ μ’νλ‘ κ³μ°ν μ§ μ¬λΆ
detection *dets: λ€νΈμν¬μμ μμΈ‘ν λ°μ€ μ 보λ₯Ό μ μ₯νλ detection ꡬ쑰체 λ°°μ΄
λμ:
λ€νΈμν¬μμ μμΈ‘ν λ°μ€ μ 보λ₯Ό detection ꡬ쑰체 λ°°μ΄μ μ μ₯νλ ν¨μλ‘, YOLO, Region, Detection λ μ΄μ΄λ₯Ό μ°¨λ‘λ‘ μννλ©΄μ κ° λ μ΄μ΄μμ μμΈ‘ν λ°μ€ μ 보λ₯Ό detection ꡬ쑰체 λ°°μ΄μ μ μ₯ν©λλ€.
YOLO λ μ΄μ΄λ get_yolo_detections ν¨μλ₯Ό μ¬μ©νμ¬ μμΈ‘ν λ°μ€ μ 보λ₯Ό, Region λ μ΄μ΄λ get_region_detections ν¨μλ₯Ό, Detection λ μ΄μ΄λ get_detection_detections ν¨μλ₯Ό μ¬μ©νμ¬ μμΈ‘ν λ°μ€ μ 보λ₯Ό detection ꡬ쑰체 λ°°μ΄μ μ μ₯ν©λλ€.
μ€λͺ :
get_yolo_detections: YOLO λ μ΄μ΄μμ μμΈ‘ν λ°μ€ μ 보λ₯Ό detection ꡬ쑰체 λ°°μ΄μ μ μ₯νλ ν¨μ
get_region_detections: Region λ μ΄μ΄μμ μμΈ‘ν λ°μ€ μ 보λ₯Ό detection ꡬ쑰체 λ°°μ΄μ μ μ₯νλ ν¨μ
get_detection_detections: Detection λ μ΄μ΄μμ μμΈ‘ν λ°μ€ μ 보λ₯Ό detection ꡬ쑰체 λ°°μ΄μ μ μ₯νλ ν¨μ
get_network_boxes
ν¨μ μ΄λ¦: get_network_boxes
μ λ ₯:
network *net: YOLO μ κ²½λ§
int w: μ λ ₯ μ΄λ―Έμ§μ λλΉ
int h: μ λ ₯ μ΄λ―Έμ§μ λμ΄
float thresh: κ°μ²΄ νμ§ μκ³κ°
float hier: YOLO κ³μΈ΅ κ° νμ΄λ¬ν€(threshold)
int *map: ν΄λμ€ λ§€ν
int relative: λ°μ€ μ’νλ₯Ό μλμ μΈ κ°μΌλ‘ κ°μ Έμ¬ μ§ μ¬λΆ
int *num: νμ§λ κ°μ²΄μ κ°μλ₯Ό μ μ₯ν ν¬μΈν°
λμ:
κ°μ²΄ νμ§ ν ν΄λΉ κ°μ²΄μ λν detection ꡬ쑰체 λ°°μ΄μ λ°ννλ€.
make_network_boxes ν¨μλ₯Ό ν΅ν΄ detection ꡬ쑰체 λ°°μ΄μ μμ±νκ³ , fill_network_boxes ν¨μλ₯Ό ν΅ν΄ κ°μ²΄ νμ§λ₯Ό μννλ€.
μ€λͺ :
YOLO μ κ²½λ§μμ κ°μ²΄ νμ§λ₯Ό μννκ³ , detection ꡬ쑰체 λ°°μ΄μ λ°ννλ ν¨μμ΄λ€.
μ λ ₯ μ΄λ―Έμ§μ ν¬κΈ°, νμ§ μκ³κ° λ±μ μΈμλ‘ λ°λλ€.
make_network_boxes ν¨μλ₯Ό νΈμΆνμ¬ detection ꡬ쑰체 λ°°μ΄μ ν λΉν ν, fill_network_boxes ν¨μλ₯Ό νΈμΆνμ¬ ν΄λΉ λ°°μ΄μ νμ§ κ²°κ³Όλ₯Ό μ±μ΄λ€.
νμ§λ κ°μ²΄μ κ°μλ num ν¬μΈν°λ₯Ό ν΅ν΄ λ°νλλ€.
free_detections
ν¨μ μ΄λ¦: free_detections
μ λ ₯:
dets: detection ꡬ쑰체 λ°°μ΄μ ν¬μΈν°
n: λ°°μ΄μ ν¬κΈ°
λμ:
detection ꡬ쑰체 λ°°μ΄κ³Ό κ·Έ μμ μλ λμ ν λΉλ λ°°μ΄λ€μ ν΄μ νλ€.
μ€λͺ :
detection ꡬ쑰체 λ°°μ΄μ κ°μ²΄ κ°μ§(object detection) μκ³ λ¦¬μ¦μμ μ»μ κ²°κ³Όλ¬Όμ λ΄κ³ μλ€.
μ΄ ν¨μλ μ΄λ¬ν detection ꡬ쑰체 λ°°μ΄κ³Ό κ·Έ μμ μλ νλ₯ (prob) λ°°μ΄κ³Ό λ§μ€ν¬(mask) λ°°μ΄μ ν΄μ νλ€.
μ΄λ λ©λͺ¨λ¦¬ λμ(memory leak)λ₯Ό λ°©μ§νκ³ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©νκΈ° μν¨μ΄λ€.
network_predict_image
ν¨μ μ΄λ¦: network_predict_image
μ λ ₯:
network *net: μμΈ‘ν λ€νΈμν¬ ν¬μΈν°
image im: μμΈ‘ν μ΄λ―Έμ§
λμ:
μ λ ₯ μ΄λ―Έμ§λ₯Ό μ§μ λ λ€νΈμν¬ μ λ ₯ ν¬κΈ°λ‘ μ‘°μ νλ letterbox_image ν¨μλ₯Ό νΈμΆνμ¬ μλ‘μ΄ μ΄λ―Έμ§ μμ±
λ€νΈμν¬ λ°°μΉ ν¬κΈ°λ₯Ό 1λ‘ μ€μ νλ set_batch_network ν¨μ νΈμΆ
network_predict ν¨μλ₯Ό νΈμΆνμ¬ μμΈ‘ μ€ν
μλ‘μ΄ μ΄λ―Έμ§λ₯Ό ν΄μ ν ν, κ²°κ³Ό μΆλ ₯ ν¬μΈν°λ₯Ό λ°ν
μ€λͺ :
μ λ ₯μΌλ‘ μ£Όμ΄μ§ μ΄λ―Έμ§λ₯Ό μμΈ‘ν λ€νΈμν¬μ μ λ ₯ ν¬κΈ°λ‘ λ§μΆκ³ , λ°°μΉ ν¬κΈ°λ₯Ό 1λ‘ μ€μ νμ¬ λ€νΈμν¬λ₯Ό μ€ννμ¬ μμΈ‘ κ²°κ³Όλ₯Ό μΆλ ₯νλ ν¨μμ λλ€.
μ΄ ν¨μλ μ΄λ―Έμ§λ₯Ό μ§μ μ λ ₯μΌλ‘ μ¬μ©νμ§ μκ³ , μ λ ₯ μ΄λ―Έμ§λ₯Ό μλ‘μ΄ μ΄λ―Έμ§λ‘ λ³ννμ¬ μ¬μ©ν©λλ€.
network_width, network_height
ν¨μ: network_width, network_height
μ λ ₯:
λ€νΈμν¬ κ΅¬μ‘°μ²΄ ν¬μΈν° (network *)
λμ:
λ€νΈμν¬μ μ λ ₯ μ΄λ―Έμ§ κ°λ‘ ν¬κΈ° (λ€νΈμν¬ w)λ₯Ό λ°νν©λλ€.
λ€νΈμν¬μ μ λ ₯ μ΄λ―Έμ§ μΈλ‘ ν¬κΈ° (λ€νΈμν¬ h)λ₯Ό λ°νν©λλ€.
μ€λͺ :
μ λ ₯μΌλ‘ λ°μ λ€νΈμν¬ κ΅¬μ‘°μ²΄ ν¬μΈν°λ₯Ό μ΄μ©ν΄ λ€νΈμν¬μ w κ°μ λ°νν©λλ€.
μ λ ₯μΌλ‘ λ°μ λ€νΈμν¬ κ΅¬μ‘°μ²΄ ν¬μΈν°λ₯Ό μ΄μ©ν΄ λ€νΈμν¬μ h κ°μ λ°νν©λλ€.
network_predict_data_multi
ν¨μ μ΄λ¦: network_predict_data_multi
μ λ ₯:
network *net: μμΈ‘ν μ κ²½λ§ κ΅¬μ‘°
data test: μμΈ‘ν λ°μ΄ν°μ
int n: μμΈ‘ν λ μ κ²½λ§μ λͺ λ² μ€νν κ²μΈμ§ μ§μ νλ λ³μ
λμ:
μμΈ‘ν λ°μ΄ν°μ μ λ°°μΉλ‘ λλμ΄ μ κ²½λ§μ μ λ ₯μΌλ‘ μ λ¬
μ λ ₯λ μ κ²½λ§μ nλ² μ€ννμ¬ μμΈ‘ κ°μ μΆμ
μΆμ ν μμΈ‘ κ°μ νκ· νμ¬ μ΅μ’ μμΈ‘ κ°μΌλ‘ λ°ν
μ€λͺ :
μ΄ ν¨μλ μ λ ₯λ λ°μ΄ν°μ μ λν μ κ²½λ§ μμΈ‘ κ°μ νκ· νμ¬ λ°ννλ ν¨μμ λλ€.
μ λ ₯λ λ°μ΄ν°μ μ νλ ¬(matrix) ννλ‘ μ£Όμ΄μ§λλ€.
μ΄λ, μ λ ₯λ λ°μ΄ν°μ μ΄ ν λ²μ μ²λ¦¬νκΈ°μ λ무 ν¬λ€λ©΄, λ°°μΉ(batch) λ¨μλ‘ λ°μ΄ν°μ μ λλμ΄ μ κ²½λ§μ μ λ ₯μΌλ‘ μ λ¬ν©λλ€.
μ΄ν, μ λ ₯λ μ κ²½λ§μ nλ² μ€ννμ¬ μμΈ‘ κ°μ μΆμ νκ³ , μΆμ ν μμΈ‘ κ°λ€μ νκ· νμ¬ μ΅μ’ μμΈ‘ κ°μ κ³μ°ν©λλ€.
μ΅μ’ μμΈ‘ κ°μ νλ ¬(matrix) ννλ‘ λ°νλ©λλ€.
network_predict_data
ν¨μ μ΄λ¦: network_predict_data
μ λ ₯:
network *net: μμΈ‘μ μ¬μ©λλ λ΄λ΄ λ€νΈμν¬
data test: μμΈ‘ν λ°μ΄ν°κ° ν¬ν¨λ data ꡬ쑰체
λμ:
testμ X λ°μ΄ν°λ₯Ό netμ batch ν¬κΈ°λ‘ λΆν νμ¬ μμΈ‘ μν
λͺ¨λ μμΈ‘ κ²°κ³Όλ₯Ό ν λ²μ λ°ν
μ€λͺ :
μ λ ₯μΌλ‘ μ£Όμ΄μ§ λ€νΈμν¬(net)μ λ°μ΄ν°(test)λ₯Ό μ¬μ©νμ¬ μμΈ‘(prediction) μν
test.X.rowsλ λ°μ΄ν°μ μ΄ ν(row) μ
net->batchλ 미리 μ§μ λ batch ν¬κΈ°
Xλ test λ°μ΄ν°μ μΌλΆλ₯Ό μ μ₯νλ ν¬μΈν°λ‘, floatνμΌλ‘ μ΄κΈ°νλ¨
for 루νλ₯Ό μ¬μ©νμ¬ test λ°μ΄ν°λ₯Ό batch ν¬κΈ°λ‘ λΆν νκ³ , Xμ μ μ₯
network_predict ν¨μλ₯Ό μ¬μ©νμ¬ Xλ₯Ό μμΈ‘νκ³ , κ²°κ³Όλ₯Ό outμ μ μ₯
pred ꡬ쑰체μ μμΈ‘ κ²°κ³Όλ₯Ό μ μ₯νκ³ , λ°ν
pred ꡬ쑰체λ νλ ¬(matrix) ꡬ쑰체μ΄λ©°, μμΈ‘ κ²°κ³Όλ₯Ό λ΄λ 2μ°¨μ λ°°μ΄μ κ°μ§
pred.vals[i][j]λ iν jμ΄μ μμΈ‘ κ²°κ³Όμ ν΄λΉν¨
λ©λͺ¨λ¦¬λ₯Ό ν΄μ νκ³ , pred ꡬ쑰체λ₯Ό λ°ν
print_network
ν¨μ μ΄λ¦: print_network
μ λ ₯:
network ꡬ쑰체 ν¬μΈν°(net)
λμ:
λ€νΈμν¬μ κ° λ μ΄μ΄μ μΆλ ₯ νκ· κ³Ό λΆμ°μ κ³μ°νκ³ , κ° λ μ΄μ΄μ μΆλ ₯ κ°κ³Ό ν¨κ» μΆλ ₯νμ¬ λ€νΈμν¬μ μΆλ ₯ μνλ₯Ό λλ²κΉ μ©μΌλ‘ μΆλ ₯νλ€.
μ€λͺ :
κ° λ μ΄μ΄μ μΆλ ₯ νκ· κ³Ό λΆμ°μ κ³μ°νλ€.
κ° λ μ΄μ΄μ μΆλ ₯ κ°μ μΆλ ₯νλ€. μΆλ ₯ κ°μ΄ 100κ°λ₯Ό λμΌλ©΄ μ²μ 100κ°μ λ§μ§λ§ κ°λ§ μΆλ ₯νλ€.
λλ²κΉ μ 보λ₯Ό νμ€ μλ¬(stderr)λ‘ μΆλ ₯νλ€.
compare_networks
ν¨μ μ΄λ¦: compare_networks
μ λ ₯:
network *n1: λΉκ΅ν 첫 λ²μ§Έ μ κ²½λ§
network *n2: λΉκ΅ν λ λ²μ§Έ μ κ²½λ§
data test: λΉκ΅ν λ°μ΄ν°μ
λμ:
λ κ°μ μ κ²½λ§ λͺ¨λΈ n1κ³Ό n2λ₯Ό ν΅ν΄ μ£Όμ΄μ§ λ°μ΄ν°μ testλ₯Ό μμΈ‘νκ³ , μμΈ‘ κ²°κ³Όλ₯Ό λΉκ΅νμ¬ μ€λΆλ₯μ¨μ κ³μ°νλ€.
μ΄λ₯Ό μν΄, λ λͺ¨λΈμ΄ μμΈ‘ν κ²°κ³Όλ₯Ό ν λλ‘ 4λΆν ν(confusion matrix)λ₯Ό ꡬνκ³ , κ°κ°μ κ°μ λ°λΌ μ€λΆλ₯μ¨μ κ³μ°νλ€.
μ€λͺ :
a,b,c,d: 4λΆν νμμ κ°κ° μ€λΆλ₯λ μνμ κ°μ
truth: μ€μ ν΄λμ€ λ μ΄λΈ
p1: 첫 λ²μ§Έ μ κ²½λ§ n1μ μμΈ‘ κ²°κ³Ό ν΄λμ€ λ μ΄λΈ
p2: λ λ²μ§Έ μ κ²½λ§ n2μ μμΈ‘ κ²°κ³Ό ν΄λμ€ λ μ΄λΈ
num: μ€λΆλ₯λ μν μμ μ°¨μ΄μ λν μ κ³±
den: μ€λΆλ₯λ μν μμ ν©
κ²°κ³Όλ‘λ 4λΆν νμ μ€λΆλ₯μ¨μ΄ μΆλ ₯λλ€.
network_accuracy
ν¨μ μ΄λ¦: network_accuracy
μ λ ₯:
network *net: μ κ²½λ§ λͺ¨λΈ ν¬μΈν°
data d: ν μ€νΈ λ°μ΄ν°
λμ:
μ λ ₯λ μ κ²½λ§ λͺ¨λΈμ μ¬μ©νμ¬ ν μ€νΈ λ°μ΄ν°μ μμΈ‘ κ²°κ³Όλ₯Ό ꡬνκ³ , μ€μ λ μ΄λΈκ³Ό λΉκ΅νμ¬ μ νλλ₯Ό κ³μ°ν©λλ€.
μ€λͺ :
matrix_topk_accuracy ν¨μλ₯Ό μ¬μ©νμ¬ κ³μ°λ μ νλλ₯Ό λ°νν©λλ€.
guess νλ ¬μ ν¨μ λ΄λΆμμ μμ±λκ³ , λ°νλκΈ° μ μ λ©λͺ¨λ¦¬κ° ν΄μ λ©λλ€.
network_accuracies
ν¨μ μ΄λ¦: network_accuracies
μ λ ₯:
network *net : νκ°ν μ κ²½λ§
data d : νκ°ν λ°μ΄ν°
int n : μμ nκ° μμΈ‘μ μ νλλ₯Ό κ³μ° (1 μ΄μμ μ μ)
λμ:
μ λ ₯λ μ κ²½λ§κ³Ό λ°μ΄ν°λ₯Ό μ¬μ©νμ¬ μμΈ‘μ μννκ³ , μμ 1κ°μ μμ nκ° μμΈ‘μ μ νλλ₯Ό κ³μ°
κ³μ°λ μ νλλ₯Ό λ°°μ΄λ‘ μ μ₯νκ³ , μ΄λ₯Ό λ°ν
λ°νλ λ°°μ΄μ 첫 λ²μ§Έ μμλ μμ 1κ° μμΈ‘μ μ νλ, λ λ²μ§Έ μμλ μμ nκ° μμΈ‘μ μ νλ
μ€λͺ :
μ λ ₯λ λ°μ΄ν°λ‘ μ λ ₯λ μ κ²½λ§μ μμΈ‘μ μννκ³ , μμ 1κ°μ μμ nκ° μμΈ‘μ μ νλλ₯Ό κ³μ°νλ ν¨μμ λλ€.
κ³μ°λ μ νλλ μ μ μΌλ‘ μ μΈλ λ°°μ΄μ μ μ₯λλ©°, μ΄ λ°°μ΄μ΄ λ°νλ©λλ€.
λ°°μ΄μ 첫 λ²μ§Έ μμλ μμ 1κ° μμΈ‘μ μ νλ, λ λ²μ§Έ μμλ μμ nκ° μμΈ‘μ μ νλμ λλ€.
ν¨μ λ΄λΆμμλ network_predict_data ν¨μλ₯Ό μ¬μ©νμ¬ μ λ ₯λ λ°μ΄ν°μ μμΈ‘ κ²°κ³Όλ₯Ό κ³μ°νκ³ , κ³μ°λ κ²°κ³Όλ₯Ό matrix_topk_accuracy ν¨μλ₯Ό μ¬μ©νμ¬ μ νλλ₯Ό κ³μ°ν©λλ€. κ³μ°λ κ²°κ³Όλ λ¨Όμ μ μ μΌλ‘ μ μΈλ λ°°μ΄μ μ μ₯λλ©°, μ΄ λ°°μ΄μ΄ λ°νλ©λλ€.
get_network_output_layer
ν¨μ μ΄λ¦: get_network_output_layer
μ λ ₯:
network *net (μ κ²½λ§ ν¬μΈν°)
λμ:
μ κ²½λ§μ μΆλ ₯ λ μ΄μ΄λ₯Ό μ°Ύμ ν΄λΉ λ μ΄μ΄λ₯Ό λ°νν©λλ€. μΆλ ₯ λ μ΄μ΄λ COST λ μ΄μ΄κ° μλ λ§μ§λ§ λ μ΄μ΄μ λλ€.
μ€λͺ :
net: μ κ²½λ§ ν¬μΈν°
i: λ°λ³΅λ¬Έμ μν μ μ λ³μ
λ°νκ°: μΆλ ₯ λ μ΄μ΄ (layer νμ )
network_accuracy_multi
ν¨μ μ΄λ¦: network_accuracy_multi
μ λ ₯:
network *net (μ κ²½λ§ κ΅¬μ‘°μ²΄ ν¬μΈν°)
data d (ν μ€νΈ λ°μ΄ν°)
int n (ν΄λμ€ μ)
λμ:
μ λ ₯λ ν μ€νΈ λ°μ΄ν° dμ μ κ²½λ§ netλ₯Ό μ΄μ©νμ¬ nκ°μ ν΄λμ€ μ€ κ°μ₯ λμ μμΈ‘κ°μ κ°λ ν΄λμ€λ₯Ό μμΈ‘νκ³ , μ΄λ₯Ό μ€μ ν΄λμ€μ λΉκ΅νμ¬ μ νλλ₯Ό κ³μ°νλ€.
μ€λͺ :
μ΄ ν¨μλ λ©ν° ν΄λμ€ λΆλ₯ λ¬Έμ μμ μ κ²½λ§μ μ νλλ₯Ό κ³μ°νλ λ° μ¬μ©λλ€.
μ λ ₯λ ν μ€νΈ λ°μ΄ν°μ μ κ²½λ§μ μ΄μ©νμ¬ nκ°μ ν΄λμ€ μ€ κ°μ₯ λμ μμΈ‘κ°μ κ°λ ν΄λμ€λ₯Ό μμΈ‘νκ³ , μ΄λ₯Ό μ€μ ν΄λμ€μ λΉκ΅νμ¬ μ νλλ₯Ό κ³μ°νλ€.
μ΄ λ, matrix_topk_accuracy ν¨μλ₯Ό μ΄μ©νμ¬ μ νλλ₯Ό κ³μ°νλ€.
free_network
ν¨μ μ΄λ¦: free_network
μ λ ₯:
network ꡬ쑰체 ν¬μΈν° (network *)
λμ:
μ£Όμ΄μ§ network ꡬ쑰체μ κ·Έ μμ λͺ¨λ λ μ΄μ΄, μ λ ₯ λ°μ΄ν°, μ λ΅ λ°μ΄ν° λ±μ ν΄μ (free)ν©λλ€.
μ€λͺ :
μ΄ ν¨μλ deep learning λͺ¨λΈμ λ§λλ λ° μ¬μ©λλ network ꡬ쑰체μ κ·Έ μμ ν¬ν¨λ λ μ΄μ΄λ€μ ν΄μ νλ ν¨μμ λλ€.
μ΄ ν¨μλ λͺ¨λ λ μ΄μ΄, μ λ ₯ λ°μ΄ν°, μ λ΅ λ°μ΄ν° λ±μ λ©λͺ¨λ¦¬μμ ν΄μ νλ©°, μ΄λ₯Ό ν΅ν΄ λ©λͺ¨λ¦¬ λμ(memory leak)λ₯Ό λ°©μ§ν μ μμ΅λλ€.
μ΄ ν¨μκ° νΈμΆλλ©΄, ν΄λΉ λ€νΈμν¬μ κ΄λ ¨λ λͺ¨λ μμμ ν΄μ νλ―λ‘, λ μ΄μ ν΄λΉ λ€νΈμν¬λ₯Ό μ¬μ©ν μ μκ² λ©λλ€.
network_output_layer
ν¨μ μ΄λ¦: network_output_layer
μ λ ₯:
network ꡬ쑰체 ν¬μΈν° (net)
λμ:
ν΄λΉ λ€νΈμν¬ κ΅¬μ‘°μ²΄μ λ§μ§λ§ λ μ΄μ΄λΆν° μμλλ‘ νμνλ©°, COST λ μ΄μ΄λ₯Ό λ§λ λκΉμ§ νμμ λ°λ³΅νκ³ COST λ μ΄μ΄λ₯Ό μ°ΎμΌλ©΄ ν΄λΉ λ μ΄μ΄λ₯Ό λ°νν¨.
μ€λͺ :
λ₯λ¬λ λͺ¨λΈμ μΆλ ₯κ°μ λ΄κ³ μλ λ μ΄μ΄λ₯Ό λ°ννλ ν¨μμ λλ€.
λ€νΈμν¬ κ΅¬μ‘°μ²΄μμ λ§μ§λ§ λ μ΄μ΄λΆν° μμμΌλ‘ νμνλ©°, COST λ μ΄μ΄λ₯Ό λ§λ λκΉμ§ νμν©λλ€.
COST λ μ΄μ΄λ μ κ²½λ§ λͺ¨λΈμμ λ§μ§λ§ λ μ΄μ΄λ‘ μ¬μ©λλ©°, μ΄μ λ μ΄μ΄μ μΆλ ₯κ°μ μ λ ₯μΌλ‘ λ°μ μμ€ ν¨μ κ°μ κ³μ°ν©λλ€.
λ°λΌμ COST λ μ΄μ΄λ λͺ¨λΈμ μΆλ ₯κ°μ λ΄κ³ μμ΅λλ€. COST λ μ΄μ΄λ₯Ό μ°ΎμΌλ©΄ ν΄λΉ λ μ΄μ΄λ₯Ό λ°νν©λλ€.
network_inputs
ν¨μ μ΄λ¦: network_inputs
μ λ ₯:
network *net (μ κ²½λ§ κ΅¬μ‘°μ²΄)
λμ:
μ£Όμ΄μ§ μ κ²½λ§μ 첫 λ²μ§Έ λ μ΄μ΄μ μ λ ₯ μλ₯Ό λ°νν©λλ€.
μ€λͺ :
μ΄ ν¨μλ μ£Όμ΄μ§ μ κ²½λ§μ 첫 λ²μ§Έ λ μ΄μ΄μ μ λ ₯ μλ₯Ό λ°νν©λλ€.
첫 λ²μ§Έ λ μ΄μ΄λ μ λ ₯ λ μ΄μ΄μ΄λ―λ‘ μ λ ₯ μλ μ λ ₯ μ΄λ―Έμ§μ ν¬κΈ°λ₯Ό κ²°μ νλ κ°μ λλ€.
network_outputs
ν¨μ μ΄λ¦: network_outputs
μ λ ₯:
network *net (Neural Network λͺ¨λΈ)
λμ:
Neural Networkμ μΆλ ₯ λ μ΄μ΄μ μΆλ ₯κ° κ°μλ₯Ό λ°ννλ€.
μ€λͺ :
μ΄ ν¨μλ Neural Network λͺ¨λΈμ μΆλ ₯ λ μ΄μ΄μ μΆλ ₯κ° κ°μλ₯Ό λ°ννλ ν¨μμ΄λ€.
λ°νλλ κ°μ int νμ μ΄λ€.
network_output
ν¨μ μ΄λ¦: network_output
μ λ ₯:
network ꡬ쑰체 ν¬μΈν° (νλ ¨λ μ κ²½λ§ λͺ¨λΈ)
λμ:
νλ ¨λ μ κ²½λ§ λͺ¨λΈμ μ΅μ’ μΆλ ₯μ λ°ννλ ν¨μ.
λ΄λΆμ μΌλ‘ network_output_layer ν¨μλ₯Ό νΈμΆνμ¬ μΆλ ₯ λ μ΄μ΄μ μΆλ ₯μ λ°νν¨.
μ€λͺ :
μ λ ₯λ λ€νΈμν¬ λͺ¨λΈμ λν΄, μ΅μ’ μΆλ ₯μ λ΄μ λ°°μ΄μ ν¬μΈν°λ₯Ό λ°ννλ ν¨μμ λλ€.
μ΄ ν¨μλ λ΄λΆμ μΌλ‘ network_output_layer ν¨μλ₯Ό νΈμΆνμ¬ μΆλ ₯ λ μ΄μ΄μ μΆλ ₯μ λ°νν©λλ€.
Last updated
Was this helpful?