热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深度学习(12)——用于对象分割和细粒度本地化的超列

用于对象分割和细粒度本地化的超列

    • 1、上采样
    • 2、超列
    • 3、网格分类器
    • 4、分块分类
    • 5、神经网络

Hypercolumns for Object Segmentation and Fine-grained Localization

1、上采样

图像放大几乎都是采用内插值方法,即在原有图像像素的基础上,在像素点之间采用合适的插值算法插入新的元素。双线性插值是目前在语义分割中用的比较多的一种方式,比如FCN中就是用的这种方法。 这种方法特点是不需要进行学习,运行速度快,操作简单。只需要设置好固定的参数值即可,设置的参数就是中心值需要乘以的系数。

疑问:直接resize得到结果不可以吗,同样都是双线性插值

线性插值使用连接两个已知量的直线来确定在这个两个已知量之间的一个未知量的值的方法,如图1
深度学习(12)——用于对象分割和细粒度本地化的超列
双线性插值是线性插值的扩展。利用原图像中目标点四周的四个真实存在的像素值来共同决定目标图中的一个像素值,其核心思想是在两个方向分别进行一次线性插值。如图2所示,由Q12Q_{12}Q22Q_{22}确定点 R2R_2, 由Q11Q_{11}Q21Q_{21}确定点 R1R_1,最终由点 R2R_2R1R_1确定点 pp
深度学习(12)——用于对象分割和细粒度本地化的超列
而在实际应用中呢,首先设置参数α\alpha,已知kernelsize=64kernel size=64,根据某种规则生成64×6464 \times 64大小的矩阵。若原始图片大小是16×1616 \times 16,那么就需要16×1616 \times 1664×6464 \times 64α\alpha 矩阵,原始图像的每一个像素放置在α\alpha 矩阵中间,这样每两个像素之间都可以进行双线性插值,相邻元素之间插入3232个像素,周边补充3232个像素。不同元素对插入值有着不同的影响,则互相叠加,最后将原始图像的16×1616 \times 16个像素移除,也就形成了32×1732\times17(周边补充 16+116+1=544=544 ,最终上采样大小为 (544,544)(544, 544)

2、超列

在卷积网络的各个层中,我们称接近输入层的卷积层为底层卷积层,接近输出层的卷积层为高层卷积层。那么底层卷积层得到的feature map中包含的低级信息,如姿势,照明,清晰度,空间位置等信息越多,高层卷积层得到的feature map得到的特征越抽象、语意信息越多。卷积网络(CNN)的识别算法通常使用最后一层的输出作为特征表示。然而,该层中的信息在空间上可能太粗糙导致不能精确定位。为了更好的利用这两种信息,对于原始图像 ii 位置的像素,我们同时利用部分或全部与 ii 位置对应的的feature map。那么对于 ii 位置的像素,我们就会得到一个特征向量,这个特征向量称为 ii 的超列。

对于分割任务,我们resize边界框至 505050*50 ,并预测一个相应的heatmap,heatmap编码的是对应位置在物体内部的概率。那么问题转化为对 505050*50 个位置进行分类,文章使用超列进行分类。

由于卷积、池化的存在,feature map大小与原始图像大小并不相同,将各层feature map中的像素与原始图像 ii 位置处的像素对应起来,就需要使用上采样(双线性插值),统一feature map大小至与原始图像大小相同。文章中对于检测分割任务,将边界框统一调整到 50×5050\times 50 ,所以,原始图像的参考大小是 50×5050\times 50 。如图3 所示:
深度学习(12)——用于对象分割和细粒度本地化的超列

文章中公式1为,
fi=kαikFkf_i = \sum_k \alpha_{ik}F_k
可以写成
fk=αkFkf_{k} = \alpha_k F_k
f=kfkf = \sum_k f_k
FkF_k 表示第kk个feature map ,fkf_k表示第kk个feature map上采样后的feature map。超列ii位置的特征向量为 fif_iαik\alpha_{ik}取决于box和feature map中i和k的位置。

这里的累加符号表示将不同feature map的通道叠加在一起,而非将数值相加,最后输出还是50×50×c50\times50\times c,即将网络中部分或全部feature map连接到一个长向量,我们称之为超列。例如,使用来自pool2(256个通道),conv4(384个通道)和fc7(4096个通道)将导致4736维向量。

为方便解释,上式中将公式1的fif_i替换成ff,但实际中超列只是针对某一位置而言,并非整个feature map,对于ii 位置的像素,fif_i 才是ii 位置的超列。

3、网格分类器

由上一章节我们已知 fif_iii 位置的超列。
针对50×5050\times 50 的特征,最简单的办法是训练50×5050\times 50个分类器。但是考虑到训练速度及相邻像素点之间的相关关系,文章训练了 K×KK\times K 个分类器,K=5or10K = 5\,or\, 10 。每一个分类器实际上是一个函数gk()g_k(\cdot),它接受一个特征向量并输出 0-1之间的概率。

hi(.)=kαikgk(.)h_i(.) = \sum_k \alpha_{ik}g_k(.)

如果第ii个像素的特征向量是 fif_i ,则得分是

pi=kαikgk(fi)=kαikpik p_i = \sum_k \alpha_{ik}g_k(f_i) = \sum_k \alpha_{ik}p_{ik}

其中 pikp_{ik} 是第k个分类器为第i个像素输出的概率。因此,在测试时,我们在所有像素上运行所有K2K^2分类器。然后,在每个像素处,我们使用上面的等式线性组合该像素处的所有分类器的输出以产生最终预测。 注意,线性组合的系数(α\alpha)取决于位置。
下图所示,是整个计算流程:
深度学习(12)——用于对象分割和细粒度本地化的超列

4、分块分类

上述过程是将所有的feature map大小调整到 50×5050\times 50 ,然后对每个位置进行分类。但是以此计算成百上千的feature map的计算量太大,因此我们可以在相关位置将超列拆分,再进行计算。

每个具有c通道的feature map 将在超列中产生c维特征块位置的表示,并且该块将在分类器中具有相应的权重块。因此在线性组合 pikp_{ik} 之前,各个feature map的相对位置在计算中一直不变。

因此,如果fif_i是位置ii处的特征向量,则fif_i将由对应于第jj个特征映射的块f(j)f^{(j)}组成。线性分类器ww将类似地分解。wwfif_i之间的点积可以写成:

wTfi=w(j)Tfi(j)w^Tf_i = \sum w^{(j)T}f_i^{(j)}

分解中的第jj项对应于上采样第jj个feature map之上的线性分类器。 但是,由于上采样是线性运算,我们可以先应用分类器,然后使用公式1进行上采样:

fi(j)=kαik(j)Fk(j)f_i^{(j)} = \sum_k \alpha_{ik}^{(j)}F_k^{(j)}

w(j)fi(j)=kαik(j)w(j)TFk(j)w^{(j)}f_i^{(j)} = \sum_k \alpha_{ik}^{(j)}w^{(j)T}F_k^{(j)}

观察到将分类器应用于feature map 中的每个位置与1×1卷积相同。因此,要在超列特征之上运行线性分类器,我们将其分解为与每个feature map相对应的块,在每feature map 上运行1×1卷积以生成分数图,将所有分数图上采样到目标分辨率,以及求和。

关于图2中,经过网格分类器后概率图是 50×50×K250\times 50 \times K^2 的解释:
深度学习(12)——用于对象分割和细粒度本地化的超列
每一个网格分类器的作用类似 1×11 \times 1 的卷积,那么 fif_i1×11\times 1 ,经过卷积后是 1×1×c1\times 1\times c ,而论文中提到,网格中的每个分类器是一个函数 gk()g_k(·),它接收一个特征向量并输出0到1之间的概率。所以针对 fif_i 的分类器,计算过程应该是 1×c×11 \times c \times 1,经过卷积后结果是个标量。

考虑对该流水线的进一步修改,其中我们用一般的n×n卷积替换1×1卷积。

5、神经网络

深度学习(12)——用于对象分割和细粒度本地化的超列
如图2所示。对于每个feature map,我们堆叠在一个额外的卷积层上。每个这样的卷积层都有K2K^2 个通道,对应我们想要训练的 K2K^2 分类器。如上所述,我们可以为卷积选择任何内核大小,但对于生成1×1特征映射的完全连接的层,我们仅限于1×1卷积。我们获取所有这些层的输出,使用双线性插值对它们进行上采样并求它们。最后,我们通过sigmoid传递这些输出,并使用等式3组合 K2K^2 feature map 以给出我们的最终输出。


推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 2020年第十一届蓝桥杯决赛JAVA B G题“皮亚诺曲线距离“的个人题解目录
    本文是2020年第十一届蓝桥杯决赛JAVA B G题“皮亚诺曲线距离“的个人题解目录。文章介绍了皮亚诺曲线的概念和特点,并提供了计算皮亚诺曲线上两点距离的方法。通过给定的两个点的坐标,可以计算出它们之间沿着皮亚诺曲线走的最短距离。本文还提供了个人题解的目录,供读者参考。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了游戏开发中的人工智能技术,包括定性行为和非定性行为的分类。定性行为是指特定且可预测的行为,而非定性行为则具有一定程度的不确定性。其中,追逐算法是定性行为的具体实例。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
author-avatar
手机用户2502885835
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有