1

私は、Kerasを使用して画像の深度を推定するために畳み込みネットを設計しようとしています。Kerasを使用した深さ推定

私は3x120x160の形のRGB入力イメージを持っていて、1x120x160の形のグレースケール出力の深さマップを持っています。

私は、各レイヤーの深さが成長するVGGのようなアーキテクチャを使用しようとしましたが、最終レイヤーを設計したいときには固まってしまいます。 Denseレイヤーを使用するのは高価すぎるので、私はUpsamplingを使って試してみましたが、これは非効率的でした。

私は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 

Iの形状はそれほど結果をやって512からDeconvolution2D層のサイズを小さくすることができませんでした以前のレイヤのフィルタの数と同じくらい多くのDeconvolution2Dレイヤを追加する必要があるようです。 また、ネットワークを実行できるように、最終的なConvolution2Dレイヤーを追加する必要がありました。

上記のアーキテクチャは学習しますが、実際には遅く、(私は)非効率的です。私は間違ったことをしていると確信しており、デザインはこのようにはならない。より良いネットワークを設計するのを手伝ってもらえますか?

また、this repositoryに記載されているようなネットワークを作ろうとしましたが、このLasagneの例のようにKerasが動作しないようです。 Kerasでこのネットワークのようなものを設計する方法を私に見せてもらえると本当にありがたいです。それはだアーキテクチャは、このようなものです:

enter image description here

おかげ

答えて

1

私がお勧めしたいU-Net(図1を参照)。 U-Netの前半では、チャネルの数が増えるにつれて(VGGのように)空間分解能が低下します。後半では、逆のことが起こります(チャネル数が減り、解像度が上がります)。異なるレイヤー間の「スキップ」接続により、ネットワークは高解像度の出力を効率的に生成することができます。

適切なKerasの実装(おそらくthis one)を見つけることができるはずです。

関連する問題