使用TensorFlow独立处理图像的单独补丁

时间:2018-04-20 11:26:08

标签: image-processing tensorflow computer-vision

我正在尝试使用TensorFlow来实现一个神经网络,该神经网络可以独立地处理图像的单独补丁。

我的网络由一个带有3个卷积层的内部网络组成,后面是2个完全连接的层,最后有10个输出神经元(10个类)。此内部网络独立应用于输入图像的不同块。

例如,对于32x32x3输入图像,我希望我的网络以4像素的空间跨度拍摄图像的16x16x3个色块,并将每个色块与其他色块分开处理。结果是一个25x10张量,平均为整个网络的1x10最终分类。

我当前的实现包括使用tf.extract_image_patches创建单独的补丁,然后再通过内部网络传递,但结果非常慢。

有没有办法将整个内部网络定义为一种操作,然后我在图像上滑动,就像在单个卷积层使用过滤器一样?

批量大小为100的当前实施:

def model(data, k_rate=1.0):
    # Patch extraction:
    data_patches = tf.extract_image_patches(data,[1,NiN_size,NiN_size,1],[1,NiN_stride,NiN_stride,1],[1, 1, 1, 1], 'VALID')
    NiN_data = tf.reshape(data_patches, [-1, NiN_size, NiN_size, 3])
    # Convolutional layer 1:
    conv_1 = tf.nn.conv2d(NiN_data, w1,
                          strides=[1, 1, 1, 1],
                          padding='SAME')
    relu_1 = tf.nn.relu(conv_1 + b1)
    .
    .
    .
    .
    # Fully-connected layer 5:
    local_score = tf.matmul(drop_out, w5) + b5 # -> (2500,10)
    reshape = tf.reshape(local_score, [batch_size, -1, num_labels]) # -> (100,25,10)
    local_ptach_mean =  tf.reduce_mean(reshape,1) # -> (100,10)
    return local_ptach_mean
# Training computation:   
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits( labels=labels, logits=model(dataset, k_rate))

0 个答案:

没有答案