易拉罐正反面识别数据集
本数据集专门用于易拉罐正反面识别任务,支持多种主流标注格式,包括 YOLO、COCO JSON 和 Pascal VOC XML。数据集平均正确识别率达到 99.5%,包含 2373 张训练图片。
可识别的标签信息
数据集包含以下两种标签类别:
- Normal:易拉罐正面
- Reverse:易拉罐反面
数据分割
数据集按照以下比例进行划分:
- 训练集:2373 张图片
- 验证集:229 张图片
- 测试集:114 张图片
预处理
所有图片统一调整为 640×640 分辨率,确保输入尺寸一致。
训练效果展示:
数据集下载
数据集支持以下格式下载:
- YOLO v26
- YOLO v12
- YOLO v11
- YOLO v9
- YOLO v8
- YOLO v7
- COCO JSON
- Pascal VOC XML
YOLO 模型训练指南
训练步骤:
- 下载数据集并解压到当前文件夹
- 克隆训练仓库:YOLOProject:基于 YOLO 的模型训练项目 - AtomGit
- 将训练脚本复制到数据集文件夹下
- 根据使用的 YOLO 版本运行对应脚本,例如使用 YOLOv8 时执行:
python train_yolov8.py
模糊图片在模型训练中的优势分析
数据集中包含的模糊图片并非数据缺陷,而是一种精心设计的数据增强策略,能为模型训练带来以下显著优势:
- 提升模型鲁棒性:现实场景中可能存在运动模糊、对焦不准或光线不足的情况。在训练集中引入模糊样本,可以迫使模型学习更本质的特征,而不是过度依赖清晰的边缘或纹理细节,从而提升模型在复杂、非理想成像条件下的识别能力。
- 模拟真实世界噪声:监控摄像头、手机等设备在低光照或快速移动时极易产生模糊。包含此类图片的数据集能让模型提前"见识"并适应这种噪声,减少在实际部署时因图像质量下降而导致的性能骤降。
- 防止模型过拟合:如果训练集全是高清、摆拍的完美图片,模型容易记住这些特定场景下的"干净"特征,而对新的、稍有模糊的图片泛化能力差。模糊图片作为一种有效的正则化手段,可以增加数据分布的多样性,防止模型过拟合到有限的清晰样本上。
总结:数据集中包含的模糊图片,与"水平翻转"、"剪切形变"、"随机遮挡"等增强操作一样,都是为了构建一个更接近真实世界复杂分布的数据环境,从而训练出更健壮、更泛化、更实用的模型。
模型验证与测试
验证测试代码
# 需要安装:pip install ultralytics from ultralytics import YOLO import cv2 ===================== 1. 加载 YOLO 模型 ===================== 自动下载预训练模型(yolov8n 最轻量快速),也可换 yolov8s/m/l/x model = YOLO("best.pt") ===================== 2. 推理配置 ===================== image_path = "326_jpg.rf.8ad64cc0668df32c4e5f59b50e899e9c.jpg" # 你的图片路径 save_result = True # 是否保存标注后的图 ===================== 3. 执行推理 ===================== results = model.predict( source=image_path, conf=0.01, # 置信度阈值(低于该值忽略) save=False, # 关闭默认保存,自定义保存 verbose=False # 关闭冗余日志 ) ===================== 4. 解析结果:目标区域 + 标注信息 ===================== print("=" * 50) print("YOLO 推理结果(目标区域 + 标注信息)") print("=" * 50) 获取图片(用于绘制框) img = cv2.imread(image_path) 遍历所有检测目标 for idx, result in enumerate(results): boxes = result.boxes # 所有检测框 for box in boxes: # ========== 提取目标区域(坐标) ========== # xyxy: 左上角 x, 左上角 y, 右下角 x, 右下角 y x1, y1, x2, y2 = box.xyxy[0].cpu().numpy() # 宽高 w = x2 - x1 h = y2 - y1 # ========== 提取标注信息 ========== cls_id = int(box.cls[0]) # 类别 ID cls_name = model.names[cls_id] # 类别名称 conf = float(box.conf[0]) # 置信度 # ========== 打印信息 ========== print(f"目标 {idx + 1}:") print(f" 标注类别:{cls_name}") print(f" 置信度:{conf:.2f}") print(f" 目标区域坐标:") print(f" 左上角 ({x1:.1f}, {y1:.1f})") print(f" 右下角 ({x2:.1f}, {y2:.1f})") print(f" 宽×高:{w:.1f} × {h:.1f}") print("-" * 30) # ========== 在图片上绘制检测框 ========== cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2) cv2.putText(img, f"{cls_name} {conf:.2f}", (int(x1), int(y1) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) ===================== 5. 保存/显示结果 ===================== if save_result: cv2.imwrite("yolo_result.jpg", img) print("✅ 标注图片已保存为:yolo_result.jpg") 显示图片(可选) cv2.imshow("YOLO Result", img) cv2.waitKey(0) cv2.destroyAllWindows()测试验证结果
识别到的标签信息
{ "predictions": [ { "x": 232, "y": 203, "width": 230, "height": 248, "confidence": 0.968, "class": "Reverse", "class_id": 1, "detection_id": "495f70cb-2244-4ac3-b4b2-41b322558135" } ] }