保存并加载kerascv yolo模型(TypeError:'_DictWrapper'对象不可调用)

问题描述 投票:0回答:1

我使用本教程(https://keras.io/examples/vision/yolov8/)使用 keras_cv 创建了一个对象检测模型。 我想保存我的模型并加载它。

backbone = keras_cv.models.YOLOV8Backbone.from_preset("yolo_v8_xs_backbone_coco")
yolo = keras_cv.models.YOLOV8Detector(
    num_classes=len(class_mapping),
    bounding_box_format="xyxy",
    backbone=backbone,
    fpn_depth=1,
)
optimizer = tf.keras.optimizers.Adam(
    learning_rate=LEARNING_RATE,
    global_clipnorm=GLOBAL_CLIPNORM,
)

yolo.compile(
    optimizer=optimizer, classification_loss="binary_crossentropy", box_loss="ciou"
)


stopping_patience = 15
stopping_delta = 0.01
early_stopping = tf.keras.callbacks.EarlyStopping(monitor='val_loss',
                                                  patience=stopping_patience,
                                                  min_delta=stopping_delta,
                                                  verbose=1,
                                                  restore_best_weights=True)

history = yolo.fit(
    train_ds,
    validation_data=val_ds,
    epochs=EPOCH,
    callbacks=[EvaluateCOCOMetricsCallback(val_ds, "model_v2"), early_stopping],
)
# saving
yolo.save("myyolov8model.keras")
# loading
model = load_model("myyolov8model_withtraindata_v3.keras",
            custom_objects={'YOLOV8Detector': keras_cv.models.YOLOV8Detector}, compile=False)
model.compile(
        optimizer=optimizer, classification_loss="binary_crossentropy", box_loss="ciou")
visualize_detections(model, dataset=val_ds, bounding_box_format="xyxy", class_mapping=class_mapping)

错误发生在“visualize_detections”中:

 TypeError:   File "C:\Users\marlauwe\AppData\Local\anaconda3\Lib\site-packages\keras_cv\models\object_detection\yolo_v8\yolo_v8_detector.py", line 609, in decode_predictions
    return self.prediction_decoder(box_preds, scores)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: in user code:

    File "C:\Users\marlauwe\AppData\Local\anaconda3\Lib\site-packages\keras\src\engine\training.py", line 2416, in predict_function  *
        return step_function(self, iterator)
    File "C:\Users\marlauwe\AppData\Local\anaconda3\Lib\site-packages\keras\src\engine\training.py", line 2401, in step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    File "C:\Users\marlauwe\AppData\Local\anaconda3\Lib\site-packages\keras\src\engine\training.py", line 2389, in run_step  **
        outputs = model.predict_step(data)
    File "C:\Users\marlauwe\AppData\Local\anaconda3\Lib\site-packages\keras_cv\models\object_detection\yolo_v8\yolo_v8_detector.py", line 616, in predict_step
        return self.decode_predictions(outputs, args[-1])
    File "C:\Users\marlauwe\AppData\Local\anaconda3\Lib\site-packages\keras_cv\models\object_detection\yolo_v8\yolo_v8_detector.py", line 609, in decode_predictions
        return self.prediction_decoder(box_preds, scores)

    TypeError: '_DictWrapper' object is not callable

但是,如果我运行“visualize_detections”而不保存和加载,则一切正常。

我不明白保存和加载模型时会发生什么。如何调整我的代码以使脚本正常工作?

save load yolov8 keras-cv
1个回答
0
投票

你找到解决办法了吗?我在尝试将 yolov8 模型从 keras cv 保存到 tflite 时也遇到问题

© www.soinside.com 2019 - 2024. All rights reserved.