没有合适的资源?快使用搜索试试~ 我知道了~
首页Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
17 下载量 43 浏览量
更新于2023-03-16
评论 2
收藏 186KB PDF 举报
主要介绍了Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
资源详情
资源评论
资源推荐
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的如何实现空洞卷积的
主要介绍了Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的,文中通过示例代码介绍的非常详细,对大家的学习或
者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
实验环境: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模式下输出如下:
weixin_38634323
- 粉丝: 7
- 资源: 899
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0