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.
์ฌ์ฉ์ ์นํ์ ์ธ ์ธํฐํ์ด์ค์ ํ์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๊ณ ํจ์จ์ ์ธ ๋ชจ๋ธ ๊ด๋ฆฌ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ง์ํฉ๋๋ค. ์ปดํจํฐ ๋น์ , ์์ธก ๋ถ์, ์์ฐ์ด ์ฒ๋ฆฌ, ๊ธฐํ 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 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๊ณ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
์ค์น
์ค์น ๊ณผ์ ๊ณผ ๊ด๋ จ๋ ์์ธํ ์ง์นจ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ Ultralytics ์ค์น ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์. YOLO11 ์ ํ์ํ ํจํค์ง๋ฅผ ์ค์นํ๋ ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ๊ณผ ํ์ ํ์ธํ์ธ์.
๊ทธ๋ฐ ๋ค์ ํ์ํ ํจํค์ง๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ธ์ค๊ธฐ
3๋จ๊ณ: ๋ฐ์ดํฐ ๋ก๋
์ด ํํ ๋ฆฌ์ผ์์๋ Kaggle์์ ์ ๊ณต๋๋ ํด์ ์ฐ๋ ๊ธฐ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค. ์ด ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ์์ค ์ด๋ฏธ์ง์์ ์ฐ๋ ๊ธฐ์ ์๋ฌผํ์ ๋ฌผ์ฒด๋ฅผ ๊ฐ์งํ๊ณ ๋ถ๋ฅํ๋ YOLO11 ๋ชจ๋ธ์ ์ฌ์ฉ์ ์ ์ ํ์ตํฉ๋๋ค.
Kaggle API๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ ธํธ๋ถ์ ์ง์ ๋ก๋ํ ์ ์์ต๋๋ค. ๋จผ์ , ๋ฌด๋ฃ Kaggle ๊ณ์ ์ ๋ง๋์ธ์. ๊ณ์ ์ ๋ง๋ ํ์๋ API ํค๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ํค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ "API ์๊ฒฉ ์ฆ๋ช " ์น์ ์ Kaggle API ์ค๋ช ์์์ ์ฐพ์ ์ ์์ต๋๋ค.
Kaggle ์ฌ์ฉ์ ์ด๋ฆ๊ณผ API ํค๋ฅผ ๋ณต์ฌํ์ฌ ๋ค์ ์ฝ๋์ ๋ถ์ฌ๋ฃ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฝ๋๋ฅผ ์คํํ์ฌ API๋ฅผ ์ค์นํ๊ณ ๋ฐ์ดํฐ ์ธํธ๋ฅผ Watsonx์ ๋ก๋ํฉ๋๋ค.
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 ๋ถํ ๋ด์ ํ์ ๋๋ ํฐ๋ฆฌ์ ๋ณ๋์ ์ด๋ฏธ์ง์ ๋ ์ด๋ธ์ด ํ์ํฉ๋๋ค. ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ฌ๊ตฌ์ฑํด์ผ ํฉ๋๋ค:
๋ฐ์ดํฐ ์งํฉ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ค๋ฉด ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ฉด ๋ฉ๋๋ค:
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
# 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 ๋ชจ๋ธ ๋ฐ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฌ์ฉํ๋ ์ปดํจํฐ ๋น์ ์์ ์ ์ง์ ํฉ๋๋ค.
- ๋ชจ๋: ์ง์ ๋ ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ๋ชฉ์ ์ ๋ํ๋ ๋๋ค. ๋ชจ๋ธ์ ํ์ต ์ค์ด๋ฏ๋ก "ํ์ต"์ผ๋ก ์ค์ ๋์ด ์์ต๋๋ค. ๋์ค์ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํ ์คํธํ ๋๋ "์์ธก"์ผ๋ก ์ค์ ํฉ๋๋ค.
- epochs: YOLO11 ๊ฐ ์ ์ฒด ๋ฐ์ดํฐ ์งํฉ์ ํต๊ณผํ๋ ํ์๋ฅผ ์ ํํฉ๋๋ค.
- ๋ฐฐ์น: ํ๋ จ ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ์ซ์ ๊ฐ์ ๋๋ค. ๋ฐฐ์น๋ ๋ชจ๋ธ์ด ๋งค๊ฐ ๋ณ์๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ ์ ์ฒ๋ฆฌํ๋ ์ด๋ฏธ์ง์ ์์ ๋๋ค.
- lr0: ๋ชจ๋ธ์ ์ด๊ธฐ ํ์ต ์๋๋ฅผ ์ง์ ํฉ๋๋ค.
- ํ๋กฏ: YOLO ์ผ๋ก ์ ๋ฌํ์ฌ ๋ชจ๋ธ์ ํ์ต ๋ฐ ํ๊ฐ ๋ฉํธ๋ฆญ์ ํ๋กฏ์ ์์ฑํ๊ณ ์ ์ฅํฉ๋๋ค.
๋ชจ๋ธ ํธ๋ ์ด๋ ํ๋ก์ธ์ค ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ชจ๋ธ ํธ๋ ์ด๋ ๊ฐ์ด๋(YOLO11 )๋ฅผ ์ฐธ์กฐํ์ธ์. ์ด ๊ฐ์ด๋๋ ์คํ์ ์ต๋ํ ํ์ฉํ๊ณ YOLO11 ์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
6๋จ๊ณ: ๋ชจ๋ธ ํ ์คํธ
์ด์ ์ถ๋ก ์ ์คํํ์ฌ ๋ฏธ์ธ ์กฐ์ ๋ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํ ์คํธํ ์ ์์ต๋๋ค:
YOLO11 ๋ชจ๋ธ ํ ์คํธ
์ด ๊ฐ๋จํ ์คํฌ๋ฆฝํธ๋ ํ ์คํธ ์ธํธ์ ๊ฐ ์ด๋ฏธ์ง์ ๋ํ ์์ธก ๋ ์ด๋ธ๊ณผ ์๋ณธ ์ด๋ฏธ์ง ์์ ์์ธก๋ ๋ฐ์ด๋ฉ ๋ฐ์ค๋ฅผ ์ค๋ฒ๋ ์ดํ๋ ์ ์ถ๋ ฅ ์ด๋ฏธ์ง ํ์ผ์ ์์ฑํฉ๋๋ค.
๊ฐ ์ด๋ฏธ์ง์ ๋ํ ์์ .txt ๋ ์ด๋ธ์ ๋ค์์ ํตํด ์ ์ฅ๋ฉ๋๋ค. save_txt=True
์ธ์๋ฅผ ํตํด ์์ฑ๋๋ฉฐ, ๋ฐ์ด๋ฉ ๋ฐ์ค ์ค๋ฒ๋ ์ด๊ฐ ์๋ ์ถ๋ ฅ ์ด๋ฏธ์ง๋ save=True
์ธ์์
๋๋ค.
๋งค๊ฐ ๋ณ์ conf=0.5
์ ์ ๋ขฐ ์์ค์ด 50% ๋ฏธ๋ง์ธ ๋ชจ๋ ์์ธก์ ๋ฌด์ํ๋๋ก ๋ชจ๋ธ์ ์๋ฆฝ๋๋ค.
๋ง์ง๋ง์ผ๋ก iou=.5
๋ ๋ชจ๋ธ์ด ๋์ผํ ํด๋์ค์ ์์๊ฐ 50% ์ด์ ๊ฒน์น๋ ๊ฒฝ์ฐ ๋ฌด์ํ๋๋ก ์ง์ํฉ๋๋ค. ๋์ผํ ์ค๋ธ์ ํธ์ ๋ํด ์์ฑ๋๋ ์ ์ฌ์ ์ธ ์ค๋ณต ์์๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋ฅผ ์ฌ์ฉํ๋ฉด ์์ธก๋ ๋ฐ์ด๋ฉ ๋ฐ์ค ์ค๋ฒ๋ ์ด๊ฐ ์๋ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ์ฌ ๋ช ๊ฐ์ ์ด๋ฏธ์ง์์ ๋ชจ๋ธ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
์์ธก ํ์
์์ ์ฝ๋๋ ํ ์คํธ ์ธํธ์ ์ด๋ฏธ์ง 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 ๋ชจ๋ธ์ ํ์ตํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์:
- ํ๊ฒฝ ์ค์ ํ๊ธฐ: IBM Cloud ๊ณ์ ์ ์์ฑํ๊ณ Watsonx.ai ํ๋ก์ ํธ๋ฅผ ์ค์ ํฉ๋๋ค. ์ฝ๋ฉ ํ๊ฒฝ์ Jupyter Notebook์ ์ฌ์ฉํฉ๋๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น: ๋ค์๊ณผ ๊ฐ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
torch
,opencv
๋ฐultralytics
. - ๋ฐ์ดํฐ ๋ก๋: Kaggle API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ธํธ๋ฅผ Watsonx์ ๋ก๋ํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ: ๋ฐ์ดํฐ ์งํฉ์ ํ์ํ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ๊ณ
.yaml
๊ตฌ์ฑ ํ์ผ์ ๋๋ค. - ๋ชจ๋ธ ํ๋ จ: YOLO ๋ช
๋ น์ค ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ํน์ ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ์ต์ํต๋๋ค.
epochs
,batch size
๋ฐlearning rate
. - ํ ์คํธ ๋ฐ ํ๊ฐ: ์ถ๋ก ์ ์คํํ์ฌ ๋ชจ๋ธ์ ํ ์คํธํ๊ณ ์ ํ๋ ๋ฐ ํ์๋ฅ ๊ณผ ๊ฐ์ ๋ฉํธ๋ฆญ์ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ํ๊ฐํฉ๋๋ค.
์์ธํ ์ง์นจ์ ๋ชจ๋ธ ๊ต์ก ๊ฐ์ด๋(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 ๊ต์ก์ ์ํด ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฌ์ ์ฒ๋ฆฌํ๋ ค๋ฉด:
- ๋๋ ํฐ๋ฆฌ ๊ตฌ์ฑ: ๋ฐ์ดํฐ ์ธํธ๊ฐ YOLO ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๊ณ ์๋์ง, train/val/test ๋ถํ ๋ด์์ ์ด๋ฏธ์ง์ ๋ ์ด๋ธ์ ์ํ ๋ณ๋์ ํ์ ๋๋ ํฐ๋ฆฌ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
- .yaml ํ์ผ ์
๋ฐ์ดํธ: ์์
.yaml
๊ตฌ์ฑ ํ์ผ์ ์์ ํ์ฌ ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์ ํด๋์ค ์ด๋ฆ์ ๋ฐ์ํ์ธ์. - ์ ์ฒ๋ฆฌ ์คํฌ๋ฆฝํธ ์คํ: 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 ์ค์น ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.