YOLOv9训练教程,并解决部分报错问题,必看❗❗❗

本文指导读者正确配置YOLOv9模型,包括使用YAML文件、注意中文字符和表情符号对编码的影响,以及train.py与train_dual.py、train_triple.py之间的区别和使用场景。作者提供了关于Silence模块和编码问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🥑 Welcome to Aedream同学 's blog! 🥑



✨✨✨✨立志真正解决大家问题,只写精品博客文章,感谢关注,共同进步✨✨✨✨


前言

YOLOv9提出后部分博主发布了训练教程,但真的质量堪忧,甚至train.py, train_dual.py or train_triple.py该使用哪个都不对,因此报错❗❗。

所以制作本期教程以供大家参考,如有错误欢迎指正交流🤝🤝

基本操作

代码链接:👿 https://github.com/WongKinYiu/yolov9

  1. 配置环境
  2. 下载代码
  3. 解压,如果训练models/detect/yolov9-c.yaml,配置train_dual.py。

在这里插入图片描述

YAML文件解析

部分人疑惑yolov9-c.yaml中的Silence是什么

根据models/common.py

class Silence(nn.Module):
    def __init__(self):
        super(Silence, self).__init__()
    def forward(self, x):    
        return x

Silence 就是无操作,输入x,输出还是x

主要是为了在后续调用原输入


注意事项❗❗❗

‘gbk’ codec can’t decode byte 0x80 in position 238: illegal multibyte sequence

检测数据集配置文件的yaml文件中是否存在中文或表情符号等,将其删除。


train.py, train_dual.py or train_triple.py

train.py tran_dual.py train_triple.py The relationship and difference between the three · Issue #1 · WongKinYiu/yolov9 (github.com)

在这里插入图片描述
提供作者的原回复做参考。

  1. train_dual:1 个辅助分支 + 1 个主分支。
  2. Triple_branch:两个辅助分支 + 一个主分支

我们提供这些代码来展示如何扩展辅助分支进行训练。 大家可以按照规则进行相关研究。 例如,我们还扩展了train_multiple来实现类似于Co-DETR的训练策略。

所以理论上可根据train_dual.py和 train_triple.py自己研究n个辅助分支 + 一个主分支如何训练。

AttributeError: ‘list’ object has no attribute ‘view’

使用train.py训练yolov9-c.yaml就会报错

AttributeError: ‘list’ object has no attribute ‘view’ · Issue #22 · WongKinYiu/yolov9 (github.com)

问题描述:

In loss_tal.py: pred_distri, pred_scores = torch.cat([xi.view(feats[0].shape[0], self.no, -1) for xi in feats], 2).split(  
(self.reg_max * 4, self.nc), 1)  
The error is as follows:  
AttributeError: 'list' object has no attribute 'view'

作者回复:

YOLOv9 models should be trained with train_dual.py

图片

### 关于 `train_dual_custom` 的实现 在机器学习领域,尤其是涉及支持向量机 (SVM) 或其他优化算法时,`dual` 方法是一个常见的概念。它指的是通过拉格朗日乘子法将原问题转化为对偶形式来求解。对于 `train_dual_custom` 这样的函数名,可以推测其目的是自定义训练过程中的对偶方法。 以下是基于 SVM 对偶方法的一个简单 Python 实现示例: #### 使用 Scikit-Learn 和 NumPy 的自定义 Dual 训练逻辑 ```python import numpy as np from sklearn.svm import SVC from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split def train_dual_custom(X, y, C=1.0, kernel='rbf', gamma='scale'): """ 自定义双目标训练函数。 参数: X: 特征矩阵 y: 标签数组 C: 正则化参数 kernel: 核函数类型 ('linear', 'poly', 'rbf' 等) gamma: RBF核的gamma值 返回: 受训模型对象 """ model = SVC(kernel=kernel, C=C, gamma=gamma, dual=True) # 设置 dual=True 表明使用对偶方法[^1] model.fit(X, y) return model # 数据生成与分割 X, y = make_classification(n_samples=100, n_features=20, random_state=42) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 调用自定义训练函数 model = train_dual_custom(X_train, y_train, C=1.0, kernel='linear') print(f"模型得分: {model.score(X_test, y_test)}") ``` 上述代码展示了如何利用 Scikit-Learn 中的 `SVC` 类构建一个简单的对偶方法训练器,允许用户指定不同的超参数(如正则化强度 `C` 和核函数)。注意,在此例子中设置了 `dual=True` 来强制启用对偶方法。 --- #### Amazon EC2 GPU 实例的选择建议 如果计划运行深度学习任务希望降低成本,则应考虑使用 AWS 提供的不同类型的 GPU 实例。根据最新技术趋势和性价比分析,G4 实例被广泛认为是最具成本效益的选择之一[^2]。尽管 P2 实例仍可提供良好的性能表现,但它缺乏某些现代特性,比如 Tensor Core 支持以及混合精度训练能力,这使得 G4 成为了更优选项。 当部署此类计算密集型工作负载时,请务评估具体需求后再做决定;例如,如果您需要极高吞吐量或特定硬件架构支持(如 NVIDIA 安培系列),那么可能还需要进一步研究更高规格的产品线。 --- ###
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aedream同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值