99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

海思NNIE之Mobilefacenet量化部署教程

電子設(shè)計(jì) ? 來源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-12-10 18:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

當(dāng)您點(diǎn)進(jìn)這篇文章,我想肯定不需要過多的去向您介紹華為海思35xx系列芯片的型號(hào)參數(shù)或者強(qiáng)大之處。另外這個(gè)教程也是建立已經(jīng)配置好環(huán)境,并掌握Ruyi Studio的基本使用前提下的。如果還沒有跑過其中的一些sample,網(wǎng)上也有一些教程,推薦看劉山老師的博客
作者:Hanson
首發(fā)知乎

疫情期間天天打游戲,感覺一陣罪惡,就將以前的做過的東西分享一下,希望能幫助到其他人。之后也會(huì)開源一些海思上的模型和inference代碼,比如retinaface等,歡迎關(guān)注

1.簡(jiǎn)介

海思35xx系列芯片對(duì)比起nvidia TX2、Intel Movidius神經(jīng)計(jì)算棒等一眾邊緣計(jì)算產(chǎn)品,有其驚艷的地方,因其集成了強(qiáng)大的算力模塊,集成度和功能模塊齊全,最重要的是成本低,成為了安防行業(yè)的首選芯片。但是也有一些麻煩的地方,主要是在于其開發(fā)難度的提高,大家都是摸著石頭過河(3288老玩家轉(zhuǎn)行也是能體會(huì)到痛苦的)。在轉(zhuǎn)自己的模型時(shí),坑比想象的要多,并且海思官方SDK也存在一些錯(cuò)誤之處,讓人很難捉摸,所以有時(shí)候需要自己多去獨(dú)立思考。這次我記錄了在轉(zhuǎn)換人臉識(shí)別模型mobilefacenet下了比較坑的三個(gè)點(diǎn),畢竟是個(gè)新玩意兒,多半是版本發(fā)布時(shí)候不統(tǒng)一造成的:

  • CNN_convert_bin_and_print_featuremap.py 代碼出現(xiàn)錯(cuò)誤,cfg中的【image_list】這個(gè)字段并沒有在代碼中出現(xiàn),代碼中只有【image_file】,因此需要修改這一地方;
  • CNN_convert_bin_and_print_featuremap.py和Get Caffe Output這里的預(yù)處理方式都是先乘以【data_scale】,再減均值【mean_file】,而在量化生成 .mk 文件時(shí)卻是先減均值再乘以scale的
  • 量化需要使用多張圖片,而CNN_convert_bin_and_print_featuremap.py各層產(chǎn)生的feature僅僅是一張圖片,這在做【Vector Comparision】時(shí)候就難以清楚的明白到底最后mk文件是第幾張圖像

2.目錄結(jié)構(gòu)

3.mobilefacenet.cfg文件的配置

可以從github上下載mxnet2caffe的mobilefacenet模型,

首先要修改mobilefacenet.prototxt的輸入層以符合NNIE caffe網(wǎng)絡(luò)的結(jié)構(gòu)標(biāo)準(zhǔn)

更改后如下:

而量化mk使用的【mean_file】pixel_mean.txt是特別需要注意的

我從agedb_30人臉數(shù)據(jù)庫(kù)里面挑選了10張圖像來做量化處理,為什么需要多張量化,請(qǐng)參考文章Int8量化-介紹(一),我們選擇【10.jpg】來做 【Vector Comparision】,其實(shí)就是imageList.txt里的排列在最后的那張圖片

具體配置如下:

[prototxt_file] ./mark_prototxt/mobilefacenet_mark_nnie_20190723102335.prototxt
[caffemodel_file] ./data/face/mobilefacenet.caffemodel
[batch_num] 256
[net_type] 0
[sparse_rate] 0
[compile_mode] 0
[is_simulation] 0
[log_level] 3
[instruction_name] ./data/face/mobilefacenet_inst
[RGB_order] RGB
[data_scale] 0.0078125
[internal_stride] 16
[image_list] ./data/face/images/imageList20190723102419.txt
[image_type] 1
[mean_file] ./data/face/pixel_mean.txt
[norm_type] 5

4.生成NNIE mk模型

Start [RuyiStudio Wk NNIE Mapper] [E:/Code/nnie/windows/RuyiStudio-2.0.31/workspace/HeilsFace/mobilefacenet.cfg] HeilsFace (2019-07-23 10:48:17)
Mapper Version 1.1.2.0_B050 (NNIE_1.1) 1812171743151709
begin net parsing....
.end net parsing
begin prev optimizing....
....end prev optimizing....
begin net quantalizing(GPU)....


....................**********************************************************
WARNING: file: Inference::computeNonlinearQuantizationDelta  line: 92
data containing only zeros; set max value to 1e-6.
**********************************************************
WARNING: file: Inference::computeNonlinearQuantizationDelta  line: 92
data containing only zeros; set max value to 1e-6.
.......................................


end quantalizing
begin optimizing....
.end optimizing
begin NNIE[0] mem allocation....
...end NNIE[0] memory allocating
begin NNIE[0] instruction generating....
.............end NNIE[0] instruction generating
begin parameter compressing....
.end parameter compressing
begin compress index generating....
end compress index generating
begin binary code generating....
...................................................................................
...................................................................................
..................................................................................
...................................................................................
.............end binary code generating
begin quant files writing....
end quant files writing
===============E:/Code/nnie/windows/RuyiStudio-2.0.31/workspace/HeilsFace/mobilefacenet.cfg Successfully!===============

結(jié)束之后會(huì)生成:

  • mobilefacenet_inst.wk文件
  • mapper_quant文件夾,里面有量化輸出的結(jié)果,如圖 Fig.4.1,也就是./data/face/images/10.jpg


Fig.4.1 [image_list]./data/face/images/imageList20190723102419.txt

記住,mk量化過程在【mapper_quant】文件夾中生成的features是最后一張圖片的inference結(jié)果,這也是文章最開始說的第三個(gè)存在問題的地方

5.Vector Comparision

這一步,主要就是對(duì)比量化前后模型輸出的精度損失,最重要的就是要debug一遍CNN_convert_bin_and_print_featuremap.py

因?yàn)檫@個(gè)腳本里確實(shí)藏了很多雷,我們先要比較原框架原模型inference的結(jié)果與這一腳本得出來的結(jié)果是否一致,如果存在不一致的情況,需要去核查一遍原因

文章開篇說到的第一個(gè)問題點(diǎn) CNN_convert_bin_and_print_featuremap.py 中加載了mobilefacenet.cfg文件,但腳本中并不存在【image_list】這個(gè)字段,取而代之的是【image_file】這個(gè)字段

生成NNIE mk中,mobliefacenet.cfg 的【image_list】:


Fig.5.1 生成NNIE mk中的mobliefacenet.cfg

CNN_convert_bin_and_print_featuremap.py 中加載.cfg代碼片段:

因此需要根據(jù)實(shí)際情況修改 mobliefacenet.cfg ,這里最好是復(fù)制一份新的,舊的用于生成NNIE wk,在復(fù)制后的mobliefacenet.cfg中修改一下:

另外,我們需要特別注意預(yù)處理這一個(gè)環(huán)節(jié),如文章開篇所闡述的第二點(diǎn)

我們注意到這里,data是uint8類型的array,是先乘以了【data_scale】的,也就是說和NNIE 生成wk中的操作順序是不一致的。

(data - 128.0) 0.0078125 <==> data 0.0078125 - 1

因此這里需要做的修改就是需要將【mean_file】pixel_mean.txt修改為

修改完以上,然后直接運(yùn)行代碼,將最終模型提取的features fc1_output0_128_caffe.linear.float和caffe_forward.py中的進(jìn)行比對(duì),如果以上都沒問題,可以看到結(jié)果是幾乎一致的

caffe_forward.py生成的結(jié)果:

[-0.82475293 -0.33066949 -0.9848339   2.44199681 0.41715512  0.67809981   0.29879519  1.14293635 -0.42905819  0.32940909 -1.20455348  1.01217067 0.83146936 -0.84349883 -1.49177814 -0.91509151 -1.39441037  0.00413842  0.97043389 -1.77688181  0.28639579 -1.06645989 -0.8570649  -2.09743094 -0.1394622  -1.15035641 -0.81590587 -3.93798804 -0.35600579  1.90367532 1.27935755 -2.07778478 -0.42563218  0.06624207  1.02597868 -0.52002895 -0.905873   -0.41364694 -1.40032899 -1.37654066  0.03066693 -0.18659458 -1.53931415 -0.55896652  2.42570448 -0.3044413   0.18183242  0.50442797 -2.36735368 -0.12376076  0.15200013  0.13939141  0.56305337 -0.10047323 1.50704932  0.05429612 -1.97527623 -0.75790995  1.89399767  0.56089604
 -2.34883094  0.22600658  1.00399816 -0.55099922  1.77083731  0.10722937 2.21140814  0.06182361  0.03354079  0.97481596 -2.00423741  0.73168194 -1.79977489 -0.85182911 -0.06020565 -0.14835797 -1.93012297 -3.09269047 -0.60087907 -1.02915597  1.40985525  1.85411906 -1.21282506 -2.53264689 -0.63467324 -1.15255475 -0.59994221  0.21181655  1.30336523 -1.73625863 0.00861333  0.99906266  1.90666902  0.51179212  0.62143475  1.01997399 -1.65181398  1.55190873  0.43448481 -0.85371047 -0.68216199  1.28038061 0.4629558  -0.59671575  1.00122356  1.74233603  1.50384009  0.49827856 0.67030573 -1.20388556  1.00168729 -0.71768999  1.06416941 -2.55346298 -1.85579956 -2.18774438 -1.79652691  1.50856853  2.10628557  1.12313557 2.76396179  0.60242128  0.0550903  -1.31998527 -0.6896565  -0.07160443 1.21242583 -1.06733179]

CNN_convert_bin_and_print_featuremap.py生成的結(jié)果(由于特征值太多,就不一一打印出來了):

然后在生成,并進(jìn)行【Vector Comparision】,量化終于成功了

6.NNIE mobilefacenet板上特征提取

做完了模型的量化,就可以進(jìn)行仿真或者是在板子上進(jìn)行實(shí)際測(cè)試了,這一步的坑并不是很多,主要還是得靠一些編程技巧了,建議熟悉C語(yǔ)言,這部分要熟悉sample代碼,如果說非常熟悉c/c++混編,也可以使用c++。

1. 修改例程

這里我參考了博客,其寫法幾乎一致,如下Fig.6.1 Fig.6.2是我所修改的代碼片段,找到smp/a7_linux/mpp/sample/svp/nnie/sample/sample_nnie.c中該函數(shù)

void SAMPLE_SVP_NNIE_Cnn(void)

只用修改了該函數(shù)的前后兩處代碼


Fig.6.1 函數(shù)開頭修改pcSrcFile和pcModeName


Fig.6.2 函數(shù)結(jié)尾增加輸出層的打印信息

我們調(diào)用了 SAMPLE_SVP_NNIE_PrintReportResult 函數(shù)輸出兩個(gè)結(jié)果報(bào)表文件,結(jié)果分析當(dāng)中會(huì)用到

seg0_layer38_output0_inst.linear.hex
seg0_layer3605_output0_inst.linear.hex

整段函數(shù)代碼參見文章末尾【附錄】

2. bgr文件的生成

注意到上文中我使用了pcSrcFile,這也是例程中主流的格式bgr,那么我們一般的圖片都是.jpeg格式的,為了更好的利用NNIE,所以就需要利用opencv來轉(zhuǎn)化以下。

首先.bgr文件是可以由opencv Mat轉(zhuǎn)換的,但完成轉(zhuǎn)換代碼的編寫之前我們必須清楚像素的空間排列順序。注意,以下轉(zhuǎn)換代碼簡(jiǎn)單采用像素復(fù)制,并沒有考慮優(yōu)化,運(yùn)行會(huì)比較慢!參考博客

.bgr ==> BBBBBB...GGGGGG...RRRRRR

cv::Mat ==> BGRBGRBGR...BGRBGRBGR

.bgr --> cv::Mat


Fig.6.3 .bgr 轉(zhuǎn) mat

/*bgr格式 轉(zhuǎn) cv::Mat代碼 */
int bgr2mat(cv::Mat& img, int width, int height, int channel, const char* pth)
{
    if (pth)
    {
        FILE* fp;
        unsigned char *img_data = NULL;
        unsigned char *img_data_conv = NULL;
        img_data = (unsigned char*)malloc(sizeof(unsigned char) * width * height * channel);
        //unsigned char img_data[300 * 300 * 3];
        img_data_conv = (unsigned char*)malloc(sizeof(unsigned char) * width * height * channel);

        fp = fopen(pth, "rb");
        if (!fp)
        {
            return 0;
        }
        fread(img_data, 1, width * height * channel, fp);
        fclose(fp);

        for (size_t k = 0; k < channel; k++)
            for (size_t i = 0; i < height; i++)
                for (size_t j = 0; j < width; j++)
                    img_data_conv[channel * (i * width + j) + k] = img_data[k * height * width + i * width + j];
        img = cv::Mat(height, width, CV_8UC3, img_data_conv);
        //free(img_data_conv);
        //img_data_conv = NULL;
        free(img_data);
        img_data = NULL;
        return 1;
    }
    return 0;
}

cv::Mat -->.bgr


Fig.6.4 mat轉(zhuǎn).bgr

/*cv::Mat 轉(zhuǎn) bgr格式代碼 */
int mat2bgr(cv::Mat& img, const char* bgr_path)
{
    if (bgr_path)
    {
        FILE* fp = fopen(bgr_path, "wb");
        int step = img.step;
        int h = img.rows;
        int w = img.cols;
        int c = img.channels();
        std::cout << step<< std::endl;
        for (int k = 0; k < c; k++)
            for (int i = 0; i < h; i++)
                for (int j = 0; j < w; j++)
                {
                    //兩種寫法
                    //fwrite(&img.data[i*step + j * c + k], sizeof(uint8_t), 1, fp);
                    fwrite(&img.data[c*(i * w + j) + k], sizeof(uint8_t), 1, fp);
                }
        fclose(fp);
        //cv::Mat tmp;
        //bgr2mat(tmp, w, h, 3, bgr_path);
        //cv::imshow("tmp", tmp);
        //cv::waitKey(0);
        return 1;
    }
    return 0;
}

3. 模型額外問題

pc上運(yùn)行
E:/Code/nnie/software/sample_simulator/Release/sample_simulator.exe

板上運(yùn)行
/nfsroot/Hi3516CV500_SDK_V2.0.1.0/smp/a7_linux/mpp/sample/svp/nnie # ./sample_nnie_main 4

可能會(huì)出現(xiàn)如下(Fig.6.5,F(xiàn)ig.6.6)錯(cuò)誤,原因是生成NNIE wk文件的mapper工具有版本要求,下面錯(cuò)誤當(dāng)中使用的nnie mapper 版本是V1.1.2.0,而指令仿真或者是板上的SDK是V1.2的,解決辦法就是使用nnie mapper V1.2版本重新生成一下wk模型,如(Fig.6.7),生成inst/chip.wk的時(shí)間比較久,在我機(jī)器上大概要2個(gè)小時(shí),因?yàn)閕nst.wk實(shí)際上是需要進(jìn)行參數(shù)壓縮和二進(jìn)制代碼生成,這可能也是inst.mk比func.wk文件大的原因(如Fig.6.8),而生成func.wk的時(shí)間會(huì)比較短,建議在PC上調(diào)試的時(shí)候選擇func/simulation模型


Fig.6.5 PC運(yùn)行仿真例程sample_simulator會(huì)出現(xiàn)該log


Fig.6.6 板上測(cè)試SDK修改的例程


Fig.6.7 改變工程依賴的NNIE版本為指定芯片


Fig.6.8 模型尺寸比較

4. 運(yùn)行結(jié)果及分析

修改完sample_nnie.c中的代碼后,在宿主機(jī)上進(jìn)行make,然后到海思板子上運(yùn)行可執(zhí)行文件即可


Fig.6.9 板上運(yùn)行結(jié)果

拷貝出生成的兩個(gè)打印報(bào)表文件到Ruyi studio,進(jìn)行比對(duì)測(cè)試

seg0_layer38_output0_inst.linear.hex
seg0_layer3605_output0_inst.linear.hex

如Fig.6.10,F(xiàn)ig.6.11,雖然說板上和仿真情況下還是會(huì)有一定的差別,但總體的誤差是比較小的,基本可以接受,如果無法接受,可以嘗試int16模型


Fig.6.10 量化模型在板子上的輸出結(jié)果和pc上的結(jié)果比對(duì)(cosine similarity > 99.6)


Fig.6.11 無量化caffe輸出與板上量化輸出比對(duì)(cosine similarity > 99.1)

7.附錄

void SAMPLE_SVP_NNIE_Cnn(void)
{
    HI_CHAR *pcSrcFile = "./data/nnie_image/rgb_planar/10.bgr";
    HI_CHAR *pcModelName = "./data/nnie_model/face/mobilefacenet_inst.wk";
    HI_U32 u32PicNum = 1;
    HI_S32 s32Ret = HI_SUCCESS;
    SAMPLE_SVP_NNIE_CFG_S   stNnieCfg = {0};
    SAMPLE_SVP_NNIE_INPUT_DATA_INDEX_S stInputDataIdx = {0};
    SAMPLE_SVP_NNIE_PROCESS_SEG_INDEX_S stProcSegIdx = {0};

    /*Set configuration parameter*/
    stNnieCfg.pszPic= pcSrcFile;
    stNnieCfg.u32MaxInputNum = u32PicNum; //max input image num in each batch
    stNnieCfg.u32MaxRoiNum = 0;
    stNnieCfg.aenNnieCoreId[0] = SVP_NNIE_ID_0;//set NNIE core
    s_stCnnSoftwareParam.u32TopN = 5;

    /*Sys init*/
    SAMPLE_COMM_SVP_CheckSysInit();

    /*CNN Load model*/
    SAMPLE_SVP_TRACE_INFO("Cnn Load model!/n");
    s32Ret = SAMPLE_COMM_SVP_NNIE_LoadModel(pcModelName,&s_stCnnModel);
    SAMPLE_SVP_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret,CNN_FAIL_0,SAMPLE_SVP_ERR_LEVEL_ERROR,
        "Error,SAMPLE_COMM_SVP_NNIE_LoadModel failed!/n");

    /*CNN parameter initialization*/
    /*Cnn software parameters are set in SAMPLE_SVP_NNIE_Cnn_SoftwareParaInit,
     if user has changed net struct, please make sure the parameter settings in
     SAMPLE_SVP_NNIE_Cnn_SoftwareParaInit function are correct*/
    SAMPLE_SVP_TRACE_INFO("Cnn parameter initialization!/n");
    s_stCnnNnieParam.pstModel = &s_stCnnModel.stModel;
    s32Ret = SAMPLE_SVP_NNIE_Cnn_ParamInit(&stNnieCfg,&s_stCnnNnieParam,&s_stCnnSoftwareParam);
    SAMPLE_SVP_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret,CNN_FAIL_0,SAMPLE_SVP_ERR_LEVEL_ERROR,
        "Error,SAMPLE_SVP_NNIE_Cnn_ParamInit failed!/n");

    /*record tskBuf*/
    s32Ret = HI_MPI_SVP_NNIE_AddTskBuf(&(s_stCnnNnieParam.astForwardCtrl[0].stTskBuf));
    SAMPLE_SVP_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret,CNN_FAIL_0,SAMPLE_SVP_ERR_LEVEL_ERROR,
        "Error,HI_MPI_SVP_NNIE_AddTskBuf failed!/n");

    /*Fill src data*/
    SAMPLE_SVP_TRACE_INFO("Cnn start!/n");
    stInputDataIdx.u32SegIdx = 0;
    stInputDataIdx.u32NodeIdx = 0;
    s32Ret = SAMPLE_SVP_NNIE_FillSrcData(&stNnieCfg,&s_stCnnNnieParam,&stInputDataIdx);
    SAMPLE_SVP_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret,CNN_FAIL_1,SAMPLE_SVP_ERR_LEVEL_ERROR,
        "Error,SAMPLE_SVP_NNIE_FillSrcData failed!/n");

    /*NNIE process(process the 0-th segment)*/
    stProcSegIdx.u32SegIdx = 0;
    s32Ret = SAMPLE_SVP_NNIE_Forward(&s_stCnnNnieParam,&stInputDataIdx,&stProcSegIdx,HI_TRUE);
    SAMPLE_SVP_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret,CNN_FAIL_1,SAMPLE_SVP_ERR_LEVEL_ERROR,
        "Error,SAMPLE_SVP_NNIE_Forward failed!/n");

    /*Software process*/
    /*if user has changed net struct, please make sure SAMPLE_SVP_NNIE_Cnn_GetTopN
     function's input datas are correct*/
    s32Ret = SAMPLE_SVP_NNIE_Cnn_GetTopN(&s_stCnnNnieParam,&s_stCnnSoftwareParam);
    SAMPLE_SVP_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret,CNN_FAIL_1,SAMPLE_SVP_ERR_LEVEL_ERROR,
        "Error,SAMPLE_SVP_NNIE_CnnGetTopN failed!/n");

    /*Print result*/
    SAMPLE_SVP_TRACE_INFO("Cnn result:/n");
    s32Ret = SAMPLE_SVP_NNIE_Cnn_PrintResult(&(s_stCnnSoftwareParam.stGetTopN),
        s_stCnnSoftwareParam.u32TopN);
    SAMPLE_SVP_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret,CNN_FAIL_1,SAMPLE_SVP_ERR_LEVEL_ERROR,
        "Error,SAMPLE_SVP_NNIE_Cnn_PrintResult failed!/n");

    /*Print results*/
    {
        printf("features:/n{/n");
        printf("stride: %d/n",s_stCnnNnieParam.astSegData[0].astDst[0].u32Stride);
        printf("blob type :%d/n",s_stCnnNnieParam.astSegData[0].astDst[0].enType);
        printf("{/n/tc :%d", s_stCnnNnieParam.astSegData[0].astDst[0].unShape.stWhc.u32Chn);
        printf("/n/th :%d", s_stCnnNnieParam.astSegData[0].astDst[0].unShape.stWhc.u32Height);
        printf("/n/tw :%d /n}/n", s_stCnnNnieParam.astSegData[0].astDst[0].unShape.stWhc.u32Width);
        HI_S32* ps32Score = (HI_S32* )((HI_U8* )s_stCnnNnieParam.astSegData[0].astDst[0].u64VirAddr);
        printf("blobs fc1:/n[");
        for(HI_U32 i = 0; i < 128; i++)
        {
            printf("%f ,",*(ps32Score + i) / 4096.f);
        }
        
        printf("]/n}/n");
    }
    s32Ret = SAMPLE_SVP_NNIE_PrintReportResult(&s_stCnnNnieParam);
    SAMPLE_SVP_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, CNN_FAIL_1, SAMPLE_SVP_ERR_LEVEL_ERROR,"Error,SAMPLE_SVP_NNIE_PrintReportResult failed!");

CNN_FAIL_1:
    /*Remove TskBuf*/
    s32Ret = HI_MPI_SVP_NNIE_RemoveTskBuf(&(s_stCnnNnieParam.astForwardCtrl[0].stTskBuf));
    SAMPLE_SVP_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret,CNN_FAIL_0,SAMPLE_SVP_ERR_LEVEL_ERROR,
        "Error,HI_MPI_SVP_NNIE_RemoveTskBuf failed!/n");

CNN_FAIL_0:
    SAMPLE_SVP_NNIE_Cnn_Deinit(&s_stCnnNnieParam,&s_stCnnSoftwareParam,&s_stCnnModel);
    SAMPLE_COMM_SVP_CheckSysExit();
}
更多模型芯片端部署,請(qǐng)關(guān)注嵌入式AI專欄

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    DeepseekSD3403邊緣計(jì)算AI產(chǎn)品系統(tǒng)

    SD3403邊緣計(jì)算AI框架,提供了一套開放式AI訓(xùn)練產(chǎn)品工具包,解決客戶低成本AI系統(tǒng),針對(duì)差異化AI 應(yīng)用場(chǎng)景,自己采集樣本數(shù)據(jù),進(jìn)行AI特征標(biāo)定,AI模型訓(xùn)練,AI應(yīng)用部署的系統(tǒng),用戶
    發(fā)表于 04-28 11:05

    3559開發(fā)板

    `創(chuàng)發(fā)布3559開發(fā)板,深圳市前海海芯創(chuàng)科技有限公司定位專注于為領(lǐng)先的消費(fèi)類電子產(chǎn)品解決方案商。與
    發(fā)表于 09-11 11:33

    基于帶NNIE神經(jīng)網(wǎng)絡(luò)3559A方案邊緣計(jì)算主板開發(fā)及接口定義

    硬件配置——————————————————————————————————-Hi3559AV100 CPU,雙核ARM CortexA73@1.8GHz+雙核ARM Cortex
    發(fā)表于 06-20 11:32

    深圳專業(yè)回收IC 收購(gòu)芯片

    芯片大量收購(gòu),高價(jià)回收芯片IC ☆★★帝歐電子趙先生 135★★3012★★2202☆★★ QQ :8798-21252 (同步微信)【【
    發(fā)表于 09-26 17:55

    深圳高價(jià)回收系列芯片

    深圳回收系列芯片深圳高價(jià)回收系列芯片,東莞專業(yè)回收系列芯片,重慶高價(jià)收購(gòu)
    發(fā)表于 10-20 19:13

    芯片大量收購(gòu),高價(jià)回收IC

    芯片大量收購(gòu),高價(jià)回收IC ☆★★帝歐電子趙先生 135-3012-2202☆★★ QQ :8798-21252(同步微信)Hisilicon 電子芯片收購(gòu), 收購(gòu)Hisili
    發(fā)表于 12-28 17:04

    潤(rùn)和3559A開發(fā)版例程編譯

    用編譯鏈編譯3559A的SDK中NNIE范例程序,上載至潤(rùn)和的開發(fā)版上運(yùn)行。板卡執(zhí)行YOLOv3的硬件參數(shù)寫入函數(shù)時(shí)產(chǎn)生了內(nèi)核錯(cuò)誤Unable to handle kernel NULL
    發(fā)表于 06-29 12:29

    潤(rùn)和3559A開發(fā)版nnie例程運(yùn)行過程中系統(tǒng)崩潰

    根據(jù)(35條消息) 華為 AI 芯片 (Hi3559A V100) 算法開發(fā)(五) 在 Hi3559 上運(yùn)行 YOLOv3_Sober-C的博客-CSDN博客_hi3559 yolov3流程在hi3559av100開發(fā)板上運(yùn)行nni
    發(fā)表于 09-06 10:15

    帶你玩轉(zhuǎn)OpenHarmony AI-基于NNIE的AI能力自定義

    。方便廣大開發(fā)者更好地了解和掌握NNIE AI開發(fā)。OpenHarmony AI能力的豐富離不開廣大開發(fā)者的參與和共建,也期待更多的開發(fā)者加入知識(shí)體系組,做出更多富有想象力的作品!參考鏈接
    發(fā)表于 01-12 11:39

    AI芯片方案學(xué)習(xí)(二十三)nnie上進(jìn)行圖像數(shù)據(jù)預(yù)處理(Normalize)的五種方式

    本系列為華為AI芯片(Hi3519A/3559A)方案學(xué)習(xí)系列之二十三,系列文章請(qǐng)關(guān)注
    發(fā)表于 01-26 18:42 ?3次下載
    <b class='flag-5'>海</b><b class='flag-5'>思</b>AI芯片方案學(xué)習(xí)(二十三)<b class='flag-5'>nnie</b>上進(jìn)行圖像數(shù)據(jù)預(yù)處理(Normalize)的五種方式

    AI芯片方案學(xué)習(xí)(二十二)如何在ubuntu18.0.4上跑通nnie mapper

    本系列為華為AI芯片(Hi3519A/3559A)方案學(xué)習(xí)系列之二十二,系列文章請(qǐng)關(guān)注
    發(fā)表于 01-26 18:42 ?6次下載
    <b class='flag-5'>海</b><b class='flag-5'>思</b>AI芯片方案學(xué)習(xí)(二十二)如何在ubuntu18.0.4上跑通<b class='flag-5'>nnie</b> mapper

    AI芯片(Hi3519A/3559A)方案學(xué)習(xí)(十五)基于nnie引擎進(jìn)行推理的仿真代碼淺析

    本系列為華為AI芯片(Hi3519A/3559A)方案學(xué)習(xí)系列十五,主要對(duì)基于nnie
    發(fā)表于 01-26 18:56 ?9次下載
    <b class='flag-5'>海</b><b class='flag-5'>思</b>AI芯片(Hi3519A/3559A)方案學(xué)習(xí)(十五)基于<b class='flag-5'>nnie</b>引擎進(jìn)行推理的仿真代碼淺析

    AI芯片學(xué)習(xí)(十)將yolov3 darknet模型轉(zhuǎn)換為caffemodel

    35xx系列的nnie硬件引擎只支持caffe1.x模型。所以任何使用其它框架訓(xùn)練出來的算法模型想要在nnie上進(jìn)行推理必須先要將其轉(zhuǎn)換成caffe...
    發(fā)表于 01-26 19:09 ?0次下載
    <b class='flag-5'>海</b><b class='flag-5'>思</b>AI芯片學(xué)習(xí)(十)將yolov3 darknet模型轉(zhuǎn)換為caffemodel

    NNIEPFPLD訓(xùn)練與量化

    之前寫了關(guān)于NNIE的一些量化部署工作,筆者不才,文章沒有寫得很具體,有些內(nèi)容并沒有完全寫在里面。好在目前看到了一些使用nniefac.
    發(fā)表于 02-07 12:05 ?0次下載
    <b class='flag-5'>海</b><b class='flag-5'>思</b><b class='flag-5'>NNIE</b><b class='flag-5'>之</b>PFPLD訓(xùn)練與<b class='flag-5'>量化</b>

    NNIERetinaFace量化部署

    關(guān)于上述內(nèi)容,還是得到了一些認(rèn)可,索性把人臉全家福奉上了,接坑![鏈接]?nniefacelib是一個(gè)在35xx系列芯片上運(yùn)行的人臉?biāo)惴◣?kù),...
    發(fā)表于 02-07 12:32 ?1次下載
    <b class='flag-5'>海</b><b class='flag-5'>思</b><b class='flag-5'>NNIE</b><b class='flag-5'>之</b>RetinaFace<b class='flag-5'>量化</b><b class='flag-5'>部署</b>