Свертка с динамическим ядром в Tensorflow - PullRequest
0 голосов
/ 23 октября 2018

Теперь у меня есть несколько входных изображений с формой: (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])

Я не знаю, правильно это или нет, и я не знаю, как это сделать по-другому.

Спасибо и признателен за любую помощь!

...