【问题标题】:Depth Estimation using Keras使用 Keras 进行深度估计
【发布时间】:2016-09-25 09:30:37
【问题描述】:

我正在尝试设计一个卷积网络来使用 Keras 估计图像的深度。

我有 3x120x160 形状的 RGB 输入图像和 1x120x160 形状的灰度输出深度图。

我尝试使用类似 VGG 的架构,其中每一层的深度都会增长,但最后当我想设计最后一层时,我卡住了。使用密集层太昂贵了,我尝试使用上采样,但被证明效率低下。

我想使用 DeConvolution2D,但无法使用。我最终的唯一架构是这样的:

    model = Sequential()
    model.add(Convolution2D(64, 5, 5, activation='relu', input_shape=(3, 120, 160)))
    model.add(Convolution2D(64, 5, 5, activation='relu'))
    model.add(MaxPooling2D())
    model.add(Dropout(0.5))

    model.add(Convolution2D(128, 3, 3, activation='relu'))
    model.add(Convolution2D(128, 3, 3, activation='relu'))
    model.add(MaxPooling2D())
    model.add(Dropout(0.5))

    model.add(Convolution2D(256, 3, 3, activation='relu'))
    model.add(Convolution2D(256, 3, 3, activation='relu'))
    model.add(Dropout(0.5))

    model.add(Convolution2D(512, 3, 3, activation='relu'))
    model.add(Convolution2D(512, 3, 3, activation='relu'))
    model.add(Dropout(0.5))

    model.add(ZeroPadding2D())
    model.add(Deconvolution2D(512, 3, 3, (None, 512, 41, 61), subsample=(2, 2), activation='relu'))
    model.add(Deconvolution2D(512, 3, 3, (None, 512, 123, 183), subsample=(3, 3), activation='relu'))
    model.add(cropping.Cropping2D(cropping=((1, 2), (11, 12))))
    model.add(Convolution2D(1, 1, 1, activation='sigmoid', border_mode='same'))

模型摘要是这样的:

Layer (type)                     Output Shape          Param #     Connected to                     
====================================================================================================
convolution2d_1 (Convolution2D)  (None, 64, 116, 156)  4864        convolution2d_input_1[0][0]      
____________________________________________________________________________________________________
convolution2d_2 (Convolution2D)  (None, 64, 112, 152)  102464      convolution2d_1[0][0]            
____________________________________________________________________________________________________
maxpooling2d_1 (MaxPooling2D)    (None, 64, 56, 76)    0           convolution2d_2[0][0]            
____________________________________________________________________________________________________
dropout_1 (Dropout)              (None, 64, 56, 76)    0           maxpooling2d_1[0][0]             
____________________________________________________________________________________________________
convolution2d_3 (Convolution2D)  (None, 128, 54, 74)   73856       dropout_1[0][0]                  
____________________________________________________________________________________________________
convolution2d_4 (Convolution2D)  (None, 128, 52, 72)   147584      convolution2d_3[0][0]            
____________________________________________________________________________________________________
maxpooling2d_2 (MaxPooling2D)    (None, 128, 26, 36)   0           convolution2d_4[0][0]            
____________________________________________________________________________________________________
dropout_2 (Dropout)              (None, 128, 26, 36)   0           maxpooling2d_2[0][0]             
____________________________________________________________________________________________________
convolution2d_5 (Convolution2D)  (None, 256, 24, 34)   295168      dropout_2[0][0]                  
____________________________________________________________________________________________________
convolution2d_6 (Convolution2D)  (None, 256, 22, 32)   590080      convolution2d_5[0][0]            
____________________________________________________________________________________________________
dropout_3 (Dropout)              (None, 256, 22, 32)   0           convolution2d_6[0][0]            
____________________________________________________________________________________________________
convolution2d_7 (Convolution2D)  (None, 512, 20, 30)   1180160     dropout_3[0][0]                  
____________________________________________________________________________________________________
convolution2d_8 (Convolution2D)  (None, 512, 18, 28)   2359808     convolution2d_7[0][0]            
____________________________________________________________________________________________________
dropout_4 (Dropout)              (None, 512, 18, 28)   0           convolution2d_8[0][0]            
____________________________________________________________________________________________________
zeropadding2d_1 (ZeroPadding2D)  (None, 512, 20, 30)   0           dropout_4[0][0]                  
____________________________________________________________________________________________________
deconvolution2d_1 (Deconvolution2(None, 512, 41, 61)   2359808     zeropadding2d_1[0][0]            
____________________________________________________________________________________________________
deconvolution2d_2 (Deconvolution2(None, 512, 123, 183) 2359808     deconvolution2d_1[0][0]          
____________________________________________________________________________________________________
cropping2d_1 (Cropping2D)        (None, 512, 120, 160) 0           deconvolution2d_2[0][0]          
____________________________________________________________________________________________________
convolution2d_9 (Convolution2D)  (None, 1, 120, 160)   513         cropping2d_1[0][0]               
====================================================================================================
Total params: 9474113

我无法将 Deconvolution2D 层的大小从 512 减少,因为这样做会导致与形状相关的错误,而且似乎我必须添加与前一层中滤波器数量一样多的 Deconvolution2D 层。 我还必须添加最终的 Convolution2D 层才能运行网络。

上述架构可以学习,但确实很慢并且(我认为)效率低下。我确定我做错了什么,设计不应该是这样的。你能帮我设计一个更好的网络吗?

我也尝试像this repository 中提到的那样建立一个网络,但似乎 Keras 不像这个 Lasagne 示例那样工作。如果有人能告诉我如何在 Keras 中设计类似这个网络的东西,我将不胜感激。它的架构是这样的:

谢谢

【问题讨论】:

    标签: machine-learning neural-network conv-neural-network keras lasagne


    【解决方案1】:

    我建议U-Net(见图1)。在 U-Net 的前半部分,空间分辨率会随着通道数量的增加而降低(就像你提到的 VGG)。在下半场,情况正好相反,(通道数量减少,分辨率增加)。不同层之间的“跳过”连接允许网络有效地产生高分辨率输出。

    您应该能够找到合适的 Keras 实现(可能是this one)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 2020-12-01
      • 2013-11-26
      • 2022-11-21
      • 2018-10-19
      • 2013-10-13
      • 2018-10-25
      相关资源
      最近更新 更多