|
AI未來(lái)星球
分享人:潘大強(qiáng) 所屬方向:圖像算法 所在行業(yè):智能安防 01Hello大家好,我是潘大強(qiáng),大白的朋友兼粉絲。 我是非科班出身,目前博士畢業(yè)4年。 大學(xué)里學(xué)的是數(shù)學(xué)專業(yè),由于學(xué)術(shù)天賦不行,沒(méi)能加入“青椒”隊(duì)列。(PS:青椒,青年教師) 2017年博士畢業(yè)后,就加入了當(dāng)時(shí)的風(fēng)口行業(yè): ① 工作的內(nèi)容從純算法研究到算法落地 ② 從結(jié)構(gòu)化數(shù)據(jù)分析的ML算法,到圖像視頻結(jié)構(gòu)化的DL算法 ③ 從明文數(shù)據(jù)的訓(xùn)練推理,到基于多方安全計(jì)算的Federated Learning 四年里工作重點(diǎn)的轉(zhuǎn)變,也正是工業(yè)界對(duì)AI技術(shù)逐漸理性化看待的縮影。 02一般都是第一次,最深刻吧~ 工作的前幾個(gè)月,一直在學(xué)習(xí)統(tǒng)計(jì)機(jī)器學(xué)習(xí)的理論知識(shí)。 迎來(lái)的第一個(gè)任務(wù),是將數(shù)據(jù)挖掘的通用流程: 數(shù)據(jù)清洗->特征工程->模型選擇和組合->超參優(yōu)化->性能可視化 做成自動(dòng)化pipline,類似于AutoML。 因?yàn)槭莻€(gè)團(tuán)隊(duì)任務(wù),我只負(fù)責(zé)超參優(yōu)化。 超參數(shù)是模型訓(xùn)練之前,需要人為手動(dòng)設(shè)置的參數(shù): 比如線性回歸中的懲罰項(xiàng)系數(shù),決策樹(shù)的最小分叉數(shù)和最大深度,XGBoost樹(shù)的棵樹(shù)和學(xué)習(xí)率等。 通常是由算法人員根據(jù)數(shù)據(jù)大小和分布,結(jié)合建模經(jīng)驗(yàn)人為設(shè)置。 超參數(shù)的優(yōu)化在業(yè)界也有多種方案,可以暴力的網(wǎng)格搜索,理論上可以找到全局最優(yōu)超參,但是開(kāi)銷(xiāo)太大。 也可以無(wú)腦的隨機(jī)搜索,碰運(yùn)氣,連局部最優(yōu)解都不能保證。 也有基于啟發(fā)式算法,遺傳算法、蟻群算法、模擬退火等,可以找到局部最優(yōu)解,適合離散型變量的處理。 我最終使用了基于高斯過(guò)程的貝葉斯優(yōu)化方法。 在整個(gè)項(xiàng)目過(guò)程中,收獲頗多: ① 每個(gè)函數(shù)每個(gè)模塊都要做好單元測(cè)試,不要在下游任務(wù)中出現(xiàn)bug。 ② 團(tuán)隊(duì)合作中,事前溝通十分重要,對(duì)齊輸入輸出格式,規(guī)劃算力分配等。 ③ 還有就是見(jiàn)到本科學(xué)的矩陣分解、隨機(jī)過(guò)程等數(shù)學(xué)知識(shí),終于跳出試卷。切切實(shí)實(shí)在工業(yè)界應(yīng)用起來(lái),感覺(jué)以前沒(méi)白學(xué)。 03踩的坑實(shí)在太多,此處只舉一個(gè),可以概括為“太執(zhí)著于端到端的SOTA模型”。 前年有個(gè)項(xiàng)目需求,是要做室內(nèi)場(chǎng)景的打架、倒地識(shí)別。 當(dāng)時(shí)學(xué)術(shù)界依靠3D卷積在端到端的行為識(shí)別任務(wù)中大放異彩,一系列模型(I3D、R3D、SlowFast等)在公開(kāi)數(shù)據(jù)集UCF101和K600上,都刷到了0.95和0.75以上的top1準(zhǔn)確率。 于是我們采用了基于3D卷積網(wǎng)絡(luò)的方案,跳過(guò)期間各種細(xì)節(jié),最終上線版,為了確保精度對(duì)使用條件進(jìn)行了限制。比如必須是固定的若個(gè)場(chǎng)景,動(dòng)作主體必須是畫(huà)面主體等。 由于使用條件的限制,和端到端的低解釋性,最終沒(méi)能成為成熟產(chǎn)品。 后來(lái),反而是多目標(biāo)追蹤+姿態(tài)估計(jì)+人為規(guī)則+序列預(yù)測(cè)的組合方案,在性能、可解釋性和場(chǎng)景適用性方面達(dá)到了商用。 不足的地方更多,很多和自己非科班出身有著直接關(guān)系。 比如和身邊同事相比,他們會(huì)對(duì)操作系統(tǒng)、硬件算力、資源調(diào)度有著更好的理解和應(yīng)用。 今年年初有個(gè)全景拼接的任務(wù),需要將5張2K圖拼接成一張8K圖。 這是一個(gè)典型的stitching任務(wù),業(yè)界也有多種方案。 算法層面,我使用了特征點(diǎn)提取+相機(jī)參數(shù)預(yù)估+圖像變換+光線補(bǔ)償的組合方案,滿足了拼接的精度要求。 但是在性能上,我只能做到單進(jìn)程9FPS,無(wú)奈將模型和參數(shù)丟給了工程組,讓他們?nèi)プ鰞?yōu)化了。 結(jié)果工程組的大牛,通過(guò)修改OpenCV和CUDA源碼,直接堆到了40FPS! 最終僅用單塊顯卡,就實(shí)現(xiàn)了5路視頻編解碼+拼接+檢測(cè)。 04自己入行也不久,所以只能從這“不久”的經(jīng)驗(yàn)中,十分主觀地給一些建議。 下面只針對(duì)計(jì)算機(jī)視覺(jué)相關(guān)算法的學(xué)習(xí)和應(yīng)用: (1)對(duì)于神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí),理論部分點(diǎn)到為止,重在技巧的應(yīng)用,整理一套自己用著習(xí)慣的流程代碼和處理工具。 ① 理論部分點(diǎn)到為止 在統(tǒng)計(jì)機(jī)器學(xué)習(xí)中,線性回歸和邏輯回歸,因簡(jiǎn)單和可解釋而備受歡迎。 SVM,因凸優(yōu)化理論加持,確保全局最優(yōu),而成為當(dāng)年的首選分類器。 TreeBased算法,因簡(jiǎn)潔和易于ensemble,在結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)挖掘比賽中,成為???。 還有以Baysian理論為基礎(chǔ)的各類生成式模型,他們都有著屬于自己的嚴(yán)格數(shù)學(xué)推導(dǎo)和參數(shù)化解釋。因而不會(huì)被人詬病“黑盒”。 回到深度學(xué)習(xí)(或神經(jīng)網(wǎng)絡(luò)),支撐他work的底層理論是Universal Approximation Theorem。 簡(jiǎn)單理解就是:只要有足夠多的線性函數(shù)(FC,CNN,RNN)和激活函數(shù)(Relu, Sigmoid, Tanh)做復(fù)合,可以逼近任意一個(gè)連續(xù)函數(shù)(模型)。 參數(shù)優(yōu)化的過(guò)程,靠的是反向傳播和梯度下降(SGD, Momentum, Adam),找到一個(gè)局部最優(yōu)解。 雖然各個(gè)CV任務(wù),被各式神經(jīng)網(wǎng)絡(luò)模型,各種SOTA。 但所有的SOTA都沒(méi)能逃出以上兩個(gè)數(shù)學(xué)理論,他們玩的更多是“肉眼可理解”的trick(待會(huì)列舉一些)。 這大大降低了我們神經(jīng)網(wǎng)絡(luò)“應(yīng)用者”的入門(mén)門(mén)檻(至少不用大規(guī)模的手撕數(shù)學(xué)公式)。 ② 重在技巧的應(yīng)用 既然神經(jīng)網(wǎng)絡(luò)的底層理論并沒(méi)突破,那作為“應(yīng)用者”應(yīng)該注重各種技巧的學(xué)習(xí)和應(yīng)用。 盡量用較少較小的線性函數(shù)們,優(yōu)化出較優(yōu)的局部最優(yōu)解。 作為大白的忠實(shí)粉絲,我以YOLO系列為例,舉一些“肉眼可理解”的trick。 YOLOv1可能是最早的AnchorFree檢測(cè)器,總計(jì)7*7的柵格,每個(gè)柵格只預(yù)測(cè)一個(gè)目標(biāo)。 由于柵格數(shù)量和負(fù)責(zé)目標(biāo)數(shù)量的限制,導(dǎo)致檢測(cè)目標(biāo)的數(shù)量極為有限。 YOLOv2的trick之一是引入anchor機(jī)制,讓最終feature map上的每個(gè)pixel對(duì)應(yīng)了5個(gè)anchor,從而增加檢測(cè)目標(biāo)數(shù)量。 YOLOv3的tricks包括添加Residual Block,引入FPN結(jié)構(gòu)和Multi-Scale等。 Residual Block,借鑒ML中Boosting方法,通過(guò)學(xué)習(xí)殘差,緩解網(wǎng)絡(luò)過(guò)深導(dǎo)致模型退化的問(wèn)題。 FPN,改進(jìn)了純下采樣的Backbone,通過(guò)上采樣橫向連接空間尺寸相同的特征圖。 從而將高分辨率特征圖的位置信息和低分辨率特征圖的類別信息相融合,提高特征提取能力。 Multi-Scale,則是直接從特征圖的大小上,指定小目標(biāo)和大目標(biāo)的“負(fù)責(zé)人”。 YOLOv4在Loss計(jì)算時(shí)采用了IOU系列,因?yàn)檫@和打比賽、發(fā)論文時(shí)的mAp指標(biāo)更接近。 在Backbone設(shè)計(jì)時(shí),已經(jīng)不滿足FPN下采樣+上采樣+融合,所以加入PAN下采樣+上采樣+下采樣+融合,進(jìn)一步提高特征提取能力。 作為“應(yīng)用者”來(lái)說(shuō),以上所有trick確實(shí)都是很容易理解的(依然要膜拜想到這些trick的大神們)。 但是要靈活應(yīng)用這些技巧,建議平時(shí)多整理多學(xué)習(xí)不同類型的trick。 我一般根據(jù)流程分成以下幾類: 數(shù)據(jù)增強(qiáng)時(shí)的trick; Backbone設(shè)計(jì)時(shí)的trick; Head設(shè)計(jì)時(shí)的trick; Loss設(shè)計(jì)時(shí)的trick; 后處理時(shí)的trick。 理解每種trick work的情形,然后在不同任務(wù)中組合使用這些trick。 ③ 整理一套自己用著習(xí)慣的流程代碼和處理工具 每個(gè)算法工程師應(yīng)該都會(huì)有一套自己的代碼庫(kù):涵蓋了數(shù)據(jù)標(biāo)定,數(shù)據(jù)清洗,模型訓(xùn)練和推理,效果可視化等。 在此基礎(chǔ)上做功能優(yōu)化和功能拓展。 (2)傳統(tǒng)CV方法不能丟,掌握好OpenCV。 在做實(shí)際項(xiàng)目時(shí),神經(jīng)網(wǎng)絡(luò)端到端的解決任務(wù)類型,相對(duì)固定。 以我為例,主要包括分類、檢測(cè)、分割、追蹤、比對(duì)。 其他CV任務(wù)得依靠人為設(shè)計(jì)規(guī)則,用傳統(tǒng)CV方法(特征點(diǎn)提取、光流估計(jì)、透視變換、圖像拼接、模板匹配等)組合解決。 — 完 — |
|
|
來(lái)自: 新用戶0118F7lQ > 《文件夾1》