data
get_paths
ํจ์ ์ด๋ฆ: get_paths
์ ๋ ฅ:
char *filename: ํ์ผ ์ด๋ฆ
๋์:
pthread_mutex_t mutex๋ฅผ PTHREAD_MUTEX_INITIALIZER๋ก ์ด๊ธฐํ
์ ๋ ฅ๋ฐ์ ํ์ผ ์ด๋ฆ์ผ๋ก ํ์ผ์ ์ด๊ณ , ํ์ผ์ด ์๋ ๊ฒฝ์ฐ์๋ file_error ํจ์๋ฅผ ํธ์ถํ์ฌ ์ค๋ฅ ๋ฉ์์ง ์ถ๋ ฅ
๋น ๋ฆฌ์คํธ(lines)๋ฅผ ๋ง๋ค๊ธฐ ์ํด make_list() ํจ์ ํธ์ถ
ํ์ผ์์ ํ ์ค์ฉ ์ฝ์ด์ค๋ฉด์ ๋ฆฌ์คํธ์ ์ถ๊ฐ(list_insert ํจ์ ์ฌ์ฉ)
ํ์ผ ๋ซ๊ธฐ
์์ฑ๋ ๋ฆฌ์คํธ(lines) ๋ฐํ
์ค๋ช :
get_paths ํจ์๋ ํ์ผ ์ด๋ฆ์ ์ ๋ ฅ๋ฐ์ ํด๋น ํ์ผ์์ ํ ์ค์ฉ ์ฝ์ด์ ๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ ํจ์์ด๋ค.
์ด ํจ์๋ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ณ , ํ์ผ์์ ์ฝ์ด์จ ๋ด์ฉ์ ๋ฆฌ์คํธ์ ์ถ๊ฐํ์ฌ ๋ฐํํ๋ค.
์ด ํจ์์์๋ ๋ฎคํ ์ค(mutex)๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ ๋ ๊ฐ์ ๊ฒฝ์ ์ํฉ์ ๋ง์ ์์ ํ๊ฒ ๋ฆฌ์คํธ๋ฅผ ์์ ํ ์ ์๋ค.
get_random_paths
ํจ์ ์ด๋ฆ: get_random_paths
์ ๋ ฅ:
paths: ๋ฌธ์์ด ๋ฐฐ์ด ํฌ์ธํฐ
n: ๋ฐํํ ๋๋ค ๊ฒฝ๋ก์ ๊ฐ์
m: ์ ์ฒด ๊ฒฝ๋ก์ ๊ฐ์
๋์:
paths ๋ฐฐ์ด์์ ๋๋ค์ผ๋ก n๊ฐ์ ๊ฒฝ๋ก๋ฅผ ์ ํํ์ฌ ์๋ก์ด ๋ฐฐ์ด random_paths์ ์ ์ฅํ๋ค.
์ ํ๋ ๊ฒฝ๋ก๋ paths ๋ฐฐ์ด์์์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ ธ์จ๋ค.
pthread_mutex_t ํ์ ์ mutex๋ฅผ ์ด์ฉํ์ฌ ์ค๋ ๋ ๊ฐ ๊ฒฝ์ ์ํฉ์ ๋ฐฉ์งํ๋ค.
์ค๋ช :
ํจ์๋ ๋ฌธ์์ด ๋ฐฐ์ด ํฌ์ธํฐ paths์ ๋ฐํํ ๋๋ค ๊ฒฝ๋ก์ ๊ฐ์ n, ๊ทธ๋ฆฌ๊ณ ์ ์ฒด ๊ฒฝ๋ก์ ๊ฐ์ m์ ์ ๋ ฅ ๋ฐ๋๋ค.
n๊ฐ์ ๋๋ค ๊ฒฝ๋ก๋ฅผ ์ ์ฅํ๊ธฐ ์ํด char ํ์ ์ ์ด์ค ํฌ์ธํฐ์ธ random_paths๋ฅผ calloc ํจ์๋ฅผ ์ด์ฉํ์ฌ ํ ๋นํ๋ค.
mutex๋ฅผ ์ด์ฉํ์ฌ ์ค๋ ๋ ๊ฐ ๊ฒฝ์ ์ํฉ์ ๋ฐฉ์งํ๋ค.
for ๋ฃจํ๋ฅผ ์ด์ฉํ์ฌ n๊ฐ์ ๋๋ค ๊ฒฝ๋ก๋ฅผ ์ ํํ์ฌ random_paths์ ์ ์ฅํ๋ค.
์ธ๋ฑ์ค๋ rand ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋๋ค์ผ๋ก ์์ฑํ๋ฉฐ, ์ด๋ฅผ ์ด์ฉํ์ฌ paths ๋ฐฐ์ด์์ ํด๋น ์ธ๋ฑ์ค์ ๊ฒฝ๋ก๋ฅผ ์ ํํ์ฌ random_paths์ ์ ์ฅํ๋ค.
๋ชจ๋ ๋๋ค ๊ฒฝ๋ก ์ ํ์ด ๋๋๋ฉด random_paths๋ฅผ ๋ฐํํ๋ค.
find_replace_paths
ํจ์ ์ด๋ฆ: find_replace_paths
์ ๋ ฅ:
char **paths: ๋ฌธ์์ด ๋ฐฐ์ด
int n: ๋ฌธ์์ด ๋ฐฐ์ด์ ๊ธธ์ด
char *find: ์ฐพ์ ๋ฌธ์์ด
char *replace: ๋์ฒดํ ๋ฌธ์์ด
๋์:
๋ฌธ์์ด ๋ฐฐ์ด paths์์ ์ฐพ์ ๋ฌธ์์ด find์ ๋์ฒดํ ๋ฌธ์์ด replace๋ก ๋์ฒดํ์ฌ replace_paths๋ผ๋ ์๋ก์ด ๋ฌธ์์ด ๋ฐฐ์ด์ ๋ง๋ญ๋๋ค.
replace_paths ๋ฐฐ์ด์ ๋์ ์ผ๋ก ํ ๋น๋ฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ๋ ๋ฌธ์์ด ๋ฐฐ์ด paths์์ ๊ฐ๊ฐ์ ๋ฌธ์์ด์ ๋์ฒดํ๊ธฐ ์ํด for๋ฌธ์ ์ฌ์ฉํฉ๋๋ค.
๊ฐ ๋ฌธ์์ด์ ๋์ฒดํ๊ธฐ ์ํด find_replace ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋์ฒดํ ๋ฌธ์์ด์ ๋์ ์ผ๋ก ํ ๋น๋ replace_paths ๋ฐฐ์ด์ ์ ์ฅ๋ฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก replace_paths ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค.
load_image_paths_gray
ํจ์ ์ด๋ฆ: load_image_paths_gray
์ ๋ ฅ:
char **paths: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ์ฅํ ๋ฌธ์์ด ๋ฐฐ์ด
int n: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๊ฐ์
int w: ์ด๋ฏธ์ง์ ํญ
int h: ์ด๋ฏธ์ง์ ๋์ด
๋์:
์ฃผ์ด์ง ๊ฒฝ๋ก์์ ์ด๋ฏธ์ง ํ์ผ์ ์ฝ์ด๋ค์ด๊ณ , grayscale๋ก ๋ณํํ ํ, ํฝ์ ๊ฐ์ float ํ์์ผ๋ก ๋ณํํ์ฌ 2์ฐจ์ ๋ฐฐ์ด(matrix) X์ ์ ์ฅํ๋ค.
์ค๋ช :
load_image_paths_gray ํจ์๋ char ํ์ ์ ์ด์คํฌ์ธํฐ paths, int ํ์ ์ n, w, h๋ฅผ ์ ๋ ฅ๊ฐ์ผ๋ก ๋ฐ์๋ค์ธ๋ค.
์ด ํจ์๋ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก์์ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ด๋ค์ธ ํ grayscale๋ก ๋ณํํ๊ณ , ํฝ์ ๊ฐ์ float ํ์์ผ๋ก ๋ณํํ์ฌ 2์ฐจ์ ๋ฐฐ์ด(matrix) X์ ์ ์ฅํ ํ, ์ด๋ฅผ ๋ฐํํ๋ค.
์ด ๋, X๋ matrix ํ์ ์ผ๋ก, X.vals๋ n๊ฐ์ ํฌ์ธํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ calloc์ ํตํด ํ ๋น๋ฐ์ผ๋ฉฐ, X.cols๋ 0์ผ๋ก ์ด๊ธฐํ๋๋ค. ์ด๋ฏธ์ง ํ์ผ์ load_image ํจ์๋ฅผ ํตํด ์ฝ์ด๋ค์ธ ํ, grayscale_image ํจ์๋ฅผ ํตํด grayscale๋ก ๋ณํํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋์, free_image ํจ์๋ฅผ ์ด์ฉํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ณ , ๋ณํ๋ grayscale ์ด๋ฏธ์ง๋ฅผ ๋ค์ im์ ํ ๋นํ๋ค. ใ ๋ณํ๋ ์ด๋ฏธ์ง์ ํฝ์ ๊ฐ์ float ํ์์ผ๋ก ๋ณํํ์ฌ X์ i๋ฒ์งธ ์์์ ์ ์ฅํ๊ณ , X.cols์๋ ํด๋น ์ด๋ฏธ์ง์ ๊ฐ๋ก, ์ธ๋ก, ์ฑ๋ ์์ ํด๋นํ๋ ๊ฐ์ ์ ์ฅํ๋ค. ๋ง์ง๋ง์ผ๋ก, ๋ณํ๋ X๋ฅผ ๋ฐํํ๋ค.
load_image_paths
ํจ์ ์ด๋ฆ: load_image_paths
์ ๋ ฅ:
paths (char **): ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๋ฐฐ์ด
n (int): ์ด๋ฏธ์ง ํ์ผ ๊ฐ์
w (int): ์ด๋ฏธ์ง์ ๊ฐ๋ก ํฌ๊ธฐ
h (int): ์ด๋ฏธ์ง์ ์ธ๋ก ํฌ๊ธฐ
๋์:
์ ๋ ฅ๋ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ค์ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๊ณ , ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ํ๋ ฌ์ ์์ฑํ์ฌ ๋ฐํํ๋ ํจ์์ ๋๋ค. ์ด ํจ์๋ ์ด๋ฏธ์ง๋ฅผ grayscale๋ก ๋ณํํ์ง ์์ต๋๋ค.
์ค๋ช :
์ด ํจ์๋ ์ ๋ ฅ๋ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๋ฐฐ์ด์์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ์ฌ, ํด๋น ๋ฐ์ดํฐ๋ฅผ ํ๋ ฌ๋ก ์์ฑํ์ฌ ๋ฐํํฉ๋๋ค.
์ด ํจ์์์ ์์ฑ๋ ํ๋ ฌ์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ 1์ฐจ์ ๋ฐฐ์ด ํํ๋ก ์ ์ฅํ๋ฉฐ, ๊ฐ ์ด๋ฏธ์ง์ ๋ฐ์ดํฐ๋ ํ๋ ฌ์ ํ ํ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
์ด ํจ์๋ ์ด๋ฏธ์ง๋ฅผ grayscale๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, RGB ์์ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํฉ๋๋ค.
load_image_augment_paths
ํจ์ ์ด๋ฆ: load_image_augment_paths
์ ๋ ฅ:
paths (char **): ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๋ฐฐ์ด
n (int): ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก์ ๊ฐ์
min (int): ์ด๋ฏธ์ง ์ถ์ ๋น์จ์ ์ต์๊ฐ
max (int): ์ด๋ฏธ์ง ์ถ์ ๋น์จ์ ์ต๋๊ฐ
size (int): ์ด๋ฏธ์ง ํฌ๊ธฐ
angle (float): ์ด๋ฏธ์ง ํ์ ๊ฐ๋ ๋ฒ์
aspect (float): ์ด๋ฏธ์ง ํ์ฅ ๋น์จ ๋ฒ์
hue (float): ์ด๋ฏธ์ง ์์ ์กฐ์ ๋ฒ์
saturation (float): ์ด๋ฏธ์ง ์ฑ๋ ์กฐ์ ๋ฒ์
exposure (float): ์ด๋ฏธ์ง ๋ ธ์ถ ์กฐ์ ๋ฒ์
center (int): ์ด๋ฏธ์ง ์ค์์ผ๋ก๋ถํฐ ์๋ฅผ์ง ์ฌ๋ถ (1: ์ค์ ์๋ฅด๊ธฐ, 0: ๋ฌด์์ ์๋ฅด๊ธฐ)
๋์:
์ฃผ์ด์ง ์ด๋ฏธ์ง ๊ฒฝ๋ก์์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ณ , ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ณ , ์์ ๋ฐ ๋ช ์ ์กฐ์ ์ ํตํด ์ด๋ฏธ์ง๋ฅผ ๋ณด๊ฐํ๋ค.
์ด๋ฏธ์ง ๋ฐฐ์ด์ ๋ง๋ค์ด ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ์ด๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๋ฐฐ์ด
paths
์์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ณ , ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผsize
๋ก ์กฐ์ ํ๋ค.center
๊ฐ์ ๋ฐ๋ผ ์ด๋ฏธ์ง ์ค์์ผ๋ก๋ถํฐ ์๋ฅผ์ง, ๋ฌด์์๋ก ์๋ฅผ์ง ๊ฒฐ์ ํ๋ค.์ด๋ฏธ์ง๋ฅผ ๋ฌด์์๋ก ํ์ ํ๊ณ , ํ๋ ๋๋ ์ถ์ํ๋ฉฐ, ์ด๋ฏธ์ง ์์, ๋ช ์์ ๋ฌด์์๋ก ์กฐ์ ํ๋ค.
๋ณด๊ฐ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ 2์ฐจ์ ํ๋ ฌ๋ก ์ ์ฅํ๊ณ , ์ด๋ฅผ ๋ฐํํ๋ค.
read_boxes
ํจ์ ์ด๋ฆ: read_boxes
์ ๋ ฅ:
filename (char*): ๋ฐ์ค ์ ๋ณด๊ฐ ์ ์ฅ๋ ํ์ผ์ ๊ฒฝ๋ก
n (int*): ๋ฐ์ค์ ๊ฐ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ณ์์ ํฌ์ธํฐ
๋์:
์ ๋ ฅ๋ ํ์ผ์์ ๋ฐ์ค ์ ๋ณด๋ฅผ ์ฝ์ด์ box_label ๊ตฌ์กฐ์ฒด์ ์ ์ฅํ๊ณ , ์ด๋ค์ ๋ฐฐ์ด์ ์ ์ฅ
ํ์์ ๋ฐ๋ผ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ฉด์ ๋ฐ์ค ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋์ ์ํ
๋ฐ์ค์ ๊ฐ์๋ฅผ ์ ๋ ฅ๋ฐ์ ํฌ์ธํฐ๋ฅผ ํตํด ๋ฐํ
์ค๋ช :
์ด ํจ์๋ YOLO ํ์์ ๋ฐ์ค ์ ๋ณด๊ฐ ๋ด๊ธด ํ ์คํธ ํ์ผ์ ์ฝ์ด์ box_label ๊ตฌ์กฐ์ฒด์ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค.
ํ์ผ์ ๋ด์ฉ์ "id x y w h" ํ์์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ๊ฐ์ ๋ฐ์ค์ ํด๋์ค, ์ค์ฌ์ (x, y), ๋๋น(w), ๋์ด(h)๋ฅผ ๋ํ๋ธ๋ค.
ํ์ผ์ ์ฝ์ผ๋ฉด์ box_label ๊ตฌ์กฐ์ฒด์ ์ ์ฅํ๊ณ , ์ด๋ค์ ๋์ ์ผ๋ก ํ ๋น๋ ๋ฐฐ์ด์ ์ถ๊ฐํ๋ค.
๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๋ถ์กฑํด์ง๋ฉด, ํ์์ ๋ฐ๋ผ ๋ ๋ฐฐ์ฉ ๋๋ ค๊ฐ๋ฉด์ ๋ฐ์ค ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
๋ง์ง๋ง์ผ๋ก, ๋ฐ์ค์ ๊ฐ์๋ฅผ ๋ฐํํ๋ค.
randomize_boxes
ํจ์ ์ด๋ฆ: randomize_boxes
์ ๋ ฅ:
box_label *b: ๋ฐ์ค ๋ผ๋ฒจ ํฌ์ธํฐ
int n: ๋ฐ์ค ๋ผ๋ฒจ์ ์
๋์:
์ฃผ์ด์ง ๋ฐ์ค ๋ผ๋ฒจ ๋ฐฐ์ด์์ ๋ฌด์์๋ก ๋ฐ์ค๋ฅผ ์ ํํ์ฌ ์์น๋ฅผ ๋ฐ๊พผ๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ ๋ฐ์ค ๋ผ๋ฒจ ๋ฐฐ์ด์์ ๋ฌด์์๋ก ๋ ๊ฐ์ ๋ฐ์ค๋ฅผ ์ ํํ์ฌ ์์น๋ฅผ ์๋ก ๋ฐ๊ฟ์ฃผ๋ ์์ ์ n๋ฒ ๋ฐ๋ณตํ๋ค.
์ด ํจ์๋ ๊ฐ์ฒด ๊ฒ์ถ ์๊ณ ๋ฆฌ์ฆ์์ ๋ฐ์ดํฐ ์ฆ๊ฐ์ ์ํด ์ฌ์ฉ๋ ์ ์๋ค.
correct_boxes
ํจ์ ์ด๋ฆ: correct_boxes
์ ๋ ฅ:
box_label *boxes: bounding box ์ ๋ณด๊ฐ ๋ด๊ธด ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ ๋ฐฐ์ด
int n: bounding box์ ๊ฐ์
float dx: x์ถ์ผ๋ก ์ด๋ํ ๊ฐ
float dy: y์ถ์ผ๋ก ์ด๋ํ ๊ฐ
float sx: x์ถ์ผ๋ก scaleํ ๊ฐ
float sy: y์ถ์ผ๋ก scaleํ ๊ฐ
int flip: ์ข์ฐ ๋ฐ์ ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ
๋์:
์ฃผ์ด์ง bounding box ์ ๋ณด๋ฅผ ์ด๋ํ๊ณ scaleํ ํ, ์ข์ฐ ๋ฐ์ ์ฌ๋ถ๋ฅผ ๊ณ ๋ คํ์ฌ ์์ ํฉ๋๋ค.
์ค๋ช :
๊ฐ bounding box ์ ๋ณด๋ (left, top), (right, bottom) ์ขํ๊ฐ๊ณผ ํด๋น ์์ญ์ ํด๋์ค ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง dx, dy, sx, sy๋ ๋ชจ๋ bounding box ์ขํ๊ฐ์ ์์ ํ๊ธฐ ์ํ ๊ฐ์ ๋๋ค.
boxes ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด, ๋จผ์ (left, top), (right, bottom) ์ขํ๊ฐ์ ์ด๋ํ๊ณ scaleํฉ๋๋ค.
์ดํ flip ๊ฐ์ด 1์ผ ๊ฒฝ์ฐ, ์ข์ฐ ๋ฐ์ ์ด ์ ์ฉ๋ฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์์ ๋ bounding box ์ ๋ณด๋ฅผ ๋ค์ (x, y, w, h) ํํ๋ก ๋ณํํฉ๋๋ค.
fill_truth_swag
ํจ์ ์ด๋ฆ: fill_truth_swag
์ ๋ ฅ:
char *path: ์ด๋ฏธ์ง ๊ฒฝ๋ก
float *truth: ๊ฐ ๊ฐ์ฒด์ ๋ํ ground truth ์ ๋ณด๋ฅผ ๋ด์ ๋ฐฐ์ด
int classes: ๋ถ๋ฅํ ํด๋์ค ์
int flip: ์ด๋ฏธ์ง๋ฅผ ์ํ์ผ๋ก ๋ค์ง์์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ
float dx: x ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ๊ฐ
float dy: y ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ๊ฐ
float sx: ์ด๋ฏธ์ง๋ฅผ x ๋ฐฉํฅ์ผ๋ก ํ๋ ๋๋ ์ถ์ํ ๋ฐฐ์จ
float sy: ์ด๋ฏธ์ง๋ฅผ y ๋ฐฉํฅ์ผ๋ก ํ๋ ๋๋ ์ถ์ํ ๋ฐฐ์จ
๋์:
์ ๋ ฅ๋ฐ์ ์ด๋ฏธ์ง์ label ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ฐพ์์ ํด๋น ํ์ผ๋ก๋ถํฐ ๊ฐ์ฒด์ ์์น์ ํฌ๊ธฐ ์ ๋ณด๋ฅผ ์ฝ์ด์ด
๊ฐ์ฒด์ ์์น์ ํฌ๊ธฐ ์ ๋ณด๋ฅผ ๋ฌด์์๋ก ์์ ํ, ์ด๋ฏธ์ง์ ๋ณํ๊ฐ์ ๋ฐ๋ผ ์์น์ ํฌ๊ธฐ ์ ๋ณด๋ฅผ ์์ ํจ
ground truth ๋ฐฐ์ด์ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ์ ์ฅํจ
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง ํ์ผ์ label ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ฐพ์์ ํด๋น ํ์ผ๋ก๋ถํฐ ๊ฐ์ฒด์ ์์น์ ํฌ๊ธฐ ์ ๋ณด๋ฅผ ์ฝ์ด์ด
์ฝ์ด์จ ์ ๋ณด๋ฅผ ๋ฌด์์๋ก ์์ ํ, ์ด๋ฏธ์ง์ ๋ณํ๊ฐ(dx, dy, sx, sy)์ ๋ฐ๋ผ ์์น์ ํฌ๊ธฐ ์ ๋ณด๋ฅผ ์์ ํจ
์์ ๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ground truth ๋ฐฐ์ด์ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ์ ์ฅํจ
ground truth ๋ฐฐ์ด์๋ ๊ฐ ๊ฐ์ฒด์ x, y ์ขํ, ๋๋น, ๋์ด ์ ๋ณด์ ํด๋์ค ์ ๋ณด๊ฐ ์ ์ฅ๋จ
๊ฐ์ฒด๊ฐ ํด๋์ค ์ค ์ด๋ค ๊ฒ์ธ์ง ๋ํ๋ด๋ ํด๋์ค ์ ๋ณด๋ one-hot encoding ๋ฐฉ์์ผ๋ก ์ ์ฅ๋จ
fill_truth_region
ํจ์ ์ด๋ฆ: fill_truth_region
์ ๋ ฅ:
path: char ํฌ์ธํฐ ํ์ . ๋ผ๋ฒจ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋ ๋ฌธ์์ด.
truth: float ํฌ์ธํฐ ํ์ . ์ค์ ๊ฐ(truth)์ด ์ฑ์์ง ๋ฐฐ์ด.
classes: int ํ์ . ํด๋์ค(class) ์.
num_boxes: int ํ์ . ๊ฐ ์ (cell)์ bounding box ๊ฐ์.
flip: int ํ์ . ์ด๋ฏธ์ง๋ฅผ ์ํ์ผ๋ก ๋ค์ง์์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋ณ์.
dx, dy, sx, sy: float ํ์ . ์ด๋ฏธ์ง๋ฅผ ๋ณํ(transform)ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ณ์๋ค.
๋์:
์ฃผ์ด์ง ๊ฒฝ๋ก์์ ๋ผ๋ฒจ ํ์ผ์ ์ฐพ์ ์ฝ๊ณ , bounding box๋ค์ ๋ฌด์์๋ก ์์(randomize).
bounding box๋ค์ ์ด๋ฏธ์ง ๋ณํ์ ๋ง๊ฒ ์์ (correct)ํ๊ณ , ๊ฐ ์ ์ ํด๋นํ๋ ์ธ๋ฑ์ค(index)๋ฅผ ๊ณ์ฐํจ.
๊ฐ bounding box์ ์ค์ ๊ฐ(truth)์ ๊ณ์ฐํ๊ณ , truth ๋ฐฐ์ด์ ์ ์ฅํจ.
์ค๋ช :
์ด ํจ์๋ YOLO ์๊ณ ๋ฆฌ์ฆ์์ bounding box๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํจ์์ ๋๋ค.
์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ๋ฐ์ ํด๋น ์ด๋ฏธ์ง์ ๋ผ๋ฒจ ํ์ผ์ ์ฐพ์์ bounding box ์ ๋ณด๋ฅผ ์ฝ์ ํ, ๊ฐ bounding box๋ฅผ ์ค์ ๊ฐ(truth)์ผ๋ก ๋ณํํ์ฌ truth ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค.
์ด๋, ์ด๋ฏธ์ง์ ๋ณํ๊ณผ ์ (cell)์ ๊ฐ์(num_boxes)๋ฅผ ๊ณ ๋ คํ์ฌ bounding box๋ค์ด ์ด๋ค ์ ์ ์ํ๋์ง ๊ณ์ฐํฉ๋๋ค.
์ด๋ ๊ฒ ๊ณ์ฐ๋ bounding box์ ์ค์ ๊ฐ์ (x,y,w,h) ํํ๋ก ์ ์ฅ๋๋ฉฐ, ๊ฐ bounding box์ ํด๋์ค(class) ์ ๋ณด๋ one-hot ์ธ์ฝ๋ฉ(one-hot encoding)์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
load_rle
ํจ์ ์ด๋ฆ: load_rle
์ ๋ ฅ:
im: image ํ์ ์ ์ด๋ฏธ์ง
rle: RLE ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ
n: RLE ๋ฐ์ดํฐ ๊ธธ์ด
๋์:
RLE ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋์ฝ๋ฉํ์ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ก ๋ณํํด์ฃผ๋ ํจ์
์ค๋ช :
RLE ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋์ฝ๋ฉํ์ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ก ๋ณํํ๋ค.
์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ(rle)๋ 0๊ณผ 1๋ก ๋ฒ๊ฐ์ ๊ฐ๋ฉฐ ๋ํ๋๋ฉฐ, ์ด๋ฅผ ๋์ฝ๋ฉํ์ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ก ๋ณํํ๋ค.
curr ๋ณ์๋ ํ์ฌ ๊ฐ์ ๋ํ๋ด๋ฉฐ, rle[i] ๊ฐ๋งํผ curr ๊ฐ์ ๋ฐ๋ณตํ์ฌ im.data์ ์ ์ฅํ๋ค.
count ๋ณ์๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ํ์ฌ ์์น๋ฅผ ๋ํ๋ด๋ฉฐ, ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ํฌ๊ธฐ(im.him.wim.c)๊ฐ ๋ ๋๊น์ง curr ๊ฐ์ ๋ฐ๋ณตํ์ฌ im.data์ ์ ์ฅํ๋ค.
or_image
ํจ์ ์ด๋ฆ: or_image
์ ๋ ฅ:
image src: ์์ค ์ด๋ฏธ์ง
image dest: ๋์ ์ด๋ฏธ์ง
int c: ์ฑ๋
๋์:
์์ค ์ด๋ฏธ์ง์์ ๊ฐ์ด 0์ด ์๋ ๋ชจ๋ ํฝ์ ์ ๋์ ์ด๋ฏธ์ง์์ ์ฃผ์ด์ง ์ฑ๋์ ๋ํด 1๋ก ์ค์ ๋ฉ๋๋ค.
์ค๋ช :
์์ค ์ด๋ฏธ์ง(src)์์ ๊ฐ์ด 0์ด ์๋ ๋ชจ๋ ํฝ์ ์ ๋์ ์ด๋ฏธ์ง(dest)์์ ์ฃผ์ด์ง ์ฑ๋(c)์ ๋ํด 1๋ก ์ค์ ๋ฉ๋๋ค.
์ฆ, ์์ค ์ด๋ฏธ์ง์์ ํฐ์ ๋ถ๋ถ์ dest ์ด๋ฏธ์ง์์ ํด๋น ์ฑ๋์๋ง 1๋ก ๋ํ๋๊ฒ ๋ฉ๋๋ค.
์ด ํจ์๋ ์ด๋ฏธ์ง๋ฅผ ์ด์งํํ ๋ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๊ฐ์ฒด ๊ฒ์ถ๊ณผ ๊ฐ์ ์์ ์ ์ํํ ๋, ๋ฌผ์ฒด๋ฅผ ๊ฒ์ถํ๊ธฐ ์ํด ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ด์งํํ ํ์๊ฐ ์์ต๋๋ค.
exclusive_image
ํจ์ ์ด๋ฆ: exclusive_image
์ ๋ ฅ:
์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ src
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ src ์ด๋ฏธ์ง์ ์ฑ๋ ์ค, ์ค์ง ํ๋์ ์ฑ๋์๋ง ๊ฐ์ด ์๋ ํฝ์ ๋ค๋ง ๋จ๊ธฐ๊ณ , ๋๋จธ์ง ์ฑ๋์ ๊ฐ์ 0์ผ๋ก ๋ง๋ ๋ค.
์ค๋ช :
src ์ด๋ฏธ์ง์ ๋๋น, ๋์ด, ์ฑ๋ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ํฝ์ ๋ฐ์ดํฐ๋ฅผ ์ผ๋ ฌ๋ก ๋์ดํ ํ, ์ฌ๋ฌ ์ฑ๋ ์ค์์ ๊ฐ์ด ์๋ ํฝ์ ์ ์ ํํ์ฌ ๊ทธ ์ธ์ ์ฑ๋์ ๊ฐ์ ๋ชจ๋ 0์ผ๋ก ๋ง๋ ๋ค.
์๋ฅผ ๋ค์ด, ์ ๋ ฅ ์ด๋ฏธ์ง๊ฐ RGB 3์ฑ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค๋ฉด, ๋นจ๊ฐ์ ์ฑ๋์๋ง ๊ฐ์ด ์๋ ํฝ์ ๋ค๋ง ์ ํํ์ฌ ๋๋จธ์ง ์ฑ๋์ ๊ฐ์ 0์ผ๋ก ๋ง๋ ๋ค. ์ด ๊ณผ์ ์ ์ด๋ก์, ํ๋์ ์ฑ๋์ ๋ํด์๋ ๋ฐ๋ณตํ๋ค.
์ต์ข ์ ์ผ๋ก ์ ๋ ฅ ์ด๋ฏธ์ง๋ ํ๋์ ์ฑ๋๋ง ๊ฐ์ ๊ฐ์ง๋ ์ด์ง ์ด๋ฏธ์ง๋ก ๋ณํ๋๋ค.
bound_image
ํจ์ ์ด๋ฆ: bound_image
์ ๋ ฅ:
image: ์ด๋ฏธ์ง
๋์:
์ด์งํ๋ ์ด๋ฏธ์ง์์ ๋ฐ์ด๋ฉ ๋ฐ์ค (bounding box)๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๋ฐ์ด๋ฉ ๋ฐ์ค๋ ์ด๋ฏธ์ง ๋ด์ ์๋ ๊ฐ์ฒด๊ฐ ํฌํจ๋์ด ์๋ ์ต์ํ์ ์ฌ๊ฐํ์ ๋๋ค.
์ค๋ช :
๋ฐ์ด๋ฉ ๋ฐ์ค๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด, ์ด๋ฏธ์ง ๋ด์ ๋ชจ๋ ํฝ์ ์ ํ์ํ๋ฉด์, ํฝ์ ์ ๊ฐ์ด 1 (ํฐ์)์ธ ๊ฒฝ์ฐ์๋ง ๋ฐ์ด๋ฉ ๋ฐ์ค๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์ด๋ฏธ์ง์ ๋๋น์ ๋์ด๋ฅผ ์ด์ฉํด, ์ต์ x, y ์ขํ์ ์ต๋ x, y ์ขํ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
๊ณ์ฐ๋ ์ขํ๋ฅผ ์ด์ฉํด, ๋ฐ์ด
fill_truth_iseg
ํจ์ ์ด๋ฆ: fill_truth_iseg
์ ๋ ฅ:
path: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก
num_boxes: ์ด๋ฏธ์ง ๋ด ๊ฐ์ฒด์ ์
truth: ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๋ด์ ๋ฐฐ์ด
classes: ํด๋์ค ์
w, h: ์ด๋ฏธ์ง์ ๋๋น์ ๋์ด
aug: ๊ฐ์ฒด ์ฆ๊ฐ(augmentation)์ ์ํ ์ธ์๊ฐ๋ค
flip: ์ด๋ฏธ์ง๋ฅผ ์ํ์ผ๋ก ๋ค์ง์์ง ์ฌ๋ถ
mw, mh: ๊ฐ์ฒด์ ๋ง์คํฌ(mask) ์ด๋ฏธ์ง์ ๋๋น์ ๋์ด
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก(path)๋ฅผ ์ด์ฉํ์ฌ ํด๋น ์ด๋ฏธ์ง์ ๊ฐ์ฒด ์ ๋ณด๋ฅผ ํฌํจํ๋ ํ์ผ์ ์ด๊ณ , ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ truth ๋ฐฐ์ด์ ์ ์ฅํ๋ ํจ์
๊ฐ์ฒด ์ ๋ณด๋ฅผ ํฌํจํ๋ ํ์ผ์ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก์์ 'images'๋ฅผ 'mask'๋ก ๋ณ๊ฒฝํ์ฌ ํด๋น ๊ฒฝ๋ก์์ ์ฐพ๋๋ค.
์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๊ฐ JPEGImages๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ์๋ 'mask'๋ก ๋ณ๊ฒฝํ๋ค.
๊ฐ์ฒด ์ ๋ณด๋ฅผ ํฌํจํ๋ ํ์ผ์ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก์์ ํ์ฅ์๋ฅผ .txt๋ก ๋ณ๊ฒฝํ ํ์ผ์ด๋ค.
ํ์ผ์ ์ด๊ณ , ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ํ ์ค์ฉ ์ฝ์ด์ ๊ฐ์ฒด์ ๋ง์คํฌ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ๋ค truth ๋ฐฐ์ด์ ๊ฐ์ฒด ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
num_boxes ์๋งํผ์ ๊ฐ์ฒด ์ ๋ณด๋ฅผ ์ ์ฅํ๊ฑฐ๋, ํ์ผ์ ๋ค ์ฝ์ด๋ค์ธ ๊ฒฝ์ฐ์๋ ๋๋จธ์ง truth ๋ฐฐ์ด ๊ณต๊ฐ์ -1๋ก ์ฑ์ด๋ค.
์ค๋ช :
์ด ํจ์๋ ๊ฐ์ฒด ๊ฒ์ถ ๋ชจ๋ธ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ํจ์๋ก, ์ด๋ฏธ์ง ๋ด ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ํฌํจํ๋ ๋ง์คํฌ(mask) ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ์์ ์ ์ํํ๋ค.
๊ฐ์ฒด ๊ฒ์ถ ๋ชจ๋ธ์์๋ ์ ๋ ฅ ์ด๋ฏธ์ง์ ํฌ๊ธฐ์ ๋น์จ์ด ๋ค์ํ๊ฒ ์กด์ฌํ๋ฏ๋ก, ๊ฐ์ฒด ์ฆ๊ฐ(augmentation)์ ์ํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ค์ํ๊ฒ ๋ง๋ค์ด ํ์ต ์ฑ๋ฅ์ ๋์ด๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
๊ฐ์ฒด ์ฆ๊ฐ(augmentation)์ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ํ์ , ์ด๋, ํ๋/์ถ์, ์ํ/์์ง ๋ฐ์ ๋ฑ์ ๋ณํ์ ๊ฐํ์ฌ ์ฌ๋ฌ ๊ฐ์ง ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ด ํจ์์์๋ ๊ฐ์ฒด ์ฆ๊ฐ(augmentation)์ ํ์ํ ์ธ์๊ฐ๋ค์ aug ์ธ์๋ก ๋ฐ๋๋ค.
๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ํฌํจํ๋ ํ์ผ์ COCO ๋ฐ์ดํฐ์ ์์ ์ฌ์ฉ๋๋ 'Run Length Encoding' ๋ฐฉ์์ ์ด์ฉํ์ฌ ๊ฐ์ฒด์ ์์น์ ํฌ๊ธฐ๋ฅผ ์ ์ฅํ ํ์ผ์ด๋ค.
๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ํฌํจํ๋ ํ์ผ์์ ์ฝ์ด๋ค์ธ ๋ฌธ์์ด์ read_intlist ํจ์๋ฅผ ์ด์ฉํ์ฌ RLE(Run Length Encoding) ๋ฐฉ์์ผ๋ก ์ ์ฅ๋ ๊ฐ์ ์ฝ์ด๋ค์ธ๋ค.
RLE ๋ฐฉ์์ ๊ฐ์ฒด์ ๋ง์คํฌ(mask) ์ด๋ฏธ์ง๋ฅผ ์์ถํ์ฌ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก, ๊ฐ์ฒด ์์ญ ๋ด ํฝ์ ๋ค์ ์ฐ์๋ ๊ฐ์ ๊ธธ์ด๋ฅผ ์ ์ฅํ์ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ ์ ์๋ค.
fill_truth_mask
ํจ์ ์ด๋ฆ: fill_truth_mask
์ ๋ ฅ:
path: ์ด๋ฏธ์ง ๊ฒฝ๋ก
num_boxes: ์ด๋ฏธ์ง์ ํฌํจ๋ bounding box ์
truth: bounding box ์ ๋ณด์ segmentation mask ์ ๋ณด๋ฅผ ๋ด์ ๋ฐฐ์ด
classes: ํด๋์ค ์
w: ์ด๋ฏธ์ง ๊ฐ๋ก ๊ธธ์ด
h: ์ด๋ฏธ์ง ์ธ๋ก ๊ธธ์ด
aug: ์ด๋ฏธ์ง augmentation ์ ๋ณด
flip: ์ด๋ฏธ์ง๋ฅผ ์ํ์ผ๋ก ๋ค์ง์์ง ์ฌ๋ถ
mw: segmentation mask ๊ฐ๋ก ๊ธธ์ด
mh: segmentation mask ์ธ๋ก ๊ธธ์ด
๋์:
์ด๋ฏธ์ง ๊ฒฝ๋ก์์ ํด๋น ์ด๋ฏธ์ง์ ๋ํ segmentation mask ์ ๋ณด ํ์ผ์ ์ฐพ์์ ์ด๊ณ , bounding box ์ ๋ณด์ ํจ๊ป truth ๋ฐฐ์ด์ ์ ๋ณด๋ฅผ ์ฑ์ด๋ค.
์ค๋ช :
์ด๋ฏธ์ง ๊ฒฝ๋ก์์ ํด๋น ์ด๋ฏธ์ง์ ๋ํ segmentation mask ์ ๋ณด ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋๋ค.
ํ์ผ์ ์ด๊ณ , ํ์ผ์ด ์์ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ค.
์ด๋ฏธ์ง์ ์ผ๋ถ๋ถ์ ์๋ฅธ ์ด๋ฏธ์ง(part)๋ฅผ ๋ง๋ค๊ณ , ํด๋น ์ด๋ฏธ์ง์ RLE ํํ์ segmentation mask ์ ๋ณด๋ฅผ ์ฝ์ด์จ๋ค.
part ์ด๋ฏธ์ง์ ๋ํด augmentation์ ์ ์ฉํ ํ, flip ์ฌ๋ถ์ ๋ฐ๋ผ ์ด๋ฏธ์ง๋ฅผ ์ํ์ผ๋ก ๋ค์ง๋๋ค.
part ์ด๋ฏธ์ง์ ๋ํ bounding box ์ ๋ณด๋ฅผ ์ป์ด์จ๋ค.
bounding box๊ฐ ์๋ ๊ฒฝ์ฐ, ํด๋น ์์ญ์ cropํ์ฌ mask ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฅผ resizeํ์ฌ mw x mh ํฌ๊ธฐ์ segmentation mask๋ก ๋ณํํ๋ค.
bounding box์ ์ค์ฌ์ ๊ณผ ํฌ๊ธฐ, ๊ทธ๋ฆฌ๊ณ segmentation mask ์ ๋ณด๋ฅผ truth ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
i๋ฅผ ์ฆ๊ฐ์ํค๊ณ , part ์ด๋ฏธ์ง์ rle ๋ฐฐ์ด์ ํด์ ํ๋ค.
num_boxes์ ๋๋ฌํ ๋๊น์ง ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉฐ, ํ์ผ์ ๋ซ๊ณ part ์ด๋ฏธ์ง๋ฅผ ํด์ ํ๋ค.
fill_truth_detection
ํจ์ ์ด๋ฆ: fill_truth_detection
์ ๋ ฅ:
path: ๋ผ๋ฒจ ํ์ผ ๊ฒฝ๋ก๋ฅผ ํฌํจํ๋ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก
num_boxes: ์ด๋ฏธ์ง์์ ๊ฐ์ ธ์ฌ ๋ฐ์ค ์
truth: ์ค์ ๊ฐ ๋ฐฐ์ด
classes: ํด๋์ค ์
flip: ์ด๋ฏธ์ง ๋ค์ง๊ธฐ ์ฌ๋ถ
dx, dy, sx, sy: ์ด๋ฏธ์ง ํ๋ ๋ฐ ์ด๋์ ๋ํ ์ธ์
๋์:
๋ผ๋ฒจ ํ์ผ์ ์ฝ์ด๋ค์ฌ์ ๋ฌด์์๋ก ์์ ํ, ๋ฐ์ค ์์น๋ฅผ ์์ ํ๋ค.
num_boxes ๊ฐ์๋งํผ ๋ฐ์ค๋ฅผ ๊ฐ์ ธ์์ ์ค์ ๊ฐ(truth) ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
์ ์ฅ๋ ๊ฐ์ ๊ฐ๊ฐ x, y, w, h, id ๋ก ์ด๋ฃจ์ด์ง๋ค.
์ค๋ช :
ํจ์๋ ์ฃผ์ด์ง ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก์ ๋ผ๋ฒจ ํ์ผ ๊ฒฝ๋ก๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ผ๋ฒจ ํ์ผ์ ์ฝ์ด๋ค์ธ๋ค.
๋ฐ์ค ์ ๋ณด๋ฅผ ์์ ํ์ฌ ๋ฐ์ดํฐ ์ฆ๊ฐ์ ์ํํ๋ค.
์ดํ num_boxes ๊ฐ์๋งํผ ๋ฐ์ค๋ฅผ ๊ฐ์ ธ์์ ์ค์ ๊ฐ ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
์ ์ฅ๋ ๊ฐ์ ๊ฐ๊ฐ ๋ฐ์ค์ x, y ์ขํ, ๋๋น w, ๋์ด h, ๊ทธ๋ฆฌ๊ณ ํด๋์ค id ๋ก ์ด๋ฃจ์ด์ง๋ค.
print_letters
ํจ์ ์ด๋ฆ: print_letters
์ ๋ ฅ:
float *pred: ๊ธ์ ์ธ์ ๋ชจ๋ธ์์ ์์ธก๋ ๋ฌธ์ ํ๋ฅ ๊ฐ์ ๋ด์ 1์ฐจ์ ๋ฐฐ์ด
int n: ์์ธก๋ ๋ฌธ์ ๊ฐ์
๋์:
pred ๋ฐฐ์ด์์ n๊ฐ์ ๋ฌธ์๋ฅผ ๊ฐ๊ฐ ์ถ์ถํ์ฌ ์์ธก๋ ๋ฌธ์ ํ๋ฅ ์ด ๊ฐ์ฅ ๋์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์
์ฐพ์ ์ธ๋ฑ์ค๋ฅผ int_to_alphanum ํจ์๋ฅผ ํตํด ๋ฌธ์๋ก ๋ณํํ์ฌ ์ถ๋ ฅ
๊ฐํ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ์ฌ ์ค๋ฐ๊ฟ
์ค๋ช :
์ ๋ ฅ๋ฐ์ pred ๋ฐฐ์ด์ NUMCHARS(37)๊ฐ์ ๊ธ์์ ๋ํ ํ๋ฅ ๊ฐ์ ๊ฐ์ง
๋ฐฐ์ด์ n๊ฐ์ ๋ฌธ์์ฉ ์๋ผ์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํจ
์ถ๋ ฅ๋ ๋ฌธ์์ด์ ์์ธก๋ ๋ฌธ์์ด์ ์๋ฏธํ๋ฉฐ, ํด๋น ํจ์๋ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ฝ๊ฒ ํ์ธํ๊ธฐ ์ํด ์ฌ์ฉ๋ ์ ์์
fill_truth_captcha
ํจ์ ์ด๋ฆ: fill_truth_captcha
์ ๋ ฅ:
char *path: ๋ ์ด๋ธ ํ์ผ ๊ฒฝ๋ก
int n: ๋ ์ด๋ธ ๋ฌธ์ ์
float *truth: ๋ ์ด๋ธ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ์ค์ํ ๋ฐฐ์ด
๋์:
์ฃผ์ด์ง ๋ ์ด๋ธ ํ์ผ ๊ฒฝ๋ก์์ ๋ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ์ฌ ์ฃผ์ด์ง ์ค์ํ ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค.
๋ ์ด๋ธ ํ์ผ์ ์ด๋ฆ์์ ๋ฌธ์๋ฅผ ์ถ์ถํ๊ณ , ๊ฐ ๋ฌธ์์ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ์ฌ ์ค์ํ ๋ฐฐ์ด์์ ํด๋น ์ธ๋ฑ์ค์ ๋ํ ๊ฐ์ 1๋ก ์ค์ ํฉ๋๋ค.
๋ ์ด๋ธ ํ์ผ ์ด๋ฆ์์ ๋ฌธ์๋ฅผ ์ถ์ถํ์ง ๋ชปํ ๊ฒฝ์ฐ์๋ ๋๋จธ์ง ๋ ์ด๋ธ ๋ฐ์ดํฐ์ ๊ฐ์ 1๋ก ์ค์ ํฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ captcha ๋ชจ๋ธ์์ ์ฌ์ฉ๋๋ฉฐ, captcha ์ด๋ฏธ์ง์ ๋ ์ด๋ธ์ ์ถ์ถํ์ฌ ์ค์ํ ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค.
ํจ์๋ ๋ฌธ์์ด์์ ๋ฌธ์๋ฅผ ์ถ์ถํ๊ณ , ๊ฐ ๋ฌธ์์ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ์ฌ ์ค์ํ ๋ฐฐ์ด์์ ํด๋น ์ธ๋ฑ์ค์ ๋ํ ๊ฐ์ 1๋ก ์ค์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ฌธ์ "A"์ ์ธ๋ฑ์ค๋ 0์ด๋ฉฐ, ๋ฌธ์ "Z"์ ์ธ๋ฑ์ค๋ 25์ ๋๋ค.
์ถ์ถํ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ์ฃผ์ด์ง ๋ ์ด๋ธ ๋ฌธ์ ์๋ณด๋ค ์์ ๊ฒฝ์ฐ, ๋๋จธ์ง ๋ ์ด๋ธ ๋ฐ์ดํฐ์ ๊ฐ์ 1๋ก ์ค์ ํฉ๋๋ค.
load_data_captcha
ํจ์ ์ด๋ฆ: load_data_captcha
์ ๋ ฅ:
char **paths: ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ค์ ๋ด์ ๋ฌธ์์ด ๋ฐฐ์ด
int n: ์ด๋ฏธ์ง์ ๊ฐ์
int m: ๋ฌด์์ ์ํ๋งํ ์ด๋ฏธ์ง์ ๊ฐ์
int k: ์บก์ฐจ์ ๊ธ์ ์
int w: ์ด๋ฏธ์ง์ ๋๋น
int h: ์ด๋ฏธ์ง์ ๋์ด
๋์:
์บก์ฐจ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ณ , ์ ๋ ฅ ์ด๋ฏธ์ง์ ์ ๋ต(label)์ ๋ด์ ํ๋ ฌ์ ๋ฐํํ๋ค.
get_random_paths() ํจ์๋ฅผ ์ด์ฉํ์ฌ paths ๋ฐฐ์ด์์ m๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ฌด์์๋ก ์ ํํ๋ค. m์ด 0์ธ ๊ฒฝ์ฐ, ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ค.
load_image_paths() ํจ์๋ฅผ ์ด์ฉํ์ฌ paths ๋ฐฐ์ด์ ์๋ ์ด๋ฏธ์ง๋ค์ ๋ก๋ํ๊ณ , d.X์ ํ ๋นํ๋ค.
์ ๋ต์ ์ ์ฅํ d.y ํ๋ ฌ์ ๋ง๋ค๊ณ , fill_truth_captcha() ํจ์๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ์ด๋ฏธ์ง์ ์ ๋ต(label)์ ์ค์ ํ๋ค.
๋ง์ฝ m์ด 0์ด ์๋ ๊ฒฝ์ฐ, get_random_paths() ํจ์๋ฅผ ํตํด ํ ๋น๋ paths ๋ฐฐ์ด์ ํด์ ํ๋ค.
์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ data ํ์ ์ ๊ตฌ์กฐ์ฒด d๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ด๋ฏธ์ง๋ค์ ๋ถ๋ฌ์ ์บก์ฐจ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด ๋ฐํํ๋ ํจ์์ด๋ค.
๋ฌด์์ ์ํ๋ง์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ผ๋ก, ํ์ต ๋ฐ์ดํฐ์ ๋ค์์ฑ์ ๋์ด๊ณ overfitting์ ๋ฐฉ์งํ ์ ์๋ค.
load_image_paths() ํจ์์ fill_truth_captcha() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ์ ๋ต ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ํ ๋นํ๋ค.
load_data_captcha_encode
ํจ์ ์ด๋ฆ: load_data_captcha_encode
์ ๋ ฅ:
paths: char ํ์์ ์ด์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด. ๋ฐ์ดํฐ ๊ฒฝ๋ก๊ฐ ์ ์ฅ๋์ด ์๋ค.
n: int ํ์. paths ๋ฐฐ์ด์ ํฌ๊ธฐ์ด์ ๋ก๋ํ ์ด๋ฏธ์ง ์.
m: int ํ์. paths ๋ฐฐ์ด์์ ๋ฌด์์๋ก ์ ํํ ์ด๋ฏธ์ง์ ์. 0์ด๋ฉด ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ค.
w: int ํ์. ๋ก๋ํ ์ด๋ฏธ์ง์ ๊ฐ๋ก ํฌ๊ธฐ.
h: int ํ์. ๋ก๋ํ ์ด๋ฏธ์ง์ ์ธ๋ก ํฌ๊ธฐ.
๋์:
paths ๋ฐฐ์ด์์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ์ฌ ๋ฐํํ๋ ํจ์์ด๋ค. m์ด 0์ด ์๋ ๊ฒฝ์ฐ, paths ๋ฐฐ์ด์์ m๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ฌด์์๋ก ์ ํํ์ฌ ๋ก๋ํ๋ค.
๋ก๋๋ ์ด๋ฏธ์ง๋ฅผ ์ด์ฐจ์ ํ๋ ฌ ํํ๋ก ์ ์ฅํ๋ฉฐ, X์ y์ ๋ชจ๋ ํ ๋นํ๋ค. X์ y๋ ๊ฐ์ ๊ฐ์ ๊ฐ์ง๋ค.
์ค๋ช :
์ด ํจ์๋ ์ง์ ๋ ๊ฒฝ๋ก์์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ์ฌ ๋ฐํํ๋ ํจ์์ด๋ค. ๋ฐ์ดํฐ ์ฆ๊ฐ์ ์ํํ์ง ์๊ณ , ๊ทธ๋๋ก ๋ก๋ํ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋ค.
์ด ํจ์๋ ์ฃผ๋ก CAPTCHA ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฅํ๊ธฐ ์ํ ๋ฐ์ดํฐ์ ์ ๋ก๋ํ ๋ ์ฌ์ฉ๋๋ค. ๋ฐํ๋ ๊ฐ์ data ๊ตฌ์กฐ์ฒด ํํ๋ก ๋ฐํ๋๋ค.
fill_truth
ํจ์ ์ด๋ฆ: fill_truth
์ ๋ ฅ:
path: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด ํฌ์ธํฐ
labels: ๋ ์ด๋ธ ๋ฐฐ์ด์ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด ํฌ์ธํฐ ๋ฐฐ์ด
k: ๋ ์ด๋ธ ๊ฐ์
๋์:
truth ๋ฐฐ์ด์ ํด๋น ์ด๋ฏธ์ง์ ๋ ์ด๋ธ ๊ฐ์ ์ฑ์
ํด๋น ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก(path)์ ๋ ์ด๋ธ(labels)์ด ํฌํจ๋์ด ์์ผ๋ฉด ํด๋น ๋ ์ด๋ธ์ ์ธ๋ฑ์ค ์์น์ truth ๊ฐ์ 1๋ก ์ค์ ํจ
๋ ์ด๋ธ(labels) ์ค ํด๋น ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก(path)์ ํฌํจ๋ ๋ ์ด๋ธ์ด 2๊ฐ ์ด์ ๋๋ 0๊ฐ์ธ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง ์ถ๋ ฅ
์ค๋ช :
์ด ํจ์๋ ์ด๋ฏธ์ง ํ์ผ์ ์ค์ ๋ ์ด๋ธ ๊ฐ์ ๊ฐ์ ธ์ truth ๋ฐฐ์ด์ ์ ์ฅํ๋ ํจ์์ ๋๋ค.
ํด๋น ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก(path)์์ ๋ ์ด๋ธ(labels) ์ค ํฌํจ๋ ๋ ์ด๋ธ์ ์ฐพ์ ํด๋น ๋ ์ด๋ธ์ ์ธ๋ฑ์ค ์์น์ truth ๊ฐ์ 1๋ก ์ค์ ํฉ๋๋ค.
์ด๋ ๋ ์ด๋ธ(labels)์ ๊ฐ์(k)๊ฐ 1์ธ ๊ฒฝ์ฐ ํด๋น ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก(path)์์ ๋ ์ด๋ธ์ด ๋ฐ๊ฒฌ๋์ง ์๋ ๊ฒฝ์ฐ๋ ํ์ฉ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ ์ด๋ธ(labels)์ ๊ฐ์(k)๊ฐ 2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ ํด๋น ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก(path)์์ ๋ ์ด๋ธ์ด 2๊ฐ ์ด์ ๋ฐ๊ฒฌ๋๊ฑฐ๋ 0๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์๋ฌ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
fill_hierarchy
ํจ์ ์ด๋ฆ: fill_hierarchy
์ ๋ ฅ:
float *truth: ์ค์ ๋ ์ด๋ธ ๊ฐ๋ค์ ๋ฐฐ์ด ํฌ์ธํฐ
int k: ๋ ์ด๋ธ์ ๊ฐ์
tree *hierarchy: ๋ ์ด๋ธ๋ค์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ ํธ๋ฆฌ ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ
๋์:
์ค์ ๋ ์ด๋ธ ๊ฐ์ ๊ณ์ธต ๊ตฌ์กฐ์ ๋ง๊ฒ ๋ณํํ๋ ํจ์๋ก, ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ ๋ถ๋ชจ ๋ ธ๋๋ค๋ ๋ชจ๋ 1๋ก ์ฑ์ฐ๊ณ , ํ์ ๊ทธ๋ฃน์ ์ํ ๋ ์ด๋ธ๋ค์ด ํ๋๋ ์กด์ฌํ์ง ์์ผ๋ฉด ๊ทธ๋ฃน ์ ์ฒด๋ฅผ SECRET_NUM ๊ฐ์ผ๋ก ์ฑ์
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ truth ๋ฐฐ์ด ํฌ์ธํฐ์ ๋ํด ๊ณ์ธต ๊ตฌ์กฐ์ ๋ง๊ฒ ๋ณํํ๋ ํจ์์ ๋๋ค.
๊ณ์ธต ๊ตฌ์กฐ์์ ํ์ ๋ ์ด๋ธ์ ์์ ๋ ์ด๋ธ์ ๋ชจ๋ ํฌํจํ๋ฏ๋ก, ์์ ๋ ์ด๋ธ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ํด๋น ๋ ์ด๋ธ๋ 1๋ก ์ฑ์๋๋ค.
์ดํ ํ์ ๊ทธ๋ฃน์ ์ํ ๋ ์ด๋ธ๋ค์ด ํ๋๋ ์กด์ฌํ์ง ์์ผ๋ฉด ๊ทธ๋ฃน ์ ์ฒด๋ฅผ SECRET_NUM ๊ฐ์ผ๋ก ์ฑ์๋๋ค.
load_regression_labels_paths
ํจ์ ์ด๋ฆ: load_regression_labels_paths
์ ๋ ฅ:
paths: char ** ํ์ , ๋ ์ด๋ธ ํ์ผ ๊ฒฝ๋ก๊ฐ ๋ค์ด์๋ ๋ฌธ์์ด ๋ฐฐ์ด
n: int ํ์ , ๊ฒฝ๋ก์ ๊ฐ์
k: int ํ์ , ๋ ์ด๋ธ์ ๊ฐ์
๋์:
๋ ์ด๋ธ ํ์ผ ๊ฒฝ๋ก์์ ๋ ์ด๋ธ ๊ฐ์ ์ฝ์ด์์ n x k ํฌ๊ธฐ์ ํ๋ ฌ y์ ์ ์ฅํ๋ค.
์ค๋ช :
make_matrix ํจ์๋ฅผ ์ด์ฉํ์ฌ n x k ํฌ๊ธฐ์ ํ๋ ฌ y๋ฅผ ์์ฑํ๋ค.
paths ๋ฐฐ์ด์์ ๊ฐ ๊ฒฝ๋ก๋ฅผ ์ฝ์ด์ ํด๋น ์ด๋ฏธ์ง์ ๋ํ ๋ ์ด๋ธ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์์ฑํ๋ค.
์์ฑ๋ ๋ ์ด๋ธ ํ์ผ ๊ฒฝ๋ก์์ ๋ ์ด๋ธ ๊ฐ์ ์ฝ์ด์์ y์ ์ ์ฅํ๋ค.
์ด ๊ณผ์ ์ ๋ชจ๋ ๊ฒฝ๋ก์ ๋ํด ๋ฐ๋ณตํ๊ณ , ์ต์ข ์ ์ผ๋ก y๋ฅผ ๋ฐํํ๋ค.
load_labels_paths
ํจ์ ์ด๋ฆ: load_labels_paths
์ ๋ ฅ:
paths: ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐฐ์ด(char**)
n: ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐฐ์ด(paths)์ ๊ธธ์ด(int)
labels: ํด๋์ค ๋ ์ด๋ธ ๋ฐฐ์ด(char**)
k: ํด๋์ค ๋ ์ด๋ธ ๋ฐฐ์ด(labels)์ ๊ธธ์ด(int)
hierarchy: ํด๋์ค ๋ ์ด๋ธ ๊ณ์ธต ๊ตฌ์กฐ(tree*)
๋์:
์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐฐ์ด(paths)์ ํด๋์ค ๋ ์ด๋ธ ๋ฐฐ์ด(labels)์ ์ ๋ ฅ ๋ฐ์ ๊ฐ ์ด๋ฏธ์ง์ ํด๋์ค ๋ ์ด๋ธ์ ์ถ์ถํ์ฌ k๊ฐ์ ํด๋์ค์ ๋ํ one-hot ์ธ์ฝ๋ฉ๋ ๋ ์ด๋ธ ํ๋ ฌ(matrix) y๋ฅผ ์์ฑํ๋ค.
ํด๋์ค ๋ ์ด๋ธ ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ์๋ค๋ฉด ํด๋น ๊ณ์ธต ๊ตฌ์กฐ(hierarchy)๋ฅผ ์ด์ฉํ์ฌ y์ ๊ฐ ํ์ ๋ํด ์์ ํด๋์ค์ ๋ํ one-hot ์ธ์ฝ๋ฉ๋ ๋ ์ด๋ธ๋ก๋ ์ฑ์ด๋ค.
์ค๋ช :
์ ๋ ฅ๋ ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐฐ์ด(paths)์ ํด๋์ค ๋ ์ด๋ธ ๋ฐฐ์ด(labels)์ ์ด์ฉํ์ฌ ๊ฐ ์ด๋ฏธ์ง์ ํด๋์ค ๋ ์ด๋ธ์ ์ถ์ถํ๊ณ , ์ถ์ถ๋ ํด๋์ค ๋ ์ด๋ธ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ k๊ฐ์ ํด๋์ค์ ๋ํ one-hot ์ธ์ฝ๋ฉ๋ ๋ ์ด๋ธ ํ๋ ฌ(matrix) y๋ฅผ ์์ฑํ๋ค.
๋ง์ฝ ํด๋์ค ๋ ์ด๋ธ ๊ณ์ธต ๊ตฌ์กฐ(hierarchy)๊ฐ ์๋ค๋ฉด, ํด๋น ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ y์ ๊ฐ ํ์ ๋ํด ์์ ํด๋์ค์ ๋ํ one-hot ์ธ์ฝ๋ฉ๋ ๋ ์ด๋ธ๋ก๋ ์ฑ์ด๋ค.
์ต์ข ์ ์ผ๋ก ์์ฑ๋ ๋ ์ด๋ธ ํ๋ ฌ(matrix) y๋ฅผ ๋ฐํํ๋ค.
load_tags_paths
ํจ์ ์ด๋ฆ: load_tags_paths
์ ๋ ฅ:
char **paths: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ์ฅํ ๋ฌธ์์ด ๋ฐฐ์ด
int n: ์ด๋ฏธ์ง ํ์ผ์ ๊ฐ์
int k: ํ๊ทธ์ ๊ฐ์
๋์:
n๊ฐ์ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ฐ์์ ํด๋น ์ด๋ฏธ์ง ํ์ผ์ ๋ํ ํ๊ทธ๋ฅผ ์ฝ์ด๋ค์ฌ์ k์ฐจ์์ one-hot encoding๋ ๋ฒกํฐ๋ก ๋ณํํ์ฌ matrix ํ์ ์ y์ ์ ์ฅํ๋ค.
ํ์ผ์ ์ด์ง ๋ชปํ ๊ฒฝ์ฐ(ํ๊ทธ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ) ๊ฑด๋๋ด๋ค.
์ค๋ช :
์ฃผ์ด์ง ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก paths์์ ".jpg"๋ฅผ ".txt"๋ก ๋ฐ๊พธ์ด์ ํด๋น ์ด๋ฏธ์ง์ ๋ํ ํ๊ทธ ํ์ผ ๊ฒฝ๋ก label์ ์์ฑํ๋ค.
ํด๋น label ํ์ผ์ ์ด๊ณ , ํ ์ค์ฉ ์ฝ์ผ๋ฉด์ ํ๊ทธ๊ฐ ์์ผ๋ฉด one-hot encoding๋ ๋ฒกํฐ y.vals[i]์ ์ ์ฅํ๋ค.
์ด๋ฏธ์ง ํ์ผ์ด ์กด์ฌํ์ง ์๊ฑฐ๋, ํ์ผ์ ์ด์ง ๋ชปํ ๊ฒฝ์ฐ, ํด๋น ์ด๋ฏธ์ง ํ์ผ์ ๊ฑด๋๋ด๋ค.
์ต์ข ์ ์ผ๋ก n๊ฐ์ ์ด๋ฏธ์ง์ ๋ํ ํ๊ทธ๋ค์ด one-hot encoding๋ matrix y๋ฅผ ๋ฐํํ๋ค.
get_labels
ํจ์ ์ด๋ฆ: get_labels
์ ๋ ฅ:
filename: ๋ฌธ์์ด
๋์:
์ฃผ์ด์ง filename์ผ๋ก๋ถํฐ ์ด๋ฏธ์ง ํ์ผ๋ค์ ๋์ํ๋ ๋ผ๋ฒจ ํ์ผ๋ค์ ๊ฒฝ๋ก๋ค์ ๊ฐ์ ธ์์, ํด๋น ๊ฒฝ๋ก๋ค์ ๋ฌธ์์ด ๋ฐฐ์ด๋ก ๋ณํํ ํ ๋ฐํํจ.
์ค๋ช :
get_paths ํจ์๋ฅผ ํธ์ถํ์ฌ ์ฃผ์ด์ง filename์์ ์ด๋ฏธ์ง ํ์ผ๋ค์ ๊ฒฝ๋ก๋ค์ ๊ฐ์ ธ์ด.
๊ฐ์ ธ์จ ๊ฒฝ๋ก๋ค์ ์ด์ฉํ์ฌ ๊ฐ ์ด๋ฏธ์ง ํ์ผ์ ๋์ํ๋ ๋ผ๋ฒจ ํ์ผ๋ค์ ๊ฒฝ๋ก๋ฅผ ์์ฑํจ.
์์ฑ๋ ๋ผ๋ฒจ ํ์ผ ๊ฒฝ๋ก๋ค์ ๋ฌธ์์ด ๋ฐฐ์ด๋ก ๋ณํํ์ฌ ๋ฐํํจ.
ํจ์ ๋ด๋ถ์์ ์ฌ์ฉ๋ list_to_array์ free_list ํจ์๋ ์ฃผ์ด์ง ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๋ฐฐ์ด๋ก ๋ณํํ๊ณ , ๋ณํ๋ ๋ฐฐ์ด์ ์ฌ์ฉํ ํ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ์ํํ๋ ํจ์๋ค์.
free_data
ํจ์ ์ด๋ฆ: free_data
์ ๋ ฅ:
data: data ๊ตฌ์กฐ์ฒด
๋์:
์ฃผ์ด์ง data ๊ตฌ์กฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํจ. ๋ง์ฝ d ๊ตฌ์กฐ์ฒด๊ฐ shallow์ด ์๋๋ฉด, X์ y์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ณ , shallow์ด๋ฉด vals ๋ฐฐ์ด์ ํด์ ํจ.
์ค๋ช :
data ๊ตฌ์กฐ์ฒด๋ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๊ตฌ์กฐ์ฒด์
X๋ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ matrix ๊ตฌ์กฐ์ฒด
y๋ ์ถ๋ ฅ ๋ฐ์ดํฐ(์ ๋ต)๋ฅผ ๋ด๊ณ ์๋ matrix ๊ตฌ์กฐ์ฒด
shallow์ X์ y์ vals ๋ฐฐ์ด์ ๊ณต์ ํ๊ณ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋
๋ง์ฝ shallow์ด ์๋๋ฉด, X์ y์ vals ๋ฐฐ์ด์ ๊ฐ๋ณ์ ์ผ๋ก ํ ๋นํ์ฌ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ ํด์ ์์๋ ๊ฐ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ผ ํจ
ํ์ง๋ง shallow์ด๋ฉด X์ y๊ฐ ๊ฐ์ vals ๋ฐฐ์ด์ ๊ณต์ ํ๊ณ ์์ผ๋ฏ๋ก, vals ๋ฐฐ์ด๋ง ํด์ ํ๋ฉด ๋จ.
get_segmentation_image
ํจ์ ์ด๋ฆ: load_data_mask
์ ๋ ฅ:
n (int): ๋ฐ์ดํฐ์ ์ ์๋ ์ด๋ฏธ์ง ์
paths (char **): ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๋ฐฐ์ด
m (int): ๋ฌด์์๋ก ์ ํํ ์ด๋ฏธ์ง์ ์
w (int): ์ด๋ฏธ์ง ๊ฐ๋ก ๊ธธ์ด
h (int): ์ด๋ฏธ์ง ์ธ๋ก ๊ธธ์ด
classes (int): ๊ฐ์ฒด ํด๋์ค ์
boxes (int): ํ๋์ ์ด๋ฏธ์ง์์ ์ฒ๋ฆฌํ ๊ฐ์ฒด ์
coords (int): ๊ฐ์ฒด์ ์ขํ ์
min (int): ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ๋ฌด์์๋ก ๋ณํํ๊ธฐ ์ํ ์ต์ ๋น์จ
max (int): ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ๋ฌด์์๋ก ๋ณํํ๊ธฐ ์ํ ์ต๋ ๋น์จ
angle (float): ์ด๋ฏธ์ง ํ์ ๊ฐ๋ ๋ฒ์
aspect (float): ์ด๋ฏธ์ง ํฌ๊ธฐ ๋น์จ ๋ฒ์
hue (float): ์ด๋ฏธ์ง ์์ ๋ณํ ๋ฒ์
saturation (float): ์ด๋ฏธ์ง ์ฑ๋ ๋ณํ ๋ฒ์
exposure (float): ์ด๋ฏธ์ง ๋ ธ์ถ ๋ณํ ๋ฒ์
๋์:
๋ฌด์์ ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ์ ํํ๊ณ ๋ฌด์์ ์ฆ๊ฐ ๊ธฐ๋ฒ์ ์ ์ฉํ์ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ณ , ๋ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ ๋ค.
์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ๋ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง ๊ฒฝ๋ก์์ n๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ค.
m์ด 0๋ณด๋ค ํฌ๋ฉด, ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐฐ์ด์์ ๋ฌด์์๋ก m๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ์ ํํ๋ค.
๋ก๋ํ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ฌด์์๋ก ์ฆ๊ฐํ์ฌ ํฌ๊ธฐ, ํ์ , ๋น์จ, ์์กฐ, ์ฑ๋, ๋ ธ์ถ ๋ฑ์ ๋ณํ์ ์ ์ฉํ๋ค.
์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ณ ์ฆ๊ฐํ๋ ๋์ ๊ฐ ์ด๋ฏธ์ง์ ๋ํ ๋ ์ด๋ธ์ ๋ง๋ ๋ค.
๋ ์ด๋ธ ๋ฐ์ดํฐ๋ ๊ฐ ๊ฐ์ฒด๋ง๋ค ์ขํ๊ฐ๊ณผ ๊ฐ์ฒด์ ํด๋์ค๋ฅผ ๋ด์ ๋ฒกํฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๋ชจ๋ ๊ฐ์ฒด์ ๋ฒกํฐ๋ ํ๋์ ํ๋ ฌ๋ก ๋ฌถ์ฌ ๋ฐํ๋๋ค.
์ต์ข ์ ์ผ๋ก, ๋ก๋ํ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ๋ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ๋ด์ data ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
get_segmentation_image2
load_data_seg
load_data_iseg
load_data_mask
ํจ์ ์ด๋ฆ: load_data_mask
์ ๋ ฅ:
n (int): ๋ฐ์ดํฐ์ ๊ฐ์
paths (char **): ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๊ฐ ๋ค์ด์๋ ๋ฌธ์์ด ๋ฐฐ์ด
m (int): paths ๋ฐฐ์ด์ ๊ธธ์ด
w (int): ๋ฆฌ์ฌ์ด์ฆํ ์ด๋ฏธ์ง์ ๊ฐ๋ก ๊ธธ์ด
h (int): ๋ฆฌ์ฌ์ด์ฆํ ์ด๋ฏธ์ง์ ์ธ๋ก ๊ธธ์ด
classes (int): ๊ฐ์ฒด ํด๋์ค์ ๊ฐ์
boxes (int): ์ด๋ฏธ์ง ๋น ๊ฐ์ฒด์ ์ต๋ ๊ฐ์
coords (int): ๊ฐ์ฒด ์ขํ์ ๊ฐ์
min (int): ๊ฐ์ฒด๊ฐ ์ฐจ์งํ๋ ์ต์ ๋ฉด์
max (int): ๊ฐ์ฒด๊ฐ ์ฐจ์งํ๋ ์ต๋ ๋ฉด์
angle (float): ํ์ ๊ฐ๋ ๋ฒ์
aspect (float): ๊ฐ๋ก ์ธ๋ก ๋น์จ ๋ฒ์
hue (float): ์์ ๋ณํ ๋ฒ์
saturation (float): ์ฑ๋ ๋ณํ ๋ฒ์
exposure (float): ๋ฐ๊ธฐ ๋ณํ ๋ฒ์
๋์:
์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก์์ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ด์ ๋ฐ์ดํฐ๋ฅผ ์์ฑ
๋ฐ์ดํฐ๋ resized ๋ฐ distorted๋ ์ด๋ฏธ์ง์ ๊ฐ์ฒด ์ขํ ์ ๋ณด๋ฅผ ๋ด์ ํ๋ ฌ๋ก ๊ตฌ์ฑ๋จ
์ค๋ช :
์ ๋ ฅ๋ n๊ฐ์ ์ด๋ฏธ์ง ํ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ด
๊ฐ ์ด๋ฏธ์ง๋ง๋ค ๊ฐ์ฒด ์ขํ ์ ๋ณด๋ฅผ ๋ด์ ํ๋ ฌ์ ์์ฑํ๋ฉฐ, ํ๋ ฌ์ ํฌ๊ธฐ๋ (coords+1)*boxes์
๊ฐ์ฒด์ ์ขํ ์ ๋ณด๋ (x, y, w, h) ํํ๋ก ์ ์ฅ๋จ
๊ฐ์ฒด์ ์ต์ ๋ฉด์ ๊ณผ ์ต๋ ๋ฉด์ ์ ์ง์ ํ์ฌ ์ด ๋ฒ์ ๋ด์์ ๋ฌด์์๋ก ๊ฐ์ฒด์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ฉฐ, ํ์ ๊ณผ ๊ฐ๋ก ์ธ๋ก ๋น์จ๋ ๋ฌด์์๋ก ๋ณํํจ
์์, ์ฑ๋, ๋ฐ๊ธฐ๋ฅผ ๋ฌด์์๋ก ๋ณํํ์ฌ ๋ฐ์ดํฐ๋ฅผ augmentํจ
load_data_region
ํจ์ ์ด๋ฆ: load_data_region
์ ๋ ฅ:
int n: ๋ฐ์ดํฐ์ ์ ์ด๋ฏธ์ง ๊ฐ์
char **paths: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๋ฐฐ์ด
int m: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๋ฐฐ์ด์ ๊ธธ์ด
int w: ๋ฆฌ์ฌ์ด์ฆํ ์ด๋ฏธ์ง์ ๊ฐ๋ก ํฌ๊ธฐ
int h: ๋ฆฌ์ฌ์ด์ฆํ ์ด๋ฏธ์ง์ ์ธ๋ก ํฌ๊ธฐ
int size: YOLO ๋คํธ์ํฌ์์ ์ฌ์ฉ๋๋ ๊ทธ๋ฆฌ๋ ์ ์ ํฌ๊ธฐ
int classes: ํด๋์ค ๊ฐ์
float jitter: ์ด๋ฏธ์ง๋ฅผ ์๋ผ๋ด๊ธฐ ์ํ ์์์ jittering ํฌ๊ธฐ
float hue: ์ด๋ฏธ์ง ์์ ์กฐ์ ์ ์ํ hue ๋ณํ ๋น์จ
float saturation: ์ด๋ฏธ์ง ์์ ์กฐ์ ์ ์ํ saturation ๋ณํ ๋น์จ
float exposure: ์ด๋ฏธ์ง ์์ ์กฐ์ ์ ์ํ exposure ๋ณํ ๋น์จ
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๋ฐฐ์ด์์ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ด๋ค์ธ ํ, ํด๋น ์ด๋ฏธ์ง๋ฅผ jitteringํ๊ณ ๋ฆฌ์ฌ์ด์ฆํ ๋ค YOLO ๋คํธ์ํฌ์์ ์ฌ์ฉํ ์ ์๋ ํํ๋ก ๋ณํํ์ฌ ๋ฐํํ๋ ํจ์์ ๋๋ค.
๋ฐํ๊ฐ์ผ๋ก๋ data ๊ตฌ์กฐ์ฒด๊ฐ ์ฌ์ฉ๋๋ฉฐ, ์ด ๊ตฌ์กฐ์ฒด์๋ ๋ฆฌ์ฌ์ด์ฆ ๋ฐ ๋ณํ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ํด๋น ์ด๋ฏธ์ง์ ๋ํ ground truth ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค.
์ค๋ช :
์ด ํจ์๋ YOLO ๋คํธ์ํฌ๋ฅผ ํ์ต์ํค๊ธฐ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ํจ์์ ๋๋ค.
์ ๋ ฅ์ผ๋ก ๋ฐ์ดํฐ์ ์ ์ด๋ฏธ์ง ๊ฐ์, ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๋ฐฐ์ด, ์ด๋ฏธ์ง ๋ฆฌ์ฌ์ด์ฆ ํฌ๊ธฐ, YOLO ๋คํธ์ํฌ์์ ์ฌ์ฉ๋๋ ๊ทธ๋ฆฌ๋ ์ ํฌ๊ธฐ, ํด๋์ค ๊ฐ์ ๋ฑ์ ๋ฐ์ต๋๋ค.
ํจ์๋ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๋ฐฐ์ด์์ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ด๋ค์ธ ํ, ํด๋น ์ด๋ฏธ์ง๋ฅผ jitteringํ๊ณ ๋ฆฌ์ฌ์ด์ฆํฉ๋๋ค.
์ดํ์๋ ํด๋น ์ด๋ฏธ์ง์ ๋ํ ground truth ์ ๋ณด๋ฅผ ์์ฑํ๊ณ , ๋ฆฌ์ฌ์ด์ฆํ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ํจ๊ป data ๊ตฌ์กฐ์ฒด์ ์ ์ฅํ์ฌ ๋ฐํํฉ๋๋ค.
์ด ๊ตฌ์กฐ์ฒด๋ YOLO ๋คํธ์ํฌ์์ ํ์ต์ ์ฌ์ฉ๋ฉ๋๋ค.
load_data_compare
ํจ์ ์ด๋ฆ: load_data_compare
์ ๋ ฅ:
n (int): ์ด๋ฏธ์ง ์์ ์
paths (char **): ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐฐ์ด
m (int): ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐฐ์ด์ ๊ธธ์ด, 0์ด๋ฉด ๊ฒฝ๋ก ๋ฐฐ์ด์ n๊ฐ์ ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ํฌํจ
classes (int): ๋ถ๋ฅ ํด๋์ค ์
w (int): ์ด๋ฏธ์ง์ ๊ฐ๋ก ํฌ๊ธฐ
h (int): ์ด๋ฏธ์ง์ ์ธ๋ก ํฌ๊ธฐ
๋์:
์ด๋ฏธ์ง ๊ฒฝ๋ก์์ ๋๋ค์ผ๋ก ์ด๋ฏธ์ง ์์ ๊ฐ์ ธ์จ ํ ๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ด๋ค์ธ๋ค.
์ฝ์ด๋ค์ธ ์ด๋ฏธ์ง๋ค์ ํ๋์ ๋ฐ์ดํฐ ํ๋ ฌ๋ก ๋ง๋ ๋ค.
๊ฐ ์ด๋ฏธ์ง ์์ ๋ํด ground truth(์ ๋ต ๋ ์ด๋ธ)์ ๊ฐ์ ธ์, ์ ์ ํ ํ์์ผ๋ก ๋ณํํ ํ, ๋ฐ์ดํฐ ํ๋ ฌ๊ณผ ํจ๊ป ๋ฆฌํดํ๋ค.
์ค๋ช :
load_data_compare ํจ์๋ ์ด๋ฏธ์ง ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ค์ด๊ณ ground truth(์ ๋ต ๋ ์ด๋ธ)์ ๊ฐ์ ธ์, ์ ์ ํ ํ์์ผ๋ก ๋ณํํ์ฌ ๋ฆฌํดํ๋ ํจ์์ด๋ค.
ํจ์์ ์ ๋ ฅ์ผ๋ก๋ ์ด๋ฏธ์ง ์์ ์, ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐฐ์ด, ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐฐ์ด์ ๊ธธ์ด, ๋ถ๋ฅ ํด๋์ค ์, ์ด๋ฏธ์ง์ ๊ฐ๋ก ํฌ๊ธฐ, ์ด๋ฏธ์ง์ ์ธ๋ก ํฌ๊ธฐ๊ฐ ๋ค์ด๊ฐ๋ค.
์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐฐ์ด์์ ๋๋ค์ผ๋ก ์ด๋ฏธ์ง ์์ ๊ฐ์ ธ์ค๊ณ , ๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ด๋ค์ธ ํ, ํ๋์ ๋ฐ์ดํฐ ํ๋ ฌ๋ก ๋ง๋ ๋ค.
ground truth(์ ๋ต ๋ ์ด๋ธ)์ ๊ฐ์ ธ์, ์ ์ ํ ํ์์ผ๋ก ๋ณํํ ํ, ๋ฐ์ดํฐ ํ๋ ฌ๊ณผ ํจ๊ป ๋ฆฌํดํ๋ค.
์ด ๋, classes์ ์๋งํผ ground truth(์ ๋ต ๋ ์ด๋ธ)์ ๋ง๋ค์ด์ผ ํ๋ฏ๋ก, 2*(classes) ํฌ๊ธฐ์ ํ๋ ฌ์ ๋ง๋ ๋ค.
์ด ํ๋ ฌ์ ์ง์ ์ธ๋ฑ์ค์๋ ์ฒซ ๋ฒ์งธ ์ด๋ฏธ์ง์ ground truth(์ ๋ต ๋ ์ด๋ธ), ํ์ ์ธ๋ฑ์ค์๋ ๋ ๋ฒ์งธ ์ด๋ฏธ์ง์ ground truth(์ ๋ต ๋ ์ด๋ธ)์ ์ ์ฅํ๋ค. ๊ฐ ground truth(์ ๋ต ๋ ์ด๋ธ)์ ์ด๋ฏธ์ง ์์ id์ iou ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ด ๊ฐ๋ค์ ์ ์ ํ ํ์์ผ๋ก ๋ณํํ๊ณ , ๋ฐ์ดํฐ ํ๋ ฌ๊ณผ ํจ๊ป ๋ฆฌํดํ๋ค.
load_data_swag
ํจ์ ์ด๋ฆ: load_data_swag
์ ๋ ฅ:
paths: ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐฐ์ด, char**
n: ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐฐ์ด์ ํฌ๊ธฐ, int
classes: ๊ฐ์ฒด ํด๋์ค ์, int
jitter: ์ด๋ฏธ์ง ์๋ฅด๊ธฐ ์ ๋, float
๋์:
paths์์ ์์์ ์ด๋ฏธ์ง๋ฅผ ์ ํํ๊ณ ํด๋น ์ด๋ฏธ์ง๋ฅผ ์ฝ์ด๋ค์ธ๋ค.
์ ํ๋ ์ด๋ฏธ์ง๋ฅผ jitter๋ฅผ ์ด์ฉํ์ฌ ์๋ฅด๊ณ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ค.
์๋ฅธ ์ด๋ฏธ์ง์์ ๋๋คํ๊ฒ crop์ ์ํํ๊ณ , crop๋ ์ด๋ฏธ์ง๋ฅผ flipํ๋ค.
crop ๋ฐ flip๋ ์ด๋ฏธ์ง์ ํด๋น ์ด๋ฏธ์ง์ label์ ๋ฐํํ๋ค.
์ค๋ช :
load_data_swag๋ ์ฃผ์ด์ง ์ด๋ฏธ์ง ๊ฒฝ๋ก ์ค ์์์ ์ด๋ฏธ์ง๋ฅผ ์ ํํ์ฌ ์๋ฅด๊ณ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉฐ, ๊ทธ์ ๋ฐ๋ฅธ label์ ๋ฐํํ๋ ํจ์์ด๋ค.
์ ๋ ฅ์ผ๋ก๋ ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐฐ์ด, ์ด๋ฏธ์ง ๊ฒฝ๋ก ๋ฐฐ์ด์ ํฌ๊ธฐ, ๊ฐ์ฒด ํด๋์ค ์, ์ด๋ฏธ์ง ์๋ฅด๊ธฐ ์ ๋๋ฅผ ๋ฐ๋๋ค.
๋จผ์ , paths์์ ๋๋คํ๊ฒ ์ด๋ฏธ์ง๋ฅผ ์ ํํ๊ณ ์ ํ๋ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ด๋ค์ธ๋ค.
๊ทธ ๋ค์, jitter๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์๋ฅด๊ณ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ค.
์๋ฅธ ์ด๋ฏธ์ง ์ค ๋๋คํ๊ฒ crop์ ์ํํ๊ณ , crop๋ ์ด๋ฏธ์ง๋ฅผ flipํ๋ค.
crop ๋ฐ flip๋ ์ด๋ฏธ์ง์ ํด๋น ์ด๋ฏธ์ง์ label์ matrix ํํ๋ก ๋ฐํํ๋ค.
load_data_detection
ํจ์ ์ด๋ฆ: load_data_detection
์ ๋ ฅ:
n: int ํํ์ ๋ฐ์ดํฐ ๊ฐ์
paths: char** ํํ์ ๋ฐ์ดํฐ ๊ฒฝ๋ก ๋ฐฐ์ด
m: int ํํ์ ๋ฐ์ดํฐ ๊ฒฝ๋ก ๊ฐ์
w: int ํํ์ ์ด๋ฏธ์ง ๊ฐ๋ก ํฌ๊ธฐ
h: int ํํ์ ์ด๋ฏธ์ง ์ธ๋ก ํฌ๊ธฐ
boxes: int ํํ์ ๋ฐ์ค ๊ฐ์
classes: int ํํ์ ํด๋์ค ๊ฐ์
jitter: float ํํ์ ์ด๋ฏธ์ง jittering ๋ฒ์
hue: float ํํ์ ์ด๋ฏธ์ง hue ๋ณํ ๋ฒ์
saturation: float ํํ์ ์ด๋ฏธ์ง saturation ๋ณํ ๋ฒ์
exposure: float ํํ์ ์ด๋ฏธ์ง exposure ๋ณํ ๋ฒ์
๋์:
์ ๋ ฅ๋ ๋ฐ์ดํฐ ๊ฒฝ๋ก์์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์์ data ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ฐํํ๋ ํจ์์ ๋๋ค.
๊ฐ ์ด๋ฏธ์ง๋ jittering, hue, saturation, exposure ๋ณํ ๋ฑ์ ์ฒ๋ฆฌ๋ฅผ ๊ฑฐ์นฉ๋๋ค.
๋ํ ๊ฐ ์ด๋ฏธ์ง์์๋ ground truth ์ ๋ณด๋ฅผ ์ถ์ถํ๊ณ , ์ด๋ฅผ y ๊ฐ์ผ๋ก ์ ์ฅํฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ๋ ๋ฐ์ดํฐ ๊ฒฝ๋ก์์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์์ ๊ฐ ์ด๋ฏธ์ง์ ๋ํด ๋ค์๊ณผ ๊ฐ์ ๋์์ ์ํํฉ๋๋ค.
๋ถ๋ฌ์จ ์ด๋ฏธ์ง๋ฅผ jitteringํ์ฌ ํฌ๊ธฐ๋ฅผ ๋๋คํ๊ฒ ๋ณํ์ํต๋๋ค.
๋ณํ๋ ์ด๋ฏธ์ง๋ฅผ ๋๋คํ๊ฒ flip ํฉ๋๋ค.
flip๋ ์ด๋ฏธ์ง๋ฅผ hue, saturation, exposure ๋ณํ๋ฅผ ์ฃผ์ด random distort ํฉ๋๋ค.
ground truth ์ ๋ณด๋ฅผ ์ถ์ถํ์ฌ y ๊ฐ์ผ๋ก ์ ์ฅํฉ๋๋ค.
์ฒ๋ฆฌ๋ ์ด๋ฏธ์ง๋ฅผ data ๊ตฌ์กฐ์ฒด X ๊ฐ์ ํ ๋นํฉ๋๋ค.
์ฒ๋ฆฌ๋ data ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
load_thread
ํจ์ ์ด๋ฆ: load_thread
์ ๋ ฅ:
void *ptr (void ํฌ์ธํฐ)
๋์:
์ค๋ ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ํจ์์ ๋๋ค.
load_args ๊ตฌ์กฐ์ฒด์ ์ ์ฅ๋ ์ ๋ ฅ ๋งค๊ฐ ๋ณ์๋ฅผ ํตํด ์ด๋ค ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ ์ง ๊ฒฐ์ ํ๊ณ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํฉ๋๋ค.
๋ก๋๋ ๋ฐ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๊ณ , load_args ๊ตฌ์กฐ์ฒด์์ ์ ๋ฌ๋ ํฌ์ธํฐ์ ์ ์ฅ๋ฉ๋๋ค.
์ค๋ช :
load_args ๊ตฌ์กฐ์ฒด๋ ๋ค์ํ ๋ฐ์ดํฐ ์ ํ์ ๋ํ ์ ๋ ฅ ๋งค๊ฐ ๋ณ์๋ฅผ ์ ์ฅํฉ๋๋ค.
์ ๋ ฅ ๋งค๊ฐ ๋ณ์๋ ๋ค์ํ ํํ์ ๋ฐ์ดํฐ ๋ก๋ ํจ์์ ์ ๋ฌ๋ฉ๋๋ค.
load_args ๊ตฌ์กฐ์ฒด์์ ํฌ์ธํฐ๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ ํด๋น ์ ํ์ ๋ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ฒด์ ์ ์ฅ๋ฉ๋๋ค.
ํจ์๊ฐ ๋๋๋ฉด, load_args ๊ตฌ์กฐ์ฒด๊ฐ ๋์ ์ผ๋ก ํ ๋น ํด์ ๋ฉ๋๋ค.
load_data_in_thread
ํจ์ ์ด๋ฆ: load_data_in_thread
์ ๋ ฅ:
args: ๋ฐ์ดํฐ ๋ก๋์ ํ์ํ ์ธ์๋ค์ ๋ด์ ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ
๋์:
๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ์ฐ๋ ๋๋ฅผ ์์ฑํ๊ณ , ์์ฑ๋ ์ฐ๋ ๋๋ฅผ ๋ฐํํจ.
์ค๋ช :
๋ฐ์ดํฐ ๋ก๋๋ฅผ ์ํด ํ์ํ ์ธ์๋ค์ ๋ด์ ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๋ฅผ ์ธ์๋ก ๋ฐ์.
์ธ์๋ก ๋ฐ์ ๊ตฌ์กฐ์ฒด๋ฅผ ๋์ ์ผ๋ก ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ์ ๋ณต์ฌํจ.
์์ฑ๋ ์ฐ๋ ๋๋ฅผ ๋ฐํํจ.
load_threads
ํจ์ ์ด๋ฆ: load_threads
์ ๋ ฅ:
void ํฌ์ธํฐ ptr
๋์:
์ฃผ์ด์ง ์ ๋ ฅ ์ธ์์ ๋ฐ๋ผ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋ํ๊ณ , ์ด๋ฅผ ์ค๋ ๋ ์์ ๋ฐ๋ผ ๋ถํ ํ์ฌ ๋ณ๋ ฌ ์ฒ๋ฆฌํ๋ค.
๊ฐ ์ค๋ ๋์์ ๋ก๋๋ ๋ฐ์ดํฐ๋ ๊ฐ๋ณ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ฒด์ ์ ์ฅ๋๊ณ , ์ด๋ค์ ํฉ์ณ์ ํ๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ฒด๋ก ๋ฐํํ๋ค.
์ค๋ช :
args: ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ธฐ ์ํ ๋งค๊ฐ๋ณ์๋ฅผ ๋ด๊ณ ์๋ ๊ตฌ์กฐ์ฒด
out: ๋ก๋๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๊ตฌ์กฐ์ฒด
total: ์ ์ฒด ์ด๋ฏธ์ง ๋ฐ์ดํฐ ๊ฐ์
buffers: ์ค๋ ๋๋ง๋ค ๋ก๋๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด
threads: ์์ฑ๋ ์ค๋ ๋๋ค์ ๋ฐฐ์ด
load_data_in_thread: ์ค๋ ๋์์ ์คํ๋๋ ํจ์, ๋ก๋๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ buffers์ ์ ์ฅํ๋ค.
concat_datas: buffers์ ์ ์ฅ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ค์ ํ๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ฒด๋ก ๋ณํฉํ๋ค.
free_data: ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํ๋ค.
load_data_blocking
ํจ์ ์ด๋ฆ: load_data_blocking
์ ๋ ฅ:
args: load_args (๊ตฌ์กฐ์ฒด ํฌ์ธํฐ)
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ args์ ์ ๋ณด๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ์์ ์ ์ํํ๋ค.
์ด ํจ์๋ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ค.
์ค๋ช :
load_args ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ์์ ์ ์ํํ๋ ํจ์์ด๋ค.
์ด ํจ์๋ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ฏ๋ก, ํจ์๊ฐ ์คํ๋๋ ๋์ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋ค.
load_data
ํจ์ ์ด๋ฆ: load_data
์ ๋ ฅ:
args: load_args ๊ตฌ์กฐ์ฒด
๋์:
์๋ก์ด ์ค๋ ๋๋ฅผ ์์ฑํ์ฌ load_threads ํจ์๋ฅผ ์คํํ๋๋ฐ, ์ด๋ load_args ๊ตฌ์กฐ์ฒด๋ฅผ ์ธ์๋ก ๋๊ฒจ์ค๋ค.
์์ฑ๋ ์ค๋ ๋์ ID๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
load_args: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก, ๋ผ๋ฒจ ํ์ผ ๊ฒฝ๋ก, ๋ฐฐ์น ํฌ๊ธฐ ๋ฑ์ ๋ด๊ณ ์๋ ๊ตฌ์กฐ์ฒด
pthread_t: POSIX ์ค๋ ๋ ID๋ฅผ ๋ํ๋ด๋ ๋ฐ์ดํฐ ํ์
calloc: ๋์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ธฐํํ๋ ํจ์
pthread_create: POSIX ์ค๋ ๋๋ฅผ ์์ฑํ๋ ํจ์
load_threads: ์ด๋ฏธ์ง์ ๋ผ๋ฒจ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ค์ด๋ ํจ์ (๋ฉํฐ์ค๋ ๋๋ก ๊ตฌํ)
error: ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ณ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋ ํจ์
load_data_writing
ํจ์ ์ด๋ฆ: load_data_writing
์ ๋ ฅ:
char **paths: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๋ฐฐ์ด
int n: ๊ฒฝ๋ก ๋ฐฐ์ด์ ๊ธธ์ด
int m: ๋ฌด์์ ์ํ๋ง์ ํ ๋ ์ฌ์ฉํ๋ ์ํ๋ง ์
int w: ์ด๋ฏธ์ง์ ๋๋น
int h: ์ด๋ฏธ์ง์ ๋์ด
int out_w: ์ถ๋ ฅ ์ด๋ฏธ์ง์ ๋๋น
int out_h: ์ถ๋ ฅ ์ด๋ฏธ์ง์ ๋์ด
๋์:
paths ๋ฐฐ์ด์์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ์ฌ X ํ๋ ฌ์ ์ ์ฅํ๊ณ , "-label.png"๋ก ๋๋๋ ํ์ผ๋ช ์ ์ฐพ์ y ํ๋ ฌ์ ์ ์ฅ
m์ด 0์ด ์๋๋ฉด, paths ๋ฐฐ์ด์์ m๊ฐ์ ๋ฌด์์ ๊ฒฝ๋ก๋ฅผ ์ ํํ์ฌ ๋ก๋
X์ y๋ float ํ์์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ตฌ์กฐ์ฒด
y๋ gray-scale ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ตฌ์กฐ์ฒด
์ค๋ช :
์ด ํจ์๋ "writing" ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง์ ์ถ๋ ฅ ์ด๋ฏธ์ง ๋ชจ๋ png ํ์์ด๋ฉฐ, ์ถ๋ ฅ ์ด๋ฏธ์ง๋ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋์ผํ ํฌ๊ธฐ๊ฐ ์๋ ์ ์์ต๋๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ ์ด๋ธ์ ์ ๋ ฅ ์ด๋ฏธ์ง ํ์ผ ์ด๋ฆ๊ณผ "-label.png"๋ฅผ ๋ถ์ธ ํ์ผ์ ์ ์ฅ๋์ด ์์ต๋๋ค.
load_data_old
ํจ์ ์ด๋ฆ: load_data_old
์ ๋ ฅ:
paths: char** ํ์ . ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๋ฐฐ์ด.
n: int ํ์ . ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๊ฐ์.
m: int ํ์ . ๋ฌด์์ ์ํ๋งํ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๊ฐ์. (0์ด๋ฉด ์ํ๋งํ์ง ์์)
labels: char** ํ์ . ์ด๋ฏธ์ง ํ์ผ์ ๋ํ ๋ ์ด๋ธ ๋ฐฐ์ด.
k: int ํ์ . ๋ ์ด๋ธ ๊ฐ์.
w: int ํ์ . ์ด๋ฏธ์ง ๊ฐ๋ก ๊ธธ์ด.
h: int ํ์ . ์ด๋ฏธ์ง ์ธ๋ก ๊ธธ์ด.
๋์:
์ด๋ฏธ์ง ํ์ผ๊ณผ ํด๋น ์ด๋ฏธ์ง์ ๋ํ ๋ ์ด๋ธ์ ๋ก๋ํ์ฌ data ๊ตฌ์กฐ์ฒด์ ์ ์ฅํ๋ค.
์ค๋ช :
์ด๋ฏธ์ง ํ์ผ๊ณผ ํด๋น ์ด๋ฏธ์ง์ ๋ํ ๋ ์ด๋ธ์ ๋ก๋ํ๋ ํจ์์ด๋ค.
์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก์ ๋ ์ด๋ธ ๋ฐฐ์ด, ๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ๋๋ค.
๋ง์ฝ ๋ฌด์์ ์ํ๋งํ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๊ฐ์(m)๊ฐ 0์ด ์๋๋ฉด get_random_paths ํจ์๋ฅผ ์ฌ์ฉํ์ฌ m๊ฐ์ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ฌด์์๋ก ์ ํํ๋ค.
๊ทธ๋ฆฌ๊ณ load_image_paths ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ํ์ผ์ ๋ก๋ํ๊ณ , load_labels_paths ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์ด๋ฏธ์ง์ ๋ํ ๋ ์ด๋ธ์ ๋ก๋ํ๋ค.
๋ง์ง๋ง์ผ๋ก, ๋ก๋ํ ์ด๋ฏธ์ง์ ๋ ์ด๋ธ์ data ๊ตฌ์กฐ์ฒด์ ์ ์ฅํ์ฌ ๋ฐํํ๋ค.
load_data_super
ํจ์ ์ด๋ฆ: load_data_super
์ ๋ ฅ:
char **paths: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๊ฐ ๋ด๊ธด ๋ฌธ์์ด ๋ฐฐ์ด
int n: ๋ฐ์ดํฐ์ ํฌ๊ธฐ
int m: ์ด๋ฏธ์ง์์ ์์๋ก ์ ํํ ์ด๋ฏธ์ง ์
int w: ์ ๋ ฅ ์ด๋ฏธ์ง ๋๋น
int h: ์ ๋ ฅ ์ด๋ฏธ์ง ๋์ด
int scale: ์์ ํด์๋ ์ด๋ฏธ์ง์ ํ์ ํด์๋ ์ด๋ฏธ์ง ๋น์จ
๋์:
์ฃผ์ด์ง ์ด๋ฏธ์ง ๊ฒฝ๋ก์์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์์ ์์ ํด์๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฐ์ดํฐ์ ์ ๋ก๋ํฉ๋๋ค.
๋ถ๋ฌ์จ ์ด๋ฏธ์ง๋ ์์์ ํฌ๊ธฐ๋ก ์๋ฅด๊ณ , ๋ค์ง์ด์ ์ํ์ข์ฐ ๋์นญ์ ๋ง๋ค๊ณ , ์์ ํด์๋์ ํ์ ํด์๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ญ๋๋ค. ์์ฑ๋ ์ด๋ฏธ์ง๋ ๋ฐ์ดํฐ์ ์ ์ ๋ ฅ ๊ฐ(X)๊ณผ ๋ชฉํ ๊ฐ(y)์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์ค๋ช :
data ๊ตฌ์กฐ์ฒด๋ฅผ ์ด๊ธฐํํ๊ณ , X์ y ๊ฐ์ด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง์ ๊ฐ์(n)๋ฅผ X์ y ํ์ ํฌ๊ธฐ๋ก ์ง์ ํฉ๋๋ค.
X์ y ์ด์ ํฌ๊ธฐ๋ฅผ ๊ฐ๊ฐ ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋๋น(w), ๋์ด(h), ์ฑ๋ ์(3)์ ๊ณฑ๊ณผ ํ์ ํด์๋ ์ด๋ฏธ์ง ํฌ๊ธฐ(wscale, hscale, 3)์ ๊ณฑ์ผ๋ก ์ง์ ํฉ๋๋ค.
์ ๋ ฅ๋ ์ด๋ฏธ์ง ๊ฒฝ๋ก์์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
๋ถ๋ฌ์จ ์ด๋ฏธ์ง๋ฅผ ์์์ ํฌ๊ธฐ๋ก ์๋ฅด๊ณ , ์ํ์ข์ฐ ๋์นญ์ ๋ง๋ญ๋๋ค.
์์ ํด์๋ ์ด๋ฏธ์ง์ ํ์ ํด์๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ๊ฐ X์ y ๊ฐ์ ํ ๋นํฉ๋๋ค.
๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์จ ํ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ณ , ์์ฑ๋ ๋ฐ์ดํฐ์ ์ ๋ฐํํฉ๋๋ค.
load_data_regression
ํจ์ ์ด๋ฆ: load_data_regression
์ ๋ ฅ:
paths: char ํ์ ์ ๊ฒฝ๋ก ๋ฐฐ์ด
n: int ํ์ ์ ๋ฐ์ดํฐ ๊ฐ์
m: int ํ์ ์ mini-batch ๊ฐ์
k: int ํ์ ์ ๋ผ๋ฒจ ๊ฐ์
min: int ํ์ ์ ์ด๋ฏธ์ง ํฝ์ ์ต์๊ฐ
max: int ํ์ ์ ์ด๋ฏธ์ง ํฝ์ ์ต๋๊ฐ
size: int ํ์ ์ ์ด๋ฏธ์ง ํฌ๊ธฐ
angle: float ํ์ ์ ์ด๋ฏธ์ง ํ์ ๊ฐ๋
aspect: float ํ์ ์ ์ด๋ฏธ์ง ๊ฐ๋ก ์ธ๋ก ๋น์จ
hue: float ํ์ ์ ์ด๋ฏธ์ง ์์กฐ ๋ณ๊ฒฝ ๊ฐ
saturation: float ํ์ ์ ์ด๋ฏธ์ง ์ฑ๋ ๋ณ๊ฒฝ ๊ฐ
exposure: float ํ์ ์ ์ด๋ฏธ์ง ๋ ธ์ถ ๋ณ๊ฒฝ ๊ฐ
๋์:
ํ๊ท ๋ถ์์ฉ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ณ , ์ด๋ฏธ์ง์ ๋ํ augmentation ์์ ์ ์ํํจ
์ค๋ช :
์ด ํจ์๋ ์ ๋ ฅ๋ฐ์ ๊ฒฝ๋ก ๋ฐฐ์ด(paths)๋ฅผ ์ด์ฉํ์ฌ ํ๊ท ๋ถ์์ฉ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํฉ๋๋ค.
๋ง์ฝ mini-batch ๊ฐ์(m)๊ฐ 0๋ณด๋ค ํฌ๋ฉด, ๊ฒฝ๋ก ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ๋๋คํ mini-batch ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ data ๊ตฌ์กฐ์ฒด๋ฅผ ์ด๊ธฐํํ๊ณ , ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ํ augmentation ์์ ์ ์ํํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ก๋ํ ๋ฐ์ดํฐ์ ๋ผ๋ฒจ์ data ๊ตฌ์กฐ์ฒด์ ํ ๋นํ๊ณ ๋ฐํํฉ๋๋ค.
select_data
ํจ์ ์ด๋ฆ: tile_data
์ ๋ ฅ:
data orig: ๋ณํํ ๋ฐ์ดํฐ์
int divs: ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ๋๋ ์
int size: ๋๋ ์ด๋ฏธ์ง์ ํฌ๊ธฐ
๋์:
์๋ณธ ์ด๋ฏธ์ง๋ฅผ divs x divs ๊ฐ์๋ก ๋๋๋ค.
๊ฐ ๋๋ ์ด๋ฏธ์ง๋ฅผ size x size ํฌ๊ธฐ๋ก ์กฐ์ ํ๋ค.
์กฐ์ ๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ง๊ณ ์๋ก์ด ๋ฐ์ดํฐ์ ์ ๋ง๋ ๋ค.
์ค๋ช :
์ด ํจ์๋ ์ด๋ฏธ์ง๋ฅผ ๋๋๊ณ ์กฐ์ ํ์ฌ ์๋ก์ด ๋ฐ์ดํฐ์ ์ ๋ง๋ค์ด์ฃผ๋ ํจ์์ด๋ค.
orig์๋ ์๋ณธ ์ด๋ฏธ์ง๊ฐ ๋ค์ด์ค๋ฉฐ, divs๋ ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ผ๋ง๋ ๋๋์ง๋ฅผ ๊ฒฐ์ ํ๊ณ size๋ ๊ฐ ๋๋ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ๋ค.
ํจ์๋ divs x divs ๊ฐ์๋ก ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ๋๋๊ณ , ๊ฐ ๋๋ ์ด๋ฏธ์ง๋ฅผ size x size ํฌ๊ธฐ๋ก ์กฐ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ ์กฐ์ ๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ง๊ณ ์๋ก์ด ๋ฐ์ดํฐ์ ์ ๋ง๋ ๋ค.
์ด ๋, shallow ๊ฐ์ 0์ผ๋ก ์ค์ ๋๋ฉฐ, d.X.vals์ d.y๋ ์๋ณธ ๋ฐ์ดํฐ์ ์์ ๋ณต์ฌ๋๋ค.
์ต์ข ์ ์ผ๋ก ๋ณํ๋ ๋ฐ์ดํฐ์ ์ data ํฌ์ธํฐ ๋ฐฐ์ด ํํ๋ก ๋ฆฌํด๋๋ค.
tile_data
resize_data
ํจ์ ์ด๋ฆ: resize_data
์ ๋ ฅ:
data orig: ์๋ ๋ฐ์ดํฐ
int w: ๊ฐ๋ก ํฌ๊ธฐ
int h: ์ธ๋ก ํฌ๊ธฐ
๋์:
orig์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ w x h ํฌ๊ธฐ๋ก ์กฐ์ (resize)
orig์ ๋ผ๋ฒจ ๋ฐ์ดํฐ๋ ๊ทธ๋๋ก ๋ณต์ฌํ์ฌ ๋ฐํ
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ orig ๋ฐ์ดํฐ์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ w x h ํฌ๊ธฐ๋ก ์กฐ์ ํ์ฌ ์๋ก์ด ๋ฐ์ดํฐ d๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ ํจ์์ ๋๋ค.
์๋ก ์์ฑ๋ ๋ฐ์ดํฐ d์ shallow ๋ฉค๋ฒ ๋ณ์๋ 0์ผ๋ก ์ค์ ๋ฉ๋๋ค.
orig์ ๋ผ๋ฒจ ๋ฐ์ดํฐ๋ ๊ทธ๋๋ก ๋ณต์ฌ๋์ด ๋ฐํ๋ฉ๋๋ค.
orig์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ฐ float_to_image ํจ์๋ก ์ด๋ฏธ์ง๋ก ๋ณํํ ํ, resize_image ํจ์๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ ํฉ๋๋ค.
์์ฑ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์๋ก์ด ๋ฐ์ดํฐ d์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ก ํ ๋นํฉ๋๋ค.
load_data_augment
ํจ์ ์ด๋ฆ: load_data_augment
์ ๋ ฅ:
paths: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ด์ ๋ฌธ์์ด ๋ฐฐ์ด
n: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก ๊ฐ์
m: ๋ฌด์์ ์ด๋ฏธ์ง ์ ์ ์ (์ ํ ์ฌํญ)
labels: ํด๋์ค ๋ ์ด๋ธ์ ๋ด์ ๋ฌธ์์ด ๋ฐฐ์ด
k: ํด๋์ค ์
hierarchy: ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ ์ฅํ tree ๊ตฌ์กฐ์ฒด
min: ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ๋ ์ต์ ํฌ๊ธฐ
max: ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ๋ ์ต๋ ํฌ๊ธฐ
size: ์ถ๋ ฅ ์ด๋ฏธ์ง ํฌ๊ธฐ
angle: ์ด๋ฏธ์ง ํ์ ๊ฐ๋ ๋ฒ์
aspect: ์ด๋ฏธ์ง ๋น์จ ๋ณ๊ฒฝ ๋น์จ ๋ฒ์
hue: ์ด๋ฏธ์ง ์์ ๋ฒ์
saturation: ์ด๋ฏธ์ง ์ฑ๋ ๋ฒ์
exposure: ์ด๋ฏธ์ง ๋ฐ๊ธฐ ๋ฒ์
center: ์ด๋ฏธ์ง ์ค์์์ ์๋ฅผ ์์ญ ํฌ๊ธฐ (์ ํ ์ฌํญ)
๋์:
์ง์ ๋ ๊ฒฝ๋ก์์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ด
์ง์ ๋ ํฌ๊ธฐ๋ก ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ณ ์ง์ ๋ augmentation์ ์ํํ์ฌ ๋ฐ์ดํฐ ์ฆ๊ฐ์ ํจ
ํด๋์ค ๋ ์ด๋ธ์ ๋ถ๋ฌ์ด
๊ณ์ธต ๊ตฌ์กฐ๊ฐ ์ง์ ๋์ด ์์ผ๋ฉด ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ ํด๋์ค ๋ ์ด๋ธ์ ์ ์ ํ๊ฒ ์์ ํจ
๊ฒฐ๊ณผ ๋ฐ์ดํฐ์ ์ ๋ฐํํจ
์ค๋ช :
์ฃผ์ด์ง ์ด๋ฏธ์ง ๊ฒฝ๋ก์์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ค๊ณ augmentation์ ์ํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฆ๊ฐ์ํค๋ ํจ์์ ๋๋ค.
์ด ํจ์๋ ํด๋์ค ๋ ์ด๋ธ๊ณผ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ ํด๋์ค ๋ ์ด๋ธ์ ์ ์ ํ๊ฒ ์์ ํฉ๋๋ค.
ํจ์์ ์ ๋ ฅ์ผ๋ก๋ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก, ํด๋์ค ๋ ์ด๋ธ, ๋ฐ์ดํฐ์ ํฌ๊ธฐ ๋ฑ์ด ์ฃผ์ด์ง๋๋ค.
์ด ํจ์๋ ๋ฐ์ดํฐ์ ์ ๋ฐํํฉ๋๋ค.
load_data_tag
ํจ์ ์ด๋ฆ: load_data_tag
์ ๋ ฅ:
char **paths: ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ด์ ๋ฐฐ์ด
int n: ๋ฐฐ์ด paths์ ๊ธธ์ด
int m: ๋๋ค์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์ ํํ์ฌ ๋ก๋ํ ๊ฐ์, 0์ด๋ฉด ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ๋ก๋
int k: ํด๋์ค ๊ฐ์
int min: ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ๋ ์ฌ์ฉํ ์ต์ ๋น์จ
int max: ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ๋ ์ฌ์ฉํ ์ต๋ ๋น์จ
int size: ๋ก๋ํ ์ด๋ฏธ์ง์ ํฌ๊ธฐ
float angle: ์ด๋ฏธ์ง ํ์ ๊ฐ๋ ๋ฒ์
float aspect: ์ด๋ฏธ์ง ๊ฐ๋ก/์ธ๋ก ๋น์จ ๋ฒ์
float hue: ์ด๋ฏธ์ง hue ์ฑ๋ ๋ฒ์
float saturation: ์ด๋ฏธ์ง ์ฑ๋ ๋ฒ์
float exposure: ์ด๋ฏธ์ง ๋ ธ์ถ ๋ฒ์
๋์:
paths ๋ฐฐ์ด์์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ณ augment๋ฅผ ์ ์ฉํ์ฌ data ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
m์ด 0์ด ์๋๋ฉด, paths ๋ฐฐ์ด์์ m๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋๋ค์ผ๋ก ์ ํํ์ฌ ๋ก๋ํ๋ค.
์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ ๋, ์ต์ ๋น์จ๊ณผ ์ต๋ ๋น์จ์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ค.
์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ ํ, augment๋ฅผ ์ ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ณํํ๋ค.
์ด๋ฏธ์ง์ ํ๊ทธ๋ฅผ ๋ก๋ํ๊ณ one-hot encodingํ์ฌ y ํ๋ ฌ์ ์ ์ฅํ๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ณ , augment๋ฅผ ์ ์ฉํ์ฌ ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ํจ์์ด๋ค.
๋ฐ์ดํฐ๊ฐ ๋ง์์ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ํ๋ฒ์ ๋ก๋ํ๊ธฐ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ด ๋ถ์กฑํ ๋, ์ผ๋ถ ์ด๋ฏธ์ง๋ง ๋ก๋ํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.
concat_matrix
ํจ์ ์ด๋ฆ: concat_matrix
์ ๋ ฅ:
๋ ๊ฐ์ matrix(m1, m2)
๋์:
๋ ๊ฐ์ matrix๋ฅผ ํ ๋ฐฉํฅ์ผ๋ก ์ด์ด ๋ถ์ธ ์๋ก์ด matrix๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
m1์ ํ๊ณผ m2์ ํ์ ํฉํ ์๋ก์ด matrix m์ ๋ง๋ ๋ค.
m์ ์ด์ m1์ ์ด๊ณผ ๊ฐ๋ค.
m1์ ๊ฐ ํ์ m์ ํ์ ๋ณต์ฌํ๊ณ , ๊ทธ ๋ค์ m2์ ๊ฐ ํ์ m์ ํ์ ๋ณต์ฌํ๋ค.
m์ ๋ฐํํ๋ค.
concat_data
ํจ์ ์ด๋ฆ: concat_data
์ ๋ ฅ:
data ํ์ ์ ๋ ๋ณ์ d1๊ณผ d2
๋์:
๋ ๊ฐ์ data ๋ณ์ d1๊ณผ d2๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ๋๋ค.
์๋ก์ด data ๋ณ์ d๋ฅผ ์ด๊ธฐํํ๋ค.
d1๊ณผ d2์ X์ y matrix๋ฅผ ๊ฐ๊ฐ concat_matrix ํจ์๋ฅผ ์ด์ฉํ์ฌ ํฉ์ณ์ d์ X์ y matrix์ ์ ์ฅํ๋ค.
d1์ w์ h ๊ฐ์ d์ w์ h ๊ฐ์ผ๋ก ๋์ ํ๋ค.
d์ shallow ๊ฐ์ 1์ ๋์ ํ๋ค.
์ค๋ช :
concat_data ํจ์๋ ๋ ๊ฐ์ data ๋ณ์๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์์ ์ด ๋ ๋ณ์์ X์ y matrix๋ฅผ ํฉ์ณ์ ์๋ก์ด data ๋ณ์๋ฅผ ์์ฑํ๋ ํจ์์ด๋ค.
ํฉ์ณ์ง X์ y matrix๋ ๊ฐ๊ฐ concat_matrix ํจ์๋ฅผ ์ด์ฉํ์ฌ ์๋ก์ด matrix๋ก ๋ง๋ค์ด์ง๋ค.
d1์ w์ h ๊ฐ์ d์ w์ h ๊ฐ์ผ๋ก ๋์ ํ๋ ๊ฒ์ ๋ matrix๊ฐ ํฉ์ณ์ง ๋ w์ h๊ฐ์ด ๋์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
d์ shallow ๊ฐ์ด 1์ธ ์ด์ ๋ d ๋ณ์์์ X์ y matrix๋ฅผ ๋ณต์ฌํ์ง ์๊ณ , ์ด์ ์ d1๊ณผ d2 ๋ณ์์์ ์ฌ์ฉ๋๋ matrix๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ shallow copy๊ฐ ์ผ์ด๋๋ ๊ฒ์ด๋ค.
concat_datas
ํจ์ ์ด๋ฆ: concat_datas
์ ๋ ฅ:
d: data ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด
n: ๋ฐฐ์ด์ ํฌ๊ธฐ
๋์:
์๋ก์ด ๋น data ๊ตฌ์กฐ์ฒด out์ ์์ฑ
d ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด concat_data ํจ์๋ฅผ ํธ์ถํ์ฌ out๊ณผ ํฉ์นจ
ํฉ์ณ์ง ๊ฒฐ๊ณผ๋ฅผ out์ ์ ์ฅํ๊ณ ์ด์ ์ ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ํด์
n๋ฒ ๋ฐ๋ณต ํ, ํฉ์ณ์ง ๋ฐ์ดํฐ out์ ๋ฐํ
์ค๋ช :
์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ์ ์ ํ๋๋ก ํฉ์น๋ ํจ์
์ ๋ ฅ์ผ๋ก ๋ฐ์ data ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด d๋ฅผ ํ๋์ฉ concat_data ํจ์๋ฅผ ํธ์ถํ์ฌ ํ๋์ data ๊ตฌ์กฐ์ฒด out์ผ๋ก ํฉ์นจ
d ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์๋ out๊ณผ ํฉ์ณ์ง๋ฉฐ, ์ดํ ๋ฐฐ์ด์ ๊ฐ ์์๋ out์ ์ด์ ๋ฐ์ดํฐ๊ฐ ํฉ์ณ์ง ์ํ์์ ์ถ๊ฐ๋ก ํฉ์ณ์ง
ํฉ์ณ์ง ๊ฒฐ๊ณผ๋ ์๋ก์ด data ๊ตฌ์กฐ์ฒด๋ก ์ ์ฅ๋๋ฉฐ, ์ด์ ์ ์์ฑ๋ ๋ฐ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋จ
load_categorical_data_csv
ํจ์ ์ด๋ฆ: load_categorical_data_csv
์ ๋ ฅ:
filename: CSV ํ์ผ ์ด๋ฆ
target: ํ๊ฒ ๋ณ์ ์ด์ ์ธ๋ฑ์ค
k: ํด๋์ค ์
๋์:
CSV ํ์ผ์ ์ฝ์ด์์ 2์ฐจ์ ํ๋ ฌ X๋ฅผ ๋ง๋ฆ
target ์ธ๋ฑ์ค์ ํด๋นํ๋ ์ด์ ์ ๊ฑฐํ๊ณ ๊ทธ ๊ฐ์ 1์ฐจ์ ๋ฐฐ์ด truth_1d์ ์ ์ฅ
truth_1d๋ฅผ one-hot ์ธ์ฝ๋ฉํ์ฌ k๊ฐ์ ์ด์ ๊ฐ์ง 2์ฐจ์ ํ๋ ฌ truth๋ฅผ ๋ง๋ฆ
y ํ๋ ฌ์ ์์ฑํ๊ณ , rows๋ X.rows์ ๊ฐ๊ณ cols๋ k๋ก ์ค์ ํ๊ณ , truth๋ฅผ ๊ฐ์ผ๋ก ๊ฐ์ง
d ๊ตฌ์กฐ์ฒด์ X์ y๋ฅผ ํ ๋นํ๊ณ truth_1d ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ณ , d๋ฅผ ๋ฐํํจ
์ค๋ช :
load_categorical_data_csv ํจ์๋ CSV ํ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์์ ์นดํ ๊ณ ๋ฆฌ์ปฌ ๋ณ์๋ฅผ one-hot ์ธ์ฝ๋ฉํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ํจ์์ ๋๋ค.
์ด ํจ์๋ ์ ๋ ฅ์ผ๋ก CSV ํ์ผ์ ์ด๋ฆ, ํ๊ฒ ๋ณ์ ์ด์ ์ธ๋ฑ์ค, ๊ทธ๋ฆฌ๊ณ ํด๋์ค ์๋ฅผ ๋ฐ์ต๋๋ค.
ํจ์๋ ๋จผ์ csv_to_matrix ํจ์๋ฅผ ์ฌ์ฉํ์ฌ CSV ํ์ผ์ ์ฝ์ด์์ 2์ฐจ์ ํ๋ ฌ X๋ฅผ ๋ง๋ญ๋๋ค.
๊ทธ๋ฆฌ๊ณ pop_column ํจ์๋ฅผ ์ฌ์ฉํ์ฌ target ์ธ๋ฑ์ค์ ํด๋นํ๋ ์ด์ 1์ฐจ์ ๋ฐฐ์ด truth_1d๋ก ์ ๊ฑฐํ๊ณ ๊ทธ ๊ฐ์ ์ ์ฅํฉ๋๋ค.
๊ทธ ๋ค์ one_hot_encode ํจ์๋ฅผ ์ฌ์ฉํ์ฌ truth_1d๋ฅผ one-hot ์ธ์ฝ๋ฉํ์ฌ k๊ฐ์ ์ด์ ๊ฐ์ง 2์ฐจ์ ํ๋ ฌ truth๋ฅผ ๋ง๋ญ๋๋ค.
y ํ๋ ฌ์ ์์ฑํ๊ณ , rows๋ X.rows์ ๊ฐ๊ณ cols๋ k๋ก ์ค์ ํ๊ณ , truth๋ฅผ ๊ฐ์ผ๋ก ๊ฐ์ง๋๋ค.
๋ง์ง๋ง์ผ๋ก, d ๊ตฌ์กฐ์ฒด์ X์ y๋ฅผ ํ ๋นํ๊ณ truth_1d ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ณ , d๋ฅผ ๋ฐํํฉ๋๋ค.
load_cifar10_data
ํจ์ ์ด๋ฆ: load_cifar10_data
์ ๋ ฅ:
char *filename: CIFAR-10 ๋ฐ์ดํฐ ํ์ผ ๊ฒฝ๋ก
๋์:
CIFAR-10 ๋ฐ์ดํฐ ํ์ผ์ ๋ก๋ํ์ฌ ๋ฐ์ดํฐ์ ์ ์์ฑํ๋ค.
๋ฐ์ดํฐ์ ์ 10000๊ฐ์ ์ด๋ฏธ์ง๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ ์ด๋ฏธ์ง๋ 32x32 ํฌ๊ธฐ์ RGB ์ด๋ฏธ์ง์ด๋ค.
์ ๋ ฅ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ 3072์ฐจ์์ ๋ฒกํฐ๋ก ๋ณํ๋์ด X ํ๋ ฌ์ ์ ์ฅ๋๋ค.
์ถ๋ ฅ ๋ ์ด๋ธ์ 10์ฐจ์์ ์-ํซ ์ธ์ฝ๋ฉ ๋ฒกํฐ๋ก ๋ณํ๋์ด y ํ๋ ฌ์ ์ ์ฅ๋๋ค.
X, y ํ๋ ฌ์ ๋ด์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
ํจ์๋ CIFAR-10 ๋ฐ์ดํฐ ํ์ผ์ ์ฝ์ด์ ๋ฐ์ดํฐ์ ์ ์์ฑํ๋ค.
๋ฐ์ดํฐ์ ์ X, y ๋ ๊ฐ์ ํ๋ ฌ๋ก ์ด๋ฃจ์ด์ง๋ค. X๋ ์ ๋ ฅ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ํ๋ ฌ์ด๊ณ , y๋ ์ถ๋ ฅ ๋ ์ด๋ธ์ ์ ์ฅํ๋ ํ๋ ฌ์ด๋ค.
CIFAR-10 ๋ฐ์ดํฐ ํ์ผ์์๋ ๊ฐ ์ด๋ฏธ์ง๋ง๋ค ๋จผ์ ์ถ๋ ฅ ๋ ์ด๋ธ(ํด๋์ค) ์ ๋ณด๊ฐ ์ฃผ์ด์ง๊ณ , ์ดํ์๋ 3072๊ฐ์ ํฝ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค.
ํ์ผ์์ ํ ๋ฒ์ 3073๋ฐ์ดํธ์ฉ ์ฝ์ด์, ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ์์ ์ถ๋ ฅ ๋ ์ด๋ธ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ y ํ๋ ฌ์ ์ ์ฅํ๋ค.
๋๋จธ์ง 3072๋ฐ์ดํธ๋ ์ ๋ ฅ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑํ๋ ํฝ์ ์ ๋ณด์ด๋ฏ๋ก, X ํ๋ ฌ์ ์ ์ฅํ๋ค.
๋ง์ง๋ง์ผ๋ก, ์ ๋ ฅ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ 0๊ณผ 1 ์ฌ์ด๋ก ์ค์ผ์ผ๋งํ๊ณ , X ํ๋ ฌ์ ์ ๊ทํํ๋ค.
์ค์ผ์ผ๋ง๊ณผ ์ ๊ทํ๋ ์ ๋ ฅ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ์ด ๋ ์ ํ์ตํ ์ ์๋๋ก ์ ์ฒ๋ฆฌํ๋ ์์ ์ด๋ค.
get_random_batch
ํจ์ ์ด๋ฆ: get_random_batch
์ ๋ ฅ:
data d: ์ ๋ ฅ ๋ฐ์ดํฐ์
int n: ๊ฐ์ ธ์ฌ ๋ฐฐ์น ํฌ๊ธฐ
float *X: ๋ฐฐ์น ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ํฌ์ธํฐ
float *y: ๋ฐฐ์น ๋ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ํฌ์ธํฐ
๋์:
์ฃผ์ด์ง ๋ฐ์ดํฐ์ d์์ ๋๋คํ๊ฒ ๋ฐฐ์น๋ฅผ ์ถ์ถํ์ฌ X์ y์ ์ ์ฅํฉ๋๋ค.
์ค๋ช :
for ๋ฃจํ๋ฅผ ์ด์ฉํ์ฌ n๊ฐ์ ๋๋คํ ์ธ๋ฑ์ค๋ฅผ ์ถ์ถํฉ๋๋ค.
์ถ์ถ๋ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ d.X์ d.y์์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ์ฌ X์ y์ ์ ์ฅํฉ๋๋ค.
get_next_batch
ํจ์ ์ด๋ฆ: get_next_batch
์ ๋ ฅ:
data d: ํ์ต ๋ฐ์ดํฐ์ ๋ ์ด๋ธ์ ์ ์ฅํ๋ ๊ตฌ์กฐ์ฒด
int n: ๋ฐฐ์น ํฌ๊ธฐ(batch size)
int offset: ํ์ฌ ๋ฐฐ์น์ ์์ ์ธ๋ฑ์ค(offset index)
float *X: ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ floatํ ํฌ์ธํฐ ๋ณ์
float *y: ์ถ๋ ฅ ๋ ์ด๋ธ์ ์ ์ฅํ floatํ ํฌ์ธํฐ ๋ณ์
๋์:
ํ์ฌ ๋ฐฐ์น์ ์์ ์ธ๋ฑ์ค(offset index)๋ถํฐ ๋ฐฐ์น ํฌ๊ธฐ(batch size)๋งํผ์ ๋ฐ์ดํฐ์ ๋ ์ด๋ธ์ ๊ตฌ์กฐ์ฒด์์ ๊ฐ์ ธ์์
์ ๋ ฅ ๋ฐ์ดํฐ ํฌ์ธํฐ ๋ณ์ X์ ์ถ๋ ฅ ๋ ์ด๋ธ ํฌ์ธํฐ ๋ณ์ y์ ๋ณต์ฌํ๋ค.
์ค๋ช :
ํ์ตํ ๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ๋ฐฐ์น ํฌ๊ธฐ๋งํผ ๋๋์ด์ ์ฒ๋ฆฌํ๋ ๋ฏธ๋๋ฐฐ์น(mini-batch) ํ์ต ๋ฐฉ์์์ ์ฌ์ฉ๋๋ ํจ์์ด๋ค.
์ ๋ ฅ ๋ฐ์ดํฐ์ ์ถ๋ ฅ ๋ ์ด๋ธ์ ์ผ์ ํ ํฌ๊ธฐ๋ก ์๋ผ์ ๋ฐฐ์น(batch) ๋จ์๋ก ๊ฐ์ ธ์ค๋ ์ญํ ์ ํ๋ค.
๊ตฌ์กฐ์ฒด data์๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ถ๋ ฅ ๋ ์ด๋ธ์ด ๊ฐ๊ฐ 2์ฐจ์ float ๋ฐฐ์ด ํํ๋ก ์ ์ฅ๋์ด ์๋ค.
ํ์ฌ ๋ฐฐ์น์ ์์ ์ธ๋ฑ์ค(offset index)์ ๋ฐฐ์น ํฌ๊ธฐ(batch size)๋ฅผ ์ด์ฉํ์ฌ ํ์ํ ๋ฐ์ดํฐ์ ๋ ์ด๋ธ์ ๋ณต์ฌํ๋ค.
y ํฌ์ธํฐ ๋ณ์๋ NULL์ผ ์ ์์ผ๋ฏ๋ก, y๊ฐ NULL์ด ์๋ ๊ฒฝ์ฐ์๋ง ์ถ๋ ฅ ๋ ์ด๋ธ์ ๊ฐ์ ธ์จ๋ค.
smooth_data
ํจ์ ์ด๋ฆ: smooth_data
์ ๋ ฅ:
d: data ๊ตฌ์กฐ์ฒด ๋ณ์
๋์:
์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ๋ฐ์ดํฐ์ y ๊ฐ๋ค์ ๋ถ๋๋ฝ๊ฒ ๋ง๋๋(smooth) ํจ์์ ๋๋ค.
์ด๋ฅผ ์ํด ๊ฐ ์ด(column)์ ํฉ์ด 1์ด ๋๋๋ก ํ๋ L1 ์ ๊ทํ(L1 normalization)๋ฅผ ์ํํฉ๋๋ค.
์ด ๊ณผ์ ์์ ๊ฐ y ๊ฐ์ ์์ ์์ epsilon์ ๋ํ๊ณ (๊ฐ์ ํ๊ท ์ผ๋ก๋ถํฐ ์ผ์ ํ ๊ฑฐ๋ฆฌ๋ฅผ ๋๊ธฐ ์ํด), ์ด๋ฅผ ์ ์ฒด์ (1 - epsilon) ๋งํผ ๊ณ ์ ๊ฐ์ผ๋ก ๋ณด์ ํด์ค๋๋ค.
์ค๋ช :
์ ๋ ฅ ๋ฐ์ดํฐ์ y ๊ฐ๋ค์ ํ๋ฅ ๋ถํฌ(probability distribution)๋ก ์ฌ์ฉ๋ ์ ์๋๋ก ๋ถ๋๋ฝ๊ฒ ๋ง๋ค์ด์ผ ํ ๋๊ฐ ์์ต๋๋ค. ์ด ํจ์๋ ๊ทธ๋ฌํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
load_all_cifar10
ํจ์ ์ด๋ฆ: load_all_cifar10
์ ๋ ฅ:
์์
๋์:
CIFAR-10 ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฝ์ด๋ค์ฌ์ ๋ฐ์ดํฐ ํ๋ ฌ(X)๊ณผ ๋ ์ด๋ธ ํ๋ ฌ(y)์ ์์ฑํ๋ค.
5๊ฐ์ ๋ฐ์ดํฐ ํ์ผ(data_batch_1.bin ~ data_batch_5.bin)์์ ์ด๋ฏธ์ง์ ๋ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ค์ฌ์ X์ y์ ์ ์ฅํ๋ค.
์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ 0
255 ๋ฒ์์ ๊ฐ์ผ๋ก ์ ์ฅ๋์ด ์์ผ๋ฉฐ, ์ด๋ฅผ 01 ๋ฒ์์ ๊ฐ์ผ๋ก ์ค์ผ์ผ๋งํ๋ค.๋ฐ์ดํฐ๋ฅผ ๋๋คํ๊ฒ ์๋(smooth_data) ์ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค.
์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ data ๊ตฌ์กฐ์ฒด์ ๋ด์์ ๋ฐํํ๋ค.
์ค๋ช :
CIFAR-10 ๋ฐ์ดํฐ ์ธํธ๋ 10๊ฐ์ ํด๋์ค(๊ฐ๊ฐ ๋นํ๊ธฐ, ์๋์ฐจ, ์, ๊ณ ์์ด, ์ฌ์ด, ๊ฐ, ๊ฐ๊ตฌ๋ฆฌ, ๋ง, ๋ฐฐ, ํธ๋ญ)๋ก ์ด๋ฃจ์ด์ง 32x32 ํฌ๊ธฐ์ ์ปฌ๋ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ์ธํธ์ด๋ค.
์ด ํจ์๋ CIFAR-10 ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฝ์ด๋ค์ฌ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํ ์์ ์ ์ํํ๊ณ , ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค.
๋ฐ์ดํฐ ํ์ผ์ data/cifar/cifar-10-batches-bin ๋๋ ํ ๋ฆฌ์ ์์นํ๋ฉฐ, ๊ฐ ๋ฐ์ดํฐ ํ์ผ์ 10000๊ฐ์ ์ด๋ฏธ์ง์ ๋ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ ๊ฐ ํฝ์ (R, G, B)๋ณ๋ก 0~255 ์ฌ์ด์ ๊ฐ์ ๊ฐ์ง๋ค.
scale_data_rows ํจ์๋ ๋ฐ์ดํฐ ํ๋ ฌ์ ๊ฐ ํ์ 0~1 ๋ฒ์๋ก ์ค์ผ์ผ๋งํ๋ ํจ์์ด๋ค.
smooth_data ํจ์๋ ๋ฐ์ดํฐ๋ฅผ ๋๋คํ๊ฒ ์๋ ์ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ ํจ์์ด๋ค.
๋ฐํ๋๋ data ๊ตฌ์กฐ์ฒด๋ ๋ฐ์ดํฐ ํ๋ ฌ(X)๊ณผ ๋ ์ด๋ธ ํ๋ ฌ(y)์ ๋ฉค๋ฒ๋ก ๊ฐ์ง๋ฉฐ, shallow ๋ณ์๋ 0์ผ๋ก ์ด๊ธฐํ๋๋ค.
load_go
ํจ์ ์ด๋ฆ: load_go
์ ๋ ฅ:
filename: ์ฝ์ด๋ค์ผ ํ์ผ ์ด๋ฆ์ ๋ํ๋ด๋ ๋ฌธ์์ด ํฌ์ธํฐ
๋์:
filename์ผ๋ก ์ง์ ๋ ํ์ผ์ ์ฝ์ด๋ค์ฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํจ.
ํ์ผ์์ ํ ์ค์ฉ ์ฝ์ด๋ค์.
์ฝ์ด๋ค์ธ ์ค์ ์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ ๋ฌธ์์ด์ ์ ์๋ก ๋ณํํด์, ํด๋น ์ขํ์ ํด๋นํ๋ y ํ๋ ฌ์ ๊ฐ์ 1๋ก ์ค์ ํจ.
์ฝ์ด๋ค์ธ ์ค์ ์ธ ๋ฒ์งธ ๋ฌธ์์ด๋ถํฐ 361๊ฐ์ ๋ฌธ์๋ฅผ ์ฝ์ด๋ค์ฌ์, ํด๋นํ๋ X ํ๋ ฌ์ ๊ฐ์ ์ค์ ํจ.
๋ชจ๋ ์ค์ ์ฝ์ด๋ค์ธ ํ์, X์ y ํ๋ ฌ์ resizeํจ.
์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ data ๊ตฌ์กฐ์ฒด๋ฅผ ์ด๊ธฐํํด์, ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ ํ๋ ฌ๋ค์ ํฌํจ์ํด.
์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ data ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐํํจ.
์ค๋ช :
load_go ํจ์๋ ์ง์ ๋ ํ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ค์ฌ์ ์ฒ๋ฆฌํ๋ ํจ์์ ๋๋ค.
ํจ์๋ filename์ผ๋ก ์ง์ ๋ ํ์ผ์ "rb" ๋ชจ๋๋ก ์ด๊ณ , ์ด๊ธฐ์ ์คํจํ๋ฉด file_error ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
ํจ์๋ while ๋ฃจํ๋ฅผ ๋๋ฉด์ ํ์ผ์์ ํ ์ค์ฉ ์ฝ์ด๋ค์ ๋๋ค.
label ํฌ์ธํฐ ๋ณ์์ fgetl ํจ์๋ฅผ ์ฌ์ฉํด์ ํ์ผ์์ ํ ์ค์ฉ ์ฝ์ด๋ค์ ๋๋ค.
๋ง์ฝ, X์ ํ ๊ฐ์์ count๊ฐ ๊ฐ์์ง๋ฉด, X์ y ํ๋ ฌ์ resizeํด์ ํฌ๊ธฐ๋ฅผ 2๋ฐฐ๋ก ๋๋ฆฝ๋๋ค.
label ํฌ์ธํฐ ๋ณ์์์ ์ฝ์ด๋ค์ธ ๋ฌธ์์ด์ sscanf ํจ์๋ฅผ ์ฌ์ฉํด์ row์ col ๋ณ์๋ก ๋ถ๋ฆฌํด๋ ๋๋ค.
fgetl ํจ์๋ฅผ ์ฌ์ฉํด์ ๋ค์ ์ค์์ ๋ณด๋์ ์ํ๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด์ ์ฝ์ด๋ค์ ๋๋ค.
index ๋ณ์์ row์ col์ ์ด์ฉํด์ y ํ๋ ฌ์์ ํด๋นํ๋ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํด์, ํด๋นํ๋ ์์น์ ๊ฐ์ 1๋ก ์ค์ ํฉ๋๋ค.
for ๋ฃจํ๋ฅผ ๋๋ฉด์ ๋ณด๋์ ์ํ๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด์์ ์ฝ์ด๋ค์ธ ๊ฐ์ float ํํ๋ก ๋ณํํด์, X ํ๋ ฌ์ ์ ์ฅํฉ๋๋ค.
count ๊ฐ์ ์ฆ๊ฐ์ํค๊ณ , label๊ณผ board ํฌ์ธํฐ ๋ณ์๋ฅผ free ํจ์๋ฅผ ์ฌ์ฉํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํฉ๋๋ค.
๋ชจ๋ ์ค์ ์ฝ์ด๋ค์ธ ํ์, X์ y ํ๋ ฌ์ resizeํด์, ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ ํ๋ ฌ๋ค์ ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค.
data ๊ตฌ์กฐ์ฒด๋ฅผ ์ด๊ธฐํํด์, ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ ํ๋ ฌ๋ค์ ํฌํจ์ํค๊ณ , ํด๋นํ๋ data ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
ํจ์ ์คํ์ด ๋๋๋ฉด, ํ์ผ์ ๋ซ์ต๋๋ค.
randomize_data
ํจ์ ์ด๋ฆ: randomize_data
์ ๋ ฅ:
data d: ๋ฐ์ดํฐ
๋์:
์ ๋ ฅ๋ฐ์ ๋ฐ์ดํฐ์ X์ y ๊ฐ์ ๋ฌด์์๋ก ์์
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ ๋ฐ์ดํฐ์ X์ y ๊ฐ์ ๋ฌด์์๋ก ์๋ ํจ์์ ๋๋ค.
์ด๋ฅผ ์ํด ๋จผ์ ์ ๋ ฅ๋ ๋ฐ์ดํฐ์ X์ y ๋ฐฐ์ด์ ์ญ์์ผ๋ก ์ํํ๋ฉด์ ํ์ฌ ์ธ๋ฑ์ค์ ๋๋ค์ผ๋ก ์ ํ๋ ์ธ๋ฑ์ค์ ๊ฐ์ ์๋ก ๋ฐ๊ฟ์ค๋๋ค.
์ด๋ฅผ ๋ชจ๋ ์ธ๋ฑ์ค์ ๋ํด ๋ฐ๋ณตํ๋ฉด X์ y ๊ฐ์ด ๋ฌด์์๋ก ์์ธ ๋ฐ์ดํฐ๊ฐ ๋ง๋ค์ด์ง๋๋ค.
scale_data_rows
ํจ์ ์ด๋ฆ: scale_data_rows
์ ๋ ฅ:
data d: ๋ณํํ ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ data ๊ตฌ์กฐ์ฒด
float s: ์ค์ผ์ผ๋ง(scale)ํ ๋น์จ
๋์:
์ด ํจ์๋ ์ ๋ ฅ์ผ๋ก ๋ฐ์ data ๊ตฌ์กฐ์ฒด(d)์ X ํ๋(์ ๋ ฅ ๋ฐ์ดํฐ)์ ๋ํด, ๊ฐ ํ(row)์ ๊ฐ์ s๋งํผ ์ค์ผ์ผ๋งํฉ๋๋ค.
์ค๋ช :
ํจ์ ๋ด๋ถ์์๋ ์ ๋ ฅ์ผ๋ก ๋ฐ์ data ๊ตฌ์กฐ์ฒด(d)์ X ํ๋์ ๋ํด ๊ฐ ํ(row)์ ๊ฐ์ ์ค์ผ์ผ๋งํฉ๋๋ค.
์ค์ผ์ผ๋ง(scale)ํ ๋น์จ(s)์ด 1๋ณด๋ค ์์ ๊ฒฝ์ฐ, ๊ฐ ์์(element)์ ๊ฐ์ s๋งํผ ๊ฐ์์ํต๋๋ค.
์ค์ผ์ผ๋ง(scale)ํ ๋น์จ(s)์ด 1๋ณด๋ค ํด ๊ฒฝ์ฐ, ๊ฐ ์์(element)์ ๊ฐ์ s๋งํผ ์ฆ๊ฐ์ํต๋๋ค.
์ ๋ ฅ์ผ๋ก ๋ฐ์ data ๊ตฌ์กฐ์ฒด(d)๋ ๋ณ๊ฒฝ๋๋ฉฐ, ๋ฐํ๊ฐ์ ์์ต๋๋ค.
translate_data_rows
ํจ์ ์ด๋ฆ: translate_data_rows
์ ๋ ฅ:
data d: ๋ณํํ ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ data ๊ตฌ์กฐ์ฒด
float s: ์ด๋ ๊ฑฐ๋ฆฌ
๋์:
์ด ํจ์๋ ์ ๋ ฅ์ผ๋ก ๋ฐ์ data ๊ตฌ์กฐ์ฒด(d)์ X ํ๋(์ ๋ ฅ ๋ฐ์ดํฐ)์ ๋ํด, ๊ฐ ํ(row)์ ๊ฐ์ s๋งํผ ์ด๋์ํต๋๋ค.
์ค๋ช :
ํจ์ ๋ด๋ถ์์๋ ์ ๋ ฅ์ผ๋ก ๋ฐ์ data ๊ตฌ์กฐ์ฒด(d)์ X ํ๋์ ๋ํด ๊ฐ ํ(row)์ ๊ฐ์ ์ด๋์ํต๋๋ค.
์ด๋ ๊ฑฐ๋ฆฌ(s)๊ฐ ์์์ผ ๊ฒฝ์ฐ, ๊ฐ ์์(element)์ ๊ฐ์ s๋งํผ ์ฆ๊ฐ์ํต๋๋ค.
์ด๋ ๊ฑฐ๋ฆฌ(s)๊ฐ ์์์ผ ๊ฒฝ์ฐ, ๊ฐ ์์(element)์ ๊ฐ์ s๋งํผ ๊ฐ์์ํต๋๋ค.
์ ๋ ฅ์ผ๋ก ๋ฐ์ data ๊ตฌ์กฐ์ฒด(d)๋ ๋ณ๊ฒฝ๋๋ฉฐ, ๋ฐํ๊ฐ์ ์์ต๋๋ค.
copy_data
ํจ์ ์ด๋ฆ: copy_data
์ ๋ ฅ:
data d: ๋ณต์ฌํ ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ data ๊ตฌ์กฐ์ฒด
๋์:
์ด ํจ์๋ ์ ๋ ฅ์ผ๋ก ๋ฐ์ data ๊ตฌ์กฐ์ฒด(d)๋ฅผ ๋ณต์ฌํ ์๋ก์ด data ๊ตฌ์กฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฐํํฉ๋๋ค. ์ด๋, ์ ๋ ฅ์ผ๋ก ๋ฐ์ data ๊ตฌ์กฐ์ฒด(d)์ ๋ฐํํ data ๊ตฌ์กฐ์ฒด๋ ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐธ์กฐํ๊ฒ ๋ฉ๋๋ค.
์ค๋ช :
ํจ์ ๋ด๋ถ์์๋ ์ ๋ ฅ์ผ๋ก ๋ฐ์ data ๊ตฌ์กฐ์ฒด(d)์ ํ๋๊ฐ๋ค์ ์๋ก์ด data ๊ตฌ์กฐ์ฒด(c)์ ๋ณต์ฌํฉ๋๋ค.
์ด๋, data ๊ตฌ์กฐ์ฒด์ X์ y ํ๋๋ copy_matrix ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ฌํฉ๋๋ค. copy_matrix ํจ์๋ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ํ๋ ฌ(matrix)์ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ณต์ฌํ ํ, ๋ณต์ฌ๋ ํ๋ ฌ์ ๊ฐ๋ฆฌํค๋ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ฐํํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก, ๋ณต์ฌ๋ data ๊ตฌ์กฐ์ฒด(c)๊ฐ ๋ฐํ๋ฉ๋๋ค.
normalize_data_rows
ํจ์ ์ด๋ฆ: normalize_data_rows
์ ๋ ฅ:
data d: ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ data ๊ตฌ์กฐ์ฒด
๋์:
์ด ํจ์๋ ์ ๋ ฅ์ผ๋ก ๋ฐ์ data ๊ตฌ์กฐ์ฒด(d)์ ํน์ง๊ฐ(feature)์ ์ ๊ทํ(normalization)ํฉ๋๋ค.
์ ๊ทํ๋ ๊ฐ ํน์ง๊ฐ์ด 0๊ณผ 1์ฌ์ด์ ๋ฒ์์ ์๋๋ก ๊ฐ์ ์ค์ผ์ผ๋ง(scale)ํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
์ฌ๊ธฐ์๋ ๊ฐ๊ฐ์ ํน์ง๊ฐ์ ํด๋น ํน์ง์์ ์ต๋๊ฐ์ผ๋ก ๋๋์ด์ ์ค์ผ์ผ๋งํฉ๋๋ค.
์ค๋ช :
ํจ์ ๋ด๋ถ์์๋ for ๋ฃจํ๋ฅผ ์ด์ฉํด ๊ฐ๊ฐ์ ํน์ง๊ฐ(feature)์ ์ค์ผ์ผ๋งํฉ๋๋ค.
๋ฃจํ์์๋ normalize_array ํจ์๋ฅผ ํธ์ถํ์ฌ, ํ ๊ฐ์ ํน์ง๊ฐ(feature) ๋ฐฐ์ด์ ์ ๊ทํํฉ๋๋ค. ์ด๋, normalize_array ํจ์๋ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ๋ฐฐ์ด์์ ์ต๋๊ฐ์ ์ฐพ์์, ํด๋น ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ์ต๋๊ฐ์ผ๋ก ๋๋์ด์ฃผ๋ ์์ ์ ์ํํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก, ์ ๋ ฅ์ผ๋ก ๋ฐ์ data ๊ตฌ์กฐ์ฒด(d)๋ ๋ด๋ถ์ ํน์ง๊ฐ(feature)์ด ์ค์ผ์ผ๋ง๋ ์ํ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
get_data_part
ํจ์ ์ด๋ฆ: get_data_part
์ ๋ ฅ:
data d: ์ ์ฒด ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ data ๊ตฌ์กฐ์ฒด
int part: ์ถ์ถํ ๋ถ๋ถ ๋ฐ์ดํฐ์ ๋ฒํธ (0๋ถํฐ ์์)
int total: ์ ์ฒด ์ถ์ถํ ๋ถ๋ถ ๋ฐ์ดํฐ ๊ฐ์
๋์:
์ด ํจ์๋ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ ์ฒด ํ์ต ๋ฐ์ดํฐ(data d)๋ฅผ total ๊ฐ์๋ก ๋ถํ ํ ํ, part ๋ฒ์งธ ๋ถํ ๋ ๋ถ๋ถ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ์ฌ ์๋ก์ด data ๊ตฌ์กฐ์ฒด(p)์ ๋ด์ ๋ฐํํฉ๋๋ค.
์ค๋ช :
ํจ์ ๋ด๋ถ์์ ์๋ก ์์ฑํ data ๊ตฌ์กฐ์ฒด(p)๋ shallow ๋ฉค๋ฒ ๋ณ์๊ฐ 1๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์ด๊ฒ์ p๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋๋ผ d์ ์ผ๋ถ๋ฅผ ๊ณต์ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
p.X, p.y๋ ๊ฐ๊ฐ ์ถ์ถ๋ ๋ถ๋ถ ๋ฐ์ดํฐ์ ํน์ง๊ฐ(feature)๊ณผ ๋ผ๋ฒจ๊ฐ(label)์ ์ ์ฅํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋๋ค. p.X.rows, p.X.cols๋ ํน์ง๊ฐ ํ๋ ฌ์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, p.y.rows, p.y.cols๋ ๋ผ๋ฒจ๊ฐ ํ๋ ฌ์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค.
p.X.vals, p.y.vals๋ ํน์ง๊ฐ๊ณผ ๋ผ๋ฒจ๊ฐ์ ์ ์ฅํ ํฌ์ธํฐ ๋ฐฐ์ด์ ๋๋ค. ์ด์ ๋ถํ ๋ ๋ถ๋ถ ๋ฐ์ดํฐ๊น์ง์ ํน์ง๊ฐ๊ณผ ๋ผ๋ฒจ๊ฐ์ ๊ฐ์๋ฅผ d.X.rows, d.y.rows๋ก ๋๋์ด์ ๋ถํ ๋ ๋ถ๋ถ ๋ฐ์ดํฐ์ ์์ ํฌ์ธํฐ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด๋ ๊ฒ ๊ณ์ฐ๋ ํฌ์ธํฐ๋ฅผ ๊ฐ๊ฐ p.X.vals, p.y.vals์ ์ ์ฅํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก, ์๋ก ์์ฑ๋ data ๊ตฌ์กฐ์ฒด(p)๋ฅผ ๋ฐํํฉ๋๋ค.
get_random_data
ํจ์ ์ด๋ฆ: get_random_data
์ ๋ ฅ:
data d: ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ data ๊ตฌ์กฐ์ฒด
int num: ๋ฌด์์๋ก ์ถ์ถํ ๋ฐ์ดํฐ์ ๊ฐ์
๋์:
์ด ํจ์๋ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ํ์ต ๋ฐ์ดํฐ(data d)์์ ๋ฌด์์๋ก(num ๊ฐ์๋งํผ) ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ์ฌ ์๋ก์ด data ๊ตฌ์กฐ์ฒด(r)์ ๋ด์ ๋ฐํํฉ๋๋ค.
์ค๋ช :
ํจ์ ๋ด๋ถ์์ ์๋ก ์์ฑํ data ๊ตฌ์กฐ์ฒด(r)๋ shallow ๋ฉค๋ฒ ๋ณ์๊ฐ 1๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์ด๊ฒ์ r์ด ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋๋ผ d์ ์ผ๋ถ๋ฅผ ๊ณต์ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
r.X, r.y๋ ๊ฐ๊ฐ ์ถ์ถ๋ ๋ฐ์ดํฐ์ ํน์ง๊ฐ(feature)๊ณผ ๋ผ๋ฒจ๊ฐ(label)์ ์ ์ฅํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋๋ค. r.X.rows, r.X.cols๋ ํน์ง๊ฐ ํ๋ ฌ์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, r.y.rows, r.y.cols๋ ๋ผ๋ฒจ๊ฐ ํ๋ ฌ์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค.
r.X.vals, r.y.vals๋ ํน์ง๊ฐ๊ณผ ๋ผ๋ฒจ๊ฐ์ ์ ์ฅํ ํฌ์ธํฐ ๋ฐฐ์ด์ ๋๋ค. num ๊ฐ์๋งํผ ๋์ ์ผ๋ก ํ ๋น๋์ด ๊ฐ ํฌ์ธํฐ๋ ๊ฐ๊ฐ ๋ฌด์์๋ก ์ถ์ถ๋ ๋ฐ์ดํฐ์ ํน์ง๊ฐ๊ณผ ๋ผ๋ฒจ๊ฐ์ ๊ฐ๋ฆฌํค๊ฒ ๋ฉ๋๋ค.
๋ฌด์์ ๋ฐ์ดํฐ ์ถ์ถ์ ์ํด์ rand() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉฐ, d.X.rows(์ ์ฒด ๋ฐ์ดํฐ ๊ฐ์)๋ฅผ ๋ฒ์๋ก ํ๋ ๋์๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ ๊ฒ ์์ฑ๋ ๋์๋ก๋ถํฐ ์ถ์ถํ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ์ฌ, ํด๋น ๋ฐ์ดํฐ์ ํน์ง๊ฐ๊ณผ ๋ผ๋ฒจ๊ฐ์ r.X.vals, r.y.vals์ ์ ์ฅํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก, ์๋ก ์์ฑ๋ data ๊ตฌ์กฐ์ฒด(r)๋ฅผ ๋ฐํํฉ๋๋ค.
split_data
ํจ์ ์ด๋ฆ: split_data
์ ๋ ฅ:
data d: ํ์ต ๋ฐ์ดํฐ์ ๊ณผ ๊ฒ์ฆ ๋ฐ์ดํฐ์ ์ผ๋ก ๋ถํ ํ ์ ์ฒด ๋ฐ์ดํฐ์
int part: ํ์ฌ ๋ถํ ํ๋ ค๋ ๋ฐ์ดํฐ์ ์ ์ธ๋ฑ์ค
int total: ์ ์ฒด ๋ฐ์ดํฐ์ ์ ๋ถํ ํ ๋ฐ์ดํฐ์ ์ ๊ฐ์
๋์:
์ ์ฒด ๋ฐ์ดํฐ์ ์ part์ total์ ๊ฐ์ ๋ฐ๋ผ ํ์ต ๋ฐ์ดํฐ์ ๊ณผ ๊ฒ์ฆ ๋ฐ์ดํฐ์ ์ผ๋ก ๋ถํ ํ์ฌ ๋ฐํํจ
์ค๋ช :
data ๊ตฌ์กฐ์ฒด๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ ๋ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ ๊ฐ์ ํ๋ ฌ(X์ y)๋ก ๊ตฌ์ฑ๋จ
split_data ํจ์๋ ์ ์ฒด ๋ฐ์ดํฐ์ d๋ฅผ part์ total์ ๊ฐ์ ๋ฐ๋ผ train๊ณผ test ๋ฐ์ดํฐ์ ์ผ๋ก ๋๋์ด ๋ฐํํจ
train๊ณผ test ๋ฐ์ดํฐ์ ์ data ๊ตฌ์กฐ์ฒด์ ํฌ์ธํฐ์ด๋ฉฐ, split ๋ฐฐ์ด์ ์ ์ฅ๋์ด ๋ฐํ๋จ
start์ end ๋ณ์๋ ํ์ฌ ๋ถํ ํ๋ ค๋ ๋ฐ์ดํฐ์ ์ ์์๊ณผ ๋ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํจ
train ๋ฐ์ดํฐ์ ์ start ์ด์ ์ ๋ฐ์ดํฐ์ end ์ดํ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ํฌํจํจ
test ๋ฐ์ดํฐ์ ์ start๋ถํฐ end ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํจ
train๊ณผ test ๋ฐ์ดํฐ์ ์ ํ๋ ฌ์ ํฌ๊ธฐ์ ๊ฐ๋ค์ ๋ณต์ฌํ์ฌ ์์ฑํจ
๋ฐํ๋๋ split[0]์ train ๋ฐ์ดํฐ์ ์, split[1]์ test ๋ฐ์ดํฐ์ ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ด๋ฉฐ, split ๋ฐฐ์ด์ calloc ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์ผ๋ก ํ ๋น๋จ
Last updated
Was this helpful?