ReLabel:自动将ImageNet转化成多标签数据集,更准确地有监督训练 | 2021新文
人工标注数据集中普遍存在噪声,ReLabel能够自动且低成本地将原本的单标签数据集转化为多标签数据集,并且提出配合random crop使用的高效LabelPooling方法,能够更准确地指导分类网络的训练
来源:晓飞的算法工程笔记 公众号
论文: Re-labeling ImageNet:from Single to Multi-Labels, from Global to Localized Labels
Introduction
ImageNet数据集是图像识别领域很重要的数据集,数据集本身假设图片中只有一个目标,但是目前发现其中包含了很多噪声数据,很多图片实际上可能存在多个类别目标,这种情况就会误导网络的学习。此外,论文发现常用的Random crop数据增强方法会加剧这一现象,对验证集的每张图片进行100次Random crop,统计裁剪图片与原目标之间的IoU,结果如上面的图所示,IoU低于0.5的占比为76.5%,IoU为0的占比甚至高达8%,这显然会给训练带来极大的干扰。
为了解决这一问题,论文提出ReLabel,通过一个标注网络(machine annotator)取得图片的pixel-wise多标签标注\(L\in \mathbb{R}^{H\times W\times C}\),该标注包含标签信息和位置信息,然后按该多标签标注信息将原本的单标签标注转化为多标签标注。论文也提出LabelPooling来配合Random crop使用,根据crop的区域与pixel-wise标注输出对应的多标签信息。区别于知识蒸馏,每张图片每次都需要forward计算,ReLabel方法仅需要每张图片进行一次forward计算,后续都是简单的比例计算,计算量较小。
Re-labeling ImageNet
由于人工标注的成本很高,论文采用了一个标注网络(machine annotator)获取pixel-wise标注,网络结构可以为任意sota网络,考虑到训练的耗时,取该网络在Super-ImageNet数据集上预训练模型,然后在ImageNet上进行fine-tuned。根据交叉熵损失函数的特性,虽然该标注网络是在单标签数据集上训练得到的,但由于数据集存在噪声,这使得网络潜在有多标签预测的能力。
由于我们希望获取pixel-wise多标签标注,将原网络的全局池化层去掉,并将后续的全连接层替换为\(1\times 1\)卷积层,修改后的网络\(f(x)\)的输出变为\(L\in \mathbb{R}^{W\times H\times C}\),这便是我们需要的pixel-wise标注信息。
Training a Classifier with Dense Multi-labels
在获得多标签信息\(L\)后,训练时通过Label Pooling获取训练目标,如上图所示,与常规方法的主要区别如下:
- 常规的训练步骤不管random crop的结果,均赋予原图的单标签。
- Label Pooling先获取图片对应的pixel-wise多标签信息,然后使用RoIAlign对random crop对应的区域进行特征提取,最后使用全局池化和softmax操作进行分类,得到多标签向量\([0,1]^C\)。
使用ReLabel的训练流程可参考上面的伪代码,由于pixel-wise多标签标注是预先计算好的,所以采用ReLabel带来额外计算非常小。
Discussion
Space consumption
当使用EfficientNet-L2作为标注网络时,输入分辨率为\(475\times 475\),输出的pixel-wise标注信息大小\(L\in \mathbb{R}^{15\times 15\times 100}\),保存所有图片的完整标注信息大约需要1TB的存储。对于每一张图片,除了top-k类别外,其它类别的pixel-wise标注信息几乎都为0,所以可以只需要保存每张图片的top-5 pixel-wise标注信息,大约为10GB,相当于ImageNet数据集大小的10%。
Time consumption
ReLabel需要将ImageNet中每张图片进行一次前向计算,大约耗费10 GPU/时,相当于ResNet-50完整训练时间的3.3%。在每个迭代,LabelPooling大约增加每次迭代的0.5%的额外耗时,而知识蒸馏每轮迭代都要teacher网络进行一次完整的前向计算,耗时相当大。
Which machine annotator should we select?
不同标注网络对ReLabel的效果影响很大,论文对比了多种网络结构,结果如上图所示,最终论文选择了EfficientNet-L2作为标注网络。
Factor analysis of ReLabel
ReLabel是多标签和pixel-wise的,为了对比这两个特性的必要性,增加了以下三种实现的对比:
- Localized single labels:跟ReLabel的步骤一样,最后取softmax分数最大的标签,而非多标签。
- Global multi-labels:不使用RoIAlign,直接将完整的标注信息进行全局池化,最后取多标签。
- Global single labels:不使用RoIAlign,直接将完整的标注信息进行全局池化,最后softmax分数最大的标签。
结果如上图所示,论文提出的ReLabel实现方式效果最好。
Confidence of ReLabel supervision
论文也对ReLabel在不同IoU情况下的监督能力进行了探讨,记录5百万张random crop的图片与GT的IoU以及ReLabel输出的最大标签分数,结果如上图所示,标签分数与IoU正相关。当IoU非常小时,标签分数也非常小,这就相当于给网络训练提供了一个训练目标不确定的信号。
Experiments
多标签pixel-wise标注信息的可视化。
与其它标签监督方法对比。
对不同网络结构的性能提升。
搭配其它训练技巧的效果。
与知识蒸馏的耗时对比。
作为目标检测主干网络的表现。
Conclusion
人工标注数据集中普遍存在噪声,ReLabel能够自动且低成本地将原本的单标签数据集转化为多标签数据集,并且提出配合random crop使用的高效LabelPooling方法,能够更准确地指导分类网络的训练。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】
ReLabel:自动将ImageNet转化成多标签数据集,更准确地有监督训练 | 2021新文的更多相关文章
- 税号输入框 将input框中的输入自动转化成半角大写
这两天出了这么一个需求,输入税号的时候,需要自动将其转化为半角大写,并且阻止标点符号中文汉字的输入.(下面会有:全半角转换.文本框选中.光标位置判断.设置光标位置 这些内容) 然后我就开始了慢慢查找资 ...
- 微信小程序:将中文语音直接转化成英文语音
作者:瘟小驹 文章来源<微信小程序个人开发全过程> 准备工作: 准备工具:Eclipse.FileZilla.微信开发者工具.一个配置好SSL证书(https)的有域名的服务器 所需 ...
- 从数据库读取数据后显示成html标签
也许很多人从数据库中读的数据是不需要数据成html标签的,但是也许有一天你们会发现当我们需要输出成html标签时编译器却自动帮我们输出成字符串了这是我们可以这样来 方法1: 最常用的方法,使用JS或J ...
- 如何用python将一个时间序列转化成有监督学习
机器学习可以被用于时间序列预测. 在机器学习能使用之前,时间序列预测需要被重新转化成有监督学习.将一个序列组合成成对的输入输出序列. 在这篇教程中,你会发现如何通过使用机器学习算法将单变量和多变量的时 ...
- js中对象转化成字符串、数字或布尔值的转化规则
js中对象可以转化成 字符串.数字.布尔值 一.对象转化成字符串: 规则: 1.如果对象有toString方法,则调用该方法,并返回相应的结果:(代码通常会执行到这,因为在所有对象中都有toStrin ...
- chrome插件开发-----------将网址转化成二维码website2QRcode
微信自带的浏览器无法输入链接,仅仅能通过扫描二维码实现.可是有时候看到一个有趣的站点,想分享,还得先去将链接转化成二维码的站点.先转成二维码.再扫描.有点麻烦.所以写了一个插件.直接生成二维码. 须要 ...
- 如何将一个Maven项目转化成一个Eclipse项目
有时候我们需要将一个Maven项目导入到Eclipse中,直接作为一个普通的eclipse项目来导入是不行的,我们可以通过一个命令来实现:mvn eclipse:eclipse 1. 进入该Maven ...
- .net core2.0添加json文件并转化成类注入控制器使用 让js调试更简单—console
.net core2.0添加json文件并转化成类注入控制器使用 上一篇,我们介绍了如何读取自定义的json文件,数据是读取出来了,只是处理的时候太麻烦,需要一遍一遍写,很枯燥.那么有没有很好的办法呢 ...
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
ADO.NET 一.ADO.NET概要 ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库 二.ADO.NET的组成 ①System.Data → DataTable, ...
随机推荐
- LCS&&LRC&&LIS问题
注:最近笔试题经常碰到DP动态规划的问题,但是由于本人没有接触过DP,笔试后看到别人家的答案简洁又漂亮,真的羡慕:难的DP自己可能不会,那再见到常见的LCS和LRS以及LIS为问题总该会吧: 资料参考 ...
- 什么是Spring的MVC框架?
Spring 配备构建Web 应用的全功能MVC框架.Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离.它也允许以声明的 ...
- spring集成mongodb简单使用和测试方式
@EnableMongoRepositories @ComponentScan(basePackages = "cn.example") @Configuration public ...
- memcacuery cache 相比,有什么优缺点?
把 memcached 引入应用中,还是需要不少工作量的.MySQL 有个使用方便的 query cache,可以自动地缓存 SQL 查询的结果,被缓存的 SQL 查询可以被反复 地快速执行.Memc ...
- 读懂jstack
1 jstack jstack是JDK自带的一种线程栈跟踪工具,用于生成java虚拟机当前时刻线程快照.在定位线程卡顿.死锁.block等原因的时候非常有用.使用方法是: jstack [-l] pi ...
- BFC理解
Block formatting context (块级格式化上下文) 页面文档由块block构成 每个block在页面上占据自己的位置 使用新的元素构建BFC overflow:hidden | a ...
- 隐藏IE10默认在input框输入内容后显示“X”按钮
::-ms-clear{display: none;} ::-ms-reveal{display: none;}
- Python中使用正则表达式获取两个字符中间部分
问题背景:当我们爬取网页信息时,对于一些标签的提取是没有意义的,所以需要提取标签中间的信息. 解决办法:用到了re包下的函数 方法1:用到了research()方法和group()方法 方法2:用到了 ...
- git clone 遇到的问题
经常遇到这个问题, 所以今天决定把它记录下来 当使用git clone时,会报Please make sure you have the correct access rights and the r ...
- Leetcode541/151之String与char数组与StringBuffer
String与char数组与StringBuffer 通常情况下遇到删除字符或者反转字符串时需要将String转为char数组或者StringBuffer String与char数组 char [] ...