在目标检测的实际应用中,常常会出现需要泛化的目标检测系统的情况。如城市安防中,需要目标检测系统能够检测足够多类别的目标,才能达到更好的安防效果。 但目前常用的目标检测数据集中包含的类别数量有限,使用单个数据集训练的目标检测模型已经不能满足需求,如何集成训练多个数据集成为了一大热门研究方向。

一、集成多个数据集存在的问题

如果简单的将多个数据集拼接起来进行训练,往往不会获得性能上的提升。主要原因有以下三点:

NO.1

各数据集的标签空间不统一

每个数据集都规定了各自的标签空间,并且不同标签空间之间有重叠。但名字相同的标签在不同数据集中的语义可能不同,如COCO中的mouse代表鼠标,OpenImages中的mouse代表老鼠;名字不同的标签在不同数据集中的语义可能相同,如VOC中的aeroplane和COCO中的airplane均代表飞机。

如果单纯通过标签的名称来对齐会导致标签语义上的歧义。

NO.2

各数据集的标注不一致

由于各数据集的标签空间不统一,导致各数据集的前景背景定义不同。如图1中所示,A数据集中包含person、car类别,但不包含face类别。B数据集中包含person、face类别,但不包含car类别。那么在各自的标注中,A数据集会将car作为前景标注出来,但会将face作为背景忽略;而B数据集会将face作为前景标注出来,但会将car作为背景忽略[2]。这样就导致了不同数据集之间的前景背景定义存在歧义。

图1 标注不一致问题

NO.3

各数据集的领域差异

由于各数据集的应用场景,图片获取方式的不同导致数据集之间可能存在巨大的领域差异。如图2左为自动驾驶场景,图2右为室内场景,可以明显看出左右两张图像的风格不同,这会导致模型提取的特征分布不同。

图2 领域差异问题

二、SimpleMulti-dataset Detection论文解读

由于篇幅有限,本文只介绍一种通过“构建统一标签空间”来集成训练多个数据集的论文《Simple Multi-dataset Detection》[1]。这里会概述一下论文中的方法,分析其实验结果,并简单介绍代码使用方法,以帮助读者更好地了解集成训练。

NO.1

方法

UT-Austin提出了一种在多个大型数据集(COCOObjects365OpenImages等)上训练通用目标检测器的简单方法,并基于此方法夺得了ECCV2020鲁棒视觉挑战赛中的目标检测和实例分割两个赛道的第一名。

图3 不同类型的目标检测模型

传统的目标检测模型如图3(a)所示,单个数据集对应单个模型,这样用COCO数据集训练的模型并不能用于检测Objects365数据集的目标。所以作者采用图3(b)的方式训练一个multi-head(多检测头)模型,共享模型的backbone,对于不同的数据集使用不同的检测头,每个数据集的loss单独计算。这样训练出来的模型可以识别多个数据集中的目标,不过当前的模型并没有做到统一标签空间,如COCOObjects365OpenImages均检测出Car类别的目标,但会输出三个重复的检测框。

但通过这种方式,我们获得了统一标签空间的基础,在同一张输入图片上可以获得各数据集检测头的检测结果,这样就可以通过对比检测结果来对齐不同数据集的标签。

作者提出了一种新颖的data-diven方式来学习统一的标签空间:根据不同检测头在各数据集验证集合上的检测结果来学习标签空间。作者将标签空间的融合看作学习一个原始空间  L_k 到统一空间  L 的映射关系矩阵:

而具体的优化目标为以下公式:


上述公式中出现的变量含义如下所示:

 T_k:数据集k对应的映射矩阵

D在统一标签空间下各预测框的类别概率分布

● \tilde{D^k}在数据集k的标签空间下各预测框的类别概率分布

 L_c :优化损失函数

其中由于无法直接对映射矩阵进行优化(无法得知初始映射关系),作者巧妙的将问题转化为穷举在各数据集上每个类别可能的映射关系的方式来寻找最佳的映射矩阵,详细可见论文中的推导[1]。

表1 不同Sampling策略效果

如表1 所示,作者对比了在不同sampling策略下的效果。其中uniform dataset sampling表示平衡不同数据集间的样本数量;class-aware sampling表示平衡数据集内的长尾效应,增加尾部类别被sample的概率。从结果可以看出uniform dataset sampling和class-aware sampling都是十分重要的。

NO.2

实验结果

作者使用了ResNet-50 backbone的CascadeRCNN进行实验。首先如表2所示,作者提出的多检测头模型在不融合标签空间的情况下已经可以比拟单检测头模型(8x schedule),为后面学习标签映射矩阵提供了可靠的检测结果。

表2 多检测头模型与单检测头模型效果对比

通过上述方法学习到统一标签空间后,在表3中作者对比了不同版本统一标签空间对模型性能的影响(2x schedule)。

● GloVe embedding表示使用GloVe词向量合并相似的标签;

● Learned,distortion和Learned,AP表示使用论文中提出的方法,通过不同优化损失函数学习到的统一标签空间;

● Expert human表示人工手动合并的统一标签空间。

表3 不同版本标签空间效果对比

如表4所示,统一标签空间后的模型可以泛化应用到其他下游数据集,并在多数下游数据集上取得更好的效果。

表4 在其他数据集上的泛化性能

最后如果将模型规模扩大,使用ResNeSt200作为backbone并训练8x schedule,模型的效果可以和一些SOTA模型相媲美。

表5 扩大模型规模

作者对学习到的统一标签空间进行分析,发现该方法成功的将名字相同但语义不同的标签分开,将名字不同但语义相同的标签融合到一起。

三、实际操作

作者开源了论文的代码,下载地址:https://github.com/xingyizhou/UniDet

该论文依赖detectron2框架,需要先按照说明安装detectron2。说明文档:https://detectron2.readthedocs.io/en/latest/tutorials/install.html

安装好detectron2后需要将该论文代码放到projects目录下:

cd /path/to/detectron2/projects
git clone https://github.com/xingyizhou/UniDet.git

推荐将需要的COCOObjects365OpenImages(使用2019 challenge版本)数据集下载到统一的文件夹。(下载地址:https://storage.googleapis.com/openimages/web/challenge2019.html)。下载好的COCOObjects365可以直接使用,但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

接下来需要下载challenge-2019-label500-hierarchy.json文件。(下载地址:https://storage.googleapis.com/openimages/challenge_2019/challenge-2019-label500-hierarchy.json)。并将UniDet/unidet/evaluation/oideval.py文件中的oid_hierarchy_path修改到该文件实际路径。

另外在UniDet/configs/中可以看到与OpenImages数据相关的config文件中有一项openimages_challenge_2019_train_v2_cat_info.json文件在代码仓库中并没有给出。

通过观察训练代码可得知该文件中存放有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/中,作者给出了各类统一后的标签空间,这里展示一下按论文中提出的方法学习的标签空间:

如果想复现学习标签空间的步骤,可以在训练好多检测头模型后得到在三个数据集的验证集上的推理结果,并按照UniDet/tools/UniDet_learn_labelspace_mAP.ipynb中的步骤运行即可。

如果想添加自定义数据集,可以在UniDet/unidet/data/datasets/中注册自定义数据集,并修改config文件。具体如何注册可参考detectron2文档:https://detectron2.readthedocs.io/en/latest/tutorials/datasets.html

四、数据集下载

本文提到的相关数据集免费、高速检索、下载地址:

● 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/

五、后记

本文介绍了集成多个数据集训练存在的问题以及一篇简单的集成多数据集训练的论文,并介绍了该论文代码的使用方法及相关数据集资源。后续也会继续介绍其他集成多个数据集训练的方法,点赞、转发、分享助力更新~

参考文献

[1] Zhou, Xingyi, Vladlen Koltun, and Philipp Krähenbühl. "Simple multi-dataset detection." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022.

[2] Zhao, Xiangyun, et al. "Object detection with a unified label space from multiple datasets." European Conference on Computer Vision. Springer, Cham, 2020.

作者丨Langy 

相信光的力量

- End -

以上就是本次分享,获取海量数据集资源,请访问OpenDataLab官网;获取更多开源工具及项目,请访问OpenDataLab Github空间。另外还有哪些想看的内容,快来告诉小助手吧。更多数据集上架动态、更全面的数据集内容解读、最牛大佬在线答疑、最活跃的同行圈子……欢迎添加微信opendatalab_yunying加入OpenDataLab官方交流群。

如何一个模型走天下?集成训练多数据集,打造通用目标检测模型方法详解相关推荐

  1. 基于MMRotate训练自定义数据集 做旋转目标检测 2022-3-30

    本文目录 简述 1.MMrotate下载 2.环境安装 3.自定义数据集制作 3.1 roLabelImg 打标签 3.2 生成DOTA数据集格式的标签 3.3 数据集裁剪(split) 4.修改配置 ...

  2. 【三维目标检测】Complex-Yolov4详解(二):模型结构

    Complex-Yolo网络模型的核心思想是用鸟瞰图BEV替换Yolo网络输入的RGB图像.因此,在完成BEV处理之后,模型的训练和推理过程基本和Yolo完全一致.Yolov4中输入的RGB图片的尺寸 ...

  3. (二)目标检测模型的评测与训练技巧

    转载自知乎:https://zhuanlan.zhihu.com/p/34142321 关于作者: @李家丞同济大学数学系本科在读,现为格灵深瞳算法部实习生. -------------------- ...

  4. 1.8M超轻量目标检测模型NanoDet,比YOLO跑得快

    机器之心报道,项目作者:RangiLyu 目标检测一直是计算机视觉领域的一大难题,其目标是找出图像中的所有感兴趣区域,并确定这些区域的位置和类别.目标检测中的深度学习方法已经发展了很多年,并出现了不同 ...

  5. windows缩放200模糊_1.8M超轻量目标检测模型NanoDet,比YOLO跑得快,上线两天Star量超200...

    机器之心报道 项目作者:RangiLyu 如何把 anchor-free 模型移植到移动端或嵌入式设备?这个项目对单阶段检测模型三大模块(Head.Neck.Backbone)进行轻量化,得到模型大小 ...

  6. AAAI 2020 | NAS+目标检测:AI设计的目标检测模型长啥样?

    ©PaperWeekly 原创 · 作者|刘畅 学校|上海交通大学博士生 研究方向|计算机视觉 太长不看版 论文标题:SM-NAS: Structural-to-Modular Neural Arch ...

  7. 收藏 | 超轻量目标检测模型NanoDet,比YOLO跑得快,上线两天Star量超200

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

  8. NanoDet:这是个小于4M超轻量目标检测模型

    摘要:NanoDet 是一个速度超快和轻量级的移动端 Anchor-free 目标检测模型. 前言 YOLO.SSD.Fast R-CNN等模型在目标检测方面速度较快和精度较高,但是这些模型比较大,不 ...

  9. 1.8M超轻量目标检测模型NanoDet,比YOLO跑得快,上线两天Star量超200

    点击 机器学习算法与Python学习 ,选择加星标 精彩内容不迷路 作者|RangiLyu,本文由机器之心报道 目标检测一直是计算机视觉领域的一大难题,其目标是找出图像中的所有感兴趣区域,并确定这些区 ...

最新文章

  1. 推荐:偷懒利器 EmEditor
  2. history.back(-1)和history.go(-1)的区别
  3. jzoj3058-火炬手【高精度,暴力】
  4. 凡事多找找自己的原因_布袋除尘器灰斗积粉过多、堵灰该咋办?别急,从这8个方面找原因...
  5. 用JS获取地址栏参数的方法
  6. 帧同步_帧同步和状态同步该怎么选(上)
  7. c mysql 视图_MySQL入门教程(七)之视图
  8. requests 返回的cookies为空_爬虫学习(2)(requests库)
  9. CreateFile创建文件 writeFile 向文件中写入东西
  10. EasyRecovery---视频文件恢复技巧
  11. python3小游戏源代码_python3实现弹弹球小游戏
  12. Android 不同布局类型measure、layout、draw耗时对比
  13. Navicat Premium 12注册机破解方法
  14. [RedHat] RHCE_RHEL6_实战精品 6.postfix邮件服务器
  15. java 为文件赋权,linux 系统给文件赋权命令大全
  16. 消费升级背景下零食行业发展报告_趋势 | 保健食品 “零食化”升级
  17. 金融行业文档加密方案
  18. 从零开始- Android刷机指南一
  19. python利用range生成包含1-10的列表_Python列表干货:创建数字列表:range()函数用法...
  20. Android(permission)常用权限

热门文章

  1. 月薪十万的3D建模师,教你轻松学会3D建模
  2. Excel批量插入多个空白行(列)-Python实现(openpyxl库)
  3. JAVA毕业设计家教平台系统计算机源码+lw文档+系统+调试部署+数据库
  4. 优先编码器 Priority Encoder
  5. C++20终于要来了...
  6. 【基础学习】GitHub 上100 的 Android 开源库分享
  7. java 代码生成器
  8. 电脑 网页服务器无响应,Safari打不开网页因为服务器已停止响应的解决办法
  9. [kernel] 编译能复现指定poc的内核的排错过程
  10. 一加5Android 手机,一加5拆机图文教程 一加手机5拆解评测视频