Docker์์ YOLOv5 ๐ ์์ํ๊ธฐ#
Ultralytics YOLOv5 Docker ๋น ๋ฅธ ์์ ๊ฐ์ด๋์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค! ์ด ํํ ๋ฆฌ์ผ์์๋ Docker ์ปจํ ์ด๋ ๋ด์์ YOLOv5๋ฅผ ์ค์ ํ๊ณ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋จ๊ณ๋ณ ์ง์นจ์ ์ ๊ณตํฉ๋๋ค. Docker๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒฉ๋ฆฌ๋๊ณ ์ผ๊ด๋ ํ๊ฒฝ์์ YOLOv5๋ฅผ ์คํํ ์ ์์ผ๋ฏ๋ก ๋ค์ํ ์์คํ ๊ฐ์ ๋ฐฐํฌ ๋ฐ ์ข ์์ฑ ๊ด๋ฆฌ๊ฐ ๋จ์ํ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ปจํ ์ด๋ํ๋ฅผ ํ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ทธ ์ข ์์ฑ์ ํจ๊ป ํจํค์งํฉ๋๋ค.
๋์ฒด ์ค์ ๋ฐฉ๋ฒ์ ๊ฒฝ์ฐ Colab Notebook
, GCP Deep Learning VM ๋๋ Amazon AWS ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ธ์. Ultralytics ๋ชจ๋ธ๊ณผ ํจ๊ป Docker๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ฐ์๋ Ultralytics Docker Quickstart Guide๋ฅผ ํ์ธํ์ธ์.
์ฌ์ ์๊ตฌ ์ฌํญ#
์์ํ๊ธฐ ์ ์ ๋ค์ ํญ๋ชฉ์ด ์ค์น๋์ด ์๋์ง ํ์ธํ์ญ์์ค:
- Docker: ๊ณต์ Docker ์น์ฌ์ดํธ์์ Docker๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ์ค์นํฉ๋๋ค. Docker๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- NVIDIA ๋๋ผ์ด๋ฒ (GPU ์ง์์ ํ์): NVIDIA ๋๋ผ์ด๋ฒ ๋ฒ์ 455.23 ์ด์์ด ์ค์น๋์ด ์๋์ง ํ์ธํ์ธ์. NVIDIA ์น์ฌ์ดํธ์์ ์ต์ ๋๋ผ์ด๋ฒ๋ฅผ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
- NVIDIA Container Toolkit (GPU ์ง์์ ํ์): ์ด ํดํท์ ์ฌ์ฉํ๋ฉด Docker ์ปจํ ์ด๋๊ฐ ํธ์คํธ ์์คํ ์ NVIDIA GPU์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์์ธํ ์ง์นจ์ ๊ณต์ NVIDIA Container Toolkit ์ค์น ๊ฐ์ด๋๋ฅผ ๋ฐ๋ฅด์ธ์.
NVIDIA Container Toolkit ์ค์ (GPU ์ฌ์ฉ์)#
๋จผ์ ๋ค์์ ์คํํ์ฌ NVIDIA ๋๋ผ์ด๋ฒ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์น๋์๋์ง ํ์ธํ์ญ์์ค:
nvidia-smi์ด ๋ช ๋ น์ GPU ์ ๋ณด์ ์ค์น๋ ๋๋ผ์ด๋ฒ ๋ฒ์ ์ ํ์ํด์ผ ํฉ๋๋ค.
๋ค์์ผ๋ก NVIDIA Container Toolkit์ ์ค์นํฉ๋๋ค. ์๋ ๋ช ๋ น์ Ubuntu์ ๊ฐ์ Debian ๊ธฐ๋ฐ ์์คํ ๋ฐ Fedora/CentOS์ ๊ฐ์ RHEL ๊ธฐ๋ฐ ์์คํ ์ ์ผ๋ฐ์ ์ด์ง๋ง, ์ฌ์ฉ ์ค์ธ ๋ฐฐํฌํ์ ํน์ ํ ์ง์นจ์ ์์ ๋งํฌ๋ ๊ณต์ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ญ์์ค:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.listํจํค์ง ๋ชฉ๋ก์ ์ ๋ฐ์ดํธํ๊ณ NVIDIA Container Toolkit์ ์ค์นํ์ญ์์ค:
sudo apt-get updatesudo apt-get install -y nvidia-container-toolkitDocker์์ CDI ์ฅ์น ํ์ธํ๊ธฐ#
GPU CDI ์ฅ์น๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ํ์ธํ๋ ค๋ฉด nvidia-ctk cdi list์ ์คํํ์ญ์์ค(ํดํท์ nvidia-cdi-refresh ์๋น์ค๋ ํดํท ๋ฒ์ 1.18 ์ด์์์ ์ฌ์์ ์๋์ผ๋ก ์์ฑํ๊ณ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค).
nvidia-ctk cdi listnvidia.com/gpu=0 ๋ฐ nvidia.com/gpu=all๊ณผ ๊ฐ์ ํญ๋ชฉ์ด ํ์๋์ด์ผ ํฉ๋๋ค. Linux์์ CDI ์ฅ์น ์์ฒญ์๋ Docker >= 28.2.0 ๋ฐ NVIDIA Container Toolkit >= 1.18์ด ํ์ํฉ๋๋ค. ๋ ๊ฑฐ์ --gpus all ํ๋๊ทธ๋ ํธ์คํธ ๋ฐ๋ชฌ ์ฌ์์ ํ GPU ์ก์ธ์ค ๊ถํ์ ์์ ์ ์์ผ๋ฏ๋ก, ๊ตฌํ Linux ํธ์คํธ๋ฅผ ์
๊ทธ๋ ์ด๋ํ๊ณ ๋์ --device์ ์ฌ์ฉํ์ธ์.
1๋จ๊ณ: YOLOv5 Docker ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๊ธฐ(Pull)#
Ultralytics๋ Docker Hub์ ๊ณต์ YOLOv5 ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํฉ๋๋ค. latest ํ๊ทธ๋ ๊ฐ์ฅ ์ต๊ทผ ๋ฆฌํฌ์งํ ๋ฆฌ ์ปค๋ฐ์ ์ถ์ ํ์ฌ ํญ์ ์ต์ ๋ฒ์ ์ ๋ฐ์ ์ ์๋๋ก ํฉ๋๋ค. ๋ค์ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ํ(pull)ํ์ธ์:
# Define the image name with tag
t=ultralytics/yolov5:latest
# Pull the latest YOLOv5 image from Docker Hub
sudo docker pull $tUltralytics YOLOv5 Docker Hub ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ์ฐพ์๋ณผ ์ ์์ต๋๋ค.
2๋จ๊ณ: Docker ์ปจํ ์ด๋ ์คํ#
์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์จ ํ ์ปจํ ์ด๋๋ก ์คํํ ์ ์์ต๋๋ค.
CPU๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ#
CPU๋ง ์ฌ์ฉํ์ฌ ๋ํํ ์ปจํ
์ด๋ ์ธ์คํด์ค๋ฅผ ์คํํ๋ ค๋ฉด -it ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ธ์. --ipc=host ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ํธ์คํธ IPC ๋ค์์คํ์ด์ค๋ฅผ ๊ณต์ ํ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค์ ์ค์ํฉ๋๋ค.
# Run an interactive container instance using CPU
sudo docker run -it --ipc=host $tGPU๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ#
์ปจํ
์ด๋ ๋ด์์ GPU ์ก์ธ์ค๋ฅผ ํ์ฑํํ๋ ค๋ฉด --device nvidia.com/gpu=... CDI ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ธ์. ์ด๋ฅผ ์ํด์๋ NVIDIA Container Toolkit์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
# Run with access to all available GPUs
sudo docker run -it --ipc=host --device nvidia.com/gpu=all $t
# Run with access to specific GPUs (e.g., GPUs 2 and 3)
sudo docker run -it --ipc=host --device nvidia.com/gpu=2 --device nvidia.com/gpu=3 $t๋ช ๋ น ์ต์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ Docker run ์ฐธ์กฐ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
๋ก์ปฌ ๋๋ ํฐ๋ฆฌ ๋ง์ดํธ#
์ปจํ
์ด๋ ๋ด์์ ๋ก์ปฌ ํ์ผ(๋ฐ์ดํฐ์
, ๋ชจ๋ธ ๊ฐ์ค์น ๋ฑ)์ ์์
ํ๋ ค๋ฉด -v ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ํธ์คํธ ๋๋ ํ ๋ฆฌ๋ฅผ ์ปจํ
์ด๋์ ๋ง์ดํธํ์ธ์:
# Mount /path/on/host (your local machine) to /path/in/container (inside the container)
sudo docker run -it --ipc=host --device nvidia.com/gpu=all -v /path/on/host:/path/in/container $t/path/on/host์ ๋จธ์ ์ ์ค์ ๊ฒฝ๋ก๋ก, /path/in/container์ Docker ์ปจํ
์ด๋ ๋ด์ ์ํ๋ ๊ฒฝ๋ก(์: /usr/src/datasets)๋ก ๋ฐ๊ฟ๋๋ค.
3๋จ๊ณ: Docker ์ปจํ ์ด๋ ๋ด์์ YOLOv5 ๐ ์ฌ์ฉ#
์ด์ ์คํ ์ค์ธ YOLOv5 Docker ์ปจํ ์ด๋ ๋ด๋ถ์ ์์ต๋๋ค! ์ฌ๊ธฐ์์ ๊ฐ์ฒด ๊ฐ์ง์ ๊ฐ์ ๋ค์ํ ๋จธ์ ๋ฌ๋ ๋ฐ ๋ฅ ๋ฌ๋ ์์ ์ ์ํ ํ์ค YOLOv5 ๋ช ๋ น์ ์คํํ ์ ์์ต๋๋ค.
# Train a YOLOv5 model on your custom dataset (ensure data is mounted or downloaded)
python train.py --data your_dataset.yaml --weights yolov5s.pt --img 640 # Start training
# Validate the trained model's performance (Precision, Recall, mAP)
python val.py --weights path/to/your/best.pt --data your_dataset.yaml # Validate accuracy
# Run inference on images or videos using a trained model
python detect.py --weights yolov5s.pt --source path/to/your/images_or_videos # Perform detection
# Export the trained model to various formats like ONNX, CoreML, or TFLite for deployment
python export.py --weights yolov5s.pt --include onnx coreml tflite # Export model๋ค์ํ ๋ชจ๋์ ์์ธํ ์ฌ์ฉ๋ฒ์ ๋ฌธ์๋ฅผ ํ์ํ์ญ์์ค:
Precision, Recall, mAP๊ณผ ๊ฐ์ ํ๊ฐ ์งํ์ ๋ํด ์์ธํ ์์๋ณด์ธ์. ONNX, CoreML, TFLite์ ๊ฐ์ ๋ค์ํ ๋ด๋ณด๋ด๊ธฐ ํ์์ ์ดํดํ๊ณ , ๋ค์ํ Model Deployment Options์ ์ดํด๋ณด์ธ์. model weights๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ์์ง ๋ง์ธ์.

์ด์ Docker ์ปจํ ์ด๋ ๋ด์์ YOLOv5๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ค์ ํ๊ณ ์คํํ์ต๋๋ค.