>>零、前言做不了太多技术细节相关的东西

作者 | 海滨
来源丨GaintPandaCV
编辑| 极石平台
积石简介
这篇文章不仅涵盖了技术,还有一些与项目管理、需求沟通相关的内容。 不会涉及太多技术细节,主要是一些方法论。 >>
零,前言
我从事这个方向的项目已经有一段时间了。 作为一名算法工程师,我领导过多个大大小小的项目。 有些已成功交付,有些则未完成。 回顾整个项目过程,尽管有坎坷,但收获还是很多的。 我觉得这篇文章应该写成2023年的年终总结。
这篇文章不仅涵盖了技术,还包含了一些项目管理、需求沟通相关的内容,也算是我自己的一点点感悟。
表面缺陷检测项目更常被同事称为“质检项目”。 我总觉得这个范围太大了。 虽然PPT上写着我们可以做任何事情,但是当面对一些棘手的需求时,实际上我们还是做不到。
本文不会涉及太多技术细节,主要是一些方法论。
1. 任务定义
表面缺陷检测任务是指对产品表面进行仔细检查和评估,以发现和识别任何不符合质量标准或设计要求的表面缺陷。 该任务的目的是确保产品的外观质量和功能满足预定的要求,从而提高产品的整体质量和客户满意度。
表面缺陷检测广泛应用于许多行业,以确保产品质量符合标准,增强产品竞争力。这包括
制造业:
材料加工行业:
纺织服装业:
食品及包装行业:
成就:
能源行业:
这些行业的表面缺陷检测不仅关系到产品质量,还可能影响产品的安全性、耐用性和市场竞争力。 因此,通过严格的表面缺陷检测,可以保证产品在设计、生产和使用过程中的安全性和可靠性。
我和一位行业领导者谈论了AOI行业。 个人感觉AOI侧重于电子设备的检测:
AOI(自动光学检测)是一种利用光学原理和自动化技术对印刷电路板(PCB)或其他电子元件进行表面缺陷检测、尺寸测量和焊点检查的技术。 AOI系统通常包括光源、光学镜头、图像采集设备和数据分析软件等组件。
2.需求沟通
从任务定义可以看出,该类型项目属于定制项目,以ToB为主。 有些规则是行业内的,有些规则是工厂自己定义的。
前期的需求沟通主要关注缺陷的类型以及缺陷的重要性。 质量标准、检测标准和评估可行性将在后面进一步讨论。
识别出缺陷类型后,还需要评估对算法的要求,包括实时性、准确性、检测范围等。此外,在项目立项阶段,还需要确定验收标准。
缺陷样本的收集也是重中之重。 如果客户要求的某类缺陷很难采集,需要评估是否可以人工创建一些,通过算法创建一些样本,或者评估具体采集时间是否满足项目要求。 。 例如,当实时性要求较高时,乙方需要要求甲方购买计算能力更好的硬件,或者更多数量的计算卡。 验收标准一般都存在准确性,指标必须明确界定。
检测范围是指检测到什么类型的缺陷、哪些缺陷是允许漏检的、哪些缺陷至少检测到一个等。最常见、最麻烦的就是检测“异物”。 如果客户定义是一个开放集,则需要仔细考虑,因为目前还无法实现监督目标检测的常见深度学习方法。 如果客户定义是一个闭集,那么就需要统计每个“异物”类型缺陷的可收集样本数量,并根据新的缺陷类别重新评估。
需要注意的是,对于此类项目来说,无论多好的检测算法,也仅限于检测,不具备修复缺陷的功能。 这需要在需求的早期沟通过程中进行调整。
另外,发送会议绩效报告是常见的做法,在邮件底部留下是对甲方和乙方领导的解释。
3. 成像解决方案
成像解决方案的选择取决于多种因素,包括待检测物体的材料和表面特性、所需的检测精度、检测速度和成本。 以下是一些常见的成像场景:
光学显微镜成像:
光学检测成像系统(如CCD/CMOS相机):
红外成像:
紫外成像:
激光扫描成像:
超声成像:
从算法工程师的角度来看,我们往往关注的是整个系统的节拍和成像所花费的时间(工控机最终获得单张完整图片所花费的时间),以及最终的图像是否是正确的。单通道或多通道,以及 2D 或 3D 检测。
成像时有两点需要注意:
必须需要验证过程,以确保每种类型的缺陷都可以拍照、易于区分,并且不受正常区域的影响。 对图像的后续修改成本非常高,并且会影响整个身体。
成像方案必须保证便携性,即在验证阶段使用的实验条件下的成像效果在正式投入使用时仍能非常接近原始成像效果。
4. 缺陷收集和对齐
缺陷图片的采集是一项体力活,主要分为两种方法:
人工采集:依靠甲方客户工作人员采集样品,然后乙方或甲方派人手动拍照。
半手动采集加自动采集:这种采集方式常见于钢板、布料纺织疵点检测领域。 此类任务的一个重要特征是相机拍摄的每张图像在空间上都是对齐的,即每个位置都在图片上。 的语义不会改变。 这一特性保证了可以使用一些半监督或无监督的异常检测方法从大量采集的正常样本中获取异常样本。 随后需要采集固定类别的样本,例如划痕、裂纹等,此时需要人工训练CNN分类模型,对缺陷样本进行细粒度分类。
缺陷对齐过程已在需求沟通阶段概述。 在缺陷对准过程中,更多的是对准细节。 这时就需要判断缺陷标注问题,是帧还是像素,帧是包围矩形框还是旋转矩形。 这需要根据客户需求、缺陷描述的准确性、算法实现的难度等综合考虑。
5. 整体推理服务框架
表面缺陷检测算法常被实现为目标检测算法,具有输入图像大、实时性要求高的特点。
表面缺陷检测算法的框架总结如下:
大图像预处理:大图像的预处理包括去除非检测区域和对特定异常进行分类。 这些一般可以通过手写一些特征来处理(比如去除黑边)。 有时还需要训练一些模型来处理(比如针对大图像特定缺陷的分类),需要提取一些检测区域(ROI区域、Region of Interesting)。
大图像上的缺陷检测:有些缺陷很容易定位,并且在大图像上具有明显的特征,因此可以将它们放在大图像上进行检测。 应该注意的是,大图像上的缺陷检测非常耗时。 因此,如果后续步骤需要在小图像上进行检测,那么从整体系统延迟的角度来看,大图像的检测应该尽可能放在小图像上。
根据ROI区域切割小图:如果有ROI区域,则根据ROI区域坐标进行切割。 这里有两个超参数,即小图像要切割多大以及步长是多少。 这些可以根据检测精度要求、系统延迟要求和小图像目标检测器来确定。 确定输入图像的大小。
小图像预处理:小图像预处理包括小图像异常的分类和判定。 在正常的检测过程中,正常样本占大多数。 这种耗时较少的分类器可以阻止后续的大图像分类。 正常小图像上的物体检测。
小图片上的目标检测:小图片上的目标检测主要侧重于识别小目标,即在大图片上无法检索,一般在7x7像素到30x30像素之间。 小目标的检测是一个难题,但在工业界,提高精度和保证推理速度的最快方法是添加数据和堆栈卡。 在模型选择上,自然是选择在推理延迟范围内精度高、其他方面也相对合适的模型。
检测结果的合并:最终结果的输出需要将小图和大图的检测结果进行合并,包括将小图的检测坐标恢复到大图的位置,以及将检测的目标帧进行合并结果(由于切割小图像时重叠造成的)
6. 模型训练和调优迭代
模型训练和调优主要包括以下过程:
数据预处理:这是模型训练的第一步,包括收集数据、清洗数据、处理缺失值、数据标准化或归一化、特征选择和特征工程等。目的是将原始数据转换为适合模型训练的形式。
选择模型:小数据使用小模型,大数据使用大模型。 对于简单任务使用小模型,对于复杂任务考虑大模型或小模型的组合。 例如,一些小型检测模型足以用于ROI区域检测。 检测小目标的模型只要小到满足要求就可以使用。 没有必要动不动就使用变形金刚和大型模型,尽管它们很受欢迎。
训练模型:使用带标签的数据集训练模型。 调整几次参数就够了。 就我个人而言,我通常将学习率设置为原来的0.1,然后加载预训练参数,其余保持一致。 当然,我在时间充裕的时候也做了一些创新,这在后面的章节中会讲到。
模型评估:使用验证或测试集评估模型的性能。 常见的评价指标包括准确率、召回率、F1分数、mAP等。
调整模型:根据模型评估的结果对数据进行调整。 注意,这是数据。 对于经过学术界验证的论文,除非任务特殊,一般不会修改模型。 指标低一般是数据有问题。 只需找到注释器来修复数据即可。
在模型训练和过程中,我通常会根据一些框架编写一些适配的小工具,例如
获取每个缺陷类别的检测指标
可视化数据集注释
视觉模型预测
模型预测被转换为预注释,并对某些数据赋予伪标签。
获取坏基和原始注释,方便注释人员修复
最佳分类阈值搜索
常用的应该如上图所示。 我比较习惯工具的复用性,所以对于一些简单的需求,我还是会写一个脚本,嵌套到模型检测训练框架中来工具化。
7. 模型部署
模型部署是将经过训练的模型转换为实际可用服务的过程。 模型部署主要包括以下工作内容:
环境配置:为模型部署准备合适的环境,包括硬件资源(如CPU/GPU、内存、存储等)、操作系统、依赖库和框架等,一般由供应商准备,算法工程师打包所有服务都放入 Just docker 中。
模型转换:将训练好的模型转换为适合部署的格式。 这可能包括将模型转换为特定格式(最常见的是 ONNX),或优化模型的代码以提高推理速度。
服务构建:将模型集成到服务器或应用程序中,以便可以远程调用。 这通常涉及编写API接口代码并创建相应的服务架构,例如微服务、RESTful API等。
性能优化:确保模型部署后能够高效运行。 这可能包括压缩、量化模型或优化服务架构以减少延迟并提高吞吐量。
测试:在部署之前和之后进行全面的测试,以确保模型按预期运行和执行。 一般需要找测试同事来测试,并给出测试报告。
监控:部署监控系统来跟踪模型的性能,包括准确率、响应时间、资源消耗等指标。 对已部署系统的准确性和资源消耗进行压力测试是必不可少的一环,这涉及到服务可用性。
日志记录和错误处理:配置日志记录系统,以便可以跟踪和分析模型的问题。 同时,实现错误处理机制,以便在出现异常时能够给出适当的反馈或解决方案。
文档和培训:为使用模型的人员提供必要的文档和培训,以确保他们了解如何正确使用模型和服务。
安全合规:确保模型部署符合数据安全和隐私保护的监管要求,包括数据加密、模型加密、用户认证、访问控制等。
部署服务架构的优化体现在以下原则:
充分利用加速卡的GPU/NPU硬件资源。 例如,尝试对输入视频或图片使用硬解码。 硬解码后的输出显然是放在显存上的,这样后续的预处理就不需要经过CPU了。 对于输入数据的预处理也尽可能在加速卡上完成。
模型并行策略:例如切割成小图后,将多个小图放在不同的计算卡上进行推理,充分利用多卡推理资源。 这就涉及到负载均衡技术,比如如何将计算职责合理分配到不同的计算设备上。 我的个人博客有文章《单机多卡AI模型推理场景下计算资源分配问题的思考》。 欢迎大家阅读。
服务并行策略:运行多个推理服务,使用nginx代理模式,提供对外接口,提高服务的健壮性和并发性。
8. 节省推理延迟的一些技巧
图像输入尺寸
输入的图像不一定是正方形的,可以按照等比例压缩。 例如,原始图像的长宽比为4:1,那么在训练分类或检测模型时,长宽比可以保持在4:1,就可以满足性能要求。 要求也可以大大减少,从而节省推理时间。
输入通道尺寸
灰度图的通道数为1,无需输入即可满足模型要求。 在通道维度中再复制两个点。 我们可以通过改变模型来修改模型输入通道数为1,而不影响预训练的加载。 欢迎阅读我博客的其他文章《使用Imagenet预训练进行灰度图像分类时的卷积核压缩Trick》
模型量化
目前,检测模型和分类模型的8位量化方案已经非常成熟。 如果优化后仍不能满足系统时延要求,可以考虑量化模型。
9、后续运行维护
表面缺陷检测是制造业中一项重要的质量控制任务。 在服务有效期内,需要对软件服务进行运营和维护。 后续运维工作主要包括以下几个方面:
数据管理与分析:采集、存储检验数据并定期分析,优化检验流程,提高检验效率。 这可能涉及到使用专业的数据分析软件对测试结果进行统计和分析。
交付人员培训:对交付人员进行培训,包括模型升级策略、不良案例数据收集、模型服务部署等。
故障响应与反馈:在检测过程中,如果检测服务出现问题,需要快速响应,查找原因并修复。 同时,记录下出现的问题和解决办法,避免以后出现类似问题。
总结
一直想写这篇文章,但一直抽不出时间。 我终于在2023年腊月二十九到三十的晚上完成了。我很享受这些项目的工作,并从客户的认可中获得满足感。 记得本科时,我作为下级计算机的软件开发人员参与了管道检测项目。 我一直觉得设计视觉算法的人都非常优秀。 几年后,我也转变了角色,成为一名算法工程师。 命运总是美好的不是吗? 工作中暂时不会再参与此类项目,所以写了这篇文章作为总结。

公众号后台回复“数据集”即可获取100+各方向深度学习资源。
积石干货
技术专栏:|||
极致视角动态:|
技术概述:|

转载请注明出处:https://www.twgcw.com/gczx/12709.html
