Моя остаточная нейронная сеть выдает очень странную карту глубины в качестве вывода. Я не знаю, как улучшить мою модель?
Вывод, который я получаю из моей остаточной модели, - это изображение с маленькими квадратиками (изображение с очень низким разрешением), но оно должно дать мне карту глубины. Объекты на изображении теряются, и видны только эти маленькие квадраты. Я не умею импровизировать?
def mini_model (input_shape):
# Define the input as a tensor with shape input_shape
X_input = Input(input_shape)
# Zero_Padding
X = ZeroPadding2D((3,3))(X_input)
#stage_1
X = Conv2D(64,(7,7),strides = (2,2),name = 'conv1')(X)
X = BatchNormalization(axis = 3,name = 'bn_conv1')(X)
X = Activation('relu')(X)
X = MaxPooling2D((3,3),strides = (2,2))(X)
# Stage 2
X = convolutional_block(X, f = 3, filters = [64, 64, 256], stage = 2, block='a', s = 1)
X = identity_block(X, 3, [64, 64, 256], stage=2, block='b')
X = identity_block(X, 3, [64, 64, 256], stage=2, block='c')
#stage3
X = convolutional_block(X,f = 3 , filters = [128,128,512],stage = 3,block = 'a', s = 2)
X = identity_block(X,3,[128,128,512],stage = 3,block='b')
X = identity_block(X,3,[128,128,512],stage = 3 , block = 'c')
X = identity_block(X,3,[128,128,512],stage = 3 , block = 'd')
#stage 4
X = convolutional_block(X,f = 3 , filters = [256,256,1024],stage = 4,block = 'a', s = 2)
X = identity_block(X,3,[256,256,1024],stage = 4,block='b')
X = identity_block(X,3,[256,256,1024],stage = 4,block='c')
X = identity_block(X,3,[256,256,1024],stage = 4,block='d')
X = identity_block(X,3,[256,256,1024],stage = 4,block='e')
X = identity_block(X,3,[256,256,1024],stage = 4,block='f')
X = identity_block(X,3,[256,256,1024],stage = 4,block='g')
X = identity_block(X,3,[256,256,1024],stage = 4,block='h')
X = identity_block(X,3,[256,256,1024],stage = 4,block='i')
X = identity_block(X,3,[256,256,1024],stage = 4,block='j')
X = identity_block(X,3,[256,256,1024],stage = 4,block='k')
X = identity_block(X,3,[256,256,1024],stage = 4,block='l')
#stage 5
X = convolutional_block(X,f = 3 , filters = [512,512,2048],stage = 5,block = 'a', s = 2)
X = identity_block(X,3,[512,512,2048],stage = 5,block='b')
X = identity_block(X,3,[512,512,2048],stage = 5,block='c')
# AVGPOOL
X = Conv2D(3,kernel_size=(3,3), padding = 'same',use_bias = False)(X)
X = UpSampling2D(size=2)(X)
X = UpSampling2D(size=2)(X)
X = UpSampling2D(size=2)(X)
X = UpSampling2D(size=2)(X)
X = UpSampling2D(size=2)(X)
# Create model
model = Model(inputs = X_input, outputs = X)
return(model)
моя остаточная модель!! форма входного изображения = (480 640,3)
Фактические результаты: изображение состоит из маленьких квадратов, с различными уровнями серого. Ожидаемые результаты: изображение должно быть картой глубины того же размера, что и входные данные (480 640,3)
1 ответ
У вас есть пять слоев с повышением частоты в последовательности. Это именно то, что ожидается от этого. Большие квадраты 32 пикселей. (2^5 = 32)
Вероятно, вам следует прочитать о U-сетях, создать больше сверток между повышающей дискретизацией и соединениями из подсети с результатами повышающей дискретизации.