2022年小结

今天是2023年1月20号,也就是农历2022年十二月二十九日。2022年已经过去了,需要记录的东西有很多。

工作

2022年是我在由由工作的第二个年头,自从2021年加入由由以来一直在不断的探索生鲜识别算法的优化。虽然这个过程中不断的经历失败和挫折,但是也让我更加了解到由由Saas的操作场景,逐步摸索出更好的实现蔬菜/水果/干货识别的方法。经历了近3年的工作后,我发现必须对于产品应用的业务场景有深刻的理解,才能够将技术更深入的应用到产品功能中。在2022年,我在工作中最大的进展是从零开始研发了整套零食AI识别算法,通过不断的迭代优化,目前已经实现了整个中国最好的零食识别算法。

在工作过程中,我在不断思考如何能够在工作中更好的发挥自己的价值。有3点思路:

  1. 站在不同角度看问题。接触一家公司,最先接触到的就是关于公司的介绍,或者是一篇文章,或者是一句标语,你从中可以了解到这家公司对外销售的产品以及意图对外打造的形象。这些文章或者slogan是站在公司的角度,面向的是外部市场和客户;当你加入这家公司的时候,你其实是站在了这些宣传的后面,负责实现这些宣传吹过的牛逼。同样的,面对产品,需要通过你的技术来实现其中的功能,这种情况下怎么把产品和技术联系在一起,就是你需要做的事情;
  2. 为行业带来新价值。进入一家公司,需要时刻思考这家公司在干什么,它提供的产品能够为这个行业带来什么价值?你能够为这家公司的产品带来什么价值?换句话说,你能够通过什么技术来提升公司产品功能,从而给予这个行业新的价值;
  3. 拆分工作需求。面对任何工作需求,首先需要做的不是立马执行,而是确认需求的合理性,然后分析需求的可行性和执行难度,最后才是任务拆分和排期,按照规划进行实现。记住:一定一定要理清楚当前最重要的任务,一定一定要把时间花在最重要的事情上

在2022年也接触到不少协作和部署工具,包括portainer.iogiteadrone,个人觉得团队协作不仅仅是和同事的交流沟通,还包括了一系列协作工具的部署和使用,比如:

  1. 版本管理:git、gitea
  2. 持续集成:drone
  3. 容器部署:docker、portainer.io
  4. 交流协助:飞书、gitee工作台

相关阅读

专业

图像搜索

2022年我一直专注在图像识别算法的研发中,最大的收获在于确认了《图像搜索算法》对于图像识别的重要性。对于开放场景,无法获取所有类别的图像数据的情况下,采用图像搜索方式进行训练和部署,得到的效果远远超过图像分类算法的实现。对于图像搜索算法而言,其架构可划分为3个部分:

  1. 特征生成
  2. 特征搜索
  3. 特征评估

基本流程是采集待检索图像,输入到特征提取算法提取图像特征,然后将其与特征库特征进行相似度比对,最后输出最相近特征对应的类别标签

特征生成

特征生成阶段一般划分为三个部分,分别是特征提取、特征增强和特征维度缩减。

对于图像数据而言,目前最强大的图像特征还是基于深度学习算法进行生成,一般采用卷积神经网络最末尾的卷积特征。在2022年,我相继调研了不同的特征增强方式,包括二值哈希、求和池化SPoC、空间池化、跨维度加权池化Crow、卷积区域最大激活R-MAC、 广义平均池化GeM、联合训练架构MultiGrain、多个全局特征融合CGD、Listwise Loss。总的来说,特征增强方式逐渐从卷积特征的简单后处理,到结合模型训练的多特征融合,再到损失函数优化进行特征增强,对于数据、模型架构和训练方式的细节要求越来越高。另外,还有一些论文尝试了目标检测+特征增强方式进行优化,这也符合我对于图像数据的判断,那就是要求输入数据暴露更大面积的有效区域和更小面积的噪声区域。

在完成特征增强之后,还会根据实际需求进行特征维度衰减,一般采用PCA方式。

特征搜索

特征搜索大体可以分为两个阶段,一个是粗搜索阶段,另一个是精搜索阶段。在第一个阶段,首先计算待检索特征和特征库特征的相似度,一般采用欧式距离或者余弦距离,然后按照距离大小进行相似度排序;在精搜索阶段,可以采用QE或者k-reciprocal进行再次搜索。

特征评估

在图像搜索领域,普遍采用平均精度AP和均值平均精度mAP作为评估标准。当时在实际工作过程中,我发现还是需要结合实际情况设立评估标准,比如对于在屏幕上频繁操作的用户而言,更关心首位识别、识别率以及更少的输出个数。

相关阅读

相关实现

C++开发

相比于Python语言,C++语言能够更好的加速模型推理,以及适配不同上层客户端语言的集成。在2022年,我实现了不少基于C++开发的识别功能,学习和使用了不少C++相关的库和工具,记录一下:

  • 工程开发
    1. C++工程搭建:CLion + CMake
    2. C++语法规范:Google Code Style
    3. C++单元测试:GTest
  • 图像搜索
    1. 图像处理:OpenCV + Simd + stb
    2. 模型推理:MNN + RKNN
    3. 向量搜索:faiss
  • 通用库
    1. 日志记录:SpdLog
    2. JPEG数据编解码:libjpeg-turbo

对于很多上面提到的仓库,还处在简单了解和使用的阶段。在2023年,会有计划的进行学习和研究。

生活

我在2022年最大的收获就是成功考取了汽车驾照。学车过程虽然经历了近一年的时间,中间也经过多次的补考,但是不负所望,在最后成功拿到了驾照,希望以后可以用自己的脚步来丈量中国的山河。此外,我在2022年积极的开始身体锻炼,在户外完成了近300公里的跑步里程。因为气候的缘故,一大半是在上半年完成,在天气逐渐变冷之后,渐渐的没有了出去跑步的动力,之后还是考虑健身房或者在家锻炼。

在2022年政府宣布结束新冠疫情管控之后的一个月时间里,大部分人都感染了新冠病毒,我也不例外。感染之后的一个星期时间里,我经历了高温发烧、低温发烧,伴随着咳嗽、睡不着觉、脑袋发晕等各种症状。真是的只有生病才能让自己停下来好好思考生活的意义,不只是工作,还要更加的珍惜和家人相处的时光。从2023年开始,我会更加主动的抽时间回家和家人们团聚。

展望

在2023年,我会重点深入目标检测和C++部署两个领域。对于图像检索算法而言,我相信在输入阶段提供更加精确的目标图像能够更有利于后续特征的生成和检索;另外,如何加速融合特征生成和特征检索两阶段,也是需要我不断进行实践和验证的工作。

回顾近两年半的工作生涯,总还是觉得想的事情太多,反而做的事情太少。想要做的事情非常多,感觉能做的事情也非常多,但是真正实践的时候就会发现并没有想象的简单,必须重新花时间进去才有可能会有一些进展。另外,在实践的过程中出现了更多事情,需要我不断的选择要做的事情。我希望能够集中精力,到2023年底,能够好好的完成1个/2个事情。