1. PaddleHub 提供的深度學習簡化流程
選擇Baidu的預訓練模型 -> 遷移學習 -> 超參搜索 -> 多端部署
2. 深度學習為何能夠代替機器學習
2.1. 深度學習改變了AI應用的研發模式
深度學習改變了很多領域算法的實現模式。在深度學習興起之前,很多領域建模的思路是投入大量精力做特征工程,將專家對某個領域的“人工理解”沉淀成特征表達,然后使用簡單模型完成任務(如分類或回歸)。而在數據充足的情況下,深度學習模型可以實現端到端的學習,即不需要專門做特征工程,將原始的特征輸入模型中,模型可同時完成特征提取和分類任務。
以計算機視覺任務為例,特征工程是諸多圖像科學家基於人類對視覺理論的理解,設計出來的一系列提取特征的計算步驟,典型如SIFT特征。在2010年之前的計算機視覺領域,人們普遍使用SIFT一類特征+SVM一類的簡單淺層模型完成建模任務。
SIFT特征由David Lowe在1999年提出,在2004年加以完善。SIFT特征是基於物體上的一些局部外觀的興趣點而與影像的大小和旋轉無關。對於光線、噪聲、微視角改變的容忍度也相當高。基於這些特性,它們是高度顯著而且相對容易擷取,在母數龐大的特征數據庫中,很容易辨識物體而且鮮有誤認。使用SIFT特征描述對於部分物體遮蔽的偵測率也相當高,甚至只需要3個以上的SIFT物體特征就足以計算出位置與方位。在現今的電腦硬件速度下和小型的特征數據庫條件下,辨識速度可接近即時運算。SIFT特征的信息量大,適合在海量數據庫中快速准確匹配。
2.2. 實現了深度學習框架標准化
在此之前,不同流派的機器學習算法理論和實現均不同,導致每個算法均要獨立實現,如隨機森林和支撐向量機(SVM)。但在深度學習框架下,不同模型的算法結構有較大的通用性,如常用於計算機視覺的卷積神經網絡模型(CNN)和常用於自然語言處理的長期短期記憶模型(LSTM),都可以分為組網模塊、梯度下降的優化模塊和預測模塊等。這使得抽象出統一的框架成為了可能,並大大降低了編寫建模代碼的成本。一些相對通用的模塊,如網絡基礎算子的實現、各種優化算法等都可以由框架實現。建模者只需要關注數據處理,配置組網的方式,以及用少量代碼串起訓練和預測的流程即可。
在深度學習框架出現之前,機器學習工程師處於手工業作坊生產的時代。為了完成建模,工程師需要儲備大量數學知識,並為特征工程工作積累大量行業知識。每個模型是極其個性化的,建模者如同手工業者一樣,將自己的積累形成模型的“個性化簽名”。而今,“深度學習工程師”進入了工業化大生產時代。只要掌握深度學習必要但少量的理論知識,掌握Python編程,即可在深度學習框架上實現非常有效的模型,甚至與該領域最領先的模型不相上下。建模這個被“老科學家”們長期把持的建模領域面臨着顛覆,也是新入行者的機遇。
3. 領域模型
├── audio
│ └── TTS
├── image
│ ├── classification
│ ├── face_detection
│ ├── gan, 生成式對抗網絡
│ ├── humanseg, 人體解析
│ ├── keypoint_detection
│ ├── object_detection, 目標檢測
│ ├── semantic_segmentation, 語義分割
│ ├── style_transfer, 風格遷移
│ ├── super_resolution, 超分辨率
│ └── text_recognition
├── text
│ ├── embedding
│ ├── language_model
│ ├── lexical_analysis
│ ├── semantic_model
│ ├── sentiment_analysis
│ ├── syntactic_analysis
│ │ └── DDParser
│ ├── text_generation
│ │ └── reading_pictures_writing_poems
│ └── text_review
└── video
└── classification
└── videotag_tsn_lstm
3.1. 工業級圖像分割利器: PaddleSeg
目前,PaddleSeg 已經在百度無人車、AI開放平台人像分割、小度P圖和百度地圖等多個產品線上應用或實踐,在工業質檢行業也已經取得了很好的效果。
3.1.1. 圖像分割是什么?
圖像語義分割通過給出每一個圖像中像素點的標簽,實現圖像中像素級別的語義分割,它是由圖像處理到圖像分析的關鍵步驟。就像下圖中所看到的那樣,可以對車輛、馬路、人行道等實例進行分割和標記!
相比於傳統的圖像分類任務,圖像分割顯然更難更復雜。但是,圖像分割是圖像理解的重要基石,在自動駕駛、無人機、工業質檢等應用中都有着舉足輕重的地位。
3.1.2. PaddleSeg
PaddleSeg 對所有內置的分割模型都提供了公開數據集下的預訓練模型,全面覆蓋了 DeepLabv3+、ICNet、U-Net 等圖像分割領域的主流模型實現,並且內置了 ImageNet、COCO、CityScapes 等數據集下的 15 個預訓練模型,可以滿足不同場景下的不同精度需求和性能需求。
15 個預訓練模型,請參考: https://github.com/PaddlePaddle/PaddleSeg/blob/master/docs/model_zoo.md
其中,最重要的三種模型介紹如下。
-
U-Net 模型:輕量級模型,參數少,計算快
U-Net 起源於醫療圖像分割,整個網絡是標准的 Encoder-Decoder 網絡,特點是參數少,計算快,應用性強,對於一般場景的適應度很高。
-
DeepLabv3+模型 :PASCAL VOC SOTA 效果,支持多種 Backbone
DeepLabv3+是 DeepLab 系列的最后一篇文章,其前作有 DeepLabv1,DeepLabv2, DeepLabv3。在最新作中,DeepLab 的作者通過 Encoder-Decoder 進行多尺度信息的融合,同時保留了原來的空洞卷積和 ASSP 層,其骨干網絡使用了 Xception 模型,提高了語義分割的健壯性和運行速率,在 PASCAL VOC 2012 dataset 取得新的 state-of-art performance,即 89.0mIOU。
在 PaddleSeg 當前實現中,支持兩種分類 Backbone 網絡的切換:
-
Xception:
DeepLabv3+原始實現的 backbone 網絡,兼顧了精度和性能,適用於服務端部署。PaddleSeg 提供了 41/65/71 三種不同深度的預訓練模型。
-
MobileNetv2:
適用於移動端部署或者對分割預測速度有較高要求的場景,PaddleSeg 還提供從 0.5x 到 2.0x 不同 DepthMultiplier 的模型。
-
-
ICNet 模型:實時語義分割,適用於高性能預測場景
ICNet(Image Cascade Network)主要用於圖像實時語義分割。相較於其它壓縮計算的方法,ICNet 既考慮了速度,也考慮了准確性。ICNet 的主要思想是將輸入圖像變換為不同的分辨率,然后用不同計算復雜度的子網絡計算不同分辨率的輸入,然后將結果合並。ICNet 由三個子網絡組成,計算復雜度高的網絡處理低分辨率輸入,計算復雜度低的網絡處理分辨率高的網絡,通過這種方式在高分辨率圖像的准確性和低復雜度網絡的效率之間獲得平衡。
3.1.3. 數據增強
特別值得一提的是,考慮到在實際的企業場景中(如互娛場景等),往往存在標注成本高、標注數據少的問題,訓練數據相對於整個樣本空間的占比是非常小的。此時就很有必要采取數據增強策略,對訓練集進行擴充。
PaddleSeg 內置了 10 余種數據增強策略,可以有效地幫助企業進行數據集擴充,顯著提升模型的魯棒性。
3.1.4. LIP挑戰賽: 人體解析模型
提供包攬 CVPR2019 LIP 挑戰賽人體解析任務大滿貫三冠王 ACE2P 模型,帶你一步體驗世界領先水平效果。
3.1.5. 應用場景: 工業質檢
飛槳與國內稀土永磁零件質檢領軍企業合作,基於 PaddleSeg 模型庫,對精密零件的質檢工作進行了 AI 賦能升級。
傳統的工作方式下,質檢工人每天需要 8~12 小時在亮光下目視檢查直徑 45mm 以內零件的質量,工作強度非常大,對視力也有很大的損害。
目前,基於 PaddleSeg 內置 ICNet 模型實現的精密零件智能分揀系統,誤收率已低於 0.1%。對於 1K*1K 分辨率的彩色圖像,預測速度在 1080Ti 上達到了 25ms,單零件的分揀速度比用其他框架實現的快 20%。PaddleSeg 已幫助工廠達到:生產成本平均降低 15%,工廠效益平均提升 15%。同時,交付質量也大幅提升,投訴率平均降低 30%。
3.1.6. 應用場景: 地塊分割
基於圖像分割技術,開發一款地塊智能分割系統,快速自動地獲知農耕用地邊境及面積,就可以更加有效地進行農作物產量預估和農作物分類,輔助農業決策。
目前,基於 PaddleSeg 內置模型 DeepLabv3 實現的地塊智能分割系統,面積提取准確率已達到了 80% 以上,這對作物長勢、作物分類、成熟期預測、災害監測、估產等工作都起到了高效的輔助作用,大大節省了人力成本。
3.1.7. 應用場景: 車道線分割
車道線分割的難點主要有兩個:
- 准確度: 由於涉及到車輛行駛的安全性,車道線分割對准確度的要求非常非常高的
- 實時性: 在車輛高速行駛的過程中,必須快速地、實時地提供車道線分割結果
3.1.8. 應用場景: 人像分割
不僅在工業場景下,在 C 端互娛領域,短視頻人像特效、證件照智能摳圖、影視后期處理等場景下,都需要對人像進行分割。例如,一寸照片換底色,藍色、白色、紅色切換。
基於 PaddleSeg 實現的人像分割模型,mIoU 指標已經達到了 0.93 以上,並且已經在百度 AI 開放平台上線,合作企業高達 60 余家,是真正的產業利器。
3.1.9. 代碼實戰體驗
為了更好的體驗分割庫的效果,避免因為軟硬件環境導致的各種問題,我們采用了 AIStudio 一站式實訓開發平台作為體驗環境,通過完整的人像分割的實例教程來熟悉 PaddleSeg 的使用。
傳送門: https://aistudio.baidu.com/aistudio/projectdetail/110669
項目代碼內容都是經過研發人員細心優化並封裝好頂層邏輯,可以讓開發者最快方式體驗 PaddleSeg 的效果,以下代碼內容供參考核心流程及思路,實際體驗建議開發者完整 Fork 項目並點擊全部運行即可。
3.2. 視頻理解黑科技: VideoTag
面對海量的視頻數據,如何推薦用戶感興趣的視頻?
互聯網視頻分類任務的目標是理解視頻的語義,並給視頻打上標簽,標簽包括不限於美食、旅游、影視/游戲等等。標簽越精細、在視頻分發和推薦時,准確率越高。
熟悉深度學習的同學們都知道,數據集對於算法的研究起着非常重要的作用。對於視頻分類任務而言,網絡上雖然有大量用戶上傳的視頻數據,但它們大多缺少類別標簽,無法直接用於模型訓練。在學術界,Kinetics系列是最熱門的視頻分類數據集,但其數據量(以Kinetics-400為例,包含23萬個視頻)與當前國內主流APP的數據量(千萬/億/十億量級)相比較,也是雲泥之別,且視頻內容與互聯網短視頻也存在較大差異。
此外,視頻中包含成百上千幀圖像,處理這些幀圖像需要大量的計算。基於TSN、TSM、SlowFast視頻分類模型,使用Kinetics-400數據,模型訓練大概需要1周才能達到70%~80%的Top-1精度,面對上千萬的數據量,顯然學術界模型是無法實現產業應用的。
Paddle大規模視頻分類模型VideoTag,基於百度短視頻業務千萬級數據,在訓練速度上進行了全面升級;支持3000個源於產業實踐的實用標簽;引入ActivityNet冠軍模型 Attention Cluster
等,在測試集上達到90%的精度;具備良好的泛化能力,非常適用於國內大規模(千萬/億/十億級別)短視頻分類場景的應用。
考慮到國內主流APP視頻數據量巨大,為了提升模型訓練速度,VideoTag采用兩階段建模方式,即圖像建模和序列學習。
- 第一階段,使用少量視頻樣本(十萬級別)訓練大規模視頻特征提取模型;
- 第二階段,使用千萬級數據進行序列學習,最終實現在超大規模(千萬/億/十億級別)短視頻上產業應用。
-
數據處理
視頻是按特定順序排列的一組圖像的集合,這些圖像也稱為幀。視頻分類任務需要先對短視頻進行解碼,然后再將輸出的圖像幀序列灌入到VideoTag中進行訓練和預測。
-
圖像建模
先從訓練數據中,對每個類別均勻采樣少量樣本數據,構成十萬量級的訓練樣本。然后使用TSN網絡進行訓練,提取所有視頻幀的TSN模型分類層前一層的特征數據。在這個過程中,每一幀都被轉化成相應的特征向量,一段視頻被轉化成一個特征序列。
-
序列學習
采用Attclusters、LSTM和Nextvlad對特征序列進行建模,學習各個特征之間的組合方式,進一步提高模型准確率。由於序列學習相比於圖像建模耗時更短,因此可以融合多個具有互補性的序列模型。
-
預測結果
融合多個模型結果實現視頻分類,進一步提高分類准確率。
在訓練過程中,可以使用少量GPU和CPU Hadoop集群完成如上操作,實現較少耗時(1周左右),就可以完成VideoTag模型訓練。
3.3. 中文字符識別: PaddleOCR
2020.08: GitHub Trending第一之后,PaddleOCR再發大招:百度自研頂會SOTA算法正式開源
模型畫像:
- 總模型大小僅8.6M
- 僅1個檢測模型(4.1M)+1個識別模型(4.5M)組成
- 同時支持中英文識別
- 支持傾斜、豎排等多種方向文字識別
- T4單次預測全程平均耗時僅60ms
- 支持GPU、CPU預測
- 可運行於Linux、Windows、MacOS等多種系統
我們知道,訓練與測試數據的一致性直接影響模型效果,為了更好的模型效果,經常需要使用自己的數據訓練超輕量模型。PaddleOCR本次開源內容除了8.6M超輕量模型,同時提供了2種文本檢測算法、4種文本識別算法,並發布了相應的4種文本檢測模型、8種文本識別模型,用戶可以在此基礎上打造自己的超輕量模型。
PaddleOCR本次開源了多種業界知名的文本檢測和識別算法,每種算法的效果都達到或超越了原作。文本檢測算法部分,實現了EAST[1]和DB[2]。在ICDAR2015文本檢測公開數據集上,算法效果如下:
簡單對比一下2020年主流OCR方向開源repo的核心能力:
3.3.1. 百度自研SAST、SRN兩大SOTA算法
面向自然場景任意形狀文字檢測問題,開源ACM Multimedia 2019上發表的SAST(A Single-Shot Arbitrarily-Shaped Text Detector based on,Context Attended Multi-Task Learning)算法,在多個公開數據集(包括SCUT-CTW1500,Total-Text,ICDAR15 和 MLT),准確度取得了SOTA或可比的結果,速度上位列領先行列。
面向場景文本圖像中兼顧視覺信息和語義信息的需求,開源CVPR2020中發表的SRN(Towards Accurate Scene Text Recognition with Semantic Reasoning Networks )算法,在包括ICDAR13、ICDAR15,IIIT5K,SVT,SVTP,CUTE80數據集,准確度取得了SOTA或可比的結果。
3.3.2. *開源算法詳細解讀
想要使用自定義數據訓練超輕量模型的小伙伴,可以參考8.6M超輕量模型的打造方式,從PaddleOCR提供的基礎算法庫中選擇適合自己的文本檢測、識別算法,進行自定義的訓練。PaddleOCR提供了詳細的訓練和模型串聯指導: https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/customize.md
3.4. 目標檢測
PaddleDetection此次發布的端側模型涵蓋了三類主流模型結構,按照設計思想可以分為單階段和兩階段:
-
單階段(One-stage)
這類模型結構相對簡單,通常在全卷積網絡(FCN)上直接連接檢測頭輸出類別及位置信息。典型代表有:SSD系列、YOLO系列。這類結構由於其pipeline相對短,相對延時低,對移動應用比較友好。尤其是SSD系列,在端側使用廣泛,各種人臉,手勢檢測應用中都能見到它的身影。
-
兩階段 (Two-stage)
顧名思義,這類結構將檢測流程分為兩個階段:
- 第一階段輸出粗糙的候選框(proposal),
- 第二階段將候選框對應特征提取出來,在其基礎進一步預測類別並細化輸出位置信息。
代表結構如Faster R-CNN。這種設計的好處是位置信息較為精確,小目標的檢測精度更好。但是由於組成部分較多,整體流程較長,時延往往會比較高,很難在端側成功落地(后面可以看到,通過使用百度的優化方法,這類模型在端側也能取得不俗的成績)。
3.4.1. 優化思路
上述兩類模型的運行流程如下所示:
- 單階段: 特征提取 -> 檢測頭 -> 后處理
- 兩階段: 特征提取 -> RPN (Region Proposal Network) -> ROI池化 -> 檢測頭 -> 后處理
其中,ROI池化和后處理多為手工設計的模塊,依賴於部署框架的實現;RPN只有2個卷積層,且輸出通道數僅為4和1,運行時間占比不高。綜合來看,優化特征提取器和檢測頭是減少端側運算量的關鍵。
3.4.2. 優化特征提取器
通用物體檢測模型的特征提取器通常使用基於ImageNet預訓練的CNN模型(ResNet, ResNeXt, MobileNet, ShuffleNet)等作為主干網絡(Backbone)。主干網絡預訓練模型的精度和速度會極大的影響檢測模型的最終表現。飛槳圖像分類庫PaddleClas的預訓練模型為主干網絡提供了豐富的選擇。例如端側通用檢測模型常用的MobileNet系列,就有多個版本(部分精度及延時對比見下表)。
我們統一使用了半監督學習知識蒸餾預訓練的MobileNetV3,最終各檢測模型在COCO mAP上均獲得了0.7%~1.5%的精度提升。以YOLOv3為例,用MobileNetV3替換MobileNetV1作為主干網絡,COCO的精度從29.3提升到31.4,而且驍龍855芯片上推理時延從187.13ms降低到155.95ms。
需要注意的是,由於蒸餾的預訓練模型的特征非常精細,需要適當減小主干網絡的相對學習率及L2 decay,防止在訓練的過程中破壞其特征。
3.4.3. 優化特征融合FPN
為了進一步將多層的特征進行有效融合(fusion)及細化(refine),Faster R-CNN模型使用了FPN(Feature Pyramid Network )模塊,其中選擇哪些特征層進行FPN融合及后續處理非常關鍵。對於MobileNet主干網絡,通常使用C2~C5特征層進行特征融合。
融合處理后,輸出5個特征層(P2P6),分辨率從1/4到1/64。為了提升預測速度,我們嘗試減少一個特征層,即只輸入C2C4,生成P2P4,該調整可以減少21%的延時,但在COCO數據集上mAP僅降低了0.9%。進一步分析發現在此特征組合下,RPN輸出大物體的召回率很低。由此,我們在FPN模塊里添加降采樣卷積,額外生成P5P6,此修改將COCO mAP提升了1.3%,但預測時間僅增加9%左右。
3.4.4. 優化檢測頭
檢測頭通常由多層卷積組成。當提取特征的骨干網絡的運算量減少后,如果繼續使用檢測頭的標准配置,耗時將會成為優化的主要瓶頸。例如,在YOLOv3-MobileNetv3中,檢測頭部分的耗時約占50%。縮小檢測頭,減少檢測頭的預算量,對於端側模型來說是一個非常重要的優化環節。一般是通過手動設計或者通過模型壓縮裁剪策略,對檢測頭的卷積層進行結構化裁剪來實現。
比如,我們對兩階段Faster R-CNN模型,大幅減少FPN的卷積通道數量(256->48)及檢測頭的全連接層通道數量(1024->128)。在YOLOv3模型中,通過模型壓縮的裁剪方法對檢測頭進行裁剪,下文有詳細的實戰說明。
3.4.5. 已發布模型
這次PaddleDetection發布了三類模型,根據模型本身的設計特點選擇使用上述技巧,最終的收益非常顯著。
- Faster-RCNN: 在調整FPN結構的基礎上手動減少了FPN及檢測頭的通道數,並使用AutoAugment數據增強、余弦學習率策略及Balanced L1 loss進行訓練
- YOLOv3:使用剪裁縮小檢測頭提升速度,並使用蒸餾訓練來提升模型精度。
- SSDLite:使用余弦學習率策略訓練,並使用量化訓練進一步加速。
最終發布的模型測評結果可參考下表:
3.4.6. PP-Yolo
目標檢測的王牌家族——YOLO系列模型,作為單階段目標檢測算法的代表之一,一經出世,便以快速精准的檢測效果而迅速躥紅。其不僅在速度上做到真正實時,精度上也可以達到很多非實時兩階段模型才有的水平。
而學術界和開源社區中的YOLO擁躉、大神們,並未止步於此, YOLO v4、”YOLO v5”也在今年被相繼推出,它們大量整合了計算機視覺 state-of-the-art
技巧,例如在數據增強、錨定框、骨架網絡、訓練方式等維度進行優化,從而達到大幅提升YOLO目標檢測性能的效果。
飛槳目標檢測套件PaddleDetection的研發團隊也為了讓YOLOv3模型在工業實際應用場景擁有更優異的精度與推理速度,以盡量不增加模型計算量和推理開銷為前提,探索出了一整套更深度的算法優化秘籍,將原先YOLOv3模型的精度(在COCO test-dev2017數據集)從33.0%提升了12.9個絕對百分點,達到45.9%,處於業界領先行列!而在該精度下,其推理速度在V100上達到了72.9 FPS。
也就是說,它在精度和預測速度都超越原生的YOLOv4,並且體積更小,實打實的成為工業應用場景最實用目標檢測模型。
而PP-YOLO所應用的這套優化策略,也可以被嘗試應用到該系列的其它模型上,產業開發者或者科研人員可借鑒這套優化算法展開進一步的探索。
-
基於YOLOv3-DarkNet53的初步優化
-
更優的骨干網絡: ResNet50vd-DCN
-
ResNet50vd: 擁有50個卷積層的ResNet-D網絡
ResNet系列模型是在2015年提出后,在學術界和工業屆得到了廣泛的應用,其模型結構也在被業界開發者持續改進,在經過了B、C、D三個版本的改進后,最新的ResNet-D結構能在基本不增加計算量的情況下先住提高模型精度。經飛槳團隊的多重實驗發現,使用ResNet50vd結構作為骨干網絡,相比於原始的ResNet,可以提高1%-2%的目標檢測精度,且推理速度基本保持不變。
-
DCN(Deformable Convolution)可變形卷積
其卷積核在每一個元素上額外增加了一個可學習的偏移參數。這樣的卷積核在學習過程中可以調整卷積的感受野,從而能夠更好的提取圖像特征,以達到提升目標檢測精度的目的。但它會在一定程度上引入額外的計算開銷。經過多翻嘗試,PaddleDetection團隊發現只在ResNet的最后一個stage(C5)增加可變形卷積,是實現引入極少計算量並提升模型精度的最佳策略。
在使用ResNet50vd-DCN作為骨干網絡后,YOLOv3模型的檢測精度從原先的38.9% 達到39.1%,而推理速度得到了36%的大幅提高(58.2FPS -> 79.2FPS)。
-
-
穩定的訓練方式:EMA、DropBlock和更大的batch size
-
IoU學習
-
Grid Sensitive
-
后處理優化: Matrix NMS
-
特征提取優化: CoordConv, 空間金字塔池化
-
更優的預訓練模型: SSLD
3.5. Paddle-Inference
3.6. Semantic label
4. 調參
4.1. 數據增強: AutoAugment
數據增強是提高神經網絡准確性的有效技術,但是大部分的數據增強實現是手動設計的。自動增廣AutoAugment,是將若干種組合策略,如圖像平移、旋轉、直方圖均衡化等,組合為一個增廣的集合,每次隨機從其中選擇一個子策略(該子策略也可能是多種增廣的融合),並使用該策略對輸入圖像進行增廣。經實驗驗證,在兩階段端側檢測模型上,使用該策略能夠帶來0.5%的精度提升。
值得提醒的一點:對小模型而言,由於本身學習能力有限,過度的數據增強很難提升模型的最終精度,甚至還可能起到相反的效果。例如,實驗發現,兩階段端側檢測模型采用GridMask后,精度不升反降。
4.2. 學習率策略
深度學習的訓練是一個優化過程,訓練過程中模型的權重會不斷變化,而這個變化的速度由學習率決定。隨着訓練的進行,學習率本身也要不斷的調整,從而避免模型陷入局部最優,鞍點或者最優點一直在附近振盪。合適的學習率調整策略會使得訓練過程更加平滑,從而提升模型的最終精度。實驗發現,相比通常的三段學習率,使用余弦學習率策略訓練可以達到更高的精度,而且該策略不引入額外超參,魯棒性較高。余弦學習率策略的計算公式如下:
decayed_lr = learning_rate ∗ 0.5∗(cos(epoch ∗ math.piepochs) + 1)
余弦學習率策略同三階段學習率策略對比曲線如下:
4.3. Balanced L1 loss
Libra R-CNN 提出了 Balanced L1 loss
損失函數。中心思想是平衡目標檢測的兩種任務(定位及分類)及樣本難度對模型訓練的影響,從而達到更優的精度表現。具體做法是對定位任務的smooth L1 loss進行改進,通過對難樣本(outlier)進行梯度裁剪(gradient clip),避免模型權重更新不平衡。
兩階段檢測模型中,最后在檢測頭部分進行邊框回歸時,使用 Balanced L1 loss
替換傳統的 smooth L1 loss
,可以帶來0.4%的mAP提升。
4.4. 模型裁剪
卷積通道裁剪是一種很有效的在保證模型精度的情況下減小模型大小的解決方案。通過一定的裁剪機制,將重要性低的卷積通道剪裁掉,從而減小運算量。相比於手工設計縮小網絡,基於模型壓縮的裁剪算法更具通用性和遷移性。
目前PaddleDetection集成了飛槳模型壓縮工具PaddleSlim,提供針對檢測模型的壓縮方案。在MobileNetv3-YOLOv3中就是通過此方案實現的模型加速。感興趣的同學可以猛戳這里進行YOLOv3剪裁的實操實驗。
4.5. 知識蒸餾
知識蒸餾
是一種很有效的提升模型精度的解決方案,該技術已被廣泛應用於CV,NLP等多個領域。
主要原理是使用復雜、學習能力強的網絡作為teacher,通過深度監督的方式將其學到的特征”知識” 傳遞給參數量小、學習能力弱的student網絡。如下圖所示,student模型在學習真實標簽的同時,也會學習teacher網絡預測的結果,將teacher網絡的預測結果作為軟標簽作為目標計算損失和與正式標簽作為目標計算的損失一起作為最終損失,從而在訓練過程中能學習到高精度的teacher網絡學習到的更優的知識。
就CV而言,知識蒸餾的有效性在分類任務已獲得大量驗證,但目前在檢測領域的應用還相對較少。我們在YOLOv3的檢測頭優化過程中嘗試了蒸餾方式來fine tune剪裁后的模型,使用精度更高的YOLOv3-ResNet34模型作為teacher模型,對YOLOv3-MobileNetV3模型進行蒸餾。最終的實驗結果表明,在COCO數據集上可以獲得2-3個點的精度收益。感興趣的同學可以繼續猛戳這里進行實操實驗。
4.6. 模型量化
考慮到端側模型通常使用CPU部署,通常有較好的Int8 vectorization運算支持。使用Int8精度對FP32的模型進行量化,不僅可以減小存儲體積,還能夠對常見卷積、全連接的計算進行加速。
模型量化主流方式有:訓練后量化 (Post training quantization)和量化訓練(Quantization aware training)。
- 前者使用少量樣本數據對模型進行校准,獲取其權重及激活的動態數值范圍,再根據該數據對權重進行量化。
- 后者在模型訓練過程中對模型權重進行偽量化(fake quantization)使得模型能夠適應量化帶來的噪音,從而減少最終得精度損失。
我們在SSDLite的訓練過程中使用這種量化方式,最終實現在少量精度損失(mAP -0.4%)的基礎上加速22%左右的效果。
5. PaddleHub Samples
5.1. 圖像識別
- 人像分割(HumanSeg)
- 人體部件分割 (ACE2P)
- 車道線分割(RoadLine)