【深度】工程師必備—AI模型訓練+推理優化+嵌入部署

2021-02-15 DeepAI 視界

其中,推理一張圖片,那麼就在–source中的default寫上圖片路徑,也可以如圖寫上整個圖片文件夾,這樣會檢測所有圖片。也可以寫上視頻地址和視頻文件夾,檢測所有視頻,存放於inference

的out中。改成0

就是實時檢測了~默認電腦攝像頭,當然也可以改成手機。這個也很簡單,需要的可以私聊我。運行代碼你將看到實時檢測於您電腦內置攝像頭中,這樣可能會有些卡頓,如果您使用我下文使用的2085模組,將有另一番全新體驗。

3.1 高手也愛的黑科技:無損的半精度模型

  上面,我們介紹了以yolov5 吸菸檢測為例的目標檢測,接下來我們在此基礎上提升,說說高手們也想要的黑科技。

1:混合精度模型,半精度模型如何可以以降低顯存卻可以保持精度呢?

裝好apex後在代碼中添加,在optimizer中amp初始化一下

優化反向傳播。組裝到cuda訓練

實現半精度,其他資料詳見博客,還有一些細節沒公布。

3.2 高手也愛的黑科技:為何使用預訓練模型

使用預訓練模型,官方已經給出了,那麼你知道為什麼要使用預訓練模型嗎?

作者已盡其所能設計了基準模型。我們可以在自己的數據集上使用預訓練模型,而不是從頭構建模型來解決類似的自然語言處理問題。

儘管仍然需要進行一些微調,但它已經為我們節省了大量的時間:通常是每個損失下降更快和計算資源節省。

加快梯度下降的收斂速度

更有可能獲得一個低模型誤差,或者低泛化誤差的模型

降低因未初始化或初始化不當導致的梯度消失或者梯度爆炸問題。此情況會導致模型訓練速度變慢,崩潰,直至失敗。

其中隨機初始化,可以打破對稱性,從而保證不同的隱藏單元可以學習到不同的東西

3.3 高手也愛的黑科技:訓練被迫中斷怎麼辦,『遷移學習』幫你搞定?

我在代碼中添加了--resume參數,當你在訓練中被迫中斷了,可以使用這個參數,在你訓練中保存的last.pt

上進行遷移學習。這時候,你將在代碼中看到細節,用法就是加上--resume

然後不使用官方的預訓練模型即可,你將看到接著上次的loss訓練,就成功了。

3.3 高手也愛的黑科技:數據增強

人工智慧,或者說計算機視覺的一個最終目標在於構建一個真正可適用於真實世界複雜環境的系統。而就目前所應用的機器學習系統而言,大部分採用了有監督的學習方法,也必然導致了需要廣泛收集圖像樣本,並進行對應的圖像標註的工作。而人力時有窮盡,高質量的樣本集圖片又是構建一個優秀的機器學習系統的關鍵因素。使用適當的數據增強方法可以將數據集的數量增大十倍以上,從而極大化利用小樣本集中的每個樣本,使之也可以訓練得到一個較好的機器學習模型。數據增強方法也可以提高模型的魯棒性,防止其易在訓練中出現過擬合的現象。

常用的數據增強方法主要來自數字圖像處理中的幾何變換,但不改變圖像中的像素值,而是改變了其空間位置,藉此希望卷積神經網絡學習到圖像中更多的不變性特徵,也有利於提高其泛化性能。

以下將對各種方法做簡單的列舉與說明。

平移(Shift)變換:對原始圖片在圖像平面內以某種方式(預先定義或者隨機方式確定平移的步長、範圍及其方向)進行平移。

翻轉(Flip)變換:沿豎直或者水平方向對原始圖片進行翻轉。

隨機裁剪(Random Crop):隨機定義感興趣區域以裁剪圖像,相當於增加隨機擾動。

噪聲擾動(Noise):對圖像隨機添加高斯噪聲或者椒鹽噪聲等。

對比度變換(Contrast):改變圖像對比度,相當於在HSV空間中,保持色調分量H不變,而改變亮度分量V和飽和度S,用於模擬現實環境的光照變化。

縮放變換(Zoom):以設定的比例縮小或者放大圖像。

尺度變換(Scale):與縮放變換有點類似,不過尺度變換的對象是圖像內容而非圖像本身(可以參考SIFT特徵提取方法),構建圖像金字塔以得到不同大小、模糊程度的圖像。

3.3 高手也愛的黑科技:BN

批規範化(Batch normalization)

當訓練一個深度神經網絡時,由於各層參數不斷變化,所以各層輸入的概率分布也在不斷的變化,也導致了非線性激活函數(如sigmoid等)正負兩邊都會飽和,使得訓練迭代的過程變得極其緩慢甚至無法進行。這時候,通常需要採用較小的學習率以及精細進行權重初始化。loffe等將這種現象稱為「內部協方差偏移」(internal

covariate shift),並提出了批規範化(Batch normalization,BN)解決此類問題。

該論文中提出在每次隨機梯度下降迭代時,在最小批量樣本(mini-batch)內做規範化操作,使得輸出結果各個維度的均值為0,方差為1,有效地避免了非線性激活函數的飽和問題(以sigmoid為例,觀察sigmoid函數即可知,該函數輸入集中在0附近時,其輸出梯度較大);同時也讓梯度變化受參數及其初值的影響減小。

批標準化: 一般用在非線性映射(激活函數)之前,對 x=Wu+b做規範化,使結果(輸出信號各個維度)的均值為0,方差為1 。讓每一層的輸入有一個穩定的分布會有利於網絡的訓練。

BN算法在網絡中的應用

傳統的神經網絡,只是在將樣本x輸入輸入層之前對x進行標準化處理(減均值,除標準差),以降低樣本間的差異性。BN是在此基礎上,不僅僅只對輸入層的輸入數據x進行標準化,還對每個隱藏層的輸入進行標準化。

               四 模型優化

前面我們說了訓練的優化,接下來我將介紹基於Openvino的推理優化,拿好小本本了嗎?

4.1 Openvino 介紹 可以參見這篇博客

OpenVINO是英特爾基於自身現有的硬體平臺開發的一種可以加快高性能計算機視覺和深度學習視覺應用開發速度工具套件,支持各種英特爾平臺的硬體加速器上進行深度學習,並且允許直接異構執行。支持在Windows與Linux系統,Python/C++語言。優化工具包

OpenVINO

讓不懂電腦視覺和深度學習原理的小白可以在很短的時間上手,不必擔心如何建置開發平臺、選擇深度學習框架、訓練及優化模型和硬體加速等問題,只需利用預先訓練及優化過的語義分割模型,很快就可以做出一組看起來很專業的自駕車視覺分析系統。

主要特點:

1:在Intel平臺上提升計算機視覺相關深度學習性能達19倍以上

2:解除CNN-based的網絡在邊緣設備的性能瓶頸

3:對OpenCV,OpenXV*視覺庫的傳統API實現加速與優化

4:基於通用API接口在CPU、GPU、FPGA等設備上運行加上

OpenVINO 有2個大模塊,第一個是 OR 他是用於把深度學習訓練好的模型轉換成engine可識別的文件(xml和bin) ,另一個是inference engine 是OpenVINO具體實施單元,利用一個智能引擎完成相應的應用 。

一般流程:

1:根據自己的訓練模型需要配置Mode Optimizer.

2: 根據設置的模型參數運行Model Optimizer,生成相對應的IR(主要是xml和bin)

xml-主要用來描述網絡拓撲結構

bin-包括生成的weights and biases 二進位數據

3: 在實際應用場景種使用Inference Engine測試生成的IR

4: 在應用程式種調用Inference Engine相應接口,將生成的模型IR部署到實際環境中。

Model Optimizer

Model Optimizer 是一個跨平臺命令行工具,用於促進訓練與具體實施平臺中的過渡,主要是進行靜態模型分析 以及根據配置參照自動調整深度模型

Model Optimizer 被用來設計成支持常用的框架(Caffe, TensofFlow, MXNet, Kaldi, ONNX等),相當於封裝了一層,便於進行開發。

Model Optimizer主要工作流程:

1:根據需要所用到的框架,配置Model Optimizer

2: 提供訓練模型作為輸入,包括網絡拓撲以及參數

3:運行Model Optimizer(根據選擇的網絡拓撲進行訓練)

4:IR作為Model Optimizer輸出

Inference Engine:

Inference Engine是主要運行單元,並提供相應API

將IR作為輸入

在目標硬體優化執行

提供嵌入式平臺最佳執行性能方案

相關焦點

  • 一線工程師超全總結AI部署以及工業落地學習之路
    作為深度學習算法工程師,訓練模型和部署模型是最基本的要求,每天都在重複著這個工作,但偶爾靜下心來想一想,還是有很多事情需要做的:深感還有很多很多需要學習的地方啊。沉迷學習無法自拔既然要學習,那麼學習路線就顯得比較重要了。本文重點談談學習AI部署的一些基礎和需要提升的地方。
  • onnx實現對pytorch模型推理加速
    ONNX Runtime是適用於Linux,Windows和Mac上ONNX格式的機器學習模型的高性能推理引擎。對於硬體供應商來說,也可以簡化神經網絡計算的複雜度,實現優化算法。3.torch.nn.Module.load_state_dict:使用反序列化狀態字典加載model's參數字典保存加載模型2種方式,在保存模型進行推理時,只需要保存訓練過的模型的學習參數即可,一個常見的PyTorch約定是使用.pt或.pth文件擴展名保存模型。
  • 賈揚清推薦:阿里開源輕量級深度學習框架 MNN,側重推理加速和優化
    與 Tensorflow、Caffe2 等同時覆蓋訓練和推理的通用框架相比,MNN 更注重在推理時的加速和優化,在大規模機器學習應用中具有優勢。本文詳細闡述了MNN背後的技術框架和規劃。近日,阿里正式開源輕量級深度學習端側推理引擎「MNN」。
  • NVIDIA AI 推理平臺
    雖然機器學習領域已歷經數十年進步,但深度學習 (DL) 在最近六年才開始蓬勃發展。2012 年,多倫多大學的Alex Krizhevsky憑藉使用NVIDIA GPU訓練的深度神經網絡在ImageNet圖像識別大賽中一舉奪魁,戰勝了所有人類專家嘔心瀝血數十載研究出的算法。
  • 輕量級深度學習端側推理引擎 MNN
    阿里妹導讀:近日,阿里正式開源輕量級深度學習端側推理引擎「MNN」。
  • 模型壓縮公開課上線,浪潮算法優化專家詳解ResNet50的極致優化技巧
    深度學習模型作為機器學習的前沿方向,對推進人工智慧發展具有重要意義。然而,由於計算的複雜度以及參數冗餘,深度學習模型在一些場景和設備上很難進行部署,通常需要藉助模型壓縮、優化加速等方法突破瓶頸。目前,模型壓縮方法可以分為線性或非線性量化、結構或非結構剪枝、網絡結構搜索等,可以有效的降低參數冗餘,從而減少存儲佔用、通信帶寬和計算複雜度。
  • 無痛的機器學習系統入門指南(二)- 模型部署
    論文題目:MLModelCI: An Automatic Cloud Platform for Efficient MLaaS開原始碼:https://github.com/cap-ntu/ML-Model-CI深度學習正在改變生活中的方方面面。手中的APP,快遞倉儲物流的優化,蛋白質的預測,遊戲的AI敵人等等,所謂「見面不談人工智慧,遍讀詩書也枉然」。
  • 輕量級部署,騰訊優圖開源深度學習推理框架TNN
    6 月 10 日,騰訊優圖實驗室宣布正式開源新一代移動端深度學習推理框架 TNN,通過底層技術優化實現在多個不同平臺的輕量級部署落地。該框架性能優異、簡單易用。基於 TNN,開發者能夠將深度學習算法輕鬆移植到手機端並高效執行,開發人工智慧 APP,真正將 AI 帶到指尖。
  • 零門檻上手圖像分割模型開發實戰
    我想嘗試在業務場景中應用AI,但沒有資深算法工程師,怎麼辦?業務場景複雜,數據積累不足、質量參差不齊,如何快速優化?
  • 華為開源自研AI框架MindSpore!自動微分、並行加持,一次訓練,可多場景部署
    剛剛,華為宣布正式開源自研深度學習框架MindSpore,代碼已經上線。MindSpore是一款支持端邊雲全場景的深度學習訓練推理框架,主要應用於計算機視覺、自然語言處理等AI領域,面向數據科學家、算法工程師等人群,提供設計友好、運行高效的開發體驗。
  • 淘寶開源深度學習端側推理引擎 MNN
    ,MNN 更注重在推理時的加速和優化,解決在模型部署的階段的效率問題,從而在移動端更高效地實現模型背後的業務。這和伺服器端 TensorRT 等推理引擎的想法不謀而合。在大規模機器學習應用中,考慮到大規模的模型部署,機器學習的推理側計算量往往是訓練側計算量的十倍以上,所以推理側的優化尤其重要。                                                                   ——賈揚清(阿里巴巴技術副總裁)
  • 加速深度學習在線部署,TensorRT安裝及使用教程
    但在部署推理時,為了降低成本,往往使用單個GPU機器甚至嵌入式平臺(比如 NVIDIA Jetson)進行部署,部署端也要有與訓練時相同的深度學習環境,如caffe,TensorFlow等。由於訓練的網絡模型可能會很大(比如,inception,resnet等),參數很多,而且部署端的機器性能存在差異,就會導致推理速度慢,延遲高。
  • 英特爾發布第二代「至強」處理器,進一步領先AI推理市場丨品牌
    」雖然眾多名詞可能你看得有點暈,但不得不說,在這個靜悄悄背後,矽谷洞察觀察到的是,這一次,英特爾新的處理器可以說在AI領域下功夫了。甚至說,大有挑戰GPU的架勢啊!Alexa聽到問題,並決定告訴你今天天氣的具體更新情況如何時,這就是基於推理的機器學習。而在回答問題之前,Alexa肯定被無數次輸入不同的天氣信息進行訓練,從而才能遇到用戶提問時答出來。因此,如果以當中關鍵的硬體——晶片來看,針對訓練(Training)和推理(Inference)功能所達到的不同目標,就有不同的需求。
  • 如何優化深度學習模型
    這將涉及設置學習率,訓練模型,評估它,選擇不同的學習率,再次訓練你從頭開始模型,重新評估它,並繼續循環。問題是,「訓練你的模型」可能需要幾天時間(取決於問題的複雜性)才能完成。因此,在會議提交截止日期之前,您只能嘗試一些學習率。而你知道什麼,你甚至沒有開始設置動量。糟糕極了。
  • Facebook開源多款AI工具,支持遊戲、翻譯
    種語言)、ELF(可通過遊戲來教機器推理)等諸多 Facebook 內部使用的庫和模型。,為研究提供靈活和模塊化的支持,同時具備生產部署所需的穩定性和支持。GitHub 地址:https://github.com/pytorchCaffe2Caffe2 是一款輕量級,模塊化和可擴展的深度學習框架,能夠在雲端或行動裝置上部署新模型。
  • Facebook發布開源Caffe2深度學習框架,順應跨平臺模型訓練的新趨勢
    一直以來,深度神經網絡和人工智慧模型的訓練,包括圖像、視頻、文本和語音等各種信息的處理通常要在數據中心或超級計算機的支持下才能完成。而隨著行動裝置的推廣,能夠快速高效地在移動端部署這些模型就變成亟待解決的問題了,而這也是Facebook一直試圖搭建的一個深度學習框架。如今,Facebook終於開放了Caffe2的第一個正式版本,官方介紹說:這是一個輕量化且模塊化的深度學習框架,在強調輕便性的同時,也保持了可擴展性和計算性能。
  • 深度學習模型真的越大越好嗎?
    如果我們相信,在這個世界上,數以百萬計的工程師將使用深度學習來改進每一個應用程式和設備,那麼我們就無法藉助於需要花費大量時間和金錢進行訓練的大規模模型。其次,它限制了規模。世界上所有公有和私有雲中可能都只有不到 1 億個處理器。但是現在已經有 30 億部手機,120 億物聯網設備,1500 億微控制器。
  • Google、Facebook等不可錯過的 AI 開源工具,你想要的都在這裡!
    重要的是,GPipe 讓研究人員無需調整超參數,即可輕鬆部署更多加速器,從而訓練更大的模型並擴展性能。據官方公布,QNNPACK可以成倍提升神經網絡的推理效率,已經成為 PyTorch 1.0 的一部分, 也已經被集成到 Facebook 的應用程式中,部署到數十億臺設備上。
  • PyTorch Lightning團隊推出了Flash Lightning,可讓用戶推斷,微調和訓練數據模型
    Flash 是基於PyTorch Lightning的快速原型任務,基線和微調可擴展深度學習模型的集合。它提供從基準實驗到最新研究的無縫體驗。它使用戶能夠構建模型而不會被所有細節所嚇倒,並且可以通過Lightning靈活地進行試驗以獲得完整的多功能性。
  • 可以在手機裡運行的Detectron2來了:Facebook官方出品,支持端到端模型訓練、量化和部署
    PyTorch和Detectron2支持的深度學習工具包通過D2Go,開發者可以創建已經針對行動裝置進行過優化的FBNet模型,在移動端高效地執行目標檢測、語義分割以及關鍵點估計等任務。在D2go的GitHub倉庫中,還提供了預訓練模型的推理Demo。從model_zoo中選擇一個模型,運行demo.py,就可以進行試玩。