首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >第八章 AI模型质量-2

第八章 AI模型质量-2

作者头像
bettermanlu
发布2025-04-15 11:03:07
发布2025-04-15 11:03:07
3100
举报

8.3 AI模型的黑盒测试

8.3.1 端到端的黑盒测试

端到端的黑盒测试(End-to-end black-box testing),测试人员不关心模型内部的工作原理,而只关心输入和输出之间的关系。这种方法有助于确保模型在实际应用场景中能够满足预期要求。

端到端的黑盒测试实施比较简单,主要包括以下几个关键步骤:

1.确定算法指标。

2.设计测试场景、收集样本。

3.测试及结果分析。

下面我们以一个实际的活体检测算法案例来讲解这几个关键步骤。

活体检测是一种常见的AI算法,比如用于银行、支付平台和其他金融机构可以使用活体检测技术进行身份验证,以确保用户在进行转账、支付、贷款等操作时是真实的人。

  1. 确定算法指标

我们定义了两个算法指标,活体视频通过率以及非活体视频拦截率,其定义如下:

活体视频通过率 = 判断为活体视频个数 / 真人脸视频总数

非活体视频拦截率(假人脸) = (判断为非活体个数+检测人脸失败个数)/ 假人脸视频总数

  1. 设计测试场景、收集样本

我们将样本分为两类:正常样本和异常样本。

正常样本覆盖的维度包括:年龄、性别、国籍及民族、拍摄表情、拍摄场所、拍摄光照、拍摄角度、拍摄距离等。

异常样本覆盖的维度包括:纸张类、翻拍类、人脸遮罩(照片)、口罩遮罩、类人脸(如模特)、无人脸视频等。

3.测试及结果分析

这一步主要是通过编写自动化脚本完成对AI算法接口的调用,计算出上述的算法指标。对于分类错误的样本进行分析。

端到端的黑盒测试虽然实施简单,但也有其局限性。

第一,一个AI算法对应的业务功能背后可能是有一系列的AI算法模型串联起来的,当端到端的指标不达标的时候,比较难定位问题的根因。

第二,AI算法是个黑盒子,对AI算法输出的结果比较难解读,无法准确分析成功或失败的原因,这个也就是AI算法的可解释性问题。

下面我们将依次介绍两种方案来解决上述的端到端AI算法测试的局限性。

8.3.2 AI算法的分层测试

我们以一个OCR证件识别的案例来讲解AI算法分层测试的基本思路。

图4是一个OCR证件识别算法的基本步骤,每个关键步骤都是由一个AI算法来实现的。

我们拿到一个原始照片后,

第一步:调用二分类算法,来判别该图片是否是一张身份证照片。

第二步:判断图片的角度,进行相应的图片旋转,将其转正。

第三步:进行目标区域检测,将身份证从背景中框选出来。

第四步:进行最后的文本框识别,将图片中有文字的部分框选出来。

第五步:文字识别,输出文本框中的文本信息。

这个过程中,如果我们能够依次计算出每个算法的降级率,那么我们将会迅速的找到整个端到端算法效果差的瓶颈点在哪个算法上。

图4 OCR证件识别算法的基本步骤

分层测试的实施步骤如下:

  1. OCR的整体流程详细分析

这一步的目的主要是梳理清楚AI算法的调用层次关系,如:证件ocr识别整体流程中算法一般分为证件分类(二分类层)、证件旋转、目标区域检测(证件区域角点位置检测)、证件内文本框位置识别、文本识别等5个层次,参见图4。同时定义ocr每层算法的评估指标和计算方法。

  1. 代码改造生成被测服务对象

为了方便自动统计每一层AI算法的输入输出信息,需要对被测OCR工程对象进行轻量级的代码改造,主要是对日志代码增加必要的打印信息,方便对被测对象运行结束后产生的日志进行分析、从中提取每层算法的结果输出,方便计算该层算法的评估指标。

  1. 数据准备

准备测试样本数据,以及相应的标注文件。

对算法分层后,需要规定源标签文件、中间结果标签文件格式与内容、文件命名规范,方便用来后续的每层算法效果精度指标的计算,源文件、中间结果标签文件可以采用json、xml等格式,源文件和中间结果标签文件格式内容基本要保持一致,文件名称需要相互一一对应,格式内容可以定义为如图5所示。其中valid表示二分类算法模型输出值、direction表示证件旋转算法输出值、cardcorner表示目标区域检测算法输出值、ctpntextboundingbox表示文本框位置检测算法输出值、ocrinfo表示文字识别算法输出值。

图5 OCR分层测试标注文件举例

  1. 测试自动化执行

通过编写自动化测试脚本,对每个测试样本进行AI算法的接口调用。

  1. 日志提取及结果分析

测试完成后,通过编写脚本对日志中的每层算法的输入输出信息进行提取,计算出每层算法的评估指标。最后进行结果分析,可以生成一个算法指标的漏斗模型,如图6和图7所示。

图6是针对香港一代身份证的OCR分层测试的结果,整体的失败率是3.43%,其中目标区域检测的失败率是0.28%,文字识别的失败率是3.15%。文字识别算法将是我们需要优化的重点。

图7是针对香港二代身份证的OCR分层测试的结果,整体的失败率是29.41%,其中旋转的失败率是0.69%,目标区域检测的失败率是6.79%,文字识别的失败率是21.93%。目标区域检测和文字识别这两个算法将是我们需要优化的重点。

图6 香港一代身份证证件OCR漏斗模型

图7 香港二代身份证证件OCR漏斗模型

通过上面的例子我们可以看到通过建立AI算法的分层测试体系,我们可以有如下收益:

1. 快速找到算法瓶颈点,通过建立漏斗模型,我们可以快速的看到哪一层的算法是我们的重点优化对象。

2. 发现算法存在明显的场景偏见。通过不同类型样本的横向对比,发现算法是否存在场景偏见,比如上例中就存在目标区域检测和文字识别这两层对香港二代身份证有偏见问题。

3. 有了这些基础数据后,我们还可以做到常态化的回归比对测试。

(1) 版本间/版本内不同类型样本的效果对比,发现算法是否存在场景偏见

比如:香港二代身份证OCR场景偏见问题

(2)版本间/版本内不同模型迭代的效果对比,发现算法是否存在能力降级

比如:二分类算法在证件角度旋转场景下存在能力降级问题。

8.3.3 AI模型的蜕变测试

蜕变测试

我们首先简单介绍下什么是蜕变测试(Metamorphic Testing)。蜕变测试是一种软件测试方法,用于检测程序在不同输入条件下的行为是否一致。这种方法的核心思想是,通过对原始输入进行某种变换,生成新的输入,然后比较原始输出和新输出之间的关系。如果这种关系满足预期的蜕变关系,那么程序被认为是正确的。

举一个简单的例子,假设我们要测试一个计算平均值的函数 average()。我们可以使用蜕变测试来检查这个函数的正确性。

首先,我们选择一个输入序列,例如 [1, 2, 3, 4, 5],并计算其平均值。在这个例子中,average([1, 2, 3, 4, 5]) 应该返回 3。

接下来,我们对输入序列进行一个变换,例如将每个元素加上一个常数,如 2。新的输入序列为 [3, 4, 5, 6, 7]。我们再次计算平均值,average([3, 4, 5, 6, 7]) 应该返回 5。

现在我们可以检查蜕变关系。在这个例子中,蜕变关系是:如果我们将输入序列的每个元素加上一个常数,那么输出的平均值也应该加上这个常数。因此,我们可以比较原始输出 3 和新输出 5,它们之间的差值正好是我们加上的常数 2。由于蜕变关系满足预期,我们可以认为 average() 函数在这个测试用例下是正确的。

蜕变测试的主要步骤如下:

  1. 确定蜕变关系:分析程序的功能和特性,找出适用于测试的蜕变关系。
  2. 生成测试用例:根据蜕变关系,为程序生成一组初始测试用例。
  3. 执行测试:运行程序,使用初始测试用例作为输入,观察程序的输出。
  4. 应用蜕变关系:根据蜕变关系,对初始测试用例进行变换,生成新的测试用例。同时,根据蜕变关系预测输出应该如何变化。
  5. 重新执行测试:使用新的测试用例作为输入,再次运行程序,观察输出是否符合蜕变关系的预期。

AI模型的蜕变测试

在深度神经网络(DNN)的上下文中,蜕变测试可以用于评估模型的性能和鲁棒性。由于深度学习模型通常是黑盒系统,很难直接从模型结构中推断其行为。因此,蜕变测试成为一种有效的方法,可以在不依赖预期输出的情况下评估模型的正确性。

在DNN的蜕变测试中,首先需要定义一组蜕变关系,这些关系描述了输入数据和输出结果之间的关系。例如,在图像分类任务中,一个蜕变关系可能是:如果对输入图像进行平移,那么分类结果应该保持不变。然后,通过对比模型在原始输入和经过蜕变关系变换后的输入上的输出,可以检测模型是否满足这些关系。如果模型在某些蜕变关系下的表现不符合预期,那么可能存在错误或者需要进一步优化。

我们以图像分类任务为例,以下是一些可能的蜕变测试手段,它们可以帮助我们检测图像分类模型的稳定性和鲁棒性:

  1. 旋转测试:如果我们将图像旋转90度、180度或270度,分类模型的输出应该保持不变。这是因为旋转不会改变图像的主要内容。
  2. 缩放测试:我们可以将图像缩小或放大一定的比例。理论上,这不应该改变图像的分类,除非缩放的程度过大,以至于重要的细节无法识别。
  3. 图像翻转:水平翻转或垂直翻转图像。
  4. 镜像反射测试:我们可以创建图像的镜像反射,无论是水平反射还是垂直反射,分类结果应该保持不变。
  5. 色彩变换测试:我们可以改变图像的色彩平衡或对比度。只要这些变化不会改变图像的主要内容,分类结果应该保持不变。
  6. 添加噪声测试:我们可以在图像中添加一些随机噪声,如高斯噪声或椒盐噪声。只要噪声的级别不会掩盖图像的主要内容,分类结果应该保持不变。
  7. 裁剪测试:我们可以从图像中裁剪出一部分。只要裁剪的部分不包含图像的主要内容,分类结果应该保持不变。
  8. 混合和叠加:将两个或更多的图像混合或叠加在一起。比如将图片置于不同的背景图片中。

在我们的实际项目中,上述的蜕变手段,帮助我们发现了很多AI算法的问题。比如:

图8,旋转证件图片后,导致证件分类模型出错。图9,将证件和一些背景图片合成,模拟证件在不同的背景下拍摄,发现一些场景导致证件无法被识别,即目标区域检测模型失败。

图8 旋转证件图片导致分类模型出错

图9 复杂背景导致目标区域检测模型失败

当然蜕变测试也存在一些局限性,如:

  1. 测试样本选择:蜕变测试需要选择一组具有代表性的测试样本,但在实际应用中,选择合适的测试样本并不容易。如果测试样本不能很好地覆盖模型的输入空间,那么测试结果可能无法全面地反映模型的性能。
  2. 蜕变关系定义:蜕变关系是蜕变测试的核心,用于描述输入样本之间的关系。然而,对于复杂的深度学习模型,定义合适的蜕变关系是一项具有挑战性的任务。如果蜕变关系过于简单或不准确,测试结果可能无法揭示模型的真实问题。例如,在语音识别任务中,如果蜕变关系仅关注音频信号的振幅,而忽略了其他重要特征,如频率和持续时间,那么测试可能无法检测到与这些特征相关的错误。
  3. 无法保证完全覆盖:由于深度学习模型的复杂性和输入空间的庞大,蜕变测试无法保证完全覆盖所有可能的输入情况。因此,即使通过了蜕变测试,模型在某些特定场景下仍可能出现问题。例如,在自然语言处理任务中,蜕变测试可能无法生成所有可能的句子结构和语义组合,从而导致某些错误无法被检测到。
  4. 对模型内部结构的不透明性:蜕变测试通常关注模型的输入和输出,而忽略了模型内部的结构和工作原理。这可能导致某些潜在的问题无法被发现。例如,在一个文本生成模型中,蜕变测试可能无法检测到模型在生成过程中的潜在偏见或不当行为。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MasterLU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 8.3 AI模型的黑盒测试
    • 8.3.1 端到端的黑盒测试
    • 8.3.2 AI算法的分层测试
    • 8.3.3 AI模型的蜕变测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档