【光电智造】手把手教你用YOLOv8训练自己的数据集以及YOLOv8的多任务使用

今日光电 2023-09-27 18:03
今日光电
       有人说,20世纪是电的世纪,21世纪是光的世纪;知光解电,再小的个体都可以被赋能。欢迎来到今日光电!


----与智者为伍 为创新赋能----

导读

 

记录直接在YOLOv8的官方仓库上直接配置和训练yolov5的全过程。

1、YOLOv8_Efficient的介绍

  • Github地址:https://github.com/isLinXu/YOLOv8_Efficient

本项目基于ultralytics及yolov5等进行综合参考,致力于让yolo系列的更加高效和易用。

目前主要做了以下的工作:

  • 参考https://docs.ultralytics.com/config/中的Configuration参数,分别针对train.py、detect.py、val.py等做了相应参数的配置对齐。
  • 结合yolov5的使用习惯以及代码结构做了兼容和优化。
  • 通过在coco数据集上在自己的机器上进行验证和计算的权重的指标参数,实验记录存放在https://github.com/isLinXu/YOLOv8_Efficient/tree/main/log.实验数据记录在:
  • 根据计算出来的结果绘制了相应的指标参数对比图,这个绘图程序也开源在https://github.com/isLinXu/model-metrics-plot中。
  • 融合其他更多网络模型结构进行集成整合和配置,正在进行中...

2、关于ultralytics的名字

为什么这个仓库取名为ultralytics,而不是yolov8,结合这个issue,笔者认为主要有以下几个方面的原因:

  • 1.因为ultralytics团队希望将这个项目设计和建成一个集合分类,检测,分割等视觉任务的集成训练推理框架,而不仅仅只是yolov8。后续可能会有更多更全的网络模型会集成进来。
  • 2.因为pypi.org上的第三方已经把yolov6,yolov7,yolov8等名字给取了,pip install名称的规则是不允许有重复名的。

issue链接:https://github.com/ultralytics/ultralytics/issues/179

3、关于自定义配置模型训练

结合上面的讨论,自然而然会有这个想法,既然ultralytics要建一个集成训练框架,那么能否直接在ultralytics仓库上直接配置和训练yolov5呢,笔者做了下面一系列的尝试:

  • 在models中加入相应的.yaml文件和yolov5沿用的模块,如common.py、experimental.py、google_utils.py
  • models/common.py中,加入了yolov5所需的网络结构
  class C3(nn.Module):  
    # CSP Bottleneck with 3 convolutions  
    def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):  # ch_in, ch_out, number, shortcut, groups, expansion  
        super().__init__()  
        c_ = int(c2 * e)  # hidden channels  
        self.cv1 = Conv(c1, c_, 1, 1)  
        self.cv2 = Conv(c1, c_, 1, 1)  
        self.cv3 = Conv(2 * c_, c2, 1)  # optional act=FReLU(c2)  
        self.m = nn.Sequential(*(Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)))  
  
    def forward(self, x):  
        return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1))  
  • 在运行时加入模块用于测试

最后一通操作下来,已经可以根据yolov5s.yaml去读取网络结构了,但是在跑的时候还是报错。

报错信息如下:

于是针对"train_args"做了一个全局搜索,发现了下面的结果:

可以看到,之前训练出来的v8的权重内包含了"train_args"的信息。顺着程序运行的流程,相应地发现了yolo/engine/model中的"__init__(self)"函数,

    def __init__(self, model='yolov8n.yaml'type="v8") -> None:  
        """  
        Initializes the YOLO object.  
  
        Args:  
            model (str, Path): model to load or create  
            type (str): Type/version of models to use. Defaults to "
v8".  
        """
  
        self.type = type  
        self.ModelClass = None  # model class  
        self.TrainerClass = None  # trainer class  
        self.ValidatorClass = None  # validator class  
        self.PredictorClass = None  # predictor class  
        self.model = None  # model object  
        self.trainer = None  # trainer object  
        self.task = None  # task type  
        self.ckpt = None  # if loaded from *.pt  
        self.ckpt_path = None  
        self.cfg = None  # if loaded from *.yaml  
        self.overrides = {}  # overrides for trainer object  
        self.init_disabled = False  # disable model initialization  
  
        # Load or create new YOLO model  
        {'.pt': self._load, '.yaml': self._new}[Path(model).suffix](model)  

读取模型和配置是在"__init__"的最后一行:

# Load or create new YOLO model  
{'.pt': self._load, '.yaml': self._new}[Path(model).suffix](model)  

def _load(self, weights: str):中实际读取模型权重的实现是self.model = attempt_load_weights(weights)。可以看到,相比于yolov5,v8读取权重的函数attempt_load_weights,多了下面这行

args = {**DEFAULT_CONFIG_DICT, **ckpt['train_args']}  # combine model and default args, preferring model args  

那么,能否直接将v5的项目中,将相应的函数补充过来给v8做适配呢,自然是可以的,当笔者将model.py的_load函数中这行代码:

self.model = attempt_load_weights(weights)  

替换为下面这行时:

self.model = attempt_load(weights)  

重新运行了一遍,发现又出现了下面的问题:

错误信息为AttributeError: 'Model' object has no attribute 'args',既然是Model定义和配置上的问题,那么就没有再往下修改的必要了,还是等官方团队的更新和修改吧,等等党永远不亏。

4、关于v8的多任务使用

根据官方的文档介绍,还有对代码的分析,目前v8项目是支持检测、分类和分割的。设定是通过"task"进行区分任务,又通过mode来设置是训练还是检测的模式,如下使用:

yolo task=detect    mode=train    model=yolov8n.yaml    epochs=1 ...  
            ...           ...           ...  
          segment        predict        yolov8n-seg.pt  
          classify        val           yolov8n-cls.pt  

4.1、训练

4.2、预测

4.3、验证

  • !关于这三个任务,YOLOv8_Efficient项目后续会分别设置相应的模块用于执行,目前正在更新中。

5、附件

5.1、YOLOv8读取权重

def attempt_load_weights(weights, device=None, inplace=True, fuse=False):  
    # Loads an ensemble of models weights=[a,b,c] or a single model weights=[a] or weights=a  
    from ultralytics.yolo.utils.downloads import attempt_download  
  
    model = Ensemble()  
    for w in weights if isinstance(weights, list) else [weights]:  
        ckpt = torch.load(attempt_download(w), map_location='cpu')  # load  
        args = {**DEFAULT_CONFIG_DICT, **ckpt['train_args']}  # combine model and default args, preferring model args  
        ckpt = (ckpt.get('ema') or ckpt['model']).to(device).float()  # FP32 model  
  
        ...  

5.2、YOLOv5读取权重

def attempt_load(weights, device=None, inplace=True, fuse=True):  
    # Loads an ensemble of models weights=[a,b,c] or a single model weights=[a] or weights=a  
    from models.yolo import Detect, Model  
  
    model = Ensemble()  
    for w in weights if isinstance(weights, list) else [weights]:  
        ckpt = torch.load(attempt_download(w), map_location='cpu')  # load  
        ckpt = (ckpt.get('ema') or ckpt['model']).to(device).float()  # FP32 model  
        ...  

参考

[1].https://github.com/isLinXu/YOLOv8_Efficient.
[2].https://github.com/isLinXu/model-metrics-plot.

来源:新机器视觉


申明:感谢原创作者的辛勤付出。本号转载的文章均会在文中注明,若遇到版权问题请联系我们处理。


 

----与智者为伍 为创新赋能----


【说明】欢迎企业和个人洽谈合作,投稿发文。欢迎联系我们
诚招运营合伙人 ,对新媒体感兴趣,对光电产业和行业感兴趣。非常有意者通过以下方式联我们!条件待遇面谈
投稿丨合作丨咨询

联系邮箱:uestcwxd@126.com

QQ:493826566


评论
  •     IPC-2581是基于ODB++标准、结合PCB行业特点而指定的PCB加工文件规范。    IPC-2581旨在替代CAM350格式,成为PCB加工行业的新的工业规范。    有一些免费软件,可以查看(不可修改)IPC-2581数据文件。这些软件典型用途是工艺校核。    1. Vu2581        出品:Downstream     
    电子知识打边炉 2025-01-22 11:12 38浏览
  • 数字隔离芯片是一种实现电气隔离功能的集成电路,在工业自动化、汽车电子、光伏储能与电力通信等领域的电气系统中发挥着至关重要的作用。其不仅可令高、低压系统之间相互独立,提高低压系统的抗干扰能力,同时还可确保高、低压系统之间的安全交互,使系统稳定工作,并避免操作者遭受来自高压系统的电击伤害。典型数字隔离芯片的简化原理图值得一提的是,数字隔离芯片历经多年发展,其应用范围已十分广泛,凡涉及到在高、低压系统之间进行信号传输的场景中基本都需要应用到此种芯片。那么,电气工程师在进行电路设计时到底该如何评估选择一
    华普微HOPERF 2025-01-20 16:50 70浏览
  •  光伏及击穿,都可视之为 复合的逆过程,但是,复合、光伏与击穿,不单是进程的方向相反,偏置状态也不一样,复合的工况,是正偏,光伏是零偏,击穿与漂移则是反偏,光伏的能源是外来的,而击穿消耗的是结区自身和电源的能量,漂移的载流子是 客席载流子,须借外延层才能引入,客席载流子 不受反偏PN结的空乏区阻碍,能漂不能漂,只取决于反偏PN结是否处于外延层的「射程」范围,而穿通的成因,则是因耗尽层的过度扩张,致使跟 端子、外延层或其他空乏区 碰触,当耗尽层融通,耐压 (反向阻断能力) 即告彻底丧失,
    MrCU204 2025-01-17 11:30 176浏览
  • 本文介绍瑞芯微开发板/主板Android配置APK默认开启性能模式方法,开启性能模式后,APK的CPU使用优先级会有所提高。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。源码修改修改源码根目录下文件device/rockchip/rk3562/package_performance.xml并添加以下内容,注意"+"号为添加内容,"com.tencent.mm"为AP
    Industio_触觉智能 2025-01-17 14:09 159浏览
  • Ubuntu20.04默认情况下为root账号自动登录,本文介绍如何取消root账号自动登录,改为通过输入账号密码登录,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持OpenHarmony5.0及Linux、Android等操作系统,接口丰富,开发评估快人一步!添加新账号1、使用adduser命令来添加新用户,用户名以industio为例,系统会提示设置密码以及其他信息,您可以根据需要填写或跳过,命令如下:root@id
    Industio_触觉智能 2025-01-17 14:14 118浏览
  • 高速先生成员--黄刚这不马上就要过年了嘛,高速先生就不打算给大家上难度了,整一篇简单但很实用的文章给大伙瞧瞧好了。相信这个标题一出来,尤其对于PCB设计工程师来说,心就立马凉了半截。他们辛辛苦苦进行PCB的过孔设计,高速先生居然说设计多大的过孔他们不关心!另外估计这时候就跳出很多“挑刺”的粉丝了哈,因为翻看很多以往的文章,高速先生都表达了过孔孔径对高速性能的影响是很大的哦!咋滴,今天居然说孔径不关心了?别,别急哈,听高速先生在这篇文章中娓娓道来。首先还是要对各位设计工程师的设计表示肯定,毕竟像我
    一博科技 2025-01-21 16:17 94浏览
  • 2024年是很平淡的一年,能保住饭碗就是万幸了,公司业绩不好,跳槽又不敢跳,还有一个原因就是老板对我们这些员工还是很好的,碍于人情也不能在公司困难时去雪上加霜。在工作其间遇到的大问题没有,小问题还是有不少,这里就举一两个来说一下。第一个就是,先看下下面的这个封装,你能猜出它的引脚间距是多少吗?这种排线座比较常规的是0.6mm间距(即排线是0.3mm间距)的,而这个规格也是我们用得最多的,所以我们按惯性思维来看的话,就会认为这个座子就是0.6mm间距的,这样往往就不会去细看规格书了,所以这次的运气
    wuliangu 2025-01-21 00:15 153浏览
  • 日前,商务部等部门办公厅印发《手机、平板、智能手表(手环)购新补贴实施方案》明确,个人消费者购买手机、平板、智能手表(手环)3类数码产品(单件销售价格不超过6000元),可享受购新补贴。每人每类可补贴1件,每件补贴比例为减去生产、流通环节及移动运营商所有优惠后最终销售价格的15%,每件最高不超过500元。目前,京东已经做好了承接手机、平板等数码产品国补优惠的落地准备工作,未来随着各省市关于手机、平板等品类的国补开启,京东将第一时间率先上线,满足消费者的换新升级需求。为保障国补的真实有效发放,基于
    华尔街科技眼 2025-01-17 10:44 221浏览
  •  万万没想到!科幻电影中的人形机器人,正在一步步走进我们人类的日常生活中来了。1月17日,乐聚将第100台全尺寸人形机器人交付北汽越野车,再次吹响了人形机器人疯狂进厂打工的号角。无独有尔,银河通用机器人作为一家成立不到两年时间的创业公司,在短短一年多时间内推出革命性的第一代产品Galbot G1,这是一款轮式、双臂、身体可折叠的人形机器人,得到了美团战投、经纬创投、IDG资本等众多投资方的认可。作为一家成立仅仅只有两年多时间的企业,智元机器人也把机器人从梦想带进了现实。2024年8月1
    刘旷 2025-01-21 11:15 261浏览
  • 嘿,咱来聊聊RISC-V MCU技术哈。 这RISC-V MCU技术呢,简单来说就是基于一个叫RISC-V的指令集架构做出的微控制器技术。RISC-V这个啊,2010年的时候,是加州大学伯克利分校的研究团队弄出来的,目的就是想搞个新的、开放的指令集架构,能跟上现代计算的需要。到了2015年,专门成立了个RISC-V基金会,让这个架构更标准,也更好地推广开了。这几年啊,这个RISC-V的生态系统发展得可快了,好多公司和机构都加入了RISC-V International,还推出了不少RISC-V
    丙丁先生 2025-01-21 12:10 103浏览
  • 现在为止,我们已经完成了Purple Pi OH主板的串口调试和部分配件的连接,接下来,让我们趁热打铁,完成剩余配件的连接!注:配件连接前请断开主板所有供电,避免敏感电路损坏!1.1 耳机接口主板有一路OTMP 标准四节耳机座J6,具备进行音频输出及录音功能,接入耳机后声音将优先从耳机输出,如下图所示:1.21.2 相机接口MIPI CSI 接口如上图所示,支持OV5648 和OV8858 摄像头模组。接入摄像头模组后,使用系统相机软件打开相机拍照和录像,如下图所示:1.3 以太网接口主板有一路
    Industio_触觉智能 2025-01-20 11:04 141浏览
  • 随着消费者对汽车驾乘体验的要求不断攀升,汽车照明系统作为确保道路安全、提升驾驶体验以及实现车辆与环境交互的重要组成,日益受到业界的高度重视。近日,2024 DVN(上海)国际汽车照明研讨会圆满落幕。作为照明与传感创新的全球领导者,艾迈斯欧司朗受邀参与主题演讲,并现场展示了其多项前沿技术。本届研讨会汇聚来自全球各地400余名汽车、照明、光源及Tier 2供应商的专业人士及专家共聚一堂。在研讨会第一环节中,艾迈斯欧司朗系统解决方案工程副总裁 Joachim Reill以深厚的专业素养,主持该环节多位
    艾迈斯欧司朗 2025-01-16 20:51 191浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦