范围:为"手机对着电脑屏幕拍照"行为预警系统,调研怎么训:YOLO 检测模型二次训练的完整做法(数据/超参/冻结策略/部署)、ROI 分类器备选线、Qwen2.5-VL LoRA 微调复核模型、视频动作模型微调的适用条件,以及公开数据集盘点与评估验收标准。
1. 总体结论
三条训练线,按"必训 → 对比 → 可选"排序:
- YOLO 4 类自训 = 必训,也是整个项目最便宜的部分(2080 Ti 上数小时级)。预训练 COCO 模型能检出
person/cell phone但回答不了"手持 vs 放置"和"对着屏幕",自训增量价值集中在hand-phone(手举手机整体)和monitor(俯视角度显示器)两个新类 + 小目标手机召回提升。 - ROI 分类器 = 同一套标注数据的第二条路,PoC 双路对比。业界先例(CCTV 手机使用检测,两阶段 MAP 92.6%)证明 YOLO 定位 + 人 ROI 四分类是可行替代;两条路标注格式一次产出,谁准用谁。
- VLM 微调 = 先 prompt 基线、不达标再 LoRA。Qwen2.5-VL-7B 零微调 + 封闭式 prompt 大概率已够"复核器"角色(它本来就擅长开放式视频理解);LoRA 微调(Unsloth 4bit + TRL SFT,7B 单张 2080 Ti 可训)只在上一步准确率 <90% 时上,否则多花 1~2 天工程换 1~3 个点不划算,还有小数据过拟合风险。
- 视频动作模型微调(SlowFast/VideoMAE)= 本场景不推荐。实测 90 个视频(每类 20 条)微调 I3D/SlowFast 测试精度只有 70~77%,而算力比路线 1/2 贵 1~2 个数量级;VideoMAE 小数据特性(3~4k 视频可微调)是它唯一值得留的入口——仅当已积累 ≥500 条行为视频时才考虑。
数据是成败关键,不是模型:公开数据集(FPI-Det 22,879 张脸-手机同步标注、Kaggle Phone Usage 23,930 张、Objects Phone V3 35k 张街景监控)可以当"预训练底座"先训一版通用模型,再用自己的场景数据(实拍+摆拍,≥3k 张)做场景适配微调——两阶段数据策略比纯自拍省一半标注量且泛化更好。
2. 训练目标拆解
2.1 YOLO 4 类定义(沿用 10-08 调研)
| 类 | 框法 | 来源 | 训练策略 |
|---|---|---|---|
person | 完整人体 | COCO 预训练已够用 | 不训或轻量微调提远距召回 |
monitor | 显示器(含支架,俯视/斜视、黑屏亮屏都要标) | 自训 | 形态单一,500~1000 张即可 |
cell phone | 手机本体 | 公开数据底座 + 自训补充 | 提远距小目标召回 |
hand-phone | 手+手机整体(降低对手机本体的依赖,遮挡时仍可检) | 自训 | 核心类,需多姿势样本 1000~2000 张 |
hand-phone标注规范(决定误报率的细节):
- 框住"握持手机的手 + 手机"整体,不是只框手机;
- 横屏/竖屏/带壳/裸机都框,手遮挡手机时照样框;
- 负样本必须显式处理:手机放桌上 → 只标
cell phone不标hand-phone;打电话 → 标hand-phone(它确实手持)但位置不在显示器附近,由规则层过滤;看手机(低头平视手机)→ 标hand-phone,靠"手臂朝向屏幕 vs 朝向自己"的角度规则 + VLM 区分。标注规范里把这三类易混情况写成文字条款,标注员照做,否则误报无解。
2.2 ROI 分类器的 4 类标签(与 2.1 同一批图产出)
no_phone / phone_on_table / holding_phone_viewing / holding_phone_toward_screen
- 输入 = YOLO 检出的 person ROI(扩边 20% 防截断);
- 第 4 类的判别构图特征:手机举高、手臂伸展、手机位于人前方而非脸部侧面——分类器学这种构图比检测器硬学空间关系直接;
- 第 3 与第 4 类的边界("举着看"和"举着拍"单帧构图接近)是这条线的已知弱点,靠时序(第 4 类持续出现 + 手机中心稳定对屏幕)在规则层二次过滤。
3. 数据工程(核心章节)
3.1 公开数据集盘点(可当预训练底座)
| 数据集 | 规模 | 内容 | 对本项目用途 | 来源 |
|---|---|---|---|---|
| FPI-Det(arXiv 2509.09111, 2025) | 22,879 张,29,279 脸 + 10,255 手机同步标注 | 办公/教育/交通/公共场所,含极端尺度变化(手机小到 20×20px)与手-手机互遮挡;已含 YOLO/DETR 基线:YOLOv8-x 手机 AP@50 = 92.4%,人脸仅 56.5% | 手机检测预训练底座;其"手机易检、人脸难检"结论提醒:我们的难点在小目标+遮挡,不在"认出手机" | github.com/KvCgRv/FPI-Det |
| Kaggle Phone Usage Dataset | 23,930 张(YOLO 格式,即拿即训) | 两类:in_hand(手持使用)/on_ear(贴耳通话) | hand-phone类的直接冷启动数据;YOLO 格式免转换 | Kaggle: anshsuthar/phone-usage-dataset |
| Objects Phone V3(Ultralytics 数据集平台) | 35,045 张 | 城市街景监控视频帧,手机 bbox | 补"监控视角"域(俯视/远距),缓解自拍数据全是平视的域偏移 | platform.ultralytics.com 数据集页 |
| Roboflow Cellphone 项目集 | 数百~数千张不等 | 各种手机使用场景 | 多样性补充 | Roboflow Universe 搜 “cellphone” |
| SYN-PPDB (CVPR 2021W) | 53,760 帧(Unity 3D 合成) | 手机使用行人行为(无接触/注视/通话),合成→真实迁移把精度从 84.3% 提到 96.7% | 证明合成数据可用作冷启动;本场景若要合成,用"人+手机贴图"合成只建议补长尾(如逆光、极端俯角),不代替实拍 | arXiv 2102.02119 系 |
注意:公开集里几乎没有"手机对显示器拍照"这个特定构图(它本来就是个细分行为),所以公开数据只解决"检得出手机/手持","对着屏幕"的判定最终还是要场景自拍数据 + 规则/VLM。预期管理:公开底座 + 场景微调后,hand-phoneAP@50 合理预期 85~93%(FPI-Det 基线 92.4% 是监控通用视角,我们俯拍更远小目标会打折)。
3.2 自拍数据方案(场景适配层)
摆拍矩阵(2~3 天、需员工配合,覆盖决定泛化的四个轴):
| 轴 | 取值 |
|---|---|
| 行为 | 拍屏 200 次 / 看手机 200 次 / 通话 100 次 / 手机放桌 200 次 / 路过 200 次 |
| 距离 | 1m / 3m / 5m(对应手机在 1080p 帧里约 80px / 40px / 20px,覆盖最坏情况) |
| 角度 | 每个工位 2 个典型角度(正视/侧 30°+) |
| 光照 | 白天 / 傍晚 / 夜间补光(夜视红外下另采 100~200 张补数据,红外成像手机外观差异大) |
- 来源:现有墙装摄像枪直接录 2~3 天(含无摆拍的自然流量,这是最贴分布的部分)+ 定点摆拍补齐长尾;
- 抽帧策略:摆拍视频按 2fps 抽帧 + 人工筛(每段保留 5~15 张有效帧),目标≥3,000 张有效帧,其中
hand-phone类 ≥1,000 张; - 负样本刻意多采:“放桌手机”"低头看手机"各占 1/3 以上——误报率由负样本质量决定;
- 标注:CVAT(多人协作+质检流)或 LabelImg(单人快);3~6k 张 4 类约 2~4 人天;
- 隐私:员工摆拍需书面知情同意;非摆拍自然录像里的路人人脸在训练集中打码或裁剪剔除(训练不需要人脸,且避免数据合规问题)——FPI-Det 的工业数据集也是人脸打码的,这是业界惯例。
3.3 两阶段数据策略(推荐)
阶段 1(底座):公开集(FPI-Det/Kaggle/Objects Phone V3 手机类,~20k 张) → 训出"通用手机检测器",1 天(2080 Ti, YOLO11s, 50 epoch) 阶段 2(适配):阶段 1 权重 + 自拍场景数据(3~6k 张) → 场景微调 2~3 天 → 最终模型比直接全量混训好:公开数据的监控视角先教会"小目标手机长什么样",场景数据只需教"我们的工位长什么样",小场景集过拟合风险更低。
4. YOLO 二次训练怎么做(具体配方)
4.1 模型与训练框架
- Ultralytics YOLO11s(n 档更快但小目标精度损失,s 档在 2080 Ti 上训练和部署都宽裕;AGPL 风险见 10-08 调研 §3.4,内部部署可接受,法务有顾虑切 PaddleDetection RT-DETR);
- 起始权重:阶段 1 用
yolo11s.pt(COCO 预训练);阶段 2 用阶段 1 的 best.pt。
4.2 关键超参(小数据配方,均有出处)
| 超参 | 值 | 依据 |
|---|---|---|
lr0 | 0.001(默认 0.01 是 COCO 量级,小数据会冲掉预训练特征) | Ultralytics finetuning 指南 + 实践共识 |
patience | 10~20(默认 100 是为长训练设计的,小数据集早停省时间) | 同上 |
freeze | 两阶段冻结(见 4.3) | Ultralytics 指南 + arXiv 2509.05490 |
mosaic | 0.5(默认 1.0 过强,<2k 图时 mixup 直接0.0) | 小数据实践:重增广引入的标注噪声会拖慢收敛 |
imgsz | 1280(默认 640;5m 外手机 <50px,640 下只剩几个像素) | 小目标必须提分辨率;代价是训练慢 4 倍、显存 ×2,s 档 2080 Ti 扛得住 |
epochs | 阶段 1: 50;阶段 2: 100(配早停) | 经验值 |
optimizer | auto(<10k iteration 自动 AdamW 低 lr),训练不稳时手动AdamW, lr0=0.001 | Ultralytics 指南 |
4.3 冻结策略(有系统实验支撑)
arXiv 2509.05490(YOLOv8/v10 分层冻结系统实验,4 个监控数据集)结论:没有普适最优,但两条经验稳定成立——
- 小数据 + 域相似(办公监控 vs COCO 属相似域):冻结 backbone(前 10 层)防过拟合,mAP 与全量微调持平甚至更好;
- 冻结还能省至 28% 显存;
- 极端小数据集只训 head(freeze 到 neck)作下限方案。
实操 = Ultralytics 官方推荐的两阶段微调:
fromultralyticsimportYOLO# 阶段 1:冻 backbone,只训 neck+head(让新 4 类先学会)model=YOLO("yolo11s.pt")model.train(data="custom.yaml",epochs=20,freeze=10,imgsz=1280,lr0=0.001,name="stage1")# 阶段 2:全解冻,低 lr 精调(backbone 适配监控俯视角)model=YOLO("runs/detect/stage1/weights/best.pt")model.train(data="custom.yaml",epochs=30,lr0=0.001,patience=15,imgsz=1280,name="stage2")freeze 深度当超参试:freeze ∈ {0, 4, 10}各跑一遍比 val mAP,10-15 epoch 内出分晓(2080 Ti 上单跑数小时)。
4.4 训练成本与部署
| 项 | 估算(2080 Ti 单卡) |
|---|---|
| 阶段 1(20k 张, s 档, 1280, 50ep) | 1 天量级 |
| 阶段 2(3~6k 张, 1280, 100ep 早停) | 数小时~1 天 |
| 超参对比 3 组 freeze | 1~2 天 |
| 导出部署 | model.export(format="engine")→ TensorRT FP16;注意 TensorRT engine 与 GPU 架构绑定(2080 Ti 上构建的 engine 不能给 L20 用,跨卡要重建);2080 Ti sm_75 无 FP8,FP16 即可 |
| 推理 | YOLO11s-1280 TensorRT FP16 单卡50100 fps(640 下 200~500 fps 的经验值按 4 倍像素折算),单路 10fps 采样占用 <10%,8~16 路并发仍可 |
5. ROI 分类器线(同数据对比项)
- 数据:与 §2.1 同一批标注,person ROI 裁剪(扩边 20%)→ 4 类分类集;
- 模型:MobileNetV3-Large 或 EfficientNet-B0 微调(MobileNet 级 <10ms/ROI,2080 Ti 上 1 小时内训完,甚至 CPU 可跑);
- 负类增强:
no_phone/phone_on_table各占 ≥30%; - PoC 对比设计:A 路(YOLO 4 类 + 规则)vs B 路(YOLO person + ROI 四分类 + 规则),同一测试集(含负例全帧回放)比三项:触发召回 / 每 8h 误触发次数 / 单帧 GPU 时间。B 路额外成本:多一次推理 + 多一条训练流水线;已知弱点:俯拍 ROI 截断、双人交互表达不了。谁准用谁,预计差距 <5%,A 路部署更简可作平票裁决。
6. VLM 复核模型:先 prompt,后 LoRA
6.1 第一步:零微调 prompt 基线(必做)
Qwen2.5-VL-7B 原生支持多帧视频输入(动态 FPS + 绝对时间编码 MRoPE,官方视频基准 Video-MME 7B 达 65.1),"6 帧 + 封闭式问题"这种结构化判定是它舒适区。先按 10-08 调研 §4.2 的 prompt 方案跑 100 个真实触发 clip,得到基线准确率。预期:封闭二分类 + 强 prompt 下 85~95%,很可能直接达标(≥90%),后面全都不需要。
6.2 第二步(条件触发):LoRA 微调
触发条件:prompt 基线 <90%,且错误集中分析显示是"表述理解偏差"(如混淆看手机/拍摄的定义边界)而非"看不清"(后者该回去补数据或提分辨率,微调无用)。
- 工具链:Unsloth(4bit 量化加载 + LoRA,单张 2080 Ti 24GB 可训 7B)+ TRL
SFTTrainer;社区有现成 notebook(4bit + LoRA 在 T4 上训 7B 的完整流程,2080 Ti 显存更大更宽裕); - 数据格式:chat 模板,每样本 = 4~8 帧图(Qwen 多帧输入)+ 封闭式问题 → 目标答案
{"shooting": true/false, "confidence": 0-1, "reason": "一句话"};数据量500~2000 个 clip 级样本(正负各半,正样本来自摆拍录像抽帧,负样本用"看手机/通话/放桌"clip); - 冻结策略:Qwen2.5-VL 官方后训练(SFT+DPO)冻结 ViT 只训 LLM 侧——我们照做,LoRA 只挂 LLM 注意力/MLP 层(r=16~32),ViT 动则小数据极易过拟合且视觉通用能力崩坏;
- 成本:1~2 天(数据整理 1 天 + 训练 2~4h + 评测);
- 风险:微调后通用能力下降 → 微调模型只当"专用复核器",不兼做其他 VLM 任务;保留基线模型做 A/B 对照;
- 再下一档(通常不需要):DPO 偏好对齐(正/负 clip 对)——只有 LoRA 后错误仍集中在"置信度校准"时才上。
7. 视频动作模型微调:适用条件评估
- 工具:MMAction2(SlowFast/I3D/X3D/VideoMAE 全有现成 config,改 data path 就能微调);
- 小数据实测(MDPI 2025,90 视频/每类 20 条):I3D 测试 76.7%、SlowFast 70%——小数据下不占优;
- VideoMAE 是唯一亮点:自监督预训练后只需 3~4k 视频即可下游微调(K400 87.4%),如果项目跑起来后录像库自然积累了 ≥500~1000 条"拍屏/看手机/通话"视频(每条 5~10s,抽 16 帧),再评估它做离线全量行为分类入库(审计报表用,不进实时链路);
- 本期结论:不训。实时链路用 §4+§6 已覆盖,视频模型只在"录像库足够大 + 有离线分析需求"时启动。
8. 评估与验收
| 层 | 指标 | 通过标准(沿用 10-08 PoC 计划,补充分层) |
|---|---|---|
| YOLO 检测 | 各类 AP@50 | hand-phone≥85%(预期 85~93);分距离段报告:1m / 3m / 5m 各报一次(5m 段预期显著下降,决定是否需要 SAHI 切片兜底) |
| 检测+规则触发 | 召回 / 误触发 | 召回 ≥90%;每 8h 误触发 ≤3 次(全帧回放测试集,含负例) |
| VLM 复核 | clip 级准确率 | ≥90%(区分 拍摄/看手机/通话);P95 延迟 ≤60s |
| 端到端 | 3 天真实挂机 | 真拍屏被抓率 ≥80%;误报可解释可申诉;告警延迟 P95 ≤90s |
防过拟合检查:测试集必须是独立工位/独立时间段(不与训练集同场景同视角同一天),否则指标虚高。
9. 风险与缓解
| 风险 | 概率 | 影响 | 缓解 |
|---|---|---|---|
| 自拍数据量不足(员工不配合摆拍) | 中 | 精度上限锁死 | 公开底座先行(§3.3);合成数据补长尾(SYN-PPDB 验证过迁移可行);降低验收标准分层交付(先 3m 内可用) |
| 5m+ 远距手机漏检 | 高 | 漏报 | imgsz 1280;SAHI 切片二次检测(只对含 person 帧);重点工位加近景枪(架构层缓解,非训练层) |
| VLM 微调后通用能力退化 | 中 | 复核器变"傻" | 冻结 ViT;保留基线 A/B;微调模型专用化 |
| 两阶段训练阶段 1 底座质量差拖累阶段 2 | 低 | 返工 | 阶段 1 先单独验证手机 AP@50 ≥80% 再进阶段 2 |
| Ultralytics AGPL | 低 | 法务 | 内部部署不触发分发;备选 RT-DETR/YOLOX(Apache-2.0),训练配方平移 |