目标检测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版本。
编译成功后显示:
测试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
需要注意的是,自行添加数据集dataset的键名中“coco”、“voc”均为小写字母,因为{FCOS_PATH}/fcos_core/config/paths_catalog.py
中有对数据集的判断代码,如果是大写字母无法识别。
将fcos_core/data/datasets/voc.py
中的分类修改成自己数据集的内容:
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 列出。
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
目标检测FCOS网络环境配置、训练自己的数据集相关推荐
- mmrotate旋转目标检测框架从环境配置到训练自己的数据集
mmrotate旋转目标检测框架从环境配置到训练自己的数据集 最近有旋转目标检测的需求了,在寻找旋转目标检测算法的过程中,发现已经有人提前测评了各类旋转目标检测框架了,结果是mmrorate效果最好. ...
- 手把手教你用yolov3模型实现目标检测教程(一) - 环境配置
手把手教你用yolov3模型实现目标检测(一) 写在前面: 由于项目需要,使用yolov3模型做了各种现实场景物体的目标检测.做完了过了好长时间,感觉有些遗忘,还是该留下点东西,方便自己查找,也希望能 ...
- Pytorch版deeplabv3+环境配置训练自己的数据集
这个很不错:https://blog.csdn.net/qq_39056987/article/details/106455828 [windows10]使用pytorch版本deeplabv ...
- 墨尘目标检测4--yoyo3模型解析及训练自己的数据集
YOLOv3相比于之前的yolo1和yolo2,改进较大,主要改进方向有: 1.主干网络修改为darknet53,其重要特点是使用了残差网络Residual,darknet53中的残差卷积就是进行一次 ...
- CVPR 2020 | CentripetalNet:目标检测新网络,COCO 48 % AP超现所有Anchor-free网络
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 Anchor-free目标检测新网络,在COCO上可达48 AP!性能优于CenterNet.RPDe ...
- 重磅开源!目标检测新网络 DetectoRS:54.7 AP,特征金字塔与空洞卷积的完美结合
原文链接:重磅开源!目标检测新网络 DetectoRS:54.7 AP,特征金字塔与空洞卷积的完美结合 论文地址:https://arxiv.org/abs/2006.02334 代码地址(基于mmd ...
- (二)目标检测模型的评测与训练技巧
转载自知乎:https://zhuanlan.zhihu.com/p/34142321 关于作者: @李家丞同济大学数学系本科在读,现为格灵深瞳算法部实习生. -------------------- ...
- Linux+javaEE学习笔记之Linux网络环境配置
Linux+javaEE学习笔记之Linux网络环境配置 网络知识简单介绍: Ip地址是:IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物 ...
- 目标检测 YOLOv5网络v6 0版本总结
目标检测 YOLOv5网络v6.0版本总结 YOLOv5对比YOLOv4 输入端:在模型训练阶段,提出了Mosaic数据增强.自适应锚框计算.自适应图片缩放等: Backbone网络:融合其它检测算法 ...
最新文章
- 发送邮件程序(Csharp2005)
- 大流量的网站如何解决访问量的问题?
- 使用Typescript重写axios
- 网站改版后确保无误才能上线!
- 从国考大数据看中国哪个省的人最爱当官
- tornado环境搭建
- [CQOI2012]交换棋子【网络流】【费用流】
- 在嵌入式Neo4j中使用Neo4j浏览器
- atitit.MIZIAN 陕北方言 特有词汇 大词典 attilax 整理 h--n v1 q31.xlsx
- 关于navicat premium数据库激活一直不成功的解决方法(亲测有效)
- python实现pearson相关性检验
- kernel input device
- linux curl证书错误,curl – SSL证书错误
- 机器学习笔记1-What is Machine Learning
- 将一个大文件分割为若干个小文件的方法
- Java 对象排序详解
- skb_dst_set - struct dst_entry dst 路由子系统使用。
- linux虚拟机和主机的文件拷贝
- 建设工程法规专科【9】
- 阿里巴巴办公室环境图解