重要论文——Dynamic Filter Networks

2016 NIPS ESAT-PSI, KU Leuven, iMinds

这篇文章,作者针对 以往的卷积操作中的卷积核,经过训练以后就是固定的,因此作者,提出一个 Dynamic Filter Networks,这个模型中的卷积核是 可学习的。我们来看一下这篇文章的方法:

Method

在这里插入图片描述
从上图可以看出, Dynamic Filter Networks包含两部分:Filter-generating networkDynamic filtering layer。从名字可以看出来,第一部分的作用是,产生卷积核,第二部分是实现卷积核的乘法操作。
在这里插入图片描述

Dynamic convvolution layer

上图的左边部分,就是此操作,这种操作是Sample-specific,也就是说,每个样本的卷积核相同,但是针对input图片,每个位置的卷积核共享,这个也就平时的卷积操作,只是卷积核是 可学习型的

Dynamic local filtering layer

上图的右边部分,就是此操作,这种操作是:sample specificposition specific。也就是说,每个像素点对应的卷积核不相同。

思考

依照文章所说的,这种模型适用于有约束地方,比如:医学图像中,对图像的文字描述,可以通过文字描述生成卷积核。

实现

https://github.com/dbbert/dfn/blob/master/experiment_bouncingMnistOriginal_tensorflow.ipynb

# Unfold + matmul + fold  flawlessly 
# 可以实现tf中的extract_patch
# 链接忘记了


import torch
import torch.nn.functional as F

batch_size = 128
channels = 16
height, width = 32, 32
x = torch.randn(batch_size, channels, height, width)

kh, kw = 3, 3
dh, dw = 1, 1

# Pad tensor to get the same output
x = F.pad(x, (1, 1, 1, 1))

# get all image windows of size (kh, kw) and stride (dh, dw)
patches = x.unfold(2, kh, dh).unfold(3, kw, dw)
print(patches.shape)  # [128, 16, 32, 32, 3, 3]
# Permute so that channels are next to patch dimension
patches = patches.permute(0, 2, 3, 1, 4, 5).contiguous()  # [128, 32, 32, 16, 3, 3]
# View as [batch_size, height, width, channels*kh*kw]
patches = patches.view(*patches.size()[:3], -1)
print(patches.shape)
> torch.Size([128, 32, 32, 144])

2019/8/3

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值