0%

算法工程师的核心竞争力随想

最近在处理业务问题及面试一些小伙伴的时候经常会思考算法工程师的核心竞争力到底在什么地方?

​ 公司的诸多业务问题不是单单一种算法就可以搞定,更多的是要制定一种解决方案, 涉及到业务目标的拆解、 快速对拆解的任务进行算法调研、选型, 然后根据业务逻辑形成算法模型的组合,最后将整个算法的解决方案。算法工程师几乎要参与解决方案的全流程,其所需要具备的能力也是多方面的。
​ 一, 对算法模型的掌控能力。
​ 具体到CV里的各个基础任务, 分类、检测、分割、跟踪、视频分类、视频目标检测、3D检测、OCR以及不同的研究范围,有监督、 自监督、 半监督、小样本、异常检测、主动学习、对比学习等各个方面都要有所涉猎。

​ 日常大部分的工作都是在抽象业务问题为算法问题, 然后根据业务要求从检测指标要求,效率要求及可部署性进行算法选型, 确定算法之后快速搭建backbone然后构造训练数据(往往构造训练数据是最耗时的一部分工作, 例如检测算法需要分析数据、制定标注标准), 模型迭代训练与部署模型发布, 还要不断针对badcase、歧义数据进行算法细节上的调整。

​ 二, 工程能力

​ coding能力是及其重要的, python、C++是必会的编程语言。

​ 模型训练框架一般是python的, darknet除外哈, 想要快速实现一个算法idea、需要对整体的算法结构要较为细致的掌握, 比如改进loss, 自定义数据处理器等等,推荐大家多看看优秀框架的源码、 paddlepaddle、mm系列等等。

​ 模型部署, 除非你的业务需求是纯验证性,或者是web端部署,一般情况下都需要将算法模型转换为推理模型,然后用C++去部署、 比如服务端TensorRT、Onnxruntime等等。

​ 三, 架构及软能力

​ 具体到解决方案的建设能力、 和不同业务线不同部门甚至是和客户的沟通能力、 这个阶段需要在某一行业内不断积累、不断摸索。