Python Keras CNN没有学会预测边界框

Python Keras CNN没有学会预测边界框,python,tensorflow,neural-network,deep-learning,keras,Python,Tensorflow,Neural Network,Deep Learning,Keras,我在keras的一家CNN工作,获取照片中模特穿的裙子的边框。据我所知,每张照片(确切地说)都包含一条我假设的模特穿的裙子,我可以在一个经过预训练的模特(我尝试了VGG16和ResNet)上添加一些致密层,然后训练它获得4个输出。 然而,损失函数在每个历元(对于训练和验证数据)都几乎保持不变,当我想用模型预测边界框时,我得到的框几乎是[0,0,0,0](这意味着这些值非常小,如1e-7)。 我已经准备好尝试更改优化器、学习率等,但似乎没有任何效果 我怀疑我的simlpy方法是简单和幼稚的,我必须

我在keras的一家CNN工作,获取照片中模特穿的裙子的边框。据我所知,每张照片(确切地说)都包含一条我假设的模特穿的裙子,我可以在一个经过预训练的模特(我尝试了VGG16和ResNet)上添加一些致密层,然后训练它获得4个输出。 然而,损失函数在每个历元(对于训练和验证数据)都几乎保持不变,当我想用模型预测边界框时,我得到的框几乎是[0,0,0,0](这意味着这些值非常小,如1e-7)。 我已经准备好尝试更改优化器、学习率等,但似乎没有任何效果

我怀疑我的simlpy方法是简单和幼稚的,我必须研究更复杂的本地化方法,如更快的RCNN,但这种复杂性不仅超出了我的能力(据你所见),而且也超出了网络的目的。所以我希望你能帮我

提前谢谢

代码: 设置模型:

def getModel_Segmentation(input_shape=(300,300,3),border_mode='same',activation='relu',retrain_layers=0,neurons_dense_layer=4096):

    model=VGG16(weights="imagenet",include_top=False,input_shape=input_shape)
    for i in range(len(model.layers) - retrain_layers):
        model.layers[i].trainable=False

    x=Flatten()(model.output)
    x = Dense(64, activation='relu', name='fc1')(x)
    x = Dense(64, activation='relu', name='fc2')(x)
    x = Activation(activation)(x)
    x = BatchNormalization()(x)
    x = Dropout(0.25)(x)
    x = Dense(4, activation='softmax', name='predictions')(x)

    return Model([model.input],x)
编辑它:

def l2loss(y_true,y_pred):
    return tf.sqrt(tf.reduce_sum(tf.square(tf.subtract(y_true,y_pred))))

model=generateModel_Segementation()
model.compile(loss=l2loss,optimizer=SGD(),metrics=['accuracy'])
获得数据后,我认为我错了,如果我是: (我有包含picturename.jpg;x0;y0;x1;y1的csv文件,我知道图片保存的位置)

培训模型:

model.fit_generator(traingen.flow(x=np.array(x_pictures), 
    y=np.array(x_segments),
    batch_size=64),validation_data=valgen.flow(x=np.array(y_pictures), 
    y=np.array(y_segments)),epochs=50,steps_per_epoch=50,verbose=1)

边界框坐标的范围是多少?Softmax看起来不适合这个用途。我也考虑过。我已经尝试过将所有坐标除以1000,使它们介于0和1之间,但都不起作用。它对softmax不起作用,在输出时可能对sigmoid起作用。在任何情况下,如何规范化长方体坐标都很重要。好的,那么我将尝试sig。重新缩放坐标是否足够正常化?非常感谢!!!现在好多了
model.fit_generator(traingen.flow(x=np.array(x_pictures), 
    y=np.array(x_segments),
    batch_size=64),validation_data=valgen.flow(x=np.array(y_pictures), 
    y=np.array(y_segments)),epochs=50,steps_per_epoch=50,verbose=1)