ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

机器视觉自动数据标注实战:预标注、像素精度与模型迭代

机器视觉自动数据标注实战:预标注、像素精度与模型迭代 做机器视觉项目最容易被低估的工作我以为是数据标注。以前带过一个金属件外观缺陷检测项目前后收集了六万多张现场图团队三四个工程师标了两周多每天对着屏幕拉框拉得眼冒金星才算把第一版训练集凑出来。后来算法调了一个月精度上不去回头一查才发现标注框边缘普遍偏了2到3个像素部分小缺陷的标注还存在漏框和错框。那一刻我才真正意识到模型精度从来不只是模型的问题数据质量和标注效率才是真正卡脖子的地方。之后我开始认真研究机器视觉里的自动数据标注方法也在几个落地项目里逐步把人工标注替换成“预标注人工复核”的流程整体效率提升非常明显。这篇文章就围绕自动数据标注展开讲清楚底层逻辑、可落地的方案、设备精度变化对标注质量的潜在影响以及我实际踩过的一些坑和搭建工作流的具体思路。不管你是刚接触机器视觉的初学者还是已经在做检测、定位、识别项目的工程师这篇文章应该都能给你一些直接能用的参考。1. 为什么说自动数据标注是机器视觉项目真正的效率瓶颈1.1 标一组数据到底有多慢我算过的一笔账很多刚入行的朋友会把注意力放在模型选型和算法调参上觉得只要网络结构够先进精度自然就上去了。但真正在产线上跑过项目就知道了一个视觉检测系统能不能落地数据层面的工作量往往占掉整个项目周期的六成以上。我举个例子。假设你需要训练一个缺陷检测模型要覆盖划痕、脏污、凹坑、毛刺这几类常见缺陷。一张1440x1080的工业相机图像在标注工具里精确框出所有缺陷区域稍微复杂一点的图可能需要30到60秒。如果一张图上有多个小缺陷每个都要放大确认边界那时间成本更高。一个中等规模的项目初始训练集至少需要一万张有效样本。按平均每张40秒算一个人一天专注标注8小时大概能完成700张左右算上休息和眼睛疲劳应该是600张上下一万人得标16个工作日。如果要两万张那就是一个月起步。我把这类成本列成过一张对比表大家感受会更直观项目规模样本数量单人预计耗时三人团队耗时人工成本估算小样本验证1,000张2天1天3千元左右中等项目10,000张16天5天1.5万元左右大型项目50,000张80天27天7.5万元以上这还只是初始标注。后面模型迭代、发现误检漏检需要补充样本、新增缺陷类型需要重新筛选每一个环节都要继续花标注时间。以前我见过一个项目做到第三轮迭代时团队已经不愿意再标数据了就开始随意框、快速点标注质量直线下滑模型精度也跟着一起崩。数据标注这件事不解决效率和质量的平衡项目做不长。1.2 自动标注不是“偷懒”而是把人的时间花在刀刃上我刚开始跟别人提自动标注时不少同事的第一反应是你这是想偷懒让模型自己标自己那不是循环论证吗但实际上自动标注的核心思路完全不是甩手不管而是把人工从“画框、描点、填类别”这种重复劳动里解放出来转去做更有价值的“审核、判断、纠错”。更准确地说自动标注是一种人机协作机制机器负责快速生成初步标注结果人负责在关键节点上把关。机器干不了判断的活但机器可以在一万张图里快速标出“大概率是缺陷”的位置人工只需要逐条确认这些结果对不对。确认一个预标注框比从零画一个框要快得多。在实际操作中同样的数据量采用预标注加人工复核的流程之后整体标注时间普遍能压缩到原来的四分之一甚至五分之一。此外自动标注还有一层很少有人提的价值一致性。人标注是很主观的同一个缺陷上午标得宽松下午标得严格不同的人对边界的理解也不一样这些都会给模型训练引入噪声。算法自动标注的结果是稳定的、一致的只要规则不变同样的输入永远得到同样输出。这种一致性对模型收敛的帮助是隐性的但确实非常关键。2. 自动标注的底层逻辑预标注、置信度筛选与人工复核闭环2.1 先跑一个“粗模型”再把它的输出变成标注数据自动标注最常见、也最容易上手的实现方式是先用少量人工标注的数据训练一个“种子模型”seed model然后用这个模型去跑剩下的大量未标注图片把模型的预测结果转成标注文件比如Pascal VOC格式的XML、COCO格式的JSON或者简单的YOLO TXT格式。这个过程在业内常被称为预标注pre-labeling。预标注得到的标签不是最终结果而是给人工复核提供一份“草稿”。审核人员在标注工具里打开图片检查预标注框的位置是否准确、类别是否正确不对就拖动几个像素改一改对了直接点确认。这个速度比从零开始画框快很多。种子模型怎么来两个渠道。一个是用现成的开源模型和权重直接在项目数据上做领域适配比如用COCO上预训练的检测模型先跑一遍虽然它大概率不认识你的零部件和缺陷但一些小目标位置还是能提供参考另一个是人工先花两三天标一批质量高的数据500到1000张就够用这批数据训练第一个版本。后者在实践中更可控也更推荐。2.2 置信度阈值怎么定低阈值召回还是高阈值精准用模型跑预标注后模型的每一个预测框都会带一个置信度分数。这个分数直接决定你的人工复核工作量。如果阈值设得太低比如0.2模型会把大量“不确定”的区域也框出来预标注结果里混着很多假目标人工复核时反而要花更多时间去删除误框效率不升反降。如果阈值设得太高比如0.95预标注框确实很准但漏掉的目标也多人工还是在很多图上找不到任何预标注等于退回全人工标注。根据我的实际操作经验阈值选择要考虑缺陷的形态特点目标类型建议置信度阈值原因大目标、边缘清晰的缺陷0.6 - 0.7预标注框准错误少小目标、密集缺陷0.3 - 0.5小目标本身就容易漏检降阈值保证召回语义模糊、边界不清晰的目标0.4 - 0.6低置信度结果更需要人工判断索性都标出来类别容易混淆的场景0.7以上避免预标注类别错误误导审核这里还涉及一个IoU筛选的概念。当一个目标周围同时出现多个重叠的预测框时模型常见的候选框冗余现象需要做NMS非极大值抑制合并。合并时的IoU阈值一般取0.5左右比较稳妥。如果项目对定位精度要求很高比如需要精确到亚像素级别这个阈值可以适当提高。2.3 人工复核闭环自动标注不等于无人标注我一直强调一个观点自动标注不能完全替代人工但可以极大减少人工量。具体做法是把自动标注结果导入CVAT、LabelStudio这类支持预标注导入的工具让审核人员在工具里对结果逐条确认。要注意的是人工复核不是“看了没问题就行”而是要形成一个闭环人工修正后的数据集要定期合并回训练集重新训练模型然后用新模型更新预标注的质量。这就是模型自举的迭代过程。每一次循环预标注的准确率都会提高人工需要干预的量会越来越少。我在一个PCB焊点检测项目里完整跑通过这个闭环。第一轮预标注准确率大概只有70%也就是说100个预测框里有30个需要调整人工复核一版数据花了小半天用复核后的数据重新训练后第二轮预标注准确率升到了92%人工复核时间压缩到40分钟到第三轮预标注准确率已经达到97%以上注意事项主要是处理个别边缘模糊的焊点。整个流程走到第三轮的时候团队已经完全建立起信心了后续新增数据基本不需要再投入大量人工。3. 五种能直接落地的自动标注方案与适用场景3.1 基于目标检测模型的预标注适合缺陷检测、零件定位这是适用范围最广的一种方案。你手上有一批已经训练好的、效果还不错的检测模型YOLO系列、Faster R-CNN、EfficientDet等直接用它对未标注数据做推理把检测框、类别、置信度信息写入标注文件。以YOLOv8为例实际操作非常简单。你可以写一个批量推理脚本遍历目标文件夹里的所有图片调用模型推理然后把结果保存成YOLO格式或XML格式。伪代码大致长这样from ultralytics import YOLO model YOLO(best.pt) results model.predict( sourceunlabeled_images/, conf0.35, # 置信度阈值 save_txtTrue, # 保存YOLO格式标签 save_confTrue, # 标签文件里带上置信度 imgsz640 )跑完之后每张图会对应生成一个同名txt文件里面是“类别 x_center y_center width height confidence”这样的记录。之后写个小脚本把这些txt转成CVAT能识别的格式导入进去人工复核直接在CVAT网页里操作就行。这里要注意的是预测框的坐标需要根据原始图像尺寸做归一化换算。如果模型推理时做了letterbox缩放YOLO默认会你保存出来的坐标是相对于缩放后图像的导入标注工具前必须映射回原图尺寸否则框会整体偏移。这个坑我见过不止一次不少人就是漏了这一步导致复核的人看到所有框都漂移浪费时间排查。3.2 基于传统图像处理的自动标注不用训练模型的快速方案有朋友问过我说项目比较急不想先花两天标种子数据训练模型有没有更快的自动标注方法答案是有那就是传统图像处理。传统图像处理做自动标注的核心思路是用稳定的像素规则去判定目标区域。最常见的是Blob分析连通域分析先对图像做灰度化、滤波、二值化、形态学处理然后把满足面积、圆度、宽高比等条件的连通域框出来当成标注框。这个方法在背景稳定、目标与背景对比度明显的场景下非常好用。比如背光环境下的零件轮廓检测、固定工位上的表面划伤检测、螺丝有无漏装判断等。我自己做过一个项目检测的是白色陶瓷表面的黑色脏污采用固定阈值二值化加面积筛选几百张测试图里自动标注的准确率达到95%以上基本不需要人工修正。模板匹配也是传统方案里很重要的一个方向。比如要标注定位Mark点或者固定形状的零件你可以先手动框一个标准模板然后在批量图上用归一化相关匹配找目标位置再根据模板尺寸自动生成标注框。这种方式尤其适合规则工件的定位数据准备。传统图像处理的优点是快、稳、不依赖GPU一分钟处理几十张图很轻松。缺点是泛化能力弱光照稍微一变二值化阈值可能就不适用了。所以用这个方案时最好在脚本里加入简单的图像灰度统计灰度均值或标准差超出设定范围就自动告警提醒你检查参数。3.3 基于分割模型与后处理的像素级标注有些场景需要的不只是检测框而是像素级的分割掩码比如缺陷面积占比分析、精确计算划痕长度和宽度或者目标形状不规则的场景。这种标注用矩形框根本无法满足得用分割模型来做预标注。操作流程是先用少量人工分割标注可以用LabelStudio这类工具画多边形训练一个分割模型比如DeepLabV3、U-Net、Mask R-CNN或者最新的分割一切类模型然后对未标注图像进行推理得到逐像素的掩码再通过OpenCV的轮廓提取把掩码转成多边形点集保存为标注格式。这里有几个实操细节值得单独说一下。第一掩码转轮廓时一定要做一次轮廓简化用approxPolyDP方法把密集的边界点压缩到合理的数量否则一个复杂缺陷可能生成几千个点标注工具会卡死模型训练读数据也会变慢。第二分割模型对小目标的预测通常存在边缘锯齿生成标注后最好做一次形态学闭运算把边缘修平滑。第三建议在转换时过滤掉面积小于一定阈值的连通域这些大概率是噪声不该出现在标注结果里。输出掩码的参考代码片段转轮廓加过滤如下import cv2 import numpy as np def mask_to_polygons(mask, min_area100, epsilon2.0): contours, _ cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) polygons [] for cnt in contours: area cv2.contourArea(cnt) if area min_area: continue approx cv2.approxPolyDP(cnt, epsilon, True) polygons.append(approx.reshape(-1, 2).tolist()) return polygons这几十行代码配合一个分割模型的批量推理脚本就能把人工分割标注的工作量减少80%以上。剩下的工作主要是确认边缘和微调。3.4 主动学习让模型告诉你该标哪些图自动标注除了“怎么标”还有一个同样重要的问题是“标哪些”。传统做法是随机从数据池里抽图去标但数据池里大量图片可能是相似的、简单的真正值得标注的难例反而被淹没。主动学习的思路跟这个完全不同。它的核心是让模型自己估计对每张图的不确定性用不确定性分数对未标注数据排序人工优先标注那些模型最“拿不准”的图片。这些图片往往包含了模型当前的盲区标注后带来的信息增益远大于随机抽样的图片。不确定性度量有两种常用的方式。一种是最小置信度法一张图里所有预测框的最小置信度越低说明模型在这张图上越不确定另一种是边缘采样法对每个目标取排序前两位的类别概率差值差值越小越不确定模型在犹豫到底是A类还是B类。在实际项目中我通常把主动学习得到的“难例清单”交给复核人员让他们优先处理这些图。这个策略在缺陷类型稀疏、类别不均衡的项目里尤其有效。比如有一个项目里某类缺陷只占总样本的2%随机抽样大概率抽不到模型永远学不会这一类。主动学习就能把这类低置信度的图片捞出来让标注资源精准投放到需要的地方。3.5 规则引擎加多模型投票把工程经验固化成标注规则最后一个方案可能有点小众但在工业场景里非常可靠。它的核心是把现场工程师的经验转化为结构化规则然后与模型输出结合进行多策略联动标注。举个例子。某零件检测项目中我知道缺陷只会出现在特定的两个区域且真实缺陷的面积介于200到5000像素之间灰度均值低于周围背景30以上。那我的自动标注规则就可以写成模型预测框落在指定区域且框内灰度特征符合缺陷特征才认为是有效标注否则自动丢弃。这个规则能过滤掉大量模型误检让预标注质量从80%提升到96%。多模型投票则是同时用两个或三个模型可以是不同结构或相同结构不同初始化对同一张图推理只有超过半数模型认为某个位置有目标时才保留标注。这种方法能显著降低单独一个模型系统性误检的影响。缺点是推理时间翻倍但对于标注这种离线任务来说多花点时间完全没关系。规则引擎加多模型投票是我个人最推荐在正式项目里采用的组合因为它把“算法的不确定”和“工程经验的确定性”结合在了一起。数据标注不是越快越好而是要在快和安全之间找一个平衡点。4. 实测踩坑像素精度变化如何毁掉一套自动标注流程4.1 现场复现一次镜头松动的连锁反应前面讲的都是方法论实际操作中还会遇到一些防不胜防的坑其中最典型的就是成像系统的像素精度变化。文章开头提到热搜词里有“机器视觉动了什么会导致像素精度变化”我觉得这个问题值得专门拉出来说因为它在自动标注流程里会被放大得特别明显。我经历过一次印象很深的故障。当时某个项目已经跑完三轮自动标注迭代预标注准确率稳定在95%以上一切看起来都很顺利。但到了第四轮复核人员突然反馈说所有标注框都偏移了3个像素左右。刚开始我怀疑是代码里坐标换算出了问题排查了好久没有找到原因。直到我重新拍了一张标定板照片跟项目初始记录的基准图像比对才发现是相机镜头固定环松了整个镜头在重力作用下略微下垂导致成像发生了几个像素的偏移。镜头松动的连锁反应是这样的偏移后的图像跟模型训练时的图像分布产生了细微差异模型对新图的推理结果也跟着偏移预测框整体漂移自动标注结果自然不准。如果不及时发现用这套数据训练模型模型对位置的判断也会带上系统性偏差严重一点的会让检测框始终对不齐目标直接影响后续定位、抓取或者测量。4.2 像素精度变化对自动标注质量的几种典型影响把这类问题抽象出来看导致像素精度变化的原因主要有四种第一光学硬件的物理变化。相机高度变化、镜头焦距松动、镜头畸变、光源位置偏移、滤镜污损等都会改变像场上物体实际所占的像素数量或位置。第二相机参数的变化。拍摄分辨率被误改、曝光时间变化导致运动模糊、增益过高导致噪声增大、白平衡漂移导致颜色失真这些都会影响模型的输出稳定性。第三被测物状态的变化。工件摆放高度不一致浮高、传送带抖动导致成像瞬间忽远忽近、产品规格切换后形状尺寸变化这些会让固定的相机内外参数不再适合新批次的产品。第四图像预处理参数被改动。灰度化算法变化、滤波核大小修改、缩放尺寸调整这些程序层面微小的变化会直接改变每个目标在图像中的位置和尺寸映射关系。像素精度变化对自动标注的影响通常表现为标注框整体偏移、标注框尺寸偏大或偏小、小目标被漏标、目标边缘提取不准尤其对分割标注是致命的。不管哪种表现最后都会把带噪声的数据引入训练集侵蚀模型精度。4.3 如何监控和校准像素精度保住标注质量吃过一次亏之后我在所有自动标注流程里都加入了像素精度监控环节。核心思路是每天开始批量标注之前先拍摄一张标定板或者选择一个固定的基准工件图像与初始基准图做对比计算像素当量和位置偏移量。像素当量的计算公式很简单像素当量mm/pixel 实际物理尺寸mm / 对应像素距离pixel比如标定板上两个已知间距为10mm的标记点在图像中相距500像素像素当量就是10/5000.02mm/pixel。如果这个值在某一批拍摄中变成了0.021说明成像系统可能发生了高度变化或镜头焦距变化需要立即停机检查。我推荐用下面这个简单的监控策略每天开始标注前拍一张基准图计算并记录当天的像素当量与首次记录的基准值对比偏差超过0.5%就告警每周做一次完整的镜头清洁和紧固检查每次更换光源、调整相机位置之后强制重新标定一次在自动标注脚本里预置一个“基准图校验”步骤检查不通过就暂停批量任务这个策略实施之后自动标注流程里再没出现过因为成像漂移导致的大规模标注失效。说到底自动标注的前提是“成像条件稳定”如果这层地基都不稳上层模型再怎么强也扛不住。5. 搭建一套自动标注工作流从数据管理到模型自举5.1 数据准备命名规范、目录结构与初筛很多团队做数据管理是比较随意的图片散落在各个同事的电脑里命名格式五花八门类别标签叫法不统一。这种混乱在自动标注流程里会成为一个大问题因为自动标注依赖脚本批量处理脚本对命名和目录的依赖是非常敏感的。我从实际项目里总结了一套目录结构大家可以参考dataset/ ├── raw/ # 原始未标注图像 │ ├── batch_001/ │ ├── batch_002/ ├── labeled/ # 已标注数据包含标注文件 │ ├── images/ │ ├── labels/ ├── reviewed/ # 人工复核后的最终数据 │ ├── images/ │ ├── labels/ ├── export/ # 导出为训练格式的数据 ├── config/ # 标注配置、类别定义、阈值参数 └── models/ # 种子模型和迭代模型权重图片命名建议统一为“项目名_相机编号_日期_批次_序号.jpg”例如“metal_surface_cam1_20240115_b02_1342.jpg”。这样的命名方式可以让你在标注数据出问题时顺着文件名反查现场条件快速定位是哪个批次、哪台设备拍摄的。初筛环节容易被人忽略。大量现场图像可能是过曝的、失焦的、完全没有目标的空白图。这些图直接进自动标注流程没有意义还浪费模型推理时间。我一般会写一个快速筛选脚本统计图像的灰度均值、方差和清晰度指标如拉普拉斯方差把低质量图片单独移动到review_bad文件夹供人工决定是删除还是保留。5.2 预标注脚本的工程落地预标注脚本是整个自动标注流程的核心。设计时要考虑几个工程问题输入路径、输出格式、模型加载方式、异常处理、日志记录。我的建议是做一个可配置化的批处理入口把模型路径、置信度阈值、IoU阈值、输入输出路径都放到配置文件里不要硬编码在脚本里。这样每次跑不同批次的数据时只需要改配置不需要改代码。配置文件示例config.yamlmodel: weights: models/round3_best.pt imgsz: 640 conf: 0.40 iou: 0.50 input: images_dir: dataset/raw/batch_005 image_ext: [.jpg, .png, .bmp] output: label_format: voc # voc, coco, yolo save_dir: dataset/labeled/batch_005 visualize: true vis_dir: dataset/labeled/batch_005/vis脚本运行完成后建议自动生成一份统计报告包括处理的图片总数、预测框总数、平均置信度、每类的预测数量。这些指标是判断“批量数据能否进入下一步人工复核”的依据。比如平均置信度突然从0.85掉到0.6大概率是新批次数据分布变了需要停下来检查。5.3 人工复核工具与抽检比例人工复核环节选对工具能省很多事。我目前用得比较顺手的是CVAT它支持导入预标注结果审核员直接在网页上拖拽调整界面也相对友好。LabelStudio也很不错尤其在分割标注和OCR标注场景。X-AnyLabeling这类开箱即用的工具对单人小项目更友好因为它内置了多种预标注模型。在复核环节抽检比例是个需要平衡的问题。标全量复核人工成本下不来标太少质量问题发现不了。我的实践策略是按置信度分层抽检高置信度区间0.9以上抽检3%-5%主要确认是否存在系统性偏移中置信度区间0.6-0.9抽检20%-30%重点检查类别是否标错低置信度区间0.6以下全量复核这部分是最容易出错的地方抽检机制可以这样设计设定一个总抽检比例比如15%如果抽检过程中发现的错误率超过5%则扩大抽检范围直到错误率降到阈值以下才判定本批次合格。5.4 模型迭代节奏与数据版本管理模型自举迭代不是杂乱无章地跑而是要有清晰的节奏和版本管理。我建议按轮次迭代每轮做四件事用当前所有已标注数据训练一个新模型用新模型对新增未标注数据做预标注人工复核预标注结果生成新的标注数据把新标注数据合并进训练集进入下一轮每一轮迭代产生的模型权重、训练数据、标注配置都要打上版本号并存到单独的目录里。这样做有一个实际好处如果某一轮迭代后模型精度反而下降了你可以快速回退到上一轮的模型和数据对比差异定位问题而不是在一锅粥里捞针。数据版本管理建议使用DVCData Version Control这类工具或者在目录命名上做文章。即使团队没有上DVC只要在目录名里带上轮次和日期比如dataset_reviewed_r3_20240120也比不命名好得多。命名的规范程度决定了后续排查问题的速度。迭代的终止条件也很重要。我一般会观察两个指标预标注准确率和人工复核平均耗时。当预标注准确率连续两轮维持在95%以上且人工复核单张耗时稳定在5秒以内时说明自动标注流程已经收敛不需要继续投入太多人工了。这时候可以把精力转移到其他更紧迫的问题上。6. 打光与成像质量决定自动标注上限的第一个环节6.1 为什么说“标不准不是模型的错是成像的错”聊到这一节我想把话题拉回到机器视觉项目最基础的环节打光成像。这几年接触的项目越多我越觉得一个项目的成败在上相机之前就已经决定了。很多自动标注效果不好的问题本质上是成像质量不行而不是标注算法不够好。举个例子。一个项目要检测透明薄膜表面的划痕现场用的是普通的条形白光结果划痕在图像里的对比度非常低人的眼睛都很难看清预标注模型当然更是抓瞎。后来换成了低角度环形光划痕变成了明亮的线条对比度一下子就上来了。同样是那个模型几乎没改任何参数预标注准确率从40%直接跳到了90%以上。打光在自动标注里有一个特殊的地位它是所有算法之前的第一道关卡。如果成像阶段没能把目标特征凸显出来后面再怎么上模型、调参数都是在一个残缺的信息源上浪费时间。而且成像系统的稳定性直接决定了自动标注结果的可复现性。光源亮度漂移5%灰度直方图整体移动模型的输出分布也会跟着变标注结果自然不稳定。6.2 打光方案的基本选型与验证方法打光方案选型是一个很大的话题这里我只针对自动标注相关的关键点做展开。最基础的原则是目标特征与背景的灰度差异越大越好光照的空间分布越均匀越好光源的时间稳定性越高越好。常见的光源类型与适配场景我整理了一个参考表光源类型适合场景典型效果环形光源表面划痕、印刷字符、金属表面突出表面细节均匀度较好条形光源大平面检测、边角检伤覆盖面大适合大面积均匀照明背光源轮廓测量、定位、透明件检测突出被测物轮廓背景亮目标暗同轴光源高反光表面、芯片表面、划痕避免反光干扰成像均匀低角度光源凹坑、划痕、压印利用阴影突出三维特征验证打光方案是否适合自动标注有一个很实用的办法连续拍摄同一工件100张图像计算每张图的灰度直方图看分布是否稳定。如果直方图漂移明显说明光源或者环境光有干扰这样的成像条件不适合做自动标注。还可以用方差和信噪比来衡量缺陷区域的灰度与该位置的背景灰度差值至少要超过该区域噪声标准差的3倍目标才算稳定可测。6.3 用图像质量指标为自动标注把关最后再分享一个我在项目里坚持的小习惯每次跑自动标注之前先对图像集做一次质量体检。体检项包括清晰度拉普拉斯方差、亮度均值、对比度灰度标准差、噪点程度平滑后与原图的差异、颜色偏差如果有彩色信息。每个指标都有一个预设的正常范围超出范围的图像在预标注之前就被拦截下来。这样做的理由是简单而有效的自动标注是一个批量流程个别图像的异常可以被抽检发现但如果整个批次的图像质量分布系统性偏离了模型训练时的分布那这一批预标注结果很可能是系统性失效的。提前用图像质量指标把关可以避免一批数据带着严重问题进入训练集。具体的代码实现不难OpenCV几行就能做完。以清晰度检测为例import cv2 img cv2.imread(sample.jpg, cv2.IMREAD_GRAYSCALE) laplacian_var cv2.Laplacian(img, cv2.CV_64F).var() print(fLaplacian variance: {laplacian_var:.2f})拉普拉斯方差低于某个阈值比如100到200具体要根据项目标定就判定为模糊图自动隔离出来。回顾一下这些年的项目实践我最大的体会是数据标注环节的自动化和工程化需要在算法理解、光学成像、工程管理三个维度同时发力。单纯从算法角度做预标注很快会遇到瓶颈单纯追求速度而忽略像素精度监控最后会在模型迭代时加倍偿还。我现在养成的习惯是每次批量跑自动标注之前固定花几分钟检查基准图和图像质量指标确认一切稳定后再放手去跑。省下来的这些时间比起半夜发现一批标注废掉然后重新来过性价比不知道高到哪里去了。
返回列表