tf.extract_image_patches and tf.nn.depthwise_conv2d

最近毕设涉及到一个图像提取器,这个图像提取器是在patch基础上进行的,一直相信大tensorflow肯定有神器可以实现,查阅了stack overflow找到了tf.extract_image_patches()刚好可以实现将一幅图像分割成patches.

tf.extract_image_patches(
      images,
       ksizes,
       strides,
       rates,
       padding,
       name=None)

假设图像是灰度图,所以channel=1,同时假设batch_size=1

images: 需要分成patch的原始图像。可以是4-D张量(batch_size,weight,high,channels)
ksize: 一般是1-D张量,length大于等于4,表示patch的大小,比如5*5,则为(1,5,5,1)
strides:类似于tf.conv2d里面的strides,表示步长,也就是一次滑动几个像素,如步长为2,则为(1,2,2,1)
padding: 填充方式,类似于tf.conv2d
rates:是一个不容易理解的量,看了很久才搞明白。类似于空洞卷积,同一个patch里面隔几个点取为有效点

下面举个列子讲一下rates
tf.extract_image_patches and tf.nn.depthwise_conv2d_第1张图片
上面图中,将3*3作为patch的大小,也就是ksize=(1,3,3,1),红框中的数字作为patch的有效像素点。比如第一个patch的有效像素点就是紧挨着的3*3个像素点:(123369123).rates=(1,n,n,1)的含义就是原始图像中隔(n-1)个点选取一个点作为同一个patch的有效像素点。第一个红框rates=(1,1,1,1),第二个红框rates=(1,2,2,1),第三个红框就是(1,3,3,1)

tf.nn.depthwise_conv2d可以看https://blog.csdn.net/mao_xiao_feng/article/details/78003476

你可能感兴趣的:(tf.extract_image_patches and tf.nn.depthwise_conv2d)