云端AI模型训练正成为开发者标配,但第一次在云服务器上部署YOLOv5时,90%的人都会在虚拟环境配置、数据集适配环节踩坑。本文将手把手带你在阿里云ECS上搭建生产级单类别检测系统,特别针对云环境特有的网络配置、无GUI操作等痛点设计解决方案。
刚拿到阿里云ECS实例时,纯净的Linux系统往往隐藏着诸多依赖陷阱。我们选择Miniconda作为环境管理器而非系统Python,既能隔离项目依赖,又避免因权限问题破坏系统环境。
首次执行wget下载Miniconda安装脚本时,大概率会遇到域名解析失败:
bash复制wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 报错:unable to resolve host address 'repo.continuum.io'
云服务器特殊处理方案:
bash复制sudo vim /etc/resolv.conf
# 添加以下nameserver(阿里云内网DNS+Google公共DNS)
nameserver 100.100.2.136
nameserver 8.8.8.8
bash复制ping repo.continuum.io
提示:阿里云经典网络与VPC网络使用的DNS不同,若上述配置无效,可在控制台查看当前ECS实例的专属DNS服务器地址。
执行安装脚本时需特别注意:
bash复制chmod +x Miniconda3-latest-Linux-x86_64.sh
./Miniconda3-latest-Linux-x86_64.sh
关键选择点:
/home/username/miniconda3而非默认路径bash复制echo 'export PATH="/home/username/miniconda3/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
验证安装成功的正确姿势:
bash复制conda --version
# 应输出类似:conda 23.11.0
针对YOLOv5推荐使用Python 3.8(兼容性比3.7更好):
bash复制conda create -n yolov5_cloud python=3.8
conda activate yolov5_cloud
云环境特有依赖:
bash复制conda install -c conda-forge libgl1
pip install opencv-python-headless # 无GUI环境必须用headless版本
使用Git时注意云服务器可能存在的端口限制:
bash复制git clone https://github.com/ultralytics/yolov5 --depth 1
cd yolov5
下载预训练权重的两种云适配方案:
| 方案 | 命令 | 适用场景 |
|---|---|---|
| 官方脚本 | bash weights/download_weights.sh |
网络通畅时 |
| 手动下载 | 本地下载后scp上传到weights目录 | 境外服务器下载慢时 |
注意:若出现
ModuleNotFoundError: No module named 'utils.google_utils',需在项目根目录执行下载命令
针对"仅识别人体"的需求,推荐以下结构:
code复制mydataset/
├── images/
│ ├── train/
│ └── val/
└── labels/
├── train/
└── val/
标注工具云端适配方案:
bash复制pip install labelImg -i https://pypi.tuna.tsinghua.edu.cn/simple
nohup labelImg >/dev/null 2>&1 & # 后台运行
创建person.yaml数据集配置文件:
yaml复制# 单类别配置示例
train: ../mydataset/images/train
val: ../mydataset/images/val
nc: 1 # 类别数
names: ['person'] # 类别名称
修改模型配置文件yolov5s.yaml:
yaml复制# 关键修改点
nc: 1 # 与数据集类别数一致
anchors: # 单类别可优化锚框
- [10,13, 16,30, 33,23]
- [30,61, 62,45, 59,119]
- [116,90, 156,198, 373,326]
针对阿里云常见配置(如8核32GB):
bash复制python train.py \
--data person.yaml \
--cfg yolov5s.yaml \
--weights yolov5s.pt \
--epochs 50 \
--batch-size 64 \
--img 640 \
--device 0 # 单卡训练
关键参数云适配:
--batch-size:根据GPU显存调整(可用nvidia-smi监控)--workers 4:通常设为CPU核心数的1/2--cache ram:利用云服务器大内存加速数据加载无GUI可视化方案:
bash复制tensorboard --logdir runs/train --bind_all
# 通过ECS安全组开放6006端口访问
bash复制tail -f runs/train/exp/results.txt
训练中断恢复技巧:
bash复制python train.py --resume runs/train/exp/weights/last.pt
推荐导出TorchScript格式:
bash复制python export.py \
--weights runs/train/exp/weights/best.pt \
--include torchscript \
--img 640 \
--optimize
使用detect.py进行压力测试:
bash复制python detect.py \
--weights best.torchscript \
--source test_video.mp4 \
--conf-thres 0.5 \
--max-det 100 \
--device 0
性能优化参数对照表:
| 参数 | 默认值 | 云服务器建议值 | 影响 |
|---|---|---|---|
| --img-size | 640 | 根据业务调整 | 分辨率越大精度越高速度越慢 |
| --conf-thres | 0.25 | 0.4-0.6 | 过滤低置信度检测 |
| --iou-thres | 0.45 | 0.5-0.7 | NMS重叠阈值 |
在阿里云gn7i实例(T4 GPU)上的典型表现: