CNN: Single-label to Multi-label

一、本文的主要思想

1、通过BING将一张图像生成很多小块图像,然后用聚类的方法,在这些小图像中选出一小部分作为待识别的hypotheses;

2、将每张图像的这些hypotheses输入到shared CNN中,每个hypothesis 会产生一个预测,将这些所有的预测采用一个max-pooling得到最后的结果。

二、本文方法的优势

1、不需要真是的bounding box 信息;

2、这种结构对冗余的或者噪声的hypotheses非常鲁棒;

3、在训练阶段不需要每个hypothesis的label信息;

4、可以通过大规模的单标签数据进行预训练;

5、此方法输出的结果就是多标签预测的结果。

三、single-label CNN 没有扩展为多标签的原因

1、多标签相对于单标签而言,每个对象的位置、姿态和尺度都不一样;

2、对象之间有遮挡,同时姿态也是一个很大的挑战;

3、如果用于多标签的话,训练的参数成指数增加,这样就需要更多的训练的数据,同时获取单标签数据的成本要远低于多标签数据;

四、HYPOTHESES-CNN-POOLING具体结构

1、Hypotheses Extraction

采用BING的方法生成hypotheses,然后通过聚类的方法(normalized cut algorithm)将每张图像的所有hypotheses聚类为10类,每类选top1(根据BING生成的得分),由于作者测试过top1-top5效果差不多;聚类后的hypotheses用做后面的Hypotheses-?ne-tuning。

 2、Initialization of HCP

(1)Pre-training on single-label image set

首先在大规模单标签数据库Imagenet上面训练,注意数据的增强方法:crops+flips

(2)Image-?ne-tuning(I-FT) on multi-label image set

在对标签数据库(如VOC)上面进行基于整图的多标签数据fine-tuning;

注意三点:A、直接resize到256*256,没有数据增强

B、误差的计算

C、参数的初始化:前面七层采用预训练的参数,第八层采用均值为0,方差为0.01的高斯随机初始化;卷积层的学习率、前两层的全连接和最后一层全连接的学习率分别为:0.001、0.002和0.01,之所有选用不同的学习率,原因有二:其一是卷积层学习是低层特征,其二是全连接成学习的是特定的任务的特征。

这两步的示意图:

3、Hypotheses-?ne-tuning(H-FT)

基于hypothesis(第一步中得到的)的fine-tuning,每张图像的hypotheses分别输入到I-FT得到的CNN模型当中,示意图如下:

注意两点:

A、对每个hypothesis得到的c维prediction进行融合,采用max-pooling的方法得到c维预测向量,在降融合后的c维预测向量输入到一个c维的softmax层中(不理解的地方:为什么得到的c维预测向量还要输入到softmax中,也可以直接把这个c维求误差不就 可以了嘛),采用与I-FT中相同误差计算方式

B、同样采用不用的学习率

 4、Multi-label Classi?cation for Test Image

             测试阶段和H-FT的过程类似,只是为了提高精度,作者每张图像的10个聚类中选择的top50,获得了不错的效果。

五、实验结果

在VOC所标签数据库上面取得了做好的实验结果,并且尝试了和别的方法的结合,识别率更是有了很大的提升。

六、总结

个人本文主要贡献贡献在于将前人的研究成果进行了很好的融合,建立起一个精确的多标签识别的框架,并且取得了很好的结果。

CNN: Single-label to Multi-label

时间: 2024-08-25 07:12:14

CNN: Single-label to Multi-label的相关文章

label 根据文字label自适应宽度

UILabel *Label = [[UILabel alloc]init]; Label.text = @"长一点也是可以的"; Label.textColor = black_Color; Label.textAlignment = NSTextAlignmentLeft; gsmcLabel.font = [UIFont systemFontOfSize:12]; CGSize size = [Label.text sizeWithAttributes:[NSDictionary

golang break label 与goto label

本文链接:https://blog.csdn.net/itbsl/article/details/73380537 与其他语言一样,Go语言也支持label(标签)语法:分别是break label和 goto label 这样使得编程时变得异常灵活,但是由于在大项目中不好控制,所以建议能不使用goto label就不要使用 break label 和 goto label都能在循环中跳出循环,但是又有些不同之处. 首先说下break label,break的跳转标签(label)必须放在循环语

sharepoint 2010 调查 / 选项 / 将(指定自定义值)修改为(其他)/ jquery 修改input 值与绑定(for) label,修改label的值

<input name="ctl00$m$g_5dfea861_4535_4b41_9b1b_24242d008905$ctl00$ctl01$ctl01$ctl00$ctl00$ctl04$ctl00$RadioButtons" id="ctl00_m_g_5dfea861_4535_4b41_9b1b_24242d008905_ctl00_ctl01_ctl01_ctl00_ctl00_ctl04_ctl00_ctl04" type="radio

关于label和input对齐的那些事

input文本和label对齐 默认状态下,也就是下面这样, 文字和input是居中的. <div>     <label>我是中国人</label>     <input type="text"></div> 但是经常设计图中有label的行高,或者input的高度设计,默认状态下,依然是居中的.但是很多时候label和input要浮动,一旦浮动,后面的input标签就紧紧的贴住了label标签,也就造成了视觉上看到并没有居

微信小程序组件解读和分析:十一、label标签

label标签组件说明: label标签,与html的label标签基本一样.label 元素不会向用户呈现任何特殊效果.不过,它为鼠标用户改进了可用性.如果您在 label 元素内点击文本,就会触发此控件.就是说,当用户选择该标签时,就会自动将焦点转到和标签绑定的表单控件上,主要用来改进表单组件的可用性.使用for属性找到对应的id,或者将控件放在该标签下,当点击时,就会触发对应的控件.for优先级高于内部控件,内部有多个控件的时候默认触发第一个控件.目前可以绑定的控件有:<button/>

UILabel(label控件)的详细使用及特殊效果

转自:http://blog.sina.com.cn/s/blog_af73e7a70101ahlm.html UILabel *label = [[UILabelalloc] initWithFrame:CGRectMake(0, 0, 75, 40)];   //声明UIlbel并指定其位置和长宽 label.backgroundColor = [UIColorclearColor];   //设置label的背景色,这里设置为透明色. label.font = [UIFont fontWi

iOS常用技术-计算Label高度

////  ViewController.m//  计算Label高度////  Created by 大欢 on 16/1/19.//  Copyright © 2016年 bjsxt. All rights reserved.// #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {    [super vie

iOS常用技术-Label富文本

////  ViewController.m//  Label富文本////  Created by 大欢 on 16/1/19.//  Copyright © 2016年 bjsxt. All rights reserved.// #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {    [super view

break label;语句的使用

C语言有个goto关键字,利用goto关键字可以跳出多重循环或跳到某个运行点. java中保留了goto关键字,但是没有goto的功能,主要是考虑到安全性吧.不过java跳出多重循环我们可以使用label标记,在多重循环的最外面一个循环前加上label: ,在需要的跳出的地方写break label就OK了,需要说明这里的label也可以换成其他的单词,只要符合java的标示符就OK. break label; 这里,标签label 是标识代码块的标签.当这种形式的break执行时,控制被传递出

input标签与label标签的“合作关系”

一直忽略了input和label的关系.一次在做自定义单选框的时候又重新捡起来这对"兄弟". label的for属性和input的id值一致的话,input和label就会组成一个组.例如: <label for="test"> <input type="checkbox" id="test" abc="1111" /> </label> 点击label的区域同样会触发到