AIStore PoC

一句话结论

产品设计是「多路账本 + 双路径告警(L1 藏匿 → L2 VLM)∧ POS 未对账」; 但当前公开数据集过夜评测的 P/R/F1,量的是 EventEngine 姿态藏匿启发式 (手腕进躯干/髋 + take/near_missing 上下文), 不是 VLM,也不是 ReID 分类器。 正例规则:clip timeline 出现任意一次 conceal / pocket / under_clothes。

设计方案 vs 当前实际

左侧是门店产品目标;右侧是 Layer B 公开 clip 评测实际跑通的路径。

设计方案 门店端到端

  • 感知:YOLO 行人 + Pose;可选开放词汇商品支路
  • 身份:OSNet ReID → 全局顾客 C#(跨镜会话,不当偷标签)
  • L1 事件:take / return / conceal(启发式或 hybrid MLP)
  • 账本:Taken → Hidden → Checkout → Unreconciled
  • Path1:可疑 L1 → L2 VLM 诊断 steal / conceal_unpaid
  • Path2:taken_proxy > checkout_hard(POS/小票优先)
  • 告警:dual_path_and — 两边同时成立才推人审
YOLO+Pose→ ReID C#→ EventEngine→ Ledger→ L2 VLM∧ POS→ 告警

当前实际 Layer B 过夜评测

  • 单路 RGB clip:无 POS、无多镜会话、无人工复核环
  • YOLO11n:只做人框 / 弱 take 上下文,不输出偷标签
  • YOLO11n-pose:手腕 vs torso/hip → 藏匿信号
  • OSNet:跑了但不参与 steal 判定
  • EventEngine hybrid:多数配置无 conceal ckpt → 等价启发式
  • L2 VLM:代码已有,过夜 / clip 评测未接入计分
  • 正例:任意 conceal 事件 → pred_positive
YOLO+Pose→ ReID→ conceal 规则→ Ledger/POS→ L2 VLM→ clip P/R/F1
pred_positive = any(timeline.type ∈ {conceal, pocket, under_clothes})

边界:这些数字是 Layer B 子指标,≠ 门店端到端产品准确率。 Demo 若开 narrative_fallback,更不能当准确率证据。详见 docs/PRODUCTION.md · outputs/OVERNIGHT_EVAL_REPORT.md。

各模型在「偷不偷」里扮演什么

阶段 模型 / 组件 设计角色 评测里是否判偷
检测 YOLO11n 人框、弱商品框,支撑 take 否(间接上下文)
姿态 YOLO11n-pose 关键点 → 手腕进躯干/髋 是(主信号)
ReID OSNet 跨镜身份 embedding 否
事件 EventEngine 发 take / conceal 等 timeline 是(最终正例)
藏匿 MLP ConcealmentScorer 可选;无 ckpt 则启发式分 通常关 / 等效启发式
L2 Qwen / stub steal / conceal_unpaid 否(未进 clip 计分)

当前效果(过夜 Layer B,去重后)

生成时间约 2026-09-10 · 报告 outputs/OVERNIGHT_EVAL_REPORT.md

UCF clips F1
0.64
n=86 · P0.97 R0.47 · 最强公开 clip 信号
HF MNNIT F1
0.46
n=182 · P0.79 R0.33
PoseLift 帧 F1
0.53
n=2380 · 纯关键点手腕规则
Zenodo F1
0.041
n=794 · P0.75 R0.021 · 高精极低召回
HF Dataset 2.0 F1
0.00
n=194 · tp=0 fn=109 · 域失败
数据集 n P R F1 读数
Zenodo 全量 794 0.75 0.021 0.041 规则很严:几乎不误报,但漏掉绝大多数真偷
HF MNNIT 182 0.79 0.33 0.46 部分清晰藏包动作能命中;仍大量零事件 FN
HF Dataset 2.0 194 0 0 0 当前启发式在该域零召回
UCF clips 86 0.97 0.47 0.64 近景偷拍更易触发手腕进躯干
PoseLift 2380 帧 0.46 0.63 0.53 不跑 RGB 管线,只评关键点规则本身

样例分析

下列来自 UCF / MNNIT / Zenodo 过夜结果:看「为什么判正 / 为什么漏」。 共同模式:命中时几乎总有 n_take ≥ 1 且 conceal 发出;漏检多为整段 events_total = 0(姿态或 take 上下文都没过门)。

TP · UCF

Shoplifting048_x264_2.mp4

标签偷;约 2.57s / 2.77s 发出 2 次 conceal,同时有 3 次 take。近景口袋动作满足「手腕进髋 + 近期拿取」。

pred_positive=true · n_conceal=2 · n_take=3 · events=5
FN · UCF

Shoplifting001_x264_9.mp4

标签偷,但 timeline 全空。常见原因:遮挡/远景导致手腕未进 torso 框,或商品消失未形成 take → context_ok 失败。

pred_positive=false · n_conceal=0 · n_take=0 · events=0
FP · UCF(仅 1 例)

Shoplifting009_x264_0.mp4

文件夹标 normal,却触发 1 次 conceal。说明规则偏「藏匿姿态」代理,正常理货/整理口袋也可能过线。

pred_positive=true · n_conceal=1 · n_take=1 · @4.8s
TP · MNNIT

Shoplifting (11).mp4

1 take + 1 conceal 即整 clip 判正。高精(P≈0.79)来自「只有明确藏包才开火」。

pred_positive=true · n_conceal=1 · n_take=1
FN · Zenodo 主因

main100_Trim2.mp4 等

Zenodo 422 个 FN 里大量 events=0。远景监控 + 弱商品检测 → take 稀少,conceal 门几乎不开 → R≈0.02。

典型:conceal=0 · take=0 · 全量仅 tp=9
域失败 · Dataset 2.0

shop_lifter_*.mp4

109 个正样本全部零事件。同一套手腕规则无法迁移到该语料视角/动作分布。

tp=0 · fp=0 · fn=109 · F1=0

PoseLift 可视化样例

帧级评测不跑完整 RGB pipeline,直接对 AlphaPose 关键点套「手腕进躯干」规则。 下图为骨架条带 / 正负 mask 时间线(若图片 404,请先跑 scripts/viz_poselift.py)。

PoseLift 01_0222 stick strip
01_0222 · 91 帧 / 正样本 30 帧 · 骨架条带(手腕进躯干时段)
PoseLift 01_0222 mask timeline
01_0222 · GT mask 时间线对照 · 规则 F1≈0.53、AUC≈0.50(接近随机排序)
PoseLift 01_0225 stick strip
01_0225 · 另一段骨架条 · 可看出姿态规则对「藏」敏感、对「偷语义」不敏感

读数含义(给评审)

  • 高 P、低 R(Zenodo / 部分 MNNIT):当前代理标签很保守,宁可漏也不乱报;适合当「可疑片段召回器」的弱基线,不适合直接当偷盗分类器。
  • UCF 相对最好:近景、动作夸张,手腕规则更吃得开;推到真实店内远景会掉回 Zenodo 形态。
  • 要逼近设计方案:需要接入 L2 VLM 计分 + POS 未对账双路径,并用 Layer C 门店会话评测,而不是继续只优化 clip 级 conceal 命中率。

相关页面