卷积神经网络中的一种常见做法是在推理过程中对给定图像进行过采样,
即从同一图像的不同变换(最常见的 - 不同的作物和镜像)创建批处理,通过网络传输整个批次并在结果上平均(或另一种减少函数)以获得单个预测(caffe example),
如何在张量流中实现这种方法?
答案 0 :(得分:0)
您可以查看TF cnn tutorial。特别是,函数distorted_inputs执行图像预处理步骤。
简而言之,tf.image
包中有一些TF函数可以帮助扭曲图像。您可以使用它们或常规numpy函数为输出创建额外的维度,您可以对其进行平均结果:
在:
input_place = tf.placeholder(tf.float32, [None, 256, 256, 3])
prediction = some_model(input_place) # size: [None]
sess.run(prediction, feed_dict={input_place: batch_of_images})
后:
input_place = tf.placeholder(tf.float32, [None, NUM_OF_DISTORTIONS, 256, 256, 3])
prediction = some_model(input_place) # make sure it is of size [None, NUM_DISTORTIONS]
new_prediction = tf.reduce_mean(prediction, axis=1)
new_batch = np.zeros(batch_size, NUM_OF_DISTORTIONS, 256, 256, 3)
for i in xrange(len(batch_of_images)):
for f in xrange(len(distortion_functions)):
new_batch[i, f, :, :, :] = distortion_functions[f](batch_of_images[i])
sess.run(new_prediction, feed_dict={input_place: new_batch})
答案 1 :(得分:0)
看看TF's image-related functions。您可以在测试时将这些转换应用于某个输入图像,并将它们全部堆叠在一起以进行批处理。
我想你也可以使用OpenCV或其他一些图像处理工具来做到这一点。我认为没有必要在计算图中做到这一点。您可以事先创建批次,并在{
"stats": [
{
"name": "D",
"sold": 68,
"percentage": "35.98%"
},
{
"name": "E",
"sold": 6,
"percentage": "3.17%"
},
{
"name": "F",
"sold": 52,
"percentage": "27.51%"
}
]
}
中传递。