本节摘要:模型的水准上限,有一半以上写在数据里。本节讲清人脸数据集该有的构成——身份数、每人样本量、光照/姿态/遮挡的多样性如何铺——以及清洗、过滤与增强的实操脚本思路,并列出 LFW、CasWeb、MS-Celeb-1M 这类可借鉴的公开基准与它们在标注口径上的坑。
网上有"人脸识别准确率 99%"的宣传,可一换到自己的闸机、自己的光线、自己的族裔分布,数字就垮了。这不是模型不行,而是"别人的数据"扛不了你的场景。人脸识别最隐蔽的返工源头就是数据——你以为够了,实际光照、姿态、样本数的分布没铺匀,模型只会在那一个角落自嗨。把"数据喂够没有"这个沉默的胜负手拎出来,是本节要做的事。
判断你的数据是否"够",不要只看总量,要看一个更伤人的问题:把人群按你的场景条件切一刀,最常见的几个角落分别有没有足够的样本。分布不匀,总量再大也是偏科。
很多人低估一件事:一个可用的人脸数据集,清洗、标注、合规的投入往往超过模型训练本身——模型训练只占周期一小段,数据准备常占一大半。所以别在模型上反复折腾,却舍不得在数据上花功夫,杠杆方向反了。
另一个隐性成本是"版本管理"。数据会持续补、会迭代,没有规范的版本号和统计报告,下次一个模型上线跑出奇怪数字,你根本说不清是数据换过还是模型改过——给每个数据集版本打个标签、记下身份数/样本数/分布概况,是性价比最高的工程投入。
数量再大,覆盖不到就没用。一个可识别的人脸数据,得在几个维度上尽量铺匀:
# 粗口径:检查"每人多少张、条件是否多样"(示意) import collections per_person = collections.Counter(p.label for p in samples) few = [pid for pid, n in per_person.items() if n < 3] # 样本太少的身份 print("样本过少的身份数:", len(few), " 占总身份%", round(100*len(few)/len(per_person),1))
这个检查的价值:它把"数据够不够"变成可量化的问题,而不是一句空喊。还可以再往前一步:把每个样本的标注字段(光照、姿态、是否遮挡)统计成占比,看看有没有某一类是零——那是即将在某处爆雷的信号。
工程起步常参考公开数据集:
它们的价值在"给出可比口径",而不是替你打包训练集——直接拿别人的分布训练,往往水土不服;跑一个公开基准只能告诉你"没跑坏",不能告诉你"跑得对",真正的验收永远来自贴近你线上条件的小集。
清洗去垃圾:剔除机身图、卡通图、多人框错位、模糊抖动的样本。过滤防重合:删掉同一身份在库内重复或与他人交叠的样本,防"训练与验证同源"。增强扩多样:旋转、平移、缩放、翻转、颜色抖动,甚至加模拟遮挡,让模型在有限样本里见到更多"形变"。
| 步骤 | 删/加什么 | 目的 | 过头风险 |
|---|---|---|---|
| 清洗 | 机身图、模糊、错框 | 去垃圾、保下限 | 误删稀有难例 |
| 过滤 | 重复/重合/错标身份 | 防训练验证同源 | 过度去重变样本不足 |
| 增强 | 旋转平移翻转抖动遮挡 | 扩多样对抗样本少 | 增强到失真 |
假如你要落地一个门禁场景、但手上没有贴线数据,可以照这套流程搭:第一,明确采集条件——固定机位、你的光照分布、常见的姿态与遮挡范围,把"现实里会见的变体"理成清单;第二,动起来采——在不同时段、不同光照、让你团队的人换姿势、戴墨镜/口罩,各录数十组,凑出几百上千个样本,注意保证身份数多、每人均量够;第三,清洗——把画面里有遮挡到关键点都看不见的、模糊的、重复的样本剔除;第四,留出独立的评估集——把一部分人从训练里彻底划出去,只用于最终验收;第五,打统计报告——记录身份数、样本数、各条件占比,作为版本的 DNA。一次认真搭的标准,比日后反复补数据省钱得多。
数据分布最容易被量能误判的地方,是"局部密集"。也许你的总量好看,但细看却发现:九成样本都是同一两个人、同一种光照、同一个角度,剩下散落的零星难例几乎没有——模型只会在这个密集的证据域里自嗨,一到真实场景就崩。所以检查数据时别只看总量,要按"身份数分布、每人均量的直方图、各条件占比"切一个多维视角,看有没有哪个角落近乎空白。发现密集就用欠采样、发现空白就针对性补采,双向校准后才谈得上分布合理。
数据增强是对抗样本稀少的免费武器,但有个极易踩的坑:把增强当成真相。过度旋转、过度加噪、把增强后的相对失真样本也标为"true",会让模型学到不该掌握的东西,显得指标很好、真实稍变形就崩。正确姿势是:增强只在训练用,评估与上线始终用真实未增强的样本;而且每年要留一组贴近线上条件的真实难例来验收,别只在模拟里自嗨。增强帮你在训练里见更多形变没问题,但"验收必须用真实世界"这条底线,任何时候不能破。
一句话直觉:数据的"匀"比"多"致命得多。模型学的是分布,分布不贴合场景,再大的库也只是错位的放大器。
数据备齐,下一节把训练炉火点起来——怎么把这些样本烤成一张能认人的网络。