hwanseung2 / darknet

๐Ÿฅ‡ 2021 ๊ตฌ๊ฐ•๊ณ„์งˆํ™˜ ์˜๋ฃŒ์˜์ƒ ์ธ๊ณต์ง€๋Šฅ(AI) Challenge YOLOv4

Home Page:http://pjreddie.com/darknet/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

darknet YOLOv4๋ฅผ ์ด์šฉํ•œ Challenge ์ฐธ์—ฌ

Final Ranking : 4th / 20teams

Introduction

scaled_yolov4

AP50:95 - FPS (Tesla V100) Paper: https://arxiv.org/abs/2011.08036

modern_gpus

AP50:95 / AP50 - FPS (Tesla V100) Paper: https://arxiv.org/abs/2004.10934

fork : https://github.com/AlexeyAB/darknet

Paper YOLO v4: https://arxiv.org/abs/2004.10934

Paper Scaled YOLO v4: https://arxiv.org/abs/2011.08036 use to reproduce results: ScaledYOLOv4

์ด๋ฒˆ Teeth Object Detection & numbering Challenge๋ฅผ ์ฐธ์—ฌํ•˜๊ณ  ๊ทธ ์ค‘ ์ œ๊ฐ€ ๋งก์€ ๋ชจ๋ธ์ธ YOLOv4์— ๋Œ€ํ•ด Challenge์šฉ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ์„ค๋ช…์— ๋Œ€ํ•ด์„œ ์ž‘์„ฑ์„ ํ•˜๋ คํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์œ„์˜ block์€ YOLOv4 github๊ณผ paper ๋งํฌ๋ฅผ ๋‹ฌ์•„๋‘์—ˆ๊ณ , repo๋Š” darknet YOLOv4์—์„œ fork๋ฅผ ๋– ์™”์Œ์„ ๋ฐํž™๋‹ˆ๋‹ค.

Notion YOLOv4 ์ •๋ฆฌ๊ธ€ : https://www.notion.so/YOLOv4-Optimal-Speed-and-Accuracy-of-Object-Detection-e1e4178c0eac40f7a7e76a6768e5e256

์ฒ˜์Œ Object Detection๋ถ„์•ผ๋กœ ์ฑŒ๋ฆฐ์ง€๋ฅผ ์ฐธ๊ฐ€ํ•˜๋ฉด์„œ paper์™€ ์ •๋ฆฌ๋œ blog๋“ค์„ ์ฝ์œผ๋ฉฐ YOLOv4์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. YOLOv4๋ฅผ Challenge์—์„œ ํ™œ์šฉํ•˜๋ฉด์„œ Custom Dataset์— ํ•™์Šต์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•๋“ค์€ Google์— ์ž˜ ์„ค๋ช…๋œ ๋ธ”๋กœ๊ทธ๊ฐ€ ๋งŽ์•„ ๋ธ”๋กœ๊ทธ๋ฅผ ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

YOLOv4 custom dataset training tutorial : https://keyog.tistory.com/21

์ œ๊ฐ€ Challenge์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ Data๋Š” ์น˜๊ณผ Panorama data์˜€์œผ๋ฉฐ training set์— ๋Œ€ํ•œ annotation์€ json์œผ๋กœ ๊ฐ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ํ‘œ์‹œ๋œ ํ˜•ํƒœ์˜€์Šต๋‹ˆ๋‹ค.


Custom Dataset Setting

config ์ˆซ์ž๋ณ€๊ฒฝ

์šฐ์„  darknet github์—์„œ Code๋ฅผ ๋ˆŒ๋Ÿฌ HTTPS์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ local๋กœ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

git clone https://github.com/AlexeyAB/darknet.git

[img1 ์ž๋ฆฌ]

git clone์„ ํ†ตํ•ด repo๋ฅผ ๋‹ค์šด๋ฐ›์•˜๋‹ค๋ฉด ์ฒซ ๋ฒˆ์งธ๋กœ ์ง„ํ–‰ํ•ด์•ผํ•  ๊ฒƒ์€ config ์ˆ˜์ • ์ด๋‹ค.

cd cfg/
vim yolov4.cfg

Vim editor๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ ๋‹ค๋ฅธ Text Editor๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•„์ž๋Š” vim editor๋ฅผ ํ†ตํ•ด yolov4.cfg ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

[img 02]

์ด๋ฏธ์ง€์—์„œ ๋ณผ ๋•Œ, ์ˆ˜์ •ํ•ด์•ผํ•  ๋ถ€๋ถ„์€ batch์™€ subdivision, width, height ๋“ฑ์„ ์ˆ˜์ •ํ•˜๊ณ  max_batches, steps ๋“ฑ์„ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

  1. Batch : Batchsize๋Š” 8๋กœ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์˜€๋Š”๋ฐ, ํ•™์Šต์‹œํ‚ค๋Š” GPU์˜ Memory์— ๋”ฐ๋ผ ๋งž์ถ”๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.
  2. Subdivision : ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ์ž์„ธํžˆ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ”๋Š”๋ฐ, GPU memory๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์–ด๋ณด์˜€๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ •๋ฆฌ๋œ ๋ธ”๋กœ๊ทธ์—์„œ 16์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์ง„ํ–‰ํ•˜์˜€๊ณ  ์ €๋„ subdivisions=16 ์œผ๋กœ ์ง„ํ–‰ํ–ˆ์„ ๋•Œ ํฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  3. Max_batches : max_batches๋Š” AlexeyAB github์—์„œ ์ง„ํ–‰ํ•˜๋ผ๊ณ  ์ ์–ด๋‘” ๋‚ด์šฉ ๊ทธ๋Œ€๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜์‹œ๋Š” ๋ถ„๊ป˜์„œ Object Detection์„ ์ง„ํ–‰ํ•˜๋ฉฐ Classification์„ ์ง„ํ–‰ํ•  Class์˜ ๊ฐฏ์ˆ˜ * 2000 ์„ ์ ์–ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์น˜์•„์˜ class๊ฐ€ ์ด 32๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์— 32 * 2000 = 64000์œผ๋กœ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  4. Steps : max_batches์˜ 80%์ˆ˜์น˜์™€ 90% ์ˆ˜์น˜๋ฅผ ์ ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ €์˜ ๊ฒฝ์šฐ 64000*0.8, 64000 * 0.9 ->51200, 57600์œผ๋กœ ์ ์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.
[net]
batch=8
subdivisions=16
# Training
#width=512
#height=512
width=512
height=512
channels=3
momentum=0.949
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

learning_rate=0.00261
burn_in=1000
max_batches = 64000
policy=steps
steps=251200, 57600
scales=.1,.1

Mosaic=1 ์ด ๋ถ€๋ถ„์€ ์•„๋งˆ ๋…ผ๋ฌธ์—์„œ Mosaic Augmentation์„ ํ™œ์šฉํ•˜์˜€๋Š”๋ฐ, training augmentation์„ ์‚ฌ์šฉํ•˜๋Š” ์ง€ ์•ˆํ•˜๋Š” ์ง€์— ๋Œ€ํ•ด ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

Model Network ๋ณ€๊ฒฝ

์ด ๋‹ค์Œ์œผ๋กœ๋Š” ๊ทธ ๋ฐ‘ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. yolo๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•˜์—ฌ classes์™€ yolo์œ„์˜ filter ํฌ๊ธฐ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

vim editor์˜ ๊ฒฝ์šฐ, esc๋ฅผ ๋ˆ„๋ฅธ ํ›„

/yolo

๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

classes๋Š” ์‚ฌ์šฉํ•˜์‹œ๋Š” ๋ฐ์ดํ„ฐ์…‹์˜ class ๊ฐฏ์ˆ˜, filter์˜ ๊ฐฏ์ˆ˜๋Š” (classes + 5) * 3 ์œผ๋กœ ๊ฒŒ์‚ฐํ•˜์—ฌ ์ €์˜ ๊ฒฝ์šฐ์—๋Š” classes 32, filter ๊ฐฏ์ˆ˜๋Š” (32 + 5) * 3 = 111 ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

[convolutional]
size=1
stride=1
pad=1
filters=111
activation=linear


[yolo]
mask = 0,1,2
anchors = 12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401
classes=32
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
scale_x_y = 1.2
iou_thresh=0.213
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
nms_kind=greedynms
beta_nms=0.6

cfg์—์„œ ์œ„์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•ด์•ผํ•  ๋ถ€๋ถ„์€ ์ด 3๊ฐœ! vim์„ ํ†ตํ•ด์„œ /yolo๋ฅผ ์ฐพ์•˜๋‹ค๋ฉด ์†Œ๋ฌธ์ž n ์„ ํ†ตํ•ด์„œ ๋‹ค์Œ yolo๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ์ˆ˜์ •ํ•ด์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค!!

config์ˆ˜์ •์™„๋ฃŒ, Custom Dataset์„ ์“ฐ๊ธฐ ์šฉ์ดํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๊ธฐ

์ด์ œ๋Š” ๋ฐ์ดํ„ฐ์…‹์„ ์“ฐ๊ธฐ ์šฉ์ดํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋Š” ํŒŒ์ผ๋“ค์„ ๋งŒ๋“ค๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋งŒ๋“ค์–ด์•ผํ•  ํŒŒ์ผ์€ ํฌ๊ฒŒ 3๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

custom.txt

custom.names

custom.data

๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํด๋”(.jpg, .png๋“ฑ)์— ๊ฐ๊ฐ์˜ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด์„œ txtํŒŒ์ผ ๋งŒ๋“ค๊ธฐ(annotation)

์ฒซ ๋ฒˆ์งธ๋กœ custom.txt(์ฐธ๊ณ ํ•œ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณผ ๋•Œ train.txt๋กœ ์ €์žฅํ•˜์˜€๋Š”๋ฐ, ์ €๋Š” ์ž„์˜๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.)๋ฅผ ๋งŒ๋“ค ๋•Œ์˜ ์–‘์‹์ž…๋‹ˆ๋‹ค.

vim custom.txt
/Users/data/img/img_01.png
/Users/data/img/img_02.png
/Users/data/img/img_03.png
/Users/data/img/img_04.png
/Users/data/img/img_05.png

train ๋ฐ์ดํ„ฐ๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ๋กœ์™€ ํŒŒ์ผ์ด๋ฆ„์„ ๋ชจ๋‘ ์ ๋Š”๋ฐ, ์ƒ๋Œ€๊ฒฝ๋กœ๋ณด๋‹ค๋Š” ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ์ ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ๋กœ๋Š” custom.data ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. YOLO ํ›ˆ๋ จ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ฐธ๊ณ ํ•˜๋Š” ํŒŒ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

classes=32
train = "txtํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ๋กœ"/custom.txt
valid = "validation ํŒŒ์ผ์ด ๋”ฐ๋กœ ์žˆ์„ ๊ฒฝ์šฐ custom_validationํŒŒ์ผ์„ ๋งŒ๋“ค์–ด custom.txt์™€ ๊ฐ™์€ ๊ฒฝ๋กœ์— ๋งŒ๋“ค์–ด ๋‘์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค."
names = "txtํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ๋กœ"/custom.names #์•„๋ž˜์— custom.names๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๋„ ์ ์–ด๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.
backup = backup/ #ํ›ˆ๋ จ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ weight ํŒŒ์ผ์ด iteration ๋‹จ์œ„๋กœ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ weight ํŒŒ์ผ์ด ์ €์žฅ๋˜๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ๋กœ๋Š” custom.names ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ์ €์˜ ๊ฒฝ์šฐ์—๋Š” ์น˜์•„ ๋ฒˆํ˜ธ๊ฐ€ 1118, 2128, 3138, 4148 ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

11
12
13
...
44
45
46
47
48

๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํด๋”(.jpg, .png๋“ฑ)์— ๊ฐ๊ฐ์˜ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด์„œ txtํŒŒ์ผ ๋งŒ๋“ค๊ธฐ(annotation)

๋งˆ์ง€๋ง‰์œผ๋กœ๋Š” custom dataset์— ๋Œ€ํ•ด์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” annotation ํŒŒ์ผ์„ ๊ฐ๊ฐ์˜ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด์„œ .txtํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. (๊ผญ ๋ฐ์ดํ„ฐ(.png)๊ฐ€ ๋“ค์–ด๊ฐ€์žˆ๋Š” ํด๋”์•ˆ์— ์ด๋ฆ„๊ณผ ๋งค์นญํ•ด์„œ ๋„ฃ์–ด์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค!)

์˜ˆ๋ฅผ ๋“ค์–ด

(base) โžœ data (master) โœ— tree
.
โ”œโ”€โ”€ img_1.png
โ”œโ”€โ”€ img_1.txt
โ”œโ”€โ”€ img_2.png
โ”œโ”€โ”€ img_2.txt
โ”œโ”€โ”€ img_3.png
โ”œโ”€โ”€ img_3.txt
โ”œโ”€โ”€ img_4.png
โ”œโ”€โ”€ img_4.txt
โ”œโ”€โ”€ img_5.png
โ””โ”€โ”€ img_5.txt

0 directories, 10 files

์ด๋Ÿฐ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํด๋”(์ €๋Š” data๋ผ๋Š” ํด๋”์•ˆ์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ)์— data ์ด๋ฆ„๊ณผ ๋™์ผํ•˜๊ฒŒ .txtํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

.txtํŒŒ์ผ ์•ˆ์—๋Š” (0์—์„œ ์‹œ์ž‘ / ๋ชจ๋ธ์ด ๋ฝ‘๋Š” ์•„์›ƒํ’‹์˜ class๋กœ ๋งž์ถฐ์•ผํ•ฉ๋‹ˆ๋‹ค.), ์ด๋ ‡๊ฒŒ ์ด 5๊ฐœ๋ฅผ ์ ์–ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, ๋Š” ์ด๋ฏธ์ง€์˜ .png์˜ shape ๋‚ด์—์„œ์˜ ์ƒ๋Œ€์ขŒํ‘œ์ž…๋‹ˆ๋‹ค. (0 ~ 1)

# img_1.txt ๋‚ด๋ถ€

0 0.716797 0.395833 0.216406 0.147222
1 0.687109 0.379167 0.255469 0.158333
2 0.420312 0.395833 0.140625 0.166667
...

ํ•ด๋‹น ์ฝ”๋“œ๋Š” python์„ ํ†ตํ•ด์„œ ๊ตฌํ˜„ํ•˜์˜€์—ˆ๋Š”๋ฐ, ์„œ๋ฒ„๊ฐ€ ๋‹ซํžˆ๋Š” ๋ฐ”๋žŒ์— ๊ธ์–ด์˜ค์ง€ ๋ชปํ•ด ์•„์‰ฝ์Šต๋‹ˆ๋‹ค. Challenge์—์„œ์˜ annotation์€ ๋กœ ๊ตฌํ˜„ ๋ผ ์žˆ์–ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ •๋ฆฌ๋ฅผ ํ•œ๋‹ค๋ฉด

from PIL import Image
import numpy as np
import os

for img in sorted(os.listdir("data๊ฒฝ๋กœ")):	
  img_shp = np.array(Image.open(img)).shape[:2]
  #img_shp[0]๋Š” height์™€ ์—ฐ๊ด€๋จ
  #img_shp[1]๋Š” width์™€ ์—ฐ๊ด€๋จ
  
  #ํ…์ŠคํŠธ๋กœ ์ €์žฅํ•  ๋•Œ xmin, ymin, xmax, ymax ์‹์€ ๋Œ€๋žต
  #center x = xmin+xmax/2
  #center y = ymin+ymax/2
  #์ƒ๋Œ€์ขŒํ‘œ width (xmax - xmin) / img_shp[1]
  #์ƒ๋Œ€์ขŒํ‘œ height (ymax - ymin) / img_shp[0]
  

์ด๋Ÿฐ์‹์œผ๋กœ txtํŒŒ์ผ์— ์ €์žฅํ•˜๋„๋ก ์ฝ”๋“œ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. yolo๋Š” ์ƒ๋Œ€์ขŒํ‘œ๋กœ ์ง„ํ–‰๋˜๋Š” ์ ๊ณผ xmin, xmax, ymin, ymax ํ˜•์‹์˜ annotation์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹˜์„ ์ฃผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Training

์ด์ œ ์–ผ๋งˆ ๋‚จ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. c์–ธ์–ด๋กœ ์ž‘์„ฑ ๋ผ ์žˆ๋Š” ๋ชจ๋ธ์„ compileํ•ด์ฃผ์–ด training์„ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Darknet ์ž‘์—…๊ฒฝ๋กœ์—์„œ

vim Makefile

Makefile์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. GPU ์‚ฌ์šฉ ์œ ๋ฌด, CUDNN ์‚ฌ์šฉ์œ ๋ฌด, opencv ์‚ฌ์šฉ์œ ๋ฌด ๋“ฑ์„ ์ ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Makefile์„ ์ˆ˜์ •ํ•œ ํ›„์—๋Š”

make

make๋ฅผ ํƒ€์ดํ•‘ํ•˜์—ฌ ์ปดํŒŒ์ผ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ training์„ ์ง„ํ–‰ํ•˜๋ฉด ๋˜๋Š”๋ฐ

./darknet detector train custom.data cfg/yolov4.cfg 

ํ•ด๋‹น ๋ช…๋ น์–ด๋กœ Training์„ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. Pretrain weight๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ drive.google.com/open?id=1JKF-bdIklxOOVy-2Cr5qdvjgGpmGfcbp

๋งํฌ์—์„œ yolov4.conv.137 ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ณ 

./darknet detector train custom.data cfg/yolov4.cfg yolov4.conv.137

์ด๋ ‡๊ฒŒ ํ•™์Šต์„ ์ง„ํ–‰ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

inference

Challenge์— ์ฐธ์—ฌํ•  ๊ฒฝ์šฐ, Testset์ด ์ฃผ์–ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. testset์— ๋Œ€ํ•ด์„œ inference๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

./darknet detector test data/test.data "test์— ๋Œ€ํ•œ cfg".cfg "ํ•™์Šต์„ ๋งˆ์นœ weight".weights -dont_show < "testset์ด ์žˆ๋Š” ์ด๋ฏธ์ง€๋“ค์˜ ์ •๋ฆฌ๋œ .txtํŒŒ์ผ custom.txt์™€ ๋™์ผํ•œ ์–‘์‹" > result.txt

inference๋ฅผ ๋งˆ์นœ ํ›„ Challenge์—์„œ ์ œ๊ณตํ•˜๋Š” submission ์–‘์‹์œผ๋กœ ๋ฐ”๊พธ์–ด์„œ ์ œ์ถœ์„ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ œ์ถœ์–‘์‹์€ ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ๊ณ ์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ result.txt ์˜ output ๋˜ํ•œ ์ด๋ฏ€๋กœ Challenge submission์–‘์‹์ด ์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ณ€ํ™˜์„ ์ง„ํ–‰ํ•ด์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

About

๐Ÿฅ‡ 2021 ๊ตฌ๊ฐ•๊ณ„์งˆํ™˜ ์˜๋ฃŒ์˜์ƒ ์ธ๊ณต์ง€๋Šฅ(AI) Challenge YOLOv4

http://pjreddie.com/darknet/

License:Other


Languages

Language:C 64.5%Language:Cuda 15.0%Language:C++ 12.8%Language:Python 4.5%Language:CMake 1.4%Language:Batchfile 0.6%Language:Shell 0.6%Language:PowerShell 0.4%Language:Makefile 0.3%Language:C# 0.1%