<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一個CV算法工程師的小反思

          共 3726字,需瀏覽 8分鐘

           ·

          2021-05-11 17:14

          作者:努力的伍六七

          鏈接:https://zhuanlan.zhihu.com/p/363354912

          大佬可以寫總結(jié)給別人指導(dǎo),菜鳥可以寫總結(jié)給別人指坑。

          原本打算是正式工作滿一年以后寫的,最近反思了很多事情,也找到了很多不足之處。怕以后忘記了,就想到什么寫什么,什么沒想到以后就補(bǔ)上。

          算法篇

          雖然我沒有發(fā)表過頂會論文,談不上學(xué)術(shù)成就。但是我還是要硬談,在實(shí)際我們做算法落地的時候,最重要的東西確實(shí)是數(shù)據(jù)。一個CV算法項(xiàng)目的流程迭代基本都是:產(chǎn)品分析,業(yè)務(wù)指標(biāo)制定,算法調(diào)研,采集數(shù)據(jù)1W左右就夠了,出一個demo,產(chǎn)品測試,有初步badcase,其中肯定有泛化性問題。因?yàn)榫?W數(shù)據(jù)。先增加數(shù)據(jù)量級,在增大數(shù)據(jù)量級的時候要考慮badcase有哪些情況,還有數(shù)據(jù)采集這個事情也是需要一定經(jīng)驗(yàn)的。當(dāng)你考慮的case比較多的時候,很難做到窮舉。制定好數(shù)據(jù)采集策略非常重要。

          算法優(yōu)化的套路不是提高指標(biāo),是要解決業(yè)務(wù)問題。學(xué)術(shù)上統(tǒng)計(jì)一個測試集的mAP(比如檢測),業(yè)務(wù)中是要根據(jù)實(shí)際業(yè)務(wù)場景分開簡歷測試集,比如暗光下測試集,帶遮擋測試集,通用場景測試集等等,要針對業(yè)務(wù)場景進(jìn)行優(yōu)化,業(yè)務(wù)場景下測試集就是算法和測試那邊溝通。

          端側(cè)的算法優(yōu)化要考慮部署問題 ,就這么說吧,你打開SNPE的文檔,基本照著里面的支持看基本就是八九不離十了。有些常見的考慮點(diǎn)時激活函數(shù)基本就是只用Relu,帶有邏輯操作的比如ROIAlign等等,上采樣的方式有Deconv,Interp(nearest, bilinear), UpPooling,空洞卷積這幾種,但是不同的方式在不同的芯片平臺支持是不一樣的。還有全連接的耗時可能在有些平臺上也不太行。簡單來說除了conv relu,其他的東西都要在做之前有個調(diào)研和考慮。還有可能會有限制輸出Tensor數(shù)量和輸入Tensor數(shù)量的問題。其他的就是不同平臺的量化支持不同了。講了這些我想現(xiàn)在還有人在用VGG還是可以理解的。Make VGG Great Again.

          工作中最重要的不是論文的創(chuàng)新,尤其在初期做算法的套路,流程要清楚。以及執(zhí)行力要Max,還要有一定的數(shù)據(jù)敏感性。在標(biāo)注數(shù)據(jù)的時候需要界定什么是正樣本什么是負(fù)樣本,什么是無法判斷(ignore),什么時候需要腦補(bǔ),什么時候不需要腦補(bǔ),這個非常非常重要,數(shù)據(jù)標(biāo)錯了后續(xù)要花費(fèi)很多力氣改正 。

          要保證實(shí)驗(yàn)的正確性,一開始實(shí)習(xí)的時候回經(jīng)常跑錯實(shí)驗(yàn),或者實(shí)驗(yàn)跑到一半掛了,這會大大降低效率。做事情要慢一點(diǎn),但是要正確。用tmux管理實(shí)驗(yàn)非常方便,要寫好實(shí)驗(yàn)日志,保證自己能夠看 到哪一行就知道這個實(shí)驗(yàn)做什么改動,并且可以直接找到實(shí)驗(yàn)結(jié)果保存的地方,我一般通過名字來體現(xiàn),比較復(fù)雜的就寫備注。

          CV不像推薦廣告NLP,不需要用到SQL,Hadoop之類的數(shù)據(jù)查詢等工具,CV數(shù)據(jù)的管理要有自己的一套章法。要做到每一張圖片都是可溯源的,圖片和視頻,抽幀頻率,這些都需要列表。如果需要對圖片做后處理,比如人臉數(shù)據(jù),中間的結(jié)果人臉檢測bbox,摳出來的圖等等都要有記錄,腳本要整理好,一個任務(wù)從抽 幀開始到最后訓(xùn)練的圖片,分步驟處理并且每個步驟都保留中間結(jié)果,主要不要保留圖片,保留坐標(biāo)等信息。保留圖片會占用太多存儲 空間。每一個數(shù)據(jù)都要有專門的表格來記錄,不然以后整理其數(shù)據(jù)來有你難受的。

          因?yàn)閳D片和標(biāo)注都是放在磁盤上,所以要有自己的風(fēng)格,我的風(fēng)格就是data目錄放視頻,Images目錄放圖片,Scripts目錄放腳本,Ann目錄放處理完的標(biāo)注文件,Ann_pre放標(biāo)注人員返回的原始標(biāo)注文件。其中每個目錄中會根據(jù)任務(wù)需求建立子目錄, 數(shù)據(jù)的信息必須要包括的是任務(wù)+時間,其他看著需求加。

          圖片和標(biāo)注文件定好之后加下只讀權(quán)限,不然哪天手賤給刪了不知道上哪哭去。

          訓(xùn)練模型之前要確認(rèn)的事情有:進(jìn)網(wǎng)絡(luò)的圖片和GT畫出來,確認(rèn)是否會有問題。網(wǎng)絡(luò)的Target畫出來確認(rèn)是否會有問題,這兩點(diǎn)沒問題Loss再下降那恭喜你等著看demo了

          WarmpUp要加上,這東西誰用都說好

          GradNorm打出來,如果崩了也好分析

          LearningRate一般就SGD和Adam,CosineLR等這些不怎么影響你最終的結(jié)果,可能會加快收斂.

          要積累自己的代碼庫,這樣很多時候只要搜一下copy過來改改就可以用,最重要的是不用再去查API浪費(fèi)時間了

          提升代碼能力和算法能力的最好的方式就是看好的開源代碼,多看多寫才能提高思維能力。

          CV算法好卷啊,檢測,分割 ,識別,跟蹤,OCR,ReID,分類,GAN,動作遷移,SLAM,深度估計(jì),3D相關(guān),姿態(tài)估計(jì),圖像檢索,NAS,量化,立體匹配,圖像復(fù)原,……,What's Fuck,我這一寫感覺自己跟個白癡一樣好多都不懂。。。。

          框架上要加的功能有Multi-Task訓(xùn)練(不同卡上運(yùn)行不同Task|根據(jù)Task的標(biāo)簽手動切割網(wǎng)路輸出計(jì)算Loss),模型并行,數(shù)據(jù)并行,多數(shù)據(jù)源訓(xùn)練(不同數(shù)據(jù)可以用不同數(shù)據(jù)增強(qiáng)),多卡并行,轉(zhuǎn)模型,F(xiàn)P16訓(xùn)練,量化訓(xùn)練,demo可視化,BadCase分析,多測試集評估,NAS搜索,跨數(shù)據(jù)集訓(xùn)練(A數(shù)據(jù)中有人體,B數(shù)據(jù)也有人體,但是標(biāo)注的label不同,需要制定一套方案把不同的數(shù)據(jù)集中的標(biāo)簽重定義)。其中有些不是必要的就不加。

          要用好vim和shell,在CV任務(wù)里面vim最常用的是一些文件的合并,交集,差集,排序,去重等等。shell命令+管道機(jī)制可以讓你快速地做很多事情,不然從頭開始寫python代碼也是比較費(fèi)時間的。最常用的是find + 通配符找文件,然后對文件進(jìn)行刪除,移動等等操作 opencv是必須要熟悉的,簡單的讀取,存儲,畫圖的API是必須記住。其他的要積累腳本。不過目前來看很少用到一些傳統(tǒng)特征。如果需要用到那句把這些腳本都存儲下來。

          數(shù)據(jù)標(biāo)注完成后處理成數(shù)據(jù)集一定要考慮仔細(xì)了,在轉(zhuǎn)格式的時候一定要加上一些格式確認(rèn),比如標(biāo)注檢測框是否有左上角的坐標(biāo)值卻小于右下角這種異常情況,這個圖片是否是已經(jīng)被損壞了等等。很多時候你找半天bug發(fā)現(xiàn)是數(shù)據(jù)的問題。

          工作中沒人關(guān)注你的算法是不是新的,是不是牛逼,代碼有多難寫,不能為了新穎而新穎。能解決badcase的就是好優(yōu)化,不然就是白搭 。要保證自己實(shí)驗(yàn)的可復(fù)現(xiàn)性,做優(yōu)化的過程中會 經(jīng)常需要改一些小細(xì)節(jié)。可能對之前的實(shí)驗(yàn)有影響,盡量改成傳參的方式,不然也可以繼承重新寫一個類。

          算法工程師要多向工程部署的同事請教,看看模型部署的時候需要考慮的東西有哪些,資源占用,速度優(yōu)化等等是怎么做的。

          不要忽略算法的后處理,在實(shí)際用的時候經(jīng)常會加一些后處理的邏輯判斷,這個也非常重要,有時候能解決很多問題。

          目前我知道算法優(yōu)化的有效常用方案是:加數(shù)據(jù),multisource訓(xùn)練,數(shù)據(jù)增強(qiáng),好的pretrain_model,正負(fù)樣本均衡的優(yōu)化,正負(fù)樣本采樣相關(guān)優(yōu)化,知識蒸餾,額外監(jiān)督比如檢測中加分割基本能漲點(diǎn),attention模塊,多尺度,特征融合,合適的backbone,NAS搜索(應(yīng)該大家都在做),量化訓(xùn)練,剪枝。其他比如算法流程的大改動,一般人真做不了,比如VGG->MobileNet,DeepSort->CenterTrack,YOLO->YOLOv5,這些硬通貨都是大神的杰作,要向大神學(xué)習(xí),但是不要一口吃胖子。

          python腳本要熟練編寫,多線程操作要信手拈來,數(shù)據(jù) 處理經(jīng)常會需要多線程處理

          成長篇

          要相信自己,不要總覺得自己不如別人,要對自己有信心,才能讓別人對你有信心。

          要不斷學(xué)習(xí),我的人生宗旨就是我可以菜得被開除,但是我不能因?yàn)闊o所事事渾水摸魚被嫌棄。

          要和同事友好相處,工作之后明顯就交際圈小了很多,同事是交流最多的人,不管怎么樣,都要客客氣氣。多幫別人一點(diǎn),別人才會多幫你一點(diǎn)。

          要拼搏,但是不要拼命,程序員本質(zhì)上也只是一個打工的,干點(diǎn)活,拿點(diǎn)錢,不要把命搭上去。生活 還會很美好的。

          要去了解外界,不要一頭就在代碼里,要有個愛好,跳舞,跑步,拍照,旅游,這樣你才會能找到生活的感覺。

          心態(tài)要躺平,我的心態(tài)就是什么事情我都會努力去做,如果我努力去做了卻沒做好那是我能力問題,給我3.25,給我開除我也接受。我要做的就是總結(jié)下為什么沒有把事情做好,去反思自己遇到的哪些問題,走了哪些彎路,下次不要再犯。

          不要抱怨家庭的出生,抱怨永遠(yuǎn)解決不了問題,已經(jīng)五六十歲的父母難道還指望他們改變你的命運(yùn)讓你成為富二代?

          暫時先寫到這里。。。。

          不管以后是不是還在干程序員,我都會一直堅(jiān)持學(xué)習(xí),堅(jiān)持努力,還要堅(jiān)持輸出。

          ·················END·················



          推薦閱讀

          ?   一道視覺算法面試的常考題?   史詩級萬字干貨,kNN算法。?   火了?



          瀏覽 57
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色毛片儿 | 国产精品久久久久久一级毛片 | 亚洲爽爆av| 欧美成年人性爱网站 | 超碰日韩 |