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: ๋„คํŠธ์›Œํฌ ์˜ˆ์ธก ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ์‹ค์ˆ˜ํ˜• ๋ฐฐ์—ด

ํ•จ์ˆ˜๋Š” ๊ฐ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

  1. ์ด๋ฏธ์ง€ ํŒŒ์ผ์—์„œ ์ž…๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๊ณ , ์—ฌ๋Ÿฌ ๋ฐฉํ–ฅ์œผ๋กœ ์ž๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  2. ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋“ค์— ๋Œ€ํ•ด ์˜ˆ์ธก์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์˜ˆ์ธก ๊ฒฐ๊ณผ๋ฅผ ๋ˆ„์ ํ•ฉ๋‹ˆ๋‹ค.

  3. ์˜ˆ์ธก ๊ฒฐ๊ณผ์—์„œ top-k ์˜ˆ์ธก ๊ฒฐ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , top-k ์ •ํ™•๋„์™€ top-1 ์ •ํ™•๋„๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

  4. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜๋Š” ๊ฒ€์ฆ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

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 ๋„คํŠธ์›Œํฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž…๋ ฅ๋œ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋ถ„๋ฅ˜ํ•˜๊ณ  ์˜ˆ์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋‹ค์„ฏ ๊ฐ€์ง€ ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ํ•จ์ˆ˜์˜ ์ฃผ์š” ๋™์ž‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์„ค์ • ํŒŒ์ผ์—์„œ ๋ผ๋ฒจ ์ •๋ณด๋ฅผ ์ฝ์–ด๋“ค์ž…๋‹ˆ๋‹ค.

  2. ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ๋“ค์ž…๋‹ˆ๋‹ค.

  3. ์ด๋ฏธ์ง€๋ฅผ YOLOv3 ๋ชจ๋ธ์— ์ž…๋ ฅ ๊ฐ€๋Šฅํ•œ ํฌ๊ธฐ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  4. ๋ชจ๋ธ์„ ์ด์šฉํ•˜์—ฌ ์˜ˆ์ธก ๊ฒฐ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

  5. ๊ณ„์‚ฐ๋œ ์˜ˆ์ธก ๊ฒฐ๊ณผ ์ค‘ ์ƒ์œ„ 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์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๊ณ , ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ๋ชจ๋ธ์˜ ์ž…๋ ฅ ํฌ๊ธฐ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„, ๋ชจ๋ธ์— ์ž…๋ ฅํ•˜์—ฌ ์˜ˆ์ธก๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

  • ์ถœ๋ ฅ์€ ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ์™€ ๊ฐ ํด๋ž˜์Šค๋ณ„ ์˜ˆ์ธก๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  1. ๋ชจ๋ธ๊ณผ ๊ฐ€์ค‘์น˜๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ฐ์ดํ„ฐ ์„ค์ • ํŒŒ์ผ์—์„œ ํด๋ž˜์Šค ์ˆ˜๋ฅผ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค.

  3. ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ํฌํ•จ๋œ listfile์—์„œ ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ๋ฅผ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค.

  4. ๊ฐ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    1. ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๊ณ , ๋ชจ๋ธ ์ž…๋ ฅ ํฌ๊ธฐ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ๋ชจ๋ธ์— ์ž…๋ ฅ์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    2. ๋ชจ๋ธ์—์„œ ์˜ˆ์ธก๊ฐ’์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

    3. ๊ณ„์‚ฐ๋œ ์˜ˆ์ธก๊ฐ’์„ ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

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?