<dd id="mjpng"><output id="mjpng"><nav id="mjpng"></nav></output></dd>

      <optgroup id="mjpng"></optgroup><span id="mjpng"></span>

      <optgroup id="mjpng"><li id="mjpng"><del id="mjpng"></del></li></optgroup>
    1. <span id="mjpng"><output id="mjpng"></output></span>
          • 自動秒收錄
          • 軟件:1973
          • 資訊:57811|
          • 收錄網站:279872|

          IT精英團

          對算法工程師技術的反思!

          對算法工程師技術的反思!

          瀏覽次數:
          評論次數:
          編輯: 溫瑜
          信息來源: ITPUB
          更新日期: 2022-08-01 21:25:29
          摘要

          作者|努力的伍六七整理|極市平臺https://zhuanlan.zhihu.com/p/395255446大家周末愉快呀!這里是NewBeeNLP。做一個算法工程師最重要的素質是在海量的算法方案中理

          • 正文開始
          • 相關閱讀
          • 推薦作品

          作者|勤勞的吳

          收拾|市場平臺

          https://zhuanlan.zhihu.com/p/395255446

          祝大家周末愉快!這是NewBeeNLP。

          做算法工程師最重要的素質就是了解海量的算法方案,吃透真正的干貨,然后在實踐中不斷驗證,總結吸收到自己的頭腦中。今天我想分享一些算法工程方面的技術經驗。

          今天是我正式工作后的第一年。打算做一件事,以后繼續記錄工作感受和生活狀態。

          我的生命如此有限,作為一個普通人,也許我這輩子都不會有什么大的成就,讓外人來為我寫傳記。但是我可以用自己的雙手記錄我的人生,我所受的苦,我所犯的錯,我所愛的人。和一些網友聊天后發現,我是蕓蕓眾生中的一粒沙,那些自以為是的經歷,其實都是一些人在陌生的環境中經歷的。

          希望我的話能激勵那些人,也希望我的錯誤能警醒他們。

          算法工程師必備技能

          我的具體研究方向是工程師,計算機視覺算法。眾所周知,當我們談論算法工程師時,工程師通常被稱為調參俠,那些每天閱讀和提交論文的人被譽為天堂。其實我覺得從我一年的經驗來看,一個計算機視覺算法工程師需要的技能。

          首先,算法工程師的工作內容是一天三個問題:業務KPI達標了嗎?badcase解決了嗎?CornerCase優化了嗎?,你所有工作的目的就是解決這三個問題。

          所以每天的工作內容就是看看還有什么案子沒破,制定優化目標,迭代,再看,再優化,不停的來來回回。是不是看起來算法工程師的工作很簡單,很枯燥,很無聊?

          其實,因為我相信每一份工作都是枯燥而簡單的,李菲菲、吳恩達等著名的數據科學家不就做過參考的工作嗎?凡事不能一概而論。在我眼里,算法工程師的技能如下。

          要意識到數據的價值和用途。

          頂尖的數據科學家肯定會比一般人更明白數據的價值,以及需要什么樣的數據,使用什么特性,需要考慮什么細節,以及這個項目中與優化目標相關的數據需求是什么。

          進行高效合理的算法選擇。

          我要去面對那些說算法工程師是輔導員的人。你以為輔導員就是嘗試一個從0到1e-3的學習率,只是改變配置。

          其實,在接到一個新項目的時候,作為一個算法工程師,需要快速調研算法論文,制定算法優化方案。而且很多時候,你之前從來沒有接觸過這個子方向。比如突然讓你做一個分類項目的跟蹤項目。你需要在一周內調查行業內的追蹤算法文章并整理追蹤算法的分類結果、優缺點分析、核心思想分析。沒有論文的積累,這個很難。

          優秀的算法工程師就是要有這種快速的選擇和專注,最后給出合理的算法選擇。一般考慮的因素有(可部署性、精度指數、速度、不支持的操作符、開源等。).在這一點上,沒有人會愚蠢到為一個新項目不開源地復制SOTA論文。

          控制整個過程的能力

          這方面是軟實力,偏項目管理。我之前說過,一個需求是定義、研究、方案制定、數據收集、標注、模型訓練、推理、SDK的集成。

          這套流程要有時間節點,不僅僅是項目負責人給的節點,還有算法工程師自己定義的節點,并高效控制。比如收購的安排要考慮收購方案的合理性和效率。

          在閱卷的時候,要明確閱卷邊界,把自己傳過去的數據做一個詳細的記錄,否則找數據會是一件很麻煩的事情。訓練模型的時候,輸入圖片校對,目標校對,感染代碼,就可以安心的喝咖啡休息了。這個過程其實和一般的軟件開發是一樣的,不需要擔心完成的問題,但是要考慮風險,控制進度,注意細節。測試是一個算法工程問題。

          代碼技能

          基本上,python是算法工程師的主要語言。Python作為一門簡單的語言,使用起來當然非常方便。(不要用C的高端來批評我們這些用python的人。C寫模型的訓練是傻還是大神(

          yolo作者)干的事。

          python代碼除了基礎的操作,數字,字符串,類,裝飾器等等,其他就是各種工具要用的數量,numpy, pandas, torch, opencv, multiprocess等,具體看你的研究方向了。

          在系統架構上,我覺得學習開源代碼,比如PaddlePaddle和MMLab的代碼都是非常好的學習資源。只不過我們所謂的架構是把一個算法項目的前處理,后處理,model_build,backbone,neck,head等等這些組件化的一種架構,但是我認為一些設計模式的思想還是和軟件開發一樣的,大量的工廠模式,觀察者模式的思想在這些算法架構中都有體現。

          對于C++這方面,我之前也有執念要不要學CUDA,現在覺得不需要,我所認為的算法工程師的C++功底是要能高效完成邏輯上的處理,以及能夠快速定位和調試遇到的bug,Cmake也要能看得懂,要有把算法模型部署上線的能力,對C++的基礎類型,STL,指針,引用,多態,繼承,命名空間,模板都熟悉。至于一些指令級優化,算子融合啥的,那都是專業的人去做了。

          算法優化能力

          這是個核心技能,一定要秉持著數據>算法>創新的思路去做一個項目,當優先級高的遇到了瓶頸了再去做下一個環節的事情。

          數據側就是要不斷去做badcase分析,按場景按類別去分好自己的訓練數據,同樣要對測試集,測試方案,測試指標要不斷改進和優化。算法上則要考慮的是backbone的設計選擇,neck的設計選擇,head中target的設計選擇,數據增強方案(這個比較重要,除了幾何增強,還有像素級增強),更好的Pretrain模型,后處理的邏輯優化,大模型KD優化,類別不均衡的優化,難樣本挖掘優化等。

          重點說下后處理,這個環節其實非常重要,很多時候基于邏輯的規則可以提高你模型一大半的性能,代碼一般都簡單,但是需要你去從數據反饋中挖掘這個規則怎么制定。創新性則是你的研究能力。

          研究能力

          很多論文其實價值不大,不是在于沒有創新,而是在于這個創新都是為了“新”去做的,并且在那么一兩個公開數據集上達到了比較好的效果就可以發論文來證明這個工作的價值。有時候實驗了發現不好,就改一通網絡,我已經看了很多篇加了deform_conv魔改網絡的方案了。

          非常solid的文章當然值得尊重,比如之前看多目標跟蹤的時候看完centertrack的時候,感覺這篇文章真的簡單,溫柔,有力量!不過我其實也不是吃不到葡萄說葡萄酸哈,能發頂會當然是大大的好哈。畢竟程序員往高了走,頂會頂刊,行業影響力是妥妥的硬通貨!但是不過是工程還會做研究,調研論文,復現論文都是必備的技能,這塊其實我覺得也是屬于研究能力的范疇。

          數學能力

          很多人都說算法工程師對數學要求高,其實我不太清楚這個要求高具體指啥水平,但是起碼公式推導是肯定要掌握的,不然很多論文也看不懂的,比如最近在看目標跟蹤的文章,我感覺對數學水平還是有一定要求的,不然連傅里葉變換,卡爾曼濾波都整不明白,那真的沒法玩,至于比這更高的數學要求,那就讓那些數學家,研究員搞去吧。我反正是搞不了,爹媽就給我這腦袋,不是金剛鉆我也不攬瓷器活。

          聚焦一個方向

          由點開始出發,算法一般就是推薦,搜索,NLP,CV,控制規劃這些子方向。我本身是做CV的,所以對CV稍微比較了解一點,在CV里其實方向也非常多,傳統圖像處理,識別,檢測,分割,單目標跟蹤,多目標跟蹤,人臉相關任務(屬性,情緒,識別等等),GAN,顯著性檢測,異常檢測,超分辨率,OCR,圖像復原(去霧,去雨,去陰影,補全圖像...),深度估計,ReID,SLAM,以及通用技術模型量化,剪枝,模型蒸餾,meta learning,遷移學習……。

          看到這應該明白為啥CV這么卷了吧,而且有些方向的門檻和技術棧比較高,比如SLAM,一般社招SLAM的話基本都是要有相關經驗的,不然一個只做過分類任務的人去做SLAM估計會很吃力。

          我的想法就是要從一個小方向出發,在幾個小方向內挖深,然后對其他大方向也觸類旁通,這樣才能有更好的進步。畢竟方向是不一樣,能力需求還是差不多的。

          算法工程師的技術成長

          這一年下來,我感覺自己在技術上收獲還是蠻多的,在這個大項目組里,檢測,分割,分類,識別,關鍵點都有所接觸,同事也非常nice,不同方向的同事平時也樂于分享自己技術棧里的工作和前沿文章。但是有點比較無奈的就是自己在算法創新這一點上還是有所欠缺。希望下一年的時間里,自己可以不斷加強這方面的能力提升。

          算法能力

          當然是重中之重,leetcode不僅僅是招聘的篩選標準,也是鍛煉一個人算法思維的重要手段。雖然不得不說hard的題一般都是有一些ACM的技巧性在里面,但是我認為一個成熟的算法工程師,一定是要有秒解easy題,對middle的題也要基本能cover得住。不然用技巧性,題目和業務不搭邊這樣的說法只能是掩蓋自己思維能力不足的借口。這一點自己做得還不夠好,還是要不斷提高。

          PPT和文字能力

          對,沒錯,我要把這個放到技術篇。因為寫PPT真的是個技術活?。?!看了組內老大哥寫的那PPT,技術邏輯條理分明,布局結構美觀大氣,講PPT那個滔滔不絕的樣子真是好萊塢大片一鏡到底,絕了?。?!作為一個有語言障礙的人,十分佩服,羨慕這樣的人。

          不過我總結了大佬的PPT和演講。做一個好的PPT,尤其是技術類的PPT,第一點就是要對自己的技術棧非常清晰,技術能力是絕對要過關。圖和文字上,就是要以圖代字,不能空洞,也不用浮夸,更不用像學校課件一樣放一些動態特效。

          技術人員的PPT只要三個點:邏輯清晰,內容充實,一目了然。

          在美觀性上,我下載了論壇和組內會議的優質PPT分析了下,所謂美觀其實只要有個簡約的背景,文字和圖標最好一起用,多放一些柱狀圖,折線圖等說明你的工作,時間線的匯報來個帶箭頭的圖表述下。

          PPT這個東西,要積累模板,要理清邏輯,要整理材料,要抓住重點,要自信表達。

          希望自己和觀眾老爺們的PPT能力都可以不斷進步,一時菜雞不要緊,永遠不行動才是最可怕的。

          前沿技術的跟進

          做算法這一點確實是和其他行業差異比較大的,算法的技術更迭特別快。

          要經常閱讀前沿論文,也許不會直接拿來用,但是技術的優化細節是否有助于現有的項目這個其實還是需要考量一下的。

          不要用(不都是用老方法做項目)這樣的說法來diss我,你要是這么想你就用10年的算法一直用,近3年的文章都不看,當有新的有價值的東西出來的時候等你知道了別人早就用上了,而且長時間不看論文。也會慢慢喪失對文獻閱讀和理解的能力,就和一個人長時間不寫代碼了就不會寫代碼一樣。

          現有的技術方案總結

          僅僅根據自己比較了解的識別,檢測,分割方面的一些總結。

          比較通用的算法側優化是backbone(resnet resnext resnest efficientNet等大模型,mobilenet hrnet shufflenet等系列小模型),Neck(fpn, bi-fpn,panet等各種FPN層),比較實用的網絡優化(deform_conv,se-net,cbam等attention結構),head優化(主要是target設計的方方面面。

          比如檢測anchor-base和anchor-free之間的差異就是在于target和輸出之間加了一個anchor作為橋梁),訓練策略優化(主要集中在正負樣本均衡,損失函數設計,比如過采樣,欠采樣,損失函數比如FocalLoss,triplet_loss,訓練流程上比如OHEM等)。訓練參數優化(CosineLearningRate等LR方面的優化,AutoAugment、Mixup、CutOut等數據增強方面的優化),預訓練模型(基于無監督大數據Moco等, 大分辨率pretrain, 最差也得ImageNet-pretrain了,這塊NLP方面做的比較好,CV這塊我比較看好無監督或者半監督的方法),新方案(ViT,DETR等transformer在CV里的各種應用)。知識蒸餾,大模型蒸餾小模型是每一個公司都會要的技術棧,可看hinto的開山之作,當時后面還有各種多teacher,加權等方案。

          最后就是訓練數據的干凈,對不同場景都能cover到,對于訓練參數中的具體數值就跑模型看效果。

          以上是我這一年經驗所總結的算法優化方向,重點在于總結方向,具體細節方法太多了就不一一贅述。就這一年的工作經驗看來,很多時候不同的算法方案之間很多時候效果上實際差距其實不大,這一點在我跑ATSS的實驗的時候也更加確定。但是有些東西比如attention_block,transformer,KD等確實是硬通貨。

          做一個算法工程師最重要的素質是在海量的算法方案中理解,吃透那些真正的干貨,然后不斷在實踐中去驗證,并總結吸收到自己的腦子里。

          后記:以后的時間啊,要做一個說書人,記錄自己的所思所想,講好一個故事,一個屬于我的故事。在這個誰都不認識誰的網絡世界里,輸出我對這個世界的看法,激勵和我曾經一樣墮落的人,照亮和我一樣前進的人,溫暖和我一樣坎坷的人。清除了所有的可能包含個人信息的痕跡,我想以后,在這個世界里,為自己,寫一個故事,一個用一生來記錄的故事。



          這個困擾程序員50年的問題終于要解決了?
          ? 上一篇 2022-08-01
          什么事要執行此操作,請執行以下操作:云娥再說一遍謝柯爾謝克爾謝克爾謝克爾謝克爾謝克爾謝克爾謝克爾謝克爾謝克爾謝克爾謝克爾謝克爾謝克爾謝克爾謝克爾謝克爾謝克爾謝克爾 339 www 百度一下 com/m
          下一篇 ? 2022-08-01
          • 如何在Ubuntu中保留文件系統并備份當前開發板鏡像
            0閱讀 0條評論 個贊
            在Ubuntu保留文件系統或者說備份當前開發板鏡像的需求在不斷增加。比如Ubuntu文件系統需要安裝庫文件的話直接使用apt-get工具就可以下載,但由于需要下載的核心板較多,比較費時間,這時需要將安……
          • 國產核心板全志T507助力消防系統升級
            0閱讀 0條評論 個贊
            9月16日下午,位于湖南長沙市區內的中國電信大樓發生火災,建筑高度218米,現場濃煙滾滾,數十層樓體燃燒劇烈。消防救援人員趕到現場后很快將火勢控制住,目前大樓火勢已被撲滅,所幸未發現人員傷亡。湖南電信……
          • 教大家如何處理Spring Boot易流中的用戶和群體!
            0閱讀 0條評論 個贊
            1.準備工作2.用戶操作2.1添加用戶2.2修改用戶2.3刪除用戶2.4查詢用戶3.組操作3.1添加組3.2修改組3.3刪除組3.4查詢組4.查看表詳情雖然說我們在實際開發中,……
          • 從PG15開始WAL壓縮優化
            0閱讀 0條評論 個贊
            PG15傳聞中的超級令人激動的功能大多數跳票了,年初我也寫過一個關于PG15新功能跳票的文章。PG15BETA已經發出幾個月了,似乎PG15里令人激動人心的功能不多,不過從長長的新功能列表里,……
          • 深入了解美團葉子發射器開源方案
            0閱讀 0條評論 個贊
            大家好,我是樹哥。之前我們有聊過「如何設計一個分布式ID發號器」,其中有講過4種解決方案,分別是:UUID類雪花算法數據庫自增主鍵Redis原子自增美團以第2、3種解決方案為基礎,開發出……
          發表評論 共有條評論
          用戶名: 密碼:
          驗證碼: 匿名發表
          • 國產超級大腦———rk 3568核心板!
            13閱讀 0條評論 個贊
            從1956年麥卡錫首次提出“人工智能(AI)”的概念至今,人工智能已有66年的歷史,而人工智能真正的崛起卻是在最近的10年。隨著消費電子行業的快速發展和激烈競爭,人工智能再度流行起來,盡管許多企業對A……
          • Java源代碼分析|對象
            0閱讀 0條評論 個贊
            Object定義Object類是類層次結構的根。每個類都有Object類作為超類。所有對象,包括數組等,都實現了這個類的方法。靜態代碼塊在Object類的最開始部分,有如下四行代碼:priva……
          • MQ系列5:5的發送模式:RocketMQ消息
            0閱讀 0條評論 個贊
            在之前的篇章中,我們學習了RocketMQ的原理,以及RocketMQ中命名服務ServiceName的運行流程,本篇從消息的生產、消費來理解一條消息的生命周期。1消息生產在RocketMQ中……
          • 基于aiohttp的異步爬蟲python實戰
            0閱讀 0條評論 個贊
            鋼鐵知識庫,一個學習python爬蟲、數據分析的知識庫。人生苦短,快用python。之前我們使用requests庫爬取某個站點的時候,每發出一個請求,程序必須等待網站返回響應才能接著運行,而在整個爬蟲……
          • 在頭腦中扎根泛型的思想3354深刻理解泛型
            0閱讀 0條評論 個贊
            1.前言往往一些剛接觸C#編程的初學者,對于泛型的認識就是直接跳到對泛型集合的使用上,雖然微軟為我們提供了很多內置的泛型類型,但是如果我們只是片面的了解調用方式,這會導致我們對泛型盲目的使用。至于為什……
          • SQL Server備份和還原攻略
            0閱讀 0條評論 個贊
            一、知識點完全備份:備份全部選中的文件夾,并不依賴文件的存檔屬性來確定備份那些文件。(在備份過程中,任何現有的標記都被清除,每個文件都被標記為已備份,換言之,清除存檔屬性)。完全備份也叫完整備份。差異……
          • Python條件語句的用法
            0閱讀 0條評論 個贊
            python條件語句使用if表達式,難度不高,需要注意的是嵌套用法,以及如何設置對應的條件。if條件判斷語句python語句是按固定順序執行的,先執行前面的語句,再執行后面的語句。如果你像要程……
          • 如何獲取Yarn和Spark UI的界面索引信息
            1閱讀 0條評論 個贊
            .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
          • Java接口自動測試框架系列(1)自動測試框架
            0閱讀 0條評論 個贊
            一、什么是自動化測試自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程。通常,在設計了測試用例并通過評審之后,由測試人員根據測試用例一步步執行測試,得到實際結果與期望結果的比較。為了節省人力、……
          • 《2022 分布式數據庫發展趨勢研究報告》的解釋
            9閱讀 0條評論 個贊
            分布式數據庫近年來廣受關注,目前,對分布式數據庫的討論,已經從什么是分布式數據庫,為什么要用分布式數據庫,轉變為怎樣規劃應用分布式數據庫。但分布式數據庫有3條不同的技術路線,這無疑增加了選型難度,到底……
          • 基于ASP.NET核心6.0的簡潔架構
            0閱讀 0條評論 個贊
            背景最近嘗試錄制了一個系列視頻:《ASP.NETCore6.0+Vue.js3實戰開發》,本節是視頻內部整潔架構的理論和實戰的文字稿。因為在錄制之前,我通常會編寫完整的文字內容作為視頻文案,這……
          • 我們能從AlloyDb的架構中學到什么
            0閱讀 0條評論 個贊
            前些天我發了一篇解讀信通所分布式數據庫發展報告內容的文章,有些朋友對我把Aurora、AlloyDB、PolarDB等也歸類于分布式數據庫感到有些不解。實際上這是信通所在報告里的歸類,和國際上的常見歸……
          • 轉:Java老了 科特林會取而代之嗎?
            0閱讀 0條評論 個贊
            .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
          • :自古以來 特工程序就是兵家必敗之地
            0閱讀 0條評論 個贊
            正向代理的血案前幾天打算使用golang做一個代理程序,golang標準庫net/http/httputil已經提供了這樣的能力。一把梭之后發現必然返回403Forbidden,我直接在targe……
          • 如何不寫YAML來管理Kubernetes應用程序?
            2閱讀 0條評論 個贊
            Kubernetes將自身邊界內的事物都抽象為資源。其中的主要部分,是以Deployment、StatefulSet為代表的workload工作負載控制器,其他各類資源都圍繞這些主要的資源工……
          • 舉例說明庫伯內特公司的豆莢核心資源
            3閱讀 0條評論 個贊
            目錄一、Pod定義二、Pod入門yaml描述文件三、共享NetworkNamespace四、共享PID五、容器生命周期六、初始化容器6.1、簡介6.2、與普通容器的區別6.3、實驗七、Pod探針7.1……
          • 強大的多云混合多K8S集群管理平臺Rancher入門級實戰
            0閱讀 0條評論 個贊
            目錄概述定義為何使用其他產品安裝簡述規劃基礎環境Docker安裝Rancher安裝創建用戶創建集群添加Node節點配置kubectl創建項目和名稱空間發布應用偏好設置概述定義Rancher官網htt……
          • SQL SERVER存儲過程學習筆記
            6閱讀 0條評論 個贊
            將常用的或很復雜的工作,預先用SQL語句寫好并用一個指定的名稱存儲起來,那么以后要叫數據庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。存儲過程的優點1.存儲……
          • 圖解架構| SaaS、PaaS、IaaS
            0閱讀 0條評論 個贊
            這是悟空的第164篇原創文章官網:www.passjava.cn你好,我是悟空哥。上次聊到了架構圖如何畫,其中涉及到了云服務的架構圖,里面提到了很重要的三個概念PaaS、IaaS、SaaS,很有必要……
          • 【高并發】從源碼角度深入分析線程池如何優雅退出
            0閱讀 0條評論 個贊
            大家好,我是冰河~~在【高并發專題】中,我們從源碼角度深度分析了線程池中那些重要的接口和抽象類、深度解析了線程池是如何創建的,ThreadPoolExecutor類有哪些屬性和內部類,以及它們對線程池……
          最近發布資訊
          更多
          五月色婷婷中文开心字幕

              <dd id="mjpng"><output id="mjpng"><nav id="mjpng"></nav></output></dd>

              <optgroup id="mjpng"></optgroup><span id="mjpng"></span>

              <optgroup id="mjpng"><li id="mjpng"><del id="mjpng"></del></li></optgroup>
            1. <span id="mjpng"><output id="mjpng"></output></span>