
简介本资源是面向智能楼宇、电梯安全监控与计算机视觉初学者的高质量目标检测数据集聚焦电梯开关状态及人员进出场景识别任务适用于YOLO系列、Faster R-CNN等主流检测模型的训练与验证。数据集共2000个文件包含2220张JPG图像及严格对齐的2220份Pascal VOC格式XML标注文件和2220份YOLO格式TXT标注文件涵盖4类关键状态CloseElevator关闭、elevator open开启、People-in-elevator有人与The-elevator-was-empty空梯总标注框数达3330个全部由labelImg工具人工精标确保空间位置与语义一致性。压缩包大小77.26MB采用7z高压缩格式结构简洁无冗余路径开箱即用。目前已有543人学习下载配套提供使用说明文档与规范命名规则便于快速集成至数据加载流程、开展类别平衡分析或构建多状态联合判断模型。1. 项目概述一份专为电梯场景定制的目标检测数据集最近在做一个电梯内人员行为分析的边缘计算项目核心需求是准确判断电梯门的开关状态并实时检测人员的进出动作。这个需求听起来简单但真到动手找数据的时候才发现市面上根本没有现成的、标注好的数据集可用。通用的人体检测数据集比如COCO虽然能框出人但完全不区分“进入”、“离开”这种与门状态强相关的动作更别提精确标注电梯门是“开”还是“关”了。没办法只能自己动手丰衣足食。经过一段时间的采集、清洗和标注我整理出了这份“电梯开关状态人员进出检测数据集”。数据集总共包含2220张高质量图像全部采用VOC格式标注并已转换为YOLO格式方便直接用于训练。它主要包含4个类别door_open电梯门开、door_closed电梯门关、person_entering人员进入、person_exiting人员离开。这个数据集的核心价值在于它精准地捕捉了电梯这个垂直交通场景下的关键视觉元素及其状态为开发电梯智能监控、节能控制、异常行为预警等应用提供了直接可用的数据基础。如果你正在研究或开发与电梯相关的计算机视觉应用比如基于视频的电梯调度优化、不文明乘梯行为如阻挡关门检测、或是老人小孩独自乘梯的安全监护系统那么这个数据集很可能就是你急需的那块“拼图”。它省去了你从零开始采集数据、定义类别、进行繁琐标注的巨大工作量让你能直接聚焦于模型算法的优化和业务逻辑的实现。2. 数据集核心价值与应用场景深度解析2.1 为什么通用数据集无法满足电梯场景需求在计算机视觉领域目标检测已经非常成熟像YOLO、SSD这类算法在COCO、VOC等通用数据集上表现优异。但“通用”往往意味着“不够专精”。当我们把模型部署到电梯这个具体场景时会遇到几个典型问题首先视角和遮挡问题。电梯轿厢内部空间狭小摄像头通常安装在顶部角落拍摄的是俯视或大角度斜视画面。这与通用数据集中常见的平视、街景视角差异巨大。人体姿态尤其是头部和肩部在俯视下变形严重通用的人体检测框通常是直立全身框在这种视角下要么框不准要么会包含大量无关背景。其次类别定义的粒度不足。通用数据集的“人”就是一个类别。但在电梯场景的业务逻辑里“正在进入的人”和“正在离开的人”代表完全不同的行为意图需要被区分开。更重要的是“电梯门”的状态开/关是一个关键的环境上下文信息它直接决定了“进入”或“离开”动作是否成立以及何时开始、何时结束。没有门状态的检测人员进出检测的准确率和时效性会大打折扣。最后场景特异性干扰。电梯内有镜面、金属反光、楼层显示屏的强光、频繁的开关门导致的动态模糊以及乘客携带的行李、婴儿车等物品造成的遮挡。这些都是在开放场景数据集中不常见但在电梯内高频出现的干扰因素。因此一个专用的数据集必须针对性地解决上述问题。我们的数据集正是在这种需求驱动下产生的它不仅仅是框出了“人”和“门”更是用业务逻辑定义了这四个互相关联的类别使得模型能够学习到“门开时门口区域出现的人更可能是进入或离开”这样的场景化知识。2.2 四大核心应用场景展望基于这个数据集训练出的模型可以赋能多个电梯智能化应用智能节能与调度通过实时检测电梯门状态和轿厢内人数可以更精准地判断电梯的“空闲”与“占用”状态。结合人员进出流可以预测电梯即将空闲的时间点从而优化空调、照明等设备的启停策略实现节能。同时为群控系统提供更精细的客流数据辅助调度决策。乘梯安全与行为规范监测检测“人员进入/离开”的时序可以判断是否存在长时间阻挡电梯门关闭的不安全、不文明行为。结合门状态可以在门即将关闭时仍有人员试图进入的瞬间发出预警提升安全性。异常事件检测例如在电梯门关闭状态下检测到轿厢内突然出现人员可能来自其他未监控的入口或是在非停靠楼层检测到门开启状态这些都可以作为异常事件的触发条件。客流量统计与数据分析准确统计每个楼层的进出人数为物业管理部门提供精细化的客流热力图和高峰时段分析用于资源调配和设施规划。3. 数据集内容详解与标注规范3.1 数据构成与采集说明数据集包含的2220张图像均来源于真实的电梯监控场景。为了确保数据的多样性和模型的泛化能力我们在采集时考虑了多种变量时间跨度涵盖了白天、夜晚、黄昏等不同光照条件。电梯类型包括了住宅电梯、办公楼电梯、商场扶梯厢式等多种轿厢内部装修风格。人员密度从空轿厢、单人乘梯到高峰期拥挤情况均有覆盖。动作完整性对于“进入”和“离开”动作我们采集了从门开始开启、人员移动、到门关闭的连续帧或关键帧确保动作的各个阶段都有样本。图像分辨率统一为1920x1080保证了足够的清晰度供模型学习细节。所有图像都经过了人工筛选剔除了画面模糊、严重过曝或欠曝、以及无关干扰过多的无效图片。3.2 四类别定义与标注细则标注质量是数据集的生命线。我们制定了详细的标注规范确保每一张图片的每一个标注框都准确无误door_open(电梯门开)标注对象两扇电梯门之间的缝隙区域。当缝隙可见时用一个矩形框紧密包围两扇门之间的整个缝隙区域包括门之间的所有可见部分。难点与技巧在门半开或即将关闭时缝隙可能很窄。标注员需要仔细辨别即使只有几个像素的缝隙只要能看到轿厢内外的连通就必须标注。对于双开门、多扇门的情况统一标注为一个整体的“门开”区域。door_closed(电梯门关)标注对象紧闭的电梯门整体。用一个矩形框包围完整的、紧闭的电梯门。难点与技巧需要与door_open明确区分。关键判断依据是“有无可见缝隙”。如果门完全闭合即使门板上有装饰缝也属于door_closed。当门正在移动但未形成可供通行的缝隙时也归类于此。person_entering(人员进入)标注对象身体大部分在轿厢外但头部、上半身或脚已经跨过门槛正在向轿厢内移动的人员。标注框应紧密包围该人员的全身。难点与技巧这是最具挑战性的类别。标注的核心是判断“意图”和“动作方向”。我们规定当人员的身体重心通常以躯干为参考尚未越过门槛中线时但动作趋势明显是向内时即可标注。对于拥挤情况下的进入可能需要根据头部朝向和肩膀角度综合判断。person_exiting(人员离开)标注对象身体大部分在轿厢内但正在向轿厢外移动的人员。标注框同样紧密包围全身。难点与技巧与进入类似判断依据是向外的移动趋势。通常当人员面向门外并开始迈步时即可标注。需要特别注意背对镜头离开的情况此时更依赖整体移动轨迹和上下文如门已开启来判断。重要标注原则对于同一个人员在其移动过程中可能在不同帧被标注为不同的类别例如从person_entering变为person_exiting是不可能的但从进入中变为完全在轿厢内则不再标注。我们要求标注员对连续帧进行一致性检查确保同一人的动作标注在时序上是合理的。3.3 标注格式VOC与YOLO数据集提供了两种最常用的标注格式以满足不同训练框架的需求VOC格式这是最直观的格式。每个图像对应一个.xml文件里面以XML结构存储了图像尺寸、每个目标的类别名称以及其边界框的左上角和右下角绝对坐标(xmin, ymin, xmax, ymax)。这种格式人类可读性强方便检查和调试。annotation filenameelevator_001.jpg/filename size width1920/width height1080/height depth3/depth /size object namedoor_open/name bndbox xmin850/xmin ymin200/ymin xmax1070/xmax ymax500/ymax /bndbox /object object nameperson_entering/name bndbox xmin900/xmin ymin400/ymin xmax1050/xmax ymax750/ymax /bndbox /object /annotationYOLO格式这是目前最流行的训练格式尤其适用于Darknet、Ultralytics YOLOv5/v8等框架。每个图像对应一个同名的.txt文件。每行表示一个目标格式为[class_id] [x_center] [y_center] [width] [height]。class_id类别索引从0开始。在我们的数据集中映射关系为0:door_open, 1:door_closed, 2:person_entering, 3:person_exiting。[x_center] [y_center] [width] [height]分别是边界框中心点的x坐标、中心点的y坐标、框的宽度和框的高度。关键点在于这四个值都是相对于图片宽度和高度的归一化值范围在[0, 1]之间。例如一个person_entering类别id2的框中心点位于图片(960, 540)位置框宽高为200x300像素图片尺寸为1920x1080那么其在YOLO.txt文件中的一行应为2 0.5 0.5 0.1042 0.2778计算过程x_center 960 / 1920 0.5; y_center 540 / 1080 0.5; width 200 / 1920 ≈ 0.1042; height 300 / 1080 ≈ 0.2778。我们提供了完整的格式转换脚本和类别映射文件确保两种格式的标注完全对应用户可以根据自己的训练流程灵活选择。4. 基于YOLOv8的模型训练全流程实操有了高质量的数据集下一步就是训练一个属于自己的检测模型。这里我以当前非常流行且易用的Ultralytics YOLOv8为例展示完整的训练流程。选择YOLOv8是因为它在精度和速度上取得了很好的平衡并且其API设计非常友好适合快速原型开发。4.1 环境准备与数据组织首先你需要一个Python环境建议3.8以上并安装必要的包。最方便的方式是使用Ultralytics官方提供的包。pip install ultralytics接下来将下载的数据集压缩包解压并按照YOLOv8要求的目录结构进行组织。YOLOv8期望的是一种简单的结构elevator_dataset/ ├── images/ │ ├── train/ # 存放训练集图片 │ └── val/ # 存放验证集图片 └── labels/ ├── train/ # 存放训练集标签 (.txt文件) └── val/ # 存放验证集标签 (.txt文件)你需要将2220张图片和对应的YOLO格式的.txt标签文件按照一定比例通常是8:2或9:1分割到train和val文件夹中。确保images/train里的图片名和labels/train里的标签文件名一一对应仅后缀不同。我已经在数据集包里提供了一个简单的分割脚本split_dataset.py你可以直接使用。然后创建一个数据集配置文件elevator.yaml放在你的项目根目录下。这个文件告诉YOLOv8你的数据在哪里以及有哪些类别。# elevator.yaml path: /path/to/your/elevator_dataset # 数据集的根目录绝对路径 train: images/train # 训练集图片的相对路径相对于path val: images/val # 验证集图片的相对路径 # 类别列表 names: 0: door_open 1: door_closed 2: person_entering 3: person_exiting4.2 模型选择与训练参数调优YOLOv8提供了不同大小的预训练模型从轻量级的YOLOv8nnano到大型的YOLOv8x。对于电梯场景考虑到通常部署在算力有限的边缘设备如Jetson系列、华为Atlas我建议从YOLOv8s或YOLOv8m开始。它们在精度和速度上比较均衡。训练命令非常简单但里面的参数大有讲究yolo taskdetect modetrain modelyolov8s.pt dataelevator.yaml epochs100 imgsz640 batch16 workers4让我解释一下关键参数及其背后的考量modelyolov8s.pt: 使用YOLOv8s的预训练权重。强烈建议使用预训练权重它能极大加速收敛并提升最终精度因为模型已经学会了提取通用特征。epochs100: 训练轮数。对于2000多张图的数据集100个epoch通常是一个合理的起点。可以通过观察验证集损失曲线来提前停止或增加轮数。imgsz640: 输入图像尺寸。YOLOv8会将所有图片缩放到这个尺寸。640是一个在精度和速度间取得较好平衡的值。如果你的原始图片是1080p可以尝试增大到960甚至原尺寸1080但会显著增加训练时间和显存消耗提升可能有限。batch16: 批次大小。取决于你的GPU显存。在显存允许的情况下较大的batch size有助于训练稳定。RTX 308010G上跑imgsz640batch16通常没问题。workers4: 数据加载的进程数。用于加速数据读取。通常设置为CPU核心数的2-4倍。进阶调参建议学习率lr0默认是0.01。如果训练初期损失震荡剧烈可以尝试调小如lr00.001。数据增强YOLOv8默认开启了Mosaic、MixUp等强增强。对于电梯这种场景固定的数据可以适当调整。例如关闭随机透视变换perspective0因为电梯视角基本固定减少随机旋转degrees5因为电梯画面很少有大角度旋转。yolo train ... hsv_h0.015 hsv_s0.7 hsv_v0.4 degrees5 translate0.1 scale0.5 shear0.0 perspective0.0早停patience设置patience20如果验证集指标在20个epoch内没有提升则自动停止训练防止过拟合。4.3 训练过程监控与模型评估训练开始后YOLOv8会在终端打印日志并在runs/detect/train/目录下生成一系列有用的结果和图表。你需要重点关注以下几个文件results.csv和results.png记录了训练和验证损失box_loss, cls_loss, dfl_loss以及关键指标mAP50, mAP50-95, precision, recall随epoch的变化曲线。健康的训练曲线应该是训练损失和验证损失都平稳下降最终趋于平缓。如果验证损失中途开始上升而训练损失继续下降说明出现了过拟合。confusion_matrix.png混淆矩阵。这是分析模型错误类型的利器。你可以清晰地看到模型最容易将哪个类别误认为另一个类别。例如person_entering和person_exiting之间是否存在大量混淆如果存在可能需要检查这两类数据的标注是否足够清晰或者考虑增加更明显的时序上下文信息。val_batchX_labels.jpg和val_batchX_pred.jpg随机抽取的验证集图片分别显示了真实标签ground truth和模型预测结果。直观地检查模型在哪些图片上表现好哪些图片上漏检或错检。训练完成后最佳模型权重会自动保存为runs/detect/train/weights/best.pt。你可以使用这个权重在验证集上进行最终评估yolo taskdetect modeval modelruns/detect/train/weights/best.pt dataelevator.yaml评估报告会给出详细的mAP、精确率、召回率等指标。对于我们的四分类任务要特别关注每个类别的APAverage Precision这能告诉你模型在每个具体类别上的表现。通常door_open/closed的AP会远高于person_entering/exiting因为后者的识别难度更大。5. 模型部署与性能优化实战训练出一个指标不错的模型只是第一步让它在实际场景中稳定、高效地运行才是最终目标。这里涉及到模型导出、推理优化和部署上线的完整链条。5.1 模型导出为部署格式YOLOv8的.pt文件是PyTorch格式包含了完整的模型定义和权重。为了在不同平台部署我们需要将其转换为更高效的格式。ONNX格式这是跨平台部署的“通用货币”。ONNX模型可以被TensorRT、OpenVINO、ONNX Runtime等多种推理引擎加载。yolo export modelruns/detect/train/weights/best.pt formatonnx imgsz640 simplifyTruesimplifyTrue会应用ONNX Simplifier对计算图进行优化移除冗余操作有时能提升推理速度。TensorRT格式如果你在NVIDIA GPU上部署TensorRT是性能最优的选择。导出过程稍复杂通常先导出为ONNX再用TensorRT的trtexec工具或Python API转换为TensorRT引擎.engine文件。TensorRT会针对特定GPU进行内核优化和精度校准FP16/INT8带来显著的加速。# 示例使用trtexec转换需安装TensorRT trtexec --onnxbest.onnx --saveEnginebest_fp16.engine --fp16 --workspace2048OpenVINO格式对于Intel CPU或集成显卡OpenVINO是首选。它也能提供很好的优化。yolo export modelbest.pt formatopenvino imgsz6405.2 边缘设备部署优化技巧在算力有限的边缘设备如Jetson Nano、树莓派AI加速棒上运行模型优化至关重要。降低输入分辨率这是最有效的提速方法。将训练时的imgsz640降到320或416重新导出模型。精度会有一定损失但速度提升是立竿见影的。需要在实际场景中测试找到精度和速度的平衡点。使用更小的模型如果YOLOv8s仍然跑得慢可以尝试YOLOv8n。或者考虑专门为边缘设备设计的网络如NanoDet、YOLO-Fastest。INT8量化TensorRT和OpenVINO都支持INT8量化将模型权重和激活从FP32降到INT8能大幅减少内存占用和计算量提升速度。但量化可能会引入精度损失需要进行“量化感知训练”或在量化后使用校准集来减少精度下降。# TensorRT INT8量化通常需要提供校准数据集 trtexec --onnxbest.onnx --saveEnginebest_int8.engine --int8 --calib校准集流水线并行对于视频流处理可以将视频解码、图像预处理缩放、归一化、模型推理、后处理NMS等步骤组成流水线利用多线程或异步操作避免等待提高整体吞吐量。5.3 编写推理脚本与业务逻辑集成最后我们需要一个Python脚本来加载模型、处理输入视频流、执行推理并解析结果。以下是一个基于YOLOv8 Python API的简单示例from ultralytics import YOLO import cv2 # 1. 加载训练好的模型 model YOLO(‘runs/detect/train/weights/best.pt’) # 或者加载导出的onnx模型 model YOLO(‘best.onnx’) # 2. 打开视频源可以是摄像头RTSP流或视频文件 cap cv2.VideoCapture(‘rtsp://your_camera_stream’) while cap.isOpened(): ret, frame cap.read() if not ret: break # 3. 执行推理 results model(frame, imgsz640, conf0.5, iou0.45) # conf置信度阈值 iou NMS阈值 # 4. 解析结果 for result in results: boxes result.boxes # 检测框信息 if boxes is not None: for box, cls in zip(boxes.xyxy, boxes.cls): x1, y1, x2, y2 map(int, box) # 框坐标 class_id int(cls) class_name model.names[class_id] # 获取类别名 confidence box.conf.item() # 置信度 # 5. 绘制框和标签 cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2) label f‘{class_name} {confidence:.2f}’ cv2.putText(frame, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) # 6. 此处添加你的业务逻辑 # 例如检测到 door_open 且 person_entering则触发“有人进入”事件 if class_name ‘door_open’: # ... 记录门开时间 pass elif class_name ‘person_entering’: # ... 判断是否在门开状态下若是则计数 pass # 7. 显示结果 cv2.imshow(‘Elevator Detection’, frame) if cv2.waitKey(1) 0xFF ord(‘q’): break cap.release() cv2.destroyAllWindows()将检测结果类别、坐标、置信度、时间戳封装成结构化的数据通过消息队列如MQTT或API发送给后端业务系统就能实现完整的电梯智能感知功能了。6. 常见问题排查与避坑指南在实际操作中从数据准备到模型部署你可能会遇到各种各样的问题。这里我总结了一些典型问题的排查思路和解决方案希望能帮你少走弯路。6.1 数据与训练阶段问题问题1训练损失不下降或震荡剧烈。可能原因学习率设置过高数据标注存在大量错误数据增强过于激进导致模型难以学习。排查步骤检查数据使用YOLOv8提供的yolo checks功能或自己写脚本验证数据格式是否正确图片和标签是否一一对应标注框是否超出图像范围。可视化标注用脚本随机抽取一些训练集图片将标注框画上去肉眼检查标注质量。重点看person_entering/exiting的框是否准确有无错标、漏标。调整学习率将初始学习率lr0调低一个数量级如从0.01调到0.001重新训练。简化数据增强在训练命令中暂时关闭所有数据增强augmentFalse看损失是否正常下降。如果正常再逐步、有选择地开启增强。问题2验证集mAP很低但训练集精度很高过拟合。可能原因数据量2220张相对模型容量可能不足训练轮数过多数据多样性不够。解决方案使用早停设置patience10或20。增加正则化增大权重衰减系数weight_decay默认是0.0005可尝试0.001。使用更小的模型从YOLOv8m降级到YOLOv8s甚至YOLOv8n。尝试数据增强如果之前关闭了可以尝试开启一些温和的增强如色彩抖动hsv_h, hsv_s, hsv_v、轻微平移缩放以增加数据多样性。收集更多数据这是最根本的解决方法特别是针对模型表现差的场景如夜间、极度拥挤进行补充采集。问题3person_entering和person_exiting两类混淆严重。可能原因这两类在单帧静态图像上外观极其相似区分度主要依赖动作趋势和上下文而静态图片丢失了时序信息。优化策略改进标注确保标注员严格依据“身体重心与门槛的相对位置”和“动作趋势”来区分。对于模棱两可的帧宁可舍弃。引入时序上下文考虑使用视频片段而非单张图片进行训练。可以采用两种方式a) 使用能够处理视频的模型如YOLOv8结合光流或3D卷积b) 在后续业务逻辑中使用跟踪算法如ByteTrack对连续帧中的同一个人进行ID关联再根据其轨迹跨越门槛的方向来判断进出。这相当于将分类问题部分转化为跟踪轨迹分析问题。6.2 部署与推理阶段问题问题4模型在训练集上表现好但在实际摄像头视频上漏检、错检严重。可能原因训练数据与实际场景存在域差异Domain Gap。例如训练数据来自A品牌的电梯摄像头而部署在B品牌摄像头上两者色彩、对比度、畸变不同。解决方案在线数据增强在训练时模拟部署环境。如果部署摄像头画面偏暗就在训练时增加随机亮度降低的增强。域适应收集少量几十张来自部署摄像头的图片不重新标注而是用训练好的模型在其上推理将高置信度的预测结果作为伪标签加入到训练集中进行微调Fine-tuning。这是一种轻量级的域适应方法。测试时增强TTA在推理时对输入图像进行多种变换如翻转、缩放将多次推理的结果进行融合可以提升模型在陌生场景下的鲁棒性但会增加计算开销。YOLOv8支持augmentTrue参数开启TTA。问题5边缘设备上推理速度慢无法达到实时如30 FPS。排查与优化性能剖析使用工具如PyTorch Profiler、TensorRT的trtexec --profilingVerbositydetailed分析推理各阶段耗时。是数据预处理慢模型计算慢还是后处理慢降低输入分辨率这是最有效的方法。尝试imgsz320。模型量化如前述使用TensorRT FP16/INT8量化。优化后处理YOLO的后处理非极大值抑制NMS是CPU操作。确保使用了高效的NMS实现并考虑将后处理也移植到GPU上如果推理引擎支持。硬件加速确保使用了正确的推理引擎TensorRT for NVIDIA GPU, OpenVINO for Intel CPU/GPU并且其版本与硬件驱动匹配。问题6如何处理电梯内多人、严重遮挡的情况挑战在高峰期电梯门口区域可能同时有多人进出且相互遮挡严重导致检测框重叠NMS可能会误删掉被遮挡人的框。策略调整NMS参数适当提高NMS的IoU阈值iou如从0.45提高到0.6让算法对重叠框的容忍度更高。但要注意这可能会增加误检将同一个人的多个框都保留。使用更先进的NMS考虑使用Soft-NMS、Weighted-NMS等变体它们对遮挡情况更友好。依赖跟踪在视频流中不要完全依赖单帧检测。使用多目标跟踪算法即使某个人在某一帧被漏检跟踪器也能根据其历史轨迹和运动模型将其“桥接”起来保证人员ID的连续性这对于准确计数进出人数至关重要。最后模型部署上线后一定要建立一个持续的监控和迭代机制。记录下模型出错的典型案例保存图片或视频片段定期将这些“困难样本”加入到训练集中进行重新训练让你的模型在实际应用中越用越聪明。这个过程我们称之为“数据驱动的模型进化”也是AI工程落地的核心闭环。本文还有配套的精品资源点击获取