YOLOv4(You Only Look Once v4)本身并不是专为自动驾驶设计的模型,而是一个通用的、高性能的实时目标检测框架。不过,由于其在速度与精度之间的良好平衡,YOLOv4 及其变种常被用于自动驾驶感知系统中的2D目标检测任务,例如检测车辆、行人、交通标志等。
| 组件 | 版本 |
|---|---|
| Python | 3.11 |
| PyTorch | 2.5.1 |
| torch_npu | 2.5.1.post1.dev20250722 |
| CANN | cann_8.2.rc1 |
| 设备型号 | NPU 配置 |
|---|---|
| Atlas 800T A3 | 单卡 / 多卡(0~15) |
| 镜像环境 | 镜像地址 |
|---|---|
| 公网 | swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_ascend:pytorch_2.5.1-cann_8.2.rc1-py_3.11-hce_2.0.2503-aarch64-snt9b23-20250729103313-3a25129 |
docker run -itd -u root \
--privileged \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci8 \
--device=/dev/davinci9 \
--device=/dev/davinci10 \
--device=/dev/davinci11 \
--device=/dev/davinci12 \
--device=/dev/davinci13 \
--device=/dev/davinci14 \
--device=/dev/davinci15 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/bin/hccn_tool:/usr/bin/hccn_tool \
-v /etc/hccn.conf:/etc/hccn.conf \
--shm-size 1024g --net=host \
-v <host_dir>:<container_dir> \
--name <container_name> <image_id> /bin/bashdocker exec -it yolov4 bash
conda create -n yolov4 --clone PyTorch-2.5.1
conda activate yolov4为避免依赖下载失败或速度过慢,建议统一使用 华为内部 PyPI 镜像源:
pip config --user set global.index https://mirrors.huaweicloud.com/repository/pypi
pip config --user set global.index-url https://mirrors.huaweicloud.com/repository/pypi/simple
pip config --user set global.trusted-host mirrors.huaweicloud.comcd /home/ma-user/
git clone https://github.com/WongKinYiu/PyTorch_YOLOv4.gitcd PyTorch_YOLOv4
pip install tensorboardX
pip install numpy==1.17执行如下命令下载coco2017数据集
# 下载图像
wget -P images/ http://images.cocodataset.org/zips/train2017.zip
wget -P images/ http://images.cocodataset.org/zips/val2017.zip
wget -P images/ http://images.cocodataset.org/zips/test2017.zip
# 下载标注
wget -P annotations/ http://images.cocodataset.org/annotations/annotations_trainval2017.zip
wget -P annotations/ http://images.cocodataset.org/annotations/image_info_test2017.zip
# 解压
unzip images/train2017.zip -d images/
unzip images/val2017.zip -d images/
unzip annotations/annotations_trainval2017.zip -d .参考https://roboflow.com/formats/yolov5-pytorch-txt?ref=ultralytics 中YOLOv5 PyTorch TXT 的结构。 每张图片对应一个 txt 文件,每个文件中每一行代表一个边界框。每行的格式为:
class_id center_x center_y width height
归一化坐标,值范围为[0,1] 示例如下:
1 0.617 0.3594420600858369 0.114 0.17381974248927037
import torch_npu
from torch_npu.contrib import transfer_to_npu File "/home/ma-user/anaconda3/envs/yolov4/lib/python3.11/site-packages/torch/serialization.py", line 849, in save
with _open_zipfile_writer(f) as opened_zipfile:
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ma-user/anaconda3/envs/yolov4/lib/python3.11/site-packages/torch/serialization.py", line 716, in _open_zipfile_writer
return container(name_or_buffer)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ma-user/anaconda3/envs/yolov4/lib/python3.11/site-packages/torch/serialization.py", line 687, in __init__
super().__init__(torch._C.PyTorchFileWriter(self.name))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Parent directory /data1/testdata/coco/labels does not exist.按数据准备章节生成对应的数据标签
bi = np.floor(np.arange(n) / batch_size).astype(np.int) # batch index
^^^^^^
File "/home/ma-user/anaconda3/envs/yolov4/lib/python3.11/site-packages/numpy/__init__.py", line 305, in __getattr__
raise AttributeError(__former_attrs__[attr])
AttributeError: module 'numpy' has no attribute 'int'.将numpy降级为1.17
PyTorch_YOLOv4/utils/loss.py
RuntimeError: Expected all tensors to be on the same device. Expected NPU tensor, please check whether the input tensor device is correct.utils/loss.py修改如下防止数据部分在NPU和CPU无法进行计算,导致报错。 修改前
at = torch.arange(na).view(na, 1).repeat(1, nt)修改后
at = torch.arange(na,device=anchors.device).view(na, 1).repeat(1, nt)修改data/coco.yaml中训练集和验证集路径为当前存放的数据路径。
train: /data1/testdata/coco/images/train2017/
val: /data1/testdata/coco/images/val2017/# 指定0卡进行训练
python train.py --device 0 --batch-size 16 --img 640 640 --data coco.yaml --cfg cfg/yolov4-pacsp.cfg --weights '' --name yolov4-pacsp| 硬件 | 卡数 | 性能 |
|---|---|---|
| 910C | 1 | 5.22 it/s |