YoloV8 single channel train + Onnx trans

 yolov8目前不支持单通道图片训练,需要修改后才能支持。本文将介绍如何修改yolov8代码,来训练单通道图的yolov8模型,以及使用onnx进行模型转换的简单实践。

 1、修改代码


git diff ultralytics/utils/checks.py
diff --git a/ultralytics/utils/checks.py b/ultralytics/utils/checks.py
index 1ab031ba..c8fadcdc 100644
--- a/ultralytics/utils/checks.py
+++ b/ultralytics/utils/checks.py
@@ -648,7 +648,7 @@ def check_amp(model):try:from ultralytics import YOLO-        assert amp_allclose(YOLO("yolov8n.pt"), im)
+        # assert amp_allclose(YOLO("yolov8n.pt"), im)LOGGER.info(f"{prefix}checks passed ✅")except ConnectionError:LOGGER.warning(f"{prefix}checks skipped ⚠️, offline and unable to download YOLOv8n. {warning_msg}")diff --git a/ultralytics/nn/tasks.py b/ultralytics/nn/tasks.py
index 64ee7f50..c8f37677 100644
--- a/ultralytics/nn/tasks.py
+++ b/ultralytics/nn/tasks.py
@@ -263,6 +264,8 @@ class BaseModel(nn.Module):if not hasattr(self, "criterion"):self.criterion = self.init_criterion()+    # import ipdb;ipdb.set_trace()
+    batch['img'] = batch['img'][:,:1,:,:]preds = self.forward(batch["img"]) if preds is None else predsreturn self.criterion(preds, batch)diff --git a/ultralytics/nn/autobackend.py b/ultralytics/nn/autobackend.py
index 4d8c69c5..98469690 100644
--- a/ultralytics/nn/autobackend.py
+++ b/ultralytics/nn/autobackend.py
@@ -502,7 +502,7 @@ class AutoBackend(nn.Module):"""return torch.tensor(x).to(self.device) if isinstance(x, np.ndarray) else x-    def warmup(self, imgsz=(1, 3, 640, 640)):
+    def warmup(self, imgsz=(1, 1, 640, 640)):"""Warm up the model by running one forward pass with a dummy input.diff --git a/ultralytics/engine/validator.py b/ultralytics/engine/validator.py
index 41be54c1..82ed2f03 100644
--- a/ultralytics/engine/validator.py
+++ b/ultralytics/engine/validator.py
@@ -154,7 +154,8 @@ class BaseValidator:self.dataloader = self.dataloader or self.get_dataloader(self.data.get(self.args.split), self.args.batch)model.eval()
-        model.warmup(imgsz=(1 if pt else self.args.batch, 3, imgsz, imgsz))  # warmup
+        model.warmup(imgsz=(1 if pt else self.args.batch, 1, imgsz, imgsz))  # warmup gray image
+        # model.warmup(imgsz=(1 if pt else self.args.batch, 3, imgsz, imgsz))  # warmupself.run_callbacks("on_val_start")dt = (
@@ -175,6 +176,7 @@ class BaseValidator:# Inferencewith dt[1]:
+            batch["img"] = batch["img"][:,:1,:,:]preds = model(batch["img"], augment=augment)# Lossdiff --git a/ultralytics/engine/predictor.py b/ultralytics/engine/predictor.py
index e925902f..32745d6f 100644
--- a/ultralytics/engine/predictor.py
+++ b/ultralytics/engine/predictor.py
@@ -261,7 +261,8 @@ class BasePredictor:# Warmup modelif not self.done_warmup:
-        self.model.warmup(imgsz=(1 if self.model.pt or self.model.triton else self.dataset.bs, 3, *self.imgsz))
+        self.model.warmup(imgsz=(1 if self.model.pt or self.model.triton else self.dataset.bs, 1, *self.imgsz))
+        # self.model.warmup(imgsz=(1 if self.model.pt or self.model.triton else the dataset.bs, 3, *self.imgsz))        self.done_warmup = Trueself.seen, self.windows, self.batch = 0, [], None

2、修改配置文件

ultralytics/cfg/models/v8/yolov8-xxx.yaml

添加ch: 1

3、onnx模型转换

ultralytics/engine/exporter.py
修改im = torch.zeros(self.args.batch, 3, *self.imgsz).to(self.device)

改为im = torch.zeros(self.args.batch, 1, *self.imgsz).to(self.device)


4、测试pt模型


找到对应任务的ultralytics/models/yolo/classify(自己任务)/predict.py
添加:img = img[:,:1,:,:]

参考

SingleChannel Train · Issue #7526 · ultralytics/ultralytics · GitHub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1523029.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Spire.PDF for .NET【文档操作】演示:创建 PDF 文档

通过代码创建 PDF 文档具有多种优势。例如,您可以轻松合并动态内容,如用户输入、数据库记录或实时数据。基于代码的 PDF 生成允许更大的自定义和自动化,最大限度地减少创建高度定制文档时的手动干预。在本文中,您将学习如何使用Sp…

【陪诊系统-PC管理端】axios的二次封装

二次封装axios 引入axios创建axios实例,添加配置信息,这里主要设置基础url和请求超时时间给上述创建的实例添加拦截器,对请求、响应分别进行拦截 根据接口文档显示,当登录成功后,每次请求陪诊师、订单信息都需要携带t…

fastchat与autogen使用要点澄清

说明: 本文重点是想使用autogen构建智能体,并且想要通过加载本地模型来构建,以灵活使用。但是autogen重点是以API调用支持openai, mistral等大模型使用的,对于使用国内的一些模型不是那么友好方便。然后在查找方法的过程中&#x…

一篇常见第三方库之以及详细使用示例教程

作者:郭震 我们介绍了几个常用的 Python 第三方库,包括 NumPy、Pandas、Matplotlib 和 Requests.本篇将通过一些简单的示例来演示如何有效地使用这些库,以帮助小白理解它们的基本用法.通过这些案例,你可以直观感受到这些库在日常编程中的价值. NumPy NumPy 是一个强…

规控面试复盘

目录 前言 一、京东方 1、CPP和C的区别是什么? 2、讲一下的ROS的话题通信 二、Momenta(泊车部门实习面试) 1、MPC的预测时间步是多少? 2、MPC的代价函数考虑的是什么? 三、九识 1、智能指针有哪些优缺点? 优点: 缺点: 2、Protobuf的数据传输效率为什么更高…

【陪诊系统-PC管理端】动态路由

先说说这里为什么要使用动态路由? 因为前面的菜单管理功能模块中,可以创建或修改不同权限,当前登录账号可以绑定不同的权限,不同权限能访问的功能页面不同,所以使用动态路由来控制。 而登录成功后,服务器…

前端报文加密

前端加密功能 前端提供简单的AES对称加密算法,注意key 和后端网关配置相同,这里打包混淆后,相对安全。 (lun-ui\src\store\modules\user.js、base-gateway-dev.yml) 后端解密功能 使用hutool提供的工具类进行解密pub…

【无标题】docker-compose一键部署项目,haproxy容器代理多个web或java容器

# 创建脚本,可以在java环境中运行任何的jar包或者war包#!/bin/bash/usr/local/jdk/bin/java -jar /java/src/*.?ar 一、思路分析: (1)nginx 1、下载镜像,将本地的dist项目的目录挂载在容器的/usr/share/nginx/html/ …

连接型CRM+智能制造,助力医疗器械企业高质量发展

8月29日,由中国医疗器械行业协会智能制造与智慧监管分会主办,纷享销客参与协办的“数字化建设与智能制造助力医疗器械企业高质量发展”研讨会于苏州圆满落幕,国内知名医疗器械企业高层、行业专家及在医疗行业合规前沿的优秀专业人士齐聚一堂&…

【RabbitMQ】基本概念以及安装教程

1. 什么是MQ MQ( Message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是消息(message)而已.消息可以非常简单,比如只包含文本字符串,JSON等,也可以很复杂,比如内嵌对象.MQ多用于分布式系统之间进行通信 系统之间的调用通常有两种方式…

光盘安全隔离与信息单向导入系统-信刻

信刻从用户需求出发,为更多用户提供安全可靠的跨网数据单向导入/导出光盘摆渡系统解决方案,解决内外网数据交换的问题,确保数据交换过程的安全性。 公司所研发出的光盘安全隔离与信息单向导入系统依托软硬件相结合的技术,集策略摆…

mac 安装redis

官网下载指定版本的redis https://redis.io/ 目前3.2.0 是最新最稳定的 版本 这里是历史版本下载 下载指定版本 安装 1.放到自定义目录下并解压 2.打开终端,执行命令 cd redis的安装目录下 make test -- 此命令的作用是将redis源代码编译成可执行文件&#xff0c…

飞思相机存储卡格式化数据如何恢复?提供全面指南

在数字摄影时代,‌飞思相机以其卓越的成像质量和专业的性能,‌赢得了众多摄影师的青睐。‌然而,‌即使是专业的设备也难免遭遇数据丢失的困境,‌尤其是当存储卡不幸被格式化时。‌面对这一突如其来的灾难,‌许多摄影师…

JSON 格式详解

JSON 格式详解 随着互联网的发展和各种 Web 应用程序的普及,数据交换已经成为了我们日常开发中的重要环节。而在各种数据交换格式中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,以其简洁、易于阅…

基于yolov8的106种鲜花识别花朵检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的106种鲜花识别花朵检测系统是一项融合了先进深度学习技术的创新应用。该系统利用YOLOv8算法,这一目前最先进的目标检测模型之一,实现了对106种不同花卉的快速、准确识别。 YOLOv8以其速度快、准确性高和鲁棒性强的特点&#…

IP的SSL证书的申请及配置方式

随着互联网技术的发展,数据安全变得越来越重要。HTTPS协议因其提供的加密传输能力而成为现代Web通信的标准。实现HTTPS的关键组件之一就是SSL/TLS证书,它为网站提供了一层保护,确保客户端与服务器之间的数据传输是加密的。本文将指导您如何为…

xmos 相关知识--- xn文件解析

1.XN 文件解析 type 声明是device name 是名称 tile 资源声明 一个是XCore 一个是 usb 相关的物理层资源 package 对应芯片,包含两个Node 和一个link 两个node ,一个是xcore 一个是USB,每个node 都有一个id号,从0开始 xrun: C…

指针之旅(2)——const修饰词 野指针、空指针与泛型指针

目录 Part one(一) 1. const关键字 1.1 const修饰普通变量 1.1.1 const的作用 1.1.2 指针绕过const 1.2 const修饰指针变量 1.2.1 const在 * 前 1.2.2 const在 * 后 1.2.3 双重const修饰 Part two(二) 1. 野指针 * 野…

Sentence-BERT实现文本匹配【回归目标函数】

引言 上篇文章我们通过Sentence-Bert提出的分类目标函数来训练句子嵌入模型,本文同样基于Sentence-Bert的架构,但改用回归目标函数。 架构 如上图,计算两个句嵌入 u \pmb u u和 v \pmb v v​之间的余弦相似度,然后可以使用均方误…

Webpack详解与配置环境

webpack:webpack网址 1、工作原理: Webpack是一个非常强大的静态模块的打包工具。从文件入口开始,递归解析以来关系,然后将所有模块打包成一个或多个budle文件。 2、webpack核心概念: Entry:入口起点(en…