图像识别项⽬算法测试
⼀、前⾔
  之前有⼀段时间在负责以图搜图项⽬的测试⼯作,接到这个项⽬的时候有点懵,不知道从何开始,咨询了公司同⼀条业务线的⼤佬们,都没有接过这种算法项⽬,没办法,只能赶鸭⼦上架,⾃⾏百度查各种AI算法相关的测试知识,所以想记录⼀下整个项⽬过程,以及通过这个项⽬学习到的⼀些算法相关的⽪⽑知识,整篇属于⽐较理论。
⼆、需求分析过程
1、了解需求
  整个需求分析过程,总的来说,⼀头雾⽔,没有需求⽂档,以⼝相授,即是以图搜图,类似百度识图,可以搜索出相似的图⽚,所以我百度了下以图搜图的概念。
  “以图搜图”正式的名称应该叫“相似图像搜索引擎”,也称为“反向图⽚搜索引擎”。最初的图像搜索引擎是基于⽂本关键字检索的,⽐如图像的⽂件名和路径名、图像周围的⽂本,以及Alt标签中的注释索引,然⽽有时图像周边的这些⽂本信息和图像并没有关系,会造成搜索出来的部分图像结果和查询关键词并不⼀致,所以为了提⾼准确率,同时也随着⼈⼯智能(特别是深度学习理论和技术)的发展,诸多主流图像搜
索引擎纷纷引⼊了深度学习算法来提⾼图像搜索的准确率,像⽇常使⽤的百度、搜狗等通⽤搜索引擎均提供了相似图像检索功能,淘宝、京东等电商平台也利⽤⾃⼰庞⼤的商品图像库开发了垂直领域内的图像检索功能来满⾜消费者们不易⽤⽂字描述的商品搜索需求。
  ⽽我所要负责的项⽬,即是类似淘宝的图像检索,主要⽤于搜索⾐服的布料图⽚,算是有⾃⼰的布料商品图像库吧。
2、算法是如何实现的
  整个模型预测流程是怎么样的?数据是如何处理的?⽤的是什么算法?下⾯贴2张⽹上的算法内容图
图1:机器学习
图2:深度学习
  以图搜图的关键技术叫做“感知哈希算法”,这是⼀个很简单且快速的算法,其原理在于针对每⼀张图⽚都⽣成⼀个特定的“指纹”,然后采取⼀种相似度的度量⽅式得出两张图⽚的近似程度。图3是图像搜索引擎架构图,⽤于⽣成特征索引库的图像数据集,尽量扩充⽤于构建特征索引库的数据集的规模和覆盖⾯,使其有⼀定的⼴度和深度,收集⼀定量的垂直领域数据集来微调模型,使提取的特征更加符合该领域的特点。
图3:图像搜索引擎架构
3、测试⼈员需要给出的评价指标
  领导灵魂拷问"如何判断搜出来的数据是准确的?",“有没有什么指标可以衡量?”,个⼈⽐较肤浅地认为,能搜出相似图⽚即可(⽐较主观)
三、测试流程
  前⾯粗略了解完需求后,算法⼯程师需要测试去配合他们优化新开发的“图像搜索引擎”,如图4是⼤致的测试流程。然⽽针对流程中的⼏个环节,⼜开始着⼿准备进⼊扫盲阶段了。
图4:图像搜索引擎优化流程
四、数据标注
  这个阶段其实是准备图⽚数据集给算法⼯程师训练模型,⼀般算法⼯程师会将整个数据集,⾃⼰划分为训练集、验证集、测试集。或者训练集、验证集等等。
1、什么是数据标注
  数据标注是通过数据加⼯⼈员借助类似于BasicFinder或labelImg这样的标记⼯具,对⼈⼯智能学习数据进⾏加⼯的⼀种⾏为。通常数据标注的类型包括:图像标注、语⾳标注、⽂本标注、视频标注等种类。标记的基本形式有标注画框、3D画框、⽂本转录、图像打点、⽬标物体轮廓线等。
类⽐机器学习,我们要教他认识⼀个苹果,你直接给它⼀张苹果的图⽚,它是完全不知道这是个啥玩意的。我们得先有苹果的图⽚,上⾯标注着“苹果”两个字,然后机器通过学习了⼤量的图⽚中的特征,这时候再给机器任意⼀张苹果的图⽚,它就能认出来了。
  机器学习分为有监督学习和⽆监督学习,⽆监督学习的效果是不可控的,常常是被⽤来做探索性的实验。⽽在实际产品应⽤中,通常使⽤的是有监督学习,有监督的机器学习就需要有标注的数据来作为先验经验。
2、训练集和测试集的概念
  训练集和测试集都是标注过的数据,还是以苹果为例⼦,假设我们有1000张标注着“苹果”的图⽚,那么我们可以拿900涨作为训练
集,100张作为测试集。机器从900张苹果的图⽚中学习得到⼀个模型,然后我们将剩下的100张机器没有见过的图⽚去给它识别,然后我们就能够得到这个模型的准确率了。
3、数据收集⽅向
思考什么情况下可能会影响到算法识别,所以需要考虑以下问题:
3毛的照片
需要什么样的测试数据——真实⽤户场景:商品库包含纯⾊⾯料和花型图
测试数据要多少,照⽚数据覆盖是否全⾯——覆盖纯⾊⾯料图和花型图
测试数据的数量和训练数据的⽐例合理——当数据量⽐较⼩时,可以使⽤ 7 :3 训练数据和测试数据
(西⽠书中描述常见的做法是将⼤约 2/3 ~ 4/5 的样本数据⽤于训练,剩余样本⽤于测试)
4、测试数据的标注
纯⾊⾯料图:每组3-5张图⽚,共20组左右
花型图:每组花型包含3-5张图⽚,共500组左右
不分组:200张图⽚左右,包含纯⾊和花型图
五、模型训练
⼀般情况下,模型训练是由算法部门来进⾏完成的,对于模型训练来说,产品⽅⼀定要给到具体的需求,这样既可以提⾼效率,也能够增加准确率。
六、模型测试
1、模型测试指标
精确率:识别为正确的样本数/识别出来的样本数
召回率:识别为正确的样本数/所有样本中正确的数
2、测试脚本
测试脚本主要功能:批量运⾏所有测试数据,记录模型预测值,和标注值进⾏,计算得出评价指标。
3、竞品对⽐测试
跟百度识图进⾏对⽐测试:
通过百度识图拿到的图⽚数据,进⾏数据清洗
将清洗过的图⽚数据,⽣成商品库数据
后台成功建⽴特征索引库后,在图像识别⼯具进⾏搜索,将搜索的结果跟百度识图进⾏对⽐
最后将对⽐结果反馈给开发
4、结果分析
查看评价指标。
七、产品评估&上线
  不管是机器学习,推荐系统,图像识别还是⾃然语⾔处理,都需要有⼀定量的测试数据来进⾏运⾏测试。
  算法测试的核⼼是对学习器的泛化误差进⾏评估。为此是使⽤测试集来测试学习器对新样本的差别能⼒。然后以测试集上的测试误差作为泛化误差的近似。测试⼈员使⽤的测试集,只能尽可能的覆盖正式环境⽤户产⽣的数据情况。正式环境复杂多样的数据情况,需要根据上线后,持续跟进外⽹数据。算法模型的适⽤性⼀定程度上取决于⽤户数据量,当⽤户量出现⼤幅增长,可能模型会随着数据的演化⽽性能下降,这时模型需要⽤新数据来做重新训练。