设备记住什么,比记住多少更要紧
先算清楚存储这笔账
门店想在本地留多久的录像,不是拍脑袋定的。粗算的式子只有三个乘数:
路数 × 码率 × 时长
八路 1080p、每路 2 Mbps 的店,一天下来接近 170 GB;留三十天就是五个 T。这个数一旦超过设备的盘,方案就会往两个方向走:降码率,或者降「记住的粒度」。
降码率是大家熟悉的做法:从 1080p 降到 720p,从全程录像改成事件触发。前者让远处货架的商品认不出来,后者让「没触发的那三秒」永远消失。
还有第三条路:画面不进盘,只把压缩后的特征和判断存下来。设备容量有限时,这条路几乎是必选项。问题在于,摘要该记什么。
记忆容量固定时,写入是不可逆的
用固定容量存历史,每一次写入都在挤掉旧内容。这一层机制在论文里叫循环记忆,做法是把历史压进固定数量的「槽」,每读一个新片段更新一次。
于是每次写入前都有两个决定:这一刻写不写,以及写多少。
多数实现把这两件事合成一件——每段画面都写,都写同样的量。省事,但两种错误就没法分开调了:
- 写多了,噪声把有用的事挤出去。查询时读到一堆飞虫、光影、通道里的风。
- 写少了,那一刻根本没进去。事后要查「十点二十那单为什么少了」,翻不出来。
arXiv 上有一篇工作(2610.34180)把这两个决定拆开测了一次,结论有点反直觉:方向取决于场景的信息密度。
- 在信息密集的任务里(大量特征都要记住),每次全量写入明显更好,准确率 0.472 对 0.337。漏写的损失大过干扰的损失。
- 在稀疏事实的任务里(长文里埋一条信息),学会「跳过」明显更好,0.222 对 0.048,差了四倍多。这时干扰占多数,过滤比全收值钱。
还有一条:门控之后那套「按内容自动决定写多少」的规则,在两个任务上都没赢过固定分配。判断「写不写」有效,判断「写几个」还没兑现。
落到门店:两种店,两种策略
信息密集的店,怕漏写。
典型是生鲜称重档口和现制档口:连续动作、每件商品都要过秤、客单价高、事后争议多。这类场景如果为了省存储去做「跳帧记录」或者「只记异常片段」,丢的往往正是关键那几秒——打秤时手上多拿了一件、袋子没换、称完又放回去。
对这类店,正确的做法是把写入做全,宁可从别的地方省(降分辨率、缩短保留天数),也不要在这里做过滤。
干扰密集的店,怕多写。
典型是夜间无人值守的门店、后场通道、门口外摆区。一天里绝大多数画面是空的:风吹、光影移动、猫、飞虫、保洁拖地。把这些全写进去,等于用有限的记忆容量装了一整天的空白。
对这类店,过滤的价值远大于全收。判断标准也很朴素:一天下来,有多少比例的录像是「事后一定不会有人去查」的。如果这个比例超过九成,过滤就该做。
同一个连锁,两种店不该用同一套参数。 这是最容易犯的错:总部配一套策略下发所有门店,结果生鲜店漏记、通道店塞满。写入策略要按店型、按时段分开配。
三个需要事先确认的事
第一,这里的「记忆」不是「录像」。 摘要记忆存的是压缩后的表示,能回答「这个时段有没有异常、大概什么类型」,不能回答「这个人穿什么颜色的衣服」。门店要的是后者,那得靠录像和检索,别把两件事混在一个预算里谈。
第二,过滤规则要能被质疑。 系统判定「这段不重要」而跳过,事后出了事,谁解释它为什么跳过?至少留一条可查的痕迹:跳过的时间段、跳过的依据。黑盒过滤在争议场景里站不住。
第三,容量上限要写在纸面上。 不是「能存很多」,而是「存多少条摘要、超出后覆盖最旧的还是拒绝写入」。溢出时的行为比容量本身更重要:覆盖最旧,意味着最久以前的事查不到;拒绝写入,意味着系统会在某个时刻停止记忆而不报警。
验收怎么做
- 按店型分别测。 挑一家生鲜档口店、一家夜间无人店,各跑一周,看同一套策略在两边分别漏了什么、塞了什么。
- 造一次可核对的事件。 约好时间,在摄像头下做一次已知动作(拿一件商品、放回、走开),然后去系统里查——能不能查到、查到几条、有没有把旁边无关的动作一起记进来。
- 看覆盖与跳过。 把存储写满,看它怎么处理新数据;再挑一个被跳过的时段,问供应商凭什么跳过。这两件事很多人等到出事那天才第一次问。
- 断电重启后还在不在。 摘要记忆如果只在内存里,一次断电就全清。要确认它落了盘,以及落盘的频率。
一句话
门店的记忆有上限,所以「记住什么」比「记住多少」更值得先想清楚。信息密集的档口宁可少存几天也别漏记,干扰密集的通道宁可多过滤也别塞满——一套参数下发全部门店,通常两头都不讨好。