我正在做一个keras应用程序,它可以根据3D图像输入来预测一组坐标。我的体系结构如下:
img_input = keras.layers.Input((96,64,64,1))
x = keras.layers.Conv3D(32, (3, 3 ,3), activation='relu', padding='same', name='block1_conv1',trainable=True)(img_input)
x = keras.layers.Conv3D(32, (3, 3 ,3), activation='relu', padding='same', name='block1_conv2',trainable=True)(x)
x = keras.layers.MaxPooling3D((2, 2, 2), name='block1_pool')(x)
# Block 2
x = keras.layers. Conv3D(64, (3, 3 ,3), activation='relu', padding='same', name='block2_conv1',trainable=True)(x)
x = keras.layers.Conv3D(64, (3, 3 ,3), activation='relu', padding='same', name='block2_conv2',trainable=True)(x)
x = keras.layers.MaxPooling3D((2, 2 ,2), name='block2_pool')(x)
# Block 3
x = keras.layers.Conv3D(128, (3, 3 ,3), activation='relu', padding='same', name='block3_conv1',trainable=True)(x)
x = keras.layers.Conv3D(128, (3, 3 , 3), activation='relu', padding='same', name='block3_conv2',trainable=True)(x)
x = keras.layers.MaxPooling3D((2, 2 ,2), name='block3_pool')(x)
# Block 3
x = keras.layers.Conv3D(128, (3, 3 ,3), activation='relu', padding='same', name='block4_conv1',trainable=True)(x)
x = keras.layers.Conv3D(128, (3, 3 , 3), activation='relu', padding='same', name='block4_conv2',trainable=True)(x)
x = keras.layers.MaxPooling3D((2, 2 ,2), name='block4_pool')(x)
x = keras.layers.Flatten(name='flatten')(x)
x = keras.layers.Dense(4096,activation='relu',name="fc7",trainable=True)(x)
x = keras.layers.Dense(4096,activation='relu',name="fc8",trainable=True)(x)
x = keras.layers.Dense(288,activation='linear',name="fc10",trainable=True)(x)
事实是,输出并不是真正的288尺寸,它们的长度都是可变的,但是为了得到固定尺寸的输出,我将它们全部零填充了。
另一方面,我还训练了一个神经网络,该神经网络可以预测这些输出的长度,从而提供相同的3D输入,并且效果很好。
我想要的是使用第二个网络的输出来裁剪第一个网络的输出。例如,如果我的第二个网络预测值为285,则第一个网络会将输出从288裁剪为285。
有可能在喀拉拉邦吗?还是可以给我一些建议,以及如何执行此任务(预测正确长度的良好坐标)?
非常感谢您