资讯专栏INFORMATION COLUMN

用CNN分100,000类图像

verano / 3051人阅读

摘要:在这篇文章中我们尝试了用分类类图像。实际上我们将每张训练集中的图像认为成一类。我们采用了一个简单的方法在最后分类前,让文本和图像使用一个,那么在过程中会用一个软的约束,这就完成了详见论文。类似图像的操作吧。

Motivation

在这篇文章中我们尝试了 用CNN分类113,287类图像(MSCOCO)。

实际上我们将每张训练集中的图像认为成一类。(当然, 如果只用一张图像一类,CNN肯定会过拟合)。同时,我们利用了5句图像描述(文本),加入了训练。所以每一类相当于 有6个样本 (1张图像+5句描述)。

文章想解决的问题是instance-level的retrieval,也就是说 如果你在5000张图的image pool中,要找“一个穿蓝色衣服的金发女郎在打车。” 实际上你只有一个正确答案。不像class-level 或category-level的 要找“女性“可能有很多个正确答案。所以这个问题更细粒度,也更需要detail的视觉和文本特征。

同时我们又观察到好多之前的工作都直接使用 class-level的 ImageNet pretrained 网络。但这些网络实际上损失了信息(数量/颜色/位置)。以下三张图在imagenet中可能都会使用Dog的标签,而事实上我们可以用自然语言给出更精准的描述。也就是我们这篇论文所要解决的问题(instance-level的图文互搜)。

Method

1.对于自然语言描述,我们采用了相对不那么常用的CNN 结构,而不是LSTM结构。来并行训练,finetune整个网络。结构如图。结构其实很简单。

对于TextCNN,我们是用了类似ResNet的block。注意到句子是一维的,在实际使用中,我们用的是 1X2的conv。

2. Instance loss。我们注意到,最终的目的是让每一个图像都有区分(discriminative)的特征,自然语言描述也是。所以,为什么不尝试把每一张图像看成一类呢。(注意这个假设是无监督的,不需要任何标注。)

这种少样本的分类其实在之前做行人重识别就常用,但行人重识别(1467类,每类9.6张图像,有人为ID的标注。)没有像我们这么极端。

Flickr30k:31,783类 (1图像+5描述), 其中训练图像为 29,783类

MSCOCO:123,287类 (1图像 + ~5描述), 其中训练图像为 113,287类

注意到 Flickr30k中其实有挺多挺像的狗的图像。不过我们仍旧将他们处理为不同的类,希望也能学到细粒度的差别。(而对于CUHK-PEDES,因为同一个人的描述都差不多。我们用的是同一个人看作一个类,所以每一类训练图片多一些。CUHK-PEDES用了ID annotation,而MSCOCO和Flickr30k我们是没有用的。)

3. 如何结合 文本和图像一起训练?

其实,文本和图像很容易各学各的,来做分类。所以我们需要一个限制,让他们映射到同一个高层语义空间。

我们采用了一个简单的方法:在最后分类fc前,让文本和图像使用一个W,那么在update过程中会用一个软的约束,这就完成了(详见论文 4.2)。 在实验中我们发现光用这个W软约束,结果就很好了。(见论文中StageI的结果)

4.训练收敛么?

收敛的。欢迎大家看代码。就是直接softmax loss,没有trick。

图像分类收敛的快一些。文本慢一些。在Flickr30k上,ImageCNN收敛的快,

TextCNN是重新开始学的,同时是5个训练样本,所以相对慢一些。

5. instance loss 是无监督的么?

instance loss的假设是无监督的,因为我们没有用到额外的信息 (类别标注等等)。而是用了 “每张图就是一类” 这种信息。

6. 使用其他无监督方法,比如kmeans 先聚类,能不能达到类似instance loss的结果?我们尝试使用预训练ResNet50提取pool5特征,分别聚了3000和10000个类。(聚类很慢,虽然开了多线程,聚10000个类花了1个多小时,当中还怕内存不足,死机。大家请慎重。)

在MSCOCO采用instance loss的结果更好一些。我们认为聚类其实没有解决,黑狗/灰狗/两条狗都是 狗,可能会忽略图像细节的问题。

7. 比结果的时候比较难。因为大家的网络都不太相同(不公平),甚至train/test划分也不同(很多之前的论文都不注明,直接拿来比)。所以在做表格的时候,我们尽量将所有方法都列了出来。注明不同split。

尽量VGG-19 和 VGG-19来比, ResNet-152 和ResNet-152比。欢迎大家详见论文。

和我们这篇论文相关的,很多是鲁老师的工作,真的推荐大家去看。

Multimodal convolutional neural networks for matching image and sentence(http://openaccess.thecvf.com/content_iccv_2015/papers/Ma_Multimodal_Convolutional_Neural_ICCV_2015_paper.pdf)

Convolutional Neural Network Architectures for Matching Natural Language Sentences(http://papers.nips.cc/paper/5550-convolutional-neural-network-architectures-for-matching-natural-language-sentences.pdf)

8. 更深的TextCNN一定更好么?

这个问题是Reviewer提出的。

相关论文是 Do Convolutional Networks need to be Deep for Text Classification ?确实,在我们额外的实验中也发现了这一点。在两个较大的数据集上,将文本那一路的Res50提升到Res152并没有显著提升。

9. 一些trick(在其他任务可能不work)

因为看过bidirectional LSTM一个自然的想法就是 bidirectional CNN,我自己尝试了,发现不work。插曲:当时在ICML上遇到fb CNN翻译的poster,问了,他们说,当然可以用啊,只是他们也没有试之类的。

本文中使用的Position Shift 就是把CNN输入的文本,随机前面空几个位置。类似图像jitter的操作吧。还是有明显提升的。详见论文。

比较靠谱的数据增强 可能是用同义词替换句子中一些词。虽然当时下载了libre office的词库,但是最后还是没有用。最后采用的是word2vec来初始化CNN的第一个conv层。某种程度上也含有了近义词的效果。(相近词,word vector也相近)

可能数据集中每一类的样本比较均衡(基本都是1+5个),也是一个我们效果好的原因。不容易过拟合一些“人多”的类。

Results

TextCNN 有没有学出不同词,不同的重要程度?(文章附录)

我们尝试了从句子中移除一些词,看移除哪些对匹配score影响较大。

一些图文互搜结果(文章附录)

自然语言找行人

细粒度的结果

欢迎加入本站公开兴趣群

商业智能与数据分析群

兴趣范围包括各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识

QQ群:81035754

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/4711.html

相关文章

  • 数据集大全:25个深度学习的开放数据集

    摘要:现状和前景评论这是为了学习目的而发布的一个开放数据集。其目的是鼓励对扩大到商业规模的算法进行研究为评估研究提供参考数据集作为使用创建大型数据集的捷径例如的帮助新研究人员在领域开始工作数据集的核心是一百万首歌曲的特征分析和元数据。 摘要: 还在发愁找不到数据集训练你的模型?快来收藏一下史上最全的深度学习数据集汇总吧,有它在,一切都ok~ 介绍深度学习的关键是训练。无论是从图像处理到语音识...

    liangzai_cool 评论0 收藏0
  • 数据集大全:25个深度学习的开放数据集

    摘要:现状和前景评论这是为了学习目的而发布的一个开放数据集。其目的是鼓励对扩大到商业规模的算法进行研究为评估研究提供参考数据集作为使用创建大型数据集的捷径例如的帮助新研究人员在领域开始工作数据集的核心是一百万首歌曲的特征分析和元数据。 摘要: 还在发愁找不到数据集训练你的模型?快来收藏一下史上最全的深度学习数据集汇总吧,有它在,一切都ok~ 介绍深度学习的关键是训练。无论是从图像处理到语音识...

    glumes 评论0 收藏0
  • 超干货|使Keras和CNN构建器(内含代码和讲解)

    摘要:我们在已经准备好的图像数据集上,使用库训练一个卷积神经网络。示例包含用于测试卷积神经网络的图像。训练,绘制准确性损耗函数,然后将卷积神经网络和类标签二进制文件序列化到磁盘。第和行将训练集和测试集按照的比例进行分割。 showImg(https://segmentfault.com/img/bV9lqk?w=698&h=698); 为了让文章不那么枯燥,我构建了一个精灵图鉴数据集(Pok...

    shadowbook 评论0 收藏0
  • 超干货|使Keras和CNN构建器(内含代码和讲解)

    摘要:我们在已经准备好的图像数据集上,使用库训练一个卷积神经网络。示例包含用于测试卷积神经网络的图像。训练,绘制准确性损耗函数,然后将卷积神经网络和类标签二进制文件序列化到磁盘。第和行将训练集和测试集按照的比例进行分割。 showImg(https://segmentfault.com/img/bV9lqk?w=698&h=698); 为了让文章不那么枯燥,我构建了一个精灵图鉴数据集(Pok...

    Dionysus_go 评论0 收藏0
  • 超干货|使Keras和CNN构建器(内含代码和讲解)

    摘要:我们在已经准备好的图像数据集上,使用库训练一个卷积神经网络。示例包含用于测试卷积神经网络的图像。训练,绘制准确性损耗函数,然后将卷积神经网络和类标签二进制文件序列化到磁盘。第和行将训练集和测试集按照的比例进行分割。 showImg(https://segmentfault.com/img/bV9lqk?w=698&h=698); 为了让文章不那么枯燥,我构建了一个精灵图鉴数据集(Pok...

    tolerious 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<