CapsNet

https://blog.csdn.net/u013010889/article/details/78722140
https://zhuanlan.zhihu.com/p/30970675


CNN的池化层旨在建立位置不变性。但是,池化引入了一个重要的问题,因为它迫使我们失去所有的位置数据(不论相对位置在左上右下还是哪里,只要在池化范围内都可以,这样就淡化了相对位置)。这是很不利的。

max pooling是CNN用来保持Invariance(不变性)的,比如一个物体轻微移动或旋转后,依然不改变它的类别。max pooling这样做丢失了空间等信息,虽然对分类影响不大,但是对检测分割等高级任务影响很大。(其实对重叠的多物体分类还是有影响的,因为它max pooling只保留主体最大响应了,把其他扔了,而后面介绍的capsule则不会把其他信息丢掉,重叠的部分是可以复用的)

image.png

详细的姿态信息(如精确的目标位置、旋转、厚度、倾斜、大小等)将在整个网络中被保存,而不是丢失了之后再恢复。

image.png
[相似度,方向,大小]

CapsNet也是由多层构成。处于最底层的胶囊被称为向量胶囊:它们每个都只用图片的一小部分区域作为输入(称为感知域),然后试图去探测某个特殊的模式(例如,一个矩形)是否存在,以及姿态如何。在更高层的胶囊(称为路由胶囊)则是探测更大和更复杂的物体,比如船等。

IMG_0059.png

因为我们现在已经很有信心地知道矩形和三角形是船的一部分,所以把矩形和三角形的输出更多指向船的胶囊而更少指向房子的胶囊就顺理成章了。用这个方法,船的胶囊将会获得更多的有用输入信号,而房子的胶囊则接收更少的噪音。对每一个连接,按一致性路由算法会维护一个路由权重(见图6):它对于一致的会增加权重,而对于不一致的则降低权重。

IMG_0061.png

这个按一致性路由算法会涉及到一些循环:一致性检测和路由权重更新。这一算法对于拥挤的场景特别有用。例如图7里的场景是比较模糊的,因为你能看到中间有一个上下颠倒的房子,但这样会让上面的三角形和下面的矩形无法得到解释。按一致性路由算法更有可能收敛到一个更好的解释:下面是一条船,而上面是一个房子。这样模糊性就“可以被解释了”:下面的矩形最好是被看成一条船的一部分,同时这样也解释了下面的三角形。一旦下面的两个部分被解释好了,剩下的部分就很容易地被解释成一个房子。

IMG_0062.png

简单网络结构介绍:

该架构非常浅显易懂,只有两个卷积层和一个全连接层。Conv1 有 256个9×9 卷积核,它的步长为 1,由 ReLU 激活。该层的作用是将像素强度转换为局部特征检测器的活动,然后将其作为 PrimaryCapsules 的输入。PrimaryCapsules 是一个 32 通道的卷积 capsule 层;每个主 capsule 包含 8 个卷积单元,带有一个 9×9 内核,步幅为 2

image.png

CNN与Capture中第一层生成第二层的区别:

image.png
image.png

第一个卷积层使用 256 个 9×9 卷积核,深度为1,步幅为1,且使用了 ReLU 激活函数。输出的张量20×20×256。此外,CapsNet 的卷积核感受野使用的是 9×9。这两层间的权值数量应该为 9×9×1×256+256=20992,后面加256是偏置值。

第二个卷积层开始作为 Capsule 层的输入而构建相应的张量结构。使用32×8个9×9卷积核(深度为256),步幅为2。输出张量为6×6×8×32,即输出了6×6×32个维度为8的capsule向量。两层间的权值数量为9×9×256×8×32+8×32=5308672。

PrimaryCaps层有6×6×32个capsules。其中每个map含有6×6个capsule。不同的map代表不同的类型,而同一个map的不同capsule代表不同的位置。

第三层DigitCaps在第二层输出的向量基础上进行传播与Routing更新。第二层共输出 6×6×32=1152 个capsule,即i层共有1152个Capsule,第三层j层有10个Capsules(每个是16维的向量)。


流程

Capsule 是一个高维向量,向量的长度代表目标存在的概率估计,而且它对姿态参数(例如精确的位置,旋转,等等)定向编码(例如8D空间),方向表示属性。如果对象有轻微的变化(例如移位、旋转、改变大小等),那么胶囊将输出相同长度但方向略有不同的向量,因此,胶囊是等变化的。故Hinton采用Squashing的非线性函数作为capsule的激活函数。

v_j=\frac{||s_j||^2}{1+||s_j||^2}\frac{s_j}{||s_j||}

长度缩放函数.png

其中v_j为 Capsule j 的输出向量,s_j为上一层所有 Capsule 输出到当前层 Capsule j 的向量加权和。 即s_j为 Capsule j 的输入向量。
该非线性函数前一部分是输入向量s_j的缩放尺度,后一部分是输入向量的单位向量s_j

Capsule_j的输入向量 s_j的获取计算,是两层间的传播与联系方式。S_j计算过程分为两步,线性组合 和 Routing:

下图左式是Routing,右式是线性组合。

s_j=\sum_{i}c_{ij}\hat{u}_{j|i},\hat{u}_{j|i}=w_{ij}u_i

  • 一致性Routing流程:
image.png
  1. 计算该层的第j个胶囊,先利用转换矩阵(m*k)把上一层的胶囊(k*1)转换一下维度u(m*1),然后上一层共n个胶囊,得到n个u(u j|i , i=1->n),然后这n个u分别乘以各自的权重c_{ij}得到s_j(m*1)
  2. 注意没有偏置项
  3. v_j=squash(s_j)。在cnn中会使用ReLU激活函数,这里不是的,采用squash函数(挤压函数)把这个sj向量放缩到0到单位长度。sj模长很小时,它的平方和1比可以忽略,很大时,1和它的平方比可以忽略。
  4. 注: 这个转换矩阵编码low level的特征和high level的特征之间的空间或者其他联系。

损失函数和最优化:

耦合系数c_{ij}是通过一致性 Routing 进行更新的,但是整个网络其它的卷积参数和 Capsule 内的W_{ij}都需要根据损失函数进行反向更新。

作者采用了 SVM 中常用的 Margin loss,该损失函数的表达式为:
L_c=T_c max(0,m^+-||v_c||)^2+\lambda(1-T_c) max(0,||v_c||-m^-)^2

T_cg_t(真实的解),使用one-hot编码,比如是第2类[0,1,0],vc的模长为预测值[0.3, 0.6, 0,1]的L2距离。m+ 为上margin,惩罚假阴性(没有预测到存在的分类的情况, m- 为下margin,惩罚假阳性(预测到不存在的分类的情况)注意Tc是一个one-hot的向量,第一个式子T_c意味着gt中有的类,你要预测出来,没有预测出来要惩罚,第一个式子1-T_c意味着gt中没有的类,你不能预测出来,预测出来了要惩罚。


重构与表征

利用预测出来的Capsules,重新构建出该类别的图像

文章中使用额外的重构损失(reconstruction loss)来促进 DigitCaps 层对输入数字图片进行编码:

分类任务:最后取 DigitCaps 向量的 L2 范数.png
对16维活跃度向量的其中一个维度,在[-0.25, 0.25]范围内进行步长为0.05的微调,我们会发现向量的某些维度跟数字的特定变换有关系

原图片可能数字重叠覆盖,导致预测出来的10个Capsules中部分Capsules的模都很大,所以重构单个数字图片时候,需要将其他Capsule进行Mask遮住,让有代表的Capsules去重构图片。损失函数通过计算在最后的 FC Sigmoid 层采用的输出像素点与原始图像像素点间的欧几里德距离作为损失函数。

(l,p,r)分别表示标号、预测和重建目标.png

L:(l1,l2)表示图像中两个数字的标号,R:(r1,r2)表示用于重建的两个数字。最右边的两列显示了两个根据标签和预测(P)重建的分类错误的示例。带有(*)标记的两列显示了对既不是标签也不是预测的数字的重构。在(8,1)的情况下,8的循环没有触发0,因为它已经被8占据了。因此,它不会分配一个像素到两个数字,如果其中一个没有任何其他支持。

image.png

相比Softmax,Capsules不受多类别重叠的干扰,非常适合做单样本预测多类别的工作。


总结和对比:

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容