写在前面
Hello,小伙伴们,本系列课,我们将学习使用YOLOv11算法,在本地电脑实现模型训练与部署。
什么是目标检测?
目标检测是计算机视觉中的一项核心任务,它不仅能识别图像或视频中的物体类别,还能精确定位它们的位置。与简单的图像分类不同,目标检测会输出一组边界框(Bounding Box),每个框都包含以下信息:
- 物体类别标签(如"人"、"车"、"狗"等)
- 置信度分数(表示模型对识别结果的把握程度)
- 物体的精确位置坐标
这种技术非常适合需要了解场景中有哪些物体以及它们在哪里的应用场景,比如自动驾驶、视频监控、智能零售等。
YOLO11模型家族
Ultralytics推出的YOLO11系列是目前最先进的目标检测模型之一,提供了多个不同规模的预训练模型:
| 模型 | 分辨率 | mAPval 50-95 | 参数量 | 适用场景 |
|---|---|---|---|---|
| YOLO11n | 640 | 39.5 | 2.6M | 移动端/嵌入式设备 |
| YOLO11s | 640 | 47.0 | 9.4M | 平衡速度与精度 |
| YOLO11m | 640 | 51.5 | 20.1M | 常规服务器应用 |
| YOLO11l | 640 | 53.4 | 25.3M | 高性能需求场景 |
| YOLO11x | 640 | 54.7 | 56.9M | 最高精度要求 |
这些模型都在COCO数据集上进行了预训练,开箱即用,同时也支持自定义数据集的微调。
快速上手YOLO11
1. 安装环境
pip install ultralytics
2. 使用预训练模型进行预测
from ultralytics import YOLO
# 加载官方模型
model = YOLO("yolo11n.pt")
# 进行预测
results = model("https://ultralytics.com/images/bus.jpg")
# 解析结果
for result in results:
boxes = result.boxes.xyxy # 获取边界框坐标
classes = result.boxes.cls # 获取类别ID
confidences = result.boxes.conf # 获取置信度
# 打印检测到的物体信息
for box, cls, conf in zip(boxes, classes, confidences):
print(f"检测到 {result.names[int(cls)]},置信度 {conf:.2f},位置 {box.tolist()}")
3. 训练自定义模型
准备数据集后,只需几行代码即可开始训练:
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo11s.pt") # 以预训练模型为起点
# 开始训练
results = model.train(
data="my_dataset.yaml", # 数据集配置文件
epochs=100, # 训练轮次
imgsz=640, # 图像大小
batch=16, # 批次大小
device=0 # 使用GPU 0
)
高级应用技巧
模型验证
训练完成后,评估模型性能至关重要:
metrics = model.val()
print(f"mAP50-95: {metrics.box.map:.2f}")
print(f"mAP50: {metrics.box.map50:.2f}")
模型导出
YOLO11支持导出为多种格式,满足了不同部署需求:
model.export(format="onnx") # 导出为ONNX格式
# 支持格式包括:TensorRT, CoreML, OpenVINO等
实际案例
- 智能零售:实时统计货架商品数量和位置
- 工业质检:检测产品表面缺陷
- 交通监控:统计车流量和违章行为
- 医疗影像:定位病灶区域
- 农业应用:作物生长监测和病虫害识别
常见问题解答
Q:如何提高小物体检测精度?
A:可以尝试增大输入分辨率(如1280x1280),使用更深的模型(如YOLO11x),或在数据集中增加小物体样本。
Q:模型推理速度慢怎么办?
A:可以尝试以下方法:
- 使用更小的模型(如YOLO11n)
- 降低输入分辨率
- 启用TensorRT加速
- 使用半精度(FP16)推理
Q:如何处理类别不平衡问题?
A:可以在数据配置文件中设置类别权重,或使用过采样/欠采样技术。
结语
YOLO11作为目标检测领域的尖端技术,以其卓越的性能和易用性赢得了广泛认可。无论是研究还是工业应用,它都能提供强大的支持。
想了解更多实战案例和技术细节?欢迎关注我,后续将带来更多深度解析!