视觉算法工作总结报告1
从事CV算法这个职业已经三年有余了,如果加上毕业前玩命转行跳坑(生化环材)的那两年,到现在已经差不多快五年了。这五年来,CV越来越卷这个说法的声音越来越强,我个人也是比较赞成这个说法的。不论是出于什么原因,在这个各行各业都在寻求所谓的AI赋能的时代下,CV绝对是转行跳坑之人最容易与计算机产生关系的行业了。
正因为这样,这个所谓的卷,给我自己的感觉就是分母太多,炮灰太多。今年也陆陆续续面了不少人,有太多人我只能称之为”做过CV“,仅此而已。绝大部分人基础不牢、或是代码能力弱、或是对技术没有思考、或是项目经验太水。所以不求做一个手握几篇顶会的大神,做一个基本功过硬、项目不水的合格的CV算法工程师,在市场上还是会有一定竞争力的(不要被贵乎人均3篇CVPR打击到自信)。
写下这篇的文章的目的,也是来分享一下本人最近几年(尤其是工作这三年)的一些心得,希望可以为刚入行或正在转行的CVers提供一些参考。
后文分为基础技能和实战能力两个部分。基础技能篇包含我认为CV算法工程师一些必备的重要硬技能,可能不全,欢迎补充;实战能力篇包含我在实际项目中的一些体会。
视觉算法工作总结报告2
1.全日制硕士研究生,专业:信号处理、生物医学工程、模式识别、电子信息、通信或数学等专业硕士以上学历。
2.熟悉数字信号处理理论和算法或语音识别相关算法;
3.精通Matlab等工具,能独立进行算法模型的设计和实现;
4.熟悉数字信号处理算法在硬件或DSP上的实现方法;
5.熟练使用C/C++语言编程;
6.能熟练阅读英语技术资料,快速阅读并理解国内外相关领域论文;
7.好学敬业,有团队合作精神,具备良好的.口头和书面表达能力;
视觉算法工作总结报告3
1、 硕士及以上学历(或本科且不少于三年工作经验),有计算机视觉或机器学习研究背景;
2、 精通C/C++,熟悉MATLAB/Python,熟悉caffe、tensorflow、keras等常用深度学习框架;
4、 有计算机视觉(目标检测、跟踪、识别)方向应用经验者优先;
5、 在视觉计算、机器学习、人工智能、数值优化等领域有优秀论文发表记录优先。
视觉算法工作总结报告4
1.计算机信息科学、人工智能、数学或相关专业本科以上学历,3年以上相关工作经验,扎实的概率统计, 线性代数理论基础
2.熟悉Linux开发,精通C/C++,Python编程
3.精通深度学习物体检测、识别、语义分割理论及算法如CNN, RNN等并有实际项目经验
职责:
1、负责声纹识别的技术研发,提高其在复杂信道,噪音以及短语音情况下的性能;
2、负责声纹识别系统核心算法研发与优化,包括语音预处理(有效音检测、降噪等)、特征提取、模型选择与训练、结果分析、实验验证;
3、参与声纹研发和身份认证技术的产品化落地;
4、负责跟进行业前沿技术发展趋势,跟踪国际最新算法发展方向和相应技术。
岗位要求:
1.学历要求:
-国内211或985院校毕业,国外名校毕业;
-信号与信息处理、模式识别与智能系统、计算机应用等相关专业;
-统招硕士及以上学历,博士优先。
2.工作经验:
-有3~5年声纹识别方面的工作经历或实验室研究背景;
-在声纹识别、声音分类、预处理、特征提取算法方面有丰富经验或成果;
-具备扎实的模式识别、机器学习和深度学习等知识基础和丰富的项目研发经验。
3.能力要求:
-熟悉声纹识别的主流算法,如gmm-ubm,svm-gsv,ivector-plda等;
-熟悉lr/gmm/svm/crf/hmm/dnn/cnn/rnn的研究背景;
-熟悉c/c++开发及shell/python等脚本,有较强的编程能力,能够流畅阅读英文文献;
-熟悉相关领域的最新进展和技术,具有国际会议/期刊论文或商用产品转化经验者优先;
-较强的学习能力,具有良好的沟通能力,以及团队合作意识。
职责:
1.负责现有的布,辅料的漫反射、镜面反射、折射、粗糙率、法线数据采集,模型重建算法的维护和新需求算法的实现;
2.分析公司现有布辅料数据采集项目的需求和算法以及学习跟进业界最新算法成果,优化和提出改进方案。
担任资格:
1.本科及以上学历,计算机相关学位,具备3年以上的计算机视觉算法相关工作经验;
2.熟悉 linux 环境开发,精通c/c++ 精通数据结构和基础算法;
3.具备扎实的数学基础和计算机视觉算^v^底,有光学方向知识;
4.精通视觉理论和方法,包含但不限于结构光视觉,双目立体视觉,条纹相位和摄影测量中的一种或多种,有做过珠宝,钻石扫描仿真项目的优先;
5.善于思考和发现问题,并能提出改进方案;
6.针对项目需求和业务场景,具备技术算法拆解和规划能力,可根据实际应用场景提出算法优化创新思路;
7.具有较强的学习和研究能力,能够阅读相关领域英文论文,4级英语。
职责:
1、开发及优化用于视觉标定和定位、三维重建的图像处理算法;
2、基于计算机视觉,开发有标记和无标记的全身动作捕捉算法;
3、针对不同应用需求,对算法进行深入优化;
4、撰写技术开发文档;
5、跟踪计算机视觉领域的新技术,技术方案论证,应用到公司的实际项目中。
任职资格:
1、硕士学历,数学、计算机图像处理、电子工程等专业,能熟练阅读英文文献,具有扎实的数学基础和图像处理理论;
2、掌握相机标定、三维重建、机器学习等相关理论知识,对计算机视觉算法有深入的理解;
3、熟悉优化、预测、滤波算法,c/c++、opencv、matlab等语言和工具;
4、具有良好的表达和沟通能力,较强的学历能力、责任心和团队精神,勇于接受挑战;
5、有机器学习/计算机视觉领域实际研发经验者优先。
针对二维情况如下:
三维情况是:
现在把我做的项目的困难进行总结:
二维方面的算法就不细说了,无非就是一些图像的增强、平滑、去噪、分割、特征的提取等等内容即Blob分析,还有模板匹配等,难度不大,主要是应用方面比较灵活,需要了解开发的套路,这里直接看官方例程就好了,在开发算法前,还需要对相机的选型、光源的选型进行确定,然后对相机进行畸变矫正,这里大家需要理解矫正的本质原因是什么,还有明白矫正的过程和评价标准。算法如果开发好的话,那下面就是对界面进行开发,可以使用QT也可以使用MFC,这里界面开发需要注意的就是多线程问题,因为视觉算法处理是需要时间的,而摄像机的帧率是很快的,因此需要开启线程对相机的拍照和算法执行进行单独的处理进行,尤其是线程的应用大家应该多注意死锁问题,设计时需要考虑周到,以及发生异常如何处理等。然后开发相机的SDK,其实很简单,配合界面开发的程序进行移植就好了,所谓的SDK开发,就是相机厂家提供的接口函数,一般官方会提供一个界面操作自己家的相机,同时也会提供界面的模板,还会提供大量的例程,大家只需要研究一下例子就可以移植了,如开启相机,曝光量、曝光时间、增益、亮度等都可以通过接口函数进行设置的,这里主要注意的是SDK输出的默认图片的格式,厂家不同,格式会不同, 还有就是需要把输出格式的图片转换成halcon或者OpenCV可以处理的图片格式,只有这样,算法拿到图片后才可以处理。然后就是看看是否需要和机械手进行配合工作,如果需要机械手,则还需要对其进行标定,一般二维大多数使用的都是九点标定,其实不一定九个点,理解原理后你会发现,标定的目的就是得到一个仿射矩阵,通过矩阵把图像的坐标变换到机械手坐标下的坐标,然后让机械手到达即可。有时候项目并不需要使用机械手,这时候可以使用运动板卡,运动板卡的开发和相机的SDK开发很类似,直接调用接口就可了,如果对这部分感兴趣,也了解伺服电机等电器,完全自己可以组合一个简易的机械手,因为机械手的本质也是这些东西,当然精度方面不同的。如果项目使用运动板卡,这里同样也是需要进行标定的,和机械手一个道理,只是更麻烦点,因为需要根据项目要求设计运动,然后对其进行标定,难度都不大。以上是进行定位、分拣、跟随等项目。如果是测量的话,halcon提供了很多的算子,精度可以做到很高,大家研究例程就好了,这里提醒大家一定要注意测量的世界平面的建立和目的,尤其是测量的类型。以上就是二维方面的学习总结,总的来说,难度不大,但是要求掌握的知识很多很杂,如果没有软硬件知识,可能会很难学习,但是不要着急,慢慢来吧,我大概学了一个半月就掌握了二维方面的开发。下面就简单的介绍一下三维视觉的开发。
对于是三维视觉,其难度相比于二维上升了不止一个层次,但是对于我来说都是水到渠成的事,难度还好,还能接受,主要原因是研究生期间研究了大量的人工智能算法知识,对其抽象知识已经适应了,各方面能力都得到了提高,因此学习起来觉得不是很难,但是因为没有这方面的经验,因此也走了一些弯路,下面会一一分享。下面分享一个3D处理流程,是halcon官方提供的,大家查看一下帮助文档,研究一下就知道了,如下:
三维视觉的开发 ,首选是你需要确定你选择什么样的方式进行获取3D信息,目前主流的几种方法结构光法、双目、多目、TOF、DFF等,通过这些方法获取三维的视差图像也就是深度信息,拿到深度视差后可以转换为点云,然后在对点云进行处理或者获取模板,对点云进行处理后,提取到感兴趣的轮廓或者点或者位姿,然后通过标定传给机械手,使其工作即可。首先对于3D信息的获取,我实现了两种方式,一种是结构光法即基于激光三角的3D信息获取系统,原理不说了,大家看论文把,不难理解都是基于简单的几何知识。从上图可以看看,基于激光三角的可以直接获取x,y,z的深度图片,进而可以转换为点云的3D模型,另外一种是双目立体视觉,该模型可以直接获取视差图像,然后转换为点云模型,同理还有其他的方法,这样这是3D视觉的前提,即获取点云数据,然后就是进行处理,有融合、匹配、切割、配准等等操作,很多和二维的算法很类似,因此学习时要多思考以前学过的东西。
以上就是我最近几个月的学习总结和感想,当然过程肯定比我说的更坎坷,但是坚持下去,一段时间过后你会成长很快,目前三维方面的视觉还需要继续深入,尤其是精度方面的需要进一步学习和提高,下面计划一下后面几个月的目标。
目前二维方面的算法应用已经没问题了,例如尺寸的测量、OCR的识别定位、匹配定位等项目都可以做了,而三维方面需要继续深入,目前在看几本书,理解一下理论知识,如《机器视觉》、《机器人视觉测量与控制》以及《视觉测量与方法》,其实这几本书讲的都差不多,好好理解一下。这几本书看完后开始看点云处理方面的书籍以及学习OpenCV和OpenGL两个开源库,然后深入研究点云的处理的方法和应用库PCL,然后在接触SLAM技术。当然这个期间会不停的做项目积累经验,遇到问题解决问题。这些实现估计半年左右应该可以完成。今天就到这里。
职责:
1.负责基于图像数据的目标检测、聚类、识别、分割场景理解的算法开发,实现高精地图数据的智能化、自动化生产
2.负责融合数据源的目标检测识别和语义分割算法的研发
3.负责研究和探索基于传统算法和基于深度学习的前沿算法发展,不断优化迭代,保证产品在相关领域的先进性和竞争力
任职要求:
1.计算机信息科学、人工智能、数学或相关专业本科以上学历,3年以上相关工作经验,扎实的概率统计, 线性代数理论基础
2.熟悉linux开发,精通c/c++,python编程
3.精通深度学习物体检测、识别、语义分割理论及算法如cnn, rnn等并有实际项目经验
从事CV算法这个职业已经三年有余了,如果加上毕业前玩命转行跳坑(生化环材)的那两年,到现在已经差不多快五年了。这五年来,CV越来越卷这个说法的声音越来越强,我个人也是比较赞成这个说法的。不论是出于什么原因,在这个各行各业都在寻求所谓的AI赋能的时代下,CV绝对是转行跳坑之人最容易与计算机产生关系的行业了。
正因为这样,这个所谓的卷,给我自己的感觉就是分母太多,炮灰太多。今年也陆陆续续面了不少人,有太多人我只能称之为”做过CV“,仅此而已。绝大部分人基础不牢、或是代码能力弱、或是对技术没有思考、或是项目经验太水。所以不求做一个手握几篇顶会的大神,做一个基本功过硬、项目不水的合格的CV算法工程师,在市场上还是会有一定竞争力的(不要被贵乎人均3篇CVPR打击到自信)。
写下这篇的文章的目的,也是来分享一下本人最近几年(尤其是工作这三年)的一些心得,希望可以为刚入行或正在转行的CVers提供一些参考。
后文分为基础技能和实战能力两个部分。基础技能篇包含我认为CV算法工程师一些必备的重要硬技能,可能不全,欢迎补充;实战能力篇包含我在实际项目中的一些体会。
职责:
· 针对任务需求,完成相关图像处理算法、机器视觉算法的开发与实现;
· 图像智能分析算法的开发,主要为物体检测、识别和跟踪;
· 基于智能机器人应用的机器视觉处理算法开发;
任职条件:
· 计算机、自动化、数学等相关专业研究生以上学历;
· 掌握数学图像处理常用方法;
· 精通c/c++、python语言,熟悉opencv、caffe、pytorch等框架;
· 具有良好的数学基础及编程习惯,对机器视觉、图像处理、算法开发等有强烈兴趣,意向在此领域发展;
· 具有良好的分析能力、逻辑思维能力和表达能力;
视觉算法工作总结报告5
1. 硕士及以上学历,图像处理、计算机视觉、自动化相关专业;
2. 熟悉C ,VC++ ,python;
3. 精通数字图像处理算法,包括图像增强、图像分割、特征提取、模板匹配等,熟悉opencv,halcon等视觉算法库;
4. 有工业领域机器视觉算法(目标定位、OCR、测量、缺陷检测)开发经验;
5. 有windows平台下算法优化的经验;
6. 具有阅读专业英文资料的能力,以了解国际先进的.视觉算法;
7. 有底层机器视觉算法库开发、3D视觉算法开发经验者优先;
关于数据,最经典的莫过于那句「数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已」。其实在CV工业界我还想再加一句,数据也基本决定了下限,数据到位了,让狗随便写个模型都能起飞。虽然有点夸张,但其实就是想强调工业落地中数据是最重要的一环。
这里我必须说明的是,数据做到位,绝对不是无脑堆数据集。我很负责的说,无脑堆数据集增加数据量的做法,大概率作用不大。想要在数据上下功夫,数据量固然重要,但就像我之前说的,首先一定要考虑具体的应用场景,堆数据也要有目的性的堆,坚决杜绝小鹿乱撞。其次,要习惯于分析数据,计算数据集的各种统计信息,根据分析得到的认知,仔细设计数据前处理的过程(比如检测里anchor和gt的匹配过程)。同时也要有分析bad case的习惯,每训练出一个模型都要去总结一下所有bad case的场景特性,比如是光照条件下效果差,运动条件下效果差,目标不全的情况下效果差,等等。根据bad case的场景特性,在数据上做针对性的优化,缺啥补啥。因此,数据增强也不是随便增强的,而是有针对性的。用到的每一种增强方法都应该有它背后想解决的问题,绝对不是别人做了个平移翻转,你就也要做个平移翻转。
以上流程从业务流程来看,机器学习项目基本就是了解业务需求 ->调研业界方案 -> 查看是否适用 -> 上线效果。不难发现,在对待具体业务上,算法工程师如何通过“实践”提升自己的机器学习水平,以及如何通过机器学习/深度学习实际应用来改善企业的业务等级和营收能力至关重要。
我经常说算法只是工具,重要的是在正确的行业和产品认知上,实现业务目标。
所以有人恐慌算法工程师会被自己的算法替代,这是极其可笑的。机器可以做的虽然很多,但是无法代替人对数据的理解,这是算法工程师存在的价值。而Deep Learning虽然在某种程度上代替人提取特征,但是它最多只能解决特征变换问题,仍然处理不了数据清洗和预处理中需要用到领域知识的情况。
在我的经历里,我倾向于算法工程师是技术+产品经理为一体的综合型人才。
现在有很多的机器学习课程和教科书,它们大都是关于如何从零开始制造烤箱,而不是如何烹饪和创新配方。但对大多数企业而言,其实他们需要的只是烹饪方法——即解决他们业务问题的方法。
为了能让更多初学者了解机器学习/数据分析/数据挖掘等岗位的工作流程,找到入门的切入点,我特地邀请了两位人工智能不同领域的专家,**一位BAT的数据挖掘工程师@熊猫酱,一位计算机视觉方向的专家@Angela,**还有我阿里高级算法工程师@Chris,以自身具体的工作流为核心,举办连续四场人工智能入门分享会。
我们将分别从各自擅长的领域:python数据分析、机器学习理论、机器学习数学、算法工作流,以我们在大厂具体工作流逆向指导理论学习,规划学习路线,是不可多得的入门级课程,旨在为广大的AI爱好者和跨行学习者提供坚实的基础。
职责:
1.针对任务需求,完成相关图像处理算法、机器视觉算法的开发与实现;
2.图像智能分析算法的开发,主要为物体检测、识别和跟踪;
3.基于智能机器人应用的机器视觉处理算法开发。
任职条件:
1.计算机、自动化、数学等相关专业研究生以上学历;
2.掌握数学图像处理常用方法;
3.精通c/c++、python语言,熟悉opencv、caffe、pytourch等框架;
4.具有良好的数学基础及编程习惯,对机器视觉、图像处理、算法开发等有强烈兴趣,意向在此领域发展;
5.具有良好的分析能力、逻辑思维能力和表达能力;
6.有ros,现代智能机器人等相关工作经验者优先考虑。
职责:
1.负责前端scaler/视频处理芯片平台软件开发与维护;
2. 负责生产、售后反馈问题的处理;
3. 支持、协同项目其他平台软件整体调试工作;
4.负责支持其他部门验证性需求功能软件部门实现。
岗位需求:
1.本可以上学历,计算机软件相关专业优先;
2. 3年以上视频scaler,图像处理芯片软件开发项目经验;
3. 熟悉tv、monitor或setup box框架和处理流程;对画质、视频处理流程、图像强模块有较深了解。有osd开发能力;有mstar、st、realtek、pixel work等相关scaler芯片开发经验;
4. 精通c或c++, 能够读懂英文规格书,熟悉一种或以上scaler相关开发套件。
职责:
1、实现基于智能相机的机器视觉系统图像处理算法的设计、调试及实现;
2、参与较复杂的图像处理、识别算法的实现,如虚拟场景照等图像算法;
3、根据项目识别要求,对图像进行数字分析和处理,确定识别算法;
4、根据应用场景,选择合适的算法并进行优化;
5、完成上级领导交办的其他工作,与同事做好团队合作。
任职要求:
1、计算机、数学、电子、通信、自动化、信号处理、图像处理等相关专业、研究生及以上学历;
2、对计算机图形/图像算法感兴趣,愿意从事生活照、趣味照等图像算法的研究;
3、较强的实际动手能力、学习能力和论文检索,英文专业文献阅读能力;
4、具备高度责任心、工作积极主动、乐于接受挑战,能在较大的压力下保持良好工作状态;
5、具有以下经验或能力者优先考虑:熟悉数字图像处理、机器视觉、模式识别、机器学习等任一领域相关算法;
职责:
1. 负责通信物理层信号处理算法研究、开发与验证,用matlab或c语言搭建链路级或系统级仿真环境,评估通信物理层信号处理算法及通信系统的性能。
2. 协同算法硬件实现的设计、验证及fpga原型验证。
3. 参与通信soc芯片的系统验证、测试、调试与分析。
岗位要求:
1. 硕士及以上学历,通信、电子、计算机或数学等专业。
2. 具有扎实的数字通信理论和信号处理理论基础,熟悉无线通信系统及信道模型。
3. 掌握matlab和c语言,会用matlab和c语言搭建无线通信仿真系统。
4. 具有wifi,bluetooth,zigbee等任意一种无线通信系统物理层或基带系统算法设计经验者优先考虑。
5. 具有复杂问题的独立分析与解决能力,与同事密切合作并有效沟通,具备良好的英语读写能力。
视觉算法工作总结报告6
俗话说得好,基础不牢,地动山摇。我曾经就见过因为基础不牢间接导致项目夭折,甚至是丢掉工作的案例。因此无论是数理基础、图像处理/ML/DL基础,或是编程基础,都是越扎实越好。
这里把非coding的基础全部划归与理论基础,包括但不限于图像处理、机器学习、深度学习、模型设计、优化方法、评估指标、基础任务等等。这些基础不牢靠,其他能力再强也都是空中楼阁。
比如基本的图像操作,包括数字图像运算、滤波、ROI、仿射变换等等都必须了如指掌。这些虽然可能不作为这个岗位的核心竞争力,但也绝对是必备技能,只要涉及到CV,就绕不开这些。
再比如卷积、池化、BN、一些基础loss等等这些最基本的CNN操作,它们的原理、计算方式、特点都必须要做到烂熟于心,不能有一丝一毫的含糊。因为只有做到这样,才可能为你在项目里设计模型、设计loss这些工作中扫清障碍。举个简单例子,设计模型的时候要考虑每一层的感受野,要考虑浅层和深层的feature的差异,要根据不同的任务考虑平移不变性或平移等变性,要考虑每一层卷积的计算量,设计loss的时候可能要考虑困难样本的挖掘,这些都是基于牢固的基础才有可能完成。
除了基础,还需要掌握CV领域各个基础任务的常规算法。个人认为这里的基础任务至少包含分类、检测、分割、GAN。工业界大部分的实际任务都可以抽象成这几个基础任务或者是这几个基础任务的扩展,因此多了解一些它们的经典算法也有助于实际项目的快速开展。这里简单列举一些。
分类:AlexNet、VGG、ResNet、MobileNet、ShuffleNet、GhostNet、SqueezeNet等。
anchor-based检测:RCNN系列、SSD、YOLO系列(不包含YOLOv1)
anchor-free检测:YOLOv1、FCOS、CenterNet等
分割:FCN、SegNet、UNet、Deeplab系列等
除此之外,还有许多杂七杂八的知识点和技巧最好也能熟练掌握,比如CNN一些简单好用的小模块(SE、CBAM等)、模型蒸馏、Vit(self-attention)、算子融合、结构重参数等。
斟酌了一下,这个小标题里用了「过关」而不是「过硬」,是因为我发现很多所谓的算法工程师,代码能力根本不及格。因此代码能力这块也是我想强调的重中之重。
我所秉承的代码两条原则:
先说第一条,有人会问网上代码都是现成的,为什么要自己写,我想说最简单的原因就是你是个工程师,写代码就是你的看家本领啊!而且不可能永远都用别人的代码吧,总有一些模块是必须自己实现的。
具体来说,自己写代码会让项目变的相对可控,毕竟代码是自己一行一行敲的,一旦需要修改或者优化都会更方便;自己写代码还有一个重要的好处,就是写代码的过程其实对各种原理深入理解的过程,你一旦能独立实现一个算法逻辑,那说明你百分之百掌握了它。
写代码是个潜移默化的过程,坚持自己写,写的久了,会发现自己的bug定位解决能力、项目代码架构、代码细节、算法原理各个方面都有提升。
所以千万不要犯懒,不要眼高手低,一定要自己多写,写的过程中多写test case多测,培养自己的动手能力。
再来看第二条,其实直接用别人的代码也是挺常见的一件事了,毕竟没必要重复造轮子。但我一直认为,程序员要时刻保证自己的代码是可控的,也就是一旦出了问题你能以最快的速度定位到。这就意味着,在使用别人代码之前,必须要认认真真的读一遍,至少要搞清楚每一行的输入输出都是什么,这样你在修改或者优化的时候,你才知道在哪改啊(毕竟大部分情况下别人的代码仅仅只是能用,但都不是最适配于你这个项目的)。
说到读代码,我发现有很多刚入行的朋友,自己写一点还勉强能写,但一旦读别人的代码就会有相当大的障碍。这个问题其实很好解决,只要掌握好方法并且克服心理恐惧,就可以了。
读一个项目的代码的时候,一定不要先去读一些核心方法,一定要先从整个项目的入口开始读起。用一个比较好用的IDE(比如我自己用jetbrains),从入口开始,碰到调用的模块就点进去看明白,一层一层的由外向内深入,读的过程中也可以配合着纸笔,边读边画一下项目的架构。
总而言之,无论是写代码还是读代码,都要一点一点的啃,没有捷径!只有不辞辛苦、不怕麻烦的人才能获得代码能力上的提升。
经常看到有人问做算法工程师,只会python行不行,除了python以外学个java好还是学个c++好之类的问题。先说结论:只会python不行,第二门语言必须是c++,sql最好也懂一点。想继续拓展的话java和golang都行,我个人推荐golang。
我自己在当年上学刚转行的时候也被同样的问题困扰了很久,记得那时候想学第二门语言,java看了看,c++看了看,甚至还有一段时间在想要不要把再matlab系统学一遍,也是走了很多弯路。
先说python。python确实相对其他语言简单一些,毕竟自己不用编译,语法也不难。但我的观点的是不要把它想的过分简单了,写的时候还是有很多基础细节点需要注意的(比如我很早之前在一个项目里被一个深浅拷贝的bug折腾了一周,就是典型的基础有问题)。除了python基础之外,平时用python的重中之重就是和各种package打交道了,opencv、numpy,pytorch/tf这些等等。这些要做到的就是常用的api最好非常熟悉,否则每次都要查用法的话效率真的会很低,自己也累。
这里多说两句:
再说C++。刚才说了,C++是必备技能。原因很简单,一定要牢记自己的title是算法工程师,既然是工程师就离不开模型部署,部署就绕不开C++。关于部署与C++的关系,可以看我这条回答,这里就不重复了。我也是在工作之后的实际部署项目里学的C++,算是现学现卖,过程很痛苦,虽然到现在也没有精通,但起码是能独立部署模型,能用C++写业务逻辑,勉强够用了。关于C++的学习,我个人的一点愚见就是一定要多动手,多写,最好能去实战一两个项目,千万别想着速成,市面上那些什么多少天速成C++的一个都不要信。顺便吐个槽,C++这玩意儿真是一个月不写就手生。
除了C++本身之外,还需要懂一些编译的知识,至少要会用cmake编译项目,毕竟这玩意儿跟python不一样,你得自己编译。关于cmake编译,可以看「基础知识」gcc/g++编译过程及gcc/g++与cmake对应关系。
书的话,就看C primer plus和C++ Primer我觉得就够了。
视觉算法工作总结报告7
这一趴包含工业界实际项目中我的一些心得,主要强调软实力。大家都调侃深度学习是玄学,那在这种条件下,在实际项目中总结出一些心得感悟就显得尤为重要了。
如果你的岗位是算法研究员或算法科学家等research岗位,那这一部分可以忽略。但算法工程师,毕竟不是纯研究职位,其主要职责还是要去服务于具体业务的。但我发现有很多人(也包括我自己)都会偶尔钻进牛角尖,追求最新最fancy的技术,而忽略的真实的业务需求。这并不能称之为一件坏事,但在实际业务中,这却是一种效率低下、针对性差的做法。不是说新技术就不能用,是不能以使用新技术为目的,而必须以匹配业务需求为导向,即使是新技术,也要考虑它是否可以满足具体项目中具体的需求。在这一部分我总结了以下两点。
我个人认为,基于项目的发展顺序,调研工作应该分为竞品调研、数据调研和论文调研。见过有人不习惯或者懒得做调研,拿到任务乱试一气,几个月都没什么像样成果。所以千万不能忽视调研工作,调研做到位了,能起到事半功倍的效果。
先说竞品调研。无论是自己测试竞品app、demo、sdk还是直接打听,目的都是为了确定大方向,大方向指的是项目应该用分类做?分割做?检测做?分类+检测?需要后处理?GAN?总之就是在宏观上确定项目是CV中的哪类或哪几类任务。
再说数据调研。这里主要是收集数据,如果有线上的标注数据最好,如果没有那就根据具体场景去找一些开源数据,有的时候我们苦于只有原数据但没有标签,这个时候找一些AI开放平台的sdk去生成一波标签也不是未尝不可,但毕竟是机器生成,还是需要人工过一遍。当然了,在缺数据的情况下最好还是能向公司申请,从数据标注公司买数据,这是最省心省力的方式了。
最后说一下论文阅读。确定了大方向之后,肯定要去读一下这个方向的论文,看看有什么具体的做法。这里要明确两点。
关于数据,最经典的莫过于那句「数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已」。其实在CV工业界我还想再加一句,数据也基本决定了下限,数据到位了,让狗随便写个模型都能起飞。虽然有点夸张,但其实就是想强调工业落地中数据是最重要的一环。
这里我必须说明的是,数据做到位,绝对不是无脑堆数据集。我很负责的说,无脑堆数据集增加数据量的做法,大概率作用不大。想要在数据上下功夫,数据量固然重要,但就像我之前说的,首先一定要考虑具体的应用场景,堆数据也要有目的性的堆,坚决杜绝小鹿乱撞。其次,要习惯于分析数据,计算数据集的各种统计信息,根据分析得到的认知,仔细设计数据前处理的过程(比如检测里anchor和gt的匹配过程)。同时也要有分析bad case的习惯,每训练出一个模型都要去总结一下所有bad case的场景特性,比如是光照条件下效果差,运动条件下效果差,目标不全的情况下效果差,等等。根据bad case的场景特性,在数据上做针对性的优化,缺啥补啥。因此,数据增强也不是随便增强的,而是有针对性的。用到的每一种增强方法都应该有它背后想解决的问题,绝对不是别人做了个平移翻转,你就也要做个平移翻转。
分析问题和解决问题的能力基本会出现在每一条招聘的JD上。我一开始也觉得这一条只是用来凑字的,但其实,在工作中这一条至关重要。从每一次debug,到对项目整体效果和性能上的把控,分析和解决问题的能力都要发挥作用。
分析问题和解决问题听起来挺玄幻,但我认为,在算法工程师这个职业中,这项能力也是可以去拆解的。我个人的观点是:扎实的基础、良好的逻辑性、工匠精神以及经验的总结,共同构筑这项玄幻的能力。
首先,扎实的基础,这个不用多说了。比如想要优化一下模型,如果连CNN都不够熟悉,那其他的都是空谈,再分析也是乱分析。
其次,良好的逻辑性,是要透过现象看本质。要做的就是先去分析现象(比如模型效果到底哪里不好,在什么场景下不好),然后通过这些现象的总结,逐个分析可能的原因,比如是数据原因、还是模型设计的不好、还是训练手段或者loss设计的有问题?再比如若是loss的原因,具体是什么原因呢,是不是要从前向传播和反向传播两个角度再分析一下呢?这一点其实就像警察叔叔破案一样,层层深入。把所有可能的原因分析到位后,再逐个击破。
第三,工匠精神。列出这一点的原因的是在分析并解决深度学习的问题时,往往要做大量的实验,这些实验往往不能对猜想做到快速验证,因此会非常的耗费时间和精力。根据我的个人经历来看,做实验是平时工作中做的最多的事情了,非常容易产生厌烦情绪,所以还是要调整心态、不怕麻烦、勤动手、具备工匠精神。
最后,要善于总结经验。有的时候,不同的任务遇到的问题是相似的,如果善于总结经验,那遇到问题时有可能会用过去的任务经验快速解决。在模型问题上,我个人大体上的方法论是一定先从数据入手,往往数据问题得到解决后模型效果会有不小的提升;其次再去分析模型设计、训练技巧、loss函数这些问题,大多数情况下解决这些问题也会有一些提升,但是提升的幅度会偏小一些。
除去以上这四点,另一个小感悟是一旦遇到问题,一定要先尝试自行分析解决,尽量不要一上来就问leader或同事。自行分析解决的好处是,在这个过程中自己的感悟会更深,利于总结经验,也容易形成一套适合自己的方法论;同时这个过程也比较容易发现基础上的漏洞,起到查漏补缺的作用。自行尝试无果后,再去咨询一下leader或同事的想法,看看别人的idea,这样对自己的成长帮助是最大的。
视觉算法工作总结报告8
1、计算机、数学、电子、通信、自动化、信号处理、图像处理等相关专业、研究生及以上学历;
2、对计算机图形/图像算法感兴趣,愿意从事生活照、趣味照等图像算法的研究;
3、较强的实际动手能力、学习能力和论文检索,英文专业文献阅读能力;
4、具备高度责任心、工作积极主动、乐于接受挑战,能在较大的压力下保持良好工作状态;
5、具有以下经验或能力者优先考虑:熟悉数字图像处理、机器视觉、模式识别、机器学习等任一领域相关算法;
2、 独立设计、开发、测试和维护数据挖掘机器学习等算法模型,将算法模型应用在各类证券业务场景和IT产品中,利用数据和算法模型真正解决业务的痛点问题;
3、 能够根据目标主题,独立设计数据挖掘和分析框架,独立搜集数据,并制作数据挖掘分析报表;
4、 负责数据产品(如智能运营系统、推荐系统等)的设计和开发,并负责数据产品的工程化落地;
5、 从部门业务角度出发,进行数据探索,利用数据来发现业务和产品的问题与瓶颈,提出可以落地的改进措施和解决方案;
6、 阅读行业最新的Paper,研究人工智能、数据挖掘、机器学习领域的.最新技术和算法,结合证券行业的业务,设计各类数据(模型)应用场景和数据产品,并负责实施落地,将模型算法和数据赋能证券业务。
职责:
1. 基于Halcon、OpenCV视觉库进行图像算法设计、开发和调试
2. 基于C/C++完成图像处理功能开发
3. 根据应用场景,优化现有图像算法
4. 优化图像处理框架,包括功能、性能、稳定性及鲁棒性
5. 参与产品图像算法规划制定、完成图像算法相关的需求调研与需求分析及设计
6. 承担算法详细设计及开发工作,完成技术文档的编写,配合团队完成项目计划进度
7. 与系统开发人员进行系统集成,完成视觉系统的开发工作
任职要求:
1.本科3年以上工作经验或硕士(机器视觉、图像处理等方面)
2.熟悉图像处理及机器视觉的.基础理论和算法知识
3.熟练使用Halcon、OpenCV等主流视觉库/工具中的一种或多种
4.熟悉C++编程语言
5.把图像算法应用到实际产品中的成功经历优先
6.具有较强的分析/学习能力和较强的创新意识,善于发现问题并提出可行性解决方案
7.具备良好的代码书写规范和文档编写能力
8.有责任心、思路清晰、具备良好的沟通能力和团队协作精神
9.大学英语4级以上水平,良好的英语阅读能力
视觉算法工作总结报告9
从劝退专业转码到现在已经有5年的时间了,工作也已三年有余,说长不长,说短不短。这一路上自己也走了许多弯路,遇到了各种各样的坑。这篇文章一定有许多经不起推敲的地方,但这确实是我这几年来基于自己的经历,得出的适用于我自己的经验心得。我相信每一个算法新人最终都会形成一套适用于自己的工作经验或方法论,也许这篇文章提到的内容并不适用于所有人,但也希望能起到抛砖引玉的作用,给刚入行迷茫的新人一些启发,帮助新人快速的找到适合自己的道路,少走弯路。
同时,工作三年作为一个里程碑式的节点,做这样一个记录我认为是很有意义的。期待接下来的三年大家都能有更长足的进步。