這是“汽車人參考”第367篇原創內容
“推動智慧電動汽車向前進”
自動駕駛用於計算機視覺(CV)的深度學習模型,長時間由卷積神經網路CNN主導,而CNN主要有影象分類(Classfication)、目標識別(Detection)、語義分割(Segmentation)三大應用場景,汽車人參考這裡分享CNN演算法的發展趨勢,全文共2857個字。
CNN五大部件
區域性感受野/區域性感知(Local Receptive Field):由於影象的各區域性資訊聯絡緊密,神經元只需要感知區域性資訊,在更高層綜合起來即可得到全域性資訊,卷積的理論支撐。
卷積(Convolution):
乘積累加運算
,包含多個可學習的卷積核,上一層輸出的特徵圖與卷積核進行運算,輸出下一層的特徵圖。
啟用函式(Activation Function):卷積層輸出的特徵圖需要加入的非線性因素,其中,卷積層常用Relu函式,全連線層常用Sigmod和Tanh函式。
池化(Pooling):影象縮小,只保留重要資訊,以減少畫素。
全連線層(Fully Connected Layers):將特徵對映到樣本標記空間,常採用卷積操作。
CNN基本引數
解析度(Resolution):輸入影象的尺寸(長寬)。
深度(Depth):神經網路層數或Module(由多個卷積層組成)的個數。
寬度(Width):在某層學到資訊量(最大通道數)。
引數量(Params):網路中可學習變數的數量。
計算量(FLOPs):神經網路前向推理過程中乘加運算的次數floating point operations。
計算速度(FLOPS):每秒浮點運算次數floating point operations per second,是衡量硬體效能指標。
幀率(Frames per second, FPS):每秒顯示幀數。
卷積核(Convolutional Kernel):卷積層中用於提取區域性特徵,CNN訓練是訓練出來各種各樣的卷積核來提取特徵,個數對應通道數。
top1accuracy/mIOU/mAP:影象分類/語義分割/目標檢測的評價指標。
CNN的架構設計
CNN架構設計(Backbone),主要根據具體
任務的資料集和評價指標,
確定神經網路結構的解析度、深度、寬度、拓撲結構等細節,之後採用
PyTorch或TensorFlow
進行開發。
針對於分類任務,目前公開發表論文大多基於ImageNet公開資料集,進行通用結構設計,由於ImageNet資料量豐富,通常在該資料集上獲得很好精度的模型可以泛化到其他任務上。
在自動駕駛等實際應用場景中,從業人員都會基於自身情況,
對已公開發表的網路結構進行再最佳化
,但通用結構不大會有根本性的變動。
早期CNN架構設計以分類精度作為主要的設計指標,之後引入了
引數量、計算量
等進行綜合評價。
此外,AI應用的一個大趨勢是在端側部署模型(如自動駕駛),並能在真實場景中實時
(幀率大於30幀)
執行,但自動駕駛平臺往往記憶體資源少,硬體效能不高,功耗受限,經典的CNN網路對記憶體及計算資源的超額要求導致其無法部署。
為了解決這個難題,有兩種方式,一是對訓練好的複雜模型透過
知識蒸餾、通道剪枝、
低位元量化(浮點計算轉成低位元定點計算)
等手段對模型進行壓縮,降低引數量和計算量;二是直接設計
小模型/輕量化模型
並進行訓練。
不管如何,其目標都是在保持模型效能(分類精度accuracy)的前提下,降低模型大小(size),同時提升模型速度(響應速度快speed, 低延遲low latency)。
經典CNN模型
2012年,Hinton的學生Alex提出了AlexNet演算法模型,是在20年前的LeNet模型基礎上堆疊了5個卷積層和3個全連線層,整個模型的大小約200M,含60M個引數。
作為標誌性事件,AlexNet將AI應用推向了高潮,CNN也成為了計算機視覺領域最核心的演算法模型。
(AlexNet)
AlexNet提出後,提升分類精度成為主要的發展目標,最簡單的方式是增加網路層數。
2014年,牛津大學提出了VGG模型,在AlexNet基礎上堆疊了13個卷積層和3個全連線層,深度更深(約為AlexNet的兩倍),將分類精度從55%提升到了80%,但計算量也從2GOPS提升到了40GOPS,VGG模型大小約500M,包含了138M個引數。
(VGG)
引數越多,計算量越大,受限於硬體GPU的效能,減少引數逐步成為另一個重要課題。
為此,Google在2014年啟動了Inception專案,釋出第一個版本GoogleNet,使用1×1卷積核(network in network),透過增加網路寬度,來增加網路複雜度,在保證分類精度的同時,使得引數量減少到了6。8M。
到2016年,Inception引入了ResNet ( 殘差網路 ) ,發展到V4版本,精度越來越高;同時在v3的基礎上也提出了基於通道分離式的卷積InceptionX。
輕量化CNN模型
隨著分類精度逐漸達到飽和,巨大的計算量已經開始嚴重影響CNN在低功率領域的應用。
傳統CNN網路結構由標準卷積核(7×7,5×5,3×3,1×1)組成,多以3×3及以上為主,通道數多,導致引數量和計算量很大。隨著對CNN研究加深,發現兩個3×3卷積可代替一個5×5卷積,三個3×3卷積可代替一個7×7卷積,而使用1×1卷積,使用3×3depthwise conv+pointwise conv(1×1標準卷積)可代替3×3普通卷積。
基於以上實踐,Google在2017年釋出了適用於端側的輕量化CNN神經網路MobileNet,採用
深度可分離卷積/深層卷積
(depthwise separable convolution)代替普通的卷積,並使用寬度乘數(width multiply)減少引數量,它可在犧牲極少精度的同時去換取更好的資料吞吐量。
MobileNet逐步成為端側(自動駕駛領域),比較有代表性用於2D感知視覺深度學習演算法結構。
Transformer:從語言到視覺
谷歌在2017年釋出了著名的論文“Attention is all you need”,提出了注意力機制,透過某種運算來直接計算得到句子在編碼過程中每個位置上的注意力權重,然後再以權重和的形式來計算得到整個句子的隱含向量表示。
Transformer模型就是基於注意力機制演算法,其在序列建模和機器翻譯等任務上表現出了驚人的潛力,成為了自然語言處理(NLP)領域主要的深度學習模型。
與此同時,該模型在視覺識別領域也得到了很多關注,有大量研究嘗試將Transformer移植到CV任務中,Google近期在深度學習頂級會議ICLR 2021上發表了ViT(Vision Transformer),針對谷歌內部分類訓練庫JFT-300M(3億圖片),及ImageNet-1K(1000個類別)評測集上取得了88。55%準確率,重新整理了榜單上的紀錄。
ViT很適用於影象分類任務,但因沒有全面考量視覺訊號特點,對於區域級別和畫素級別任務不友好(物體檢測和語義分割),因此較適用於影象分類。
為此,學術界將transformer與視覺訊號先驗結合起來,提出了
Swin Transformer
,最重要設計是移位的不重疊視窗(shifted windows),其對硬體實現更加友好。
Swin Transformer在物體檢測(評價級COCO)和語義分割任務中(評測級ADE20K)大幅重新整理了此前紀錄,此外,還在影片動作識別、視覺自監督學習、影象復原、行人Re-ID、醫療影象分割等任務中大放異彩,也讓學術界更加確信Transformer結構將會成為視覺建模的新主流。
Swim Transformer的提出,使視覺和語言的聯合建模更容易,兩個領域的建模和學習經驗可以深度共享,從而加快各自領域的進展。
汽車人參考小結
本文梳理了計算機視覺領域深度學習模型CNN的演變歷程,從二十年前曇花一現,到近年來的迅猛發展,AI已在自動駕駛領域找到了最合適發育土壤,演算法迭代速度越來越快,相關論文數量也是以指數形式增長。
在這繁榮的背後,其實帶來了兩大挑戰,
一是商業軟體公司,如何押注多變的演算法技術路線,技術領先還是技術追隨;二是行業硬體公司,在軟硬結合過程中,如果讓硬體架構去適配多變的演算法
。
如果把眼光放長遠一點,
以終為始
去思考,不分應用領域,未來所有深度學習模型會不會統一在一個架構之下?至少從2020年年底開始,Transformer在CV領域中展現出的革命性的效能提升,有望將視覺和語言的建模統一。
PS:近期因工作變動,更新不及時,之後文章主題會進行微調,從智慧電動汽車的三電逐步轉向自動駕駛AI領域,更多關注軟硬體全棧技術發展,此外也會用到更加結構化的戰略工具和框架,去分析AI潛在的商業機會。
本文為汽車人參考第367篇原創文章,如果您覺得文章不錯,“推薦和關注”是對我最大的支援,歡迎隨時和我交流。
看了李斌的訪談,對蔚來服務使用者的理念有了更深刻的理解