YoloV8n训练与部署

第一步:环境搭建

建议创建一个干净的虚拟环境,以避免依赖冲突

# 创建并激活Python环境 (Python 3.8及以上)
conda create -n yolo_env python=3.9
conda activate yolo_env

# 安装核心库Ultralytics
pip install ultralytics

如果需要GPU加速,请提前安装好对应版本的CUDA和PyTorch

第二步:准备数据集

YOLOv8需要的数据集格式非常明确。你需要按以下结构组织你的缺陷图片和标注文件:

dataset/
├── images/
│   ├── train/   # 训练集图片
│   └── val/     # 验证集图片
└── labels/
    ├── train/   # 训练集标注
    └── val/     # 验证集标注
  • 标注文件:每个图片对应一个同名的.txt文件。

  • 标注内容:每行代表一个目标,格式为 class_id x_center y_center width height。这些坐标值都是归一化的(0-1之间)。

  • 数据配置文件:在dataset同级目录下创建一个custom_data.yaml文件,内容如下:

path: ../dataset  # 数据集根目录
train: images/train
val: images/val

nc: 3  # 你的缺陷类别总数
names: ['划痕', '裂纹', '气泡']  # 类别名称列表

第三步:模型训练

使用Ultralytics的命令行接口yolo可以非常方便地启动训练

yolo detect train data=custom_data.yaml model=yolov8n.pt epochs=100 batch=16 imgsz=640
  • data: 你刚刚创建的custom_data.yaml文件路径。

  • model: 使用预训练的yolov8n.pt权重,这是迁移学习的关键,能加速收敛。

  • epochs: 训练轮数,可以根据损失曲线调整。

  • batch: 批处理大小,取决于你的GPU显存。

  • imgsz: 输入图片的尺寸,通常设为640。

训练完成后,最好的模型权重会保存在 runs/detect/train/weights/best.pt 中

第四步:模型推理与评估

你可以用训练好的模型在单张图片或视频流上进行测试

from ultralytics import YOLO

# 加载你训练好的模型
model = YOLO('runs/detect/train/weights/best.pt')

# 对单张图片进行推理
results = model('path/to/your/defect_image.jpg', save=True, conf=0.25)

训练过程还会在runs/detect/train/目录下生成results.png等图表,帮助你评估模型性能(如损失曲线和mAP)-

📦 第五步:模型导出与部署
为了部署,通常需要将PyTorch模型导出为更通用的格式,以便在不同的硬件和推理引擎上使用-

1. 导出为ONNX格式
ONNX是一种开放的模型格式,许多推理引擎都支持它

yolo export model=runs/detect/train/weights/best.pt format=onnx imgsz=640

如果希望进一步加速,还可以导出为TensorRT(适用于NVIDIA GPU)或OpenVINO(适用于Intel CPU)等格式。

2. 部署推理

导出后,加载模型进行推理的代码与训练时几乎一致

from ultralytics import YOLO

# 直接加载导出的ONNX或Engine模型
model = YOLO('runs/detect/train/weights/best.onnx')  # 或 best.engine

results = model('test_video.mp4', stream=True)  # 处理视频流
for r in results:
    boxes = r.boxes  # 获取检测框
    # ... 进行后续处理

大图片处理的方案

对于5120x5120像素、75MB的彩色大图,绝对不能直接缩放后输入YOLO模型。这会丢失绝大部分细节,尤其是微小缺陷。正确的做法是采用切片辅助推理(SAHI, Slicing Aided Hyper Inference)策略,这也是工业缺陷检测和高分辨率遥感图像检测领域的标准做法。

简单来说,这个思路就是把大图切成若干个小块,让YOLO分别“看”每一个小块,最后再把结果拼起来,直接使用Ultralytics官方与SAHI集成的工具,这将大大简化你的工作流程。

第一步:安装必要的库

pip install -U ultralytics sahi

第二步:在代码中实现切片推理

以下是Ultralytics官方文档提供的核心代码示例,你可以直接参考

from sahi import AutoDetectionModel
from sahi.predict import get_sliced_prediction

# 1. 加载你训练好的YOLOv8n模型
detection_model = AutoDetectionModel.from_pretrained(
    model_type="ultralytics",
    model_path="path/to/your/best.pt",  # 换成你的模型路径
    confidence_threshold=0.3,
    device="cuda:0",  # 或 "cpu"
)

# 2. 对高分辨率图片执行切片推理
result = get_sliced_prediction(
    "path/to/your/5120x5120_image.jpg",  # 你的大图路径
    detection_model,
    slice_height=640,   # 切片高度,与模型输入尺寸匹配
    slice_width=640,    # 切片宽度,与模型输入尺寸匹配
    overlap_height_ratio=0.2,  # 切片垂直重叠比例,防止目标在边缘被切断
    overlap_width_ratio=0.2,   # 切片水平重叠比例
)

# 3. 处理或导出结果
result.export_visuals(export_dir="output/", hide_conf=True)  # 可视化结果

几个关键的参数调优建议
1. 切片尺寸 (slice_height, slice_width):通常设为640x640,这是YOLOv8最常用的输入尺寸,可以保持最佳性能。如果缺陷非常大,也可以尝试更大的尺寸如800x800或1024x1024,但要注意显存消耗会增加-

2. 重叠比例 (overlap_height_ratio, overlap_width_ratio):建议设置在0.2到0.3之间。这能有效避免缺陷正好位于切片边界上而被“切碎”,导致漏检或检测不准的问题。多个切片检测到同一个目标后,SAHI会自动通过非极大值抑制(NMS)算法合并重叠的框-


3. 性能考虑:切片数量多,推理速度自然会慢。根据一篇2024年的研究,基于YOLOv8优化的切片推理框架,处理上亿像素的图片时间可以控制在0.4秒以内-
5
。实际速度取决于你的GPU性能。你也可以参考中科院长春光学精密机械与物理研究所的做法,对YOLOv8n进行改进,以适应更大的切片尺寸(减少切片数量)或使用模型量化技术来提速

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值