2022-03-01
简介
关于 的理论大家可以查看以下链接,这里就不详细讲理论了:
1.长 J、E、T 等。完全为 [C]。和 , 2015.
2.于, , 和 . “多尺度按。” arXiv arXiv:1511.07122 (2015).
3.如何理解空洞卷积( )?
其实可以一句话概括,不用的时候扩大感受野(层层会导致信息丢失)
为了阅读方便,我贴一些相关链接:
【】tf.nn.实现卷积?
【】tf.nn.反卷积是如何工作的?
习惯上先显示功能:
tf.nn.(value,,rate,,name=None)
1
去掉name参数指定操作的名称,方法相关的参数有四个:
值:
指需要卷积的输入图像,需要一个形状为[batch, , width, ]的4维形状。具体含义是[训练时batch中的图像数量、图像高度、图像宽度、图像通道数]
:
相当于CNN中的卷积核,需要形状为[, , , ]的4维形状。具体含义为【卷积核的高度,卷积核的宽度,图像通道数,卷积核的核数】,同理,这里的第三维是参数的第四维价值
率:
要求是int型的正数,在正常的卷积操作中应该是可用的(即卷积核的滑动步长),但是空洞卷积是没有参数的,所以要特别注意这一点。相反,它使用了新的速率参数,那么速率参数有什么用呢?定义为我们对输入图像进行卷积时的采样间隔,可以理解为卷积核中穿插了(率-1)个数为“0”,插入了很多原来的卷积核“”东东”,在做卷积的时候,相当于增加了原图的采样间隔。如何插入,后面可以更详细的看到。这时候我们可以很容易得出结论,当rate=1时,没有0插入,这个函数就变成了一个普通的卷积。
:
数量类型,只能是“SAME”、“VALID”之一,这个值决定了不同的边缘填充方式。
ok,结束了,此时没有参数,可能有朋友会问“”参数。其实这个函数已经默认=1,即滑动步长不能改变,固定为1。
返回一个结果。当填充方式为“VALID”时,返回[batch,-2*(-1),width-2*(-1),],填充方式为“SAME””,返回[batch, , width, ],这个结果是怎么出来的?别着急,我们通过一个程序图来演示空心卷积。
实验
首先创建一个2通道图像
img = tf.(值=[[[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[ 1],[2],[3],[4]],[[1],[2],[3],[4]]]],dtype=tf.)
img = tf.(=[img,img],axis=3)
1
2
然后用一个3*3的卷积核做卷积
= tf.(value=1, shape=[3,3,2,5], dtype=tf.)
= tf.nn.(value=img, =, rate=1)
1
2
建立img sum后,就可以做卷积了
= tf.nn.(input=img, =, =[1,1,1,1], =’VALID’)
1
输出5,我们设置rate=1,此时空洞卷积可视为普通卷积,在SAME和VALID模式下输出如下:
ok,调整rate=2,继续运行程序
= tf.nn.(value=img, =, rate=2, =’SAME’)
1
查看输出结果
[[[[ 16. 16. 16. 16. 16.]
[24.24.24.24.24.]
[16.16.16.16.16.]
[24.24.24.24.24.]]
[[ 16. 16. 16. 16. 16.]
[24.24.24.24.24.]
[16.16.16.16.16.]
[24.24.24.24.24.]]
[[ 16. 16. 16. 16. 16.]
[24.24.24.24.24.]
[16.16.16.16.16.]
[24.24.24.24.24.]]
[[ 16. 16. 16. 16. 16.]
[24.24.24.24.24.]
[16.16.16.16.16.]
[24.24.24.24.24.]]]]]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
这个结果是怎么来的?使用另一张图片
这里我们看到,当rate=2时,通过穿插“0”,卷积核从3*3扩大到5*5。看看“VALID”模式,会发生什么?
报告了直接错误。因为卷积核的大小已经超过了原图大小
好了,相信在座的各位对空心卷积都有一个基本的了解。然后,当填充方式为“VALID”时,返回[batch,-2*(-1),width-2*(-1),],这个结果,相信大家都能证明.
代码清单
作为 tf
img = tf.(值=[[[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[ 1],[2],[3],[4]],[[1],[2],[3],[4]]]],dtype=tf.)
img = tf.(=[img,img],axis=3)
= tf.(value=1, shape=[3,3,2,5], dtype=tf.)
= tf.nn.(value=img, =, rate=1, =’SAME’)
= tf.nn.(value=img, =, rate=1, =’VALID’)
= tf.nn.(value=img, =, rate=2, =’SAME’)
#错误
# = tf.nn.(value=img, =, rate=2, =’VALID’)
使用 tf.() 作为 sess:
print ‘rate=1, SAME mode :’
打印(sess.run())
print ‘rate=1, VALID mode :’
打印(sess.run())
print ‘rate=2, SAME mode :’
打印(sess.run())
#错误
#print ‘rate=2, VALID 模式:’
#print(sess.run())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
实现卷积、反卷积和空洞卷积
暂无评论内容