Darkflow: ์šœ๋กœ 9000

์— ๋งŒ๋“  2017๋…„ 02์›” 09์ผ  ยท  41์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: thtrieu/darkflow

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„!

๋†€๋ผ์šด ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

9000๊ฐœ์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋Š” YOLO9000 ๋ชจ๋ธ์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

YOLO 9000 cfg ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์•„๋ฌด๋„ ๋„์™€์ฃผ์„ธ์š”?

> find . -name '*.cfg' -exec cat {} \; | grep "classes"
classes=4
classes=20
classes=80
classes=2
classes=4
classes=20
classes=20
classes=4
classes=4
classes=20
classes=4
classes=2
classes=80
classes=4
classes=20
classes=80
classes=20
classes=20
classes=80

classes=9000 ์™€ ๊ฐ™์€ ๊ฒƒ์„ ๊ธฐ๋Œ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

help wanted

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ž‘๋™ํ–ˆ๋‹ค! :)

์ €๋Š” ์ง€๊ธˆ PR์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์žฅ ์ž˜ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๋‚œ ๋ฉฐ์น  ๋™์•ˆ ๋งŽ์€ ์ผ๋“ค์ด ์›€์ง์˜€์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ˜„์žฌ๋กœ์˜ ๋Œ€๋ถ€๋ถ„์ด ๋ณ„๋„์˜ darkflow/cython_utils/cy_yolo9000_findboxes.pyx ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์•„๋งˆ๋กœ ๋กค ์ˆ˜ cy_yolo2_findboxes.pyx ์™€์˜ if ๋ฌธ์— ๋‹ค๋ฅธ ๋ฉ”ํƒ€ ํ‚ค๋ฅผ ํฌํ•จ labels ๋ฐฉ๋ฒ• darkflow/darkflow/yolo/misc.py (๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฃจํ”„๋กœ ์ ํ”„ํ•˜๊ธฐ ์ „์— findbox์—์„œ softmax ๊ธฐ์ˆ ์„ ๋ถ„ํ• ํ•˜์‹ญ์‹œ์˜ค).

์ด๋ฏธ misc.py ์˜ ๋ ˆ์ด๋ธ” ๋ฉ”์„œ๋“œ์—์„œ if ๋ฌธ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๋”ฐ๋ผ ๋ถ€๋ชจ ์ธ๋ฑ์Šค๋ฅผ ์ž์‹ ๋…ธ๋“œ ๋ชฉ๋ก์— ๋งคํ•‘ํ•˜๋Š” ์‚ฌ์ „์ธ hyponym_map ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ํ˜„์žฌ cfg/ ํด๋”์— data/ ํด๋”๊ฐ€ ์žˆ๊ณ  ํŒŒ์ผ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ๊ตฌ์„ฑ ๋ฐ meta['tree'] ๋ฐ meta['map'] ์˜ ๊ฒฝ๋กœ๋ฅผ ๊ฒฐํ•ฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…๋ ฅ์ด ์—†์œผ๋ฉด ๋‚˜์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํ™๋ณดํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ชจ๋‘ ๊ท€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค!

๋ชจ๋“  41 ๋Œ“๊ธ€

๊ตฌ์„ฑ์€ ์—ฌ๊ธฐ , ์ž‘์„ฑ์ž๊ฐ€ YOLO9000 ๊ฐ€์ค‘์น˜ ํŒŒ์ผ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‚˜๋Š” weight9000์„ ์ฐพ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ด๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ๋•๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์— ๊ฒŒ์‹œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ€์ค‘์น˜ ํŒŒ์ผ์€ ์—ฌ๊ธฐ: http://pjreddie.com/media/files/yolo9000.weights

์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ–ˆ์Šต๋‹ˆ๊นŒ? weights ํŒŒ์ผ๊ณผ config ํŒŒ์ผ์„ ๋„ฃ๊ณ  9k.names ํŒŒ์ผ๋„ ๋‹ค์šด๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์€ ๊ทธ๋ฆฌ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€ ์•Š์•˜์ง€๋งŒ ์‚ฌํ›„ ์ฒ˜๋ฆฌ๋Š” ์ผ๋ฐ˜ yolo.cfg ๋ฐ yolo.weights ์„ค์ •๋ณด๋‹ค ์•ฝ 10๋ฐฐ ๋” ์˜ค๋ž˜ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๋ฐ˜ํ™˜ ์ด๋ฏธ์ง€์—๋Š” ๊ฒฝ๊ณ„ ์ƒ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ญ”๊ฐ€ ์ž˜๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

yolo9000.cfg ๋ณด๋‹ˆ ๋” ํ•ด์•ผ ํ•  ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. yolo9000 ๋Š” ์ผ๋ฐ˜์ ์ธ softmax๊ฐ€ ์•„๋‹ˆ๋ผ ๊ทธ๋ฃนํ™”๋œ softmax๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๋งค์šฐ ๋ฐ”๋น ์„œ ๊ทธ ์ผ์„ ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ฒ ์ง€๋งŒ ์ ์–ด๋„ ์ด๋ฒˆ ์ฃผ์™€ ๋‹ค์Œ ์ฃผ์—๋Š” ๊ทธ๋Ÿฌ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋„ค ์ „ํ˜€ ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์‘๋‹ต ์‹œ๊ฐ„์€ ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. :) ์ด ์ž‘์—…์— ํˆฌ์ž…ํ•œ ๋ชจ๋“  ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ •๋ง ๊น”๋”ํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ์ž˜๋ชป๋œ ์ผ์„ ํ•˜๊ณ  ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์„œ๋‘๋ฅผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์†Œ์‹์ด ์žˆ๋‚˜์š”?
๋‚˜๋Š” bagshaw์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ฌํ›„ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ 10๋ฐฐ ๋Š๋ฆฌ๊ณ  ๊ฒฝ๊ณ„ ์ƒ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
cf ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๊ฐ์‚ฌ!

@thtrieu ํ˜„์žฌ๋กœ์„œ๋Š” darkflow์— YOLO 9000 ๊ธฐ๋Šฅ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ €๋Š” ์ œ ๋…ผ๋ฌธ ํ”„๋กœ์ ํŠธ์— YOLO9000์„ ์‚ฌ์šฉํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋น„๋ก ํฌ๊ฒŒ ์กฐ์ •ํ•˜๊ฒ ์ง€๋งŒ). ์ด๊ฒƒ์ด YOLOv2์˜ ์œ ์ผํ•œ ํ…์„œํ”Œ๋กœ์šฐ ๊ตฌํ˜„์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜๋ฉด ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ช‡ ์ฃผ๊ฐ€ ๋” ๊ฑธ๋ฆด ๊ฒƒ์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋” ๋นจ๋ฆฌ ์‹œ๊ฐ„์„ ๋‚ธ๋‹ค๋ฉด ์ €์—๊ฒŒ๋„ ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค! ;)

์•ž์œผ๋กœ ๋ฉฐ์น  ๋™์•ˆ ์‹œ๊ฐ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ML์— ๋Œ€ํ•œ ์ดํ•ด์™€ ์ด ์žฅ๋ฉด ๋’ค์—์„œ ์‹ค์ œ๋กœ ์ผ์–ด๋‚˜๋Š” ์ผ์— ๋Œ€ํ•œ ์ดํ•ด๋Š” ๋งค์šฐ ์–•์Šต๋‹ˆ๋‹ค. YOLO 9000์„ ์ž‘๋™์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ •ํ™•ํžˆ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋ณต์žกํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๊ณ  ์ œ๊ฐ€ ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค(๋งค์šฐ ๋ณต์žกํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ท€์ฐฎ๊ฒŒ ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ๋‚ด๊ฐ€ ์•„์ฃผ ๋ฉ€๋ฆฌ ๊ฐˆ์ง€ ์˜์‹ฌ ์Šค๋Ÿฝ๋‹ค :) )

@abagshaw ํ•ด์•ผ ํ•  ์ผ์€ .cfg ์—์„œ ๋‹ค์Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

random=1
tree=data/9k.tree
map = data/coco9k.map

์ด๊ฒƒ๋“ค์€ ํ˜„์žฌ ์ฝ”๋“œ์— ์˜ํ•ด meta dict๋กœ ์ฝํ˜€์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ •์ด ํ•„์š”ํ•œ ์œ ์ผํ•œ ์ฝ”๋“œ๋Š” ์ถœ๋ ฅ ํ…์„œ๋ฅผ ํ•ด์„ํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ meta['random'], meta['tree'], meta['map'] ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ํฌ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ฒฝ๊ณ„ ์ƒ์ž๋ฅผ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด softmax์— ๋Œ€ํ•œ backpropagation๊ณผ softmax์˜ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ตฌํ˜„์ด ํ•„์š”ํ•˜์ง€ ์•Š์„๊นŒ์š”? (backprop์€ ๊ด€๋ จ๋œ softmax ๋…ธ๋“œ์—์„œ๋งŒ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?)

๋„ค, ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ์ด๊ฒŒ ์ข€ ๊ณผํ•œ ๊ฒƒ ๊ฐ™์•„์š”. ๋‚˜๋Š” https://github.com/pjreddie/darknet/commit/d2dece3df743c97f2cfbb9bbf0dd0449a8730cec๋ฅผ ํ†ตํ•ด ๋น—์งˆํ•˜๊ณ  ์žˆ์—ˆ๊ณ  ๊ฑฐ๊ธฐ์—์„œ ๋‚ด๊ฐ€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๋งŽ์€ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ„์† ์ฐ”๋Ÿฌ๋ณด๊ฒ ์ง€๋งŒ ๋ฉ€๋ฆฌ ๊ฐˆ ๊ฒƒ ๊ฐ™์ง„ ์•Š๋„ค์š”.

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ tensorflow์—์„œ ๋” ๋น ๋ฅธ RCNN์— yolo9000 ๋ถ„๋ฅ˜ ๊ณ„์ธต์„ ๋ถ™์ด๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฅผ ๊ฒƒ์ด๋ผ๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋…ผ๋ฌธ์ด ๋๋‚˜๋ฉด ๊ฐ™์ด ์ทจ๋ฏธ์ƒํ™œ์„ ํ•ด๋ณผ ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, 4๊ฐœ์›”์€ ๋” ์•ˆ ๊ฐˆ ๊ฒƒ ๊ฐ™์•„์š” ;)

๋“œ๋ž˜ํŠธ - ๋„ˆ๋ฌด ๋‚˜์ฉ๋‹ˆ๋‹ค. ์ด ์ „์ฒด WordNet ํŠธ๋ฆฌ ๋ถ„๋ฅ˜ ์ž‘์—…์ด yolo9000์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ๋จธ๋ฆฌ๋ฅผ ์‹ธ๋งค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‚ด์šฉ์„ ๋” ์ž˜ ์ดํ•ดํ•˜์—ฌ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ๊ณง ์ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์‹œ๊ฐ„์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. :)

์—ฌ๋Ÿฌ๋ถ„, ์ €๋Š” YOLO 9000์„ ์œ„ํ•œ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์—ฌ๊ธฐ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์ธ ํ•ด๋ด:

https://github.com/philipperemy/yolo-9000

darkflow ๋Œ€์‹  darknet์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ด์‹ํ•˜๊ธฐ๊ฐ€ ๊ฝค ์‰ฌ์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@abagshaw @TheLaurens @saiprabhakar @thtrieu @frey123

@philipperemy ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋†“์น˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ darkflow์—์„œ YOLO9000์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์–ด๋–ป๊ฒŒ ๋” ๊ฐ€๊นŒ์›Œ์กŒ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

YOLO9000์„ darkflow๋กœ ์ด์‹ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ต‰์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

@abagshaw ๊ฐ€ darknet์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์˜€์Šต๋‹ˆ๋‹ค. ์ด์ œ darkflow์—์„œ ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ์ง‘์ค‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

@philipperemy ์ข‹์•„์š”! ์šฐ๋ฆฌ์—๊ฒŒ ๊ณ„์† ์•Œ๋ ค์ค˜ :)

@philipperemy darkflow ์—์„œ YOLO9000์ด ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐ ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ? :)

์•„์ง ํฐ ์ง„์ „์ด ์—†์–ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค! ์ง€๊ธˆ์€ ์ผ์ด ๋ฐ”๋น ์š” :)

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฃผ์ œ์™€ ๊ด€๋ จ๋œ ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์„ ํ•ด๋„ ๋ ๊นŒ์š”?
ํ˜„์žฌ yolo.cfg๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ 2๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด๊ฒŒ๋ฅผ ์œ„ํ•ด ๋‚˜๋Š” yolo.weights๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์„ ํ›ˆ๋ จ์‹œํ‚จ ํ›„์—๋Š” ๊ฝค ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Q1: ์ด ๋ฌธ์ œ์—์„œ ํด๋ž˜์Šค ์ˆ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฐ€์ค‘์น˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” yolo.weights๊ฐ€ ์ ์–ด๋„ 20๊ฐœ์˜ ํด๋ž˜์Šค์— ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๋ง์ด ๋งž์•„?

Q2: ์ด yolo.weights๋ฅผ ๋ช‡ ๊ฐœ์˜ ํด๋ž˜์Šค์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

Q3: 2๊ฐœ์˜ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋ชจ๋ธ์˜ ์ฒดํฌํฌ์ธํŠธ๋ฅผ 3๊ฐœ์˜ ํด๋ž˜์Šค์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ชจ๋ธ์˜ ์‹œ์ž‘ ๊ฐ€์ค‘์น˜๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@chengs2000 ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์€ ์‹ค์ œ๋กœ YOLO9000๊ณผ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ์งˆ๋ฌธ์„ ์ƒˆ ๋ฌธ์ œ์— ๊ฒŒ์‹œํ•˜๋ฉด ๊ฑฐ๊ธฐ์—์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋ฏธ ์ด๊ฒƒ์„ํ•˜์ง€ ์•Š๋Š” ํ•œ (@philipperemy?) ์‹œ๋„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฉฐ์น  ํ›„์— ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@relh ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”! ๋‚˜๋Š” ์ด๊ฒƒ์— ์ง‘์ค‘ํ•  ์‹œ๊ฐ„์ด ๋ณ„๋กœ ์—†์—ˆ๋‹ค.

@relh ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๐Ÿ˜ƒ

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ž‘๋™ํ–ˆ๋‹ค! :)

์ €๋Š” ์ง€๊ธˆ PR์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์žฅ ์ž˜ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๋‚œ ๋ฉฐ์น  ๋™์•ˆ ๋งŽ์€ ์ผ๋“ค์ด ์›€์ง์˜€์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ˜„์žฌ๋กœ์˜ ๋Œ€๋ถ€๋ถ„์ด ๋ณ„๋„์˜ darkflow/cython_utils/cy_yolo9000_findboxes.pyx ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์•„๋งˆ๋กœ ๋กค ์ˆ˜ cy_yolo2_findboxes.pyx ์™€์˜ if ๋ฌธ์— ๋‹ค๋ฅธ ๋ฉ”ํƒ€ ํ‚ค๋ฅผ ํฌํ•จ labels ๋ฐฉ๋ฒ• darkflow/darkflow/yolo/misc.py (๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฃจํ”„๋กœ ์ ํ”„ํ•˜๊ธฐ ์ „์— findbox์—์„œ softmax ๊ธฐ์ˆ ์„ ๋ถ„ํ• ํ•˜์‹ญ์‹œ์˜ค).

์ด๋ฏธ misc.py ์˜ ๋ ˆ์ด๋ธ” ๋ฉ”์„œ๋“œ์—์„œ if ๋ฌธ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๋”ฐ๋ผ ๋ถ€๋ชจ ์ธ๋ฑ์Šค๋ฅผ ์ž์‹ ๋…ธ๋“œ ๋ชฉ๋ก์— ๋งคํ•‘ํ•˜๋Š” ์‚ฌ์ „์ธ hyponym_map ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ํ˜„์žฌ cfg/ ํด๋”์— data/ ํด๋”๊ฐ€ ์žˆ๊ณ  ํŒŒ์ผ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ๊ตฌ์„ฑ ๋ฐ meta['tree'] ๋ฐ meta['map'] ์˜ ๊ฒฝ๋กœ๋ฅผ ๊ฒฐํ•ฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…๋ ฅ์ด ์—†์œผ๋ฉด ๋‚˜์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํ™๋ณดํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ชจ๋‘ ๊ท€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค!

@relh ๊ต‰์žฅํ•˜๋‹ค! ์ด ์ž‘์—…์„ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!

๋‚ด 2์„ผํŠธ์˜ ๊ฒฝ์šฐ: cy_yolo9000_findboxes.pyx ์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ cy_yolo2_findboxes.pyx ์ž‘์„ฑ๋œ ์ฝ”๋“œ์™€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๋ถ€๋ถ„์˜ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒฝ์šฐ (์ค‘๋ณต ์ฝ”๋“œ ์ถ”๊ฐ€๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด) ๊ธฐ์กด ํŒŒ์ผ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณด์ง€ ์•Š๊ณ ๋Š” ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค(YOLO9000์ด YOLOv2์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ์ •ํ™•ํžˆ ์•Œ์ง€ ๋ชปํ•จ). ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ตœ์„ ์˜ ํŒ๋‹จ์„ ๋‚ด๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

PR์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค!

@relh ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!! ์ตœ๊ทผ์— ๋„ˆ๋ฌด ๋ฐ”๋น ์„œ ์ž‘์—…ํ•  ์‹œ๊ฐ„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค!

@relh ์ด๊ฒƒ์€ ์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค. PR์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

์—„์ฒญ๋‚œ! (์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค).

์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? YOLO9000์— ๋Œ€ํ•œ tensorflow ๊ตฌํ˜„์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ™์€ ์ ์„ ์ง€์ ํ•ด์ฃผ์„ธ์š”. ๊ฐ์‚ฌ.

์ด ๋ฌธ์ œ์˜ ์งˆ๋ฌธ: pjreddie๋Š” ์ž์‹ ์˜ YOLO ์›น์‚ฌ์ดํŠธ ์—์„œ YOLO9000์„ YOLOv2๋กœ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. "What's new in Version 2" ์„น์…˜์œผ๋กœ ์ด๋™ํ•˜์—ฌ ํ•ด๋‹น ๋…ผ๋ฌธ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด YOLO9000 ๋…ผ๋ฌธ์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Darkflow์— YOLO9000 ๊ตฌํ˜„์ด ์—†๋‹ค๋ฉด Darkflow์˜ ๋งฅ๋ฝ์—์„œ YOLOv2๋Š” ์ •ํ™•ํžˆ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Yolo9k๋Š” ๊ฒฝ๊ณ„ ์ƒ์ž ํ•™์Šต ๋ฐฉ๋ฒ•์œผ๋กœ imagenet์—์„œ ํ•™์Šต๋œ ๋ชจ๋ธ์ธ ๋ฐ˜๋ฉด ๊ธฐ๋ณธ yolov2๋Š” COCO์—์„œ ํ•™์Šต๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@ํ•„๋ฆฌํŽ˜๋ ˆ๋ฏธ

1) ์ฝ”๋“œ๊ฐ€ CPU์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด์œ ๋ฅผ ์•„์‹ญ๋‹ˆ๊นŒ?
2) ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์™€ ๋‹คํฌ๋„ท์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ฐ์‚ฌ!

@moskiteau ์ฝ”๋“œ๋Š” GPU์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
๋‚ด ํ”„๋กœ์ ํŠธ๋Š” darknet์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ YOLO9000์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

CPU ํ”Œ๋ž˜๊ทธ๋กœ ์ปดํŒŒ์ผ:

seb@PHQ-4035-En:~/projects/stockshot/darknet$ ./darknet detector test cfg/combine9k.data cfg/yolo9000.cfg yolo9000.weights data/person.jpg
layer     filters    size              input                output
    0 conv     32  3 x 3 / 1   544 x 544 x   3   ->   544 x 544 x  32
    1 max          2 x 2 / 2   544 x 544 x  32   ->   272 x 272 x  32
    2 conv     64  3 x 3 / 1   272 x 272 x  32   ->   272 x 272 x  64
    3 max          2 x 2 / 2   272 x 272 x  64   ->   136 x 136 x  64
    4 conv    128  3 x 3 / 1   136 x 136 x  64   ->   136 x 136 x 128
    5 conv     64  1 x 1 / 1   136 x 136 x 128   ->   136 x 136 x  64
    6 conv    128  3 x 3 / 1   136 x 136 x  64   ->   136 x 136 x 128
    7 max          2 x 2 / 2   136 x 136 x 128   ->    68 x  68 x 128
    8 conv    256  3 x 3 / 1    68 x  68 x 128   ->    68 x  68 x 256
    9 conv    128  1 x 1 / 1    68 x  68 x 256   ->    68 x  68 x 128
   10 conv    256  3 x 3 / 1    68 x  68 x 128   ->    68 x  68 x 256
   11 max          2 x 2 / 2    68 x  68 x 256   ->    34 x  34 x 256
   12 conv    512  3 x 3 / 1    34 x  34 x 256   ->    34 x  34 x 512
   13 conv    256  1 x 1 / 1    34 x  34 x 512   ->    34 x  34 x 256
   14 conv    512  3 x 3 / 1    34 x  34 x 256   ->    34 x  34 x 512
   15 conv    256  1 x 1 / 1    34 x  34 x 512   ->    34 x  34 x 256
   16 conv    512  3 x 3 / 1    34 x  34 x 256   ->    34 x  34 x 512
   17 max          2 x 2 / 2    34 x  34 x 512   ->    17 x  17 x 512
   18 conv   1024  3 x 3 / 1    17 x  17 x 512   ->    17 x  17 x1024
   19 conv    512  1 x 1 / 1    17 x  17 x1024   ->    17 x  17 x 512
   20 conv   1024  3 x 3 / 1    17 x  17 x 512   ->    17 x  17 x1024
   21 conv    512  1 x 1 / 1    17 x  17 x1024   ->    17 x  17 x 512
   22 conv   1024  3 x 3 / 1    17 x  17 x 512   ->    17 x  17 x1024
   23 conv  28269  1 x 1 / 1    17 x  17 x1024   ->    17 x  17 x28269
   24 detection
mask_scale: Using default '1.000000'
Loading weights from yolo9000.weights...Done!
data/person.jpg: Predicted in 13.577125 seconds.
Tuareg: 25%
wild horse: 27%
goat herder: 82%
Shetland pony: 86%
German shepherd: 48%
Gordon setter: 51%
seb@PHQ-4035-En:~/projects/stockshot/darknet$

GPU ํ”Œ๋ž˜๊ทธ๋กœ ์ปดํŒŒ์ผ:

seb@PHQ-4035-En:~/projects/stockshot/darknet$ ./darknet detector test cfg/combine9k.data cfg/yolo9000.cfg yolo9000.weights data/person.jpg
layer     filters    size              input                output
    0 conv     32  3 x 3 / 1   544 x 544 x   3   ->   544 x 544 x  32
    1 max          2 x 2 / 2   544 x 544 x  32   ->   272 x 272 x  32
    2 conv     64  3 x 3 / 1   272 x 272 x  32   ->   272 x 272 x  64
    3 max          2 x 2 / 2   272 x 272 x  64   ->   136 x 136 x  64
    4 conv    128  3 x 3 / 1   136 x 136 x  64   ->   136 x 136 x 128
    5 conv     64  1 x 1 / 1   136 x 136 x 128   ->   136 x 136 x  64
    6 conv    128  3 x 3 / 1   136 x 136 x  64   ->   136 x 136 x 128
    7 max          2 x 2 / 2   136 x 136 x 128   ->    68 x  68 x 128
    8 conv    256  3 x 3 / 1    68 x  68 x 128   ->    68 x  68 x 256
    9 conv    128  1 x 1 / 1    68 x  68 x 256   ->    68 x  68 x 128
   10 conv    256  3 x 3 / 1    68 x  68 x 128   ->    68 x  68 x 256
   11 max          2 x 2 / 2    68 x  68 x 256   ->    34 x  34 x 256
   12 conv    512  3 x 3 / 1    34 x  34 x 256   ->    34 x  34 x 512
   13 conv    256  1 x 1 / 1    34 x  34 x 512   ->    34 x  34 x 256
   14 conv    512  3 x 3 / 1    34 x  34 x 256   ->    34 x  34 x 512
   15 conv    256  1 x 1 / 1    34 x  34 x 512   ->    34 x  34 x 256
   16 conv    512  3 x 3 / 1    34 x  34 x 256   ->    34 x  34 x 512
   17 max          2 x 2 / 2    34 x  34 x 512   ->    17 x  17 x 512
   18 conv   1024  3 x 3 / 1    17 x  17 x 512   ->    17 x  17 x1024
   19 conv    512  1 x 1 / 1    17 x  17 x1024   ->    17 x  17 x 512
   20 conv   1024  3 x 3 / 1    17 x  17 x 512   ->    17 x  17 x1024
   21 conv    512  1 x 1 / 1    17 x  17 x1024   ->    17 x  17 x 512
   22 conv   1024  3 x 3 / 1    17 x  17 x 512   ->    17 x  17 x1024
   23 conv  28269  1 x 1 / 1    17 x  17 x1024   ->    17 x  17 x28269
   24 detection
mask_scale: Using default '1.000000'
Loading weights from yolo9000.weights...Done!
data/person.jpg: Predicted in 0.060738 seconds.
African: 25%
worker: 82%
horse: 86%
working dog: 48%
hunting dog: 50%

./darknet ๊ฐ์ง€๊ธฐ ํ…Œ์ŠคํŠธ cfg/combine9k.data cfg/yolo9000.cfg yolo9000.weights ๋ฐ์ดํ„ฐ/person.jpg -thresh .25 -hier .001

๋ˆ„๊ตฐ๊ฐ€ 9000 ๋ ˆ์ด๋ธ” ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํŒŒ์ผ 9k.tree(์˜ˆ: n0000245 -1, n0566538625 4)์—์„œ -1๊ณผ 4๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ์ด ํŒŒ์ผ 9k.tree๋กœ ์–ด๋–ป๊ฒŒ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@yaxiongchi
-1์€ ๋‚˜๋ฌด์˜ ๋ฟŒ๋ฆฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
4: ์•„๋ฒ„์ง€ ๋…ธ๋“œ์˜ ์ธ๋ฑ์Šค

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

ShawnDing1994 picture ShawnDing1994  ยท  4์ฝ”๋ฉ˜ํŠธ

hrshovon picture hrshovon  ยท  5์ฝ”๋ฉ˜ํŠธ

pribadihcr picture pribadihcr  ยท  5์ฝ”๋ฉ˜ํŠธ

bareblackfoot picture bareblackfoot  ยท  5์ฝ”๋ฉ˜ํŠธ

halt9 picture halt9  ยท  3์ฝ”๋ฉ˜ํŠธ