版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
項(xiàng)目四基于Pytorch(YOLOv5)目標(biāo)檢測模型部署邊緣智能計(jì)算應(yīng)用項(xiàng)目引導(dǎo)案例目標(biāo)檢測的目標(biāo)是確定并返回某張給定圖像中是否存在給定類別(比如人、車、自行車、狗和貓)的空間位置和覆蓋范圍(比如返回一個(gè)邊界框)。目標(biāo)檢測是解決分割、場景理解、目標(biāo)追蹤、圖像描述、事件檢測和活動(dòng)識(shí)別等視覺任務(wù)的基礎(chǔ)。應(yīng)用:機(jī)器人視覺、消費(fèi)電子產(chǎn)品、安保、自動(dòng)駕駛、人機(jī)交互、基于內(nèi)容的圖像檢索、智能視頻監(jiān)控和增強(qiáng)現(xiàn)實(shí)。項(xiàng)目引導(dǎo)案例本項(xiàng)目將帶著大家部署基于Pytorch的yolov5目標(biāo)檢測模型,主要涉及到的知識(shí)有:Pytorch框架YOLO算法Git使用方法ONNX格式和RKNN格式項(xiàng)目中所涉及的操作過程主要如下圖所示:基于Pytorch的YOLOv5模型訓(xùn)練及轉(zhuǎn)換Pytorch模型轉(zhuǎn)ONNX模型ONNX模型轉(zhuǎn)RKNN模型邊緣端部署RKNN模型任務(wù)一基于Pytorch的YOLOv5模型訓(xùn)練及轉(zhuǎn)換邊緣智能計(jì)算應(yīng)用職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于Pytorch的YOLOv5模型訓(xùn)練及轉(zhuǎn)換了解Pytorch的安裝方法;了解Pytorch的組件與工作原理;了解使用Pytorch進(jìn)行模型訓(xùn)練的方法。掌握開源數(shù)據(jù)集的下載使用掌握基于開源項(xiàng)目YOLOv5訓(xùn)練環(huán)境搭建掌握基于Pytorch的YOLOv5模型訓(xùn)練及預(yù)測掌握Pytorch模型文件轉(zhuǎn)ONNX模型文件的環(huán)境搭建掌握Pytorch模型文件轉(zhuǎn)ONNX模型文件及預(yù)測職業(yè)能力目標(biāo)01知識(shí)目標(biāo)技能目標(biāo)職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于Pytorch的YOLOv5模型訓(xùn)練及轉(zhuǎn)換此任務(wù)要求讀者完成基于PyTorch框架和YOLOv5開源項(xiàng)目訓(xùn)練并生成模型并將Pytorch模型文件轉(zhuǎn)onnx模型文件,任務(wù)完成后可使用訓(xùn)練好的YOLOv5模型進(jìn)行目標(biāo)檢測。任務(wù)描述任務(wù)要求使用git下載項(xiàng)目源碼安裝所需的依賴包使用訓(xùn)練腳本進(jìn)行訓(xùn)練驗(yàn)證訓(xùn)練好的模型任務(wù)描述與要求02職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于Pytorch的YOLOv5模型訓(xùn)練及轉(zhuǎn)換任務(wù)分析模型訓(xùn)練開始之前需要做哪些準(zhǔn)備工作?模型訓(xùn)練過程中涉及到哪些參數(shù)?任務(wù)分析與計(jì)劃03任務(wù)計(jì)劃表項(xiàng)目名稱基于Pytorch(yolov5)目標(biāo)檢測模型部署任務(wù)名稱基于Pytorch的YOLOv5模型訓(xùn)練及轉(zhuǎn)換計(jì)劃方式自主設(shè)計(jì)計(jì)劃要求請(qǐng)用10個(gè)計(jì)劃步驟來完整描述出如何完成本次任務(wù)序號(hào)任務(wù)計(jì)劃1
2
3
4
5
6
78通過上面的思考,你是否對(duì)本任務(wù)要完成的工作有所了解?讓我們一起來制訂完成本次任務(wù)的實(shí)施計(jì)劃吧!任務(wù)分析與計(jì)劃03職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于Pytorch的YOLOv5模型訓(xùn)練及轉(zhuǎn)換PyTorch與YOLOv5簡介204知識(shí)儲(chǔ)備目標(biāo)檢測簡介1Pytorch轉(zhuǎn)onnx的意義433COCO數(shù)據(jù)集目標(biāo)檢測是在給定的圖片中精確找到物體所在位置,并標(biāo)注出物體的類別。04目標(biāo)檢測簡介目標(biāo)檢測任務(wù)的挑戰(zhàn)在什么地方呢?04目標(biāo)檢測簡介目標(biāo)物在圖像中的屬性04目標(biāo)檢測簡介多目標(biāo)示例04目標(biāo)檢測簡介近幾年來,目標(biāo)檢測算法取得了很大的突破;隨著卷積神經(jīng)網(wǎng)絡(luò)的廣泛使用,許多目標(biāo)檢測算法已與卷積神經(jīng)網(wǎng)絡(luò)結(jié)合起來;根據(jù)目標(biāo)檢測算法的工作流程,可以將目標(biāo)檢測算法分為雙步法(TwoStage)和單步法(OneStage)。04目標(biāo)檢測簡介兩步法(TwoStage)確定那些更有可能出現(xiàn)目標(biāo)的位置,再有針對(duì)性的用CNN進(jìn)行檢測;通過啟發(fā)式方法或CNN網(wǎng)絡(luò)產(chǎn)生一系列稀疏的候選框(RegionProposal),然后對(duì)這些候選框進(jìn)行分類或者回歸;兩步法的優(yōu)勢是準(zhǔn)確度高,但是運(yùn)行速度較慢;兩步法的代表算法有R-CNN、FastR-CNN、FasterR-CNN等。04目標(biāo)檢測簡介04目標(biāo)檢測簡介一步法(OneStage)均勻地在圖片的不同位置進(jìn)行密集抽樣,利用CNN提取特征后,直接在提取的特征上進(jìn)行分類或者回歸,整個(gè)過程只需要一步;所以一步法的優(yōu)勢是速度快,但是模型精確度相對(duì)較低;一步法的代表算法有YOLO和SSD等;目前廣泛應(yīng)用于目標(biāo)檢測的算法是基于YOLO目標(biāo)檢測算法的YOLOv5和YOLOX。04目標(biāo)檢測簡介PyTorch與YOLOv5簡介204知識(shí)儲(chǔ)備目標(biāo)檢測簡介1Pytorch轉(zhuǎn)onnx的意義433COCO數(shù)據(jù)集04PyTorch與Torch基于Torch的Python開源機(jī)器學(xué)習(xí)庫用于自然語言處理等應(yīng)用程序支持GPU加速、動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)等功能兩個(gè)高級(jí)功能:強(qiáng)大的GPU加速的張量計(jì)算(如Numpy)自動(dòng)求導(dǎo)系統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)04PyTorch與TorchTorch是一個(gè)有大量機(jī)器學(xué)習(xí)算法支持的科學(xué)計(jì)算框架,其誕生已有十年之久,但是真正起勢得益于Facebook開源了大量Torch的深度學(xué)習(xí)模塊和擴(kuò)展;Torch的特點(diǎn)在于特別靈活,是以Lua為編程語言的框架。Torch簡潔速度快社區(qū)活躍易用PyTorch特性04PyTorch靈活性不以速度為代價(jià)。在許多評(píng)測中,PyTorch的速度表現(xiàn)勝過TensorFlow和Keras等框架。PyTorch的面向?qū)ο蟮慕涌谠O(shè)計(jì)來源于Torch,而Torch的接口設(shè)計(jì)以靈活易用而著稱,Keras作者最初就是受Torch的啟發(fā)才開發(fā)了Keras。PyTorch的設(shè)計(jì)最符合人們的思維,即所思即所得。PyTorch的設(shè)計(jì)追求最少的封裝,盡量避免重復(fù)造輪子。PyTorch的源碼只有TensorFlow的十分之一左右,簡潔直觀,十分易于閱讀。PyTorch提供了完整的文檔,循序漸進(jìn)的指南,作者親自維護(hù)的論壇供用戶交流和求教問題。Facebook人工智能研究院對(duì)PyTorch提供了強(qiáng)力支持,以確保PyTorch獲得持續(xù)的開發(fā)更新。04導(dǎo)入PyTorch包Python中導(dǎo)入PyTorch依賴庫04YOLO算法簡介YOLO將對(duì)象檢測重新定義為一個(gè)回歸問題。它將單個(gè)卷積神經(jīng)網(wǎng)絡(luò)(CNN)應(yīng)用于整個(gè)圖像,將圖像分成網(wǎng)格,并預(yù)測每個(gè)網(wǎng)格的類概率和邊界框。YOLO非???。由于檢測問題是一個(gè)回歸問題,所以不需要復(fù)雜的管道。它比“R-CNN”快1000倍,比“FastR-CNN”快100倍。它能夠處理實(shí)時(shí)視頻流,延遲小于25毫秒。它的精度是以前實(shí)時(shí)系統(tǒng)的兩倍多。同樣重要的是,YOLO遵循的是“端到端深度學(xué)習(xí)”的實(shí)踐。04YOLO目標(biāo)檢測算法YOLOv3對(duì)比其他算法04YOLO目標(biāo)檢測算法YOLO:YouOnlyLookOnce04YOLO目標(biāo)檢測算法YOLO是一種基于深度卷積神經(jīng)網(wǎng)絡(luò)的物體目標(biāo)檢測算法;YOLO網(wǎng)格中的每個(gè)單元格負(fù)責(zé)檢測自身內(nèi)部的對(duì)象;YOLOv5-X、YOLOX-X:mAP>50%,60fps,COCO-640×640。04YOLO目標(biāo)檢測算法YOLO的第五代改進(jìn)算法使用PyTorch框架,使用方便P模型權(quán)重文件可轉(zhuǎn)化為ONXX格式以適配安卓可轉(zhuǎn)換為Opencv的使用格式可通過CoreML轉(zhuǎn)化為IOS格式部署至手機(jī)應(yīng)用端YOLOv504YOLO目標(biāo)檢測算法網(wǎng)絡(luò)的容量越大->參數(shù)越多->準(zhǔn)確率越高相同硬件配置的條件下,訓(xùn)練參數(shù)越多的網(wǎng)絡(luò)需要越多的時(shí)間YOLOv5的四種網(wǎng)絡(luò)結(jié)構(gòu)四種YOLOv5網(wǎng)絡(luò)結(jié)構(gòu)中,移動(dòng)端的部署建議使用的網(wǎng)絡(luò)為YOLOv5sYOLOv5m云平臺(tái)端的部署建議使用的網(wǎng)絡(luò)為YOLOv5lYOLOv5x04YOLO目標(biāo)檢測算法YOLOv5的四種網(wǎng)絡(luò)結(jié)構(gòu)PyTorch與YOLOv5簡介204知識(shí)儲(chǔ)備目標(biāo)檢測簡介1Pytorch轉(zhuǎn)onnx的意義433COCO數(shù)據(jù)集04COCO數(shù)據(jù)集的由來COCO的全稱是MicrosoftCommonObjectsinContext(場景中的常見物體)起源于微軟于2014年出資標(biāo)注的MicrosoftCOCO數(shù)據(jù)集ImageNet計(jì)算機(jī)視覺競賽停辦后,COCO競賽就成為目標(biāo)識(shí)別和檢測等領(lǐng)域的一個(gè)最權(quán)威、最重要的標(biāo)桿。04COCO數(shù)據(jù)集簡介COCO數(shù)據(jù)集是一個(gè)大型目標(biāo)分類(識(shí)別)、檢測、分割、語義標(biāo)注數(shù)據(jù)集。這個(gè)數(shù)據(jù)集以場景理解(ScenceUnderstanding)為目標(biāo),主要從復(fù)雜的日常場景中截取,圖像中的目標(biāo)通過精確的分割進(jìn)行位置的標(biāo)定。COCO是目前為止有語義分割的最大數(shù)據(jù)集:80個(gè)類別;超過33萬張圖片;其中20萬張有標(biāo)注,整個(gè)數(shù)據(jù)集中個(gè)體的數(shù)目超過150萬個(gè)。04COCO數(shù)據(jù)集簡介COCO數(shù)據(jù)集中的部分圖片如右圖所示。COCO數(shù)據(jù)集中標(biāo)注類別包含:人:1類交通工具:8類,自行車,汽車等公路常見:5類,信號(hào)燈,停車標(biāo)志等動(dòng)物:10類,貓狗等攜帶物品:5類,背包,雨傘等運(yùn)動(dòng)器材:10類,飛盤,滑雪板,網(wǎng)球拍等。廚房餐具:7類,瓶子,勺子等水果及食品:10類家庭用品:7類,椅子、床,電視等家庭常見物品:17類,筆記本,鼠標(biāo),遙控器等PyTorch與YOLOv5簡介204知識(shí)儲(chǔ)備目標(biāo)檢測簡介1Pytorch轉(zhuǎn)onnx的意義433COCO數(shù)據(jù)集Pytorch轉(zhuǎn)onnx的意義04一般來說轉(zhuǎn)ONNX只是一個(gè)手段,在之后得到ONNX模型后還需要再將它做轉(zhuǎn)換,比如:轉(zhuǎn)換到TensorRT上完成部署,或者有的人多加一步,從ONNX先轉(zhuǎn)換到caffe,再從caffe到tensorRT。原因是Caffe對(duì)tensorRT更為友好。轉(zhuǎn)換成我們邊緣端需要用到的rknn模型,完成部署等各類情況因此在轉(zhuǎn)ONNX工作開展之前,首先必須明確目標(biāo)后端。ONNX只是一個(gè)格式,就和json一樣。只要你滿足一定的規(guī)則,都算是合法的,因此單純從Pytorch轉(zhuǎn)成一個(gè)ONNX文件很簡單。但是不同后端設(shè)備接受的onnx是不一樣的。職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于Pytorch的YOLOv5模型訓(xùn)練及轉(zhuǎn)換05任務(wù)實(shí)施基于YOLOv5進(jìn)行模型訓(xùn)練1預(yù)測模型2Pytorch模型文件轉(zhuǎn)onnx模型文件1131133基于YOLOv5進(jìn)行模型訓(xùn)練05下載項(xiàng)目源碼基于YOLOv5進(jìn)行模型訓(xùn)練05安裝所需要的依賴包基于YOLOv5進(jìn)行模型訓(xùn)練05驗(yàn)證PyTorch包基于YOLOv5進(jìn)行模型訓(xùn)練05準(zhǔn)備數(shù)據(jù)集05模型訓(xùn)練(1)基于YOLOv5進(jìn)行模型訓(xùn)練05模型訓(xùn)練(2)基于YOLOv5進(jìn)行模型訓(xùn)練05基于YOLOv5進(jìn)行模型訓(xùn)練利用以下腳本顯示相關(guān)圖片,只需要修改圖片路徑即可:img=cv2.imread(圖片路徑)frommatplotlibimportpyplotasplt
importnumpyasnp
importcv2
img=cv2.imread('yolov5/runs/detect/exp/bus.jpg')
img2=img[:,:,::-1]#列表數(shù)組左右翻轉(zhuǎn),實(shí)現(xiàn)BGR賺RGB
plt.figure(figsize=(20,20))
plt.imshow(img2)05任務(wù)實(shí)施基于YOLOv5進(jìn)行模型訓(xùn)練1預(yù)測模型2Pytorch模型文件轉(zhuǎn)onnx模型文件113113305預(yù)測模型yolov5項(xiàng)目有提供模型檢測腳本detect.py,利用這個(gè)腳本可以對(duì)自己訓(xùn)練的模型文件進(jìn)行預(yù)測,默認(rèn)會(huì)將預(yù)測結(jié)果輸出到y(tǒng)olov5/runs/detect/。05預(yù)測模型根據(jù)模型訓(xùn)練出來的結(jié)果路徑,指定權(quán)重weights輸出結(jié)果如下:05預(yù)測模型檢測前后效果對(duì)比05任務(wù)實(shí)施基于YOLOv5進(jìn)行模型訓(xùn)練1預(yù)測模型2Pytorch模型文件轉(zhuǎn)onnx模型文件113113305Pytorch模型文件轉(zhuǎn)onnx模型文件在做模型文件轉(zhuǎn)換之前,需要搭建環(huán)境,安裝所需的Python依賴包,手動(dòng)安裝以下依賴包:coremltools==4.1
onnx==1.10.1
scikit-learn==0.19.2
onnx-simplifier==0.3.6在命令行中,安裝依賴包可以寫一個(gè)或多個(gè)包同時(shí)安裝例如:!sudopipinstallcoremltools==4.1onnx==1.10.1scikit-learn==0.19.2onnx-simplifier==0.3.6-i/simple05Pytorch模型文件轉(zhuǎn)onnx模型文件在上一節(jié),準(zhǔn)備好的Pytorch模型best.pt,具體路徑,比如:yolov5/runs/train/exp3/weights/best.pt,轉(zhuǎn)換后的onnx模型默認(rèn)是在Pytorch的模型路徑里面,比如:yolov5/runs/train/exp3/weights/best.onnx05Pytorch模型文件轉(zhuǎn)onnx模型文件指定模型路徑,利用以下命令進(jìn)行轉(zhuǎn)換:python3path/to/export.py--weights$m.pt--img640--batch-size1輸出結(jié)果為:05Pytorch模型文件轉(zhuǎn)onnx模型文件指定模型路徑,利用以下命令進(jìn)行轉(zhuǎn)換:python3path/to/export.py--weights$m.pt--img640--batch-size1輸出結(jié)果為:05Pytorch模型文件轉(zhuǎn)onnx模型文件利用預(yù)測腳本detect.py指定onnx模型文件路徑,和需要預(yù)測的圖片源,結(jié)果默認(rèn)輸出到y(tǒng)olov5/runs/detect/exp*目錄下面。由于Pytorch模型文件轉(zhuǎn)出來的onnx模型文件默認(rèn)輸入為640*640圖片源,所以需要把圖片先轉(zhuǎn)成640*640的圖片后,再進(jìn)行使用05Pytorch模型文件轉(zhuǎn)onnx模型文件轉(zhuǎn)換出來的原圖:預(yù)測模型命令:!pythonyolov5/detect.py--weightsyolov5/runs/train/exp/weights/best.onnx--sourceyolov5/data/images/zidane2.jpg--projectyolov5/runs/detect結(jié)果為:職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于Pytorch的YOLOv5模型訓(xùn)練及轉(zhuǎn)換任務(wù)檢查與評(píng)價(jià)061、請(qǐng)參照評(píng)價(jià)標(biāo)準(zhǔn)完成自評(píng)和對(duì)其他小組的互評(píng)。2、各組請(qǐng)代表分析本組任務(wù)實(shí)施經(jīng)驗(yàn)。序號(hào)評(píng)價(jià)內(nèi)容評(píng)價(jià)標(biāo)準(zhǔn)分值得分1知識(shí)運(yùn)用(20%)掌握相關(guān)理論知識(shí),理解本次任務(wù)要求,制定詳細(xì)計(jì)劃,計(jì)劃條理清晰,邏輯正確(20分)20分
理解相關(guān)理論知識(shí),能根據(jù)本次任務(wù)要求、制定合理計(jì)劃(15分)了解相關(guān)理論知識(shí),有制定計(jì)劃(10分)無制定計(jì)劃(0分)2專業(yè)技能(40%)完成Pytorch-yolov5的模型訓(xùn)練,預(yù)測自己訓(xùn)練的模型以及將Pytorch模型文件轉(zhuǎn)onnx模型文件。(40分)40分
完成Pytorch-yolov5的模型訓(xùn)練,預(yù)測自己訓(xùn)練的模型。(30分)完成Pytorch-yolov5的模型訓(xùn)練。(20分)完成環(huán)境的配置。(10分)沒有完成Pytorch-yolov5的模型訓(xùn)練。(0分)3核心素養(yǎng)(20%)具有良好的自主學(xué)習(xí)能力、分析解決問題的能力、整個(gè)任務(wù)過程中有指導(dǎo)他人(20分)20分
具有較好的學(xué)習(xí)能力和分析解決問題的能力,任務(wù)過程中無指導(dǎo)他人(15分)能夠主動(dòng)學(xué)習(xí)并收集信息,有請(qǐng)教他人進(jìn)行解決問題的能力(10分)不主動(dòng)學(xué)習(xí)(0分)4課堂紀(jì)律(20%)設(shè)備無損壞、設(shè)備擺放整齊、工位區(qū)域內(nèi)保持整潔、無干擾課堂秩序(20分)20分
設(shè)備無損壞、無干擾課堂秩序(15分)無干擾課堂秩序(10分)干擾課堂秩序(0分)總得分職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于Pytorch的YOLOv5模型訓(xùn)練及轉(zhuǎn)換任務(wù)小結(jié)07職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于Pytorch的YOLOv5模型訓(xùn)練及轉(zhuǎn)換任務(wù)拓展08嘗試調(diào)整該任務(wù)中的模型訓(xùn)練參數(shù)并重新訓(xùn)練,提升模型的識(shí)別精度。謝謝大家項(xiàng)目四基于Pytorch(YOLOv5)目標(biāo)檢測模型部署邊緣智能計(jì)算應(yīng)用任務(wù)二ONNX模型文件轉(zhuǎn)RKNN模型文件邊緣智能計(jì)算應(yīng)用職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二ONNX模型文件轉(zhuǎn)RKNN模型文件了解轉(zhuǎn)成rknn模型的意義了解rknn的相關(guān)知識(shí)掌握如何將onnx模型文件轉(zhuǎn)成rknn模型文件掌握如何預(yù)測rknn模型文件職業(yè)能力目標(biāo)01知識(shí)目標(biāo)技能目標(biāo)職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二ONNX模型文件轉(zhuǎn)RKNN模型文件此任務(wù)要求讀者了解轉(zhuǎn)成rknn模型的意義,搭建onnx模型文件轉(zhuǎn)rknn模型文件的環(huán)境,將onnx模型文件轉(zhuǎn)換rknn模型文件,預(yù)測rknn模型文件并部署到AI邊緣開發(fā)板。任務(wù)描述任務(wù)要求創(chuàng)建模型轉(zhuǎn)換所需的虛擬環(huán)境配置腳本參數(shù)進(jìn)行模型轉(zhuǎn)換驗(yàn)證RKNN模型RKNN模型部署到邊緣端任務(wù)描述與要求02職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二ONNX模型文件轉(zhuǎn)RKNN模型文件任務(wù)分析onnx模型文件轉(zhuǎn)成rknn模型文件開始之前需要做哪些準(zhǔn)備工作?預(yù)測rknn模型文件過程中涉及到哪些參數(shù)?任務(wù)分析與計(jì)劃03任務(wù)計(jì)劃表項(xiàng)目名稱基于Pytorch(yolov5)目標(biāo)檢測模型部署任務(wù)名稱ONNX模型文件轉(zhuǎn)RKNN模型文件計(jì)劃方式自主設(shè)計(jì)計(jì)劃要求請(qǐng)用8個(gè)計(jì)劃步驟來完整描述出如何完成本次任務(wù)序號(hào)任務(wù)計(jì)劃1
2
3
4
5
6
78通過上面的思考,你是否對(duì)本任務(wù)要完成的工作有所了解?讓我們一起來制訂完成本次任務(wù)的實(shí)施計(jì)劃吧!任務(wù)分析與計(jì)劃03職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二ONNX模型文件轉(zhuǎn)RKNN模型文件轉(zhuǎn)rknn模型文件的意義204知識(shí)儲(chǔ)備ONNX簡介133模型部署邊緣計(jì)算404ONNX簡介OpenNeuralNetworkExchange(ONNX,開放神經(jīng)網(wǎng)絡(luò)交換)格式,是一個(gè)用于表示深度學(xué)習(xí)模型的標(biāo)準(zhǔn),可使模型在不同框架之間進(jìn)行轉(zhuǎn)移。04ONNX簡介ONNX是一種針對(duì)機(jī)器學(xué)習(xí)所設(shè)計(jì)的開放式的文件格式,用于存儲(chǔ)訓(xùn)練好的模型。它使得不同的人工智能框架(如Pytorch,MXNet)可以采用相同格式存儲(chǔ)模型數(shù)據(jù)并交互。04ONNX簡介ONNX的規(guī)范及代碼主要由微軟,亞馬遜,F(xiàn)acebook和IBM等公司共同開發(fā),以開放源代碼的方式托管在Github上。04ONNX簡介目前官方支持加載ONNX模型并進(jìn)行推理的深度學(xué)習(xí)框架有:Caffe2,PyTorch,MXNet,ML.NET,Tensor和MicrosoftCNTK,并且TensorFlow也非官方的支持ONNX。04ONNX簡介假設(shè)一個(gè)場景:現(xiàn)在某組織因?yàn)橹饕_發(fā)用TensorFlow為基礎(chǔ)的框架,現(xiàn)在有一個(gè)深度算法,需要將其部署在移動(dòng)設(shè)備上,以觀測變現(xiàn)。傳統(tǒng)地我們需要用caffe2重新將模型寫好,然后再訓(xùn)練參數(shù);試想下這將是一個(gè)多么耗時(shí)耗力的過程。04ONNX簡介此時(shí),ONNX便應(yīng)運(yùn)而生,Caffe2,PyTorch,MicrosoftCognitiveToolkit,ApacheMXNet等主流框架都對(duì)ONNX有著不同程度的支持。這就便于了我們的算法及模型在不同的框架之間的遷移。04ONNX簡介開放式神經(jīng)網(wǎng)絡(luò)交換(ONNX)是邁向開放式生態(tài)系統(tǒng)的第一步,它使AI開發(fā)人員能夠隨著項(xiàng)目的發(fā)展選擇合適的工具04ONNX簡介
ONNX為AI模型提供開源格式。它定義了可擴(kuò)展的計(jì)算圖模型,以及內(nèi)置運(yùn)算符和標(biāo)準(zhǔn)數(shù)據(jù)類型的定義。04ONNX簡介ONNX解釋計(jì)算圖的可移植,它使用graph的序列化格式。它不一定是框架選擇在內(nèi)部使用和操作計(jì)算的形式。例如,如果在優(yōu)化過程中操作更有效,則實(shí)現(xiàn)可以在存儲(chǔ)器中以不同方式表示模型。轉(zhuǎn)rknn模型文件的意義204知識(shí)儲(chǔ)備ONNX簡介133模型部署邊緣計(jì)算404轉(zhuǎn)rknn模型文件的意義上一節(jié),有提到,onnx模型文件格式是只是一個(gè)過渡格式,其主要目的是將其他框架的模型文件轉(zhuǎn)成目標(biāo)模型文件。04轉(zhuǎn)rknn模型文件的意義在這里就是要將Pytorch模型文件轉(zhuǎn)換成rknn這個(gè)目標(biāo)模型文件。而轉(zhuǎn)成rknn模型文件的意義在于與AI邊緣計(jì)算終端結(jié)合04轉(zhuǎn)rknn模型文件的意義將rknn模型文件部署到終端上,利用AI邊緣終端的高速NPU處理能力來進(jìn)行推理,進(jìn)而實(shí)現(xiàn)實(shí)際場景化的應(yīng)用。轉(zhuǎn)rknn模型文件的意義204知識(shí)儲(chǔ)備ONNX簡介133模型部署邊緣計(jì)算404模型部署模型訓(xùn)練重點(diǎn)關(guān)注的是如何通過訓(xùn)練策略來得到一個(gè)性能更好的模型,其過程似乎包含著各種“玄學(xué)”,被戲稱為“煉丹”。整個(gè)流程包含從訓(xùn)練樣本的獲?。ò〝?shù)據(jù)采集與標(biāo)注),模型結(jié)構(gòu)的確定,損失函數(shù)和評(píng)價(jià)指標(biāo)的確定,到模型參數(shù)的訓(xùn)練,這部分更多是業(yè)務(wù)方去承接相關(guān)工作。一旦“煉丹”完成(即訓(xùn)練得到了一個(gè)指標(biāo)不錯(cuò)的模型),如何將這顆“丹藥”賦能到實(shí)際業(yè)務(wù)中,充分發(fā)揮其能力,這就是部署方需要承接的工作。04模型部署云端部署常見的模式是模型部署在云端服務(wù)器,用戶通過網(wǎng)頁訪問或者API接口調(diào)用等形式向云端服務(wù)器發(fā)出請(qǐng)求,云端收到請(qǐng)求后處理并返回結(jié)果。邊緣部署則主要用于嵌入式設(shè)備,主要通過將模型打包封裝到SDK,集成到嵌入式設(shè)備,數(shù)據(jù)的處理和模型推理都在終端設(shè)備上執(zhí)行。如何對(duì)應(yīng)兩種場景去合理部署我們的模型呢?04模型部署針對(duì)上面提到的兩種場景,分別有兩種不同的部署方案,Service部署和SDK部署。04模型部署Service部署:主要用于中心服務(wù)器云端部署,一般直接以訓(xùn)練的引擎庫作為推理服務(wù)模式。04模型部署SDK部署:主要用于嵌入式端部署場景,以C++等語言實(shí)現(xiàn)一套高效的前后處理和推理引擎庫(高效推理模式下的Operation/Layer/Module的實(shí)現(xiàn)),用于提供高性能推理能力。此種方式一般需要考慮模型轉(zhuǎn)換(動(dòng)態(tài)圖靜態(tài)化)、模型聯(lián)合編譯等進(jìn)行深度優(yōu)化。04模型部署SDK部署與Service部署的對(duì)比04模型部署部署的核心目標(biāo)是合理把控成本、功耗、性價(jià)比三大要素。成本問題是部署硬件的重中之重,AI模型部署到硬件上的成本將極大限制用戶的業(yè)務(wù)承受能力。成本問題主要聚焦于芯片的選型,比如,對(duì)比寒武紀(jì)MLU220和MLU270,MLU270主要用作數(shù)據(jù)中心級(jí)的加速卡,其算力和功耗都相對(duì)于邊緣端的人工智能加速卡MLU220要低。至于Nvida推出的Jetson和TeslaT4也是類似思路,TeslaT4是主打數(shù)據(jù)中心的推理加速卡,而Jetson則是嵌入式設(shè)備的加速卡。轉(zhuǎn)rknn模型文件的意義204知識(shí)儲(chǔ)備ONNX簡介133模型部署邊緣計(jì)算4邊緣計(jì)算04思考一下,邊緣計(jì)算與云計(jì)算相比優(yōu)勢在哪里?邊緣計(jì)算是將計(jì)算任務(wù)部署到靠近物或數(shù)據(jù)源頭的網(wǎng)絡(luò)邊緣側(cè)的設(shè)備上,融合網(wǎng)絡(luò)、計(jì)算、存儲(chǔ)、應(yīng)用核心能力的分布式開放平臺(tái),就近提供邊緣智能服務(wù)。邊緣網(wǎng)關(guān)04邊緣網(wǎng)關(guān)是部署在網(wǎng)絡(luò)邊緣側(cè)的網(wǎng)關(guān),通過網(wǎng)絡(luò)聯(lián)接、協(xié)議轉(zhuǎn)換等功能聯(lián)接物理和數(shù)字世界,提供輕量化的聯(lián)接管理、實(shí)時(shí)數(shù)據(jù)分析及應(yīng)用管理功能。數(shù)據(jù)優(yōu)化敏捷連接實(shí)時(shí)響應(yīng)智能分析減少流量邊緣網(wǎng)關(guān)擁有強(qiáng)勁的邊緣計(jì)算能力職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二ONNX模型文件轉(zhuǎn)RKNN模型文件05任務(wù)實(shí)施onnx模型文件轉(zhuǎn)rknn模型文件1部署到AI邊緣開發(fā)板2onnx模型文件轉(zhuǎn)rknn模型文件05搭建環(huán)境在RK3399Pro板子上,官方有提供rknn_toolkit-1.7.1-cp36-cp36m-linux_x86_64.whl的pip安裝包;這個(gè)軟件包,就是用來轉(zhuǎn)換模型,加載模型,推理模型等等,但目前Linux版本只能支持python3.6的版本,最新安裝包的版本,可以根據(jù)官方地址進(jìn)行下載/rockchip-linux/rknn-toolkit/releasesonnx模型文件轉(zhuǎn)rknn模型文件05搭建環(huán)境在虛擬環(huán)境下,安裝依賴包,轉(zhuǎn)換成rknn模型主要依賴一下幾個(gè)包:? rknn_toolkit-1.7.1-cp36-cp36m-linux_x86_64.whl? torch==1.9.0? torchaudio==0.9.0? torchvision==0.10.0? tensorflow==2.1.0? numpy==1.19.5onnx模型文件轉(zhuǎn)rknn模型文件05轉(zhuǎn)換模型利用rknn_toolkit工具將onnx模型文件轉(zhuǎn)換成rknn模型文件,基本轉(zhuǎn)換流程為:onnx模型文件轉(zhuǎn)rknn模型文件05轉(zhuǎn)換模型為了后面部署方便,把上一節(jié)的onnx模型文件拷貝到y(tǒng)olov5/rknn/models/下面,然后再進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換完成后,將yolov5/rknn/目錄打包下來,上傳到開發(fā)板上importosimportsysimportnumpyasnpfromrknn.apiimportRKNN初始化rknnSDK環(huán)境rknn=RKNN(verbose=True,verbose_file=None)? verbose指定是否要在屏幕上打印詳細(xì)日志信息;默認(rèn)False不打印,? verbose_file調(diào)試信息指定轉(zhuǎn)儲(chǔ)到文件路徑,默認(rèn)為None。如果設(shè)置了verbose_file參數(shù),且verbose參數(shù)值為True,日志信息還將寫到該參數(shù)指定的文件中onnx模型文件轉(zhuǎn)rknn模型文件05轉(zhuǎn)換模型調(diào)用config接口設(shè)置模型的預(yù)處理參數(shù)rknn.config(reorder_channel='012',
mean_values=[[0,0,0]],
std_values=[[255,255,255]],
optimization_level=3,
target_platform='rk3399pro',
output_optimize=1,
quantize_input_node=True)onnx模型文件轉(zhuǎn)rknn模型文件05轉(zhuǎn)換模型調(diào)用load_onnx接口,加載原始的onnx模型文件ret=rknn.load_onnx(model='./yolov5/rknn/models/best.onnx',outputs=['378','439','500'])onnx模型文件轉(zhuǎn)rknn模型文件05轉(zhuǎn)換模型調(diào)用build接口,依照加載的模型結(jié)構(gòu)及權(quán)重?cái)?shù)據(jù),構(gòu)建對(duì)應(yīng)的RKNN模型。ret=rknn.build(do_quantization=True,dataset=‘./rknn/dataset.txt’,pre_compile=False,rknn_batch_size=1)onnx模型文件轉(zhuǎn)rknn模型文件05轉(zhuǎn)換模型調(diào)用export_rknn接口,將RKNN模型文件保存到指定文件路徑中(.rknn后綴)。ret=rknn.export_rknn('./rknn/models/best.rknn')onnx模型文件轉(zhuǎn)rknn模型文件05運(yùn)行RKNN模型運(yùn)行RKNN模型時(shí),用戶不需要設(shè)置模型預(yù)處理參數(shù),也不需要構(gòu)建RKNN模型其使用流程如右圖所示:onnx模型文件轉(zhuǎn)rknn模型文件05創(chuàng)建RKNN對(duì)象,以初始化RKNNSDK環(huán)境(前面已經(jīng)有創(chuàng)建過,可以忽略,具體說明參照2.2.1)importosimportsysimportnumpyasnpfromrknn.apiimportRKNNrknn=RKNN(verbose=True)調(diào)用load_rknn接口,加載RKNN模型,參數(shù)load_model_in_npu通常默認(rèn)就行ret=rknn.load_rknn(path,load_model_in_npu=False)onnx模型文件轉(zhuǎn)rknn模型文件05預(yù)編譯rknn模型離線預(yù)編譯(推薦)在線預(yù)編譯(不推薦)同樣,RKNNToolkit也提供在線編譯的接口:export_rknn_precompile_model。使用該接口,可以將普通RKNN模型轉(zhuǎn)成預(yù)編譯模型,但這個(gè)模型需要有硬件的配合。構(gòu)建RKNN模型時(shí),可以指定預(yù)編譯選項(xiàng)以導(dǎo)出預(yù)編譯模型,這被稱為離線編譯。離線預(yù)編譯在之前有介紹過,就是在轉(zhuǎn)換模型的時(shí)候,構(gòu)建模型的接口上,加參數(shù)pre_compile=Trueonnx模型文件轉(zhuǎn)rknn模型文件05預(yù)測rknn模型利用預(yù)測腳本rknn_detect_yolov5.py對(duì)生成的rknn模型進(jìn)行預(yù)測。如果在模擬器上(本機(jī))進(jìn)行預(yù)測,則導(dǎo)出的模型時(shí),不能開啟預(yù)編譯(pre_compile)的開關(guān),否則無法進(jìn)行預(yù)測,預(yù)編譯模型只能在硬件平臺(tái)進(jìn)行預(yù)測。根據(jù)實(shí)際轉(zhuǎn)換后的模型,修改以下內(nèi)容,進(jìn)行預(yù)測:修改腳本中,自己的模型路徑修改腳本中,要檢測的圖片路徑設(shè)置檢測結(jié)果保存的圖片路徑注意:
每一次運(yùn)行預(yù)測模型時(shí),需要重啟一下內(nèi)核,以免緩存干擾05任務(wù)實(shí)施onnx模型文件轉(zhuǎn)rknn模型文件1部署到AI邊緣開發(fā)板2部署到AI邊緣開發(fā)板05部署步驟如下:(1)將模型(比如:yolov5.rknn),預(yù)測腳本(rknn_detect_yolov5.py),以及要測試的圖片下載到本地;(2)在AI邊緣開發(fā)板上,創(chuàng)建一個(gè)項(xiàng)目目錄(比如:test_rknn),并將rknn_detect_yolov5.py、./models/best.rknn、bus.jpg上傳至該目錄;mkdirtest_rknn為了提高模型的加載速度,建議采用預(yù)編譯后的模型(非預(yù)編譯模型也可以),部署到開發(fā)板當(dāng)中。部署到AI邊緣開發(fā)板05(3)修改rknn_detect_yolov5.py腳本,將腳本中,模型路徑,需要檢測的圖片路徑,結(jié)果圖片保存路徑改為當(dāng)前目錄;(4)將模型,預(yù)測腳本,測試圖片上傳到開發(fā)板項(xiàng)目目錄中,運(yùn)行命令sudopython3rknn_detect_yolov5.py即可;部署到AI邊緣開發(fā)板05(5)查看使用NPU進(jìn)行加速的RKNN模型的推理結(jié)果。職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二ONNX模型文件轉(zhuǎn)RKNN模型文件任務(wù)檢查與評(píng)價(jià)061、請(qǐng)參照評(píng)價(jià)標(biāo)準(zhǔn)完成自評(píng)和對(duì)其他小組的互評(píng)。2、各組請(qǐng)代表分析本組任務(wù)實(shí)施經(jīng)驗(yàn)。序號(hào)評(píng)價(jià)內(nèi)容評(píng)價(jià)標(biāo)準(zhǔn)分值得分1知識(shí)運(yùn)用(20%)掌握相關(guān)理論知識(shí),理解本次任務(wù)要求,制定詳細(xì)計(jì)劃,計(jì)劃條理清晰,邏輯正確(20分)20分
理解相關(guān)理論知識(shí),能根據(jù)本次任務(wù)要求、制定合理計(jì)劃(15分)了解相關(guān)理論知識(shí),有制定計(jì)劃(10分)無制定計(jì)劃(0分)2專業(yè)技能(40%)完成onnx模型文件轉(zhuǎn)rknn模型文件和部署到AI邊緣開發(fā)板。(40分)40分
完成onnx模型文件轉(zhuǎn)rknn模型文件。(30分)完成構(gòu)建RKNN模型。(20分)完成環(huán)境的配置。(10分)沒有完成任務(wù)。(0分)3核心素養(yǎng)(20%)具有良好的自主學(xué)習(xí)能力、分析解決問題的能力、整個(gè)任務(wù)過程中有指導(dǎo)他人(20分)20分
具有較好的學(xué)習(xí)能力和分析解決問題的能力,任務(wù)過程中無指導(dǎo)他人(15分)能夠主動(dòng)學(xué)習(xí)并收集信息,有請(qǐng)教他人進(jìn)行解決問題的能力(10分)不主動(dòng)學(xué)習(xí)(0分)4課堂紀(jì)律(20%)設(shè)備無損壞、設(shè)備擺放整齊、工位區(qū)域內(nèi)保持整潔、無干擾課堂秩序(20分)20分
設(shè)備無損壞、無干擾課堂秩序(15分)無干擾課堂秩序(10分)干擾課堂秩序(0分)總得分職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二ONNX模型文件轉(zhuǎn)RKNN模型文件任務(wù)小結(jié)07職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一基于Pytorch的YOLOv5模型訓(xùn)練及轉(zhuǎn)換任務(wù)拓展08修改預(yù)測腳本,使其能識(shí)別視頻流中的物體。謝謝大家項(xiàng)目四基于Pytorch(YOLOv5)目標(biāo)檢測模型部署邊緣智能計(jì)算應(yīng)用任務(wù)三基于YOLOv5的實(shí)時(shí)檢測模型部署邊緣智能計(jì)算應(yīng)用職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三基于YOLOv5的實(shí)時(shí)檢測模型部署了解rknn模型部署流程。能夠使用RKNN格式的模型進(jìn)行推理;能夠完成推理后的圖片處理并輸出結(jié)果;能夠使用線程的方式實(shí)現(xiàn)模型的實(shí)時(shí)檢測;能夠在邊緣網(wǎng)關(guān)完成應(yīng)用的運(yùn)行與調(diào)試。職業(yè)能力目標(biāo)01知識(shí)目標(biāo)技能目標(biāo)職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三基于YOLOv5的實(shí)時(shí)檢測模型部署此任務(wù)在邊緣端對(duì)RKNN格式的模型進(jìn)行測試,并通過線程的方式實(shí)現(xiàn)邊緣端實(shí)時(shí)目標(biāo)檢測的應(yīng)用。任務(wù)描述任務(wù)要求加載RKNN模型并初始化運(yùn)行環(huán)境;使用RKNN模型進(jìn)行模型推理;使用線程進(jìn)行實(shí)時(shí)目標(biāo)檢測。任務(wù)描述與要求02職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三基于YOLOv5的實(shí)時(shí)檢測模型部署任務(wù)分析實(shí)時(shí)推理為什么是用訓(xùn)練好的模型?模型可以部署在哪些端?任務(wù)分析與計(jì)劃03任務(wù)計(jì)劃表項(xiàng)目名稱基于Pytorch(yolov5)目標(biāo)檢測模型部署任務(wù)名稱基于YOLOv5的實(shí)時(shí)檢測模型部署計(jì)劃方式自主設(shè)計(jì)計(jì)劃要求請(qǐng)用8個(gè)計(jì)劃步驟來完整描述出如何完成本次任務(wù)序號(hào)任務(wù)計(jì)劃1
2
3
4
5
6
78通過上面的思考,你是否對(duì)本任務(wù)要完成的工作有所了解?讓我們一起來制訂完成本次任務(wù)的實(shí)施計(jì)劃吧!任務(wù)分析與計(jì)劃03職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三基于YOLOv5的實(shí)時(shí)檢測模型部署設(shè)備端模型部署204知識(shí)儲(chǔ)備云計(jì)算部署模式133邊緣AI云計(jì)算部署模式04云計(jì)算有4種部署模式社區(qū)云混合云公共云私有云04私有云
如果一個(gè)云端的所有消費(fèi)者只來自一個(gè)特定的單位組織(如微算科技公司),那么就是私有云。私有云的核心特征是云端資源只供一個(gè)企事業(yè)單位內(nèi)的員工使用,其他的人和機(jī)構(gòu)都無權(quán)租賃并使用云端計(jì)算資源。至于云端部署何處、所有權(quán)歸誰、由誰負(fù)責(zé)日常管理,并沒有嚴(yán)格的規(guī)定。
云端部署何處,這有兩個(gè)可能,一是部署在單位內(nèi)部(如機(jī)房),稱為本地私有云;二是托管在別處(如阿里云端),稱為托管私有云。云計(jì)算部署模式04本地私有云
由于本地私有云的云端部署在企業(yè)內(nèi)部,私有云的安全及網(wǎng)絡(luò)安全邊界定義都由企業(yè)自己實(shí)現(xiàn)并管理,一切由企業(yè)掌控,所以本地私有云適合運(yùn)行企業(yè)中關(guān)鍵的應(yīng)用。云計(jì)算部署模式04托管私有云
托管私有云是把云端托管在第三方機(jī)房或者其他云端,計(jì)算設(shè)備可以自己購買,也可以租用第三方云端的計(jì)算資源,消費(fèi)者所在的企業(yè)一般通過專線與托管的云端建立連接,或者利用疊加網(wǎng)絡(luò)技術(shù)在因特網(wǎng)上建立安全通道(VPN),以便降低專線費(fèi)用。托管私有云由于云端托管在公司之外,企業(yè)自身不能完全控制其安全性,所以要與信譽(yù)好、資金雄厚的托管方合作,這樣的托管方抵御天災(zāi)人禍的能力更強(qiáng)。云計(jì)算部署模式04社區(qū)云
如果一個(gè)云端的所有消費(fèi)者來自兩個(gè)或兩個(gè)以上特定的單位組織,那么就是社區(qū)云。社區(qū)云的核心特征是云端資源只給兩個(gè)或者兩個(gè)以上的特定單位組織內(nèi)的員工使用,除此之外的人和機(jī)構(gòu)都無權(quán)租賃和使用云端計(jì)算資源。參與社區(qū)云的單位組織具有共同的要求,如云服務(wù)模式、安全級(jí)別等。具備業(yè)務(wù)相關(guān)性或者隸屬關(guān)系的單位組織建設(shè)社區(qū)云的可能性更大一些,因?yàn)橐环矫婺芙档透髯缘馁M(fèi)用,另一方面能共享信息。與私有云類似,社區(qū)云的云端也有兩種部署方法,即本地部署和托管部署。云計(jì)算部署模式04本地社區(qū)云
由于存在多個(gè)單位組織,所以本地部署存在三種情況:只部署在一個(gè)單位組織內(nèi)部;部署在部分單位組織內(nèi)部;部署在全部單位組織內(nèi)部。如果云端部署在多個(gè)單位組織,那么每個(gè)單位組織只部署云端的一部分,或者做災(zāi)備。云計(jì)算部署模式04托管社區(qū)云
類似于托管私有云,托管社區(qū)云也是把云端部署到第三方,只不過用戶來自多個(gè)單位組織,所以托管方還必須制訂切實(shí)可行的共享策略。云計(jì)算部署模式04公共云
如果一個(gè)云端的所有消費(fèi)者來自社會(huì)公眾,那么就是公共云。公共云的核心特征是云端資源面向社會(huì)大眾開放,符合條件的任何個(gè)人或者單位組織都可以租賃并使用云端資源。公共云的管理比私有云的管理要復(fù)雜得多,尤其是安全防范,要求更高。公共云的一些例子:深圳超算中心、亞馬遜、微軟的Azure、阿里云等。
云計(jì)算部署模式04混合云如果一個(gè)云端的資源來自兩個(gè)或兩個(gè)以上的云,那么就是混合云?;旌显剖怯蓛蓚€(gè)或兩個(gè)以上不同類型的云(私有云、社區(qū)云、公共云)組成的,它其實(shí)不是一種特定類型的單個(gè)云,其對(duì)外呈現(xiàn)出來的計(jì)算資源來自兩個(gè)或兩個(gè)以上的云,只不過增加了一個(gè)混合云管理層。云服務(wù)消費(fèi)者通過混合云管理層租賃和使用資源,感覺就像在使用同一個(gè)云端的資源,其實(shí)內(nèi)部被混合云管理層路由到真實(shí)的云端了。
在右圖中,假如用戶在混合云上租賃了一臺(tái)虛擬機(jī)(IaaS型資源)及開發(fā)工具(PaaS型資源),那么用戶每次都是連接混合云端,并使用其中的資源。用戶并不知道自己的虛擬機(jī)實(shí)際上位于另一個(gè)IaaS私有云端,而開發(fā)工具又在另一個(gè)公共云上。云計(jì)算部署模式04混合云部署方法由于私有云和社區(qū)云具有本地和托管兩種類型,再加上公共云,共有5種類型,所以混合云的組keys[-1]合方式就有很多種形式了。
云計(jì)算部署模式04公/私混合云混合云屬于多云這個(gè)大類,是多云大類中最主要的形式,而公/私混合云又是混合云中最主要的形式,因?yàn)樗瑫r(shí)具備了公共云的資源規(guī)模和私有云的安全特征。從下圖中可以看出私有云和公共云構(gòu)成的混合云占比達(dá)到55%。
云計(jì)算部署模式04公/私混合云的優(yōu)勢1.架構(gòu)更靈活:可以根據(jù)負(fù)載的重要性靈活分配最適合的資源,例如將內(nèi)部重要數(shù)據(jù)保存在本地云端,而把非機(jī)密功能移動(dòng)到公共云區(qū)域。2.技術(shù)方面更容易掌控。3.更安全:具備私有云的保密性,同時(shí)具有公共云的抗災(zāi)性(在公共云上建立虛擬的應(yīng)急災(zāi)備中心或者靜態(tài)數(shù)據(jù)備份點(diǎn))。4.更容易滿足合規(guī)性要求:云計(jì)算審計(jì)員對(duì)多租戶的審查比較嚴(yán)格,他們往往要求云計(jì)算服務(wù)提供商必須為云端的某些(或者全部)基礎(chǔ)設(shè)施提供專門的解決方案。而這種混合云由于融合了專門的硬件設(shè)備,提高了網(wǎng)絡(luò)安全性,更容易通過審計(jì)員的合規(guī)性檢查。5.更低的費(fèi)用:租用第三方資源來平抑短時(shí)間內(nèi)的季節(jié)性資源需求峰值,相比自己配置最大化資源以滿足需求峰值的成本,這種短暫租賃的費(fèi)用要低得多。如下圖所示。
云計(jì)算部署模式04公/私混合云的構(gòu)成1.私有云:這是混合云的主要組成部分,企業(yè)部署混合云的步驟一般是先“私”后“公”。2.公共云。3.公/私云之間的網(wǎng)絡(luò)連接:一般為公共云提供商提供的高速專線,或者是第三方的VPN。4.混合云管理平臺(tái):是用戶的統(tǒng)一接入點(diǎn),實(shí)現(xiàn)資源的自動(dòng)化、費(fèi)用結(jié)算、報(bào)表生成、云端日常操作及API調(diào)用等,可以進(jìn)一步細(xì)化為數(shù)據(jù)管理、虛機(jī)管理、應(yīng)用管理等幾個(gè)層面的軟件。目前混合云管理平臺(tái)產(chǎn)品有VMware。
公/私混合云的功能混合云可以做多個(gè)層面的事情,基本可以分為數(shù)據(jù)層面和業(yè)務(wù)負(fù)載層面。在這兩個(gè)層面,有一些典型的應(yīng)用場景,具體如下:1.數(shù)據(jù)備份:將私有云的數(shù)據(jù)備份到更便宜和可靠的公共云上。2.災(zāi)備:在私有云出現(xiàn)故障時(shí),由公共云上的災(zāi)備環(huán)境提供服務(wù)。3.負(fù)載延伸:當(dāng)私有云無法提供新增負(fù)載所需要的資源時(shí),在公共云上創(chuàng)建虛擬主機(jī)來支持新的負(fù)載,當(dāng)負(fù)載下降后再刪除這些虛擬主機(jī)回到純私有云。4.使用公共云作為開發(fā)測試云。
云計(jì)算部署模式設(shè)備端模型部署204知識(shí)儲(chǔ)備云計(jì)算部署模式133邊緣AI04設(shè)備端模型部署當(dāng)我們把深度學(xué)習(xí)模型訓(xùn)練好之后,想要基于深度學(xué)習(xí)模型來開發(fā)實(shí)際應(yīng)用的時(shí)候,主要有三種不同的應(yīng)用場景移動(dòng)端、桌面端和服務(wù)器端。移動(dòng)端:我們將模型封裝成SDK給Android和IOS調(diào)用,由于移動(dòng)端算力有限通常還需要考慮基于移動(dòng)端CPU或GPU框架的優(yōu)化問題來提速。如果模型要求的算力比較大,就只能考慮以API的形式來調(diào)用了,這時(shí)候模型是部署在服務(wù)器上的。桌面端:桌面應(yīng)用主要包括Windows和MacOS以及Linux,這時(shí)候我們還是需要將模型封裝成SDK然后提供接口來進(jìn)行調(diào)用。Windows將模型封裝成dll或lib庫,Linux封裝成so或a庫,MacOS封裝為.a或.tbd庫。服務(wù)器端:服務(wù)器端模型的部署如果對(duì)并發(fā)量要求不高,通??赡芏际遣捎胒lask或tornado來封裝一個(gè)API接口來給調(diào)用。但是這種方式有一個(gè)致命的缺點(diǎn)就是,能支持的并發(fā)量很低,可擴(kuò)展性也不高,如果被工具服務(wù)器很容易奔潰。對(duì)于并發(fā)量要求高的應(yīng)用建議使用基于modelserver的服務(wù)框架。04設(shè)備端模型部署近年來深度學(xué)習(xí)模型在計(jì)算機(jī)視覺、自然語言處理、搜索推薦廣告等各種領(lǐng)域,不斷刷新傳統(tǒng)模型性能,并得到了廣泛應(yīng)用。隨著移動(dòng)端設(shè)備計(jì)算能力的不斷提升,移動(dòng)端AI落地也成為了可能。相比于服務(wù)端,移動(dòng)端模型的優(yōu)勢有:1.減輕服務(wù)端計(jì)算壓力,并利用云端一體化實(shí)現(xiàn)負(fù)載均衡。特別是在雙11等大促場景,服務(wù)端需要部署很多高性能機(jī)器,才能應(yīng)對(duì)用戶流量洪峰。平時(shí)用戶訪問又沒那么集中,存在巨大的流量不均衡問題。直接將模型部署到移動(dòng)端,并在置信度較高情況下直接返回結(jié)果,而不需要請(qǐng)求服務(wù)端,可以大大節(jié)省服務(wù)端計(jì)算資源。同時(shí)在大促期間降低置信度閾值,平時(shí)又調(diào)高,可以充分實(shí)現(xiàn)云端一體負(fù)載均衡。2.實(shí)時(shí)性好,響應(yīng)速度快。在feed流推薦和物體實(shí)時(shí)檢測等場景,需要根據(jù)用戶數(shù)據(jù)的變化,進(jìn)行實(shí)時(shí)計(jì)算推理。如果是采用服務(wù)端方案,則響應(yīng)速度得不到保障,且易造成請(qǐng)求過于密集的問題。利用端計(jì)算能力,則可以實(shí)現(xiàn)實(shí)時(shí)計(jì)算。3.穩(wěn)定性高,可靠性好。在斷網(wǎng)或者弱網(wǎng)情況下,請(qǐng)求服務(wù)端會(huì)出現(xiàn)失敗。而采用端計(jì)算,則不會(huì)出現(xiàn)這種情況。在無人車和自動(dòng)駕駛等可靠性要求很高的場景下,這一點(diǎn)尤為關(guān)鍵,可以保證在隧道、山區(qū)等場景下仍能穩(wěn)定運(yùn)行。4.安全性高,用戶隱私保護(hù)好。由于直接在端上做推理,不需要將用戶數(shù)據(jù)傳輸?shù)椒?wù)端,免去了網(wǎng)絡(luò)通信中用戶隱私泄露風(fēng)險(xiǎn),也規(guī)避了服務(wù)端隱私泄露問題。04設(shè)備端模型部署移動(dòng)端部署深度學(xué)習(xí)模型也有很大的挑戰(zhàn)。主要表現(xiàn)在,移動(dòng)端等嵌入式設(shè)備,在計(jì)算能力、存儲(chǔ)資源、電池電量等方面均是受限的。故移動(dòng)端模型必須滿足模型尺寸小、計(jì)算復(fù)雜度低、電池耗電量低、下發(fā)更新部署靈活等條件。因此模型壓縮和加速就成為了目前移動(dòng)端AI的一個(gè)熱門話題。模型壓縮和加速不僅僅可以提升移動(dòng)端模型性能,在服務(wù)端也可以大大加快推理響應(yīng)速度,并減少服務(wù)器資源消耗,大大降低成本。結(jié)合移動(dòng)端AI模型和服務(wù)端模型,實(shí)現(xiàn)云端一體化,是目前越來越廣泛采用的方案。模型壓縮和加速是兩個(gè)不同的話題,有時(shí)候壓縮并不一定能帶來加速的效果,有時(shí)候又是相輔相成的。壓縮重點(diǎn)在于減少網(wǎng)絡(luò)參數(shù)量,加速則側(cè)重在降低計(jì)算復(fù)雜度、提升并行能力等。模型壓縮和加速是一個(gè)很大的命題,可以從多個(gè)角度優(yōu)化??傮w來看,個(gè)人認(rèn)為主要分為三個(gè)層次:1.算法應(yīng)用層壓縮加速。這個(gè)維度主要在算法應(yīng)用層,也是大多數(shù)算法工程師的工作范疇。主要包括結(jié)構(gòu)優(yōu)化(如矩陣分解、分組卷積、小卷積核等)、量化與定點(diǎn)化、模型剪枝、模型蒸餾等。2.框架層加速。這個(gè)維度主要在算法框架層,比如tf-lite、NCNN、MNN等。主要包括編譯優(yōu)化、緩存優(yōu)化、稀疏存儲(chǔ)和計(jì)算、NEON指令應(yīng)用、算子優(yōu)化等3.硬件層加速。這個(gè)維度主要在AI硬件芯片層,目前有GPU、FPGA、ASIC等多種方案,各種TPU、NPU就是ASIC這種方案,通過專門為深度學(xué)習(xí)進(jìn)行芯片定制,大大加速模型運(yùn)行速度。設(shè)備端模型部署204知識(shí)儲(chǔ)備云計(jì)算部署模式133邊緣AI邊緣AI04
邊緣AI實(shí)際上指的就是終端智能,即在硬件設(shè)備上本地處理的AI算法。邊緣AI是融合網(wǎng)絡(luò)、計(jì)算、存儲(chǔ)、應(yīng)用核心能力的開放平臺(tái),將AI部署在邊緣設(shè)備上可以使智能更貼近用戶,更快、更好地為用戶提供智能服務(wù)。隨著終端設(shè)備的日益增長,海量的數(shù)據(jù)處理需要傳送到云計(jì)算中心進(jìn)行,這增大了系統(tǒng)的時(shí)延,同時(shí)對(duì)網(wǎng)絡(luò)帶寬帶來了極大的壓力。因此,實(shí)時(shí)性和帶寬不足成為了云端AI的兩大劣勢,為了帶來更快、更低成本、更安全的應(yīng)用體驗(yàn),AI開始由云端向邊緣端蔓延。邊緣AI04邊緣AI與云端AI已經(jīng)形成了對(duì)立面呢?隨著邊緣算力的豐富,包括5G大規(guī)模鋪開,越來越多地應(yīng)用場景選擇在邊緣進(jìn)行展開,但這并不代表云和邊緣是兩個(gè)互相對(duì)立的角色,相反,這兩者是相輔相成,分工協(xié)同的。云端有著非常強(qiáng)的算力,智能終端從技術(shù)和商業(yè)模式上來講都是云端智能在邊緣側(cè)的一個(gè)延伸,是一個(gè)分布式的技術(shù)體現(xiàn)邊緣AI最大的特點(diǎn)便是離客戶更近,為云端減少負(fù)載,節(jié)省帶寬,提升反饋效率。其次,讓終端數(shù)據(jù)留在終端,讓云端去處理一些抽象、有共性的數(shù)據(jù),從而保護(hù)隱私。但問題也隨之而來,在終端設(shè)備收到連接問題、功耗及小型化的困擾下,芯片的面積、功耗、算力都不能夠完整滿足客戶所有的需求,這時(shí)就需要云端AI芯片。在分工協(xié)同的情況下,邊緣側(cè)會(huì)更加場景化,更加人性化,更加體現(xiàn)出它對(duì)于一些場景的理解和高效性,而云端芯片需要更加智能化,能夠處理各種各樣的業(yè)務(wù)。職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計(jì)劃03知識(shí)儲(chǔ)備04任務(wù)實(shí)施05任務(wù)檢查與評(píng)價(jià)06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三基于YOLOv5的實(shí)時(shí)檢測模型部署05任務(wù)實(shí)施RKNN模型加載1RKNN模型推理測試2使用線程進(jìn)行實(shí)時(shí)目標(biāo)檢測32加載RKNN模型1初始化RKNNSDK環(huán)境3初始化運(yùn)行時(shí)環(huán)境RKNN模型加載05RKNN模型加載初始化RKNNSDK環(huán)境05rknn=RKNN(verbose=True)1.初始化RKNNSDK環(huán)境rknn=RKNN(verbose=True,verbose_file=None)Verbose:指定是否要在屏幕上打印詳細(xì)日志信息;默認(rèn)False不打印,verbose_file:調(diào)試信息指定轉(zhuǎn)儲(chǔ)到文件路徑,默認(rèn)為None。如果有設(shè)置,且verbose參數(shù)值為True,日志信息還將寫到該參數(shù)指定的文件中importcv2importthreading#這是python的標(biāo)準(zhǔn)庫,線程庫fromrknn.apiimportRKNNfromyolov5.rknn.yolov5_rknn_detectimport*初始化RKNNSDK環(huán)境05RKNN_MODEL='./yolov5/rknn/models/best.rknn'ret=rknn.load_rknn(RKNN_MODEL)2.加載RKNN模型ret=rknn.load_rknn(path,load_model_in_npu=False)主要的參數(shù)說明:path:RKNN模型文件路徑。load_model_in_npu:是否直接加載npu中的rknn模型。其中path為rknn模型在npu中的路徑。返回值:0表示加載成功,-1表示加載失敗只有當(dāng)RKNN-Toolkit運(yùn)行在運(yùn)行在RK3399ProLinux開發(fā)板或連有開發(fā)板或連有NPU設(shè)備的的PC上時(shí)才可以設(shè)為True。默認(rèn)值為False。初始化RKNNSDK環(huán)境05ret=rknn.init_runtime()3.初始化運(yùn)行時(shí)環(huán)境ret=rknn.init_runtime(target=None,device_id=None,perf_debug=False,eval_mem=False,async_mode=False)主要的參數(shù)說明:target:目標(biāo)硬件平臺(tái),目前支持rk3399pro、rk1806、rk1808、rv1109、rv1126。默認(rèn)為None,即在PC使用工具時(shí),模型在模擬器上運(yùn)行;在RK3399ProLinux開發(fā)板運(yùn)行時(shí),模型在RK3399Pro自帶NPU上運(yùn)行;否則在設(shè)定的target上運(yùn)行。如果是開發(fā)板上直接運(yùn)行,通常不寫。device_id:設(shè)備編號(hào),如果PC連接多臺(tái)設(shè)備時(shí),需要指定該參數(shù),設(shè)備編號(hào)可以通過list_devices接口查看。默認(rèn)值為None。如果是開發(fā)板上直接運(yùn)行,通常不寫。perf_debug:進(jìn)行性能評(píng)估時(shí)是否開啟debug模式。在debug模式下,可以獲取到每一層的運(yùn)行時(shí)間,否則只能獲取模型運(yùn)行的總時(shí)間。默認(rèn)值為False。eval_mem:是否進(jìn)入內(nèi)存評(píng)估模式。進(jìn)入內(nèi)存評(píng)估模式后,可以調(diào)用eval_memory接口獲取模型運(yùn)行時(shí)的內(nèi)存使用情況。默認(rèn)值為False。async_mode:是否使用異步模式。調(diào)用推理接口時(shí),涉及設(shè)置輸入圖片、模型推理、獲取推理結(jié)果三個(gè)階段。如果開啟了異步模式,設(shè)置當(dāng)前幀的輸入將與推理上一幀同時(shí)進(jìn)行,所以除第一幀外,之后的每一幀都可以隱藏設(shè)置輸入的時(shí)間,從而提升性能。在異步模式下,每次返回的推理結(jié)果都是上一幀的。該參數(shù)的默認(rèn)值為False。返回值:0表示初始化運(yùn)行時(shí)環(huán)境成功,-1表示初始化運(yùn)行時(shí)環(huán)境失敗。05任務(wù)實(shí)施RKNN模型加載1RKNN模型推理測試2使用線程進(jìn)行實(shí)時(shí)目標(biāo)檢測32
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智慧城市建設(shè)個(gè)人工勞務(wù)分包合同4篇
- 2025年物業(yè)經(jīng)營托管與設(shè)施設(shè)備更新改造合同3篇
- 二零二五年度商業(yè)街區(qū)租賃管理合同3篇
- 2025年西瓜種植與農(nóng)村電商平臺(tái)合作承包協(xié)議3篇
- 2025年度個(gè)人收藏品買賣合同樣本3篇
- 二零二五年護(hù)理員勞動(dòng)合同范本(含離職手續(xù))3篇
- 2025年物流企業(yè)物流園區(qū)消防安全管理合同3篇
- 2025年新媒體信息推廣業(yè)務(wù)合作協(xié)議3篇
- 天橋安全施工方案
- 二零二五年度美容院美容院形象設(shè)計(jì)與裝修合同4篇
- 醫(yī)學(xué)脂質(zhì)的構(gòu)成功能及分析專題課件
- 高技能人才培養(yǎng)的策略創(chuàng)新與實(shí)踐路徑
- 數(shù)列練習(xí)題(含答案)基礎(chǔ)知識(shí)點(diǎn)
- 人教版(2024新版)七年級(jí)上冊(cè)英語期中+期末學(xué)業(yè)質(zhì)量測試卷 2套(含答案)
- 2024年湖北省中考數(shù)學(xué)試卷(含答案)
- 油煙機(jī)清洗安全合同協(xié)議書
- 2024年云南省中考數(shù)學(xué)試題(原卷版)
- 污水土地處理系統(tǒng)中雙酚A和雌激素的去除及微生物研究
- 氣胸病人的護(hù)理幻燈片
- 《地下建筑結(jié)構(gòu)》第二版(朱合華)中文(2)課件
- JB T 7946.1-2017鑄造鋁合金金相
評(píng)論
0/150
提交評(píng)論