实验环境:tensorflow版本1.2.0,python2.7
介绍
关于空洞卷积的理论可以查看以下链接,这里我们不详细讲理论:
1.Long J, Shelhamer E, Darrell T, et al. Fully convolutional networks for semantic segmentation[C]. Computer Vision and Pattern Recognition, 2015.
2.Yu, Fisher, and Vladlen Koltun. “Multi-scale context aggregation by dilated convolutions.” arXiv preprint arXiv:1511.07122 (2015).
3.如何理解空洞卷积(dilated convolution)?
其实用一句话概括就是,在不用pooling的情况下扩大感受野(pooling层会导致信息损失)
为了阅读方便再贴一些相关链接:
【TensorFlow】tf.nn.conv2d是怎样实现卷积的?
【TensorFlow】tf.nn.conv2d_transpose是怎样实现反卷积的?
惯例先展示函数:
tf.nn.atrous_conv2d(value,filters,rate,padding,name=None)
除去name参数用以指定该操作的name,与方法有关的一共四个参数:
value:
指需要做卷积的输入图像,要求是一个4维Tensor,具有[batch, height, width, channels]
这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数]
filters:
相当于CNN中的卷积核,要求是一个4维Tensor,具有[filter_height, filter_width, channels, out_channels]
这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],同理这里第三维channels,就是参数value
的第四维
rate:
要求是一个int
型的正数,正常的卷积操作应该会有stride
(即卷积核的滑动步长),但是空洞卷积是没有stride
参数的,这一点尤其要注意。取而代之,它使用了新的rate
参数,那么rate参数有什么用呢?它定义为我们在输入图像上卷积时的采样间隔,你可以理解为卷积核当中穿插了(rate-1)数量的“0”,把原来的卷积核插出了很多“洞洞”,这样做卷积时就相当于对原图像的采样间隔变大了。具体怎么插得,可以看后面更加详细的描述。此时我们很容易得出rate=1时,就没有0插入,此时这个函数就变成了普通卷积。
padding:
string类型的量,只能是”SAME”,”VALID”其中之一,这个值决定了不同边缘填充方式。
ok,完了,到这就没有参数了,或许有的小伙伴会问那“stride”参数呢。其实这个函数已经默认了stride=1,也就是滑动步长无法改变,固定为1。
结果返回一个Tensor,填充方式为“VALID”时,返回[batch,height-2*(filter_width-1),width-2*(filter_height-1),out_channels]
的Tensor,填充方式为“SAME”时,返回[batch, height, width, out_channels]
的Tensor,这个结果怎么得出来的?先不急,我们通过一段程序形象的演示一下空洞卷积。
实验
首先创建一张2通道图
img = tf.constant(value=[[[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[1],[2],[3],[4]]]],dtype=tf.float32) img = tf.concat(values=[img,img],axis=3)
然后用一个3*3卷积核去做卷积
filter = tf.constant(value=1, shape=[3,3,2,5], dtype=tf.float32) out_img = tf.nn.atrous_conv2d(value=img, filters=filter, rate=1)
建立好了img和filter,就可以做卷积了
out_img = tf.nn.conv2d(input=img, filter=filter, strides=[1,1,1,1], padding='VALID')
输出5个channel,我们设置rate=1,此时空洞卷积可以看做普通的卷积,分别在SAME和VALID模式下输出如下:
ok,调整rate=2,继续运行程序
out_img = tf.nn.atrous_conv2d(value=img, filters=filter, rate=2, padding='SAME')
查看输出结果
[[[[ 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.]]]]
这个结果怎么出来的呢?再用一张图
这里我们看到rate=2时,通过穿插“0”,卷积核由3*3膨胀到了5*5。再看看“VALID”模式下,会发生什么?
直接报错了。因为卷积核的大小已经超过了原图大小
好了,看到这里相信大家对于空洞卷积有了基本的了解了。那么,填充方式为“VALID”时,返回[batch,height-2*(filter_width-1),width-2*(filter_height-1),out_channels]
的Tensor,这个结果,相信大家就可以证明了。
代码清单
import tensorflow as tf img = tf.constant(value=[[[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[1],[2],[3],[4]]]],dtype=tf.float32) img = tf.concat(values=[img,img],axis=3) filter = tf.constant(value=1, shape=[3,3,2,5], dtype=tf.float32) out_img1 = tf.nn.atrous_conv2d(value=img, filters=filter, rate=1, padding='SAME') out_img2 = tf.nn.atrous_conv2d(value=img, filters=filter, rate=1, padding='VALID') out_img3 = tf.nn.atrous_conv2d(value=img, filters=filter, rate=2, padding='SAME') #error #out_img4 = tf.nn.atrous_conv2d(value=img, filters=filter, rate=2, padding='VALID') with tf.Session() as sess: print 'rate=1, SAME mode result:' print(sess.run(out_img1)) print 'rate=1, VALID mode result:' print(sess.run(out_img2)) print 'rate=2, SAME mode result:' print(sess.run(out_img3)) # error #print 'rate=2, VALID mode result:' #print(sess.run(out_img4))
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 完美倒立.2024-夜色碳酸【草台回声】【FLAC分轨】
- 杨青《半山听雨贰HQ》头版限量编号[低速原抓WAV+CUE]
- 白玛多吉《云上西藏1+2》DTS-WAV
- 模拟之声慢刻CD《柏林之声3》[正版CD原抓WAV+CUE]
- 威神V(WayV)《The Highest》[FLAC/分轨][259.1MB]
- 余超颖《迷焕纪》[320K/MP3][201.15MB]
- 余超颖《迷焕纪》[FLAC/分轨][784.22MB]
- 温岚.2005-爱回温新歌加精选2CD【阿尔发】【WAV+CUE】
- 尤雅.1990-台语怀念金曲特选辑【太阳神】【WAV+CUE】
- 群星.2024-七夜雪电视剧影视原声带【听见时代】【FLAC分轨】
- 群星《胎教音乐 古典钢琴曲与水晶摇篮曲》[320K/MP3][134.14MB]
- 群星《胎教音乐 古典钢琴曲与水晶摇篮曲》[FLAC/分轨][654.13MB]
- 许惠钧《睡眠钢琴与校园民歌金曲 空灵新世纪催眠曲》[320K/MP3][201.15MB]
- wbg战队国籍分别都是哪里的 wbg战队2024阵容国籍介绍
- wbg战队教练是韩国人吗 s14wbg战队教练国籍介绍