请问如何在全卷积神经网络在训练不同尺寸的样本?

请问一下各位,在训练全卷积神经网络时,我的样本的尺寸不一样,怎样才能不resize训练样本的情况下,进行训练?或者说,tensorflow支持训练动态的shape吗?
之前使用tf.placeholder,没有指明样本大小,但在feed样本数据的时候,出现:ValueError:setting an array element with a sequence.照着该文章 https://blog.csdn.net/liuchonge/article/details/77854689 说的办法进行修改,还是没解决问题。
请问各位,tensorflow能否支持训练动态的shape?希望能给出一些参考资料。


提问人 leizerliu,发表于 2018-5-13 13:07:30

yunhai_luo:
之前@Googler的帖子讨论过不同尺寸图片训练的问题,也提到过至少单张训练是可以的。不知道楼主是什么情况,是否方便详细说说或者分享一些示例代码?不同尺寸图片单张训练的假想代码:

import numpy as np
import tensorflow as tf

x = tf.placeholder(tf.float32, shape=[None, None, None, 1])
y_ = tf.placeholder(tf.float32, shape=[None, None, None, 3])

y = tf.layers.conv2d(x, 8, [3, 3], padding='same', activation=tf.nn.relu)
y = tf.layers.conv2d(y, 16, [3, 3], padding='same', activation=tf.nn.relu)
predict = tf.layers.conv2d(y, 3, [3, 3], padding='same', activation=tf.nn.relu)
loss = tf.losses.mean_squared_error(labels=y_, predictions=predict)

widths = np.random.randint(3, 1024, size=10)
heights = np.random.randint(3, 768, size=10)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for w, h in zip(widths, heights):
        input_x = np.random.rand(1, w, h, 1) * 255
        output = np.random.rand(1, w, h, 3) * 255
        l = sess.run(loss, feed_dict={x: input_x, y_: output})
        print('Loss {} for a {}x{} image'.format(l, w, h))

leizerliu:

感谢你提供的链接,不过,实现任意大小的单张图片的训练,我不知该怎么去实现。。。
我的理解就是全卷积数据网络对输入输出的大小没要求,在训练好模型之后,可以实现对任意尺寸大小的数据进行预测。但是,在训练模型的时候,我不清楚该怎么实现:在不改变输入数据大小的情况下进行训练。如果不用对数据进行固定大小的处理,这样就可以简化了一些步骤。

yunhai_luo:

呃,我不是很明白你所谓的“不清楚该怎么实现”具体是指什么,不好意思。假设你的训练集里的每张图片都是大小不同的,那你就一张一张放进模型训练就好了,反正你模型中全是卷积层,没啥尺寸要求。比如我这个例子,虽然很傻,但是w和h都是随机的,每张都不同,一张张放进去算loss都没啥问题的。楼主不方便给代码没关系,但估计得请楼主能再多给些细节。

leizerliu:

你说的整个过程我明白,可能是我的实现有问题,接下来再好好来想想。谢谢你!等我接下来有时间我来整理一下,发个帖子。

Googler本人来回答此问题。
本人目前只能做到单张图片的训练,原理大概是使用Queue队列将图片单张输入到网络中训练。
如果您有更好方法,欢迎交流。


Googler,发表于 2018-5-15 14:26:08

应该只要报证不同的图片在模型中不会出错(比如shape不匹配等问题)应该就可以了。


重庆不热,发表于 2018-7-3 16:40:04

一张一张放进去训练就好了,不影响数据的情况下,也可以做resize、clip的操作把一个批次的图片做到相同尺寸。


lytensor,发表于 2018-7-3 17:00:48

我们目前训练的OCR识别项目都是同一尺寸的,感觉这个问题有点难度,保持关注。


tensorfyx,发表于 2018-7-3 17:40:34

搞成同样尺寸的就可以啊,我是这样搞得。。。


ytcmbjx,发表于 2018-7-3 18:53:12