如何一个模型走天下?集成训练多数据集,打造通用目标检测模型方法详解
在目标检测的实际应用中,常常会出现需要泛化的目标检测系统的情况。如城市安防中,需要目标检测系统能够检测足够多类别的目标,才能达到更好的安防效果。 但目前常用的目标检测数据集中包含的类别数量有限,使用单个数据集训练的目标检测模型已经不能满足需求,如何集成训练多个数据集成为了一大热门研究方向。
一、集成多个数据集存在的问题
如果简单的将多个数据集拼接起来进行训练,往往不会获得性能上的提升。主要原因有以下三点:
NO.1
各数据集的标签空间不统一
每个数据集都规定了各自的标签空间,并且不同标签空间之间有重叠。但名字相同的标签在不同数据集中的语义可能不同,如COCO中的mouse代表鼠标,OpenImages中的mouse代表老鼠;名字不同的标签在不同数据集中的语义可能相同,如VOC中的aeroplane和COCO中的airplane均代表飞机。
由于各数据集的应用场景,图片获取方式的不同导致数据集之间可能存在巨大的领域差异。如图2左为自动驾驶场景,图2右为室内场景,可以明显看出左右两张图像的风格不同,这会导致模型提取的特征分布不同。
二、SimpleMulti-dataset Detection论文解读
UT-Austin提出了一种在多个大型数据集(COCO,Objects365,OpenImages等)上训练通用目标检测器的简单方法,并基于此方法夺得了ECCV2020鲁棒视觉挑战赛中的目标检测和实例分割两个赛道的第一名。
传统的目标检测模型如图3(a)所示,单个数据集对应单个模型,这样用COCO数据集训练的模型并不能用于检测Objects365数据集的目标。所以作者采用图3(b)的方式训练一个multi-head(多检测头)模型,共享模型的backbone,对于不同的数据集使用不同的检测头,每个数据集的loss单独计算。这样训练出来的模型可以识别多个数据集中的目标,不过当前的模型并没有做到统一标签空间,如COCO、Objects365、OpenImages均检测出Car类别的目标,但会输出三个重复的检测框。
但通过这种方式,我们获得了统一标签空间的基础,在同一张输入图片上可以获得各数据集检测头的检测结果,这样就可以通过对比检测结果来对齐不同数据集的标签。
作者提出了一种新颖的data-diven方式来学习统一的标签空间:根据不同检测头在各数据集验证集合上的检测结果来学习标签空间。作者将标签空间的融合看作学习一个原始空间 到统一空间 的映射关系矩阵:
其中由于无法直接对映射矩阵进行优化(无法得知初始映射关系),作者巧妙的将问题转化为穷举在各数据集上每个类别可能的映射关系的方式来寻找最佳的映射矩阵,详细可见论文中的推导[1]。
通过上述方法学习到统一标签空间后,在表3中作者对比了不同版本统一标签空间对模型性能的影响(2x schedule)。
● GloVe embedding表示使用GloVe词向量合并相似的标签;
● Learned,distortion和Learned,AP表示使用论文中提出的方法,通过不同优化损失函数学习到的统一标签空间;
● Expert human表示人工手动合并的统一标签空间。
如表4所示,统一标签空间后的模型可以泛化应用到其他下游数据集,并在多数下游数据集上取得更好的效果。
最后如果将模型规模扩大,使用ResNeSt200作为backbone并训练8x schedule,模型的效果可以和一些SOTA模型相媲美。
作者对学习到的统一标签空间进行分析,发现该方法成功的将名字相同但语义不同的标签分开,将名字不同但语义相同的标签融合到一起。
三、实际操作
作者开源了论文的代码,下载地址:https://github.com/xingyizhou/UniDet
安装好detectron2后需要将该论文代码放到projects目录下:
cd /path/to/detectron2/projects
git clone https://github.com/xingyizhou/UniDet.git
推荐将需要的COCO,Objects365,OpenImages(使用2019 challenge版本)数据集下载到统一的文件夹。(下载地址:https://storage.googleapis.com/openimages/web/challenge2019.html)。下载好的COCO和Objects365可以直接使用,但OpenImages需要进行转换:
# 使用UniDet/tools/convert_datasets/convert_oid.py进行转换
python convert_oid.py --path /path/to/openimage --version challenge_2019 --subsets train
python convert_oid.py --path /path/to/openimage --version challenge_2019 --subsets val --expand_label
按下面的命令将DETECTRON2_DATASETS变量指向下载数据集的文件夹,使detectron2可以读到数据集。
export DETECTRON2_DATASETS=/path/to/datasets
通过观察训练代码可得知该文件中存放有OpenImages数据集各类别的图片数量统计信息,可自行对OpenImages各类别的图片数进行统计来生成,具体格式如下:
[{"id": 419, "image_count": 45938}, {"id": 231, "image_count": 31351}, {"id": 71, "image_count": 130723}, {"id": 114, "image_count": 378077}, {"id": 117, "image_count": 3262}, {"id": 30, "image_count": 289999}, {"id": 11, "image_count": 58145}, {"id": 165, "image_count": 265635}, {"id": 345, "image_count": 29521}, ...]
至此,全部准备工作完成,可以开始训练。如果想以2x schedule训练一个多检测头模型,则可通过以下命令行实现:
python UniDet/train_net.py --config-file UniDet/configs/Partitioned_COI_R50_2x.yaml
在UniDet/datasets/label_spaces/中,作者给出了各类统一后的标签空间,这里展示一下按论文中提出的方法学习的标签空间:
四、数据集下载
● COCO 2014:https://opendatalab.org.cn/COCO_2014
● COCO 2017:https://opendatalab.org.cn/COCO_2017
● Objects365:https://opendatalab.org.cn/Objects365
● OpenImages Challenge 2019:https://opendatalab.org.cn/Open_Images_Challenge_2019
● OpenImages V4:https://opendatalab.org.cn/Open_Images_V4
● OpenImages V6:https://opendatalab.org.cn/OpenImages-v6
还有哪些你想了解的数据集?更多资源请访问OpenDataLab官网,3700+海量、安全、便捷的数据集资源满足你的需求,欢迎体验与下载。(点击原文查看)
● OpenDataLab官网:https://opendatalab.org.cn/
五、后记
本文介绍了集成多个数据集训练存在的问题以及一篇简单的集成多数据集训练的论文,并介绍了该论文代码的使用方法及相关数据集资源。后续也会继续介绍其他集成多个数据集训练的方法,点赞、转发、分享助力更新~
如何一个模型走天下?集成训练多数据集,打造通用目标检测模型方法详解相关推荐
- 基于MMRotate训练自定义数据集 做旋转目标检测 2022-3-30
本文目录 简述 1.MMrotate下载 2.环境安装 3.自定义数据集制作 3.1 roLabelImg 打标签 3.2 生成DOTA数据集格式的标签 3.3 数据集裁剪(split) 4.修改配置 ...
- 【三维目标检测】Complex-Yolov4详解(二):模型结构
Complex-Yolo网络模型的核心思想是用鸟瞰图BEV替换Yolo网络输入的RGB图像.因此,在完成BEV处理之后,模型的训练和推理过程基本和Yolo完全一致.Yolov4中输入的RGB图片的尺寸 ...
- (二)目标检测模型的评测与训练技巧
转载自知乎:https://zhuanlan.zhihu.com/p/34142321 关于作者: @李家丞同济大学数学系本科在读,现为格灵深瞳算法部实习生. -------------------- ...
- 1.8M超轻量目标检测模型NanoDet,比YOLO跑得快
机器之心报道,项目作者:RangiLyu 目标检测一直是计算机视觉领域的一大难题,其目标是找出图像中的所有感兴趣区域,并确定这些区域的位置和类别.目标检测中的深度学习方法已经发展了很多年,并出现了不同 ...
- windows缩放200模糊_1.8M超轻量目标检测模型NanoDet,比YOLO跑得快,上线两天Star量超200...
机器之心报道 项目作者:RangiLyu 如何把 anchor-free 模型移植到移动端或嵌入式设备?这个项目对单阶段检测模型三大模块(Head.Neck.Backbone)进行轻量化,得到模型大小 ...
- AAAI 2020 | NAS+目标检测:AI设计的目标检测模型长啥样?
©PaperWeekly 原创 · 作者|刘畅 学校|上海交通大学博士生 研究方向|计算机视觉 太长不看版 论文标题:SM-NAS: Structural-to-Modular Neural Arch ...
- 收藏 | 超轻量目标检测模型NanoDet,比YOLO跑得快,上线两天Star量超200
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...
- NanoDet:这是个小于4M超轻量目标检测模型
摘要:NanoDet 是一个速度超快和轻量级的移动端 Anchor-free 目标检测模型. 前言 YOLO.SSD.Fast R-CNN等模型在目标检测方面速度较快和精度较高,但是这些模型比较大,不 ...
- 1.8M超轻量目标检测模型NanoDet,比YOLO跑得快,上线两天Star量超200
点击 机器学习算法与Python学习 ,选择加星标 精彩内容不迷路 作者|RangiLyu,本文由机器之心报道 目标检测一直是计算机视觉领域的一大难题,其目标是找出图像中的所有感兴趣区域,并确定这些区 ...
最新文章
- 推荐:偷懒利器 EmEditor
- history.back(-1)和history.go(-1)的区别
- jzoj3058-火炬手【高精度,暴力】
- 凡事多找找自己的原因_布袋除尘器灰斗积粉过多、堵灰该咋办?别急,从这8个方面找原因...
- 用JS获取地址栏参数的方法
- 帧同步_帧同步和状态同步该怎么选(上)
- c mysql 视图_MySQL入门教程(七)之视图
- requests 返回的cookies为空_爬虫学习(2)(requests库)
- CreateFile创建文件 writeFile 向文件中写入东西
- EasyRecovery---视频文件恢复技巧
- python3小游戏源代码_python3实现弹弹球小游戏
- Android 不同布局类型measure、layout、draw耗时对比
- Navicat Premium 12注册机破解方法
- [RedHat] RHCE_RHEL6_实战精品 6.postfix邮件服务器
- java 为文件赋权,linux 系统给文件赋权命令大全
- 消费升级背景下零食行业发展报告_趋势 | 保健食品 “零食化”升级
- 金融行业文档加密方案
- 从零开始- Android刷机指南一
- python利用range生成包含1-10的列表_Python列表干货:创建数字列表:range()函数用法...
- Android(permission)常用权限
热门文章
- 月薪十万的3D建模师,教你轻松学会3D建模
- Excel批量插入多个空白行(列)-Python实现(openpyxl库)
- JAVA毕业设计家教平台系统计算机源码+lw文档+系统+调试部署+数据库
- 优先编码器 Priority Encoder
- C++20终于要来了...
- 【基础学习】GitHub 上100 的 Android 开源库分享
- java 代码生成器
- 电脑 网页服务器无响应,Safari打不开网页因为服务器已停止响应的解决办法
- [kernel] 编译能复现指定poc的内核的排错过程
- 一加5Android 手机,一加5拆机图文教程 一加手机5拆解评测视频