ResNet模型
前言
在上一次的測驗中,我們從頭開始訓練了一個三個卷積層串聯一個全連接層的輸出,作為貓狗分類的預測的模型,這次我們自己訓練一個ResNet模型,并在以下三個環境中進行性能的對比
- AIStudio CPU: 2 Cores 8GB Memory
- AIStudio GPU: V100 16GB VMem
- Edgeboard
訓練模型
模型使用AIStudio 進行訓練,訓練和預測代碼如下
RESNET:https://aistudio.baidu.com/aistudio/projectdetail/67775
MOBILE:https://aistudio.baidu.com/aistudio/projectdetail/67776
按照之前我們的做法,匯出model檔案和param檔案,
測驗結果
我們執行預測,忽略掉預處理的速度,僅僅計算模型前向傳播的時間,
對于AIstudio平臺,我們計算以下代碼的運行時間
label = exe.run(inference_program, feed={feed_target_names[0]: tensor_img}, fetch_list=fetch_targets)對于Edgeboard上面的PaddleMobile,我們計算以下代碼的運行時間
PaddleTensor tensor;tensor.shape = std::vector({1, input_channel, input_width, input_height});tensor.data = https://www.cnblogs.com/AIBOOM/p/PaddleBuf(data, sizeof(data));tensor.dtype = PaddleDType::FLOAT32;std::vector paddle_tensor_feeds(1, tensor);?PaddleTensor tensor_out;tensor_out.shape = std::vector({});tensor_out.data = PaddleBuf();tensor_out.dtype = PaddleDType::FLOAT32;std::vector outputs(1, tensor_out);?predictor->Run(paddle_tensor_feeds, &outputs);以下為兩個模型的評測資料
ResNet
Edgeboard:
CPU:
GPU:
Mobile_Net
Edgeboard:
GPU:
CPU:
總結:
下表為兩個模型預測速度的對比,從中來看,其速度相對于V100的GPU甚至還有一定的優勢,讓人難以相信,個人的分析是由于以下幾個原因
- Paddle-mobile較為啟動預測,與AIstudio的完整版Paddlepaddle相比有啟動效率上的優勢,AIstudio啟動預測可能較慢,
- 整個預測模型batch size相當于1,發揮不出GPU的優勢,
- 部署預算按三年算的話,GPU V100價格大概是10萬,CPU 1萬, EdgeBoard 5千,性價比還是蠻高的,
我在進行模型預測的時候,使用鉗表對功率進行了大概的估計(條件有限),鉗表的讀數在0.6A-8A之間變化,結合使用的12V配接器,我大概估計Edgeboard的功耗為8W.
以8W的功耗,在單張圖片的預測速度上面領先了幾十倍功耗的GPU與CPU,Edgeboard的表現還是令我比較驚喜,本來想繼續移植一個前段時間的大尺度的分割網路Unet進行嘗試,想繼續試試他最大可以跑的模型大小,但似乎Edgeboard目前還不支持分割,存在了一定遺憾,
另外我在進行除錯的時候,發現過有幾個發布版本的韌體不是很穩定,有些op有些問題,還發現了Edgeboard在我的兩臺筆記本電腦上網路不是很穩定,經常出現相互無法ping通的情況,更換PC后正常,暫時還沒發現為什么,
Edgeboard是我第一款接觸的嵌入式神經網路加速設備,Paddle-mobile也是我接觸的第一個移動端神經網路框架,也是我接觸的第一個基于FPGA實作的加速框架,從我了解這個框架到現在僅僅不到半年的時間,已經發布了多個模型轉換工具,降低了開發難度,并且支持EasyDL這種方式,雖然目前仍然有一些不成熟的坑需要填,不過相信在軟體的迭代下面,它能成為一個很好的嵌入式原型設計平臺,
Mobile-SSD 模型
這次我們自己訓練一個 Mobilenet-SSD 模型,增加了不同輸入維度的情況下,模型運行效率的對比
AIStudio CPU: 2 Cores 8GB Memory
AIStudio GPU: V100 16GB VMem
Edgeboard
訓練模型
模型使用AIStudio提供的官方工程 進行訓練,訓練和預測代碼如下
Mobilenet-SSD:https://aistudio.baidu.com/aistudio/projectdetail/41752
按照之前我們的做法,匯出model檔案和param檔案,
運行預測
我們執行預測,忽略掉預處理的速度,僅僅計算模型前向傳播的時間,
對于AIstudio平臺,我們計算以下代碼的運行時間
label = exe.run(inference_program, feed={feed_target_names[0]: tensor_img}, fetch_list=fetch_targets)對于Edgeboard上面的PaddleMobile,我們計算以下代碼的運行時間
PaddleTensor tensor;tensor.shape = std::vector({1, input_channel, input_width, input_height});tensor.data = https://www.cnblogs.com/AIBOOM/p/PaddleBuf(data, sizeof(data));tensor.dtype = PaddleDType::FLOAT32;std::vector paddle_tensor_feeds(1, tensor);?PaddleTensor tensor_out;tensor_out.shape = std::vector({});tensor_out.data = PaddleBuf();tensor_out.dtype = PaddleDType::FLOAT32;std::vector outputs(1, tensor_out);?predictor->Run(paddle_tensor_feeds, &outputs);
以下圖片為預測結果,由于時間有限,沒有很細致去訓練模型,僅僅對比了模型運行的速度,
下表為模型在不同維度下的預測速度的對比,從中來看,其速度相對于V100的GPU基本處于同一個數量級,遠遠領先與GPU
在之前的文章里我們提到,本來想繼續移植一個前段時間的大尺度的分割網路Unet進行嘗試,想繼續試試他最大可以跑的模型大小,但似乎Edgeboard目前還不支持分割,所以我們更換了目標檢測網路進行嘗試,在mobilenet-SSD這個模型上,Edgeboard最大可以跑到700*700的輸入維度,并且能保持在16fps之上(不包含輸入影像的語出程序),基本上具有實時性,
之前我提到的,在我的兩臺筆記本電腦上網路不是很穩定,經常出現相互無法ping通的情況,目前經過試驗之后,發現問題為板子的網卡在與不支持千兆的網卡進行通信時候,不能正確的協商,仍然使用千兆模式,使用以下命令固定為百兆即可正常連接
ethtool -s eth0 speed 100 duplex full
Edgeboard是我第一款接觸的嵌入式神經網路加速設備,Paddle-mobile也是我接觸的第一個移動端神經網路框架,也是我接觸的第一個基于FPGA實作的加速框架,從我了解這個框架到現在僅僅不到半年的時間,已經發布了多個模型轉換工具,降低了開發難度,并且支持EasyDL這種方式,雖然目前仍然有一些不成熟的坑需要填,不過相信在軟體的迭代下面,它能成為一個很好的嵌入式原型設計平臺,
作者:Litchll
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/7259.html
標籤:其他
