工作两年的算法工程师的小反思(1)

工作两年了,这新的一年时间里自己有了很大的成长,无论是技术上还是汇报沟通方面,总结一下自己的收获和错误,也希望可以给大家带来新的启发。第一篇文章可见:工作一年的算法工程师的小反思,感兴趣的可以再看一下。

技术

作为一个计算机容器设计沟通觉算法工程师,需要掌握的技术栈有olinux系统安装pencv,沟通作文 pytorch/tensorflow/xxx, python,C++,深度学习基础,数学基础,CV相关任务:检测、分割、识别、姿态估计等等。

在工具链的广度上,做CV相关的工作还是比其他岗位少很多。搜光推的同学还要S深度学习QL,Sparlinux重启命令k等工具,前后端那就更多了。所以CV还是易学难精的一个岗位。

Python深度学习

Plinux系统ython的入门真的非常简单,但是想要用好Python还是比较难的。这主要原因还是因为我们很少有需要用Python去构建沟通的重要性心得体会一个大的项目工程,而且在机器学习linux常用命令性能瓶颈不是Python这个语言linux系统限制的,还是硬件资源,代码逻辑等决定的。学习Python的基础最沟通技巧和方法好的方式是做题,往深了学的最好方式就是阅读Pytorch和OpenMMLab的代码。当然这是对于做机器学习相关工作的一个要求。Python需要掌握的不仅仅是其本身,其中的一些模块是必须要熟练掌握的。我自身感觉自己的Python代码能力在MMlab的MMDetection、MMCls等框架中得到了比较大的成长。

C++

这一年的工作我觉得自己的C++水平是有明显提高的。也解决了自己的一个问题:C++掌握到什么水平才是一个合格的算法工程师?

这一年因为需要自机器学习己去操作很多SDK的开发工作,所以在C++的代码能力上有容器的容积一定比它的体积小了长进,也明确了我对这个技术栈的想法。我之前总是会觉得写C++的人比写Python的人代码能力更强。其实自己实践之后觉得这说的代码能力其实很多时候是语言特性决定的。但沟通的重要性心得体会是对一个算法工程师来说,需要掌握的C++能力就是能写SDK后处理就行沟通技巧对于专门的工程部linux沟通的三要素是什么的C++开发人员来说,写SDK后处理容器中有某种酒精含量的酒精溶液却是最低要沟通作文求。

我会这么觉得一方面沟通的艺术是我自己的实践,一容器技术方面是自己对工程团队的观察。其实写好SDKlinux是什么操作系统后处理本质上就是逻辑而已,当然在写SDK的时候不能写Python那沟通的重要性心得体会样随心所欲,C++基础数据类型,STL容器的操作指令,指针,引用,重载,模板,继承,多态,命名空间都是代码上基础。除此之linux重启命令外还要学会gdb,ldd工具以及了解C++的运行流程,堆是什么,栈是什么,静态链接库、动态链接库,库路径问题,CMakeList问题。还是解决问题的能力比如GCC,G++,CMake,Opencv版本不匹配等等。而工程团队的人我的观察来看一般写算法逻辑的还是工作经验<3年的比较多,再往后的人都是想着做更深入的东西。总体来说就是三块:前处理加速、算子加速、后处理加速。关注的点也会更底层,内存,芯片平台多核优化,单核优化,内存复linux是什么操作系统用,带宽,异构计算等等一堆反正我也不懂的东西。现在我也不再去纠结要不要学linux系统怎么写CUDA算子的事情。首先写了也用不到。再者我看了mmlinux虚拟机cv里的cuda算子,其实需要的内容还是C++基础以及cuda op。需要的时候再根据文档来开发就行。

CV知识

工作第二年的时候接触了很多新的知识,对于计算机视觉这个方向有了新的理解。对于如何做好一个CV项目也有了新的认识。

做算法的本质,就是在找规律

深度学习是不是黑盒这个问题对于目前我们做的很多项目来说容器技术,并不重要,重要的是它可以学习到数据的规linux创建文件律。不管是CV还是NLP,深度学习在这一点上容器云的能力毋庸置疑。

CV算法的领域这么多,方向这么多。但是不同领域的的算法模型,我发现其实最根本的区别还是在于网络target和真实数据之间是如何建模的。

sigmoid和softmax虽然很简容器所能容纳什么叫做容器的容积单,但是其蕴含的能量真的不一般,随处可见它的身影。分类、检测、分割是三大CV基础任务。但是其实差别就是在于他们最后的target一个是一维向量通过函数映射与实际类别对应。一个是网络输linux系统出和位置+类别对应。一个是像素linux系统安装点和类别对应。

一个功能的优化就是两个步骤:

  • 一个是如何构建出高质量的数据集。
  • 一个是如何更好建模出输出和GroundTruth之间的关系。

我感觉我和刚开始做CV项目的时候最大的一个改变就是思想上,就和很多人刚开始做算法类项目的时候就是会觉得得用创新的、fancy的方法去解决这个问题,然后当性能提了0.5%的时候容器所能容纳什么叫做容器的容积开始自我安慰嗯!我做到了!我用XXX的方容器技术法提高了精度。这个问题我发现不仅我有过,很多刚开始做CV或者其linux系统安装他机器学习项目的人也有。

在工业界,做算法的本质是先解决问题,再考虑性容器的容积一定比它的体积小

当沉浸在提点的时候,猛然回头发现自己的容器所能容纳什么叫做容器的容积测试集根本不完备。当把错误的case都看一遍的时候,发深度学习现精度提升了,但沟通作文是也没解决啥问题。刚开始工作的时候,老板就说我的思维是top-down的而不是bottom-up的,所以会导致思路不完备,容易做无用功,方向走偏沟通的重要性心得体会。我觉得后面容器苗的这一年的时间,我也在为这句话反复斟酌,反复思考。

在工业界,完备的思路是这样:

  • 方案调研,输出调研报告:发表时间|出版物|核心点|可落地性|精度指标|开源代码|方案评价(打分) 我一般就是采用这样的表头做算法调研
  • 跑通baseline:找到开源代码,利用开源数据集先跑个baseline,验证代码的正确性,也顺便熟悉架构。
  • 数据定义和采集:根据这个任务定义好标注边界,根据实际场景需求发出采集任务,任务量不要太多。一容器苗般情况下有1w张图片就可以验证出效果。分离测容器中有某种酒精含量的酒精溶液试集的时候不要随机取,很多任务其实和场景、人有强相关。大多数时候是根据人来区分出测试集,这也我走过的一个坑,尤其是在人脸相关任务中如果没linux是什么操作系统有根据人来区分测试集,那么精度一沟通的重要性定是偏高。
  • baseline建模出来后写inference,集成SDK,跑通C++视频流下的结果。
  • 根据baseline不断扩展,分析测试集中的长尾问题,不断完备测试集,不容器设计断扩展训练集,在数据维度上做更多的工作。在测试集上也不断linux系统完备测试结果的准确性全面性。
  • 算法优化层面:不断地读paper不断地读paper,不仅要考虑pa容器中有某种酒精含量的酒精溶液per是不是新的,还要考虑在实际项目中能否落地,pap沟通的三要素是什么er的idea解决了你实沟通技巧际项目中遇到的哪个问题?盲目尝试只会浪费时间,特别注意:不要沉迷于一些f沟通的重要性ancy的结构, 事实上最重要的内容还是各种数据增强,长尾loss沟通的重要性的名言,额外监督,知识蒸馏等工作。
  • 功能层面优化:是否可以考虑其他方案,一般情况下一个算法项目会有多个模块组成的。是否可以通过一些额外的模型单独处理一些问题容器云,是否可以通过一些额外的标注提高算法的性能?比如一个人脸识别任务,人脸检测,沟通能力人脸质量评分,人脸关键点,人脸属性,人脸跟踪,人脸GAN,人脸朝向这些虽然是不同的模块,但是都是为了同一个功能服务的。
  • 逻辑层面优化:算法容器总是有边界的,有些clinux命令ase确实比较难以解决的要想办法在逻辑层容器云面去解决。序列平滑,区域限制,结合其他linux是什么操作系统摄像头/功能的结果做逻辑过滤,对特殊cas沟通的艺术e使用特殊逻辑等等,沟通的三要素是什么都是非常常见的手段。
  • 性能优化:不断压缩模型的大小,算法落地一方面要不沟通断提高模型的精度,不断提高召回不断提高误报,也要不断压缩模型,让模型在轻量化的体系下有高精度的结果。这个是很长期的事情,模型轻量化linux必学的60个命令容器设计AutoML的相关研究,不过这块我感觉落地还是比较难的,很多时候不如手工linux是什么操作系统调整模型来得快,性能好。除此之外还需要了解芯片平台,不同的平台的算法支持力度不一样。学术和工业界有一定gap,很多人可能都不知道数据排布NCHW和NHWC有啥差别。在输沟通技巧出侧就是做量化优化,目前大家基本都是用8bit的量化方案,4bit还是挺少见的。量化精度损失也是常见的问题,可以做离线量化上的优化,也可以根据浮点模沟通的重要性的名言型去做在线量化finetune。
  • 其他层面:数据闭环,今年也做了一个数据闭环的事情。我发现数据闭环真的沟通的艺术是一个非常有价值的事情。一方面可以提供一些高精度的预标注标签,可以显沟通著减少标注时间,另一方面可以通过数据闭环的流容器的容积一定比它的体积小程去做自动化的数据挖掘,因为容器是什么到后期盲目加数据是一个低效的事情,通过数据闭环可以不断挖掘出有价值的数据容器是什么,然后又通过这些有价值的数据去提升大模型的效果,这样就进入了正向反馈。数据闭环中因为用到大模型,那么对于论文的可选择范围又更广了。

算法工程师的核心竞争力肯定是要包括上述的这种全流程上工作能力。我愿称之为“稳”的能力

从老板的工作风格中,字随处可见。一个项目处于什么样的阶段,数据分布是怎样,测试场景是否补全,紧急迭代的时候流程把控,数据处理自动化,算法方案调研机器学习分析、代码实现等等。稳健性是一个非常核心的点,这是我个人的看法。而稳健性的底层,还是要依托于对业务的理解,对论文的理解,代码实现能力等有关容器英文系。这块有很多事想说,后续打算举些例子详细聊聊。

入了机器学习这个坑之后,每当见到一篇新奇的文章去建模出输出和GT之间联系的时候,就有种初高中时代见到某种解法解决了压轴题的那种豁然开朗的感觉。就如同第一次看faster-rcnn的时候,惊讶于其中利用Anchor作为桥梁去链接输出和GT之间的关系,linux降低了学习能力。第一次看objects as point容器英文s的时候,我有种耳目一新的感觉,热力图的建模方容器英文式还可以这么用,原来CNNlinux是什么操作系统输出的feature map中的每一个点Linux,它自身就是一个Anchor!有一次看论文分享的时候,了解到年龄估计任务中采沟通技巧和方法用高斯分布去估计年龄,我也被作者的思想所折服。

我觉得也是做算法工作非常重要的点,学会建立相关的模型把业务数据和模型输出联系起来,学术论文都是一些参考答案,在实际应用的时候其实有很多改动的容器苗地方。比如一个序列任务,假设你想去对一种序列做一个多分类,那么肯定要去思考这不同类别的序列有什么差异,如果把这些差异提取沟通的艺术出来作为新的特征给到模型,其实也是所谓的特征工程。在模型的选择上也不是一提到序列就是transformer/LSTM/,当时linux系统安装我第一次看完HCN的时候,发现CNN竟然也可以沟通的重要性用于序列建模。并且巧妙地应用了卷积去学习序列关系,对于数据特征处理上也用了很多巧妙的方法。

其他知识

盘点一下自己的研发工具:

  • 操作系统:ubuntu16.04/deepiLinuxn
  • IDE: Pycharm/Vscode/Clion
  • 其他:docker/shell/vim/linux/shlinux必学的60个命令ell以及linux沟通的感悟下指令集

路漫漫其修远兮,机器学习无止境

工作的第二年,我感沟通作文觉更多的是在于方法论的积累,以及在自己的所负责的业务上去研读更多的paper沟通技巧和方法,把业务强相关的几个方向的文章吃透一点,挖深一点。CV这么卷,大佬云集。做一个默默潜行的学习者,不断积累经验,沟通能力不断提高能力。

有几句话我时刻提醒自己。

先想好问题是什么,再去想解决方案,再考虑创新

工作就是不断遇到问题然后解决问题 ,要享受解决问题后的成长,而不是享受没有问题的轻松

算法的核心在于将业务数据和模型之间相结合,先把性能提上去,再考虑把华丽但没什么卵linux虚拟机用的trick放到PPT

机器学习如星辰大海,不能局限于容器对桌面的压强怎么算一隅之地,很多时候没有广度,很难做好一个项目

以上一年就是自己的一些总结,希望自己可以自勉自励,不断提高自容器对桌面的压强怎么算己。

看大佬的文章是高山仰止,看同阶段的人的体会才能感同身受。祝好!

欢迎大家容器苗关注我的公众号:CV伍六七,定期分享一些自己的成长和收获~容器

发表评论

提供最优质的资源集合

立即查看 了解详情