classifier
#include "darknet.h"
#include <sys/time.h>
#include <assert.h>get_regression_values
float *get_regression_values(char **labels, int n)
{
float *v = calloc(n, sizeof(float));
int i;
for(i = 0; i < n; ++i){
char *p = strchr(labels[i], ' ');
*p = 0;
v[i] = atof(p+1);
}
return v;
}ํจ์ ์ด๋ฆ: get_regression_values
์ ๋ ฅ:
char **labels (๋ฌธ์์ด ๋ฐฐ์ด ํฌ์ธํฐ), int n (๋ผ๋ฒจ ๊ฐ์)
๋์:
๋ผ๋ฒจ ๋ฐฐ์ด์์ ์ซ์ ๊ฐ๋ง ์ถ์ถํ์ฌ float ํ์์ผ๋ก ๋ฐํํ๋ ํจ์์ ๋๋ค.
์ค๋ช :
๋ผ๋ฒจ ๋ฐฐ์ด์์ ์ซ์ ๊ฐ์ ์ถ์ถํ๋ ๊ณผ์ ์์ ๋ฌธ์์ด ์ฒ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค.
๋ผ๋ฒจ์ ๊ฐ์ ์ซ์์ ๊ณต๋ฐฑ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ด ํจ์๋ ๋ฌธ์์ด์์ ๊ณต๋ฐฑ์ ์ฐพ์์ ํด๋น ์์น๋ถํฐ ์ซ์ ๊ฐ์ผ๋ก ํ์ฑํฉ๋๋ค.
ํ์ฑ๋ ๊ฐ์ float ํ์์ผ๋ก ๋ฐฐ์ด์ ์ ์ฅ๋๊ณ , ์ต์ข ์ ์ผ๋ก ๋ฐฐ์ด ํฌ์ธํฐ๊ฐ ๋ฐํ๋ฉ๋๋ค.
train_classifier
ํจ์ ์ด๋ฆ: train_classifier
์ ๋ ฅ:
datacfg: char ํฌ์ธํฐ, ๋ฐ์ดํฐ ์ค์ ํ์ผ ๊ฒฝ๋ก
cfgfile: char ํฌ์ธํฐ, ๋ชจ๋ธ ์ค์ ํ์ผ ๊ฒฝ๋ก
weightfile: char ํฌ์ธํฐ, ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
gpus: int ํฌ์ธํฐ, ์ฌ์ฉํ GPU ๋ฒํธ ๋ฐฐ์ด
ngpus: int, ์ฌ์ฉํ GPU ๊ฐ์
clear: int, ๋ชจ๋ธ์ clearํ ์ง ์ฌ๋ถ (0์ด๋ฉด clear ์ ํจ, 1์ด๋ฉด clear)
๋์:
์ฃผ์ด์ง ๋ฐ์ดํฐ์ ๋ชจ๋ธ ์ค์ ์ผ๋ก ๋ถ๋ฅ๊ธฐ๋ฅผ ํ์ต์ํค๋ ํจ์์ ๋๋ค. ํ์ต๋ ๋ชจ๋ธ ๊ฐ์ค์น๋ ์ง์ ๋ ๊ฒฝ๋ก์ ์ ์ฅ๋ฉ๋๋ค.
์ค๋ช :
ํจ์๋ void๋ฅผ ๋ฐํํฉ๋๋ค.
ํจ์ ๋ด๋ถ์์๋ ์ฌ๋ฌ ๊ฐ์ ์ง์ญ ๋ณ์๋ค๊ณผ ํฌ์ธํฐ๋ค์ ์ ์ธํ๊ณ ์ด๊ธฐํํฉ๋๋ค.
ํจ์์ ์คํ ์ค๊ฐ์๋ ๋ชจ๋ธ์ input ์ด๋ฏธ์ง๋ฅผ resizeํ๋ ์์ ์ด ์ด๋ฃจ์ด์ง๋๋ค.
ํ์ต ๊ณผ์ ์์๋ ์ง์ ๋ ๋ฐ์ดํฐ์ ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ์ต์ํค๋ฉฐ, ๋งค iteration๋ง๋ค loss ๊ฐ์ ๊ณ์ฐํฉ๋๋ค.
๋งค 1000๋ฒ iteration๋ง๋ค ํ์ต๋ ๋ชจ๋ธ ๊ฐ์ค์น๋ฅผ ์ ์ฅํฉ๋๋ค.
๋ชจ๋ iteration์ด ์๋ฃ๋๋ฉด ํ์ต๋ ๋ชจ๋ธ ๊ฐ์ค์น๋ฅผ ์ ์ฅํฉ๋๋ค.
ํจ์ ์คํ ์ค๊ฐ์๋ ๋ง์ print ๋ฌธ์ด ์กด์ฌํ์ฌ, ํ์ต ๊ณผ์ ์์ ์ผ์ด๋๋ ์ฌ๋ฌ ์ผ๋ค์ ์ถ์ ํ๊ธฐ ์ฝ๊ฒ ํฉ๋๋ค.
validate_classifier_crop
ํจ์ ์ด๋ฆ: validate_classifier_crop
์ ๋ ฅ:
datacfg: ๋ฐ์ดํฐ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ํฌ์ธํฐ
filename: ํ์ต๋ ๋คํธ์ํฌ ๋ชจ๋ธ ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ํฌ์ธํฐ
weightfile: ํ์ต๋ ๋คํธ์ํฌ ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ํฌ์ธํฐ
๋์:
์ฃผ์ด์ง ํ์ต๋ ๋คํธ์ํฌ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ๋ถ๋ฅ๊ธฐ๋ฅผ ๊ฒ์ฆํ๋ ํจ์์ ๋๋ค. ํจ์๋ ์ฃผ์ด์ง datacfg ํ์ผ์ ์ฝ์ด ๋ฐ์ดํฐ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๋ผ๋ฒจ ๋ฆฌ์คํธ ํ์ผ ๊ฒฝ๋ก, ๊ฒ์ฆ ๋ฐ์ดํฐ ๋ฆฌ์คํธ ํ์ผ ๊ฒฝ๋ก, ํด๋์ค ์, topk ๋ฑ์ ์ค์ ํฉ๋๋ค. ๊ฒ์ฆ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๋ฏธ๋ ๋ฐฐ์น๋ก ๋๋์ด์ ๊ฒ์ฆ์ ์ํํ๋ฉฐ, ๊ฐ ๋ฏธ๋ ๋ฐฐ์น๋ณ๋ก ์ ํ๋๋ฅผ ์ธก์ ํ๊ณ ํ๊ท ์ ํ๋์ ํ๊ท topk๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ YOLO (You Only Look Once) ๋ฅ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํ์ฒด์ธ Darknet์์ ์ฌ์ฉ๋๋ ํจ์์ ๋๋ค. Darknet์ ์ด๋ฏธ์ง ๋ถ๋ฅ, ๊ฐ์ฒด ๊ฒ์ถ ๋ฑ์ ์์ ์ ์ํํ๋ ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ์ ๋๋ค.
์ด ํจ์๋ ๊ฒ์ฆ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ํ์ต๋ ๋คํธ์ํฌ ๋ชจ๋ธ์ ์ ํ๋๋ฅผ ์ธก์ ํฉ๋๋ค. datacfg๋ ๋ฐ์ดํฐ ๊ตฌ์ฑ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ, filename์ ํ์ต๋ ๋คํธ์ํฌ ๋ชจ๋ธ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ, weightfile์ ํ์ต๋ ๋คํธ์ํฌ ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ ๋๋ค. ์ด ํจ์์์๋ ํด๋น ๊ฒฝ๋ก์ ์๋ ๋ชจ๋ธ๊ณผ ๊ฐ์ค์น๋ฅผ ๋ถ๋ฌ์์ ์ฌ์ฉํฉ๋๋ค.
ํจ์๋ ๊ฒ์ฆ์ ํ์ํ ๋ฐ์ดํฐ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ์ฝ์ด๋ค์ ๋๋ค. ์ด ์ ๋ณด๋ options๋ผ๋ ๋ฆฌ์คํธ์ ์ ์ฅ๋๋ฉฐ, ์ฌ๊ธฐ์๋ ๋ผ๋ฒจ ๋ฆฌ์คํธ ํ์ผ ๊ฒฝ๋ก, ๊ฒ์ฆ ๋ฐ์ดํฐ ๋ฆฌ์คํธ ํ์ผ ๊ฒฝ๋ก, ํด๋์ค ์, topk ๋ฑ์ด ์ ์ฅ๋ฉ๋๋ค.
๊ฒ์ฆ ๋ฐ์ดํฐ๋ ์ฌ๋ฌ ๊ฐ์ ๋ฏธ๋ ๋ฐฐ์น๋ก ๋๋์ด์ ๊ฒ์ฆ์ ์ํํฉ๋๋ค. splits๋ ๋ฏธ๋ ๋ฐฐ์น์ ์๋ฅผ ๋ํ๋ด๋ฉฐ, plist ๋ฆฌ์คํธ์์ ๊ฒ์ฆ ๋ฐ์ดํฐ์ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ธ์์ paths ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค. ๊ฐ ๋ฏธ๋ ๋ฐฐ์น๋ณ๋ก ์ ํ๋๋ฅผ ์ธก์ ํ๊ณ ํ๊ท ์ ํ๋์ ํ๊ท topk๋ฅผ ๊ณ์ฐํฉ๋๋ค.
๊ฒ์ฆ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ๋ค์ผ ๋๋ load_data_in_thread ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ํจ์๋ pthread ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด์ ๋ฉํฐ์ค๋ ๋ฉ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ต๋๋ค. ๊ฒ์ฆ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ๋ค์ธ ํ์๋ free_data ํจ์๋ฅผ ์ฌ์ฉํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํฉ๋๋ค.
validate_classifier_10
ํจ์ ์ด๋ฆ: validate_classifier_10
์ ๋ ฅ:
datacfg (๋ฌธ์์ด): ๋ฐ์ดํฐ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก
filename (๋ฌธ์์ด): ๋คํธ์ํฌ ํ์ผ ๊ฒฝ๋ก
weightfile (๋ฌธ์์ด): ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
๋์:
์ฃผ์ด์ง ๋คํธ์ํฌ์ ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์ ์ ํ๋๋ฅผ ๊ฒ์ฆํ๋ ํจ์์ ๋๋ค.
๊ฒ์ฆ์ ์ฌ์ฉํ ๋ฐ์ดํฐ์ ์ datacfg ํ์ผ์์ ์ง์ ํ๋ฉฐ, ๋ผ๋ฒจ ๋ชฉ๋ก, ํด๋์ค ์, top-k ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ฌ๋ฌ ๋ฐฉํฅ์ผ๋ก ์๋ฅด๊ณ ๋ค์ง์ด์ ์์ธก์ ์ํํ๊ณ , top-k ์ ํ๋์ top-1 ์ ํ๋๋ฅผ ๊ณ์ฐํ์ฌ ์ถ๋ ฅํฉ๋๋ค.
์ค๋ช :
char **labels: ๋ผ๋ฒจ ๋ชฉ๋ก์ ์ ์ฅํ๋ ๋ฌธ์์ด ๋ฐฐ์ด
list *plist: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๋ชฉ๋ก์ ์ ์ฅํ๋ ๋งํฌ๋ ๋ฆฌ์คํธ
char **paths: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ์ฅํ๋ ๋ฌธ์์ด ๋ฐฐ์ด
int m: ๊ฒ์ฆ์ ์ฌ์ฉํ ์ด๋ฏธ์ง ํ์ผ์ ๊ฐ์
int classes: ํด๋์ค ์
int topk: top-k ๊ฐ
int *indexes: top-k ์์ธก ๊ฒฐ๊ณผ์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ๋ ์ ์ํ ๋ฐฐ์ด
image im: ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๋ ๊ตฌ์กฐ์ฒด
image images[10]: ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์๋ฅธ ์ด๋ฏธ์ง๋ค์ ์ ์ฅํ๋ ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด
float *pred: ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ์ค์ํ ๋ฐฐ์ด
float *p: ๋คํธ์ํฌ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ์ค์ํ ๋ฐฐ์ด
ํจ์๋ ๊ฐ ์ด๋ฏธ์ง์ ๋ํด ๋ค์์ ์ํํฉ๋๋ค:
์ด๋ฏธ์ง ํ์ผ์์ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ณ , ์ฌ๋ฌ ๋ฐฉํฅ์ผ๋ก ์๋ฅธ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
์์ฑ๋ ์ด๋ฏธ์ง๋ค์ ๋ํด ์์ธก์ ์ํํ๊ณ , ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๋์ ํฉ๋๋ค.
์์ธก ๊ฒฐ๊ณผ์์ top-k ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๊ณ์ฐํ๊ณ , top-k ์ ํ๋์ top-1 ์ ํ๋๋ฅผ ๊ณ์ฐํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํฉ๋๋ค.
ํจ์๋ ๊ฒ์ฆ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
validate_classifier_full
ํจ์ ์ด๋ฆ: validate_classifier_full
์ ๋ ฅ:
datacfg: char ํฌ์ธํฐ, ๋ฐ์ดํฐ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก
filename: char ํฌ์ธํฐ, ๋คํธ์ํฌ ๊ตฌ์กฐ ํ์ผ ๊ฒฝ๋ก
weightfile: char ํฌ์ธํฐ, ๋คํธ์ํฌ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
๋์:
์ง์ ๋ ๊ฒฝ๋ก์์ ๋คํธ์ํฌ๋ฅผ ๋ก๋ํ๊ณ , ์ด๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฅ ์ด๋ฏธ์ง๋ค์ ๋ถ๋ฅํจ
๋ถ๋ฅ ๊ฒฐ๊ณผ์ ์ ํ๋๋ฅผ ์ถ๋ ฅํจ
์ค๋ช :
์ง์ ๋ ๊ฒฝ๋ก์์ ๋คํธ์ํฌ ๊ตฌ์กฐ์ ๊ฐ์ค์น๋ฅผ ๋ก๋ํ์ฌ ๋คํธ์ํฌ๋ฅผ ์์ฑํจ
๋ฐฐ์น ํฌ๊ธฐ๋ฅผ 1๋ก ์ค์ ํจ
์๋ ๊ฐ์ ํ์ฌ ์๊ฐ์ผ๋ก ์ค์ ํ์ฌ ๋์ ์์ฑ๊ธฐ๋ฅผ ์ด๊ธฐํํจ
๋ฐ์ดํฐ ๊ตฌ์ฑ ํ์ผ์์ ํด๋์ค ์, ๋ผ๋ฒจ ํ์ผ ๊ฒฝ๋ก, ๊ฒ์ฆ ๋ฐ์ดํฐ ํ์ผ ๊ฒฝ๋ก, top-k ๊ฐ์ ์ฝ์ด๋ค์
๋ผ๋ฒจ ํ์ผ์์ ํด๋์ค ์ด๋ฆ์ ๊ฐ์ ธ์ด
๊ฒ์ฆ ๋ฐ์ดํฐ ํ์ผ์์ ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ ธ์ด
์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฆฌ์คํธ๋ฅผ ๋ฐฐ์ด๋ก ๋ณํํ๊ณ , ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋ณ์ m์ ์ ์ฅํจ
top-k ๊ฐ๋งํผ์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ ๋ฐฐ์ด์ ํ ๋นํจ
๊ฐ ์ด๋ฏธ์ง์ ๋ํด ๋ค์์ ์ํํจ:
์ด๋ฏธ์ง ํ์ผ์ ๋ก๋ํ๊ณ , ์ง์ ๋ ํฌ๊ธฐ๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ ํจ
์กฐ์ ๋ ์ด๋ฏธ์ง๋ฅผ ์ด์ฉํ์ฌ ๋คํธ์ํฌ๋ฅผ ํต๊ณผ์ํค๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์์ธกํจ
์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉํ์ฌ ๋ถ๋ฅ ์ ํ๋๋ฅผ ๊ณ์ฐํจ
๊ณ์ฐ๋ ์ ํ๋๋ฅผ ์ถ๋ ฅํจ
validate_classifier_single
ํจ์ ์ด๋ฆ: validate_classifier_single
์ ๋ ฅ:
char *datacfg: ๋ฐ์ดํฐ ์ค์ ํ์ผ ๊ฒฝ๋ก
char *filename: ๋คํธ์ํฌ ๊ตฌ์กฐ ์ค์ ํ์ผ ๊ฒฝ๋ก
char *weightfile: ๋คํธ์ํฌ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
๋์:
์ง์ ๋ ๊ฒฝ๋ก์์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ์ฌ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ถ๋ฅํ๊ณ ์ ํ๋๋ฅผ ํ๊ฐํฉ๋๋ค.
๋ถ๋ฅ ๊ฒฐ๊ณผ์ ๊ฐ ์ด๋ฏธ์ง์ ์ ํ๋(top 1, top k)๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์ค๋ช :
์ง์ ๋ ๋ฐ์ดํฐ ์ค์ ํ์ผ(datacfg)์ ์ฝ์ด๋ค์ฌ ์ต์ ๋ค์ ๊ฐ์ ธ์ต๋๋ค.
๋คํธ์ํฌ ๊ตฌ์กฐ ์ค์ ํ์ผ(filename)๊ณผ ๊ฐ์ค์น ํ์ผ(weightfile)์ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ๋ฅผ ๋ก๋ํฉ๋๋ค.
ํ ๋ฒ์ ํ๋์ ์ด๋ฏธ์ง(batch_size=1)๋ฅผ ์ฒ๋ฆฌํ๋๋ก ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ์ค์ ํฉ๋๋ค.
์ง์ ๋ ๊ฒฝ๋ก์์ ๊ฒ์ฆ ๋ฐ์ดํฐ์ ๋ฆฌ์คํธ๋ฅผ ์ฝ์ด๋ค์ฌ ๊ฐ ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๊ฐ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ์ฌ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ถ๋ฅํ๊ณ ์ ํ๋๋ฅผ ํ๊ฐํฉ๋๋ค.
๋ถ๋ฅ ๊ฒฐ๊ณผ์ ๊ฐ ์ด๋ฏธ์ง์ ์ ํ๋(top 1, top k)๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
๊ฐ ์ด๋ฏธ์ง์์ ์ถ๋ก ๋ ๊ฒฐ๊ณผ(pred)์ ์ค์ ๋ ์ด๋ธ(class)์ ํจ๊ป ์ถ๋ ฅํฉ๋๋ค.
validate_classifier_multi
ํจ์ ์ด๋ฆ: validate_classifier_multi
์ ๋ ฅ:
datacfg: char ํฌ์ธํฐ, ๋ฐ์ดํฐ ์ค์ ํ์ผ ๊ฒฝ๋ก
cfg: char ํฌ์ธํฐ, ๋ชจ๋ธ ์ค์ ํ์ผ ๊ฒฝ๋ก
weights: char ํฌ์ธํฐ, ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
๋์:
์ฃผ์ด์ง ๋ฐ์ดํฐ ์ค์ ํ์ผ, ๋ชจ๋ธ ์ค์ ํ์ผ, ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ์ ์ด์ฉํ์ฌ ๋ชจ๋ธ์ ๋ก๋ํ๊ณ , ๊ฒ์ฆ ๋ฐ์ดํฐ์ ์ ์ด์ฉํ์ฌ ๋ชจ๋ธ์ ์ ํ๋๋ฅผ ๊ฒ์ฆํ๋ ํจ์์ ๋๋ค.
๊ฒ์ฆ ๊ฒฐ๊ณผ์ธ top-1 ์ ํ๋์ top-k ์ ํ๋๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ Darknet ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ํจ์๋ก, ์ฃผ์ด์ง ๋ฐ์ดํฐ ์ค์ ํ์ผ, ๋ชจ๋ธ ์ค์ ํ์ผ, ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ์ ์ด์ฉํ์ฌ ๋ชจ๋ธ์ ๋ก๋ํฉ๋๋ค. ๊ฒ์ฆ ๋ฐ์ดํฐ์ ์ ์ด์ฉํ์ฌ ๋ชจ๋ธ์ ์ ํ๋๋ฅผ ๊ฒ์ฆํ๊ณ , top-1 ์ ํ๋์ top-k ์ ํ๋๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
ํจ์๊ฐ ๋ฐ๋ ์ ๋ ฅ์ผ๋ก๋ ๋ฐ์ดํฐ ์ค์ ํ์ผ ๊ฒฝ๋ก, ๋ชจ๋ธ ์ค์ ํ์ผ ๊ฒฝ๋ก, ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก๊ฐ ์์ต๋๋ค. ์ด ํจ์๋ ๋ฐ์ดํฐ ์ค์ ํ์ผ์์ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ์ฝ์ด์ต๋๋ค.
labels: ํด๋์ค ๋ ์ด๋ธ ํ์ผ ๊ฒฝ๋ก
valid: ๊ฒ์ฆ ๋ฐ์ดํฐ์ ํ์ผ ๊ฒฝ๋ก
classes: ํด๋์ค ์
top: top-k ์ ํ๋ ๊ณ์ฐ์ ์ฌ์ฉํ k ๊ฐ
์ด ํจ์๋ ๊ฐ ์ด๋ฏธ์ง์ ๋ํด ๋ค์๊ณผ ๊ฐ์ ๋์์ ์ํํฉ๋๋ค.
ํด๋์ค ๋ ์ด๋ธ ํ์ผ์์ ํด๋์ค ๋ ์ด๋ธ์ ์ฝ์ด์ต๋๋ค.
๊ฒ์ฆ ๋ฐ์ดํฐ์ ์์ ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ์ฝ์ด์ต๋๋ค.
์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ณ , ๋ค์ํ ํฌ๊ธฐ๋ก resizeํฉ๋๋ค.
resize๋ ์ด๋ฏธ์ง๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ธ์ ์์ธก๊ฐ์ ๊ตฌํฉ๋๋ค.
์์ธก๊ฐ์ ์ด์ฉํ์ฌ top-k ์ ํ๋๋ฅผ ๊ณ์ฐํฉ๋๋ค.
top-1 ์ ํ๋๋ฅผ ๊ณ์ฐํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ๊ฐ ์ด๋ฏธ์ง์ top-1 ์ ํ๋์ top-k ์ ํ๋๋ฅผ ํ๊ท ํ์ฌ ์ถ๋ ฅํฉ๋๋ค.
try_classifier
ํจ์ ์ด๋ฆ: try_classifier
์ ๋ ฅ:
datacfg: char ํฌ์ธํฐ ํ์ , ๋ฐ์ดํฐ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก
cfgfile: char ํฌ์ธํฐ ํ์ , ๋ชจ๋ธ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก
weightfile: char ํฌ์ธํฐ ํ์ , ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
filename: char ํฌ์ธํฐ ํ์ , ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก (์ ํ์ ์ ๋ ฅ)
layer_num: int ํ์ , ์ถ๋ ฅํ ๋ ์ด์ด ๋ฒํธ
๋์:
์ฃผ์ด์ง ๋ชจ๋ธ ๊ตฌ์ฑ ํ์ผ๊ณผ ๊ฐ์ค์น ํ์ผ์ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ๋ฅผ ๋ก๋ํ๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์๋ค์ธ๋ค (filename์ผ๋ก ์ง์ ๋ ์ด๋ฏธ์ง ๋๋ stdin์์ ์ ๋ ฅ)
์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ ์ฒ๋ฆฌํ๋ค (ํฌ๊ธฐ ์กฐ์ , ์๋ฅด๊ธฐ, ์ ๊ทํ)
์ ์ฒ๋ฆฌ๋ ์ด๋ฏธ์ง๋ฅผ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ๋ฅผ ์คํํ๋ค.
์ง์ ๋ ์ถ๋ ฅ ๋ ์ด์ด์ ์ถ๋ ฅ ๋ฐ ํน์ ๊ฐ์ค์น์ ๋ฐ์ด์ด์ค ๊ฐ์ ์ถ๋ ฅํ๋ค.
๊ฐ ํด๋์ค์ ๋ํ ์์ธก ํ๋ฅ ์ ์ถ๋ ฅํ๋ค.
์ค๋ช :
try_classifier ํจ์๋ ์ฃผ์ด์ง ๋ชจ๋ธ๋ก ์ด๋ฏธ์ง ๋ถ๋ฅ๊ธฐ๋ฅผ ์๋ํ๋ ํจ์์ด๋ค.
์ด ํจ์๋ Darknet ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋์์ผ๋ฉฐ, C ์ธ์ด๋ก ์์ฑ๋์๋ค.
ํจ์์ ๋งค๊ฐ ๋ณ์๋ก๋ ๋ฐ์ดํฐ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก, ๋ชจ๋ธ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก, ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก, ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก (์ ํ ์ฌํญ) ๋ฐ ์ถ๋ ฅ ๋ ์ด์ด ๋ฒํธ๊ฐ ์๋ค.
ํจ์๋ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์๋ค์ด๊ธฐ ์ํด stdin์์ ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅํ๊ฑฐ๋ filename์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ์ง์ ํ ์ ์๋ค.
ํจ์๋ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ ์ฒ๋ฆฌํ๊ณ ์ง์ ๋ ์ถ๋ ฅ ๋ ์ด์ด์ ์ถ๋ ฅ ๊ฐ์ ์ถ๋ ฅํ๋ค.
ํจ์๋ ๋ํ ๊ฐ ํด๋์ค์ ๋ํ ์์ธก ํ๋ฅ ์ ์ถ๋ ฅํ๋ค.
predict_classifier
ํจ์ ์ด๋ฆ: predict_classifier
์ ๋ ฅ:
datacfg: ๋ฐ์ดํฐ ์ค์ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ํฌ์ธํฐ
cfgfile: ๋คํธ์ํฌ ๊ตฌ์กฐ ์ค์ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ํฌ์ธํฐ
weightfile: ํ์ต๋ ๊ฐ์ค์น ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ํฌ์ธํฐ
filename: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ํฌ์ธํฐ, ์์ผ๋ฉด NULL
top: ๋ถ๋ฅ ๊ฒฐ๊ณผ ์ค ์์ ๋ช ๊ฐ์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ์ง๋ฅผ ๋ํ๋ด๋ ์ ์
๋์:
์ ๋ ฅ๋ ์ด๋ฏธ์ง ํ์ผ์ ๋ถ๋ฅํ์ฌ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํจ์
์ค๋ช :
์ด ํจ์๋ YOLOv3 ๋คํธ์ํฌ๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฅ๋ ์ด๋ฏธ์ง ํ์ผ์ ๋ถ๋ฅํ๊ณ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ํจ์๊ฐ ํธ์ถ๋ ๋๋ ์์์ ์ค๋ช ํ ๋ค์ฏ ๊ฐ์ง ์ ๋ ฅ๊ฐ์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
ํจ์์ ์ฃผ์ ๋์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ค์ ํ์ผ์์ ๋ผ๋ฒจ ์ ๋ณด๋ฅผ ์ฝ์ด๋ค์ ๋๋ค.
์ด๋ฏธ์ง ํ์ผ์ ๋ถ๋ฌ๋ค์ ๋๋ค.
์ด๋ฏธ์ง๋ฅผ YOLOv3 ๋ชจ๋ธ์ ์ ๋ ฅ ๊ฐ๋ฅํ ํฌ๊ธฐ๋ก ๋ณํํฉ๋๋ค.
๋ชจ๋ธ์ ์ด์ฉํ์ฌ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
๊ณ์ฐ๋ ์์ธก ๊ฒฐ๊ณผ ์ค ์์ n๊ฐ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์ ํจ์์ ์ ๋ ฅ๊ฐ ์ค filename์ ์ ํ์ ์ ๋๋ค. ์ด ๊ฐ์ด NULL์ด ์๋ ๊ฒฝ์ฐ์๋ ํด๋น ๊ฒฝ๋ก์ ์ด๋ฏธ์ง ํ์ผ์ ์ฌ์ฉํ์ฌ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. filename์ด NULL์ธ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์์๊ฒ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
ํจ์์ ๋ฐํ๊ฐ์ ์์ต๋๋ค.
label_classifier
ํจ์ ์ด๋ฆ: label_classifier
์ ๋ ฅ:
char *datacfg: ๋ฐ์ดํฐ ์ค์ ํ์ผ ๊ฒฝ๋ก
char *filename: ๋ชจ๋ธ ์ค์ ํ์ผ ๊ฒฝ๋ก
char *weightfile: ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
๋์:
์ฃผ์ด์ง ๋ฐ์ดํฐ ์ค์ ํ์ผ, ๋ชจ๋ธ ์ค์ ํ์ผ, ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ์ ์ด์ฉํ์ฌ ๋ชจ๋ธ์ ๋ก๋ํ๊ณ , ํ ์คํธ ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ์ฝ์ด๋ค์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ ํ ๋ชจ๋ธ์ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฅํ๊ณ , ํด๋น ์ด๋ฏธ์ง์ ํด๋์ค ์ด๋ฆ์ ์ถ๋ ฅํ๋ค.
์ค๋ช :
label_classifier ํจ์๋ ์ฃผ์ด์ง ๋ฐ์ดํฐ ์ค์ ํ์ผ(datacfg), ๋ชจ๋ธ ์ค์ ํ์ผ(filename), ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ(weightfile)์ ์ด์ฉํ์ฌ ๋ชจ๋ธ์ ๋ก๋ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ ํ์ผ์์ ํด๋์ค ์ด๋ฆ ๋ชฉ๋ก(label_list), ํ ์คํธ ์ด๋ฏธ์ง ๊ฒฝ๋ก(test_list), ํด๋์ค ๊ฐ์(classes)๋ฅผ ์ฝ์ด๋ค์ธ๋ค.
ํ ์คํธ ์ด๋ฏธ์ง ๊ฒฝ๋ก์์ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ด๋ค์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ชจ๋ธ ์ ๋ ฅ ํฌ๊ธฐ์ ๋ง๊ฒ ๋ฆฌ์ฌ์ด์ฆํ๊ณ , ์ด๋ฏธ์ง ์ค์์์ ๋ชจ๋ธ ์ ๋ ฅ ํฌ๊ธฐ๋งํผ ํฌ๋กญํ ์ด๋ฏธ์ง๋ฅผ ๋ชจ๋ธ์ ์ ๋ ฅํ์ฌ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ธก ๊ฒฐ๊ณผ ์ค ๊ฐ์ฅ ๋์ ๊ฐ์ ๊ฐ์ง๋ ํด๋์ค ์ธ๋ฑ์ค๋ฅผ ๊ตฌํ๊ณ , ํด๋์ค ์ด๋ฆ ๋ชฉ๋ก์์ ํด๋น ์ธ๋ฑ์ค์ ํด๋นํ๋ ํด๋์ค ์ด๋ฆ์ ์ฐพ์ ์ถ๋ ฅํ๋ค.
์ด ํจ์๋ ์ด๋ฏธ์ง ๋ถ๋ฅ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ฉฐ, ๋จ์ผ ์ด๋ฏธ์ง์ ๋ํ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
csv_classifier
ํจ์ ์ด๋ฆ: csv_classifier
์ ๋ ฅ:
datacfg: char ํ์์ ๋ฐ์ดํฐ ์ค์ ํ์ผ ๊ฒฝ๋ก
cfgfile: char ํ์์ ๋คํธ์ํฌ ์ค์ ํ์ผ ๊ฒฝ๋ก
weightfile: char ํ์์ ๋คํธ์ํฌ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
๋์:
csv ํ์์ ๋ถ๋ฅ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํจ์.
์ ๋ ฅ๋ ๋ฐ์ดํฐ ์ค์ ํ์ผ, ๋คํธ์ํฌ ์ค์ ํ์ผ, ๋คํธ์ํฌ ๊ฐ์ค์น ํ์ผ์ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ๋ฅผ ๋ก๋ํ๊ณ , ํ ์คํธ ๋ฐ์ดํฐ์ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ธ์์ ๋ถ๋ฅ๋ฅผ ์ํํ ํ, ๊ฒฐ๊ณผ๋ฅผ csv ํ์์ผ๋ก ์ถ๋ ฅํ๋ค.
์ค๋ช :
์ ๋ ฅ๋ ๋ฐ์ดํฐ ์ค์ ํ์ผ, ๋คํธ์ํฌ ์ค์ ํ์ผ, ๋คํธ์ํฌ ๊ฐ์ค์น ํ์ผ์ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ๋ฅผ ๋ก๋ํ๋ค.
ํ ์คํธ ๋ฐ์ดํฐ์ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ธ์์ ๋ถ๋ฅ๋ฅผ ์ํํ๋ค.
๋ถ๋ฅ ๊ฒฐ๊ณผ๋ฅผ csv ํ์์ผ๋ก ์ถ๋ ฅํ๋ค. ์ถ๋ ฅ๋๋ ๋ด์ฉ์ ๊ฐ ์ด๋ฏธ์ง ํ์ผ์ ๊ฒฝ๋ก์ ์์ n๊ฐ์ ํด๋์ค ์ธ๋ฑ์ค์ด๋ค.
์์ n๊ฐ์ ํด๋์ค ์ธ๋ฑ์ค๋ top_k() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ค.
๋ถ๋ฅ๊ฐ ์ํ๋๋ ๋์ ๊ฒฝ๊ณผ ์๊ฐ๊ณผ ์ฒ๋ฆฌ๋ ์ด๋ฏธ์ง ์ ๋ฑ์ ์ ๋ณด๋ฅผ stderr์ ์ถ๋ ฅํ๋ค.
test_classifier
ํจ์ ์ด๋ฆ: test_classifier
์ ๋ ฅ:
datacfg: char ํฌ์ธํฐ. ๋ฐ์ดํฐ ๊ตฌ์ฑ ํ์ผ(data configuration file) ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋ ๋ฌธ์์ด.
cfgfile: char ํฌ์ธํฐ. ๋ชจ๋ธ ๊ตฌ์ฑ ํ์ผ(configuration file) ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋ ๋ฌธ์์ด.
weightfile: char ํฌ์ธํฐ. ๋ชจ๋ธ ๊ฐ์ค์น(weight) ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋ ๋ฌธ์์ด.
target_layer: int ํ์ . ํน์ ๋ ์ด์ด(layer)์ ์ถ๋ ฅ๊ฐ์ ์ถ๋ ฅํ ๋ ํด๋น ๋ ์ด์ด์ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ๋ ์ ์.
๋์:
์ฃผ์ด์ง ๋ชจ๋ธ ํ์ผ๊ณผ ๊ฐ์ค์น ํ์ผ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ๋ก๋ํ๊ณ , ์ง์ ๋ ๋ฐ์ดํฐ ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํ์ฌ ํ ์คํธ ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ธ์จ ํ, ์ด๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ธ์ ํ ์คํธํ๋ค.
๋ฐฐ์น(batch) ๋จ์๋ก ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ ๋ชจ๋ธ์ ํตํด ์์ธกํ๊ณ , ์์ธก๊ฐ์ ์ถ๋ ฅํ๋ค. ํน์ ๋ ์ด์ด์ ์ถ๋ ฅ๊ฐ์ ์ถ๋ ฅํ ์๋ ์๋ค.
์ค๋ช :
load_network: ์ง์ ๋ ๋ชจ๋ธ ํ์ผ๊ณผ ๊ฐ์ค์น ํ์ผ์ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ(network)๋ฅผ ๋ก๋ํ๋ค.
read_data_cfg: ๋ฐ์ดํฐ ๊ตฌ์ฑ ํ์ผ์์ ์ต์ ์ ์ฝ์ด๋ค์ธ๋ค.
option_find_str: ์ต์ ์ค ๋ฌธ์์ด ๊ฐ์ ์ฐพ๋๋ค.
option_find_int: ์ต์ ์ค ์ ์ ๊ฐ์ ์ฐพ๋๋ค.
get_paths: ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ ธ์จ๋ค.
load_data_in_thread: ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์น ๋จ์๋ก ๋ก๋ํ๋ค.
network_predict_data: ๋ก๋๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ธ์ ์์ธกํ๊ณ , ์์ธก๊ฐ์ ๋ฐํํ๋ค.
free_data: data ๊ตฌ์กฐ์ฒด์์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค.
file_output_classifier
ํจ์ ์ด๋ฆ: file_output_classifier
์ ๋ ฅ:
char *datacfg: ๋ฐ์ดํฐ ์ค์ ํ์ผ ๊ฒฝ๋ก
char *filename: ๋ชจ๋ธ ํ์ผ ๊ฒฝ๋ก
char *weightfile: ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
char *listfile: ์ ๋ ฅ ์ด๋ฏธ์ง ๊ฒฝ๋ก๊ฐ ํฌํจ๋ ํ์ผ ๊ฒฝ๋ก
๋์:
์ด๋ฏธ์ง ํ์ผ๋ค์ด ํฌํจ๋ listfile์์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ณ , ํด๋น ์ด๋ฏธ์ง๋ฅผ ๋ชจ๋ธ์ ์ ๋ ฅ ํฌ๊ธฐ๋ก ๋ณํํ ํ, ๋ชจ๋ธ์ ์ ๋ ฅํ์ฌ ์์ธก๊ฐ์ ์ถ๋ ฅํ๋ ํจ์์ ๋๋ค.
์ถ๋ ฅ์ ์ด๋ฏธ์ง ๊ฒฝ๋ก์ ๊ฐ ํด๋์ค๋ณ ์์ธก๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ ํ ์คํธ ํ์ผ๋ก ์ถ๋ ฅ๋ฉ๋๋ค.
์ค๋ช :
๋ชจ๋ธ๊ณผ ๊ฐ์ค์น๋ฅผ ๋ก๋ํฉ๋๋ค.
๋ฐ์ดํฐ ์ค์ ํ์ผ์์ ํด๋์ค ์๋ฅผ ์ฝ์ด์ต๋๋ค.
์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๊ฐ ํฌํจ๋ listfile์์ ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ์ฝ์ด์ต๋๋ค.
๊ฐ ์ด๋ฏธ์ง์ ๋ํด ๋ค์ ์์ ์ ์ํํฉ๋๋ค.
์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ณ , ๋ชจ๋ธ ์ ๋ ฅ ํฌ๊ธฐ๋ก ๋ณํํ ํ ๋ชจ๋ธ์ ์ ๋ ฅ์ผ๋ก ์ ๊ณตํฉ๋๋ค.
๋ชจ๋ธ์์ ์์ธก๊ฐ์ ๊ณ์ฐํฉ๋๋ค.
๊ณ์ฐ๋ ์์ธก๊ฐ์ ํ ์คํธ ํ์ผ๋ก ์ถ๋ ฅํฉ๋๋ค.
threat_classifier
ํจ์ ์ด๋ฆ: threat_classifier
์ ๋ ฅ:
datacfg: char ํฌ์ธํฐ, data ํ์ผ ๊ฒฝ๋ก
cfgfile: char ํฌ์ธํฐ, ๋ชจ๋ธ์ ๊ตฌ์กฐ๋ฅผ ์ ์ํ ํ์ผ์ ๊ฒฝ๋ก
weightfile: char ํฌ์ธํฐ, ๋ชจ๋ธ์ ๊ฐ์ค์น๊ฐ ์ ์ฅ๋ ํ์ผ์ ๊ฒฝ๋ก
cam_index: int, ์น์บ ์ ์ธ๋ฑ์ค
filename: char ํฌ์ธํฐ, ๋น๋์ค ํ์ผ์ ๊ฒฝ๋ก
๋์:
์ ๋ ฅ๋ ํ์ผ ๊ฒฝ๋ก์ ์ธ๋ฑ์ค๋ฅผ ํตํด ์น์บ ๋๋ ๋น๋์ค๋ฅผ ์ด๊ณ , ๋ชจ๋ธ์ ๋ก๋ํ ํ, ์ ๋ ฅ ์ด๋ฏธ์ง์์ ํน์ ๊ฐ์ฒด์ ์ํ ์์ค์ ์์ธกํ์ฌ ๊ทธ์ ๋ฐ๋ผ ๋ฐ์ค์ ์์์ ๊ทธ๋ ค ์ถ๋ ฅํ๋ค.
๋ชจ๋ธ์ Darknet์ ์ฌ์ฉํ๋ฉฐ, OpenCV ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํ๋ค.
์ค๋ช :
์ฃผ์ด์ง ๊ฒฝ๋ก์์ ๋ฐ์ดํฐ ํ์ผ(datacfg), ๋ชจ๋ธ ํ์ผ(cfgfile), ๊ฐ์ค์น ํ์ผ(weightfile)์ ๋ก๋ํ์ฌ ๋ชจ๋ธ(network)์ ์์ฑํ๋ค. ์ด ๋ชจ๋ธ์ ์ ๋ ฅ ์ด๋ฏธ์ง์์ ๊ฐ์ฒด์ ์ํ ์์ค(threat)์ ์์ธกํ๋๋ฐ ์ฌ์ฉ๋๋ค.
top๊ณผ names๋ ๋ชจ๋ธ์ ์ ์ํ๋ ํ์ผ์์ ์ฝ์ด์ค๋ฉฐ, top์ ์์ธก ๊ฒฐ๊ณผ ์ค ๊ฐ์ฅ ๋์ ์์ n๊ฐ์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
์ ๋ ฅ๋ ๋น๋์ค ํ์ผ(filename) ๋๋ ์น์บ (cam_index)์์ ํ๋ ์์ ๊ฐ์ ธ์ ์ฒ๋ฆฌํ๋ค. ์ด ๋, ์ฒ๋ฆฌํ ๋๋ง๋ค ํ์ฌ์ ์ํ ์์ค์ ๊ธฐ์กด์ ์ํ ์์ค์ ์ผ์ ๋น์จ(roll)์ ์ ์ฉํ์ฌ ์ ๋ฐ์ดํธํ๋ค.
์ถ๋ ฅ๋ ์ด๋ฏธ์ง๋ ์ํ ์์ค(threat)์ ๋ฐ๋ผ ๋ฐ์ค์ ์์์ด ๊ทธ๋ ค์ ธ ์์ผ๋ฉฐ, OpenCV ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ show_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ค์๊ฐ์ผ๋ก ๋ณด์ฌ์ค๋ค.
์ต์ข ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ด๋ฏธ์ง์ FPS(Frame Per Second)๋ฅผ ๋ฐํํ๋ค.
gun_classifier
ํจ์ ์ด๋ฆ: gun_classifier
์ ๋ ฅ:
datacfg: ๋ฌธ์์ด ํฌ์ธํฐ. ๋ฐ์ดํฐ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก.
cfgfile: ๋ฌธ์์ด ํฌ์ธํฐ. ๋คํธ์ํฌ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก.
weightfile: ๋ฌธ์์ด ํฌ์ธํฐ. ๋คํธ์ํฌ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก.
cam_index: ์ ์. ์น์บ ์ธ๋ฑ์ค.
filename: ๋ฌธ์์ด ํฌ์ธํฐ. ๋น๋์ค ํ์ผ ๊ฒฝ๋ก.
๋์:
์ง์ ๋ ๋คํธ์ํฌ ๊ตฌ์ฑ ํ์ผ๊ณผ ๊ฐ์ค์น ํ์ผ์ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ๋ฅผ ๋ก๋ํฉ๋๋ค.
๋คํธ์ํฌ์ ์ ๋ ฅ ํฌ๊ธฐ๋ฅผ ์ค์ ํฉ๋๋ค.
๋ฐ์ดํฐ ๊ตฌ์ฑ ํ์ผ์์ ์ต์ ์ ์ฝ์ด์ต๋๋ค.
์น์บ ๋๋ ๋น๋์ค ํ์ผ์์ ์ด๋ฏธ์ง๋ฅผ ์ป์ด์ ๋คํธ์ํฌ๋ฅผ ํตํด ์์ธกํฉ๋๋ค.
์ง์ ๋ ์๊ณ๊ฐ ์ด์์ธ ํด๋์ค ์ธ๋ฑ์ค๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์์ธก๋ ์ด๋ฏธ์ง์ ์์ธก๋ ํด๋์ค ์ด๋ฆ์ ์ถ๋ ฅํ๊ณ , ์ํ์ผ๋ก ๊ฐ์ฃผ๋๋ ํด๋์ค๊ฐ ์๋ ๊ฒฝ์ฐ "Threat Detected!"์ ์ถ๋ ฅํฉ๋๋ค.
์ด๋ฏธ์ง๋ฅผ ํ์ํ๊ณ , FPS(์ด๋น ํ๋ ์ ์)๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ ๋ ฅ๋ ๋ฐ์ดํฐ ๊ตฌ์ฑ ํ์ผ, ๋คํธ์ํฌ ๊ตฌ์ฑ ํ์ผ, ๊ฐ์ค์น ํ์ผ์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ ๋น๋์ค์์ ์ดฌ์ํ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ , ์ํ์ผ๋ก ๊ฐ์ฃผ๋๋ ํด๋์ค๊ฐ ์๋์ง ๊ฐ์งํ๋ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
์ด ํจ์๋ OpenCV ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํจ์๋ ์น์บ ๋๋ ๋น๋์ค ํ์ผ์์ ์ด๋ฏธ์ง๋ฅผ ์ป์ด์ ๋ถ์์ ์ํํ๋ฉฐ, ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์์ ์ถ๋ ฅํ๊ณ , FPS๋ฅผ ๊ณ์ฐํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ํฉ๋๋ค.
๋ถ์ ์ "bad_cats" ๋ฐฐ์ด์ ์ง์ ๋ ํด๋์ค ์ค, ์์ธก๋ ํ๋ฅ ๊ฐ์ด 0.01 ์ด์์ธ ํด๋์ค๊ฐ ์๋ ๊ฒฝ์ฐ "Threat Detected!"์ ์ถ๋ ฅํ๊ณ , ์ํ์ผ๋ก ๊ฐ์ฃผ๋๋ ํด๋์ค์ ์ด๋ฆ์ ์ถ๋ ฅํฉ๋๋ค.
demo_classifier
ํจ์ ์ด๋ฆ: demo_classifier
์ ๋ ฅ:
datacfg: ๋ฌธ์์ด ํฌ์ธํฐ, ๋ฐ์ดํฐ ํ์ผ ๊ฒฝ๋ก
cfgfile: ๋ฌธ์์ด ํฌ์ธํฐ, ๋คํธ์ํฌ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก
weightfile: ๋ฌธ์์ด ํฌ์ธํฐ, ํ์ต๋ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
cam_index: ์ ์, ์น์บ ์ธ๋ฑ์ค
filename: ๋ฌธ์์ด ํฌ์ธํฐ, ๋์์ ํ์ผ ๊ฒฝ๋ก
๋์:
์ฃผ์ด์ง ๋ฐ์ดํฐ ํ์ผ, ๋คํธ์ํฌ ๊ตฌ์ฑ ํ์ผ, ํ์ต๋ ๊ฐ์ค์น ํ์ผ์ ์ฌ์ฉํ์ฌ ๋ถ๋ฅ๊ธฐ ๋คํธ์ํฌ๋ฅผ ๋ก๋ํ๊ณ , ์น์บ ๋๋ ๋์์์์ ํ๋ ์์ ๊ฐ์ ธ์ ์ ๋ ฅ ์ด๋ฏธ์ง๋ก ๋ณํํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์, ๋ถ๋ฅ๊ธฐ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์ด๋ฏธ์ง์์ ํด๋์ค ์์ธก์ ์ํํ๊ณ , ๊ฐ์ฅ ๋์ ์์ธก ์ ์๋ฅผ ๊ฐ์ง ์์ ํด๋์ค๋ฅผ ์ธ์ํ๊ณ ํ๋ฉด์ ํ์ํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์์ ๋ฐ์ดํฐ์ ๋ํ ๋ถ๋ฅ๊ธฐ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ์๊ฐ์ ์ผ๋ก ํ๊ฐํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
์ฃผ์ด์ง ๋ฐ์ดํฐ ํ์ผ, ๋คํธ์ํฌ ๊ตฌ์ฑ ํ์ผ ๋ฐ ํ์ต๋ ๊ฐ์ค์น ํ์ผ์ ์ฌ์ฉํ์ฌ ๋ถ๋ฅ๊ธฐ ๋คํธ์ํฌ๋ฅผ ๋ก๋ํ๊ณ , ์น์บ ๋๋ ๋์์ ํ์ผ์์ ํ๋ ์์ ๊ฐ์ ธ์ ์ ๋ ฅ ์ด๋ฏธ์ง๋ก ๋ณํํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์, ๋ถ๋ฅ๊ธฐ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์ด๋ฏธ์ง์์ ํด๋์ค ์์ธก์ ์ํํ๊ณ , ๊ฐ์ฅ ๋์ ์์ธก ์ ์๋ฅผ ๊ฐ์ง ์์ ํด๋์ค๋ฅผ ์ธ์ํ๊ณ ํ๋ฉด์ ํ์ํฉ๋๋ค. ์ด ํจ์๋ OpenCV ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
run_classifier
ํจ์ ์ด๋ฆ: run_classifier
์ ๋ ฅ:
int argc : main ํจ์์์ ์ ๋ฌ๋ ๋ช ๋ นํ ์ธ์์ ๊ฐ์
char **argv : main ํจ์์์ ์ ๋ฌ๋ ๋ช ๋ นํ ์ธ์ ๋ฌธ์์ด ๋ฐฐ์ด
๋์:
์ธ์๋ก ๋ฐ์ ๋ช ๋ นํ ์ธ์๋ฅผ ํ์ฑํ์ฌ ํด๋นํ๋ ํจ์๋ฅผ ํธ์ถํ๋ ์ญํ ์ ์ํ
์ค๋ช :
์ฃผ์ด์ง ๋ช ๋ นํ ์ธ์๋ฅผ ํ์ฑํ์ฌ ํด๋นํ๋ ํจ์๋ฅผ ํธ์ถ
train, test, valid ๋ฑ์ ์ต์ ์ ๋ฐ๋ผ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ์ฌ ํด๋น ์์ ์ ์ํ
๋ค์ํ ์ต์ ์ ๋ฐ๋ผ ๋ค์ํ ๋์์ ์ํํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ์ํด ๋ค์ํ ๋ช ๋ นํ ์ธ์๋ฅผ ๋ฐ์
GPU ์ฌ์ฉ ์ฌ๋ถ, ์นด๋ฉ๋ผ ์ธ๋ฑ์ค, ์ถ๋ ฅ ํ์ผ๋ช ๋ฑ์ ์ธ์๋ก ๋ฐ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
Last updated
Was this helpful?