我是靠谱客的博主 美好枕头,最近开发中收集的这篇文章主要介绍胶囊网络Dynamic Routing Between Capsules论文详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Dynamic Routing Between Capsules

20181118

14:39

 

<https://arxiv.org/abs/1710.09829>

https://github.com/ageron/handson-ml

 

 

 

 

 

 

屏幕剪辑的捕获时间: 2018/11/18 14:43

C类似于max_pooling(结果由卷积后的输出决定)

 

 

屏幕剪辑的捕获时间: 2018/11/18 14:48

 

流程类似于RNN,输出在下一轮被用。

 

屏幕剪辑的捕获时间: 2018/11/18 14:51

 

 

 

屏幕剪辑的捕获时间: 2018/11/18 14:56

固定v1的其他维度,只改变一个维度,观察输出reconstruction network输出的结果,发现该维度的特征是控制,粗细、旋转等等。

 

 

 

 

屏幕剪辑的捕获时间: 2018/11/18 15:00

 

CNN对同一类的图片的输出是相同的,但是capsule对进行翻转的同类图片,输出向量也是翻转(取负数)的结果。

 

屏幕剪辑的捕获时间: 2018/11/18 15:02

胶囊的同变性:

池化pooling会丢失掉精确的位置信息和姿态。精确的图像分区和目标检测(位置和姿态)会受到干扰。

 

 

 

 

 

屏幕剪辑的捕获时间: 2018/11/18 15:04

 

capsule类似于memory network。

 

 

屏幕剪辑的捕获时间: 2018/11/18 15:05

 

 

 

 

屏幕剪辑的捕获时间: 2018/11/18 15:12

 

 

屏幕剪辑的捕获时间: 2018/11/18 15:13

squashing类似于softmax,使用非线性变换将向量的模归一化到【0,1】.

softmax:

 

屏幕剪辑的捕获时间: 2018/11/18 15:19

 

 

屏幕剪辑的捕获时间: 2018/11/18 15:23

 

 

屏幕剪辑的捕获时间: 2018/11/18 15:27

 

 

使用9*9的filter,得到ReLU后的卷积结果,将其分组得到32个caps并flatten成1152*8,后全连接得到10个16维的capsule.将每个胶囊计算的范数算argmax得到胶囊的标号,即分类标签。

Related Paper

 

屏幕剪辑的捕获时间: 2018/11/18 15:34

 

屏幕剪辑的捕获时间: 2018/11/18 15:43

 

屏幕剪辑的捕获时间: 2018/11/18 16:02

类似Kmeans的routing agreement.

 

 

屏幕剪辑的捕获时间: 2018/11/18 16:10

capsule可以通过多轮投票的方式选出正确的house+boat组合,而并不是倒着的house,适用于复杂场景的图像分区。

 

屏幕剪辑的捕获时间: 2018/11/18 19:37

Margin loss.如果该类别是当前向量所表示的类,该向量范数>0.9,否则<0.1

 

屏幕剪辑的捕获时间: 2018/11/18 19:39

 

 

Reconstruction network有正则化,防止过拟合的作用。

 

 

 

 

 

代码分析:

 

 

屏幕剪辑的捕获时间: 2018/11/18 19:52

 

 

屏幕剪辑的捕获时间: 2018/11/18 20:03

Input_layer:X是输入的灰度图,28*28*1

Primary_capsule_layer(绿色的初始胶囊激活向量)=2*卷积层+reshape+squash:

    1. 卷积层:输出36*256.
    2. reshape:得到32个capsule,每个大小36*8(比如第一张特征图代表了角度信息,一共有36个可选角度(local feature)排列成一张特征图6*6,每个角度用8维的向量表示)便于理解,实际操作36*256->32*36=1152个向量代表了所有子特征,每个向量是8维的,转置成1*8方便接下来使用。

 

    1. squash:自定义,注意生成零向量在分母则NAN(not a number),因此在分母+1e-7.

 

屏幕剪辑的捕获时间: 2018/11/18 20:21

 

Digit capsules:

    1. 得到10个16维的向量,每个向量的每个维度代表一个综合特征,类似之前的32个特征组,比如角度、厚度等等。
    2. 粉色箭头第i行代表了使用第i个子特征(i<=1152)对当前的图片进行第j(j<=10)类预测的概率大小

 

 

屏幕剪辑的捕获时间: 2018/11/18 22:42

 

 

 

屏幕剪辑的捕获时间: 2018/11/18 22:43

 

 

屏幕剪辑的捕获时间: 2018/11/18 16:43

 

屏幕剪辑的捕获时间: 2018/11/18 20:44

 

 

 

屏幕剪辑的捕获时间: 2018/11/18 20:45

 

 

 

屏幕剪辑的捕获时间: 2018/11/18 20:46

 

Scale production 点乘 vj actual output vector,说明了在某个j类别中,使用第i个子特征向量最能表示该数字或者类别的特征。即提取了主特征。

 

 

 

屏幕剪辑的捕获时间: 2018/11/18 22:23

 

Digit Capsules:动态循环,可改变循环次数。

 

屏幕剪辑的捕获时间: 2018/11/18 22:33

Length:计算10个向量的范数或者长度作为分类概率(单纯比较大小,不需要softmax),类似之前的routing 环节需要使用homemade 范数,因为tensorflow自带的范数,在0向量处训练会爆炸。

而且,可以计算判断图像中出现的两个不同的数字,相同数字无法判断。

 

屏幕剪辑的捕获时间: 2018/11/19 10:34

 

Margin loss:使用onehot确定当前变量K和预测标签是否相同,通过上述函数表达式计算Lk.

 

 

屏幕剪辑的捕获时间: 2018/11/19 10:39

 

 

 

屏幕剪辑的捕获时间: 2018/11/19 10:40

 

 

 

屏幕剪辑的捕获时间: 2018/11/19 10:43

 

在训练中,用真实label的onehot向量mask与digit capsules的输出相乘;

在测试时,用预测标签的onehot向量mask与digit capsules的输出相乘。

 

屏幕剪辑的捕获时间: 2018/11/19 10:51

 

 

 

屏幕剪辑的捕获时间: 2018/11/19 11:03

Github 中加上了用validation+提前截止寻找最优模型,防止过拟合的方法。

 

 

屏幕剪辑的捕获时间: 2018/11/19 11:06

 

 

 

屏幕剪辑的捕获时间: 2018/11/18 19:53

loss用全连接的输出方差决定,28*28=784

 

 

最后

以上就是美好枕头为你收集整理的胶囊网络Dynamic Routing Between Capsules论文详解的全部内容,希望文章能够帮你解决胶囊网络Dynamic Routing Between Capsules论文详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部