业务方向的分类算法评测实践

目前,算法在业务中的使用越来越广泛,涉及的领域也越来越多。常见的算法领域有: 机器学习(Machine Learning,简称ML)、 深度学习(Deep Learning,简称DL)、 自然语言处理(Natural Language Processing,简称NLP)、 计算机视觉(Computer Vision,简称CV) 强化学习(Reinforcement Learning,简称RL 等等。。。

最近接到的一个项目需求,需要评测坐姿监测算法,以便决定是否替换现有算法,以达到降本增效,提高用户体验的目的。而坐姿算法属于计算机视觉领域(指计算机处理和识别图像和视频的能力,包括 图像分类、目标检测、图像分割、姿态估计、3D重建等)中的姿态估计。

具体计算机视觉算法有哪些以及有什么特点,可参考文章:blog.csdn.net/weixin_4213...

具体要评测算法什么呢?
  1. 首先是算法本身的表现如何?即其指标如何?
  2. 其次是该算法是否符合业务的需求,满足现有的逻辑?
  3. 最后我们还要了解算法在实际业务中的运行表现如何,以及其性能是否足够优秀
    最终,我们需要从这些维度跟竞品PK,是否能够替换掉对方
业务需求、逻辑分析

需求:主要就是低头、仰头等,在此就不详细描述了

简要图如下:

从业务维度,分析主要影响因素:

  1. 机型、平台、硬件
  2. 用户对象
  3. 环境相关
  4. 应用输入相关
评测指标
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、标注流程如下:

评测结果分析

评测结果数据出来后,需要针对具体的数据分析,给出具体的指导意见,才能帮助算法进行优化。 一般来讲,可重点从与标注数据差别较大的数据来着手

相关推荐
88号技师6 小时前
2024年12月一区SCI-加权平均优化算法Weighted average algorithm-附Matlab免费代码
人工智能·算法·matlab·优化算法
IT猿手6 小时前
多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
开发语言·人工智能·算法·机器学习·matlab
88号技师6 小时前
几款性能优秀的差分进化算法DE(SaDE、JADE,SHADE,LSHADE、LSHADE_SPACMA、LSHADE_EpSin)-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
我要学编程(ಥ_ಥ)7 小时前
一文详解“二叉树中的深搜“在算法中的应用
java·数据结构·算法·leetcode·深度优先
埃菲尔铁塔_CV算法7 小时前
FTT变换Matlab代码解释及应用场景
算法
许野平8 小时前
Rust: enum 和 i32 的区别和互换
python·算法·rust·enum·i32
chenziang18 小时前
leetcode hot100 合并区间
算法
chenziang18 小时前
leetcode hot100 对称二叉树
算法·leetcode·职场和发展
szuzhan.gy8 小时前
DS查找—二叉树平衡因子
数据结构·c++·算法
一只码代码的章鱼9 小时前
排序算法 (插入,选择,冒泡,希尔,快速,归并,堆排序)
数据结构·算法·排序算法