工程核心算法
A. 现在很多工程项目都用车牌识别系统,我想问一下车牌识别系统的原理是什么
核心算法:从六个步骤来提取我们抓拍的车牌信息,第一:图像捕捉采集、第二:车牌定位、第三:预处理、第四:字符分割、第五:字符识别、第六:输出车牌识别一体机抓拍的结果。以上步骤里包含了数字形态学运算法,字符串分割等算法。
对同业兴创停车场的车辆车牌快速抓拍捕捉确定位置,根据车牌颜色,数字,和字母精准识别分割,提取信息并储存到电脑里,方便车辆出场时调用时间信息来计算费用,这样的算法准确,高效避免出入口拥堵现象的发生,300万像素的高清晰CMOS图像传感器,高性能DSP为图像处理核心,内置控制CPU,多项新的技术可对图像编码、处理分析等起到重大作用。
整体结构及设计理念:一体机外形采用枪型机,结构采用嵌入式抓拍机的布局格式,集成度高,专业用于停车场收费车道的工业级车牌识别一体机,整体的设计里面做到了三防,分别是防水、防尘、防震动,即使在恶劣的外界环境下也依然保持很高的识别准确率。
(一体机内部结构)
自动收费软件:界面操作简单易学,格局分布明确、视觉感强,支持多种传输协议:ICP、UDP、FTP、TFTP格式,机身自带64G内存,可存储jpg格式图像高达30000多张。采用H.264视频图像高压技术,对每天,每季度,年收费得出明细方便日后查看、核查,支持软件升级功能实现人脸识别技术。
一体机特点:系统可以全天不间断工作、不会疲劳、错误率极低,自动调节拍摄车牌时照成白平衡,色彩对比度不合理情况,将车牌识别设备安装于出入口,记录车辆的牌照号码、出入时间,并与地感线圈,栏杆机起降的控制完美结合,实现车辆的自动管理。节省人力、提高效率。
一体机工作性能:实现在低照度彩色摄像机的基础上,通过软件的功能,把图像中最亮的部分遮挡。一般可将大灯的强光遮挡,从而将车牌较清晰的抓拍下来,宽动态功能:这是解决车灯对于抓拍影响的最好的办法,当背景光过亮时,能够自动调节白平衡,并且在断电的时候还可以继续上传的功能。
B. 算法工程师应该具备哪些工程能力
作者 | 木东居士
来源 | Data_Engineering
最近看了 Milter 的《算法工程师究竟需要哪些工程能力》这篇文章,有所感想,因此也写一篇关于算法工程师的技术能力的问题,和大家分享一下居士关于算法工程师的技术能力的观点。
对于一名优秀的算法工程师,他(她)要具备的不仅仅是出色的技术能力,也要有很深的业务理解能力和对外沟通能力,总之,要求可以很高!
但是,从职责能力的划分上来讲,算法工程师首先是一名工程师,因此本文主要从工程能力要求上进行一些探讨。
开始之前先放一份思维导图,这将是这篇文章要分享的核心内容:
工程能力概览
算法工程师,从名字上我们就能看出,一名算法工程师首先应该具备算法能力和工程能力,我们可以认为这是基础的技术能力。由于现在开源技术的普及,Sklearn、Tensorflow 和 Spark ML 基本已经成为大部分算法工程师标配的工具库了,因此,熟练的调包能力也是决定了一名算法工程师能否快速实现需求。
其次,在真实的生产环境中,算法的落地会遇到各种各样的业务场景和数据环境,这也要求算法工程师需要具备Pipeline 构建能力,将整个生产环境中的数据流和模型打通。同时,在生产环境中,会出现各种“疑难杂症”等待你去解释,比如说为什么实验效果特别差?为什么模型效果不稳定?这就要要求算法工程师需要具备一定的数据分析能力。
很多时候,你会发现,你用在数据分析和Pipeline构建上的精力可能占据了你8成以上的工作内容。
当你具备了上面的能力时,你已经可以称自己是一名算法工程师了。此时,你可以去对着数据分析小得瑟一下:“你看,我能构建整个模型的Pipeline,你却只能拿到别人提供的数据后调调包吧。“或者,你也可以去找开发得瑟:”你看,我懂了很多算法哦,你就只会写代码吧。“
得瑟完之后,我们还是回归正题,算法工程师只具备这样能力是否已经够了?答案当然是不够的。由于不同公司的团队成熟度不同,工具化和流程的成熟度都不同,这就会对算法工程师有不同的要求,比如说模型发布能力和报表开发能力,当然也会有一些其它能力,虽然可能不是特别重要,但是当这些工作没人帮你做的时候,算法工程师可能依然要承担起这些工作内容,比如说灰度测试的能力、负载均衡的能力等等。
将上面的内容整理后,就是这样一份思维导图了(一张图多看几篇更能加深印象,因此我再贴出来一遍)
工程能力详解
一、基础能力
算法能力
算法能力就不多说了,算法工程师的基本能力要求,不懂算法对于一名算法工程师来讲是不太合理的。这里居士把统计学的内容也放进来了。
编程能力
编程能力主要分为两部分:
Python、C++、java这类编程语言,这三种也是算法工程师需要了解的主流编程语言,一般掌握其一就够,看不同公司。 Sql就是很通用的能力了,Sql也是一门编程语言,而是是数据处理最常用的语言! 很好用。 大数据场景下,要了解Hive Sql。调包能力
大家虽然会调侃调包侠,但是说实话,能调包调的很溜的人,也是不多的,比如说现在让你自己用tensorflow构建一个复杂网络,不能google,你能写出来吗?能记清楚用法吗?
Sklearn Tensorflow Spark ML二、核心能力
Pipeline 构建能力
Pipeline构建能力,这里想表达的更多的是整个数据流的构建能力,数据从日志->特征->模型训练->反馈,这一个链条能否完成的能力,这里面会有很多难题需要克服。比如说:
实时和离线模型一致性问题? 离线和实时特征一致性问题? 实时特征构建的问题? 数据延迟的问题?很多时候,模型发布之类的工作是可以由其他同学支持完成,但是数据流这种问题更多的是需要算法工程师来解决的。
数据分析能力
这里的数据分析能力不是指商业分析或者业务分析,更多的是指特征分析、算法效果分析和各种异常问题定位分析的能力。
很多时候,两个算法工程师能力水平的强弱从数据分析能力上也能窥得一二。
三、辅助技术能力
辅助的技术能力是指,你会不会的影响不会特别大,但是也都是有用的能力,特别是不同公司的发展情况不同,很可能会出现一个算法工程师既要做数据接入、又要做数据清洗、还要做算法平台
也要搞前端、还要负责模型上线、系统运维。
这里就不再细讲了。
思考一
聊一下对技术能力、工程能力和数据分析的思考。
居士个人的理解,技术能力更多的是偏向于一个一个的技术点,而工程能力更多就是在一个团队中将项目做好的能力。很多算法出身的工程能力不行,那么他做的单纯的一个模型是无法应用到实际生产中的,而工程就是指把理论落地实际生产的过程。那么工程包含了什么?它包括了系统架构设计和模块设计、数据流搭建和平台搭建、调包或算法开发、分布式、上线以及各种落地的代码开发。报表和监控,其实本质也是做数据流,边缘性的可能要做些后台和前端的开发。
然后数据分析能力是什么?数据分析(不是纯粹的数据分析)除了分析方法论和套路外,是一个很综合性、相对偏软一点的能力,比如说你通过分析发现了我们的系统有哪些可以优化的点,通过分析发现了问题的原因是什么,这些都是分析能力。
思考二
针对前面的内容,和 Cathy 讨论后,对整个思路做了新的梳理,大家直接看图就好,居士也认为这样描述可能更为合理。
思考三
这里再补充一个模型复现的能力,比如你看了一篇论文,发现这个模型可能很适合自己的业务场景,那么你是否能力将论文里面的模型快速用公司现有的平台和工具来复现?
居士认为,这一个是一个非常重要的能力,但是没有想好具体该怎样划分。
C. 算法工程师要学什么
算法工程师要求很高的数学水平和逻辑思维。需要学习高数,线性代数,离散数学,数据结构和计算机等课程。
1、专业要求:计算机、电子、通信、数学等相关专业;
2、学历要求:本科及其以上的学历,大多数是硕士学历及其以上;
3、语言要求:英语要求是熟练,基本上能阅读国外专业书刊;
必须掌握计算机相关知识,熟练使用仿真工具MATLAB等,必须会一门编程语言。
算法工程师根据研究领域来分主要有音频/视频算法处理、图像技术方面的二维信息算法处理和通信物理层、雷达信号处理、生物医学信号处理等领域的一维信息算法处理。
在计算机音视频和图形图形图像技术等二维信息算法处理方面目前比较先进的视频处理算法:机器视觉成为此类算法研究的核心;
另外还有2D转3D算法(2D-to-3D conversion),去隔行算法(de-interlacing),运动估计运动补偿算法(Motion estimation/Motion Compensation),去噪算法(Noise Rection),缩放算法(scaling),锐化处理算法(Sharpness),超分辨率算法(Super Resolution),手势识别(gesture recognition),人脸识别(face recognition)。
关于算法工程师可以到CDA认证机构了解一下,CDA行业标准由国际范围数据领域的行业专家、学者及知名企业共同制定并每年修订更新,确保了标准的公立性、权威性、前沿性。通过CDA认证考试者可获得CDA中英文认证证书。
D. web前端工程师需要掌握哪些技术
1、开发语言
HTML发展历史有二十多年,历经多次版本更新,HTML5和CSS3的出现又是一次革新。有些人认为前端开发要掌握的技能简单,不就是网页制作嘛。其实不然,web前端需要掌握的核心语言HTML+CSS+JavaScript,JavaScript作为最难的语言之一,许多编程高手也不敢妄自菲薄自封精通。由于JavaScript与html的差异性,以及静态分开处理的一些好处。在大公司编写静态效果和动态效果往往是分开由不同的人完成的。小公司因为需要压缩成本,就需要每个人会的越多越好,如果你向往项目经理发展,能懂一两门后端语言,绝对是锦上添花。
2、浏览器兼容性
互联网目前主流浏览器有IE6/7/8/9,Firefox,Chrome,Opera,Safari,遨游,包括国内主流的搜狗,腾讯TT,360,the word等等;从内河上讲主要有IE的,遨游版IE,Safari,Firefox以及opera的,这些都是大家常见的,如果你身边有老网虫喜欢收藏浏览器,你翻翻他的硬盘,相信十几款肯定是有的。每种内核对代码的解析是不完全一样的,即使同样内核也可能存在很大差异,如IE和遨游版IE。不说非主流的浏览器,就主流的浏览器,要做到完全兼容,也并非易事,需要长时间的积累和测试,需要前端开发工程师对前端端开发的热爱和激情。
目前移动互联网的发展趋势也不容小觑,将慢慢占据互联网的主要份额。移动互联网最突出的好处是方便和及时,试想一下,走在某地风景很好,拍下来后自 动分享给各路好友,因此手机上的浏览器兼容也看刻不容缓,现在手机上的浏览器也是纷繁复杂,主流的UCWEB,safari,IE,3G门户的,以及 symbian低端机的“残缺儿童”,包括国外流行手机我们不知道的一些浏览器,更糟糕的是这些浏览器解析因为手机硬件的不同,每个浏览器得到的结果都是 完全不同的。
3.hack技术
由于不同的浏览器对CSS的解析认识不一样,因此会导致生成的页面效果不一样,这个时候就需要针对不同的浏览器写不同的CSS,这个过程叫CSS hack。虽然我们写代码都要求按照标准,不写hack代码,但实际工作中为了兼容主流浏览器,hack代码是免不了的,所以这也应该是每个前端开发人员 必备的技能。
4.业内标准
目前Web前端开发中提到最多的就是W3C标准,这是一系列标准的集合,代表了互联网发展的方向,也代表了前端开发的一种信仰。写的代码都要100%通过标准验证,为通过标准验证而感到自豪,会有效推动互联网的快速发展。
5.开发工具
目前比较流行的是Dreamweaver, 其曾经风靡一时,到现在也没有退出历史舞台,证明DW还是有很大优势的,尤其是针对初学者,其强大的提示功能可以帮助我们很快的熟悉并掌握网页布局,但现 在更提倡的是纯手写代码,既体现技能方面的卓越,也可有效避免使用DW等工具产生的冗余代码。此外再掌握一些photoshop技能,即使没有美工,也能 简单处理一些图像。
小结,掌握以上技能,可以说你是一个合格的前端开发人员,能够参与到一个大的项目中,或者自己独立写出一个网页。虽然这看起来和网页制作设计差不多,从效果上来看,都是制作网页的,但实际上,技术上所超出的已经是好几个档次的东西了。
E. 软件工程专业 的学生到底是算法重要些(例如:递归 回溯之类的)还是学些技术重要(例如:windows编程)
物质决定意识,算法当然是最重要的,但是一些基本的算法是我们不知道的,比如操作系统的管理算法,比如音乐的解码算法,这些东西都是别人做好了的,我们只是设计一些基本的算法,我们这些算法是依赖于平台的,比如Windows的 API 或者java的 jdk ,所以学好这些东西,然后加上我们分析问题解决问题的能力设计出算法是最重要的啊
F. 广告算法工程师有哪些核心竞争力
有些项目技术已经成熟了,谁都能做的差不多,这些项目就别被机器学习这些术语蒙住眼睛,他们本质上就和用现成代码搭个论坛差不多,,也没什么技术。但是有一些项目是真正困难的。以做工程来类比困难的项目,我们不敢交给新手负责,因为新手会把架构做的一团糟,,最后结果很明显。就是项目失败。机器学习项目其实也是类似的,大家也许有一个感觉,任何人随便发明几个特征找点数据跑一,都能出结果,所以好像机器学习项目不容易失败。但是什么是项目的失败?工程项目的失败是做不出来,这很清楚,机器学习项目的失败按照李航老师的说法是:项目的效果达不到用户的期望。一个项目需要90的accuracy,只能做到80那就是失败,竞争对手有90的accuracy,我们只能做到80,那也是失败。所以,真正困难的机器学习项目,需要大量的知识和经验。经验和知识真的有价值吗?在传统工程项目中我们从不怀疑,因为老手总是能做出来而新手总是搞得一团糟。但机器学习不是如此,随机性总是存在,运气好的新手有时会比老手做出更大的贡献。但是从长远来看随机性会被无数出的尝试平滑下来,每个人都会收敛到自己真正的能力。以我个人的浅见,最宝贵的经验不是书上或者论文中明白写出来的,,而是一整套方法论。
1,问题是什么?
2,用什么指标来度量?3,问题的复杂度是什么量级?4,模型不好,本质上就是模型复杂度没有匹配问题复杂度,哪里是模型复杂度的瓶颈?**,标注数据。**,人的智慧,创造有价值的特征,还是说可以用深度学习来创造feature?**,海量用户行为数据。**,模型的调整,过于简单的模型,相当于强行约束了复杂度的上限,使得明明有海量的数据硬是用不上。5,找不到便利的数据和特征,,就可以想想是否能把问题分解成子问题,,也许在子问题空间下,,你能想到更好的特征,数据和模型,,同时分解了问题,,就能够引入更多的人员来并行工作。6,知道怎么做干净的实验,系统性的探索所有的可能性,排除无关因素。
G. 算法工程师工作期间需要掌握什么知识学到哪些核心技术
算法工程师的主要核心技术基于数学,并辅以语言。要全面掌握的知识包括高级数学,复变函数,线性代数的离散数学,数据结构以及数据挖掘所需的概率论和数学统计知识。不要太受约束去平时阅读教科书并多练习,并培养良好的思维能力。只有那些有想法的人才能拥有技术的未来。尝试实现您遇到的任何算法,无论算法的优劣总是有其自身的特征。此外,您必须具有一定的英语水平(至少6级),因为该领域的大多数官方材料都是外语。
计算机及相关专业本科以上学历,在互联网搜索,推荐,流量或相关领域有2年以上工作经验。熟悉机器学习/自然语言处理/数据挖掘/深度学习中至少一项的原理和算法,并且能够熟练地建模和解决业务问题。精通Linux平台下的C / C ++ / Java语言开发,精通使用gcc / gdb等开发工具,并精通Python / Linux Shell / SQL等脚本开发。熟悉hadoop / hbase / storm等分布式计算技术,并熟悉其运行机制和体系结构。具有出色的分析和解决问题的能力,思路清晰,并对工作挑战充满热情。具有强烈的工作责任感和团队合作精神,并能够交流和更好地学习。
H. 工程核价是什么意思
工程核价是对所有成本全面系统的进行一个大结算。
工程核价是一个汉语词语,意思是核定价格,即在前核算的基础上对照产品的各种材料成本包括工人工资在内的细节全面系统的进行一个大结算,后核算将能看出真正的利益与否。
核价---没有规律与理论的依据,是一个很活的东西,但是也是有一定的依靠的,它分为前核算与后核算。
前核算主要是针对产品的前期情况作出一个大致的估计与预算,这并不是一味盲目性的估计,而是要对产品有一定的了解或是在此行业中熟悉的人才可作其工作。前核算是研究产品的各类信息以便报给客人正确的价位,当然也可以让核价方的利益损耗一目了然。
对核价进行微观视野的探究:
1、商品角度:以一种软件形式存在,可以用来交换的劳动产品。
2、物化角度:人类劳动生产过程中,按照生产顺序组织的数据和指令的集合。进一步具体为--生产工艺流程中的人、工具、原材料形成是终产成品相关数据和指令的集合。抽象为--数据+算法。具体为--生产过程数据+工艺流程算法。
3、效用角度:核价软件工具,其实质为以数据形式实现模拟人类劳动物化成具有商品价值产品的过程,目的为事先得到成本价格数据,结合生产经营目标,进行定价与报价,通过核价来进行决策是否进行生产。是达成生产一体化、智能化的基础性核心功能。
I. 算法工程师要学什么
算法工程师要求很高的数学水平和逻辑思维。需要学习高数,线性代数,离散数学,数据结构和计算机等课程。
1、专业要求:计算机、电子、通信、数学等相关专业;
2、学历要求:本科及其以上的学历,大多数是硕士学历及其以上;
3、语言要求:英语要求是熟练,基本上能阅读国外专业书刊;
必须掌握计算机相关知识,熟练使用仿真工具MATLAB等,必须会一门编程语言。
算法工程师根据研究领域来分主要有音频/视频算法处理、图像技术方面的二维信息算法处理和通信物理层、雷达信号处理、生物医学信号处理等领域的一维信息算法处理。
在计算机音视频和图形图形图像技术等二维信息算法处理方面目前比较先进的视频处理算法:机器视觉成为此类算法研究的核心;
另外还有2D转3D算法(2D-to-3D conversion),去隔行算法(de-interlacing),运动估计运动补偿算法(Motion estimation/Motion Compensation),去噪算法(Noise Rection),缩放算法(scaling),锐化处理算法(Sharpness),超分辨率算法(Super Resolution),手势识别(gesture recognition),人脸识别(face recognition)。
关于算法工程师可以到CDA认证机构了解一下,CDA行业标准由国际范围数据领域的行业专家、学者及知名企业共同制定并每年修订更新,确保了标准的公立性、权威性、前沿性。通过CDA认证考试者可获得CDA中英文认证证书。
J. 如何成为一个飞控算法工程师
飞控四大算法:卡尔曼滤波,PID,捷联贯导,融合导航。目前这是最核心的算法了,也许你会觉得他们很古董,但是在工业领域一向是够用即可,宁愿发展老技术也不轻易使用新创意的,这跟现在弥漫整个中国无人机行业的浮夸的创新风气完全不同。不要看不起开源飞控,写程序的都是大牛,二次开发会让你拥有对架构的了解,下一步就是深入了解这些具体算法。相关书籍不多,大学课本就行,市面书籍大多蒙人眼球为主。工程算法永远是平淡出神奇,原理越简单越好,但是应用的经验非常重要,这就也牵扯试飞,了解飞机才能搞好算法。卡尔曼就那五条,但是做好估计很难,PID每一级就三个系数,但是几十年了也没有什么最优化理论。当然作为开发算法的工具,熟练掌握c语言,控制律,状态矩阵,MATLAB等等是非常必要的,能够事半功倍。首先你老板得给你足够的时间让你从头研究这个,而且还得有其它部门配合;之后才是自己的问题,数学物理基础、悟性、耐性缺一不可,如果没有人替你实现,你还得懂写程序。会用KF、会用PID就是懂了?我不这么认为。面试的时候见了许多调了十几年KF、调了十几年PID的人,也只是会调参、背公式而已。理论是基础,但理论不能帮你把飞控做得比开源项目好。从某一方面开始、到全面超越开源项目,这里面需要的时间、财力、人力支持和信任不是一般老板会给的,要首先想清楚这个。你可以了解一下市面上哪些公司用了全自主开发的飞控算法,开发的过程是怎样的。而且这些都比开源飞控的性能好,功能更个性化,等你真的做好了,里面的原因你都会懂。如果决定要做,那就把需要的模块实现,一个互补/卡尔曼滤波+一个PID。之后哪里需要优化就优化,哪里需要加功能就加功能,不知道怎么做就查资料、问人、学习、琢磨,逻辑混乱就上状态机、重构代码。