文章:FCOS: Fully Convolutional One-Stage Object Detection
项目源码:https://github.com/tianzhi0549/FCOS
可以根按照官方指示(https://github.com/tianzhi0549/FCOS/blob/master/INSTALL.md)配置环境。在具体执行阶段,试错很久后我发现pytorch、torchvision的版本会影响FCOS环境编译(这一步:python setup.py build develop --no-deps
)成功与否——其原因是ninja报错【ninja是一种编译工具,类似cmake,这里很爱使用ninja对torch库进行编译。我自己报错原因真相是torch 、torchvision 、ninja版本问题:torch版本太高了(1.8.1),而ninja更新速度好像没有torch快,所以即便是最新的ninja(1.10.2),也无法编译从而报错,解决方法就是将torch降级,具体可参考这篇很好的内容】。我以自己的血泪史表示,运行此程序当遇到setup等一切报错时,不建议针对具体报错进行修改,建议从根本上装对的版本内容,一切就会非常流畅了。
所以分享具体步骤及版本信息:
cuda=10.0.130
python=3.6
pytorch=1.4.0
torchvision=0.2.1
cudatoolkit=10.0
ninja=1.10.2
# first, make sure that your conda is setup properly with the right environment
# for that, check that `which conda`, `which pip` and `which python` points to the
# right path. From a clean conda env, this is what you need to do
conda create --name FCOS python=3.6 #创建虚拟环境,python为3.6版本
conda activate FCOS #激活虚拟环境
# this installs the right pip and dependencies for the fresh python
conda install ipython
# FCOS and coco api dependencies
pip install ninja yacs cython matplotlib tqdm
# follow PyTorch installation in https://pytorch.org/get-started/locally/
# we give the instructions for CUDA 9.0
conda install -c pytorch==1.4.0 torchvision=0.2.1 cudatoolkit=10.0
# install pycocotools. Please make sure you have installed cython.
cd到home/xxx下
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
python setup.py build_ext install
# install PyTorch Detection
cd到home/xxx下
git clone https://github.com/tianzhi0549/FCOS.git
cd FCOS
# the following will install the lib with symbolic links, so that you can modify the files if you want and won't need to re-build it
# 激活fcos环境再编译
source activate FCOS
python setup.py build develop --no-deps
可以在命令行检查安装的python、torch、torchvision版本。
编译成功后显示:
在**官网**上下载一个预训练模型FCOS_imprv_R_50_FPN_1x.pth放在FCOS文件夹下。
python demo/fcos_demo.py
成功!!!
FCOS项目在MS COCO数据集上进行训练测试,不过程序也给出了pascal VOC数据集的文件格式。如果需要训练自己的数据集,可以将数据文件于相应的数据集进行覆盖,但是不要修改文件名和路径目录;也可以在{FCOS_PATH}/fcos_core/config/paths_catalog.py
中进行添加。
下图红框中的内容是我在{FCOS_PATH}/fcos_core/config/paths_catalog.py
中自行添加的voc格式数据集。voc数据集的构建格式可以参考这篇文章:https://blog.csdn.net/weixin_43570470/article/details/123659793
需要注意的是,自行添加数据集dataset的键名中“coco”、“voc”均为小写字母,因为{FCOS_PATH}/fcos_core/config/paths_catalog.py
中有对数据集的判断代码,如果是大写字母无法识别。
将fcos_core/data/datasets/voc.py
中的分类修改成自己数据集的内容:
因为VOC数据集的评估方式略微粗糙,仅有mAP等,如果想获得COCO数据集的详细评估结果,一方面是将数据集通过文章中给出的脚本转化为COCO数据集。还有一种方式就是使用带_cocostyle
后缀的数据集别名。
结束之后,卸载之前安装的fcos并重新编译安装。这样fcos_core的代码才会生效。
pip3 uninstall fcos -y
python3 setup.py build_ext --inplace
python3 setup.py build_ext install
只有这样,才能够在yaml文件当中反问到刚才添加的数据集:
...
DATASETS:
TRAIN: ("coco_{dataset-name}_train", "coco_{dataset-name}_val")
TEST: ("coco_{dataset-name}_test",)
...
1. Add you dataset to FCOS/fcos_core/config/paths_catalog.py 第10行
2. 在/FCOS/configs/fcos/fcos_R_50_FPN_1x.yaml
的DATASETS
中 change DATASETS to your own ones. 将DATASETS修改为与{FCOS_PATH}/fcos_core/config/paths_catalog.py
中一致的dataset键名:
另外,YAML文件还可以修改训练参数:
SOLVER:
BASE_LR: 0.00001 #学习速率
WEIGHT_DECAY: 0.00001 #权重衰减系数
STEPS: (60000, 80000)
MAX_ITER: 90000 #最大迭代次数
IMS_PER_BATCH: 8 #batch_size最终以训练命令中的数量为准
WARMUP_METHOD: "constant"
3. Modify MODEL.FCOS.NUM_CLASSES in /FCOS/fcos_core/config/default.py
4.将fcos_core/data/datasets/voc.py
中的分类修改成自己数据集的内容:
5. 训练
python -m torch.distributed.launch \
--nproc_per_node=8 \
--master_port=$((RANDOM + 10000)) \
tools/train_net.py \
--config-file {YOUR_YAML}.yaml \
DATALOADER.NUM_WORKERS 1 \
SOLVER.IMS_PER_BATCH 1\
TEST.IMS_PER_BATCH 8\
OUTPUT_DIR {YOUR_SAVING_DIR}
--nproc_per_node=8
: 作者使用8 Nvidia V100 GPUs。如果配置不同,在训练的时候指定此参数为训练GPU节点数
--config-file:
指定训练配置的yaml文件
DATALOADER.NUM_WORKERS 1
:数据提取进程数
SOLVER.IMS_PER_BATCH 1 && TEST.IMS_PER_BATCH 8\
指定训练和测试时使用的batch_size,也可在yaml文件中配置。
OUTPUT_DIR:
模型输出地址,也可在 /FCOS/fcos_core/config/default.py
中配置
该项目的训练过程不像YOLOv3那样清晰可视化,需要测试每个节点保存的模型。测试结果标准严格按照coco数据集的评测标准分为AP、AP50、AP75、APs、APm、APl分别对应mAP,IOU在50、75时的AP以及小中大目标的AP。测试使用到的命令:
python ../tools/test_net.py \
--config-file {YOUR_YAML_PATH} \
MODEL.WEIGHT {YOUR_MODEL_PATH} \
TEST.IMS_PER_BATCH 4
MODEL.WEIGHT
、TEST.IMS_PER_BATCH
可分别在 /FCOS/fcos_core/config/default.py
的36行、453行设置
参考链接:https://blog.csdn.net/yinkaishikd/article/details/105027185