YOLO_V3_Training - 8BitsCoding/RobotMentor GitHub Wiki


YOLO v3 Mark ๋‹ค์šด

$ git clone https://github.com/AlexeyAB/Yolo_mark

ํด๋”๋‚ด์˜ yolo_mark.sln ์‹คํ–‰

์ด๋ฏธ์ง€

์†์„ฑ -> C/C++ -> ์ผ๋ฐ˜ -> ์ถ”๊ฐ€ํฌํ•จ ๋””๋ ‰ํ„ฐ๋ฆฌ Opencv ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

์†์„ฑ -> ๋ง์ปค -> ์ผ๋ฐ˜ -> ์ถ”๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””๋ ‰ํ„ฐ๋ฆฌ Opencv ๊ฒฝ๋กœ ๋ณ€๊ฒฝ

๋นŒ๋“œ


yolo_mark ์‹คํ–‰

Yolo_mark\x64\Release ์ด๋™ ./yolo_mark.cmd ์‹คํ–‰

echo     Example how to start marking bouded boxes for training set Yolo v2

yolo_mark.exe data/img data/train.txt data/obj.names

pause

yolo_mark.cmd ๋‚ด๋ถ€

data/img

data/train.txt

data/obj.names

์„ธ ๊ฐœ์˜ ํŒŒ์ผ์ด yolo_mark์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค. -> ์•„๋ž˜์„œ ํ•˜๋‚˜์”ฉ ๋ถ„์„


data/img

๋‚ด๊ฐ€ ํ•™์Šต์— ์ฐธ์—ฌํ•  ์ด๋ฏธ์ง€ ํŒŒ์ผ

์ด๋ฏธ์ง€ ํŒŒ์ผ ๋‚ด์—์„œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์„ ํƒํ•ด ์ค˜์•ผํ•จ.

์ฐธ๊ณ ๋กœ ์ง€์›ํ•˜๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ์€ *.jpg ์ž„์„ ๊ธฐ์–ต


data/train.txt

ํ•™์Šตํ•  ์ด๋ฏธ์ง€์˜ ๊ฒฝ๋กœ ์ง€์ •

yolo_mark์—์„œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋“ฑ๋ก์ด ๋œ๋‹ค.


data/obj.names

ํ•™์Šตํ•  ์˜ค๋ธŒ์ ํŠธ์˜ ์ด๋ฆ„ ์ง€์ •


data/obj.data

classes= 2
train  = data/train.txt
valid  = data/train.txt
names = data/obj.names
backup = backup/

๋‹ค๋ฅธ๊ฑด ๊ทธ๋Œ€๋กœ ๋‘๊ณ  classes๋งŒ ์ˆ˜์ •

๋‚ด๊ฐ€ ์‹๋ณ„ํ•  ์˜ค๋ธŒ์ ํŠธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ๊ฐœ/๊ณ ์–‘์ด๋กœ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด classes=2


yolo-obj.cfg(์ด ๋ฐฉ๋ฒ•์„ ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•™์Šต์ด ์ž˜ ์•ˆ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒ)

์ปจ๋ฒŒ๋ฃจ์…˜์˜ ์„ธํŒ… ๋“ฑ ์–ด๋–ป๊ฒŒ ํ•™์‹ญ์„ ์ง„ํ–‰ํ• ์ง€์— ๋Œ€ํ•œ ์„ค์ •

๋‚˜๋Š” Darknet53.conv.74๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด๋ผ ๋ณ„๋„์˜ ์ˆ˜์ •์—†์ด ์‚ฌ์šฉ...(์‚ฌ์‹ค ์—ฌ๊ธฐ์— ์ง€์‹์ด ๋ถ€์กฑ...)

๊ทธ๋ƒฅ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ๊ฐ€์žฅ๋งˆ์ง€๋ง‰ ์ค„์˜ filter์™€ classes์ด๋‹ค.

[convolutional]
size=1
stride=1
pad=1
filters=35      # ์—ฌ๊ธฐ
activation=linear

[region]
anchors = 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52
bias_match=1
classes=2       # ์—ฌ๊ธฐ
coords=4
num=5
softmax=1
jitter=.2
rescore=1

classes๋Š” ์—ญ์‹œ ์‹๋ณ„ํ•  ์˜ค๋ธŒ์ ํŠธ์˜ ๊ฐœ์ˆ˜

filters = (classes + 5) * 5 ๋กœ ์ง€์ •


darknet์— ์žˆ๋Š” yolov3.cfg๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœ

  1. yolo-obj.cfg๋ผ๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑ ํ›„ ๋‚ด๋ถ€์˜ ๋‚ด์šฉ์€ darknet/Release/x64๋‚ด๋ถ€์˜ yolov3.cfg์™€ ๋™์ผํ•˜๊ฒŒ ๊ตฌ์„ฑํ•œ๋‹ค.
  2. yolo-obj.cfg ๋‚ด๋ถ€์˜ ์ˆ˜์ •์€ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•œ๋‹ค.
[net]
# ...
batch=64
subdivisions=8 # ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑํ˜„์ƒ์ด ๋‚˜ํƒ€๋‚œ๋‹ค๋ฉด 16, 32, 64 ๋กœ ํ‚ค์šด๋‹ค.
max_batches=6000 # classes*2000
steps=4800,5400 # max_batches์˜ 80% 90% ๋ฅผ ๋„ฃ๋Š”๋‹ค. ์ด์ƒํ•œ ์ˆ˜ ๋„ฃ์œผ๋ฉด ํ•™์Šต ์•ˆ๋จ!
# ...
# [yolo] ๋ผ๋Š” ์ธ๋ฑ์Šค ์œ„/์•„๋ž˜์˜ classes, filter๋ฅผ ์ž์‹ ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•œ๋‹ค.
filters=24  # filters=(classes+5)*3
#...
[yolo]      # ์ด ์„ธ ๊ฐœ์˜ [yolo]๊ฐ€ ์žˆ์Œ ๊ผญ 3๊ฐœ ๋ชจ๋‘ ์ˆ˜์ •ํ•  ๊ฒƒ!!
# ...
classes=3

๋‚˜๋จธ์ง€๋Š” ์œ„์™€ ๋™์ผ

*.cfg ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ์„ค๋ช…

  • ์ฐธ๊ณ ์‚ฌ์ดํŠธ

  • ์ฐธ๊ณ ์‚ฌ์ดํŠธ2

  • batch : ํ•œ ๋ฒˆ์— ๋ช‡ ์žฅ์„ ์ฒ˜๋ฆฌํ•  ์ง€ ์ง€์ •

  • subdivisions : batch๋ฅผ ์ด ๊ฐ’๋งŒํผ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌ (GPU ๋ฉ”๋ชจ๋ฆฌ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ฒ ๋‹ค.)

  • height, width : ์ž…๋ ฅ๋˜๋Š” ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ


convolutional layer ๋‹ค์šด๋กœ๋“œ

darknet53.conv.74๋ผ๋Š” convolutional layer๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ›„

ํ•™์Šต์„ ์œ„ํ•ด์„œ darknet ์‹คํ–‰ํŒŒ์ผ ๋‚ด์— ๋„ฃ์–ด๋‘”๋‹ค.


ํ•™์Šต ์ด๋ฏธ์ง€ ์ง€์ •

Yolo_mark\x64\Release ์ด๋™ ./yolo_mark.cmd ์‹คํ–‰

์ด๋ฏธ์ง€

์ฐธ๊ณ ๋กœ ๋‹จ์ถ•ํ‚ค๋ฅผ ์•Œ๋ฉด ํŽธ์ง‘์ด ์ˆ˜์›”ํ•˜๋‹ค.

ํ‚ค๋ณด๋“œ 0~9 : ์˜ค๋ธŒ์ ํŠธ์˜ ๋„˜๋ฒ„

๋งˆ์šฐ์Šค ์ขŒํด๋ฆญ : ์˜ค๋ธŒ์ ํŠธ ์ง€์ •

ํ‚ค๋ณด๋“œ c : ์˜ค๋ธŒ์ ํŠธ ์ง€์ • ์ทจ์†Œ


ํ•™์Šต์ง„ํ–‰

$ ./darknet detector train data/obj.data yolo-obj.cfg darknet53.conv.74

ํ•™์Šต์ง€ ์ง„ํ–‰๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋ฆฐํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ

24674: 0.659918, 0.605959 avg, 0.001000 rate, 2.962139 seconds, 1579136 images

24674 : ์—ฐ์‚ฐ ํšŸ์ˆ˜

0.605959 avg : ํ‰๊ท  ์†์‹ค์œจ -> ์†์‹ค์œจ์ด ๋” ์ด์ƒ ์ค„์–ด๋“ค์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ•™์Šต์„ ์ค‘์ง€