第一步:环境搭建
建议创建一个干净的虚拟环境,以避免依赖冲突
# 创建并激活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进行改进,以适应更大的切片尺寸(减少切片数量)或使用模型量化技术来提速
313

被折叠的 条评论
为什么被折叠?



