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

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

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

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

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

Watsonx is IBM's cloud-based platform designed for commercial generative AI and scientific data. IBM Watsonx's three components - watsonx.ai, watsonx.data๋ฐ watsonx.governance - come together to create an end-to-end, trustworthy AI platform that can accelerate AI projects aimed at solving business problems. It provides powerful tools for building, training, and deploying machine learning models and makes it easy to connect with various data sources.

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

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

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

IBM Watsonx is made of three main components: watsonx.ai, watsonx.data๋ฐ watsonx.governance. Each component offers features that cater to different aspects of AI and data management. Let's take a closer look at them.

์™“์Šจx.ai

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

Watsonx.data

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

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

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

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

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

์ „์ œ ์กฐ๊ฑด

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 ์„ค์น˜ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. YOLO11 ์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋™์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๊ณผ ํŒ์„ ํ™•์ธํ•˜์„ธ์š”.

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

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

# Import ultralytics
import ultralytics

ultralytics.checks()

# Import packages to retrieve and display image files

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

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

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๋‹จ๊ณ„: YOLO11 ๋ชจ๋ธ ํ•™์Šต

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

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

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

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

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

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

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

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

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

!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์˜ ๊ต์œก ํŠœํ† ๋ฆฌ์–ผ( YOLO11 )์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์š”์•ฝ

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

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

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

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

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

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

  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. ํ…Œ์ŠคํŠธ ๋ฐ ํ‰๊ฐ€: ์ถ”๋ก ์„ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋ธ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ •ํ™•๋„ ๋ฐ ํšŒ์ƒ๋ฅ ๊ณผ ๊ฐ™์€ ๋ฉ”ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

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

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

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

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

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

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

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

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

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

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

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

  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์—์„œ YOLO11 ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ „์ œ ์กฐ๊ฑด์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

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

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

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

5๊ฐœ์›” ์ „ ์ƒ์„ฑ๋จ โœ๏ธ ์—…๋ฐ์ดํŠธ๋จ 15์ผ ์ „

๋Œ“๊ธ€