0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Edgeboard試用—基于CIFAR10分類(lèi)模型的移植

云創(chuàng)硬見(jiàn) ? 2019-09-05 14:15 ? 次閱讀

摘要:前言 在上一周的測(cè)試中,我們按照官方給的流程,使用EasyDL快速實(shí)現(xiàn)了一個(gè)具有性別檢測(cè)功能的人臉識(shí)別系統(tǒng),那么 今天,我們將要試一下通過(guò)Paddlepaddle從零開(kāi)始,訓(xùn)練一個(gè)自己的多分類(lèi)模型,并進(jìn)行嵌入式部署。 整個(gè)訓(xùn)練 過(guò)程和模型在:https://aistudio.baidu.com/aistudio/projectDetail/61103 下面詳細(xì)介紹模型訓(xùn)練...

前言

在上一周的測(cè)試中,我們按照官方給的流程,使用EasyDL快速實(shí)現(xiàn)了一個(gè)具有性別檢測(cè)功能的人臉識(shí)別系統(tǒng),那么

今天,我們將要試一下通過(guò)Paddlepaddle從零開(kāi)始,訓(xùn)練一個(gè)自己的多分類(lèi)模型,并進(jìn)行嵌入式部署。 整個(gè)訓(xùn)練

過(guò)程和模型在:https://aistudio.baidu.com/aistudio/projectDetail/61103 下面詳細(xì)介紹模型訓(xùn)練的過(guò)程.

數(shù)據(jù)集準(zhǔn)備

我們使用CIFAR10數(shù)據(jù)集。CIFAR10數(shù)據(jù)集包含60,000張32x32的彩色圖片,10個(gè)類(lèi)別,每個(gè)類(lèi)包含6,000張。其中

50,000張圖片作為訓(xùn)練集,10000張作為驗(yàn)證集。

!mkdir‐p/home/aistudio/.cache/paddle/dataset/cifar#wget將下載的文件存放到指定的文件夾下,同時(shí)重命名下載的文件,利用‐O!wget"http://ai‐atest.bj.bcebos.com/cifar‐10‐python.tar.gz"‐Ocifar‐10‐python.tar.gz!mvcifar‐10‐python.tar.gz/home/aistudio/.cache/paddle/dataset/cifar/

模型結(jié)構(gòu)

我們選擇了以三個(gè)卷積層串聯(lián)一個(gè)全連接層的輸出,作為貓狗分類(lèi)的預(yù)測(cè),采用固定維度輸入,輸出為分類(lèi)數(shù)

defconvolutional_neural_network(img):#第一個(gè)卷積‐池化層conv_pool_1=fluid.nets.simple_img_conv_pool(input=img,#輸入圖像filter_size=5,#濾波器的大小num_filters=20,#filter的數(shù)量。它與輸出的通道相同pool_size=2,#池化層大小2*2pool_stride=2,#池化層步長(zhǎng)act="relu")#激活類(lèi)型#第二個(gè)卷積‐池化層conv_pool_2=fluid.nets.simple_img_conv_pool(input=conv_pool_1,filter_size=5,num_filters=50,pool_size=2,pool_stride=2,act="relu")#第三個(gè)卷積‐池化層conv_pool_3=fluid.nets.simple_img_conv_pool(input=conv_pool_2,filter_size=5,num_filters=50,pool_size=2,pool_stride=2,act="relu")#以softmax為激活函數(shù)的全連接輸出層,10類(lèi)數(shù)據(jù)輸出10個(gè)數(shù)字prediction=fluid.layers.fc(input=conv_pool_3,size=10,act='softmax')returnprediction

訓(xùn)練&驗(yàn)證

接下來(lái)在Paddlepaddle fluid上,進(jìn)行訓(xùn)練。整個(gè)訓(xùn)練代碼見(jiàn)附件train.py 模型驗(yàn)證,采用附件predict.py的代碼進(jìn)

行驗(yàn)證與運(yùn)行時(shí)間的測(cè)量,選取一張狗的圖:dog.jpg (可以fork首頁(yè)鏈接aistudio平臺(tái)上的demo) 連續(xù)預(yù)測(cè)10000

次,輸出如下:

CPU運(yùn)行結(jié)果為:預(yù)處理時(shí)間為0.0006270000000085929,預(yù)測(cè)時(shí)間為:16.246494Out:im_shape的維度:(1,3,32,32)Theruntimeofimageprocessis0.0006270000000085929Theruntimeofpredictis16.246494results[array([[5.0159363e‐04,3.5942634e‐05,2.5955746e‐02,4.7745958e‐02,9.9251214e‐03,9.0146154e‐01,1.9564393e‐03,1.2230080e‐02,4.7619540e‐08,1.8753216e‐04]],dtype=float32)]inferresults:dog
GPUV100運(yùn)行結(jié)果為:預(yù)處理時(shí)間為0.0006390000000067175,預(yù)測(cè)時(shí)間為:15.903074000000018Out:im_shape的維度:(1,3,32,32)Theruntimeofimageprocessis0.0006390000000067175Theruntimeofpredictis15.903074000000018results[array([[5.0159392e‐04,3.5942641e‐05,2.5955772e‐02,4.7746032e‐02,9.9251205e‐03,9.0146142e‐01,1.9564414e‐03,1.2230078e‐02,4.7619821e‐08,1.8753250e‐04]],dtype=float32)]inferresults:dog

可以看到,模型可以正確的識(shí)別出圖片中的動(dòng)物為狗,接下來(lái),我們就要嘗試將這個(gè)模型部署到Edgeboard上面。

模型導(dǎo)出

我們需要將模型保存為模型文件model以及權(quán)重文件params,可以采用如下Paddle的API進(jìn)行保存如圖所示,在AiStudio的左側(cè)打開(kāi)模型文件所在的文件夾,下載mlp-model、mlp-params兩個(gè)文件。

在Edgeboard上部署模型,完成預(yù)測(cè)

1、新建工程文件夾,目錄結(jié)構(gòu)如下(可以仿照sample里的resnet、inception例程):

‐sample_image_catdog‐build‐image‐include‐paddlepaddle‐mobile‐...‐lib‐libpaddle‐mobile.so‐model‐mlp‐model‐params‐src‐fpga_cv.cpp‐main.cpp

2、將AiStudio上導(dǎo)出來(lái)的模型放置在model里的mlp文件夾,修改名字為model、params

3、新建 CMakeLists.txt

cmake_minimum_required(VERSION3.5.1)project(paddle_edgeboard)set(CMAKE_CXX_STANDARD14)set(CMAKE_EXE_LINKER_FLAGS"${CMAKE_EXE_LINKER_FLAGS}‐pthread")add_definitions(‐DPADDLE_MOBILE_FPGA_V1)add_definitions(‐DPADDLE_MOBILE_FPGA)set(PADDLE_LIB_DIR"${PROJECT_SOURCE_DIR}/lib")set(EASYDL_INCLUDE_DIR"${PROJECT_SOURCE_DIR}/include")set(PADDLE_INCLUDE_DIR"${PROJECT_SOURCE_DIR}/include/paddle‐mobile")set(APP_NAME"paddle_edgeboard")aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/srcSRC)find_package(OpenCVQUIETCOMPONENTScorevideoiohighguiimgprocimgcodecsmlvideo)include_directories(SYSTEM${OpenCV_INCLUDE_DIRS})#list(APPENDCaffe_LINKER_LIBS${OpenCV_LIBS})message(STATUS"OpenCVfound(${OpenCV_CONFIG_PATH}),${OpenCV_LIBS}")#add_definitions(‐DUSE_OPENCV)include_directories(${EASYDL_INCLUDE_DIR})include_directories(${PADDLE_INCLUDE_DIR})LINK_DIRECTORIES(${PADDLE_LIB_DIR})add_executable(${APP_NAME}${SRC})target_link_libraries(${APP_NAME}paddle‐mobile)target_link_libraries(${APP_NAME}${OpenCV_LIBS})

4、main.cpp

#include#include"io/paddle_inference_api.h"#include"math.h"#include#include#include#include#include#include#include#include#include#include#include"fpga/KD/float16.hpp"#include"fpga/KD/llapi/zynqmp_api.h"usingnamespacepaddle_mobile;#include#includeusingnamespacecv;cv::Matsample_float;staticstd::vectorlabel_list(10);voidreadImage(std::stringfilename,float*buffer){Matimg=imread(filename);if(img.empty()){std::cerr<(config);std::cout<({1,3,32,32});tensor.data=PaddleBuf(data,sizeof(data));tensor.dtype=PaddleDType::FLOAT32;std::vectorpaddle_tensor_feeds(1,tensor);PaddleTensortensor_out;tensor_out.shape=std::vector({});tensor_out.data=PaddleBuf();tensor_out.dtype=PaddleDType::FLOAT32;std::vectoroutputs(1,tensor_out);std::cout<Run(paddle_tensor_feeds,&outputs);std::cout<(outputs[0].data.data());for(size_tj=0;jmax){max=val>max?val:max;iindex=i;}}label_list={"airplane","automobile","bird","cat","deer","dog","frog","horse","ship","truck"};std::cout<

5、編譯運(yùn)行

insmod/home/root/workspace/driver/fpgadrv.kocd/home/root/workspace/sample/sample_image_catdogmkdirbuildcdbuildrm‐rf*cmake..make./paddle_edgeboard

修改main文件要預(yù)測(cè)的圖像:

6、修改main文件后重復(fù)執(zhí)行預(yù)測(cè),可得結(jié)果如下:圖像處理時(shí)間大概為:0.006秒,預(yù)測(cè)時(shí)間大概為:0.008秒

7、連續(xù)預(yù)測(cè)10000次所用時(shí)間為:23.7168

性能對(duì)比(連續(xù)預(yù)測(cè)10000次 單位:秒)

平臺(tái)前處理耗時(shí)模型預(yù)測(cè)耗時(shí)
Edgeboard0.00623.7168
CPU(AISTUDIO平臺(tái)雙核8G)0.00062716.2464
GPU(AISTUDIO平臺(tái)雙核8G+GPU V100 16GB)0.00063915.9030

總結(jié)

優(yōu)點(diǎn):

1. EdgeBoard內(nèi)置的Paddle-Mobile,可以與Paddle訓(xùn)練出來(lái)的模型進(jìn)行較好的對(duì)接。

2. 預(yù)測(cè)速度上: Edge在預(yù)測(cè)小模型的時(shí)候,能與雙核CPU和GPU在一個(gè)數(shù)量級(jí),估計(jì)是模型較小,batch size也

為1,gpu,cpu的性能優(yōu)勢(shì)抵不過(guò)通信的開(kāi)銷(xiāo),后續(xù)將進(jìn)行大模型、高batch size的測(cè)試。

3. 提供的demo也足夠簡(jiǎn)單,修改起來(lái)難度很低。

不足:

1. Paddle-Mobile相關(guān)文檔具有一定門(mén)檻,且較為分散。初次使用的時(shí)候會(huì)走一些彎路出現(xiàn)問(wèn)題的時(shí)候往往是個(gè)

黑盒,不易于定位。在這次進(jìn)行模型訓(xùn)練的嘗試中,出現(xiàn)過(guò)一次op不支持的情況,我們?cè)诠倬W(wǎng)上甚至沒(méi)有找

到支持的op列表,這個(gè)在開(kāi)發(fā)哥們的支持下升級(jí)版本后解決。如果后續(xù)能在穩(wěn)定的固件版本下使用,并有比

較易用的sdk,開(kāi)發(fā)門(mén)檻可能會(huì)進(jìn)一步降低。


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于Label CIFAR10 image on FRDM-MCXN947例程實(shí)現(xiàn)鞋和帽子的識(shí)別

    NXP FRDM-MCXN947: 物體識(shí)別 ? ? 感謝這次評(píng)測(cè)活動(dòng),收到FRDM-MCXN947的板子。NXP官方提供了很多視覺(jué)識(shí)別的例程,今天我們就基于Label CIFAR10 image
    的頭像 發(fā)表于 01-13 09:18 ?117次閱讀
    基于Label <b class='flag-5'>CIFAR10</b> image on FRDM-MCXN947例程實(shí)現(xiàn)鞋和帽子的識(shí)別

    【RA8D1試用活動(dòng)】RA8D1B-CPKCOR開(kāi)發(fā)板移植linux

    【RA8D1試用活動(dòng)】RA8D1B-CPKCOR開(kāi)發(fā)板移植linux
    的頭像 發(fā)表于 11-16 01:02 ?315次閱讀
    【RA8D1<b class='flag-5'>試用</b>活動(dòng)】RA8D1B-CPKCOR開(kāi)發(fā)板<b class='flag-5'>移植</b>linux

    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實(shí)現(xiàn)Yolov5分類(lèi)檢測(cè)

    : NPU幫助機(jī)器完成更高效的翻譯、文本分類(lèi)和情感分析,推動(dòng)了自然語(yǔ)言處理技術(shù)的發(fā)展。 實(shí)例分享:Yolov5分類(lèi)檢測(cè) 在RK3588處理器上,不僅可以基于Linux系統(tǒng)使用NPU,也可以
    發(fā)表于 10-24 10:13

    【GD32 MCU 移植教程】9、從 STM32F10x 系列移植到 GD32F30x 系列

    對(duì)比、外設(shè)及性能對(duì)比以及從 STM32F10x 移植到 GD32F30x 的移植步驟,旨在讓開(kāi)發(fā)者能夠快速?gòu)腟TM32F10x 移植到 GD
    的頭像 發(fā)表于 09-07 09:57 ?972次閱讀
    【GD32 MCU <b class='flag-5'>移植</b>教程】9、從 STM32F<b class='flag-5'>10</b>x 系列<b class='flag-5'>移植</b>到 GD32F30x 系列

    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實(shí)現(xiàn)Yolov5分類(lèi)檢測(cè)-迅為電子

    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實(shí)現(xiàn)Yolov5分類(lèi)檢測(cè)-迅為電子
    的頭像 發(fā)表于 08-23 14:58 ?834次閱讀
    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實(shí)現(xiàn)Yolov5<b class='flag-5'>分類(lèi)</b>檢測(cè)-迅為電子

    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實(shí)現(xiàn)Yolov5分類(lèi)檢測(cè)

    : NPU幫助機(jī)器完成更高效的翻譯、文本分類(lèi)和情感分析,推動(dòng)了自然語(yǔ)言處理技術(shù)的發(fā)展。 實(shí)例分享:Yolov5分類(lèi)檢測(cè) 在RK3588處理器上,不僅可以基于Linux系統(tǒng)使用NPU,也可以
    發(fā)表于 08-20 11:13

    國(guó)產(chǎn)芯上運(yùn)行TinyMaxi輕量級(jí)的神經(jīng)網(wǎng)絡(luò)推理庫(kù)-米爾基于芯馳D9國(guó)產(chǎn)商顯板

    使用 make 命令構(gòu)建系統(tǒng),生成可執(zhí)行文件 運(yùn)行可執(zhí)行文件,執(zhí)行效果如下 MBNET 示例運(yùn)行輸入了一張 96×96×3 的 RGB 圖像,輸出 1000 分類(lèi),共消耗了 16.615 毫秒 運(yùn)行cifar10 demo
    發(fā)表于 08-09 18:26

    國(guó)產(chǎn)芯上運(yùn)行TinyMaxi輕量級(jí)的神經(jīng)網(wǎng)絡(luò)推理庫(kù)-米爾基于芯馳D9國(guó)產(chǎn)商顯板

    如下 MBNET 示例運(yùn)行輸入了一張 96×96×3 的 RGB 圖像,輸出 1000 分類(lèi),共消耗了 16.615 毫秒 運(yùn)行cifar10 demo
    發(fā)表于 08-07 18:06

    鑒源實(shí)驗(yàn)室·ISO 26262中測(cè)試用例的得出方法-等價(jià)類(lèi)的生成和分析

    標(biāo)準(zhǔn)規(guī)范中給出了單元、集成、系統(tǒng)測(cè)試各階段的建議測(cè)試使用方法,設(shè)計(jì)生成測(cè)試用例的建議方法包括需求分析、等價(jià)類(lèi)的生成和分析、邊界值分析、基于已有經(jīng)驗(yàn)和知識(shí)的錯(cuò)誤推測(cè)等等,從本篇開(kāi)始我們對(duì)測(cè)試用例設(shè)計(jì)生成的方法進(jìn)行介紹。 01 開(kāi)
    的頭像 發(fā)表于 07-30 15:37 ?579次閱讀
    鑒源實(shí)驗(yàn)室·ISO 26262中測(cè)<b class='flag-5'>試用</b>例的得出方法-等價(jià)<b class='flag-5'>類(lèi)</b>的生成和分析

    lpm模型里的zi是什么

    個(gè)關(guān)鍵的參數(shù),用于表示個(gè)體特征或協(xié)變量。 LPM模型的基本概念 2.1 Logit模型 Logit模型是一種用于分析二分類(lèi)問(wèn)題的概率模型。在
    的頭像 發(fā)表于 07-09 10:09 ?523次閱讀

    人工智能神經(jīng)網(wǎng)絡(luò)模型有哪些

    Rosenblatt在1957年提出。感知機(jī)是一個(gè)二分類(lèi)模型,它通過(guò)一組權(quán)重和偏置來(lái)計(jì)算輸入特征的線性組合,然后通過(guò)一個(gè)激活函數(shù)(通常是符號(hào)函數(shù)或階躍函數(shù))來(lái)決定輸出。 多層感知機(jī)(Multilayer Perceptron, MLP) : 多層感知機(jī)是感知機(jī)的擴(kuò)展,它
    的頭像 發(fā)表于 07-04 09:41 ?715次閱讀

    基于神經(jīng)網(wǎng)絡(luò)的呼吸音分類(lèi)算法

    出的方法與其他機(jī)器學(xué)習(xí)模型在不同情況下的性能和魯棒性進(jìn)行比較。1.用于初始模型檢查的簡(jiǎn)單噪聲二值分類(lèi)實(shí)驗(yàn)。2.使用個(gè)體呼吸周期作為輸入的4類(lèi)異常分類(lèi)
    發(fā)表于 05-31 12:05

    百度大腦EdgeBoard介紹

    對(duì)于開(kāi)發(fā)者而言,EdgeBoard是一款面向各個(gè)層次的AI開(kāi)發(fā)者的硬件平臺(tái),可以直接運(yùn)載神經(jīng)網(wǎng)絡(luò)模型,提供強(qiáng)大的運(yùn)行算力,并具備模型剪枝和量化加速的功能。它具備強(qiáng)大的計(jì)算能力和靈活的擴(kuò)展性,可以支持
    的頭像 發(fā)表于 05-15 09:50 ?569次閱讀
    百度大腦<b class='flag-5'>EdgeBoard</b>介紹

    【大語(yǔ)言模型:原理與工程實(shí)踐】大語(yǔ)言模型的評(píng)測(cè)

    和產(chǎn)品化提供了有力的數(shù)據(jù)支持。 對(duì)于生活閑聊類(lèi)評(píng)測(cè)任務(wù),模型的回答主要從人性化程度、內(nèi)容質(zhì)量和社交適應(yīng)性三個(gè)方面進(jìn)行考察。這些方面共同反映了模型在日常對(duì)話中的自然度、流暢度和應(yīng)變能力。而方法論指導(dǎo)
    發(fā)表于 05-07 17:12

    PTCRB的測(cè)試用類(lèi)認(rèn)證等級(jí)分類(lèi)介紹

    PTCRB的測(cè)試用類(lèi)認(rèn)證等級(jí)CategoryA/B/EA類(lèi)項(xiàng):測(cè)試用例在商用系統(tǒng)上經(jīng)過(guò)完全驗(yàn)證;必測(cè)項(xiàng)且需要結(jié)果為PASSB類(lèi)項(xiàng):測(cè)試用例在商用系統(tǒng)上經(jīng)過(guò)部分驗(yàn)證(標(biāo)準(zhǔn)或系統(tǒng)有缺陷);
    的頭像 發(fā)表于 03-14 16:46 ?442次閱讀
    PTCRB的測(cè)<b class='flag-5'>試用</b><b class='flag-5'>類(lèi)</b>認(rèn)證等級(jí)<b class='flag-5'>分類(lèi)</b>介紹