如何使用 TensorFlow 给不同尺寸图片打包成 Batch

RT.
想做 arbitrary size 的训练,发现传给 tf.train.shuffle_batch 函数的参数必须是一样尺寸。
有人可以解决这个问题吗?要求不允许使用改变图片纵横比。


发帖人 Googler,发帖时间 2018-4-16 16:26:37

不同尺寸的照片是同一个图片横纵比吗?


舟 3332,发表于 2018-4-16 20:20:10

自然不是,纵横比不同,但可以允许按比例 resize


Googler(提问者),发表于 2018-4-16 20:23

神经网络输入层的 shape 必须固定下来比如(None, 256, 256, 3),否则后面层的计算没法完成。对于不同图像大小,通常建议用 tf.data 先 resize 成固定的大小,https://tensorflow.google.cn/versions/r1.8/programmers_guide/datasets


TianLin,发表于 2018-4-17 09:48:11

我自己的实现中,目前单张训练可以做到 arbitrary size 了。但是 mini batch 的方法还是不行。
有些任务就是有不可改变图片纵横比的需求,所以不知道有没有好的方法,于此和大家探讨一下。


Googler(提问者),发表于 2018-4-17 09:51:43

tf.data.Dataset 有 map 函数,对于每个 image 可以单独 resize,则可以实现。


TianLin,发表于 2018-4-17 11:26:17

我倒是觉得很多图像任务中,是需要保持图片原有的纵横比,所以轻易不会去 resize 破坏其纵横比。
不知道 TF 能不能在未来某个时刻加入对不同尺寸图片打包成 batch 的支持。


Googler(提问者),发表于 2018-4-26 12:02:11

=,=有人解决这问题了么,我也要开始做图像的简单网络模型了,数据的导入很关键。


M 丶 Sulayman,发表于 2018-4-28 12:09:38

请问楼主能用不同尺寸图片输入的模型是什么样的?个人对这个模型更感兴趣,因为我的第一感觉是你的模型在某一层总是需要固定输入尺寸,否则你的权重和偏移难道也是无限的吗?

如果你不想丢失或者扭曲信息,是否考虑过填充?简言之,如果你的输入有一个可知的最大值,那么以那个最大值为输入尺寸,凡是不满足的都做填充。tf.train.batch 中有 dynamic_pad 可以实现这一功能。


yunhai_luo,发表于 2018-4-28 16:10:32

Googler:

单张训练 不用 tf.train.batch 函数 填充也考虑过但不想用哈哈

yunhai_luo: 回复 Googler :

刚看到一个 SO 的回答,感觉很相关,供参考:https://stackoverflow.com/questions/41907598/how-to-train-images-when-they-have-different-size#answer-41916066

李昂:

百度"SPP-net",spatial pyramid pooling layer 可以解决


Googler(提问者)& yunhai_luo & 李昂

tensorflow 中好像没有现成的方法,我用了 tensorpack 的 API 来代替 tf.train.batch ,tensorpack 中有个 BatchDataByShape,同一批次的数据具有相同的 Shape。不同的数据可以用 RandomResize,随机缩放高宽。这样就可以让模型在 train 时可以接受不同 size 的图片。
可以参考 https://github.com/ppwwyyxx/tensorpack/blob/master/examples/HED/hed.py 中的 get_data ()


uyerp,发表于 2018-5-10 10:46:49

或许你可以自己用 python 或者对应语言的多线程来实现把不同尺寸的图片组合到一个 batch 里。


重庆不热,发表于 2018-7-3 16:42:56

我觉得你可以考虑手写 shuffle,,,要不然怕是不行,tf 的这些都是基于定长度的


ViolinSolo,发表于 2018-7-3 20:35:57

size 不固定的话,需要先固定 shape,这个是前提。当然,如果改进代码适应读取图片的 size 然后计算的话也可以。


neverchange,发表于 2018-7-3 23:31:58

求助打包 batch 训练组这块有没有专题教程啊


jka,发表于 2018-7-4 08:40:26

楼主是想用金字塔池池化把不同 shape 的图片调整成统一 size 吧?现在关键的问题是金字塔池化之前有卷积的操作,没有 bacth 就没法用 tensorflow.nn.conv2d,很难受。所以楼主找到办法了吗?我可能要先用金字塔池化了,之后再卷积,不然没法搞哦 /


hideinrussia,发表于 2019-1-23 20:31:46