Https://keras.io/examples/vision/yolov8/ylov8/y)使用Yolo V8检测器带有自定义数据集 问题是,使用KERAS CV中的Yolo V8检测器,地图得分非常低(1-10%)。 在训练和推断期间,我看到非最大抑制作用似乎无法正常工作。 我看到,具有相同置信度得分的同一对象有几个重叠的边界框。 更改NMS设置并不能改善这一点。 要验证我的数据集,我尝试使用Roboflow和Ultrytics库使用我的数据集微调模型,并能够获得约71%-91.4%的地图。数据集大小为586,每个图像的每个类别为4个类别(故意避免类不平衡问题)。
这是我在训练和调整NMS后如何进行推理的一个例子:
model.prediction_decoder = keras_cv.layers.NonMaxSuppression(
bounding_box_format=BOUNDING_BOX_FORMAT,
from_logits=True, # or False
iou_threshold=0.5, # tried adjusting everything here
confidence_threshold=0.5,
max_detections=10
)
我正在训练期间使用pycococalback(以及其他):
callbacks=[
keras_cv.callbacks.PyCOCOCallback( # COCO metrics (AP/AR @ IOU)
val_ds,
bounding_box_format=BOUNDING_BOX_FORMAT,
),
keras.callbacks.TensorBoard( # training progress visualization
log_dir="training_logs"
),
keras.callbacks.ModelCheckpoint(
filepath="./model/best_model.keras",
monitor="val_AP",
mode="max", # Save when mAP is maximized
save_best_only=True, # Only keep the best model
verbose=1,
),
keras.callbacks.EarlyStopping(
patience=20, # Stop after 25 epochs of no improvement
monitor="val_AP",
mode="max", # Monitor for maximum mAP
verbose=1,
restore_best_weights=True, # Restore weights of the best epoch
),
# VisualizeDetections(), # visual validation after each epoch
],
示例我如何训练模型:
backbone = keras_cv.models.YOLOV8Backbone.from_preset(
"yolo_v8_xs_backbone_coco", load_weights=True
)
prediction_decoder = keras_cv.layers.NonMaxSuppression(
bounding_box_format=BOUNDING_BOX_FORMAT,
from_logits=False,
iou_threshold=0.5,
confidence_threshold=0.6,
max_detections=200
)
model = keras_cv.models.YOLOV8Detector(
num_classes=len(CLASS_IDS),
bounding_box_format=BOUNDING_BOX_FORMAT,
backbone=backbone,
fpn_depth=2,
prediction_decoder=prediction_decoder,
)
initial_learning_rate = 0.001
lr_schedule = keras.optimizers.schedules.CosineDecay(
initial_learning_rate,
decay_steps=1000,
alpha=0.0
)
optimizer = keras.optimizers.Adam(learning_rate=lr_schedule, global_clipnorm = 10.0)
model.compile(
classification_loss=keras.losses.CategoricalCrossentropy(),
box_loss=keras_cv.losses.CIoULoss(bounding_box_format=BOUNDING_BOX_FORMAT),
optimizer=optimizer,
)
检查以确保框架框和标签正确。
使用不同的优化器,类/损失功能等没有增强。通过roboflow,keras/tensorflow或两者进行增强。
具有和没有预先训练的重量的不同骨干。
不同的nms设置(信心,from_logits和iou)。