我正在尝试给我的边界框附加一个概率值。我目前正在跟踪同一幅图像上的两个对象,我使用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网络,但同时加载两个模型似乎太过了。
1条答案
按热度按时间koaltpgm1#
也许可以尝试堆叠您的预测,因为您有一个数组列表: