YoloV8训练单通道数据方法+单通道Onnx模型转换

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

添加ch: 1

2. ultralytics/utils/checks.py

注释assert amp_allclose(YOLO("yolov8n.pt"), im)
在这里插入图片描述

3. ultralytics/nn/tasks.py

添加:batch['img'] = batch['img'][:,:1,:,:]
在这里插入图片描述

4. ultralytics/nn/autobackend.py

修改:def warmup(self, imgsz=(1, 1, 640, 640)):
在这里插入图片描述

5. ultralytics/engine/validator.py

修改:model.warmup(imgsz=(1 if pt else self.args.batch, 1, imgsz, imgsz))
在这里插入图片描述
添加:batch["img"] = batch["img"][:,:1,:,:]
在这里插入图片描述

6. ultralytics/engine/predictor.py

修改:self.model.warmup(imgsz=(1 if self.model.pt or self.model.triton else self.dataset.bs, 1, *self.imgsz))
在这里插入图片描述

训练结束后如何转出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)
在这里插入图片描述

训练结束后如何测试pt模型

找到对应任务的ultralytics/models/yolo/classify(自己任务)/predict.py
添加:img = img[:,:1,:,:]
在这里插入图片描述

参考

github issue

补充,发现推理时会提示输入尺寸是三通道,在ultralytics/models/yolo/classify/predict.py中加入img = img[:,:1,:,:]即可以推理成功

在这里插入图片描述
或者更好的方法应该是ultralytics/engine/predictor.py添加
img = img[:,:1,:,:]
在这里插入图片描述

### 处理YOLOv8中的单通道图像 YOLOv8通常接受三通道(RGB)图像作为输入。然而,在某些应用场景下,可能遇到单通道灰度图像的情况。为了使YOLOv8能够处理这类图像,可以采取几种方法转换或扩展单通道图像至三通道。 #### 方法一:重复单通道创建伪彩色图像 最简单的方法之一是将单通道灰度图像复制三次以形成三个相同的通道,从而构建一个伪彩色图像。这种方法不会改变原始图像的信息,只是增加了维度使其兼容YOLOv8的要求。 ```python import cv2 import numpy as np def convert_to_rgb(image): """Convert a single-channel grayscale image to an RGB image.""" if len(image.shape) == 2: rgb_image = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR) elif len(image.shape) == 3 and image.shape[-1] == 1: rgb_image = np.repeat(image, 3, axis=-1) else: raise ValueError("Input must be either HxW or HxWx1.") return rgb_image ``` 此函数`convert_to_rgb()`接收一个二维数组形式的灰度图像或者形状为(H,W,1)的三维数组,并返回一个形状为(H,W,3)的新图像[^1]。 #### 方法二:应用颜色映射表 另一种方式是在保持亮度不变的情况下利用OpenCV的颜色查找表(LUT),这可以通过调用`cv2.applyColorMap()`实现。该操作会根据指定的色彩模式给定灰度级分配不同的颜色值,进而得到视觉上更丰富的结果。 ```python def apply_colormap(gray_img, colormap=cv2.COLORMAP_JET): """Apply a color map on the input gray-scale image""" colored_img = cv2.applyColorMap(gray_img.astype('uint8'), colormap) return colored_img ``` 上述代码片段展示了如何使用预定义好的热力图(Jet Colormap)对灰度图片着色。 一旦完成了从单通道到多通道的转换,就可以按照常规流程准备数据集并训练/推理YOLOv8模型了。值得注意的是,当采用第二种方案时,由于引入了额外的人工特征,可能会略微影响最终检测效果;因此建议先尝试第一种更为保守的方式。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值