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

问题:

在使用指令

yolo detect train model=XXX data=XXX

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

然而,在使用指令

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指令进行验证:

 
成功解决!(不过好像有点误差。。。)

总结:

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

### 下载并使用RT-DETR模型的最佳权重 为了获取RT-DETR模型的最佳权重文件(`best.pt`),可以按照以下方法操作: #### 安装依赖库 首先,需要安装必要的Python包来支持RT-DETR模型的加载和训练。可以通过运行以下命令完成环境准备[^1]: ```bash !pip install -q supervision roboflow ``` #### 获取预训练权重 官方提供了RT-DETR-L模型的预训练权重下载链接,可以直接通过该地址下载模型文件[^2]: ```plaintext https://github.com/ultralytics/assets/releases/download/v8.2.0/rtdetr-l.pt ``` 此链接中的`.pt`文件即为预训练权重。 如果目标是最佳权重(`best.pt`),通常是在自定义数据集上微调后的结果保存下来的最优模型参数。如果没有特定的数据集微调过程,则上述提供的预训练权重已经是可用的最佳版本之一。 #### 使用预训练权重进行训练或推理 在项目根目录下创建`train.py`脚本,并利用Ultralytics框架加载模型以及执行训练任务[^3]。以下是代码实现示例: ```python from ultralytics import RTDETR import os if __name__ == '__main__': # 加载预训练模型 model = RTDETR(model="rtdetr-l.pt") # 开始训练 results = model.train( data="VOC.yaml", patience=0, epochs=100, device='0', batch=8, seed=42 ) ``` 对于转换到其他硬件平台的需求,例如RKNN3588芯片上的部署,可参考相关文档说明如何将PyTorch模型导出至ONNX格式再进一步转化为RKNN模型[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值