Ubuntu 20.04 ARM64 YOLOv5完整实现指南
一、环境配置
1.1 系统更新与基础依赖
sudo apt update && sudo apt upgrade -y
sudo apt install -y \
git \
wget \
curl \
vim \
build-essential \
cmake \
pkg-config \
libjpeg-dev \
libtiff5-dev \
libpng-dev \
libavcodec-dev \
libavformat-dev \
libswscale-dev \
libv4l-dev \
libxvidcore-dev \
libx264-dev \
libgtk-3-dev \
libatlas-base-dev \
gfortran \
python3-dev \
python3-pip \
python3-venv
1.2 Python环境配置
python3 -m venv yolov5_env
source yolov5_env/bin/activate
pip install --upgrade pip setuptools wheel
pip install numpy scipy matplotlib ipython jupyter pandas sympy nose
1.3 PyTorch安装(ARM64专用)
python3 -c "import torch; print(torch.cuda.is_available())"
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
python3 -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
1.4 OpenCV安装
pip install opencv-python opencv-python-headless
1.5 YOLOv5环境准备
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt
pip install tensorboard seaborn thop
二、模型训练
2.1 数据准备
2.1.1 数据集结构
datasets/
└── custom_dataset/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
└── labels/
├── train/
├── val/
└── test/
2.1.2 创建数据集配置文件
path: /path/to/your/datasets/custom_dataset
train: images/train
val: images/val
test: images/test
nc: 3
names: ['class1', 'class2', 'class3']
2.1.3 标签格式转换脚本
import os
import json
from pathlib import Path
def convert_coco_to_yolo(coco_json_path, output_dir):
"""将COCO格式转换为YOLO格式"""
with open(coco_json_path, 'r') as f:
data = json.load(f)
category_mapping = {
cat['id']: idx for idx, cat in enumerate(data['categories'])}
images = {
img['id']: img for img in data['images']}
for ann in data['annotations']:
img_id = ann['image_id']
img_info = images[img_id]
x, y, w, h = ann['bbox']
img_w, img_h = img_info['width'], img_info['height']
x_center = (x + w/2) / img_w
y_center = (y + h/2) / img_h
width = w / img_w
height = h / img_h
label_file = os.path.join(output_dir, f"{
img_info['file_name'].split('.')[0]}.txt")
with open(label_file, 'a') as f:
f.write(f"{
category_mapping[ann['category_id']]} {
x_center} {
y_center} {
width} {
height}\n")
2.2 模型训练配置
2.2.1 创建训练脚本
import torch
import yaml
from yolov5.train import run
def main():
opt = {
'weights': 'yolov5s.pt',
'cfg': '',
'data': 'custom_dataset.yaml',
'hyp': 'data/hyps/hyp.scratch-low.yaml',
'epochs': 100,
'batch_size': 16,
'imgsz': 640,
'rect': False,
'resume': False,
'nosave': False,
'noval': False,
'noautoanchor': False,
'evolve': None,
'bucket': '',
'cache': None,
'image_weights'