AzureML์—์„œ์˜ Ultralytics YOLOv5 ๐Ÿš€ ํ€ต์Šคํƒ€ํŠธ

Microsoft Azure Machine Learning(AzureML)์„ ์œ„ํ•œ Ultralytics YOLOv5 ํ€ต์Šคํƒ€ํŠธ ๊ฐ€์ด๋“œ์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ์ด ๊ฐ€์ด๋“œ๋Š” AzureML ์ปดํ“จํŒ… ์ธ์Šคํ„ด์Šค์—์„œ YOLOv5๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ƒ์„ฑ๋ถ€ํ„ฐ ๋ชจ๋ธ ํ•™์Šต ๋ฐ ์ถ”๋ก  ์‹คํ–‰๊นŒ์ง€์˜ ๋ชจ๋“  ๊ณผ์ •์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

Azure๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

Azure๋Š” Microsoft์˜ ์ข…ํ•ฉ ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์ด ํ”Œ๋žซํผ์€ ์ปดํ“จํŒ… ์„ฑ๋Šฅ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋ถ„์„ ๋„๊ตฌ, ๋จธ์‹  ๋Ÿฌ๋‹ ๊ธฐ๋Šฅ ๋ฐ ๋„คํŠธ์›Œํ‚น ์†”๋ฃจ์…˜์„ ํฌํ•จํ•œ ๊ด‘๋ฒ”์œ„ํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Azure๋ฅผ ํ†ตํ•ด ์กฐ์ง์€ Microsoft๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•, ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์˜จํ”„๋ ˆ๋ฏธ์Šค ์ธํ”„๋ผ์—์„œ ํด๋ผ์šฐ๋“œ๋กœ์˜ ์›Œํฌ๋กœ๋“œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Azure Machine Learning(AzureML)์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

Azure Machine Learning(AzureML)์€ ๋จธ์‹  ๋Ÿฌ๋‹ ๋ชจ๋ธ์˜ ๊ฐœ๋ฐœ, ํ•™์Šต ๋ฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋œ ํŠน์ˆ˜ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ธฐ์ˆ  ์ˆ˜์ค€์˜ ๋ฐ์ดํ„ฐ ๊ณผํ•™์ž์™€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ ํ•ฉํ•œ ๋„๊ตฌ์™€ ํ˜‘์—… ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ๊ธฐ๋Šฅ์œผ๋กœ๋Š” ์ž๋™ ๋จธ์‹  ๋Ÿฌ๋‹(AutoML), ๋ชจ๋ธ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ์ธํ„ฐํŽ˜์ด์Šค, ๊ทธ๋ฆฌ๊ณ  ML ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ๋ณด๋‹ค ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ Python SDK๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. AzureML์€ ์˜ˆ์ธก ๋ชจ๋ธ๋ง์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋‚ด์žฅํ•˜๋Š” ๊ณผ์ •์„ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ

์ด ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ผ ํ•˜๋ ค๋ฉด ํ™œ์„ฑํ™”๋œ Azure ๊ตฌ๋…๊ณผ AzureML ์ž‘์—… ์˜์—ญ(workspace)์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ์ž‘์—… ์˜์—ญ์ด ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ณต์‹ Azure ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์ƒ์„ฑํ•˜์‹ญ์‹œ์˜ค.

์ปดํ“จํŒ… ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

AzureML์˜ ์ปดํ“จํŒ… ์ธ์Šคํ„ด์Šค๋Š” ๋ฐ์ดํ„ฐ ๊ณผํ•™์ž๋ฅผ ์œ„ํ•œ ๊ด€๋ฆฌํ˜• ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ์›Œํฌ์Šคํ…Œ์ด์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  1. AzureML ์ž‘์—… ์˜์—ญ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ์™ผ์ชฝ ์ฐฝ์—์„œ **Compute(์ปดํ“จํŒ…)**๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. Compute instances(์ปดํ“จํŒ… ์ธ์Šคํ„ด์Šค) ํƒญ์œผ๋กœ ์ด๋™ํ•˜์—ฌ **New(์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ)**๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ํ•™์Šต ๋˜๋Š” ์ถ”๋ก ์— ํ•„์š”ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ CPU ๋˜๋Š” GPU ๋ฆฌ์†Œ์Šค๋ฅผ ์„ ํƒํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
Azure ML create compute instance interface

ํ„ฐ๋ฏธ๋„ ์—ด๊ธฐ

์ปดํ“จํŒ… ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹คํ–‰๋˜๋ฉด AzureML ์ŠคํŠœ๋””์˜ค์—์„œ ์ง์ ‘ ํ„ฐ๋ฏธ๋„์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์™ผ์ชฝ ์ฐฝ์˜ Notebooks(๋…ธํŠธ๋ถ) ์„น์…˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ƒ๋‹จ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์—์„œ ์ปดํ“จํŒ… ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  3. ํŒŒ์ผ ๋ธŒ๋ผ์šฐ์ € ์•„๋ž˜์— ์žˆ๋Š” Terminal(ํ„ฐ๋ฏธ๋„) ์˜ต์…˜์„ ํด๋ฆญํ•˜์—ฌ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

Azure ML ํ„ฐ๋ฏธ๋„ ์—ด๊ธฐ ๋ฒ„ํŠผ ์œ„์น˜

YOLOv5 ์„ค์ • ๋ฐ ์‹คํ–‰

์ด์ œ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๊ณ  Ultralytics YOLOv5๋ฅผ ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ€์ƒ ํ™˜๊ฒฝ ์ƒ์„ฑ

์ข…์†์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. AzureML ์ปดํ“จํŒ… ์ธ์Šคํ„ด์Šค์— ์‚ฌ์ „ ์„ค์น˜๋œ Conda๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ Conda ์„ค์ • ๊ฐ€์ด๋“œ๋Š” Ultralytics Conda ํ€ต์Šคํƒ€ํŠธ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

ํŠน์ • Python ๋ฒ„์ „์œผ๋กœ Conda ํ™˜๊ฒฝ(์˜ˆ: yolov5env)์„ ์ƒ์„ฑํ•˜๊ณ  ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค:

conda create --name yolov5env -y python=3.10 # Create a new Conda environment
conda activate yolov5env                     # Activate the environment
conda install pip -y                         # Ensure pip is installed

YOLOv5 ์ €์žฅ์†Œ ๋ณต์ œ

Clone the official Ultralytics YOLOv5 repository from GitHub using Git:

git clone https://github.com/ultralytics/yolov5 # Clone the repository
cd yolov5                                       # Navigate into the directory
# Initialize submodules (if any, though YOLOv5 typically doesn't require this step)
# git submodule update --init --recursive

์ข…์†์„ฑ ์„ค์น˜

requirements.txt ํŒŒ์ผ์— ๋‚˜์—ด๋œ ํ•„์š”ํ•œ Python ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋ธ ๋‚ด๋ณด๋‚ด๊ธฐ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ONNX๋„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

pip install -r requirements.txt # Install core dependencies
pip install "onnx>=1.12.0"      # Install ONNX for exporting

YOLOv5 ์ž‘์—… ์ˆ˜ํ–‰

์„ค์ •์ด ์™„๋ฃŒ๋˜๋ฉด ์ด์ œ YOLOv5 ๋ชจ๋ธ์„ ํ•™์Šต, ๊ฒ€์ฆ, ์ถ”๋ก  ๋ฐ ๋‚ด๋ณด๋‚ด๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • COCO128์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ๋ชจ๋ธ์„ **ํ•™์Šต(Train)**ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ•™์Šต ๋ชจ๋“œ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

    # Start training using yolov5s pretrained weights on the COCO128 dataset
    python train.py --data coco128.yaml --weights yolov5s.pt --img 640 --epochs 10 --batch 16
  • Precision, Recall, mAP์™€ ๊ฐ™์€ ์ง€ํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•™์Šต๋œ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ **๊ฒ€์ฆ(Validate)**ํ•ฉ๋‹ˆ๋‹ค. ์˜ต์…˜์€ ๊ฒ€์ฆ ๋ชจ๋“œ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

    # Validate the yolov5s model on the COCO128 validation set
    python val.py --weights yolov5s.pt --data coco128.yaml --img 640
  • ์ƒˆ ์ด๋ฏธ์ง€๋‚˜ ๋™์˜์ƒ์— ๋Œ€ํ•ด **์ถ”๋ก (Run Inference)**์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์ถ”๋ก  ์†Œ์Šค์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์˜ˆ์ธก ๋ชจ๋“œ ๋ฌธ์„œ๋ฅผ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.

    # Run inference with yolov5s on sample images
    python detect.py --weights yolov5s.pt --source data/images --img 640
  • ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ๋ชจ๋ธ์„ ONNX, TensorRT ๋˜๋Š” CoreML๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ **๋‚ด๋ณด๋‚ด๊ธฐ(Export)**ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ณด๋‚ด๊ธฐ ๋ชจ๋“œ ๊ฐ€์ด๋“œ์™€ ONNX ํ†ตํ•ฉ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

    # Export yolov5s to ONNX format
    python export.py --weights yolov5s.pt --include onnx --img 640

๋…ธํŠธ๋ถ ์‚ฌ์šฉ

๋Œ€ํ™”ํ˜• ํ™˜๊ฒฝ์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝ์šฐ AzureML ๋…ธํŠธ๋ถ ๋‚ด์—์„œ ์ด ๋ช…๋ น๋“ค์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Conda ํ™˜๊ฒฝ์— ์—ฐ๊ฒฐ๋œ ์‚ฌ์šฉ์ž ์ง€์ • IPython ์ปค๋„์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ IPython ์ปค๋„ ์ƒ์„ฑ

์ปดํ“จํŒ… ์ธ์Šคํ„ด์Šค ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

# Ensure your Conda environment is active
# conda activate yolov5env

# Install ipykernel if not already present
conda install ipykernel -y

# Create a new kernel linked to your environment
python -m ipykernel install --user --name yolov5env --display-name "Python (yolov5env)"

์ปค๋„์„ ์ƒ์„ฑํ•œ ํ›„ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ ๊ณ ์นจํ•ฉ๋‹ˆ๋‹ค. .ipynb ๋…ธํŠธ๋ถ ํŒŒ์ผ์„ ์—ด๊ฑฐ๋‚˜ ์ƒ์„ฑํ•  ๋•Œ, ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ ์ปค๋„ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์—์„œ ์ƒˆ ์ปค๋„("Python (yolov5env)")์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.

๋…ธํŠธ๋ถ ์…€์—์„œ ๋ช…๋ น ์‹คํ–‰

  • Python ์…€: Python ์…€์˜ ์ฝ”๋“œ๋Š” ์„ ํƒํ•œ yolov5env ์ปค๋„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

  • Bash ์…€: ์…ธ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์…€ ์‹œ์ž‘ ๋ถ€๋ถ„์— %%bash ๋งค์ง ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๊ฐ bash ์…€์€ ๋…ธํŠธ๋ถ ์ปค๋„ ํ™˜๊ฒฝ ์ปจํ…์ŠคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์†ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐ ์…€ ๋‚ด์—์„œ Conda ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    %%bash
    source activate yolov5env # Activate environment within the cell
    
    # Example: Run validation using the activated environment
    python val.py --weights yolov5s.pt --data coco128.yaml --img 640

์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค! AzureML์—์„œ Ultralytics YOLOv5๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ํ•™์Šต์„ ์œ„ํ•ด ๋‹ค๋ฅธ Ultralytics ํ†ตํ•ฉ ๋˜๋Š” ์ž์„ธํ•œ YOLOv5 ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๋ถ„์‚ฐ ํ•™์Šต์ด๋‚˜ ์—”๋“œํฌ์ธํŠธ๋กœ์„œ์˜ ๋ชจ๋ธ ๋ฐฐํฌ์™€ ๊ฐ™์€ ๊ณ ๊ธ‰ ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ๊ฒฝ์šฐ AzureML ๋ฌธ์„œ๋„ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ“๊ธ€