Article

计算机视觉数据处理工具实践

计算机视觉数据处理工具开发

这篇文章整理自几篇早期 CSDN 技术笔记,对应的是我在计算机视觉项目中反复遇到的一类问题:模型本身往往不是唯一难点,数据准备、批处理、标注转换和结果拼接这些环节,才是真正拖慢项目进度的地方。

这些工具单独看都不大,甚至不适合作为独立项目展示;但它们指向一个共同的方向:把视觉算法研发中高频、重复、容易出错的步骤工具化。

视频抽帧:从原始视频到可用样本

很多视觉项目的数据来源不是已经整理好的图片集,而是长时间监控视频、巡检视频或现场录像。如果直接固定间隔抽帧,容易出现两个问题:一是大量相似帧造成数据冗余,二是关键片段反而没有抽到足够样本。

我更倾向于把抽帧工具做成“分段配置”的形式:默认使用较低频率抽取全局样本,对关键时间段单独提高抽帧频率。这样既能保留场景覆盖面,也能让异常、目标密集或光照变化明显的片段得到更多样本。

这类工具的重点不在算法复杂度,而在可控性和可复现性:

图像去重:减少重复样本对训练集的污染

视频抽帧之后,重复样本会非常多。完全相同的图片可以通过哈希去重解决,但在视觉数据里,更常见的是“几乎相同”的图片:目标位置略有变化,画面亮度略有变化,或者只差几帧。

我当时使用的思路是先用预训练模型提取图像特征,再通过余弦相似度判断样本是否过于接近。相比文件哈希,这种方法更适合处理近重复图片;相比人工筛选,它又能在大规模数据上保持效率。

工程上需要注意的是阈值不要过于激进。去重的目标不是追求数据集越小越好,而是减少明显重复样本,让训练集保留更多场景差异。对检测和分割任务来说,保留不同光照、不同尺度、不同遮挡程度的样本,比单纯追求图片数量更有价值。

大图裁剪与批量推理

在分割、变化检测、遥感图像和工业检测任务中,经常会遇到输入图像远大于模型训练尺寸的情况。直接缩放整张图会损失细节,直接送入模型又可能受显存限制。

比较稳妥的方案是把大图裁成固定尺寸的小块,批量送入模型推理,再把结果拼回原图坐标系。这个流程看似简单,但细节很多:

后来我更倾向于把这类工具设计成通用流程:裁剪、批量推理、结果还原、边界融合分别拆开,模型只需要实现单块输入的推理接口。这样同一套框架可以复用到分割、变化检测和局部增强等任务中。

标注格式转换:把低价值重复劳动工具化

旋转目标检测、普通检测和分割任务会使用不同标注格式。比如 RoLabelImg 使用类 VOC 的 XML 结构,DOTA 更常见的是四点坐标描述。格式转换本身不难,但人工处理很容易出错,尤其是角度单位、坐标顺序、类别名映射和图片尺寸这些细节。

我对这类工具的要求通常是:

这类小工具不一定有复杂技术含量,但对项目效率很重要。视觉项目里大量时间不是花在模型结构上,而是花在数据清洗、格式对齐、批量转换和问题样本定位上。

相关实现

这些笔记里有一部分后来整理成了轻量开源仓库,更多是工具化沉淀,而不是作为重点作品单独展示:

复盘

回头看这些工具,单个功能都不复杂,但把视觉算法研发中容易被忽视的工程环节沉淀下来之后,后续训练、评估和部署确实少了很多不确定性。

这也是我后来维护一些小型开源工具的原因:它们未必适合作为重点项目展示,但能反映项目中实际遇到的问题,以及我怎么把一次性脚本逐步整理成可复用的东西。

关联原文