Теперь у меня есть несколько входных изображений с формой: (batch_size, 49, 49, 3) и группа ядер с формой: (batch_size, 29, 29, 21 * 21).
Что означает: для любого пикселя из центральных 29 * 29 входных изображений каждый пиксель имеет уникальное ядро (21 * 21) для свертки, примененного к центральным 29 * 29 входных изображений.
И, наконец,мы получим выходные изображения с формой: (batch_size, 29, 29, 3)
Я выполняю это следующим образом:
(ps batch_size будет None
в моем коде,потому что он динамический для разных входных данных)
# weights: the kernel's weights
# orig_color: the input-images
color_q = orig_color[:,0:0+21,0:0+21,:]
color_q = tf.reshape(color_q, [batch_size, 21*21, 3])
weights_q = weights[:,0,0,:]
weights_q = tf.reshape(weights[:,0,0,:], [batch_size, 21*21, 1])
weights_q = tf.concat([weights_q, weights_q, weights_q], 2)
out_color = tf.multiply(color_q, weights_q)
out_color = tf.reduce_sum(out_color, axis=1, keepdims=True)
for py in range(weights_dims[1]):
for px in range(weights_dims[2]):
if py == 0 and px == 0:
continue
color_q = orig_color[:,py:py+21,px:px+21,:]
color_q = tf.reshape(color_q, [batch_size, 21*21, 3])
weights_q = weights[:,py,px,:]
weights_q = tf.reshape(weights_q, [batch_size, 21*21, 1])
weights_q = tf.concat([weights_q, weights_q, weights_q], 2)
color_p = tf.multiply(color_q, weights_q)
color_p = tf.reduce_sum(color_p, axis=1, keepdims=True)
out_color = tf.concat([color_p, out_color], 1)
out_color = tf.reshape(out_color, [batch_size, weights_dims[1], weights_dims[2], 3])
Я не знаю, правильно это или нет, и я не знаю, как это сделать по-другому.
Спасибо и признателен за любую помощь!