tensorflow画像の接合


tensorflowは、画像を複数のブロックの行列接合tfを行う.concat(), tf.stack()
  • 深さ学習の過程において、ボリューム化によって得られる画像ブロックサイズは8である.×8×1024の画像ブロックは、得られた画像ブロックに対してreshapeを行って得られる[8].×8]×[32×32,そのうち[8]×8は画像ブロックの個数であり、[32]×32]は、小さな画像のサイズです.tfを通過する.concatは、小さなブロックの画像をつなぎ合わせます.-画像のボリュームを作る過程で、このような面倒なつなぎ合わせをしましたが、ブロックつなぎ合わせなので、最初はreshapeを使いましたが、結果が間違っていて、データの次元を明確にする必要があり、データの次元に問題があります.
  • import tensorflow as tf
    def tensor_concat(f, axis):
        x1 = f[0, :, :]
        for i in range(1, 8):
            x1 = tf.concat([x1, f[i, :, :]], axis=axis)
        return x1
    
    def block_to_image(f): 
        x1 = tf.reshape(f, [64, 1024])
        x1 = tf.reshape(x1, [64, 32, 32])
        m2 = tensor_concat(x1[0:8, :, :], axis=1)
        for i in range(1, 8):
            m1 = tensor_concat(x1[i*8:(i+1)*8, :, :], axis=1)
            m2 = tf.concat([m2, m1], axis=0)
        x2 = tf.reshape(m2, [256, 256, 1])
        return x2
    
    x = tf.random_normal([ 8, 8, 1024])
    with tf.Session() as sess:
        m = sess.run(x)
        m1 = sess.run(block_to_image(m))
    

    最後に、行接合と列接合により得られた画像サイズは256である.×256×1サイズの画像.
  • [batch_size,height,weight,channel]の画像を1のようにブロック接合する:深さニューラルネットワークでbatch_size個画像サイズ[256]×256×1の画像はブロックの接合を行い、1次元以上の画像に対して接合され、[batch_size,8,8,1024]から[batch_size,256,256,1]に接合される.部分的にやっている間にbatch_sizeのこの部分は本当にどのように処理するか分からないので、やはり本方法を使って、使う関数はappendとtfです.stack()
  • def tensor_concat(f, axis):
        x1 = f[0, :, :]
        for i in range(1, 8):
            x1 = tf.concat([x1, f[i, :, :]], axis=axis)
        return x1
    
    def block_to_image(f):
        x3 =[]
        for k in range(f.shape[0]):
            x = f[k, :, :, :]
            x1 = tf.reshape(x, [64, 1024])
            x1 = tf.reshape(x1, [64, 32, 32])
            m2 = tensor_concat(x1[0:8, :, :], axis=1)
            for i in range(1, 8):
                m1 = tensor_concat(x1[i*8:(i+1)*8, :, :], axis=1)
                m2 = tf.concat([m2, m1], axis=0)
            x2 = tf.reshape(m2, [256, 256, 1])
            x3.append(x2)
            x4 = tf.stack(x3)
        return x4   
    x = tf.random_normal([10, 8, 8, 1024])
    with tf.Session() as sess:
       m = sess.run(x)
       m1 = sess.run(block_to_image1(m))
    

    学習中にtensorに直接値を付けることはできません.例えば、x 2=tfと書くことはできません.reshape(m 2,[256,256,1])x 3[k,:,:,:,1]=x 2のようなコードでは、エラーが発生します:'Tensor'object does not support item assignment類似インデックス付き付与については、参照の方法は、x 3=[x 3]です.append(x 2)はこのときlistのフォーマットが得られるので、次にlistをarrayに変換し、tfを用いる.stack(x3)