目标检测FCOS网络环境配置、训练自己的数据集

文章:FCOS: Fully Convolutional One-Stage Object Detection
项目源码:https://github.com/tianzhi0549/FCOS

目录

  • 一、环境配置
    • 测试demo
  • 二、训练自己的数据集
    • 2.1 构建数据集
      • voc
      • coco
    • 2.2 训练数据
  • 三、测试网络

一、环境配置

可以根按照官方指示(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网络环境配置、训练自己的数据集_第1张图片
编译成功后显示:
目标检测FCOS网络环境配置、训练自己的数据集_第2张图片

测试demo

在**官网**上下载一个预训练模型FCOS_imprv_R_50_FPN_1x.pth放在FCOS文件夹下。

python demo/fcos_demo.py

成功!!!

二、训练自己的数据集

2.1 构建数据集

voc

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
目标检测FCOS网络环境配置、训练自己的数据集_第3张图片
需要注意的是,自行添加数据集dataset的键名中“coco”、“voc”均为小写字母,因为{FCOS_PATH}/fcos_core/config/paths_catalog.py中有对数据集的判断代码,如果是大写字母无法识别。
目标检测FCOS网络环境配置、训练自己的数据集_第4张图片
fcos_core/data/datasets/voc.py中的分类修改成自己数据集的内容:
目标检测FCOS网络环境配置、训练自己的数据集_第5张图片

coco

因为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",)
...

2.2 训练数据

  • 训练数据集的调整方法在作者项目底下的 #54 issue 列出。
    目标检测FCOS网络环境配置、训练自己的数据集_第6张图片

1. Add you dataset to FCOS/fcos_core/config/paths_catalog.py 第10行
目标检测FCOS网络环境配置、训练自己的数据集_第7张图片

2. 在/FCOS/configs/fcos/fcos_R_50_FPN_1x.yamlDATASETS 中 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中的分类修改成自己数据集的内容:
目标检测FCOS网络环境配置、训练自己的数据集_第8张图片
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.WEIGHTTEST.IMS_PER_BATCH可分别在 /FCOS/fcos_core/config/default.py的36行、453行设置


参考链接:https://blog.csdn.net/yinkaishikd/article/details/105027185

你可能感兴趣的:(python)