저는 Keras를 사용하여 이미지의 깊이를 추정하기 위해 Convolutional Net을 설계하려고합니다.Keras를 사용하는 깊이 추정
나는 RGB 입력 이미지의 모양이 3x120x160이고 그레이 스케일 출력 깊이 맵의 모양이 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
나는 모양 때문에 결과를하기로 512에서 Deconvolution2D 층의 크기를 줄일 수 없었다 관련 오류가 있으며 이전 레이어의 필터 수만큼 Deconvolution2D 레이어를 추가해야하는 것 같습니다. 또한 네트워크를 실행할 수 있도록 최종 Convolution2D 레이어를 추가해야했습니다.
위의 아키텍처는 배우기는하지만 실제로는 느리고 (비관적으로) 비효율적입니다. 나는 틀린 일을하고 있고 디자인이 이렇게해서는 안된다고 확신한다. 더 나은 네트워크를 설계하도록 도와 줄 수 있습니까?
나는 또한 this repository에 언급 된 것과 같은 네트워크를 만들려고했으나 Keras는이 Lasagne 예제처럼 작동하지 않는 것으로 보입니다. Keras에서이 네트워크와 같은 것을 디자인하는 법을 누군가가 보여 주면 정말 고맙습니다. 그것의 구조는 다음과 같이이다 :
감사