๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋”ฅ๋Ÿฌ๋‹๐Ÿค–/YOLO, Opencv ๐Ÿข

[YOLO]#3 YOLO๋ฅผ ํ™œ์šฉํ•œ ๊ฐ์ฒด ํƒ์ง€ (Customํ•˜๊ธฐ)&๊ตฌ๊ธ€์ฝ”๋žฉ

by @ENFJ 2022. 11. 7.

์ด์ „ ์‹œ๊ฐ„์— ์ปค์Šคํ…€ ๋ฐ์ดํ„ฐ๋“ค์„ ํ•™์Šต์‹œ์ผœ๋ณด๋Š”๊ฑฐ ๊นŒ์ง€ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

!./darknet detector train custom/custom_data.data custom/custom-train-yolo.cfg weights/darknet53.conv.74 -dont_show

์‹คํ–‰ํ•˜๋‹ค ์ค‘์ง€ํ–ˆ์Œ..ใ…‹

์œ„ ๋ช…๋ น์–ด ์‹คํ–‰์‹œ ๋Œ€๋žต 6์‹œ๊ฐ„ ์ •๋„ ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ์š”,, ์ด ๊ณผ์ •์ด ๋๋‚˜๋ฉด ์ž๋™์œผ๋กœ ๊ตฌ๊ธ€ ์ฝ”๋žฉ์— backup ํด๋”์•ˆ์— weights ํŒŒ์ผ์ด ํœ˜๋ฐœ์„ฑ์œผ๋กœ ์ €์žฅ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. (ํœ˜๋ฐœ์„ฑ! ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ 6์‹œ๊ฐ„์ด๋‚˜ ํ•™์Šต ์‹œ์ผœ์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฌผ์ธ weights ํŒŒ์ผ์„ ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ๋‚˜ ๋กœ์ปฌ์— ๋”ฐ๋กœ ๋ณต์‚ฌ๋ฅผ ํ•ด๋‘์–ด์•ผ ๋œ๋‹ค๋Š”์ !! ๋ฐ‘์—์„œ ๋‹ค์‹œ ๋ช…๋ น์–ด์™€ ํ•จ๊ป˜ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค)

 

์ €๋Š” ๊ทธ๋ƒฅ ๊ตฌ๊ธ€๋ง ํ•ด์„œ ์ปค์Šคํ…€ ํ•œ weight ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด!  ์œ„ ์‹คํ–‰ ๊ฒฐ๊ณผ๋กœ weights ํŒŒ์ผ์ด ๋‚˜์˜ค๊ฒŒ ๋˜๋Š”๋ฐ ํ•œ ํŒŒ์ผ๋‹น 235mb ํฌ๊ธฐ์ด๋‹ค.

 

์ด์ œ ์—ฌ๋Ÿฌ๊ฐœ์˜ weights ํŒŒ์ผ๋“ค์˜ map(mean average precision) ์„ ๋น„๊ตํ•ด์•ผํ•œ๋‹ค.

์ด๋•Œ ์•Œ์•„์•ผํ•˜๋Š” ๊ฐœ๋…์ด overfitting ์ด๋ผ๋Š” ๊ฑด๋ฐ ํ•™์Šต์„ ๋งŽ์ด ํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ฌด์กฐ๊ฑด ๋” ์ข‹์•„์ง€๋Š”๊ฑด ์•„๋‹ˆ๋‹ค ๋ผ๋Š” ์˜๋ฏธ!๐Ÿ™„;

์Œ..๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ง€๋‚˜์น˜๊ฒŒ ํ•™์Šต์„ ํ•  ๊ฒฝ์šฐ ์˜คํžˆ๋ ค ์ •ํ™•๋„?๊ฐ€ ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ๋งŽ์ด ํ•™์Šตํ•œ๋‹ค๊ณ  ์ข‹๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์—†๋‹ค๊ณ  ๊ธฐ์–ตํ•ด๋‘์ž.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ์–ด๋–ค ์‹œ์ ์—์„œ overfitting์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ฐพ์•„์ฃผ๊ธฐ ์œ„ํ•ด ๊ฐ weights ํŒŒ์ผ๋“ค์˜ map ์„ ๋น„๊ตํ•ด๋ณด์•„์•ผํ•œ๋‹ค.

ํ•™์Šต ์‹ค์ปท ์‹œ์ผœ๋†“๊ณ  ์•ˆ ์ข‹์€ weights ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š”๊ฑด ์ข€ ์•„๋‹ˆ..๋‹ˆ๊นŒ ใ…Ž; [์ฐธ๊ณ ๋กœ map ๋Š” ์ˆ˜์น˜๊ฐ€ ๋†’์„์ˆ˜๋ก ์ข‹๋‹ค]

 

 

 

!./darknet detector map custom/custom_data.data custom/custom-train-yolo.cfg backup/custom-train-yolo_last.weights

 

 

์ž ์ด์ œ ํ•™์Šต์‹œํ‚จ weightsํŒŒ์ผ์ด ๋“ค์–ด์žˆ๋Š” backupํด๋”๋ฅผ ์ €์˜ ๊ตฌ๊ธ€๋“œ๋ผ์ด๋ธŒ ํด๋”๋กœ ๋„ฃ์–ด ์ค„๊ฒ๋‹ˆ๋‹ค.

if os.path.exists('.backup'):
	!cp -r ./backup "/content/gdrive/MyDrive/darknet"
    
if not os.path.exists('./backup'):
	os.makdirs('./backup')
    !cp -r "/content/gdrive/MyDrive/darknet/backup/custom-train-yolo-final.weights" ./backup

๋งŒ์•ฝ ๊ตฌ๊ธ€์ฝ”๋žฉ ์‚ฌ์šฉ์‹œ๊ฐ„์ด ์ง€๋‚˜ ํœ˜๋ฐœ์„ฑ๋•Œ๋ฌธ์— backํด๋”์— ์žˆ๋˜ ํŒŒ์ผ๋“ค์ด ๋‚ ์•„๊ฐ”๋‹ค๋ฉด,

backupํด๋”๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ณต์‚ฌ์‹œ์ผœ๋‘” ๊ตฌ๊ธ€๋“œ๋ผ์ด๋ธŒ์— ์žˆ๋Š” backup์— weights ํŒŒ์ผ์„ ๋‹ค์‹œ ๊ตฌ๊ธ€์ฝ”๋žฉ์˜ backupํด๋”๋กœ ๋ณต์‚ฌํ•ด์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

 

!.darknet detector test custom/custom_data.data custom/custom-train-yolo.cfg backup/custom-train-yolo_final.weights data/fruit10.jpg -dont-show
imShow('predictions.jpg')

์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ปค์Šคํ…€ ํ•œ weights ํŒŒ์ผ์„ ํ™œ์šฉํ•˜์—ฌ ์ปค์Šคํ…€ํ•œ YOLO ๋กœ ์–ด๋–ค ๊ฐ์ฒด ํƒ์ง€ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.