ultralytics训练RT-DETR踩坑记录----yolo val/predict指令执行错误

问题:

在使用指令

yolo detect train model=XXX data=XXX

训练U版rtdetr时,博主发现训练完成后进行验证时,可以正常print各项指标(P、R、map)

ultralytics训练RT-DETR踩坑记录----yolo val/predict指令执行错误_第1张图片

然而,在使用指令

yolo detect val model=XXX data=XXX

进行验证时却出现指标全部为0的问题
 

本菜鸡摸索了好久终于找到了解决方法:

解决步骤:

1、将/ultralytics/models/rtdetr/__init__.py进行如下修改:

# Ultralytics YOLO , AGPL-3.0 license

from .model import RTDETR
from .predict import RTDETRPredictor
from .val import RTDETRValidator
from .train import RTDETRTrainer

__all__ = 'RTDETRPredictor', 'RTDETRValidator', 'RTDETR', 'RTDETRTrainer'

2、在/ultralytics/models/yolo/model.py文件中进行如下修改:

# Ultralytics YOLO , AGPL-3.0 license

from ultralytics.engine.model import Model
from ultralytics.models import yolo, rtdetr
from ultralytics.nn.tasks import ClassificationModel, DetectionModel, OBBModel, PoseModel, SegmentationModel


class YOLO(Model):
    """YOLO (You Only Look Once) object detection model."""

    @property
    def task_map(self):
        """Map head to model, trainer, validator, and predictor classes."""
        return {
            'classify': {
                'model': ClassificationModel,
                'trainer': yolo.classify.ClassificationTrainer,
                'validator': yolo.classify.ClassificationValidator,
                'predictor': yolo.classify.ClassificationPredictor, },
################修改validator&predictor######################################
             'detect': {
                 'model': DetectionModel,
                 'trainer': yolo.detect.DetectionTrainer,
                 'validator': rtdetr.RTDETRValidator,
                 'predictor': rtdetr.RTDETRPredictor, },
################修改validator&predictor######################################
            'segment': {
                'model': SegmentationModel,
                'trainer': yolo.segment.SegmentationTrainer,
                'validator': yolo.segment.SegmentationValidator,
                'predictor': yolo.segment.SegmentationPredictor, },
            'pose': {
                'model': PoseModel,
                'trainer': yolo.pose.PoseTrainer,
                'validator': yolo.pose.PoseValidator,
                'predictor': yolo.pose.PosePredictor, },
            'obb': {
                'model': OBBModel,
                'trainer': yolo.obb.OBBTrainer,
                'validator': yolo.obb.OBBValidator,
                'predictor': yolo.obb.OBBPredictor, }, }

修改完成后再次使用yolo val指令进行验证:

 ultralytics训练RT-DETR踩坑记录----yolo val/predict指令执行错误_第2张图片
成功解决!(不过好像有点误差。。。)

总结:

问题的原因是,修改之前ulralytics默认使用的是yolo的相关后处理方法,修改后才是正确的rtdetr的后处理。

你可能感兴趣的:(rtdetr踩坑,人工智能,深度学习)