CapsuleNet论文笔记

    1.论文地址Dynamic Routing Between Capsules

    2.CapsuleNet vs 传统CNN

   传统的CNN对于图像大幅度的旋转、变形或朝向不同的方向的图片是无法处理的,除此之外,CNN中的Pooling层会丢失一些信息,如位置信息等,这对于目标检测或目标精确分割是不利的。CNN 的输入和输出都是标量,Capsule则以向量作为输入和输出,CaspsuleNet与CNN的区别见下表:



3.CapsuleNet 网络结构


第一层——普通的卷积层conv1:

Input:28*28*1 image

parameters setting: kernel size 9*9 、 stride1*1、channels 256 、no padding 、activation: ReLu  

parameters:9*9*256 +256 (Weight+Bias)

Output:20*20*256 feature maps

shape:[x,28,28,1]  to   [x,20,20,256] ,x represents batch 

第二层——PrimaryCaps:

Input:20*20*256 feature maps

parameters setting:kernel size 9*9、 stride 2*2 、channels 32 、no padding 、activation: Squashing func、No routing

parameters:9*9*256*32+8*32

Output: 6*6*32*8*1 vectors

shape:[x,20,20,256] to [x,6*6*32,8,1]

理解:8个并行的卷积层,第四个维度做合并


第三层——DigitCaps layer:

Input: 6*6*32向量Ui ,维度为[8,1]

Output: Vj,维度为[16,1],j在0-9之间,代表capsule的编号

parameters:6*6*32*10*8*16(Weight)+6*6*32*10*1(Cij/Bij)

理解:

从PrimaryCaps到DigitCaps layer可看做是一种全连接的方式,且DigitCaps layer中用Routing法则更新参数。                                                

重构与表征:


在训练期间,除了特定的 Capsule 输出向量,将其它的输出向量置为0;然后经过三层FC+Sigmoid重构图片,重构部分可以帮助我们直观感受到当DigitCaps layer的输出向量某一维向量发生改变后重构图片发生的变化,即可以得出对应维度表示的特殊含义。

4.DigitCaps layer中的Routing法则

DigitCaps layer的操作可看做两部分组成:Ui与Wij线性组合得到Uij hat,然后用Uij hat与Vj的內积更新Bij(Cij),这样也不需要利用反向传播了。更新Bij的过程可类比K-means聚类,不断更新Bij的值,得到最优的输出,一般来说Routing迭代三次就能达到较好的效果。


  u_j|I hat可以理解为在前一层为第i个Capsule连接到后一层第j个Capsule的强度;b_ij 依赖于两个 Capsule 的位置与类型,但不依赖于当前的输入图像,不需要反向传播而直接通过计算输入与输出的一致性更新参数。

Routing伪代码如下:


   其中i代表l层的第i个Capsule,j代表下一层(l+1)的第j个Capsule。每个Capsule的length代表了这个位置存在目标的可能性,其orientation表示了目标的多维度信息,如方向、粗细等。

Routing的作用在于找到一个最好的Cij。

5.Capsule Net Loss

Capsule Net的损失函数由两部分组成,第一部分是前三层网络的损失,论文没有使用常用的交叉熵损失函数,而用了SVM中的Margin Loss:



  第二部分的损失是重构部分的损失,重构部分的损失为重构图片与原始图片之间的像素点的欧氏距离和组成,最终的损失为可表示为 Loss=Lc+0.0005*Lre,重构部分的损失可看做是一个正则项,防止网络过拟合。

6.文章亮点与不足

   Capsule Net使用了向量作为输入和输入,并且摒弃了传统CNN的Pooling层,因此保留了更多的信息;Routing是一个动态的过程:上一层Capsules选择性的激活下一层的Capsules,这对于解决遮挡或重叠数字非常有利(强者俞强);网络中采用了Squash激活函数,在确保值在[0,1]范围内的同时保留了方向信息。

  但CaspuleNet中参数众多,训练速度较慢,如何提高训练速度以及如何适应于对类似ImageNet这种size较大的图片是一个挑战。

   小结:CapsuleNet与普通的CNN框架不太相同,论文读起来有点难以理解,我在网上搜到了许多关于这篇文章的解读,并且认真阅读了pytorch版本的代码,后归纳总结为此篇博客,希望读完这篇博客的你能从大体的框架上了解到CapsuleNet,后续细节的地方等我琢磨透了在更新。


Reference

1.机器之心-先读懂CapsNet架构然后用TensorFlow实现:全面解析Hinton提出的Capsule

2.知乎-如何看待Hinton的论文《Dynamic Routing Between Capsules》

3. 知乎专栏-浅析 Hinton 最近提出的 Capsule 计划

4.Youtube视频




  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值