์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

IBM ์™“์Šจx๋กœ YOLOv8 ๋ชจ๋ธ ํŠธ๋ ˆ์ด๋‹์„ ์œ„ํ•œ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ

์˜ค๋Š˜๋‚  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ปดํ“จํ„ฐ ๋น„์ „ ์†”๋ฃจ์…˜์€ ์ ์  ๋” ๋ณดํŽธํ™”๋˜๊ณ  ์žˆ์œผ๋ฉฐ ์‹œ๊ฐ์  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ๋ณ€ํ™”์‹œํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ์˜ˆ๋กœ AI ๋ชจ๋ธ์˜ ๊ฐœ๋ฐœ, ๋ฐฐํฌ, ๊ด€๋ฆฌ๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๋Š” ๊ณ ๊ธ‰ AI ๋ฐ ๋ฐ์ดํ„ฐ ํ”Œ๋žซํผ์ธ IBM Watsonx๋ฅผ ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด AI ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์œ„ํ•œ ์™„๋ฒฝํ•œ ์ œํ’ˆ๊ตฐ์„ ์ œ๊ณตํ•˜๋ฉฐ IBM ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์™€์˜ ์›ํ™œํ•œ ํ†ตํ•ฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Ultralytics YOLOv8 ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์™€ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์„ค์ •์œผ๋กœ ํšจ์œจ์ ์ธ ๋ชจ๋ธ ํ•™์Šต, ํŠน์ • ์ž‘์—…์— ๋Œ€ํ•œ ๋ฏธ์„ธ ์กฐ์ •, ๋ชจ๋ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ธฐ์—…์—๊ฒŒ ์ ํ•ฉํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ํ™˜๊ฒฝ ์„ค์ •๋ถ€ํ„ฐ ํ•™์Šต๋œ ๋ชจ๋ธ ํ‰๊ฐ€๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค๋ฃจ๋Š” IBM Watsonx๋กœ YOLOv8 ํ•™์Šตํ•˜๋Š” ๊ณผ์ •์„ ์•ˆ๋‚ดํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ง€๊ธˆ ์‹œ์ž‘ํ•˜์„ธ์š”!

IBM ์™“์Šจx๋ž€?

์™“์Šจx๋Š” ์ƒ์—…์šฉ ์ƒ์„ฑ AI ๋ฐ ๊ณผํ•™ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋œ IBM์˜ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. IBM ์™“์Šจx์˜ ์„ธ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ์ธ watsonx.ai, watsonx.data, watsonx.governance๊ฐ€ ๊ฒฐํ•ฉ๋˜์–ด ๋น„์ฆˆ๋‹ˆ์Šค ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” AI ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์†ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์—”๋“œํˆฌ์—”๋“œ AI ํ”Œ๋žซํผ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ๊ตฌ์ถ•, ํ•™์Šต ๋ฐ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ์‰ฝ๊ฒŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

IBM ์™“์Šจx ๊ฐœ์š”

์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค์™€ ํ˜‘์—… ๊ธฐ๋Šฅ์€ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ํšจ์œจ์ ์ธ ๋ชจ๋ธ ๊ด€๋ฆฌ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ ๋น„์ „, ์˜ˆ์ธก ๋ถ„์„, ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ, ๊ธฐํƒ€ AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ ์–ด๋–ค ๋ถ„์•ผ์—์„œ๋“  IBM Watsonx๋Š” ํ˜์‹ ์„ ์ถ”์ง„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋„๊ตฌ์™€ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

IBM ์™“์Šจx์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

IBM ์™“์Šจx๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ์ธ watsonx.ai, watsonx.data, watsonx.governance๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋Š” AI ๋ฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์˜ ๋‹ค์–‘ํ•œ ์ธก๋ฉด์„ ์ถฉ์กฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์™“์Šจx.ai

Watsonx.ai๋Š” AI ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ IBM์ด ์ง€์›ํ•˜๋Š” ๋งž์ถคํ˜• ๋ชจ๋ธ, Llama 3์™€ ๊ฐ™์€ ํƒ€์‚ฌ ๋ชจ๋ธ, IBM์˜ ์ž์ฒด Granite ๋ชจ๋ธ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” AI ํ”„๋กฌํ”„ํŠธ ์‹คํ—˜์„ ์œ„ํ•œ ํ”„๋กฌํ”„ํŠธ ๋žฉ, ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋œ ๋ฐ์ดํ„ฐ๋กœ ๋ชจ๋ธ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ํŠœ๋‹ ์ŠคํŠœ๋””์˜ค, ์ƒ์„ฑํ˜• AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ๊ฐ„์†Œํ™”ํ•˜๋Š” ํ”Œ๋กœ์šฐ ์—”์ง„์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ AI ๋ชจ๋ธ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ž๋™ํ™”ํ•˜๊ณ  ๋‹ค์–‘ํ•œ API ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํฌ๊ด„์ ์ธ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์™“์Šจx.๋ฐ์ดํ„ฐ

์™“์Šจx.data๋Š” IBM ์Šคํ† ๋ฆฌ์ง€ ํ“จ์ „ HCI ํ†ตํ•ฉ์„ ํ†ตํ•ด ํด๋ผ์šฐ๋“œ ๋ฐ ์˜จํ”„๋ ˆ๋ฏธ์Šค ๋ฐฐํฌ๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์ฝ˜์†”์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์˜ ๋ฐ์ดํ„ฐ์— ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ผ๋ฐ˜์ ์ธ SQL๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Presto ๋ฐ Spark์™€ ๊ฐ™์€ ํšจ์œจ์ ์ธ ์ฟผ๋ฆฌ ์—”์ง„์œผ๋กœ ์›Œํฌ๋กœ๋“œ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ , AI ๊ธฐ๋ฐ˜ ์‹œ๋งจํ‹ฑ ๊ณ„์ธต์œผ๋กœ ๋ฐ์ดํ„ฐ ์ธ์‚ฌ์ดํŠธ๋ฅผ ๊ฐ€์†ํ™”ํ•˜๋ฉฐ, AI ๊ด€๋ จ์„ฑ์„ ์œ„ํ•œ ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํฌํ•จํ•˜๊ณ , ๋ถ„์„ ๋ฐ AI ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐฉํ˜• ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์™“์Šจx.๊ฑฐ๋ฒ„๋„Œ์Šค

์™“์Šจx.๊ฑฐ๋ฒ„๋„Œ์Šค๋Š” ๊ทœ์ • ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž๋™์œผ๋กœ ์‹๋ณ„ํ•˜๊ณ  ์ •์ฑ…์„ ์‹œํ–‰ํ•˜์—ฌ ๊ทœ์ • ์ค€์ˆ˜๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์š”๊ฑด์„ ๋‚ด๋ถ€ ์œ„ํ—˜ ๋ฐ์ดํ„ฐ์— ์—ฐ๊ฒฐํ•˜๊ณ  ์ตœ์‹  AI ํŒฉํŠธ์‹œํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋žซํผ์€ ํŽธํ–ฅ์„ฑ ๋ฐ ํŽธํ–ฅ์„ฑ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๊ฒฝ๊ณ  ๋ฐ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์œ„ํ—˜์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ AI ๋ผ์ดํ”„์‚ฌ์ดํด์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ฌธ์„œํ™”๋ฅผ ์ž๋™ํ™”ํ•˜๊ณ , ๋ชจ๋ธ ์ธ๋ฒคํ† ๋ฆฌ๋กœ AI ๊ฐœ๋ฐœ์„ ์ฒด๊ณ„ํ™”ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ๋ณด๊ณ  ๋„๊ตฌ๋กœ ํ˜‘์—…์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.

IBM ์™“์Šจx๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ YOLOv8 ๊ต์œกํ•˜๋Š” ๋ฐฉ๋ฒ•

IBM ์™“์Šจx๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ YOLOv8 ๋ชจ๋ธ ๊ต์œก ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ€์†ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์ œ ์กฐ๊ฑด

watsonx.ai ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด IBM Cloud ๊ณ„์ •์ด ํ•„์š”ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ๋กœ๋“œํ•˜๋ ค๋ฉด Kaggle ๊ณ„์ •๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

1๋‹จ๊ณ„: ํ™˜๊ฒฝ ์„ค์ •

๋จผ์ €, ์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด IBM ๊ณ„์ •์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. IBM ํด๋ผ์šฐ๋“œ ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ watsonx.ai์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ watsonx.ai ํ”„๋กœ์ ํŠธ์™€ Jupyter ๋…ธํŠธ๋ถ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๋…ธํŠธ๋ถ ํ™˜๊ฒฝ์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค. ์ด ํŠœํ† ๋ฆฌ์–ผ์˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๊ฐ์ฒด ๊ฐ์ง€ ๋ชจ๋ธ ํ•™์Šต ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๋‹จ๊ณ„: ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ ๋ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•„์š”ํ•œ Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜

# Install the required packages
pip install torch torchvision torchaudio
pip install opencv-contrib-python-headless
pip install ultralytics==8.0.196

์„ค์น˜ ๊ณผ์ •๊ณผ ๊ด€๋ จ๋œ ์ž์„ธํ•œ ์ง€์นจ๊ณผ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋Š” Ultralytics ์„ค์น˜ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. YOLOv8 ์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋™์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๊ณผ ํŒ์„ ํ™•์ธํ•˜์„ธ์š”.

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ€์ ธ์˜ค๊ธฐ

# Import ultralytics
import ultralytics

ultralytics.checks()

# Import packages to retrieve and display image files

3๋‹จ๊ณ„: ๋ฐ์ดํ„ฐ ๋กœ๋“œ

์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” Kaggle์—์„œ ์ œ๊ณต๋˜๋Š” ํ•ด์–‘ ์“ฐ๋ ˆ๊ธฐ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์ค‘ ์ด๋ฏธ์ง€์—์„œ ์“ฐ๋ ˆ๊ธฐ์™€ ์ƒ๋ฌผํ•™์  ๋ฌผ์ฒด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜๋Š” YOLOv8 ๋ชจ๋ธ์„ ์‚ฌ์šฉ์ž ์ •์˜ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

Kaggle API๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ๋…ธํŠธ๋ถ์— ์ง์ ‘ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ €, ๋ฌด๋ฃŒ Kaggle ๊ณ„์ •์„ ๋งŒ๋“œ์„ธ์š”. ๊ณ„์ •์„ ๋งŒ๋“  ํ›„์—๋Š” API ํ‚ค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ "API ์ž๊ฒฉ ์ฆ๋ช…" ์„น์…˜ ์•„๋ž˜์˜ Kaggle API ์„ค๋ช…์„œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kaggle ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ API ํ‚ค๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋‹ค์Œ ์ฝ”๋“œ์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ API๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ Watsonx์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜

# Install kaggle
pip install kaggle

Kaggle์„ ์„ค์น˜ํ•œ ํ›„ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ Watsonx์— ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋กœ๋“œ

# Replace "username" string with your username
os.environ["KAGGLE_USERNAME"] = "username"
# Replace "apiKey" string with your key
os.environ["KAGGLE_KEY"] = "apiKey"

# Load dataset
os.system("kaggle datasets download atiqishrak/trash-dataset-icra19 --unzip")

# Store working directory path as work_dir
work_dir = os.getcwd()

# Print work_dir path
print(os.getcwd())

# Print work_dir contents
print(os.listdir(f"{work_dir}"))

# Print trash_ICRA19 subdirectory contents
print(os.listdir(f"{work_dir}/trash_ICRA19"))

๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ๋กœ๋“œํ•œ ํ›„, ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ธ์‡„ํ•˜์—ฌ ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๋‚ด์šฉ์„ ์ธ์‡„ํ•˜์—ฌ "trash_ICRA19" ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์ด ์ œ๋Œ€๋กœ ๋กœ๋“œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์šฉ ์ค‘ "trash_ICRA19"๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ๋กœ๋“œ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์„ธ ๊ฐœ์˜ ํŒŒ์ผ/ํด๋”๊ฐ€ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. config.yaml ํŒŒ์ผ, a videos_for_testing ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ dataset ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” videos_for_testing ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ์œผ๋ฏ€๋กœ ์ž์œ ๋กญ๊ฒŒ ์‚ญ์ œํ•˜์„ธ์š”.

config.yaml ํŒŒ์ผ๊ณผ ๋ฐ์ดํ„ฐ ์„ธํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ฝ˜ํ…์ธ ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ๊ฐ์ง€ ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ํ•ด์–‘ ์“ฐ๋ ˆ๊ธฐ ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ์ƒ˜ํ”Œ ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค.

๋ฐ”์šด๋”ฉ ๋ฐ•์Šค๊ฐ€ ์žˆ๋Š” ํ•ด์–‘ ์“ฐ๋ ˆ๊ธฐ

4๋‹จ๊ณ„: ๋ฐ์ดํ„ฐ ์‚ฌ์ „ ์ฒ˜๋ฆฌ

๋‹คํ–‰ํžˆ๋„ ํ•ด์–‘ ์“ฐ๋ ˆ๊ธฐ ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ๋ชจ๋“  ๋ผ๋ฒจ์€ ์ด๋ฏธ YOLO .txt ํŒŒ์ผ๋กœ ํฌ๋งท๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋ธ์ด ์ด๋ฏธ์ง€์™€ ๋ ˆ์ด๋ธ”์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด๋ฏธ์ง€์™€ ๋ ˆ์ด๋ธ” ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ์žฌ์ •๋ ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋กœ๋“œ๋œ ๋ฐ์ดํ„ฐ ์„ธํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์ด ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค:

๋กœ๋“œ๋œ ๋ฐ์ดํ„ฐ ์„ธํŠธ ๋””๋ ‰ํ† ๋ฆฌ

ํ•˜์ง€๋งŒ YOLO ๋ชจ๋ธ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ train/val/test ๋ถ„ํ•  ๋‚ด์˜ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณ„๋„์˜ ์ด๋ฏธ์ง€์™€ ๋ ˆ์ด๋ธ”์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์žฌ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

Yolo ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค:

๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ

# Function to reorganize dir
def organize_files(directory):
    for subdir in ["train", "test", "val"]:
        subdir_path = os.path.join(directory, subdir)
        if not os.path.exists(subdir_path):
            continue

        images_dir = os.path.join(subdir_path, "images")
        labels_dir = os.path.join(subdir_path, "labels")

        # Create image and label subdirs if non-existent
        os.makedirs(images_dir, exist_ok=True)
        os.makedirs(labels_dir, exist_ok=True)

        # Move images and labels to respective subdirs
        for filename in os.listdir(subdir_path):
            if filename.endswith(".txt"):
                shutil.move(os.path.join(subdir_path, filename), os.path.join(labels_dir, filename))
            elif filename.endswith(".jpg") or filename.endswith(".png") or filename.endswith(".jpeg"):
                shutil.move(os.path.join(subdir_path, filename), os.path.join(images_dir, filename))
            # Delete .xml files
            elif filename.endswith(".xml"):
                os.remove(os.path.join(subdir_path, filename))


if __name__ == "__main__":
    directory = f"{work_dir}/trash_ICRA19/dataset"
    organize_files(directory)

๋‹ค์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์— ๋Œ€ํ•œ .yaml ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ .yaml ํŒŒ์ผ์— ์‚ฌ์šฉํ•  ์„ค์ •์ž…๋‹ˆ๋‹ค. ํด๋ž˜์Šค ID ๋ฒˆํ˜ธ๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค:

path: /path/to/dataset/directory # root directory for dataset
train: train/images # train images subdirectory
val: train/images # validation images subdirectory
test: test/images # test images subdirectory

# Classes
names:
    0: plastic
    1: bio
    2: rov

๋‹ค์Œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ config.yaml์˜ ํ˜„์žฌ ๋‚ด์šฉ์„ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ ๋ฐ์ดํ„ฐ ์„ธํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ์œ„์˜ ๋‚ด์šฉ์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. 4๋ฒˆ์งธ ์ค„์˜ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ์˜ work_dir ๋ถ€๋ถ„์„ ์•ž์„œ ๊ฒ€์ƒ‰ํ•œ ์ž์‹ ์˜ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ๋กœ ๋ฐ”๊พธ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. train, val, test ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ •์˜๋Š” ๊ทธ๋Œ€๋กœ ๋‘ก๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฝ”๋“œ 23์ค„์˜ {work_dir}๋„ ๋ณ€๊ฒฝํ•˜์ง€ ๋งˆ์„ธ์š”.

.yaml ํŒŒ์ผ ํŽธ์ง‘

# Contents of new confg.yaml file
def update_yaml_file(file_path):
    data = {
        "path": "work_dir/trash_ICRA19/dataset",
        "train": "train/images",
        "val": "train/images",
        "test": "test/images",
        "names": {0: "plastic", 1: "bio", 2: "rov"},
    }

    # Ensures the "names" list appears after the sub/directories
    names_data = data.pop("names")
    with open(file_path, "w") as yaml_file:
        yaml.dump(data, yaml_file)
        yaml_file.write("\n")
        yaml.dump({"names": names_data}, yaml_file)


if __name__ == "__main__":
    file_path = f"{work_dir}/trash_ICRA19/config.yaml"  # .yaml file path
    update_yaml_file(file_path)
    print(f"{file_path} updated successfully.")

5๋‹จ๊ณ„: YOLOv8 ๋ชจ๋ธ ํ•™์Šต

๋‹ค์Œ ๋ช…๋ น์ค„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์ „ ํ•™์Šต๋œ ๊ธฐ๋ณธ ๋ชจ๋ธ( YOLOv8 )์„ ๋ฏธ์„ธ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

YOLOv8 ๋ชจ๋ธ ํ•™์Šต

!yolo task=detect mode=train data={work_dir}/trash_ICRA19/config.yaml model=yolov8s.pt epochs=2 batch=32 lr0=.04 plots=True

๋‹ค์Œ์€ ๋ชจ๋ธ ํ•™์Šต ๋ช…๋ น์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋Š” ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค:

  • ์ž‘์—…: ์ง€์ •๋œ YOLO ๋ชจ๋ธ ๋ฐ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ ๋น„์ „ ์ž‘์—…์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“œ: ์ง€์ •๋œ ๋ชจ๋ธ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋ชฉ์ ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ชจ๋ธ์„ ํ•™์Šต ์ค‘์ด๋ฏ€๋กœ "ํ•™์Šต"์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ๋Š” "์˜ˆ์ธก"์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • epochs: YOLOv8 ๊ฐ€ ์ „์ฒด ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ํ†ต๊ณผํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐ์น˜: ํ›ˆ๋ จ ๋ฐฐ์น˜ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ์ˆซ์ž ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋ฐฐ์น˜๋Š” ๋ชจ๋ธ์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์ „์— ์ฒ˜๋ฆฌํ•˜๋Š” ์ด๋ฏธ์ง€์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • lr0: ๋ชจ๋ธ์˜ ์ดˆ๊ธฐ ํ•™์Šต ์†๋„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ํ”Œ๋กฏ: YOLO ์œผ๋กœ ์ „๋‹ฌํ•˜์—ฌ ๋ชจ๋ธ์˜ ํ•™์Šต ๋ฐ ํ‰๊ฐ€ ๋ฉ”ํŠธ๋ฆญ์˜ ํ”Œ๋กฏ์„ ์ƒ์„ฑํ•˜๊ณ  ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ ํŠธ๋ ˆ์ด๋‹ ํ”„๋กœ์„ธ์Šค ๋ฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ชจ๋ธ ํŠธ๋ ˆ์ด๋‹ ๊ฐ€์ด๋“œ(YOLOv8 )๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์ด ๊ฐ€์ด๋“œ๋Š” ์‹คํ—˜์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๊ณ  YOLOv8 ์„ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

6๋‹จ๊ณ„: ๋ชจ๋ธ ํ…Œ์ŠคํŠธ

์ด์ œ ์ถ”๋ก ์„ ์‹คํ–‰ํ•˜์—ฌ ๋ฏธ์„ธ ์กฐ์ •๋œ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

YOLOv8 ๋ชจ๋ธ ํ…Œ์ŠคํŠธ

!yolo task=detect mode=predict source={work_dir}/trash_ICRA19/dataset/test/images model={work_dir}/runs/detect/train/weights/best.pt conf=0.5 iou=.5 save=True save_txt=True

์ด ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ๋Š” ํ…Œ์ŠคํŠธ ์„ธํŠธ์˜ ๊ฐ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์˜ˆ์ธก ๋ ˆ์ด๋ธ”๊ณผ ์›๋ณธ ์ด๋ฏธ์ง€ ์œ„์— ์˜ˆ์ธก๋œ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค๋ฅผ ์˜ค๋ฒ„๋ ˆ์ดํ•˜๋Š” ์ƒˆ ์ถœ๋ ฅ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์˜ˆ์ƒ .txt ๋ ˆ์ด๋ธ”์€ ๋‹ค์Œ์„ ํ†ตํ•ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. save_txt=True ์ธ์ˆ˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋˜๋ฉฐ, ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค ์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ์žˆ๋Š” ์ถœ๋ ฅ ์ด๋ฏธ์ง€๋Š” save=True ์ธ์ˆ˜์ž…๋‹ˆ๋‹ค.
๋งค๊ฐœ ๋ณ€์ˆ˜ conf=0.5 ์€ ์‹ ๋ขฐ ์ˆ˜์ค€์ด 50% ๋ฏธ๋งŒ์ธ ๋ชจ๋“  ์˜ˆ์ธก์„ ๋ฌด์‹œํ•˜๋„๋ก ๋ชจ๋ธ์— ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ iou=.5 ๋Š” ๋ชจ๋ธ์ด ๋™์ผํ•œ ํด๋ž˜์Šค์˜ ์ƒ์ž๊ฐ€ 50% ์ด์ƒ ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ ๋ฌด์‹œํ•˜๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•ด ์ƒ์„ฑ๋˜๋Š” ์ž ์žฌ์ ์ธ ์ค‘๋ณต ์ƒ์ž๋ฅผ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ˆ์ธก๋œ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค ์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜์—ฌ ๋ช‡ ๊ฐœ์˜ ์ด๋ฏธ์ง€์—์„œ ๋ชจ๋ธ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ธก ํ‘œ์‹œ

# Show the first ten images from the preceding prediction task
for pred_dir in glob.glob(f"{work_dir}/runs/detect/predict/*.jpg")[:10]:
    img = Image.open(pred_dir)
    display(img)

์œ„์˜ ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธ ์„ธํŠธ์˜ ์ด๋ฏธ์ง€ 10๊ฐœ๋ฅผ ํด๋ž˜์Šค ์ด๋ฆ„ ๋ ˆ์ด๋ธ” ๋ฐ ์‹ ๋ขฐ ์ˆ˜์ค€๊ณผ ํ•จ๊ป˜ ์˜ˆ์ธก๋œ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค์™€ ํ•จ๊ป˜ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

7๋‹จ๊ณ„: ๋ชจ๋ธ ํ‰๊ฐ€

๊ฐ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๋ชจ๋ธ์˜ ์ •ํ™•๋„ ๋ฐ ํšŒ์ˆ˜์œจ์— ๋Œ€ํ•œ ์‹œ๊ฐํ™”๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‹œ๊ฐํ™”๋Š” ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ train ํด๋” ์•„๋ž˜์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ •๋ฐ€๋„ ์ ์ˆ˜๋Š” P_curve.png์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค:

์ •๋ฐ€๋„ ์‹ ๋ขฐ๋„ ๊ณก์„ 

๊ทธ๋ž˜ํ”„๋Š” ์˜ˆ์ธก์— ๋Œ€ํ•œ ๋ชจ๋ธ์˜ ์‹ ๋ขฐ ์ˆ˜์ค€์ด ๋†’์•„์ง์— ๋”ฐ๋ผ ์ •ํ™•๋„๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋ธ ์ •ํ™•๋„๋Š” ๋‘ ๊ฐœ์˜ ์‹œ๋Œ€๊ฐ€ ์ง€๋‚œ ํ›„์—๋„ ์•„์ง ํŠน์ • ์‹ ๋ขฐ ์ˆ˜์ค€์—์„œ ํ‰์ค€ํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ฆฌ์ฝœ ๊ทธ๋ž˜ํ”„(R_curve.png)๋Š” ์—ญ ์ถ”์„ธ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค:

๋ฆฌ์ฝœ ์‹ ๋ขฐ๋„ ๊ณก์„ 

์ •ํ™•๋„์™€ ๋‹ฌ๋ฆฌ ์ •ํ™•๋„๋Š” ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ด๋ฉฐ, ์‹ ๋ขฐ๋„๊ฐ€ ๋‚ฎ์€ ์ธ์Šคํ„ด์Šค์—์„œ๋Š” ์ •ํ™•๋„๊ฐ€ ๋†’์•„์ง€๊ณ  ์‹ ๋ขฐ๋„๊ฐ€ ๋†’์€ ์ธ์Šคํ„ด์Šค์—์„œ๋Š” ์ •ํ™•๋„๊ฐ€ ๋‚ฎ์•„์ง‘๋‹ˆ๋‹ค. ์ด๋Š” ๋ถ„๋ฅ˜ ๋ชจ๋ธ์—์„œ ์ •ํ™•๋„์™€ ์žฌ์ธ์šฉ๋ฅ ์˜ ์ƒ์ถฉ ๊ด€๊ณ„๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ ์ ˆํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

8๋‹จ๊ณ„: ์œ ๋‹ˆ์˜จ์„ ํ†ตํ•œ ๊ต์ง‘ํ•ฉ ๊ณ„์‚ฐํ•˜๊ธฐ

๋™์ผํ•œ ๊ฐ์ฒด์— ๋Œ€ํ•ด ์˜ˆ์ธก๋œ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค์™€ ๊ธฐ์ค€ ์‹ค์ธก ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค ์‚ฌ์ด์˜ IoU๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์˜ˆ์ธก ์ •ํ™•๋„๋ฅผ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ IBM์˜ ๊ต์œก ํŠœํ† ๋ฆฌ์–ผ ( YOLOv8 )์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์š”์•ฝ

IBM ์™“์Šจx์˜ ์ฃผ์š” ๊ธฐ๋Šฅ๊ณผ IBM ์™“์Šจx๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ YOLOv8 ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋ธ ๊ตฌ์ถ•, ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ, ๊ทœ์ • ์ค€์ˆ˜๋ฅผ ์œ„ํ•œ ๊ณ ๊ธ‰ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด IBM ์™“์Šจx๊ฐ€ ์–ด๋–ป๊ฒŒ AI ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ IBM ์™“์Šจx ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋˜ํ•œ Ultralytics ํ†ตํ•ฉ ๊ฐ€์ด๋“œ ํŽ˜์ด์ง€์—์„œ ๋‹ค์–‘ํ•œ ํฅ๋ฏธ๋กœ์šด ํ†ตํ•ฉ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

IBM ์™“์Šจx๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ YOLOv8 ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?

IBM ์™“์Šจx๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ YOLOv8 ๋ชจ๋ธ์„ ํ•™์Šตํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”:

  1. ํ™˜๊ฒฝ ์„ค์ •ํ•˜๊ธฐ: IBM Cloud ๊ณ„์ •์„ ์ƒ์„ฑํ•˜๊ณ  Watsonx.ai ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋”ฉ ํ™˜๊ฒฝ์— Jupyter Notebook์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜: ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ torch, opencv๋ฐ ultralytics.
  3. ๋ฐ์ดํ„ฐ ๋กœ๋“œ: Kaggle API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ Watsonx์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ: ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ํ•„์š”ํ•œ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  .yaml ๊ตฌ์„ฑ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
  5. ๋ชจ๋ธ ํ›ˆ๋ จ: YOLO ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ • ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ต๋‹ˆ๋‹ค. epochs, batch size๋ฐ learning rate.
  6. ํ…Œ์ŠคํŠธ ๋ฐ ํ‰๊ฐ€: ์ถ”๋ก ์„ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋ธ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ •ํ™•๋„ ๋ฐ ํšŒ์ƒ๋ฅ ๊ณผ ๊ฐ™์€ ๋ฉ”ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์ง€์นจ์€ ๋ชจ๋ธ ๊ต์œก ๊ฐ€์ด๋“œ(YOLOv8 )๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

AI ๋ชจ๋ธ ํŠธ๋ ˆ์ด๋‹์„ ์œ„ํ•œ IBM ์™“์Šจx์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

IBM ์™“์Šจ์—‘์Šค๋Š” AI ๋ชจ๋ธ ํ•™์Šต์„ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • Watsonx.ai: IBM์ด ์ง€์›ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ๋ชจ๋ธ ๋ฐ Llama 3์™€ ๊ฐ™์€ ํƒ€์‚ฌ ๋ชจ๋ธ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํฌํ•จํ•˜์—ฌ AI ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ข…ํ•ฉ์ ์ธ AI ์ˆ˜๋ช… ์ฃผ๊ธฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ํ”„๋กฌํ”„ํŠธ ๋žฉ, ํŠœ๋‹ ์ŠคํŠœ๋””์˜ค, ํ”Œ๋กœ์šฐ ์—”์ง„์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • Watsonx.data: ํด๋ผ์šฐ๋“œ ๋ฐ ์˜จํ”„๋ ˆ๋ฏธ์Šค ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ์ค‘์•™ ์ง‘์ค‘์‹ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค, ํšจ์œจ์ ์ธ ์ฟผ๋ฆฌ ์—”์ง„(์˜ˆ: Presto ๋ฐ Spark), AI ๊ธฐ๋ฐ˜ ์‹œ๋งจํ‹ฑ ๋ ˆ์ด์–ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์™“์Šจx.๊ฑฐ๋ฒ„๋„Œ์Šค: ๊ทœ์ • ์ค€์ˆ˜๋ฅผ ์ž๋™ํ™”ํ•˜๊ณ , ์•Œ๋ฆผ์„ ํ†ตํ•ด ์œ„ํ—˜์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ํŽธํ–ฅ์„ฑ ๋ฐ ํŽธํ–ฅ์„ฑ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ˜‘์—…์„ ์œ„ํ•œ ๋Œ€์‹œ๋ณด๋“œ์™€ ๋ณด๊ณ  ๋„๊ตฌ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ IBM ์™“์Šจx ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Ultralytics YOLOv8 ๋ชจ๋ธ ๊ต์œก์— IBM ์™“์Šจx๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

IBM Watsonx๋Š” AI ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ฐ„์†Œํ™”ํ•˜๋Š” ํฌ๊ด„์ ์ธ ๋„๊ตฌ ๋ชจ์Œ์œผ๋กœ ์ธํ•ด Ultralytics YOLOv8 ๋ชจ๋ธ์„ ํ•™์Šตํ•˜๋Š” ๋ฐ ํƒ์›”ํ•œ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ์ฃผ์š” ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ํ™•์žฅ์„ฑ: IBM ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋กœ ๋ชจ๋ธ ๊ต์œก์„ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ†ตํ•ฉ: ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์†Œ์Šค ๋ฐ API์™€ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉํ•˜์„ธ์š”.
  • ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค: ํ˜‘์—…์ ์ด๊ณ  ์ง๊ด€์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณ ๊ธ‰ ๋„๊ตฌ: ๋ชจ๋ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•œ ํ”„๋กฌํ”„ํŠธ ๋žฉ, ํŠœ๋‹ ์ŠคํŠœ๋””์˜ค, ํ”Œ๋กœ์šฐ ์—”์ง„๊ณผ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ ํˆด์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ Ultralytics YOLOv8ํ†ตํ•ฉ ๊ฐ€์ด๋“œ์—์„œ IBM ์™“์Šจx๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์„ธ์š”.

IBM ์™“์Šจx์—์„œ YOLOv8 ๊ต์œก์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์‚ฌ์ „ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?

IBM ์™“์Šจx์—์„œ YOLOv8 ๊ต์œก์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์‚ฌ์ „ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด:

  1. ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์„ฑ: ๋ฐ์ดํ„ฐ ์„ธํŠธ๊ฐ€ YOLO ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅด๋ฉฐ, train/val/test ๋ถ„ํ•  ๋‚ด์—์„œ ์ด๋ฏธ์ง€์™€ ๋ ˆ์ด๋ธ”์„ ์œ„ํ•œ ๋ณ„๋„์˜ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. .yaml ํŒŒ์ผ ์—…๋ฐ์ดํŠธ: ์ˆ˜์ • .yaml ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์—ฌ ์ƒˆ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์™€ ํด๋ž˜์Šค ์ด๋ฆ„์„ ๋ฐ˜์˜ํ•˜์„ธ์š”.
  3. ์ „์ฒ˜๋ฆฌ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰: Python ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์žฌ๊ตฌ์„ฑํ•˜๊ณ  ๋‹ค์Œ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. .yaml ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์ •๋ฆฌํ•˜๋Š” ์ƒ˜ํ”Œ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค:

import os
import shutil


def organize_files(directory):
    for subdir in ["train", "test", "val"]:
        subdir_path = os.path.join(directory, subdir)
        if not os.path.exists(subdir_path):
            continue

        images_dir = os.path.join(subdir_path, "images")
        labels_dir = os.path.join(subdir_path, "labels")

        os.makedirs(images_dir, exist_ok=True)
        os.makedirs(labels_dir, exist_ok=True)

        for filename in os.listdir(subdir_path):
            if filename.endswith(".txt"):
                shutil.move(os.path.join(subdir_path, filename), os.path.join(labels_dir, filename))
            elif filename.endswith(".jpg") or filename.endswith(".png") or filename.endswith(".jpeg"):
                shutil.move(os.path.join(subdir_path, filename), os.path.join(images_dir, filename))


if __name__ == "__main__":
    directory = f"{work_dir}/trash_ICRA19/dataset"
    organize_files(directory)

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

IBM ์™“์Šจx์—์„œ YOLOv8 ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ „์ œ ์กฐ๊ฑด์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

IBM ์™“์Šจx์—์„œ YOLOv8 ๋ชจ๋ธ ํŠธ๋ ˆ์ด๋‹์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ ์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์ถฉ์กฑ๋˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”:

  • IBM ํด๋ผ์šฐ๋“œ ๊ณ„์ •: IBM Cloud์—์„œ ๊ณ„์ •์„ ์ƒ์„ฑํ•˜์—ฌ Watsonx.ai์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.
  • Kaggle ๊ณ„์ •: ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ๋กœ๋“œํ•˜๋ ค๋ฉด Kaggle ๊ณ„์ •๊ณผ API ํ‚ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ: ์ฝ”๋”ฉ ๋ฐ ๋ชจ๋ธ ํŠธ๋ ˆ์ด๋‹์„ ์œ„ํ•ด Watsonx.ai ๋‚ด์— Jupyter Notebook ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ์„ค์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Ultralytics ์„ค์น˜ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.


๐Ÿ“… Created 1 month ago โœ๏ธ Updated 10 days ago

๋Œ“๊ธ€