layer
// darknet.h
typedef enum {
CONVOLUTIONAL,
DECONVOLUTIONAL,
CONNECTED,
MAXPOOL,
SOFTMAX,
DETECTION,
DROPOUT,
CROP,
ROUTE,
COST,
NORMALIZATION,
AVGPOOL,
LOCAL,
SHORTCUT,
ACTIVE,
RNN,
GRU,
LSTM,
CRNN,
BATCHNORM,
NETWORK,
XNOR,
REGION,
YOLO,
ISEG,
REORG,
UPSAMPLE,
LOGXENT,
L2NORM,
BLANK
} LAYER_TYPE;
์ด ์ฝ๋๋ ์ด๊ฑฐํ(enum)์ผ๋ก LAYER_TYPE์ด๋ผ๋ ํ์ ์ ์ ์ํ๊ณ ์์ต๋๋ค. LAYER_TYPE์ ๋ค์ํ ๋ ์ด์ด ์ ํ์ ์ ์ํ๊ณ ์์ผ๋ฉฐ, ๊ฐ ๋ ์ด์ด ์ ํ์ ํด๋นํ๋ ์ด๋ฆ์ผ๋ก ์ ์๋์ด ์์ต๋๋ค.
๋ค์์ ๊ฐ ๋ ์ด์ด ์ ํ๊ณผ ๊ทธ์ ํด๋นํ๋ ์ด๋ฆ์ ๋๋ค.
CONVOLUTIONAL: ์ปจ๋ณผ๋ฃจ์ (Convolution) ๋ ์ด์ด
DECONVOLUTIONAL: ๋์ปจ๋ณผ๋ฃจ์ (Deconvolution) ๋ ์ด์ด
CONNECTED: ์์ ์ฐ๊ฒฐ(Fully Connected) ๋ ์ด์ด
MAXPOOL: ๋งฅ์ค ํ๋ง(Max Pooling) ๋ ์ด์ด
SOFTMAX: ์ํํธ๋งฅ์ค(Softmax) ๋ ์ด์ด
DETECTION: ๊ฐ์ฒด ๊ฒ์ถ(Detection) ๋ ์ด์ด
DROPOUT: ๋๋กญ์์(Dropout) ๋ ์ด์ด
CROP: ํฌ๋กญ(Crop) ๋ ์ด์ด
ROUTE: ๋ฃจํธ(Route) ๋ ์ด์ด
COST: ๋น์ฉ(Cost) ๋ ์ด์ด
NORMALIZATION: ์ ๊ทํ(Normalization) ๋ ์ด์ด
AVGPOOL: ํ๊ท ํ๋ง(Average Pooling) ๋ ์ด์ด
LOCAL: ๋ก์ปฌ(Local) ๋ ์ด์ด
SHORTCUT: ์์ปท(Shortcut) ๋ ์ด์ด
ACTIVE: ํ์ฑํ(Activation) ๋ ์ด์ด
RNN: ์ํ ์ ๊ฒฝ๋ง(Recurrent Neural Network) ๋ ์ด์ด
GRU: ๊ฒ์ดํธ ์ํ ์ ๋(Gated Recurrent Unit) ๋ ์ด์ด
LSTM: ์ฅ๋จ๊ธฐ ๋ฉ๋ชจ๋ฆฌ(Long Short-Term Memory) ๋ ์ด์ด
CRNN: ํฉ์ฑ๊ณฑ ์ํ ์ ๊ฒฝ๋ง(Convolutional Recurrent Neural Network) ๋ ์ด์ด
BATCHNORM: ๋ฐฐ์น ์ ๊ทํ(Batch Normalization) ๋ ์ด์ด
NETWORK: ๋คํธ์ํฌ(Network) ๋ ์ด์ด
XNOR: ์ด์งํ(Binary) ๋ ์ด์ด
REGION: ์ง์ญ(Region) ๋ ์ด์ด
YOLO: YOLO(You Only Look Once) ๋ ์ด์ด
ISEG: ์ธ์คํด์ค ๋ถํ (Instance Segmentation) ๋ ์ด์ด
REORG: ๋ฆฌ์ค๊ทธ(Reorg) ๋ ์ด์ด
UPSAMPLE: ์ ์ํ(Upsample) ๋ ์ด์ด
LOGXENT: ๋ก๊ทธ-์ํธ๋กํผ(Log-entropy) ๋ ์ด์ด
L2NORM: L2 ๋ ธ๋ฆ(L2 Norm) ๋ ์ด์ด
BLANK: ๋น(Blank) ๋ ์ด์ด
์ด ํจ์๋ LAYER_TYPE์ด๋ผ๋ ์ด๊ฑฐํ์ ์ ์ํ ๊ฒ์ด๋ฏ๋ก ์ ๋ ฅ๊ฐ๊ณผ ๋์์ ์์ต๋๋ค.
free_layer
void free_layer(layer l)
{
if(l.type == DROPOUT){
if(l.rand) free(l.rand);
return;
}
if(l.cweights) free(l.cweights);
if(l.indexes) free(l.indexes);
if(l.input_layers) free(l.input_layers);
if(l.input_sizes) free(l.input_sizes);
if(l.map) free(l.map);
if(l.rand) free(l.rand);
if(l.cost) free(l.cost);
if(l.state) free(l.state);
if(l.prev_state) free(l.prev_state);
if(l.forgot_state) free(l.forgot_state);
if(l.forgot_delta) free(l.forgot_delta);
if(l.state_delta) free(l.state_delta);
if(l.concat) free(l.concat);
if(l.concat_delta) free(l.concat_delta);
if(l.binary_weights) free(l.binary_weights);
if(l.biases) free(l.biases);
if(l.bias_updates) free(l.bias_updates);
if(l.scales) free(l.scales);
if(l.scale_updates) free(l.scale_updates);
if(l.weights) free(l.weights);
if(l.weight_updates) free(l.weight_updates);
if(l.delta) free(l.delta);
if(l.output) free(l.output);
if(l.squared) free(l.squared);
if(l.norms) free(l.norms);
if(l.spatial_mean) free(l.spatial_mean);
if(l.mean) free(l.mean);
if(l.variance) free(l.variance);
if(l.mean_delta) free(l.mean_delta);
if(l.variance_delta) free(l.variance_delta);
if(l.rolling_mean) free(l.rolling_mean);
if(l.rolling_variance) free(l.rolling_variance);
if(l.x) free(l.x);
if(l.x_norm) free(l.x_norm);
if(l.m) free(l.m);
if(l.v) free(l.v);
if(l.z_cpu) free(l.z_cpu);
if(l.r_cpu) free(l.r_cpu);
if(l.h_cpu) free(l.h_cpu);
if(l.binary_input) free(l.binary_input);
}
ํจ์ ์ด๋ฆ: free_layer
์ ๋ ฅ:
layer ๊ตฌ์กฐ์ฒด (layer ํ์ ํฌ์ธํฐ ๋ณ์ l)
๋์:
layer ๊ตฌ์กฐ์ฒด์์ ๋์ ์ผ๋ก ํ ๋นํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ํจ์.
DROPOUT ๋ ์ด์ด์ธ ๊ฒฝ์ฐ l.rand ๋ณ์๋ง ํด์ ํ๊ณ ํจ์๋ฅผ ์ข ๋ฃํ๋ค.
์ค๋ช :
์ด ํจ์๋ ์ ๋ ฅ์ผ๋ก ์ ๋ฌ๋ layer ๊ตฌ์กฐ์ฒด์์ ๋์ ์ผ๋ก ํ ๋น๋ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค.
ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ ์๋ฌด๋ฐ ๋์๋ ํ์ง ์๋๋ค. DROPOUT ๋ ์ด์ด์ธ ๊ฒฝ์ฐ l.rand ๋ณ์๋ง ํด์ ํ๊ณ ํจ์๋ฅผ ์ข ๋ฃํ๋ค.
๋๋จธ์ง ๋ ์ด์ด์ ๊ฒฝ์ฐ, layer ๊ตฌ์กฐ์ฒด์์ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ณ์๋ฅผ ์ํํ๋ฉฐ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค.
๊ฐ ๋ณ์์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ malloc ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ ๋น๋ ๊ฒ๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
Last updated
Was this helpful?