SSD-MobileNetV1 for PyTorch
目录
简介
模型介绍
MobileNetV1是基于深度级可分离卷积构建的网络。 MobileNetV1将标准卷积拆分为了两个操作:深度卷积和逐点卷积 。 SSD是一种one-stage的目标检测框架。SSD_MobileNetV1使用MobileNetV1提取有效特征,之后SSD通过得到的特征图的信息进行检测。 本仓主要将SSD_MobileNetV1训练任务迁移到了昇腾NPU上,并进行极致性能优化。
代码实现
-
参考实现:
url=https://github.com/qfgaohao/pytorch-ssd commit_id=7a839cbc8c3fb39679856b4dc42a1ab19ec07581 -
适配昇腾 AI 处理器的实现:
url=https://gitcode.com/ascend/ModelZoo-PyTorch.git code_path=PyTorch/contrib/autonoumous_driving
SSD-MobileNetV1
准备训练环境
安装模型环境
-
推荐参考配套资源文档使用最新的配套版本。
表 1 版本配套表
软件 版本 安装指南 Driver AscendHDK 24.1.RC2.3 《驱动固件安装指南 》 Firmware AscendHDK 24.1.RC2.3 CANN CANN 8.0.RC2.2 《CANN 软件安装指南 》 PyTorch 1.11.0 《Ascend Extension for PyTorch 配置与安装 》 torch_npu release v6.0.rc2 -
环境准备指导。
请参考《Pytorch框架训练环境准备》。
-
安装依赖。
在模型源码包根目录下执行命令,安装模型对应PyTorch版本需要的依赖。
pip install -r 1.11_requirements.txt说明: 只需执行一条对应的PyTorch版本依赖安装命令。
-
源码构建OpenCV
来源:
https://www.hiascend.com/document/detail/zh/canncommercial/700/modeldevpt/ptmigr/AImpug_000054.html安装前准备:
export GIT_SSL_NO_VERIFY=true下载源码包:
git clone https://github.com/opencv/opencv.git cd opencv mkdir -p build执行命令:
cd build cmake -D BUILD_opencv_python3=yes -D BUILD_opencv_python2=no -D PYTHON3_EXECUTABLE=/home/ma-user/anaconda3/env/PyTorch-1.11.0/bin/python -D PYTHON3_INCLUDE_DIR=/home/ma-user/anaconda3/env/PyTorch-1.11.0/include/python3.9 -D PYTHON3_LIBRARY=/home/ma-user/anaconda3/env/PyTorch-1.11.0/lib/libpython3.9.so -D PYTHON3_NUMPY_INCLUDE_DIRS=/home/ma-user/anaconda3/env/PyTorch-1.11.0/lib/python3.9/site-packages/numpy/core/include -D PYTHON3_PACKAGES_PATH=/home/ma-user/anaconda3/env/PyTorch-1.11.0/lib/python3.9/site-packages -D PYTHON3_DEFAULT_EXECUTABLE=/home/ma-user/anaconda3/env/PyTorch-1.11.0/bin/python .. make -j$nproc make install
准备数据集
获取数据集
用户自行获取原始数据集,可选用的开源数据集包括VOCdevkit等,将数据集上传到服务器任意路径下并解压。
以VOCdevkit数据集为例,数据集目录结构参考如下所示。
|——VOCdevkit
|——VOC2007(VOC2012)
|——Annotations
|——ImageSets
|——JPEGImages
|——SegmentationClass
|——SegmentationObject
|——test
|——VOC2007
|——Annotations
|——ImageSets
|——JPEGImages
|——SegmentationClass
|——SegmentationObject
说明: 该数据集的训练过程脚本只作为一种参考示例。
获取预训练模型
请用户在源码包根目录下新建"models/"文件夹,下载所需的预训练模型mobilenet_v1_with_relu_69_5.pth,并将预训练模型放置在"models/"文件夹下。
模型下载方法链接:https://github.com/qfgaohao/pytorch-ssd/blob/master/README.md#download-models
快速开始
训练模型
-
进入解压后的源码包根目录。
cd /${模型文件夹名称} -
运行训练脚本。
该模型支持单机单卡训练和单机8卡训练。 以下命令为数据集在代码目录下的样例, 也可以自行添加软链接到数据集位置。
-
单机单卡训练
bash ./test/train_full_1p.sh --data_path=VOCdevkit/VOC2007/ --validation_data_path=VOCdevkit/test/VOC2007/ # 单卡精度 bash ./test/train_full_1p.sh --data_path=VOCdevkit/VOC2007/,VOCdevkit/VOC2012/ --validation_data_path=VOCdevkit/test/VOC2007/ # 单卡多数据集精度 bash ./test/train_performance_1p.sh --data_path=VOCdevkit/VOC2007/ --validation_data_path=VOCdevkit/test/VOC2007/ # 单卡性能 bash ./test/train_performance_1p.sh --data_path=VOCdevkit/VOC2007/,VOCdevkit/VOC2012/ --validation_data_path=VOCdevkit/test/VOC2007/ # 单卡多数据集性能 -
单机8卡训练
bash ./test/train_full_8p.sh --data_path=VOCdevkit/VOC2007/ --validation_data_path=VOCdevkit/test/VOC2007/ # 8卡精度 bash ./test/train_full_8p.sh --data_path=VOCdevkit/VOC2007/,VOCdevkit/VOC2012/ --validation_data_path=VOCdevkit/test/VOC2007/ # 8卡多数据集精度 bash ./test/train_performance_8p.sh --data_path=VOCdevkit/VOC2007/ --validation_data_path=VOCdevkit/test/VOC2007/ # 8卡性能 bash ./test/train_performance_8p.sh --data_path=VOCdevkit/VOC2007/,VOCdevkit/VOC2012/ --validation_data_path=VOCdevkit/test/VOC2007/ # 8卡多数据集性能--data_path 参数填写数据集路径,需写到数据集的一级目录;
--validation_data_path 参数填写测试集路径,需写到数据集的一级目录。
-
评测
bash ./test/train_eval.sh --data_path=VOCdevkit/test/VOC2007/ --pth_path=models/mb1-ssd-Epoch-xxx-Loss-xxxxxxxx.pth--data_path 参数填写测试集路径,需写到测试集一级目录;
--pth_path 参数填写训练过程中生成的权重文件路径(默认存储在"models/"文件夹下)。
-
训练结果
表 2 训练结果展示表
| NAME | 卡数 | mAP | FPS | batch_size | Epochs | Torch_Version |
|---|---|---|---|---|---|---|
| Atlas 900 A2 PODc | 8 | 0.6849 | 6250.54 | 32 | 240 | 1.11 |
| 竞品A | 8 | 0.657 | 6547 | 32 | 240 | 1.11 |
公网地址说明
代码涉及公网地址参考 public_address_statement.md
变更说明
2024.03.25:优化模型的训练新能。
2024.03.26:更新readme.md。
FAQ
无。