本人非計算機專業、也非數學專業,而是車輛工程碩士畢業,想跟大家交流一下從業計算機視覺算法工程師5年來的經驗,希望大家多多交流與評價。
5年來,對其中的障礙深有體會。所謂障礙最大的兩方面應該是數學知識和計算機基礎知識,障礙的來源歸根到底是自己大學和研究所學生期間沒有好好學習。
為什麼這樣說,因為算法工程師這個崗位需要的數學知識,其實在大學和研究所學生開設的相關課程中已經覆寫至少百分之80,這個資料是個人感覺。需要的計算機基礎知識,在大學期間應該也是學過的,隻是當時混過去了,印象大學期間工科專業開設的應該都有計算機相關的基礎課程,當時不知道學這門課有什麼用,更别提去拿一個端正且認真的态度去學習。
上一段話,隻是為了表達這些知識在回憶裡的那個時刻已經接觸過,但因為自己當時吊兒郎當混一混的态度,被無情地抛棄了。是以奉勸在校的各位,想從事這個崗位的同學,要拿出聯考的狀态去對待這些學科,要不然會像我一樣,工作期間來惡補,來痛思,且事倍功半,精力已經不能跟當年的年輕小夥去對比。
上面隻是作者的個人感悟,從業過程中所欠缺的兩個重要方面的知識:數學和計算機基礎。是以,直到目前,我一直不認為自己是一個合格的算法工程師,而是踩着人工智能,深度學習這些所謂的風口,拿着開源的算法資源,實操着一個算法搬運工程師的角色,,,悔不當初,勸誡各位!
接下來講一下為什麼作者會認為這兩個學科的相關知識至關重要?
因為本人碩士畢業一直從事算法工程師這個崗位,從畢業剛入社會,隻知道算法工程師工資高,到現在知道為什麼這個崗位工資高,這5年的時間真是匆匆而充實,五味而雜陳!
剛畢業那會,說實話一臉懵逼,在校期間隻是跑過程式而沒有寫過代碼,學過數學但不懂數學,到了工作崗位才知道,出來混早晚要還的,該學的東西一個也不能少。
第一份工作搞了一個基于LSTM時間序列預測,當然純粹的是跑别人的代碼,但也不是沒學什麼東西。首先,從這個時間起真正開始寫了一些代碼,雖然不涉及算法,隻是簡單的資料分析,把自己的資料做成長短時記憶網絡輸入的那種格式,對工科碩士研究所學生而言,這個可以完全可以自己做到,然後搞不定的接踵而至,把資料喂進去之後,訓練效果可能還能接受,但對于沒見過的測試資料這個模型就傻臉了,隻能一步步去研究為什麼?這以後過程才真正做了一些常見的名詞工作:比如欠拟合、過拟合怎麼辦,資料分布不均勻如何處理,神經元參數怎麼調整等等一些在校期間為了面試而準備過的一些知識。這個期間并沒有意識到基礎的重要性,隻是一味地百度搜尋,尋找改善模型的技能,憑着自己的能力導緻這個東西不了了之。
接下來就一直從事視覺相關的工作了。這個計算機視覺很熱,很多小公司要求也不高,你隻要能拿業務資料做出來結果就行,并不是深度研發且落地(直到目前作者都認為這些算法離落地都很長遠,除非場景嚴格限定或者後處理邏輯設計十分豐富)。視覺相關的算法,目前作者主要涉及到的有語義分割、目标檢測,基于以上的行人重識别,姿态檢測,動作識别等。語義分割的話不聊,沒深度接觸。但是目标檢測算法,林林總總倒是接觸了不少,比如yolo家族,ssd等。也是接觸過這些算法之後,作者才有上述的感觸:數學和計算機基礎。
yolov3、yolov4、yolov5是最近3年一直在用的檢測算法,所謂用就是能從頭到尾,使用它,但絕不是駕馭它。從頭到尾也就是說從采集資料、資料标注、訓練模型、反複調參、直到實際場景推理測試,評價名額。正是這些過程讓我深刻意識到,自己對從事的這個崗位的态度需要認真改變一下了,自己要好好彌補之前所欠下的知識債了。
在最後的兩三年裡,就一直反複地惡補知識,但作者采用的方法是消滅專業名詞,一個一個啃懂。比如:什麼是梯度下降,其中包括随機梯度下降、批量梯度下降等,BN,LRN等。這個過程真是如吃糠咽菜!下面貼出來作者研究過的相關名詞目錄:
複習知識
上述學習過程真的是食之無味,道阻且艱。以至于作者想和大家分享一下經驗和内心感受,總結以上隻是的過程中,作者不知有多少次想到過放棄,甚至是放棄這個崗位!但是奉勸各位小夥伴,認真思考和衡量一下自己!
暫時先聊到這吧,後面再聊何去何從!