跳转到内容

AI算法开发流程

AI 算法开发主要按照以下流程进行。

Step阶段内容
1概要把握 AI 算法开发的整体流程。
2需求分析整理要实现的功能,明确所需的子算法。
3数据准备收集训练所需的多样化数据,并进行适当标注和预处理。
4模型选择根据精度、速度和用途选择合适的模型结构。
5模型训练使用 TensorFlow、PyTorch、Caffe 等框架训练模型。
6模型转换将训练完成的模型转换为 RKNN 格式,并进行量化和预编译。

1. 概要

AI 算法开发不是单一操作,而是一系列流程,包括需求整理、数据准备、模型选择、模型训练,以及面向实际运行环境的模型转换。

通过合理设计每个阶段,可以开发出既满足实际使用场景精度要求,又兼顾处理速度的 AI 模型。

2. 需求分析

算法功能通常会用较短的词语来描述,例如“人脸识别”“驾驶员行为检测”“商业设施客户行为分析”等。

但在实际应用中,最终功能往往需要多个子算法按顺序协同工作才能实现。这是因为各个子算法的神经网络结构不同,并且会针对各自的功能进行优化。

模型分类功能
目标检测模型检测图像中是否存在目标物,并输出该目标物的具体坐标。也可以同时提供分类功能。
关键点检测模型检测图像中的特定对象,并输出骨骼点、面部器官位置等关键点。
相似度比较模型比较两个不同个体之间的相似度。常用于人脸识别、猪脸识别、商品识别等场景。
分割模型检测图像中的物体,并按照轮廓等基准将其分割为不规则像素区域。有时也同时具备分类功能。
OCR 模型识别文字。

下面列出由多个子算法构成的示例。

示例 A:人脸识别算法

人脸识别算法由以下子算法构成。

  • 人脸检测模型(检测模型)
  • 人脸姿态校正模型(关键点检测模型)
  • 人脸比对模型(相似度比较模型)

示例 B:驾驶员行为检测算法

驾驶员行为检测算法由以下子算法构成。

  • 人脸识别算法
  • 吸烟、操作手机等危险行为识别(检测模型)
  • 疲劳驾驶检测(关键点检测模型)
  • 车道偏离检测(检测模型)

示例 C:商业设施分析

商业设施分析由以下子算法构成。

  • 人脸识别算法
  • 人体跟踪算法(检测模型 + 相似度比较模型)

只有明确实现具体需求所需的处理阶段,才能围绕目标进行数据收集、模型优化和模型训练。

3. 数据准备

对很多人来说,数据准备看起来是一项单调且重复的工作。但这一阶段有很多需要注意的重要要点。

数据样本的多样性

数据样本需要具备充分的多样性。样本多样性是保证算法泛化能力的基础。

例如,在开发农产品识别功能时,如果只收集红苹果图像进行训练,模型就很难准确识别绿苹果。

同时,还需要足够的负样本数据。如果只把农产品图像提供给神经网络,不能期待训练后的网络能够有效区分真苹果和塑料苹果。

为了提高算法可靠性,需要充分考虑实际使用场景中可能出现的特殊情况,并将这些数据加入训练数据中。

数据样本的压缩可能性

单个样本数据的大小会显著影响网络模型的运行效率。

在能够保持效果的范围内,应尽可能压缩图像尺寸,以提高处理效率。例如,在相同环境下,112×112 像素图像的处理速度可能比 224×224 像素图像快约 4 倍。

另一方面,在某些场景中,为了避免图像信息缺失,也需要完整图像。例如在山火检测中,对召回率要求较高,过度压缩图像可能导致召回率下降,从而降低算法性能。

合理标注和预处理

数据需要进行合理且准确的标注和预处理。

数据标注会在很大程度上决定训练结果所能达到的性能上限。如果错误标签过多,就很难得到有效的训练结果。

数据预处理是指为了让机器更容易理解数据,预先对数据进行一定处理。

例如,在表示农产品位于图像中的位置时,“中心点位于从左侧开始第 200 个像素”这样的表达直观且准确。但如果图像尺寸发生变化,像素位置差异会变大,可能增加学习难度。

因此,需要将距离归一化,例如表示为“中心点位于图像宽度从左侧开始 40% 的位置”。

语音数据的预处理更加多样。分词方式、傅里叶变换等处理方法的差异都会影响训练结果。

数据准备贯穿整个开发过程

数据准备并不一定要在最初阶段就完全完成。

模型训练后如果已经取得一定效果,但仍然存在部分缺陷,可以通过追加或优化训练数据,并对现有模型重新训练来修正问题。

即使在后期优化阶段,追加合适图像也经常是最有效的改善手段。

因此,与数据相关的评估和优化应贯穿整个开发流程持续进行。只在开发初期关注数据样本问题是不充分的。

4. 模型选择

通常,即使要实现相同功能,也会存在多个候选模型。不同模型在精度和计算速度方面具有不同特点。

模型主要通过学术研究、企业公开竞赛等方式被提出和改进。因此,开发者需要持续关注 AI 新模型相关论文和文章。

同时,积累和分析已有模型也非常重要。下表列出各类功能中相对优秀的模型结构示例。

模型类型模型名效果速度
检测模型yolov5精度高中等
检测模型ssd精度中等,对小目标识别能力一般
关键点检测模型mtcnn精度一般,可检测关键点较少
关键点检测模型openpose精度高,可检测关键点较多中等
相似度比较模型resnet18精度高
相似度比较模型resnet50精度高、鲁棒性强、抗干扰能力高中等
分割模型mask-rcnn精度中等,可分割图像中的不规则物体区域

5. 模型训练

具备 AI 开发经验的开发者,可以使用 TensorFlow、PyTorch、Caffe 等自己熟悉的通用框架训练模型。

本公司的开发套件可以将这些框架训练得到的模型转换为 EASY EAI Nano-TB 专用模型。

6. 模型转换

使用 TensorFlow、PyTorch、Caffe 等开发自有模型后,首先需要将模型转换为 RKNN 模型。

通常还需要进行模型量化和预编译,以提高运行效率。