在零售行业摸爬滚打多年,我深知偷窃行为对超市经营造成的巨大损失。传统的人工监控方式存在明显短板——监控人员盯着十几个屏幕,不出20分钟就会视觉疲劳,漏检率直线上升。而基于YOLO目标检测的智能安防系统,正在彻底改变这一局面。
这个包含4000张高质量标注图像的数据集,是我参与过的最实用的零售安防资源之一。它聚焦两类核心行为:正常购物(normal)和偷窃行为(shoplifting),采用YOLO标准格式标注,开箱即用。数据集覆盖了超市三大关键区域:货架区、收银台和过道,包含了各种光照条件和人流密度场景。
重要提示:数据集中的偷窃行为标注不仅包含明显的商品藏匿动作,还包括诸如"假装查看商品实则塞进口袋"等隐蔽行为,这对模型识别能力的提升至关重要。
数据集采用标准的YOLO目录结构,这是我见过组织最规范的开源数据集之一:
code复制database/超市店铺偷窃行为检测数据集/
├── train/images
│ ├── 0001.jpg
│ └── ...
├── train/labels
│ ├── 0001.txt
│ └── ...
├── valid/images
└── valid/labels
每个标注文件采用YOLO格式:
code复制<class_id> <x_center> <y_center> <width> <height>
坐标值都是归一化后的0-1之间的浮点数。例如:
code复制1 0.45 0.50 0.30 0.40 # 偷窃行为
0 0.60 0.65 0.25 0.35 # 正常行为
这个数据集的独特价值在于其真实的采集环境:
标注团队由5名经验丰富的标注员完成,经过三轮质检:
建议使用以下配置开始训练:
bash复制conda create -n shoplifting python=3.8
conda activate shoplifting
pip install ultralytics==8.0.0
创建data.yaml配置文件:
yaml复制path: database/超市店铺偷窃行为检测数据集
train: train/images
val: valid/images
names:
0: normal
1: shoplifting
经过多次实验,我总结出最佳参数组合:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| model | yolov8s | 平衡精度和速度 |
| epochs | 120 | 配合早停策略 |
| imgsz | 640 | 保留足够细节 |
| batch | 16 | 适合8G显存 |
| lr0 | 0.01 | 初始学习率 |
| weight_decay | 0.0005 | 防止过拟合 |
启动训练命令:
bash复制yolo detect train data=data.yaml model=yolov8s.pt epochs=120 imgsz=640 batch=16
针对超市场景的特殊性,我推荐以下增强组合:
python复制augment:
- hsv_h: 0.015 # 色相变化
- hsv_s: 0.7 # 饱和度变化
- hsv_v: 0.4 # 明度变化
- translate: 0.1 # 平移
- scale: 0.5 # 缩放
- mosaic: 1.0 # 马赛克增强
- flipud: 0.5 # 垂直翻转
为了在边缘设备部署,需要将模型转换为ONNX格式:
bash复制yolo export model=best.pt format=onnx opset=12 simplify=True
在Jetson Xavier上实测性能:
| 模型 | 分辨率 | FPS | mAP@0.5 |
|---|---|---|---|
| YOLOv8n | 640 | 42 | 0.78 |
| YOLOv8s | 640 | 28 | 0.85 |
| YOLOv8m | 640 | 15 | 0.88 |
典型的部署架构包含:
关键Python代码片段:
python复制import cv2
from ultralytics import YOLO
model = YOLO('best.pt')
cap = cv2.VideoCapture('rtsp://camera_stream')
while cap.isOpened():
ret, frame = cap.read()
results = model(frame)
for box in results[0].boxes:
if box.cls == 1: # shoplifting
trigger_alarm(box.xyxy)
数据集中的正常行为样本约占70%,这会导致模型偏向多数类。我采用以下对策:
python复制class_weights = compute_class_weight('balanced', classes=[0,1], y=labels)
python复制from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler()
X_res, y_res = ros.fit_resample(features, labels)
超市高峰期人流量大,容易出现遮挡问题。我的解决方案:
yaml复制backbone:
- [-1, 1, Conv, [64, 3, 2]]
- [-1, 1, CBAM, [64]] # 添加注意力模块
python复制results = model(frame, iou=0.45, conf=0.5, agnostic=True)
实际部署中最头疼的是误报警。我总结的过滤策略:
大型超市需要多视角关联:
python复制multi_cameras = {
'Aisle1': 'rtsp://cam1',
'Checkout': 'rtsp://cam2'
}
tracker = ByteTrack() # 跨摄像头目标跟踪
使用YOLO+Transformer进行行为分析:
python复制class BehaviorTransformer(nn.Module):
def __init__(self):
super().__init__()
self.yolo = YOLO('best.pt')
self.transformer = TransformerEncoder(...)
def forward(self, clip_frames):
features = [self.yolo.extract_features(f) for f in clip_frames]
return self.transformer(torch.stack(features))
完整的安防系统架构:
在部署这套系统时,我发现最关键的三个要素是:稳定的视频流接入、低延迟的检测推理、以及精准的报警过滤机制。经过三个月的实际运行测试,系统将偷窃行为识别率从人工监控的62%提升到了89%,同时误报率控制在每天5次以下。