keras 使用vgg16模型中的decode_predictions()

bgibtngc  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(174)

我正在尝试给我的边界框附加一个概率值。我目前正在跟踪同一幅图像上的两个对象,我使用Keras函数API来传递学习vgg16模型。

vgg = VGG16(weights="imagenet", include_top=False, input_tensor=Input(shape=(224,224,3)))
    vgg.trainable = False

    def output_boundingbox_layer(name):
        flatten_out = Flatten()(vgg.output)
    
        bbox = Dense(512,activation="relu")(flatten_out)
        bbox = Dense(256,activation="relu")(bbox)
        bbox = Dense(128,activation="relu")(bbox)
        bbox = Dense(64,activation="relu")(bbox)
        bbox = Dense(32,activation="relu")(bbox)
        #Dense layer with 4 nodes because there are 4 coordinates to consider,
        #xmin, ymin, xmax, ymax --> the bounding box
        bbox = Dense(4, activation="sigmoid", name = name)(bbox)
        return bbox

model=Model(inputs = vgg.input, outputs=(bboxlayer, bboxlayer_2)
model.compile(loss=losses, optimizer=Adam(), metrics=["accuracy"], loss_weights=lossWeights)

    history = model.fit(
        train_images,
        trainTargets,
        validation_data=(
            test_images,
            testTargets
            ),
        batch_size=32,
        epochs=100,
        verbose=1
        )

我没有包括我定义损失函数和损失权重以及分配各种test_train_split的剩余字典()数组来保持这个问题相对简短。我在测试视频上逐帧进行预测,从定性观察来看,它做得相当不错,但是我想附加一个概率值。我在获取这个信息时遇到了麻烦。使用decode_predictions(),我得到了以下输出:

#Prediction results 
[array([[0.4525235 , 0.20031905, 0.6131844 , 0.46470878]], dtype=float32), array([[0.4420103 , 0.09556548, 0.533233  , 0.23276633]], dtype=float32)]

#Traceback from decode_prediction()
in decode_predictions
    if len(preds.shape) != 2 or preds.shape[1] != 1000:

AttributeError: 'list' object has no attribute 'shape'

即使当我尝试将列表索引到一个数组时,我仍然会得到类似的错误。我正在考虑训练一个单独的softmax网络,但同时加载两个模型似乎太过了。

koaltpgm

koaltpgm1#

也许可以尝试堆叠您的预测,因为您有一个数组列表:

preds = tf.stack(preds) # or np.stack

相关问题