基于YOLO11的电梯电瓶车检测系统:让电梯更安全
📋 项目背景
近年来,电动车进入电梯引发的安全事故频发,给人们的生命财产安全带来严重威胁。传统的电梯监控系统往往只能记录画面,无法主动识别和预警危险行为。
为了解决这一问题,我们开发了一套基于深度学习的电梯电瓶车检测系统,能够:
- 🔍 实时检测电梯内的人员和车辆
- 🚨 自动识别电瓶车违规进入电梯
- 📊 提供详细的检测统计和预警信息
- 🛡️ 为电梯安全管理提供智能化支持
🎯 技术方案
检测目标
系统能够识别以下三类目标:
- 👤 person(人): 电梯内的人员
- 🚲 bicycle(自行车): 普通自行车
- 🏍️ motorcycle(摩托车): 包括电瓶车在内的摩托车
技术架构
- 基础模型: YOLO11 nano
- 训练框架: Ultralytics YOLO
- 数据处理: VOC格式转YOLO格式
- 部署方式: 支持GPU加速推理
💻 核心代码实现
1. 数据预处理模块
class VOCToYOLOConverter:"""VOC格式到YOLO格式转换器"""def __init__(self, voc_root: str, yolo_root: str):self.voc_root = Path(voc_root)self.yolo_root = Path(yolo_root)# 电梯电瓶车检测类别:人、自行车、摩托车self.class_names = ['person', 'bicycle', 'motorcycle']self.class2id = {name: i for i, name in enumerate(self.class_names)}def parse_xml(self, xml_path: str) -> Tuple[int, int, List[dict]]:"""解析VOC XML文件,转换为YOLO格式"""tree = ET.parse(xml_path)root = tree.getroot()# 获取图像尺寸size = root.find('size')width = int(size.find('width').text)height = int(size.find('height').text)# 解析目标框并转换为YOLO格式objects = []for obj in root.findall('object'):name = obj.find('name').textif name not in self.class2id:continuecls_id = self.class2id[name]bndbox = obj.find('bndbox')xmin, ymin, xmax, ymax = map(float, [bndbox.find('xmin').text,bndbox.find('ymin').text,bndbox.find('xmax').text,bndbox.find('ymax').text])# 转换为YOLO格式 (归一化的中心点坐标和宽高)x_center = (xmin + xmax) / 2.0 / widthy_center = (ymin + ymax) / 2.0 / heightbbox_width = (xmax - xmin) / widthbbox_height = (ymax - ymin) / heightobjects.append({'class_id': cls_id,'x_center': x_center,'y_center': y_center,'width': bbox_width,'height': bbox_height})return width, height, objects
2. 模型训练配置
def train_motorcycle_detection():"""电梯电瓶车检测训练主函数"""print("🛗 电梯电瓶车检测 - 快速GPU训练")# 加载YOLO11模型model = YOLO("models/yolo11n.pt", task='detect')# 开始训练results = model.train(data='data/data.yaml', # 数据集配置epochs=100, # 训练轮数imgsz=640, # 输入图像尺寸batch=16, # 批次大小device='cuda', # 使用GPUworkers=4, # 数据加载线程cache=True, # 缓存数据到内存project='motorcycle_results', # 项目文件夹name='yolo11n_motorcycle', # 实验名称patience=20, # 早停耐心值save=True, # 保存最佳模型# 学习率设置lr0=0.01, # 初始学习率lrf=0.01, # 最终学习率比例momentum=0.937, # SGD动量weight_decay=0.0005, # 权重衰减warmup_epochs=3, # 预热轮数# 数据增强 - 适合电梯内电瓶车图像hsv_h=0.015, # 色调增强hsv_s=0.7, # 饱和度增强 hsv_v=0.4, # 明度增强degrees=10.0, # 旋转角度translate=0.1, # 平移scale=0.5, # 缩放fliplr=0.5, # 左右翻转mosaic=1.0, # 马赛克增强mixup=0.1, # 混合增强)return results
3. 实时检测模块
def detect_motorcycle_in_elevator(model, image_path):"""电梯电瓶车实时检测"""# 读取图像img = cv2.imread(image_path)# 进行预测results = model(img, conf=0.25, iou=0.45)result = results[0]boxes = result.boxes# 类别名称和颜色class_names = ['person', 'bicycle', 'motorcycle']colors = [(0, 255, 0), (255, 0, 0), (0, 0, 255)] # 绿色、蓝色、红色# 检测结果统计detection_count = 0motorcycle_detected = Falseif boxes is not None:for box in boxes:# 获取边界框坐标x1, y1, x2, y2 = box.xyxy[0].cpu().numpy()x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2)# 获取类别和置信度cls = int(box.cls[0].cpu().numpy())conf = float(box.conf[0].cpu().numpy())# 检查是否检测到摩托车/电瓶车if cls == 2: # motorcycle类别motorcycle_detected = True# 绘制检测框color = colors[cls % len(colors)]cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)# 绘制标签label = f"{class_names[cls]}: {conf:.2f}"cv2.putText(img, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 2)detection_count += 1# 预警信息if motorcycle_detected:cv2.putText(img, "WARNING: Motorcycle Detected!", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)return img, detection_count, motorcycle_detected
📊 训练结果分析
模型性能指标
经过68轮训练,模型在验证集上取得了优异的性能:
- 🎯 mAP50: 95.09% - 在50%IoU阈值下的平均精度
- 🎯 mAP50-95: 75.71% - 在多个IoU阈值下的平均精度
- 🎯 Precision: 90.31% - 精确率
- 🎯 Recall: 88.44% - 召回率
各类别检测性能
- 👤 person(人): mAP50 = 96.0%, Precision = 97.7%
- 🚲 bicycle(自行车): mAP50 = 89.8%, Precision = 73.9%
- 🏍️ motorcycle(摩托车): mAP50 = 99.5%, Precision = 99.3%
训练过程可视化
从训练曲线可以看出:
- 模型在训练初期快速收敛
- 验证集性能稳定提升
- 在第48轮达到最佳性能
- 早停机制有效防止过拟合
测试
train_batch0:
val_batch0_labels
val_batch0_pred
🚀 部署和使用
环境要求
# 安装依赖
pip install ultralytics opencv-python torch torchvision# 系统要求
- Python 3.8+
- CUDA支持的GPU(推荐)
- 8GB+ 显存
快速开始
# 1. 数据预处理
python prepare_dataset.py# 2. 模型训练
python train_motorcycle_detection.py# 3. 模型测试
python test_saved_model.py
实际应用场景
- 🏢 智能楼宇管理: 集成到楼宇监控系统
- 🚨 安全预警: 实时检测电瓶车违规进入电梯
- 📊 数据统计: 统计电梯使用情况和违规行为
- 🔒 门禁控制: 与电梯门禁系统联动
💡 技术亮点
1. 高效的数据处理
- 自动VOC到YOLO格式转换
- 智能数据集分割(训练70%/验证20%/测试10%)
- 针对电梯场景的数据增强
2. 优化的训练策略
- 使用YOLO11 nano轻量级模型
- GPU加速训练,支持混合精度
- 早停机制防止过拟合
- 自适应学习率调度
3. 实用的检测功能
- 多类别同时检测
- 实时预警机制
- 可视化检测结果
- 性能统计分析
📝 总结
本项目成功实现了基于YOLO11的电梯电瓶车检测系统,通过深度学习技术为电梯安全管理提供了智能化解决方案。系统具有高精度、高效率、易部署等特点,在实际应用中能够有效识别电梯内的电瓶车违规行为,为保障电梯安全发挥重要作用。