工程核心演算法
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。之後哪裡需要優化就優化,哪裡需要加功能就加功能,不知道怎麼做就查資料、問人、學習、琢磨,邏輯混亂就上狀態機、重構代碼。