前言:大约在3,4年前即2017、2018年,彼时人工智能风起云涌,各类培训进入人工智能行业的广告在地铁上和出口,公交车、电梯等铺天盖地,受其影响,参加过一次在深大的AI介绍公开课,其中讲述的AI内容不明觉厉,大受震撼。虽最终未进行培训,但机缘巧合下,2019年又有幸得测试经理推荐两本书,其一为高效自动化测试平台:设计与开发实战,另外一个即:机器学习测试入门与实践。兜兜转转阴差阳错,目前在职AI公司,本也只是做做自动化测试,未曾想竟被骑驴找马安排进行AI算法评测,感慨:你学到的知识未来不一定会用到,但是你未来用到过的的那个知识一定是你以前某个时刻学到的。所以应该抱有活到老学到老的精神。结合本人10个月的AI算法评测经历,仅从门外汉角度介绍,认识不足或者错误的地方,以其他官方教程为准。
文章参考:
https://www.cnblogs.com/pojason/p/15872672.html
相关攻略:
机器学习:基本流程
机器学习:725个机器学习术语表
AI算法评测流程:
一、明确算法测试需求
1、明确测试目的
2、明确测试需求, 确认测试需要的数据种类和数据量及场景
3、明确算法服务流程, 确认算法输入\输出的数据,
4、如有格式要求,可向开发人员提出相关数据的输出要求
5、确认测试的时间节点与人力支持
二、编写测试方案
1、确认算法测试主要场景和测试场景信息
2、确认各场景测试数据需求量
3、确认算法标签标准
4、确定算法性能指标定义及计算公式
三、编写测试数据方案
1、确认数据采集场所,
2、编写数据采集的指标范围,对数据的采集条件进行必要的说明
3、确认数据采集设备及能够正常使用
4、确认数据采集人员及进度安排
5、测试数据采集
6、对测试数据检查、清洗、归类
四、进行算法测试
1、确认算法相关细节, 主要参考使用文档或与算法人员沟通
2、测试脚本编写,一般为Python
3、测试指标统计及badcase样例展示与保存
4、抽取核对badcase样例的正确性
五、编写测试报告
1、得出测试结论, 与测试目的保持一致
2、测试小结, 总结测试过程中发现的其他问题
3、badcase统计与展示
六、测试结果同步
1、badcase同步
2、测试细节同步
3、后续结果跟进
七、测试数据与测试报告管理
1、对测试数据质量进行管理
2、测试数据版本管理
3、测试报告结果管理
下面结合实际案例,对部分流程阶段进行说明。
实际案例:门禁系统人脸识别
一、明确算法测试需求
1、明确测试目的:
评测人类实时在门禁系统使用分辨率为200万,帧率30的摄像头在30cm-70cm
距离使用的算法模型是否满足使用标准,如指标:人脸匹配精度是否达到98%+
2、明确测试需求, 确认测试需要的数据种类和数据量及场景:
测试数据种类为:
1、不同人在门禁前进行人脸识别的离线视频,共采集96个视频(一般内部自采或者让外包采集)。
2、少量猿猴照片,卡通视频、电影视频,若干(特殊少量部分一般算法测试自采)。
3、明确算法服务流程, 确认算法输入\输出的数据:
算法服务流程为:门禁内置摄像头7*24小时拍摄并录像,当监控范围20-70cm
出现人体时,内置的应用将人体视频图片png或者mp4格式作为输入数据,通过
本地或者远程接口调用人脸匹配算法模型,计算出与预录入的用户进行匹配,
如果匹配值高于99.90%,则输出返回人体视频的脸部图片,标上人脸框,用户
姓名、id、置信度,并且保存上传服务端结果json文件,同时调用开门程序。
4、如有格式要求,可向开发人员提出相关数据的输出要求
返回的视频包含人体的脸部框和姓名,id、置信度等,需要必要的数据输出
如:{"name": "tom", "score": 0.998542, "frame_id": 111,
"model_version": "v1.1.2", "time": "2022-04-24 12:34:56.265",
"app_version": "v2.0.1"}
5、确认测试的时间节点与人力支持:略
二、编写测试方案
1、确认算法测试主要场景和测试场景信息
算法测试主要场景:正常人距离摄像头30-50-70cm,拍摄正脸视频。
测试场景信息:
门禁高度:150cm
摄像头分辨率:200万,帧率:30
背景:无要求
光照:强光、常光、暗光
摄像头角度:俯视,平视,仰视
是否多人:单人、多人
水平距离:30、50、70cm
2、确认各场景测试数据需求量:测试用例:多条件下编写,懒人妙用itertools
共需采集96份视频 + 12份特殊场景
固定的内容:摄像头分辨率:200万,帧率:30
为简化,案例中采用这些数据指标:
distance = ["30cm", "50cm"]
person = ["男", "女"]
angle = ["相机平视", "相机俯视"]
luminance = ["强光", "常光", "暗光"]
persons_bool = ["单人", "多人"]
shape = ["胖", "瘦"]
通过笛卡尔乘积可得96种情况,即最小采集:96个视频
3、确认算法标签标准:
对视频中人脸清晰的图片进行标框,并且标记名字
名字:name
输出格式:json文本。
[
{
"label": ["name","tom"]
}
]
4、确定算法性能指标定义及计算公式:略
三、编写测试数据方案
1、确认数据采集场所
户内:30%
户外:70%
2、编写数据采集的指标范围,对数据的采集条件进行必要的说明
示例:
硬性条件1:摄像头200万像素,采集的视频帧率为30
硬性条件2:高度150cm
硬性条件3:男女各5人
硬性条件4:距离30-50-70比例1:1:1
硬性条件5:强光:常光:暗光=1:1:1
灵活条件1:尽量高矮胖瘦兼顾、男女老少兼顾
特殊场景1:戴眼镜 30-50-70cm各录制1份,共3份
特殊场景2:头发遮脸30-50-70cm各录制1份,共3份
特殊场景3:戴口罩 30-50-70cm各录制1份,共3份
3、确认数据采集设备及能够正常使用:
核实摄像头设备配置
4、确认数据采集人员及进度安排:
内部采集
周五采集一天
标注一天。
共2个工作日。
5、测试数据采集:略
6、对测试数据检查、清洗、归类:
对采集的视频进行检查,确定视频分辨率,帧率
对视频和图片的人脸清晰度进行抽检查看清晰度是否符合,是否有遮挡情况
对标注的文件进行检查是否有标错的情况
对不同类型的人的视频进行归类
四、进行算法测试
1、确认算法相关细节, 主要参考使用文档或与算法人员沟通:
了解算法的实现逻辑,执行的前提条件
查看相关需求文档,开发文档,安装部署环境等
2、测试脚本编写,一般为Python
常规项目目录结构
logs:运行日志
model:各算法模型
tools:工具包
data: 输入和输出。labels and result
-input
-output
-v1.1.2
-v1.1.3
...
main.py:运行入口
run.bat:win环境下执行快捷方式
run.sh:linux环境下执行快捷方式
readme.txt: 算法测试项目说明,帮助文档。
requirements.txt:依赖的第三方包和版本
3、测试指标统计及badcase样例展示与保存
准确率,召回率...
basecase:
- missed_person
- half_face
- part_face
- shelter_face
- low_score
- others
...
4、抽取核对badcase样例的正确性:
核对实际basecase是否与符合预期
存在不符合的情况则重新修改对应basecase逻辑
五、编写测试报告
1、得出测试结论, 与测试目的保持一致
2、测试小结, 总结测试过程中发现的其他问题:
对整个评测过程中遇到的问题进行记录、总结、反思。
3、badcase统计与展示:
使用工具进行统计,通过图表等方式进行量化分析,如:统计数据散点图、
折线图、方差标准差、混淆矩阵等
六、测试结果同步
1、badcase同步:略
2、测试细节同步:略
3、后续结果跟进:
跟进算法开发对存在的问题采取的措施,评估是否需要补充采集标注数据,
对优化后的算法模型重新执行测试数据,对比前后的结果,核实哪些指标
有所提升,哪些指标有所下降,在满足精度要求情况下,置信度的取值等。
有余力的优化算法评测中遇到的流程问题,使用自动化替代人工的部分。
七、测试数据与测试报告管理
1、对测试数据质量进行管理:
必要的复盘测试数据质量,简化数据采集的量,用最小数据集覆盖更大场景
2、测试数据版本管理:
一般为按不同版本或者时间存储云盘或者服务器。
3、测试报告结果管理:
一般为按项目不同阶段的时间编写测试报告。
部分未提及的内容,因暂了解不足,仅供参考。
微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!