当前位置: 首页 > 科技观察

从人工智能 (AI)发展应用看算法测试的测试策略

时间:2023-03-12 20:57:34 科技观察

从人工智能(AI)发展和应用的角度看,算法测试的测试策略不足,难以满足人工智能(AI)的质量保证。本文结合人脸检测与检索算法的测试探索与实践过程,将从以下几个方面介绍人工智能(AI)算法测试策略。算法测试集数据准备算法功能测试算法性能测试算法效果测试(模型评价指标)算法指标结果分析算法测试报告我们提取算法测试过程中的几个核心环节如上,构成了我们算法测试的测试策略,这里,与你分享。算法测试集数据准备测试集的准备对于整个算法测试来说非常重要。一般在测试集准备过程中需要考虑以下几点:测试集的覆盖率测试集的独立性测试集的准确性测试集的覆盖率容易造成测试结果失真,降低算法模型评估结果的可靠性。比如我们的功能测试,根据功能测试设计,构建相应的测试覆盖数据。算法测试也是如此。在人脸检测算法方面,除了考虑正样本和负样本的选择外,还需要考虑人脸特征在正样本中的覆盖情况,如人脸比例、模糊度、光照、姿态(角度)、完整性(遮挡)等特征。选择相应的测试数据后,需要在后续的指标计算和结果分析中对数据进行标注,标注相应的特征。以人脸检测为例,使用工具制作人脸图标的人脸坐标框架图,并对相应的特征进行标记、记录和存储,如下图所示。此外,除了数据特征的覆盖范围外,还需要考虑数据源的覆盖范围,结合实际应用环境和场景的数据进行数据模拟和准备。例如,在公共场所摄像头下的人脸检索中,图片普遍比较模糊,图片的光照强度也各不相同。所以在准备数据的时候,也需要根据这个场景来模拟数据。一般来说,最好使用真实的生产环境数据作为测试数据,根据数据的分布特征从中选择测试数据。另外,关于测试数据量,一般来说,测试数据越多,越能客观地反映算法的真实效果。但出于测试成本的考虑,不能穷尽。一般根据实际生产环境选择20%,如果生产环境数据量巨大,选择1%~2%,或者更少。由于我们生产环境数据量巨大,考虑到测试成本,我们选择了2W左右的图片进行测试。测试集的独立性测试集的独立性主要考虑测试数据集相互干扰导致测试结果失真的风险。我们以人脸检索为例。我们准备了200组人脸测试数据,每组是同一个人不同时期或角度的10张人脸照片。在计算人脸检索算法模型指标时,比如计算TOP10的准确率时,如果数据库中还有上述200组人的其他照片,就会影响指标计算结果。例如,我们的200组人脸中包含了Jack,但是数据库中除了Jack的10张照片之外,还有其他照片。8张杰克的照片。如果算法微服务接口返回的TOP10图片包括6张我们测试集中的Jack图片,另外2张数据库中不在测试集中的Jack图片,2张非Jack图片,如何计算测试的准确率,根据我们的测试集(标注),准确率为60%,但实际准确率为80%,导致准确率指标的计算结果失真。因此,我们在准备测试集数据时,需要考虑数据干扰,在测试准备阶段对数据库中的其他测试数据进行评估,例如从200组人脸测试数据集进行预测试,进行研究和分析。对相似度很高的数据进行判断,判断是否是同一个人,如果是,则删除照片或不将该人从200个测试集中删除。测试集的准确率数据集的准确率比较容易理解。一般是指数据标注的准确性。例如,Jack的照片不应标记为Tom,照片的模糊特征不应标记为清晰。如果数据标注有误,将直接影响算法模型指标的计算结果。对于测试集的准备,为了提高测试集准备的效率和复用性,我们尝试搭建算法数据仓库平台,实现数据(图片)的在线标注和存储等功能,作为同访问到算法测试数据。算法功能测试就我现在接触的人工智能系统而言,算法是以微服务接口的形式作为服务提供的,类似于百度AI开放平台。因此,需要对算法微服务接口进行功能验证,例如从功能性、可靠性、可靠性等方面结合应用场景对强制、非强制、参数组合验证进行正反测试覆盖。可维护性。这里不多做介绍,与常见的API接口测试策略一致。算法性能测试微服务接口的性能测试是众所周知的。对于算法微服务,还需要进行性能测试,比如基准测试、性能测试(验证是否满足性能指标)、长期稳定性能测试等。版本中需要测试的内容,同时产生版本间的横向性能对比,感知性能变化。经常关注的指标有平均响应时间、95%响应时间、TPS、GPU、内存等系统资源的使用情况。一般使用Jmeter进行接口性能测试。但是,在我们的实际应用中,为了将算法微服务接口的功能测试和性能测试融为一体,从而降低自动化测试开发、使用和学习的成本,提高可持续性,我们基于关键词——驱动和数据驱动的测试思路,分别使用PythonRequest和Locust模块实现功能和性能自定义关键字开发。每轮测试结束后,执行算法微服务功能的自动测试。如果函数执行通过,会自动拉取不同执行策略对应的性能测试用例,并将每次测试执行的结果存入数据库输出算法的微服务接口。不同版本各项性能指标对比结果。算法模型评价指标首先,不同类型的算法侧重于不同的算法模型评价指标。例如,人脸检测算法常用准确率、召回率、准确率、误报率等评价指标;人脸检索算法经常使用TOPN的准确率、召回率和前N个连续准确率。其次,同一类算法在不同应用场景下所关注的算法模型的评价指标存在差异。比如在高铁站应用的人脸比对(重点人员检索)场景中,人脸检索不太关注召回率,而是需要很高的精度,避免抓错人造成混乱公共场所。但是,在海量人脸检索的应用场景中,我们愿意牺牲部分准确率来提高召回率,所以不能一味追求这种场景下的准确率。除了上述算法模型评价指标外,我们还常用ROC和PR曲线来衡量算法模型的效果。我们在算法微服务功能和性能测试中介绍了我们采用关键字驱动和数据驱动的测试思路,分别使用PythonRequest和Locust模块实现功能和性能自定义关键字开发。考虑到测试技术栈的统一性和可复用性,基于上述设计,我们实现了算法模型评估指标自定义关键字的开发,每次运行输出一个不同版本模型评估指标的横向对比在同一个测试集下。当然,对比模型评价指标除了不同版本的对比,如果条件允许,我们还需要对竞品进行一定的对比,对比市面上相同、相似算法的效果差异,并互相学习。算法指标结果分析我们对算法模型指标进行评估后,除了感知不同版本算法模型评估指标的差异外,我们还希望进行进一步的分析。我们得到了具体算法模型优化的优化方向。这时候就需要结合数据标注了。深入分析信息,挖掘算法的优劣是否受到哪些数据特征的影响,以及影响的程度。例如,通过数据特征的组合或某些控制特征的一致性,我们可以看出其他特征对算法效果的影响等。这时候我们一般通过开发一些脚本来实现我们的分析过程,根据算法微服务接口的响应体和数据准备阶段标注的数据特征来开发分析脚本。此外,对指标结果的进一步分析还应结合算法设计,如人脸检索算法。每张图片的检索过程是“输入图像的人脸检测”->“输入图像的人脸特征提取”->“相似特征检索”,通过这个查询过程不难看出整体的准确率人脸检索受以上三个环节的影响,因此基于索引结果的深入分析也需要从这三个层面入手。算法测试报告一般的算法测试报告由以下几个要素组成:算法功能测试结果算法性能测试结果算法模型评估指标结果算法指标结果分析由于算法微服务测试的复杂度高于普通服务接口,因此简洁明了报告切中要点。