目前,算法在业务中的使用越来越广泛,涉及的领域也越来越多。常见的算法领域有: 机器学习(Machine Learning,简称ML)、 深度学习(Deep Learning,简称DL)、 自然语言处理(Natural Language Processing,简称NLP)、 计算机视觉(Computer Vision,简称CV) 强化学习(Reinforcement Learning,简称RL 等等。。。
最近接到的一个项目需求,需要评测坐姿监测算法,以便决定是否替换现有算法,以达到降本增效,提高用户体验的目的。而坐姿算法属于计算机视觉领域(指计算机处理和识别图像和视频的能力,包括 图像分类、目标检测、图像分割、姿态估计、3D重建等)中的姿态估计。
具体计算机视觉算法有哪些以及有什么特点,可参考文章:blog.csdn.net/weixin_4213...
具体要评测算法什么呢?
- 首先是算法本身的表现如何?即其指标如何?
- 其次是该算法是否符合业务的需求,满足现有的逻辑?
- 最后我们还要了解算法在实际业务中的运行表现如何,以及其性能是否足够优秀
最终,我们需要从这些维度跟竞品PK,是否能够替换掉对方
业务需求、逻辑分析
需求:主要就是低头、仰头等,在此就不详细描述了
简要图如下:
从业务维度,分析主要影响因素:
- 机型、平台、硬件
- 用户对象
- 环境相关
- 应用输入相关
评测指标
1、 分类算法评测指标:
准确率(Accuracy):模型正确预测的正、负样本占全部样本的比例
精确率(Precision):模型正确预测的正样本占全部预测为正样本的比例
召回率(Recall): 模型正确预测的正样本占全部正样本的比例
<math xmlns="http://www.w3.org/1998/Math/MathML"> F n − s c o r e = ( 1 + n 2 ) ∗ P r e c i s i o n ∗ R e c a l l / n 2 ( P r e c i s i o n + R e c a l l ) Fn-score = (1+n^2)*Precision*Recall/n^2(Precision+Recall) </math>Fn−score=(1+n2)∗Precision∗Recall/n2(Precision+Recall)
说明:
n=1时,表示精确率与召回率同等重要
n =0.5时, 表示精确率是召回率的2倍
n=2时,表示召回率是精确率的2倍
基于业务特性,精确率比召回率重要,建议N设为 0.5
一般算法本身的指标算法同学会给出,业务部门在评测时无需再次进行测试
tip: 指标解释参考:
2、业务维度的指标(从业务维度来进行的准确率、错误率)
一般需要结合业务实际使用的场景、特性来进行分析。结合业务实际使用场景后,最后业务维度测试指标方法如下:
根据指标定义和业务场景, 设计数据集用例,设计剧本, 然后利用端到端采集真实的视频数据,得到数据集。然后按动作进行标注,得到标签的时间区间(从开始动作的那一刻开始,到恢复动作的那一刻结束,主要是从真实 场景角度来进行标注);
通过批量数据测试,获取到竞品与被测算法返回的每一帧的结果,按动作聚合结果(比如,低头的动作帧数一直累加直至不变,就放在一个区间内,下一次再有变化,就放在另一个区间内)。
最终 判断 竞品和被测算法返回的区间 是否在 标注的区间内, 按占比来计算准确率、漏检率
准确率 = 被识别到的正确区间数量/算法识别到的全部区间数量 (指标越高越好)
漏检率 = 完全未检测到标注区间数量/累计所有视频标注的区间数量 (指标越低越好)
当然,这个指标的准确性有待商榷,但从一定程度上也能够达成评测的目的
3、算法的性能
从业务维度考虑,该算法以什么样的方式接入业务,再决定用什么样的方式进行性能测试。我们最终是以SDK方式集成。主要考量:
a、稳定性:
SDK初始化的稳定性(保证SDK的频繁初始化不会异常)
SDK的稳定性(保证SDK可持续运行)
b、安卓专项:CPU\内存\耗电量
c、算法帧率
测试集的建立
1、测试数据方案输出
一般算法在测试集建立时,需要保证:
a、一致性:测试集与数据集的数据特征、以及特征数量分布一致
b、完整性
但通常算法测试时,算法的测试集就已经由算法同学完成并进行测试。那么在业务端评测算法时,此时重点应该在业务,我们需要从业务的角度来进行特征的分析,准备测试集。 其实就相当于是我们的测试用例,只不过这些用例是按类别输出,并需要给每个类别的数据准备上足够量的数据而已。
所以,在输出数据方案时,除了需要保证上面两点外,还需要结合具体参考业务逻辑分析(参考业务需求、逻辑分析)
2、测试集的准备
一般数据方案输出评审没问题后,可以进行数据集的准备动作。主要方法如下:
如果是人工采集数据,还需要提前制定好剧本,方便采集数据。而一个好的剧本,需要包含以下几点:
a、包含数据用例,且描述正确
b、如何更方便他人
c、如何更方便后续进行数据集的存储描述、以及标注等系列事情
强调: 1、若采集的数据涉及敏感信息,一定需要双方签署相关协议
2、测试集不能与训练集重合,避免数据泄露
3、测试集的标注
1、关于标注平台
目前市面上有很多不同的标注平台,公司内部也会有自己开发的。一般来讲,公司内部的更适用一些,但对比下来,发现label studio平台功能非常丰富,且好用易上手,建议labelstudio, 操作教程可参考其官网。
开源标注平台:labelstud.io/tags/
2、标注方式:
方案一:内部人员标注
方案二:外部公司合作标注,标注前提供标注规则,一定要先共识标注规则
强调:涉及敏感数据,建议由内部人员进行标注
3、标注流程如下:
评测结果分析
评测结果数据出来后,需要针对具体的数据分析,给出具体的指导意见,才能帮助算法进行优化。 一般来讲,可重点从与标注数据差别较大的数据来着手