EfficientDet训练自己的物体检测数据集
向AI转型的程序员都关注了这个号????????????
机器学习AI算法工程 公众号:datayx
目标检测能够既准确又快速吗?
我们常常有一个概念,SSD 等单阶段目标检测器很快,但准确性比不上 Mask R-CNN 等两阶段目标检测器,尽管两阶段目标检测推断速度要慢许多。那么有没有一种兼顾两者的目标检测器?设计这样的检测器又会出现什么挑战?这就是该论文作者所关心的。
近年来,在实现更准确的目标检测方面出现了大量进展,然而当前最优目标检测器的成本也越来越高昂。例如,近期提出的基于 AmoebaNet 的 NASFPN 检测器需要 167M 参数和 3045B FLOPS(是 RetinaNet 的 30 倍)才能获得当前最优准确率。大模型规模和昂贵的计算成本阻碍了它们在一些现实世界应用中的部署,例如模型规模和延迟高度受限的机器人、自动驾驶汽车等应用。由于这些现实世界的资源限制,模型效率对于目标检测的重要性越来越高。
已经有很多研究试图开发更高效的检测器架构,如单阶段检测器和 anchor-free 检测器,或者压缩现有模型。尽管这些方法可以实现更优的效率,但这通常是以准确率为代价的。此外,大部分之前研究仅关注某个或某些特定的资源要求,而大量现实应用(从移动设备到数据中心)通常具备不同的资源限制。
那么问题来了:在面对广泛的资源约束时(如 3B 到 300B FLOPS),构建兼具准确率和效率的可扩展检测架构是否可行?
谷歌大脑的这篇论文系统性地研究了多种检测器架构设计,试图解决该问题。基于单阶段检测器范式,研究者查看了主干网络、特征融合和边界框/类别预测网络的设计选择,发现了两大主要挑战:
挑战 1:高效的多尺度特征融合。尽管大部分之前工作融合了不同的输入特征,但它们仅仅是不加区分地将其汇总起来。而由于这些输入特征的分辨率不尽相同,它们对输出特征的贡献也不相等。
挑战 2:模型缩放。尽管之前研究主要依赖大型主干网络或者较大的输入图像规模,但研究者发现,在同时考虑准确率和效率的情况下,扩大特征网络和边界框/类别预测网络非常关键。
针对这两项挑战,研究者提出了应对方法。
挑战 1:高效的多尺度特征融合。研究者提出一种简单高效的加权双向特征金字塔网络(BiFPN),该模型引入了可学习的权重来学习不同输入特征的重要性,同时重复应用自上而下和自下而上的多尺度特征融合。
挑战 2:模型缩放。受近期研究 [31] 的启发,研究者提出一种目标检测器复合缩放方法,即统一扩大所有主干网络、特征网络、边界框/类别预测网络的分辨率/深度/宽度。
最后,研究者观察到,近期出现的 EfficientNets 效率超过之前常用的主干网络。于是研究者将 EfficientNet 主干网络和 BiFPN、复合缩放结合起来,开发出新型目标检测器 EfficientDet,其准确率优于之前的目标检测器,同时参数量和 FLOPS 比它们少了一个数量级。
EfficientDet-D7 在 COCO 数据集上实现了当前最优的 51.0 mAP,准确率超越之前最优检测器(+0.3% mAP),其规模仅为之前最优检测器的 1/4,而后者的 FLOPS 更是 EfficientDet-D7 的 9.3 倍。
Pytoch版的EfficientDet
1、下载Pytoch版的EfficientDet。
https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch
2、制作数据集。
将标注好的:Labelme数据集转为COCO数据集。
参照
https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/106255087。
3、下载EfficientNets预训练模型。
b0:
https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b0-355c32eb.pth
b1:
https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b1-f1951068.pth
b2:
https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b2-8bb594d6.pth
b3:
https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b3-5fb5a3c3.pth
b4:
https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b4-6ed6700e.pth
b5:
https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b5-b6417697.pth
b6:
https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b6-c76e70fd.pth
b7:
https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b7-dcc49843.pth
将预训练模型放到指定的目录下面:
如果可以连接外网可以忽略这个步骤,运行时会自动下载预训练模型。
4、安装模型需要的包
pycocotools
pytorch1.2版本以上(模型用了pytorch的nms,在1.2以上的版本中才包含)
python-opencv(pip install opencv-python)
tensorboardX(pip install tensorboardx)
webcolors(pip install webcolors)
结合本地环境,如果还有缺少的自行下载,唯一要注意的就是pytorch的版本。
修改coco.yml参数。
5、放置数据集
将数据集放到datasets目录下,如下图:
6、修改train.py中的参数
主要需要修改的参数有compound_coef、batch_size、num_epochs、save_interval、lr、data_path、load_weights
compound_coef:0-7,选择EfficientDet的模型,对应d0-d7,同时对应EfficientNet网络的b0-b7。
batch_size:根据显卡显存的大小和类别的多少定义。
epochs:默认为500,一般情况300即可。
save_interval:迭代多少次保存一个模型。
lr:学习率,默认为10-4,这个模型不要用太大的学习率,经测试,学习率太大不收敛。
data_path:数据集的路径,本例放在datasets路径下面,就设置为datasets。
load_weights:加载模型的路径,如果没有一次训练完,再次训练就要用到此参数。
参数配置如下:
测试
修改efficientdet_test.py参数:
compound_coef和训练时设置的参数相对应,比如训练时设置的是0,测试的时候也设置为0
img_path:测试图片的路径。
threshod = 0.2,iou_threshod = 0.35。这两个参数在物体检测中常见,一个过滤分数,一个设置重叠度。
obj_ist =['aircraft', 'oitank']:类别,和训练时的类别顺序一致。
修改完成后运行efficientdet_test.py文件
会在test文件夹下面保存结果的图片,结果如下:
参考地址
https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/106722315
https://blog.csdn.net/jy1023408440/article/details/105638482
tensorflow2 的EfficientDet
环境:
v100,cuda10.1,tensorflow2.1.0 ,python3.7.7
(只保证这个版本是可行的,其他尝试了很多,报了各种匪夷所思的bug
我的数据集是iabelme标注的,文件格式是xml,所以要转成tfrecord格式
注:这个是官方版的,不是pytorch的,
https://github.com/google/automl/tree/master/efficientdet
参照:
1.数据集准备
简单来说:就是用dataset下create_pascal_tfrecord.py进行转换,注意修改类名
命令:
PYTHONPATH=".:$PYTHONPATH"
python dataset/create_pascal_tfrecord.py --data_dir=VOCdevkit --year=VOC2012 --output_path=mytfrecord/pascal --set=trainval
2.训练:
还有model_dir前面的 '/'去掉,否则会到根目录,而不是当前目录(感觉有点坑,害的我以为一开始预测没成功)
还有训练不显示loss,需要tensorboard 显示
cd到model_dir文件夹下
tensorboard --logdir=./,这将打开该 *. tfevents文件夹下的文件
3.map测试
python main.py --mode=eval
--num_classes=10 --training_file_pattern=mytfrecord/train*.tfrecord --validation_file_pattern=mytfrecord/val*.tfrecord --val_json_file=mytfrecord/json_val.json --model_name=efficientdet-d3 --model_dir=tmp/efficientdet-d3 --ckpt=/data/test/automl/efficientdet/efficientdet-d3 --train_batch_size=2 --eval_batch_size=2 --eval_samples=1024 --hparams="use_bfloat16=false,num_classes=10,moving_average_decay=0" --use_tpu=False
4.用自己的图片预测
python model_inspect.py --runmode=infer --model_name=efficientdet-d3 --input_image_size=1920 --max_boxes_to_draw=100 --min_score_thresh=0.4 --ckpt_path=tmp/efficientdet-d3 --input_image=testdata/4.jpg --output_image_dir=outimg/ --num_classes=10 --enable_ema=False
一定要加后面两个,别问我为啥,我也不知道,整了好久,issue差点都翻了一遍
好吧你们要的理由:
可参考https://github.com/google/automl/issues/249
哦,对了,预测的时候,请把inference.py的类名改回来。
没什么问题的话,跟上图差不多就预测完成了。
预测的图片在output_image_dir 下一个叫0.jpg的,看名字不开心的自己去改^_^
还有如果是一堆图片的,自己用inference.py改改
参考链接
https://blog.csdn.net/jy1023408440/article/details/105638482
教你快速运行谷歌EfficientDet目标检测
阅读过本文的人还看了以下文章:
TensorFlow 2.0深度学习案例实战
基于40万表格数据集TableBank,用MaskRCNN做表格检测
《基于深度学习的自然语言处理》中/英PDF
Deep Learning 中文版初版-周志华团队
【全套视频课】最全的目标检测算法系列讲解,通俗易懂!
《美团机器学习实践》_美团算法团队.pdf
《深度学习入门:基于Python的理论与实现》高清中文PDF+源码
特征提取与图像处理(第二版).pdf
python就业班学习视频,从入门到实战项目
2019最新《PyTorch自然语言处理》英、中文版PDF+源码
《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码
《深度学习之pytorch》pdf+附书源码
PyTorch深度学习快速实战入门《pytorch-handbook》
【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》
《Python数据分析与挖掘实战》PDF+完整源码
汽车行业完整知识图谱项目实战视频(全23课)
李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!
《神经网络与深度学习》最新2018版中英PDF+源码
将机器学习模型部署为REST API
FashionAI服装属性标签图像识别Top1-5方案分享
重要开源!CNN-RNN-CTC 实现手写汉字识别
yolo3 检测出图像中的不规则汉字
同样是机器学习算法工程师,你的面试为什么过不了?
前海征信大数据算法:风险概率预测
【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类
VGG16迁移学习,实现医学图像识别分类工程项目
特征工程(一)
特征工程(二) :文本数据的展开、过滤和分块
特征工程(三):特征缩放,从词袋到 TF-IDF
特征工程(四): 类别特征
特征工程(五): PCA 降维
特征工程(六): 非线性特征提取和模型堆叠
特征工程(七):图像特征提取和深度学习
如何利用全新的决策树集成级联结构gcForest做特征工程并打分?
Machine Learning Yearning 中文翻译稿
蚂蚁金服2018秋招-算法工程师(共四面)通过
全球AI挑战-场景分类的比赛源码(多模型融合)
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
python+flask搭建CNN在线识别手写中文网站
中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx
机大数据技术与机器学习工程
搜索公众号添加: datanlp
长按图片,识别二维码
EfficientDet训练自己的物体检测数据集相关推荐
- 63万张!旷视发布最大物体检测数据集Objects365 | 技术头条
编辑 | 琥珀 来源 | AI科技大本营(id:rgznai100) 昨日,在旷视科技联合北京智源人工智能研究院举办的发布会上,旷视研究院发布了物体检测数据集 Objects365,包含 63 万张图 ...
- 63万张!旷视发布最大物体检测数据集Objects365,物体检测竞赛登陆CVPR
郭一璞 发自 北京会议中心 量子位 报道 | 公众号 QbitAI 比ImageNet大的图像数据集来了. 在4月16日的智源学者计划启动暨联合实验室发布会上,旷视科技发布了通用物体检测数据集Obj ...
- 使用yolov5训练自己的目标检测数据集
使用yolov5训练自己的目标检测数据集 yolov4出来后不久,又出现了yolov5,没有论文.虽然作者没有放上和yolov4的直接测试对比,但在COCO数据集的测试效果还是很可观的.很多人考虑到Y ...
- 如何用tensorflow使用自定义数据来训练,做物体检测
本人通过将近两个月的研究,通过收集众多资料,从一个小白来实现利用tensorflow实现物体检测的过程记录如下: 本人此次项目的前端代码:https://github.com/MRchenao/tfj ...
- 使用yolov5训练自动驾驶目标检测数据集BDD100K
文章目录 一.什么是BDD100K 二.数据预处理 三.环境配置 四.修改模型结构 五.迁移学习 六.训练BDD100K 七.评估性能 八.结语 一.什么是BDD100K BDD100K是伯克利发布的 ...
- keras版Mask-RCNN来训练自己的目标检测数据集
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx 一.运行环境的安装: 1.下载好cuda9跟cudnn7,然后在安装好后,cuda其会自动添加 ...
- detectron2训练自己的数据集_keras版MaskRCNN来训练自己的目标检测数据集
向AI转型的程序员都关注了这个号
- 显著性检测数据集之——显著物体检测
本文收集的显著性检测数据集包含两个部分:人眼关注点预测数据集(fixation prediction datasets)和显著物体检测数据集(salient object detection data ...
- 来自不同行业领域的50多个对象检测数据集
作者|Abhishek Annamraju 编译|Flin 来源|medium 计算机视觉是一个快速发展的领域,每天都有大量的新技术和算法出现在不同的会议和期刊上.说到目标检测,理论上你会学到很多算法 ...
最新文章
- 如何使我的Python程序休眠50毫秒?
- linux桌面环境知乎,24 个值得尝试的 Linux 桌面环境 | Linux 中国
- nodejs express使用node-xlsx实现文件的上传下载导入导出
- webview部分安卓机中文乱码
- 4th, Jan 2012 食物中毒惊魂
- 星际争霸战略战术的发展和创新
- 广告屏蔽大师 v5.4.521.1800
- 转载:机器人工程师学习计划(YY硕)
- 详解LCD12864显示屏的使用(并行控制)
- 电子计算机主机房国标,中华人民共和国国家标准电子计算机机房设计规范
- 金山Andorid面试总结
- TestProject Python SDK入门
- re2正则表达式引擎学习(四)
- RTI DDS的xml说明
- 解决Destroying ProtocolHandler [“ajp-apr-8009“]
- 什么是带状线、微带线?参考平面与传输线那些事儿
- 2017年/2月/9日/美签B1/B2流程(供参考)
- UEFI-win10-EDK2搭建
- php单链表检测有没有环,写一段代码判断单向链表中有没有形成环,如果形成环,请找出环的入口处,即P点...
- 法国计算机与电信工程师学院,如何选择法国工程师学院?
热门文章
- 关于 element 可以被找到但是不能被click()的问题
- Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序...
- 无法绑定到新的显示成员,参数名:newDisplayMember
- SpringMVC+Spring3+Hibernate4
- linux 指定范围内查找文件,Linux Find命令查找指定时间范围内的文件的例子
- 软件测试人员进阶必读的八大书籍
- go 判断是否域名_Go编程:对不起,你的 CPU 泄露了
- 曼昆《经济学原理宏观》读书笔记
- HTML示例08---CSS3概述
- 真香 Jenkins 主从模式解决问题So Easy~