FCOS for PyTorch [终止随版本演进]
概述
简述
FCOS是一个全卷积的one-stage目标检测模型,相比其他目标检测模型,FCOS没有锚框和提议,进而省去了相关的复杂计算,以及相关的超参, 这些超参通常对目标检测表现十分敏感。借助唯一的后处理NMS,结合ResNeXt-64X4d-101的FCOS在单模型和单尺度测试中取得了44.7%的AP, 因其简化性在现有one-stage目标检测模型中具有显著优势。
-
参考实现:
url=https://github.com/open-mmlab/mmdetection commit_id=cfd5d3a985b0249de009b67d04f37263e11cdf3d -
适配昇腾 AI 处理器的实现:
url=https://gitcode.com/Ascend/DrivingSDK.git code_path=model_examples/FCOS
准备训练环境
准备环境
安装昇腾环境
请参考昇腾社区中《Pytorch框架训练环境准备》文档搭建昇腾环境。
表 1 昇腾软件版本支持表
| 软件类型 | 首次支持版本 |
|---|---|
| FrameworkPTAdapter | 7.0.0 |
| CANN | 8.1.RC1 |
-
当前模型支持的 PyTorch 版本和已知三方库依赖如下表所示。
表 2 版本支持表
Torch_Version 三方库依赖版本 PyTorch 2.1 torchvision==0.16.0
安装模型环境
-
激活 CANN 环境
-
源码安装 mmcv
在 FCOS 根目录下,克隆 mmcv 仓,并进入 mmcv 目录安装(安装完为 2.2.0 版本)
git clone https://github.com/open-mmlab/mmcv cd mmcv/ pip install -r requirements/runtime.txt MMCV_WITH_OPS=1 MAX_JOBS=8 FORCE_NPU=1 python setup.py build_ext MMCV_WITH_OPS=1 FORCE_NPU=1 python setup.py develop cd ../ -
源码安装 mmengine
在 FCOS 根目录下,克隆 mmengine 仓,并进入 mmengine 目录应用 patch 后安装
yes | pip uninstall mmengine git clone -b v0.10.6 https://github.com/open-mmlab/mmengine.git cd mmengine/ git checkout a8c74c346d2ef3e5501115529ba588accb5f2a03 cp ../mmengine.patch ./ git apply --reject mmengine.patch pip install -e . cd ../ -
准备模型源码
在 FCOS 根目录下,克隆 mmdetection 仓,替换其中部分代码
git clone https://github.com/open-mmlab/mmdetection.git --depth=1 cd mmdetection/ git fetch --unshallow git checkout cfd5d3a985b0249de009b67d04f37263e11cdf3d cp -rf ../test/ ./ cp ../mmdet.patch ./ git apply --reject mmdet.patch -
安装其他依赖
在 mmdetection 代码目录下,安装其他依赖
pip install torchvision==0.16.0 pip install -r requirements.txt -
安装 Driving SDK 加速库
-
根据操作系统,安装tcmalloc动态库。
- OpenEuler系统
在当前python环境和路径下执行以下命令,安装并使用tcmalloc动态库。
mkdir gperftools
cd gperftools
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.16/gperftools-2.16.tar.gz
tar -zvxf gperftools-2.16.tar.gz
cd gperftools-2.16
./configure --prefix=/usr/local/lib --with-tcmalloc-pagesize=64
make
make install
echo '/usr/local/lib/lib/' >> /etc/ld.so.conf
ldconfig
export LD_LIBRARY_PATH=/usr/local/lib/lib/:$LD_LIBRARY_PATH
export PATH=/usr/local/lib/bin:$PATH
export LD_PRELOAD=/usr/local/lib/lib/libtcmalloc.so.4
- Ubuntu系统
在当前python环境和路径下执行以下命令,安装并使用tcmalloc动态库。在安装tcmalloc前,需确保环境中含有autoconf和libtool依赖包。
安装libunwind依赖:
git clone https://github.com/libunwind/libunwind.git
cd libunwind
autoreconf -i
./configure --prefix=/usr/local
make -j128
make install
安装tcmalloc动态库:
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.16/gperftools-2.16.tar.gz
tar -xf gperftools-2.16.tar.gz && cd gperftools-2.16
./configure --prefix=/usr/local/lib --with-tcmalloc-pagesize=64
make -j128
make install
export LD_PRELOAD="$LD_PRELOAD:/usr/local/lib/lib/libtcmalloc.so"
准备数据集
-
请用户自行准备好数据集,包含训练集、验证集和标签三部分,可选用的数据集有 COCO、PASCAL VOC 数据集等。
-
上传数据集到服务器任意路径下解压,以 coco2017 为例,数据集在
coco2017目录下分别存放于 train2017、val2017、annotations 文件夹下。 -
当前提供的训练脚本中,是以 coco2017 数据集为例,在训练过程中进行数据预处理。 数据集目录结构参考如下:
├── coco2017 ├──annotations ├── captions_train2017.json ├── captions_val2017.json ├── instances_train2017.json ├── instances_val2017.json ├── person_keypoints_train2017.json └── person_keypoints_val2017.json ├──train2017 ├── 000000000009.jpg ├── 000000000025.jpg ├── ... ├──val2017 ├── 000000000139.jpg ├── 000000000285.jpg ├── ...说明: 该数据集的训练过程脚本只作为一种参考示例。
准备预训练权重
-
联网情况下,预训练权重会自动下载。
-
无网络情况下,可以通过该链接自行下载 resnet50_caffe-788b5fa3.pth,并拷贝至对应目录下。默认存储目录为 PyTorch 缓存目录:
~/.cache/torch/hub/checkpoints/resnet50_caffe-788b5fa3.pth
开始训练
训练模型
该模型支持单机 8 卡训练,在 mmdetection 目录下运行训练脚本。
-
单机 8 卡训练
cd model_examples/FCOS/mmdetection bash ./test/train_8p_full.sh --data_root=/home/datasets/coco2017 # 8p 精度训练,默认 12 epochs bash ./test/train_8p_full.sh --data_root=/home/datasets/coco2017 --max_epochs=2 # 8p 性能训练--data_root参数填写数据集路径,需写到数据集的一级目录。模型训练脚本参数说明如下。
--data_root // 数据集路径,必填参数 --batch_size // 默认 4,训练批次大小,提高会降低ap值,可选参数 --max_epochs // 默认 12,训练轮次,可选参数训练完成后,权重文件保存在当前路径的
test/output目录下,并输出模型训练精度和性能信息。
训练结果展示
表 3 训练结果展示表
| NAME | cards | Epochs | Global Batchsize | FPS | mAP |
|---|---|---|---|---|---|
| 8p-竞品A | 8p | 12 | 32 | 196 | 0.353 |
| 8p-Atlas 800T A2 | 8p | 12 | 32 | 196 | 0.351 |
版本说明
变更
2024.11.8: 首次提交。
2025.1.23: 资料更新,mmengine 使用源码安装。
2025.2.26: 性能优化,增加训练结果保存到日志功能,删除单机单卡训练脚本,只保留单机 8 卡训练脚本。
FAQ
- tcmalloc的动态库文件位置可能因环境配置会有所不同,找不到文件时可以进行搜索,一般安装在
/usr/lib64或者/usr/local目录下:
find /usr -name libtcmalloc.so*
找到对应路径下的动态库文件,libtcmalloc.so或者libtcmalloc.so.版本号都可以使用。