工业视觉智能实战经验之IVI算法框架2.0

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 工业视觉智能团队在交付了多个工业视觉智能质检项目后,发现了工业视觉智能的共性问题和解法,打造了工业视觉智能平台,通过平台的方式积累和提升工业视觉的通用能力。在平台建设上最核心的能力是算法能力。算法能力包括不断增强的单点算法能力和不断扩充的新算法能力。那么如何将算法能力输出到平台呢?答案是算法框架。算法框架是算法能力的载体,通过它能够将能力输出到平台。

image.png

作者 |
来源 | 阿里技术公众号

导语

工业视觉智能团队在交付了多个工业视觉智能质检项目后,发现了工业视觉智能的共性问题和解法,打造了工业视觉智能平台,通过平台的方式积累和提升工业视觉的通用能力。

在平台建设上最核心的能力是算法能力。算法能力包括不断增强的单点算法能力和不断扩充的新算法能力。那么如何将算法能力输出到平台呢?答案是算法框架。算法框架是算法能力的载体,通过它能够将能力输出到平台。同时通过算法框架,我们可以进行进行算法能力的研究和扩充。所以算法框架设计和演进对于算法能力不足的探查、算法能力增强、算法能力扩充和算法能力输出都是至关重要的。

一 视觉AI框架应用在工业上的问题和我们的改进点

在图像识别领域,分类、检测、分割是使用最广泛的算法。目前人脸、城市、医疗、工业、娱乐、安全等大量场景都需要图像识别算法。在不同的场景或同个场景出现变化时,算法需要训练或重新训练。

现有的训练框架的问题和我们的改进点:

  • 任务兼容:

    • 问题分析:一般是处理单一类型问题(如检测框架、分类框架、分割框架),这样导致训练多个不同任务类型的算法(比如分类和检测任务)时,往往需要使用多个框架。
    • 改进点:我们将工业上应用的主流任务兼容在一个框架中。
  • 操作解耦:

    • 问题分析:一般在模型训练时候数据处理、模型训练和效果的评估往往是耦合的,这样导致训练时需要按照耦合的流程进行训练,使用相同数据训练时需要不断重复处理数据,模型训练和效果评估不能同时进行,评估过程占用训练时间和资源导致无法高效执行。现有框架一般是基于固定的学术数据集进行训练,在训练到指定时间进行模型评估。
    • 改进点:我们将主要功能切分为八个模块,可使用八个模块构建需要的流程,流程构建过程灵活。本框架模块之间是相互独立的,可以独立高效执行。
  • 评估展示:

    • 问题分析:现有的训练框架一般没有评估效果展示功能或只有简单的评估效果展示功能。由于现有训练框架一般基于固定的学术数据集进行训练,在评估时一般只做简单的性能指标展示。这样导致缺少训练的模型评估效果展示或效果展示过于简单,无法发现模型训练和数据的问题。
    • 改进点:我们在模型评估模块提供了详细且经过实战经验验证科学的评估内容,并且可以在工业视觉智能平台中展示,用户可以发现模型训练和数据本身的问题,进一步调整数据或训练。
  • 数据集分析:

    • 问题分析:现有的训练框架一般没有数据集分析功能。这样导致无法在训练之前发现数据集的特点,只能使用默认配置或个人经验去训练模型。
    • 改进点:我们设计的框架含有详细和科学的数据集分析功能,并且对齐数据集分析和模型训练模型推理过程的一致性,可以在训练之前分析数据集的特征,减少盲目训练的情况;
  • 数据处理可视化调试:

    • 问题分析:现有的训练框架一般没有数据处理和数据增强的可视化调试功能。这样导致无法查看数据处理或数据增强的效果,无法确认单步数据处理效果和多部数据处理的叠加效果。
    • 改进点:我们在数据载入时采用可扩展设计,将可视化模块嵌入到流程中,可以任意节点查看数据效果。
  • 部署对接:

    • 问题分析:一般没有与模型部署对接的部分。现有的训练框架一般没有与模型部署对接的部分。这样导致自己开发与部署对接,过程工作量大,耗时耗力且容易出错;如果是不同任务类型的算法部署,则上述工作量需要翻倍。
    • 改进点:我们开发了模型转换模块和对应的一套模型部署框架和系统,可以快速将模型转换到可以部署的状态,并可以使用模型部署框架和系统运行。在多个任务中,本框架与对应配套部署框架已完成结果对齐,用户无须进行相关开发;
  • 扩展性:

    • 问题分析:现有的训练框架模块的扩展性不强,模块增加操作时比较麻烦。这样导致开发者难度提升,团队合作开发难度大。
    • 改进点:本框架大多数模块基于可扩展模块开发,开发者需要按照要求开发操作即可嵌入到模块中,降低开发难度且易于团队开发。

二 IVI算法框架详细介绍

IVI算法框架是一个模块解耦可扩展的深度学习视觉模型训练框架。该框架主要负责三个任务:分类、检测、分割。该框架主要分为八个模块:数据准备、配置生成、数据载入、数据集分析、模型训练、模型推理、模型评估和模型转换。数据准备模块、数据载入模块、数据集分析模块、模型评估模块是继承于可扩展模块的,模块增加操作时只需要根据扩展模块的要求编写操作即可。开发者开发难度下降,团队合作开发更顺畅。

image.png


图1:主要模块示意图

image.png

图2:主要任务示意图

image.png


图3:可扩展模块实现示意图

可扩展模块主要分为四个部分。流程配置文件描述模块使用的算子和算子执行的流程。算子执行流程分为初始化、构建和执行三种状态。算子执行流程在初始化时,会根据算子注册表获得已注册的算子集合。算子执行流程构建时,根据流程配置文件,寻找算子注册流程中已注册的算子,并根据流程配置文件的内容初始化算子,并根据流程配置文件组合算子执行的流程。在算子执行流程执行时,根据算子执行流程对输入数据进行操作。可扩展模型的扩展性主要体现在以下算子新增的扩展性和算子执行的扩展性两个方面。算子新增的扩展性在增加新的算子时,只需要按照固定规则将算子加入到算子集合中即可。算子执行的扩展性体现在算子执行是根据配置文件描述进行的,配置文件描述可以对算子执行顺序、次数和参数等多方面进行控制。

以【阿里云的智能工业·工业视觉智能平台】的一个训练任务为例,如图4所示。在平台上开启一个默认训练任务,任务可以分为以下四个步骤:数据选择、训练、评估和模型提取。其中数据选择部分会调用数据准备、配置生成、数据集分析的模块。训练部分会调用数据载入、模型训练、模型推理和模型评估的模块。评估部分会调用模型推理和模型评估模块。模型提取部分会调用模型转换模块。

1 数据准备模块

image.png

图4:平台训练流程示意图

image.png

图5:数据准备模块示意图

数据准备模块是继承于可扩展模块的。主要分为三个步骤。

  • 第一步读取数据配置文件。
  • 第二步根据数据配置文件构建数据处理流程。
  • 第三步进行多任务兼容的数据快速处理,根据数据处理流程将平台标注数据转换为多任务兼容的数据结构。多任务兼容的数据结构为多任务兼容的模型训练提供基础。

image.png

图6:平台数据准备示意图

数据准备模块的数据配置文件由默认配置文件和平台交互信息融合获得。如图平台数据准备示意图所示,左侧添加数据集表示选择的数据集。右侧标签选择页面的勾选表示选择的类别。右侧标签选择页面的操作对应数据准备模块算子。当在平台上添加数据集时会跳转到下图所示页面,在此页面可以勾选需要加入训练的数据集。同时可以选择数据集扩充倍数。

image.png


图7:平台添加数据集示意图

image.png


图8:数据准备模块算子集合示意图

数据准备模块算子包括类别扩增、类别屏蔽、子图切割、异常数据清洗、数据集划分等算子。以类别扩增为例,如图6所示,在阿里云的智能工业·工业视觉智能的平台上,可以针对指定标签进行扩充且扩充倍数可选择(如图9所示)。

image.png

图9:平台类别扩增倍数选择示意图

image.png


图10:数据准备模块处理示意图

数据准备模块如图10所示,数据准备模块获得原始图像和原始标注数据,构建数据处理流程并进行处理后,形成处理后图像和多任务兼容格式训练数据。多任务兼容格式训练数据表示形成的训练数据能够同时被此框架中检测、分割、分类等多种训练任务使用。例如选择了异常处理操作,处理后图像和训练数据中不会包含原始图像中的异常图像。例如选择了子图切割操作,处理后的图像可能是原始图像对应的子图。如将处理后图像和多任务兼容格式训练数据传到OSS存储中,相同训练任务可以选择直接继承数据。不需要再次调用数据准备模块。解决了使用相同数据训练时需要不断重复处理数据的问题。

2 配置生成模块

image.png


图11:配置生成模块示意图

配置生成模块如图11所示,数据经过数据准备模块处理后会生成描述文件。配置生成模块接收默认配置、数据准备模块结果和平台配置信息后,形成全局配置。如图12所示,平台模型训练时会进入此页面。其中自定义训练参数配置属于平台配置信息。平台配置信息包括模型选择配置、训练高级参数配置和图像预处理参数配置。如图13所示,模型选择配置负责训练的加载的初始模型。如图14所示,训练高级参数配置负责训练学习率、训练迭代数等相关配置。如图14所示。图像预处理参数配置负责训练时图像的输入分辨率、图像增强等相关配置。全局配置是作为数据载入、数据集分析、模型训练、模型推理、模型评估和模型转换的配置文件。

image.png


图12:平台模型训练相关配置入口示意图

image.png


图13:平台模型训练模型选择配置示意图

image.png

图14:平台模型训练高级参数配置示意图

image.png


图14:平台模型训练图像预处理参数配置示意图

3 数据载入模块

image.png


图15:数据载入模块示意图

数据载入模块是继承于可扩展模块的。如图15所示,数据载入模块分为三个步骤。

  • 首先读取全局配置文件,获得数据载入相关的信息,其次根据全局配置文件构建数据载入处理流程,最后进行数据载入。数据载入的输入数据是数据准备模块产生的数据。数据载入读取全局配置文件中相关内容,如是否使用专家数据、图像预处理参数中的图像输入分辨率和数据增强的一些操作。

image.png


图16:数据载入操作算子集合示意图

  • 数据载入模块的第二步是构建数据载入流程。如图16所示是数据载入的一些操作算子集合。数据载入流程根据配置信息从操作算子中选择相应算子并串联形成操作流程。数据载入模块有两种状态(目前工业视觉智能云平台未开启此功能)。分别是运行状态和调试状态。运行状态与其他模块无交互。图16中的效果可视化在调试状态时使用,在数据载入流程的任何位置可以嵌入效果可视化模型,用来可视化当前图像状态、类别状态、实例状态。这样就可以查看数据处理或数据增强的效果,确认单步数据处理效果和多部数据处理的叠加效果。图17所示为实例扰动增强操作可视化的效果,可视化时将实例相关信息“画”在图像上,不同类别用不同颜色表示。每个框代表一个实例。经过实例扰动增强后,可以直观看到实例的增加和实例在图像中的情况。

image.png


图17:数据载入操作算子可视化示意图

4 数据集分析模块

image.png


图18:数据集分析模块示意图

数据集分析模块是继承于可扩展模块的。如图18所示,数据集分析是集成数据载入模块的,分为四个步骤。

  • 第一个步骤是读取全局配置文件,获得数据集分析相关的信息。比如图像预处理参数中的图像输入分辨率和数据增强的一些操作。
  • 第二步根据配置构建一个数据载入模块的相关流程。
  • 第三步根据配置构建分析算子集合。
  • 第四步串联数据载入和数据集分析算子集合进行处理(数据集分析算子集合如图19所示)。处理完成后所有结果可以在工业视觉智能平台的网页上展示。

image.png


图19:数据集分析算子合集示意图

5 模型训练模块

image.png

图20:模型训练流程示意图

image.png

图21:平台模型训练展示示意图

如图20所示,模型训练是集成数据载入模块的,分为四个步骤。

  • 第一个步骤是读取全局配置文件,获得模型训练相关的信息:比如图像预处理参数中的图像输入分辨率和数据增强的一些操作;比如高级参数配置中的总训练迭代数、默认参数配置文件加载和模型保存间隔数;比如模型选择中的预训练模型。
  • 第二步根据配置构建一个数据载入模块的相关流程。
  • 第三步根据配置构建算法模型和模型训练流程。
  • 第四步串联数据载入和模型训练流程并且运行。

如图21所示,模型训练会按照间隔数保存到本地或对应的OSS中,并且在平台中会展示候选模型和实际产生时间。同时模型训练的LOG文件也同步保存到本地或对应OSS中。模型训练的损失值(LOSS)可以通过通讯的方式传递到工业视觉智能平台的后端程序中,图中LOSS曲线就是将训练框架返回的损失值展示在前端。需要说明的是在此构建算法模型和模型训练流程是兼容多种任务的,并且数据准备模型的数据是兼容多种任务的。这样框架就可以进行多任务兼容的模型训练。同时,因为数据集分析模块和模型训练模块都是基于数据载入模块的,所以数据集分析功能不仅可以按照原图和标注进行分析,还能完全模拟训练的数据处理方式进行分析。这样就可以在训练之前发现数据集的特点或者提前查看数据处理和数据增强操作的结果,根据数据分析结果不断调整各种配置进行训练。而不是只使用默认配置或者个人经验去训练模型,避免了盲目训练。同时结合数据载入调试功能后,可以更深入地分析数据操作对数据集的影响,进一步提供算法优化方案。

6 模型推理模块

image.png

图22:模型推理流程示意图

如图22所示,模型推理是集成数据载入模块的,分为四个步骤。

  • 第一个步骤是读取全局配置文件,获得模型推理相关的信息:比如图像预处理参数中的图像输入分辨率等操作;比如模型训练按照间隔保存的模型。
  • 第二步根据配置构建一个数据载入模块的相关流程。
  • 第三步根据配置构建算法模型和模型推理流程。
  • 第四步串联数据载入和模型推理流程并且运行。模型推理的结果会保存到本地或者OSS中。

7 模型评估模块

image.png

图23:模型评估流程示意图

模型评估模块是继承于可扩展模块的。如图23所示,模型评估是集成数据载入模块的,分为四个步骤。

  • 第一个步骤是读取全局配置文件,获得模型评估相关的信息,主要是需要评估的指标。
  • 第二步根据配置构建一个数据载入模块的相关流程,这里载入数据时不载入图像,载入数据准备产生的GT结果(Ground Truth 结果、标注的真实结果)和模型推理产生的对应AI结果(算法预测的结果)。
  • 第三步根据配置构建模型评估流程。
  • 第四步串联数据载入和模型评估流程并且运行。

模型推理的结果会保存到本地或者OSS中。模型训练模块、模型推理模块、模型评估模块独立存在,评估过程不会占用训练时间和资源,整体可以高效执行。

image.png

图24:模型评估整体评估部分示意图

模型评估在工业视觉智能平台上分为整体评估结果、详细评估结果和检测结果展示。
图24所示是模型整体评估结果,左侧展示了评估的图像和标注数量,右边展示了整体算法指标。图中是目标检测的评估结果,所以展示了不同IOU(交并比)下的mAP指标。
图25所示是模型评估的详细评估部分展示,左侧可以调节详细评估时不同类别的阈值,并且展示该类别的图像数量和标注数量。右侧是该类别在不同阈值下的召回率和精确度曲线。

如图26所示,根据详细评估中阈值设定,可以展示正确检测、漏检和误检三个部分,用来更加直观地查看模型在不同阈值下的效果和问题。点击正确检测、漏检、误检中的图像,平台会跳转到如图27的页面,页面展示了原图、GT的框和类别、AI算法预测的框和类别,这样可以单张地查看预测的结果和标注框的差距。工业视觉智能平台可以进行多模型评估功能。

如图28和图9所示,可以选择多个候选模型进行模型评估。可以看到本框架和平台结合的模型评估除了进行学术算法指标的展示之外,还展示了不同阈值下的各项指标。和不同阈值下正确检测、漏检和误检的情况。

image.png


图25:模型评估详细评估部分示意图

image.png


图26:模型评估检测结果部分示意图

image.png

图27:模型评估单张检测结果示意图

image.png


图28:平台多模型评估模型选择部分示意图

image.png


图29:平台多模型评估模型开始部分示意图

8 模型转换模块

image.png


图30:模型转换模块示意图

模型转换分为三个步骤。

  • 第一步是读取全局配置文件,比如图像预处理参数中的图像输入分辨率等操作。
  • 第二步根据全局配置文件中的信息,生成模型推理时使用的配置文件。
  • 第三步将模型训练保存的原始模型转换成推理时可用的加密模型。

相关文件保存在本地或上传到OSS。其中生成模型推理时的配置文件和加密模型都是和对应模型推理库对应配合设计的,能够直接使用。这样用户不需要开发与部署对接,减轻了工作量。并且本框架是兼容不同任务类型的算法的训练。模型和任务相关信息会被保存在配置文件中。

三 总结

本文章主要介绍了工业视觉智能团队实战经验中设计和演化出来的IVI算法框架,并结合公共云平台功能做了更详细的介绍。而在工业视觉智能实战中,我们也会遇到一些工业视觉智能场景业务形成的图像域差异、图像分辨率、目标缺陷形态、图像背景干扰的算法上的挑战,在不断分析和实验后我们的算法也往更高精度、更高效和工业内更通用方向不断演化。同时因为工业视觉智能场景业务形成的模型更新需求频繁、算法定制化高、算法精度高、需求响应速度要求高等问题,我们在算法模型组合、算法方案设计、算法方案评估、行业产品化方面也有了自己的算法模型组合的产品和整套的方法论。


“后红海”时代, 阿里资深技术专家揭秘当下大数据体系

海量的数据以及其蕴含的价值,吸引了大量投入,极大的推动大数据领域技术。大数据技术发展正当时,阿里巴巴资深技术专家为你详解当下大数据体系,分析大数据体系4大热点,详解9大领域架构分布、预测未来演进4大技术趋势,概述有待探索3大疑问。

相关文章
|
3月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
154 1
|
24天前
|
存储 缓存 算法
前端算法:优化与实战技巧的深度探索
【10月更文挑战第21天】前端算法:优化与实战技巧的深度探索
20 1
|
23天前
|
算法
”回溯算法“框架及练习题
”回溯算法“框架及练习题
33 0
|
2月前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
56 2
|
2月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
57 4
|
3月前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
256 7
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
3月前
|
机器学习/深度学习 人工智能 算法
【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow
眼疾识别系统,使用Python作为主要编程语言进行开发,基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法,通过对眼疾图片4种数据集进行训练('白内障', '糖尿病性视网膜病变', '青光眼', '正常'),最终得到一个识别精确度较高的模型。然后使用Django框架开发Web网页端可视化操作界面,实现用户上传一张眼疾图片识别其名称。
81 9
【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow
|
3月前
|
算法 安全 数据安全/隐私保护
Android经典实战之常见的移动端加密算法和用kotlin进行AES-256加密和解密
本文介绍了移动端开发中常用的数据加密算法,包括对称加密(如 AES 和 DES)、非对称加密(如 RSA)、散列算法(如 SHA-256 和 MD5)及消息认证码(如 HMAC)。重点讲解了如何使用 Kotlin 实现 AES-256 的加密和解密,并提供了详细的代码示例。通过生成密钥、加密和解密数据等步骤,展示了如何在 Kotlin 项目中实现数据的安全加密。
130 1
|
3月前
|
机器学习/深度学习 存储 算法
强化学习实战:基于 PyTorch 的环境搭建与算法实现
【8月更文第29天】强化学习是机器学习的一个重要分支,它让智能体通过与环境交互来学习策略,以最大化长期奖励。本文将介绍如何使用PyTorch实现两种经典的强化学习算法——Deep Q-Network (DQN) 和 Actor-Critic Algorithm with Asynchronous Advantage (A3C)。我们将从环境搭建开始,逐步实现算法的核心部分,并给出完整的代码示例。
250 1
|
3月前
|
算法 安全 数据安全/隐私保护
Android经典实战之常见的移动端加密算法和用kotlin进行AES-256加密和解密
本文介绍了移动端开发中常用的数据加密算法,包括对称加密(如 AES 和 DES)、非对称加密(如 RSA)、散列算法(如 SHA-256 和 MD5)及消息认证码(如 HMAC)。重点展示了如何使用 Kotlin 实现 AES-256 的加密和解密,提供了详细的代码示例。
76 2