模型效果不好时,大家很容易先看模型。
换一个权重,调一组阈值,换一版训练参数。这些当然有用,但在无人机巡检项目里,我现在会先往前看一层。
这批图怎么来的。哪些帧被留下。标签是谁定的。标注有没有复核。平台里配置的类别,和训练数据里的类别是不是同一套。
很多问题不是模型那一刻才出现的。
样本先决定了模型能看见什么
无人机画面里的目标变化很大。同一个目标,在低空、斜拍、俯拍、远距离、逆光、遮挡、压缩后的视频帧里,长得都不一样。
如果数据集只收了最清楚、最正、最容易认的图,训练结果在演示样例里会很好看。到了真实巡检,模型就开始犹豫。
尤其是小目标。飞得高一点,车、围挡、坑塘边界都会变小。人眼觉得还能看见,模型拿到的像素已经很少。
所以数据集建设不能只问有多少张图,还要问这些图覆盖了哪些角度、距离、光照和遮挡。
抽帧不是越多越好
视频抽帧很容易让人产生一种安全感。帧数一多,样本量看起来就上来了。
但相邻帧高度相似。连续抽太多,只是在重复同一个场景。模型看到很多张几乎一样的图,实际学到的变化并不多。
我更愿意把抽帧和筛帧分开。
| 步骤 | 目的 |
|---|---|
| 抽帧 | 从视频里取出候选图像 |
| 筛帧 | 去掉重复、模糊、无效和场景过近的帧 |
| 分层 | 按高度、角度、目标大小和场景类型分开 |
| 标注 | 按统一标签口径画框或轮廓 |
| 复核 | 检查漏标、错标和边界不一致 |
没有筛帧和复核,抽帧越多,后面越难管。
标签口径要早定
我遇到过一种很烦的问题。数据集里一个叫法,模型配置里一个叫法,业务页面上又是另一个叫法。模型可能已经认出来了,但平台不知道它属于哪个业务类别。
这会带来几类后果。
- 页面显示空类别;
- 统计口径混乱;
- 线索流转映射失败;
- 后续复盘时不知道问题来自训练、配置还是平台解析。
所以模型版本启用前,要先核对数据集标签、模型版本标签、平台业务字典和前端展示名称。
这件事听起来像配置工作,实际是 AI 工程能力的一部分。
验收别只看命中图
一批模型拿来验收,如果只看命中的样例,很容易过于乐观。
我现在更关心三类样本。
| 样本 | 看什么 |
|---|---|
| 命中样本 | 类别、置信度和框的位置是否合理 |
| 漏检样本 | 目标尺寸、遮挡、角度和分辨率是否有规律 |
| 误检样本 | 背景纹理、阴影、临时材料和相似目标是否混淆 |
这些结果要回到数据集里。该补样本补样本,该改标签改标签,该调业务阈值调业务阈值。
留给下次
YOLO 项目别把数据集当成训练前的准备材料。它是整个识别链路的一部分。
模型能不能用,很多时候从第一批样本怎么选、标签怎么定、复核怎么做时就已经开始决定了。