嵌入式AI
文章平均质量分 79
ltshan139
这个作者很懒,什么都没留下…
展开
-
嘉楠k210方案模型移植的简单梳理
前言k210是一个面向AIOT应用的低功耗,低成本芯片方案。 它目前支持的深度学习模型类型有tensorflow tflite, caffe1.0以及onnx。 值得注意的是,这3个模型类型所支持的算子有限,这会导致复杂些模型不能在k210上运行。k210另外一个缺点是,它内置了SRAM, 给ai模型的内存大小只有2MB,也就是说它只能支持2MB以内的模型。移植流程由于我们项目的模型是yolov3 tiny,而且做了裁剪只有4MB左右大小。再去做8bit量化后只有1MB大小,所以是可以在k210原创 2021-04-11 00:34:27 · 5783 阅读 · 6 评论 -
海思芯片上LDC(镜头畸变校正)功能原理浅析
前言海思35xx芯片专门有一个模块GDC(Geometry Distortion Correction)来对畸变图片进行校正。它里面其实有两个应用case,一个是fisheye校正,另外一个是LDC镜头畸变校正。个人理解,两者主要区别是,前者主要用在摄像头镜头视角范围非常大,比如接近或超过180度,且想非常精细的对图像进行反畸变从而获得比较好的效果。 它一般需要先通过标定来获得摄像头畸变内参K1,K2,K3以及P1和P2(Kx指径向畸变参数,P指切向畸变参数),然后再进行反畸变。 而后者LDC主要用原创 2020-07-28 15:30:52 · 7359 阅读 · 1 评论 -
基于自己的双目标定参数来运行海思DPU模块
前言海思sample DPU代码只是大概讲解了Rect和Match的api调用过程。可能有人还是对如何将自己标定出来的参数运行在DPU上比较茫然。基于此,本文把这个思路理清下,希望能有所帮助。查找表的求得在《结合sample代码来分析海思DPU模块运行原理》中有提到,我们标定完双目摄像头得到左右摄像头的内参和外参后,就可以调用initUndistortRectifyMap()来分别得到左、右摄像头在x和y方向上的映射表mapx和mapy。拿到mapx和mapy后,要做的第一步就是将mapx和原创 2020-07-09 17:53:00 · 2265 阅读 · 1 评论 -
结合sample代码来分析海思DPU模块运行原理
前言海思DPU(Depth Process Unit)的中文翻译为深度信息处理单元,主要是来实现双目测距和三维重建的硬件加速功能从而提高实时性。海思SDK里面和DPU相关的文档资料很少,就两篇:《HiDPU工具使用指南》和《HiDPUAPI参考》。所以这里有必要结合sample代码来理清其思路。基本概念DPU包括两个子模块。一个叫RECT,注意这里不是矩形框的意思,而是rectify,即校正的意思,后面会进一步解释其原理。另一个模块叫Match,即匹配的意思。这些概念需要有些双目测距/重建的基础原创 2020-07-07 13:27:36 · 3248 阅读 · 2 评论 -
如何使用VPSS实现旋转功能
前言海思芯片里面VI,VPSS以及VGS都可以实现图片旋转功能。VI实现旋转的话,会导致后期保存的图片也实现了旋转;VGS实现旋转有些复杂,要多加不少代码;VPSS实现旋转相对很简单,而且不会影响原始照片。VPSS旋转VPSS有两个实现旋转的API:HI_MPI_VPSS_SetChnRotation(VPSS_GRP VpssGrp, VPSS_CHN VpssChn, ROTATION_E enRotation);HI_S32 HI_MPI_VPSS_SetChnRotation原创 2020-06-19 11:56:16 · 2532 阅读 · 1 评论 -
使用telnet来在线调试海思开发板
前言 在海思MPP软件开发时,往往会遇到一些莫名奇妙的错误或者运行结果和预想不一致(往往是参数没设对引起的)。这时候就需要在程序还在运行时来在线查看调试当前的系统状态。如果按CTRL+C强行退出后再去查看的话,往往因为系统的退出而得不到任何有效的信息。 本文介绍如何使用telnet来在线调试海思开发板。内容 1)首先从海思SDK(/osdrv/tools/)下面...原创 2020-03-31 17:58:09 · 3307 阅读 · 1 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(二十八)Ruyistudio下的仿真代码编译
前言目前模型仿真只能在windows上面进行。有两种方式,一是安装visual studio 2015 64bit软件,然后双击sample下面的*.sln来进入该项目,最后在VS下编译和运行或调试;二是直接在ruyistudio下编译和仿真。 这里主要讲第二种方式的项目属性设置和编译。环境搭建1)MinGW-W64编译工具链的安装要在ruyistudio下运行仿真功能,必须先使用...原创 2020-02-23 23:36:14 · 5564 阅读 · 19 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(二十七)python3引起darknet模型转换caffe失败的原因分析
前言首先申明,该问题是我的一位群友发现的。我这里只是把他的结论加以验证并总结在这里。问题描述在海思学习系列中,我们已经写了一篇文章来介绍如何将darknet模型转换成caffe model(https://blog.csdn.net/avideointerfaces/article/details/89111955)。但是因为环境平台的原因,尤其是python2和python3语法有些...原创 2020-01-11 22:44:26 · 2274 阅读 · 2 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(二十六)VPSS不同channel的不同放缩能力
前言在用VPSS的channel1对vdec解码出来的图片进行放大时,比如说(260,260)放大到(928,608),遇到了类似下面的错误。 [Func]:VPSS_DRV_CheckVpssCapa [Line]:3472 [Info]:[grp0 chn1]: pic after group crop size(260, 260) and chn size(928, 608) d...原创 2019-12-11 23:41:24 · 3767 阅读 · 0 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(二十五)初识 mapper_quant 和mapper_param
前言当模型量化出现错误或警告时,在排除掉Ruyistudio(一般没有问题)后,可能要检查下caffe model本身的权值参数有什么问题没。检查caffe model权值的方式在转换wk前,需要选择log level为Function level,如下所示。这样,转换wk结束后 就会在xx\HiSVP_PC_Vxxx\software\sample_simulator下面产生...原创 2019-11-14 17:29:38 · 2283 阅读 · 12 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(二十四)如何直接对yuv图片进行目标检测
前言前面我们讲的算法模型在海思nnie上的推理都是基于bgr格式数据或*.bgr文件。本博文则介绍如何对于YUV图片进行识别。YUV格式分析前面的博文都是用软解码(opencv库)jpeg图片,然后转换成bgr格式数据(bbbb...ggg....rrrr.....)再输入到算法模型。现在则是用硬解码VDEC将jpeg图片解码成yuv数据流。YUV格式很多,有YUV444,422以...原创 2019-10-21 23:16:48 · 7493 阅读 · 10 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(二十三)nnie上进行图像数据预处理(Normalize)的五种方式
前言大家知道,深度学习算法模型在推理前,都会对图像数据进行预处理,即RGB三个通道上的数据(0~255) normalize成0~1以内的值。值得注意的是,normalize方式有好几种,而且不同的算法模型所采用的预处理方式还不太一样。这就要求在nnie开发中,将caffe算法模型转换成wk文件时,必须选择合适的预处理方式。否则可能会导致识别结果不正常。normalize方式的解释在使...原创 2019-10-08 23:26:10 · 4448 阅读 · 0 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(二十二)如何在ubuntu18.0.4上跑通nnie mapper
前言一晃8月就要过去了,发现自己竟然连一篇海思AI的博文都没有写。赶紧把这两天的研究心得写一下,即如何在ubuntu18.0.4上运行nnie mapper。分析nnie mapper工具是用来将caffe模型量化成nnie硬件支持的、后缀名为wk的压缩模型文件。原始权值都是用float32来表示的,而8bit量化的权值则是用int8类型来存储,所以一般地,wk压缩模型文件大小(字节数...原创 2019-08-31 23:38:55 · 6833 阅读 · 26 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(二十)opencv静态库和动态库的区别
前言在上一篇博文海思AI芯片(Hi3519A/3559A)方案学习(十九)如何在推理动态链接库中引入opencv库 中有提到 当link opencv静态库即libopencv_world.a时,在编译链接成可执行文件时会出现下面链接错误:使用readelf -S libopencv_world.a没有发现这些函数的定义,但libopencv_world.so里面是有的。分析通...原创 2019-07-26 17:55:16 · 3836 阅读 · 0 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(二十一)extern "C"和C/C++ 混合编程
前言在重构sample sdk代码,并编译成静态或动态库来提供给上层调用的API时,不可避免会遇到c++调用c或c调用c++的问题。看我博客的网友也提到了这个问题,所以藉这个机会来把C和C++混合编程(即相互调用)的问题透彻的弄清楚。问题背景C和C++直接相互调用 之所以会出问题的原因是, C++里面有函数重载的概念,从而导致编译出来的函数名会带上参数类型,而C编译出来的函数名简单的就...原创 2019-07-30 14:01:49 · 2478 阅读 · 2 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(十九)如何在推理动态链接库中引入opencv库
前言海思AI芯片(Hi3519A/3559A)方案学习(十八)如何将sample sdk代码重构并编译成动态链接库 有提到如何将sample代码重构成推理动态链接库,提供api给应用层调用。但是sample代码只是将bgr或yuv格式的二进制数据送给nnie进行推理,所以还需要添加代码来实现先实现jpeg文件读取并转换成bgr格式数据,从而构造一个完整的应用。实现一这里的解决办法是移植...原创 2019-07-23 18:09:28 · 3627 阅读 · 22 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(十八)如何将sample sdk代码重构并编译成动态链接库
前言前面的博客我们已经分析了yolov3相关sample代码。但这毕竟是参考代码,不能直接拿来在自己项目中使用。本文就主要谈如何将sample中的yolov3相关代码提取出来,重新组织,并编译成so库,提供api给应用软件调用。代码重构sample代码除了有yolov3相关代码外,还有别的模型如RFCN等推理。当然,还有很多的代码是这些模型共用的。熟读这些代码后,我将yolov3相关的...原创 2019-07-16 17:25:23 · 5991 阅读 · 14 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(十七)开发板上运行yolo3模型的代码分析
前言前面的博客系列 已经介绍了如何将caffemodel转换成wk文件,如何将jpg文件转成bgr格式数据以及如何在PC上仿真模型推理等,基于这些基础,本文来结合代码分析如何在板子上推理yolov3模型。代码SDK提供的nnie AI推理相关的样例代码路径在这里:sample_nnie_main.c很简单,主要是提供入口函数main, 其所带的参数0/1/2。。。 。。。决定了...原创 2019-06-27 17:58:55 · 16026 阅读 · 90 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(三)Ubuntu18.0.4上编译Hi3519AV100 uboot和kernel
先重申下我的平台为ubuntu18.0.4,SDK的目标平台为Hi3519AV100系列准备工作安装himix200交叉编译器tar –xzf arm-himix200-linux.tgz sudo ./arm-himix200-linux.install source /etc/profile安装SDK包tar -zxf Hi3519AV100_SDK_V2.0.1.0.tgz...原创 2019-03-20 17:33:14 · 18095 阅读 · 15 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(四)如何在3519A板子上运行sample code
sample code编译先解压缩SDK(Hi3519AV100_SDK_V2.0.1.0.tgz)得到Hi3519AV100_SDK_V2.0.1.0文件夹。其sample源代码藏在Hi3519AV100_SDK_V2.0.1.0\smp\a53_linux\mpp\sample下面。如下所示,每个目录对应一个小功能。Install cross toolchain后(见前文),就直接...原创 2019-03-21 18:22:23 · 21270 阅读 · 35 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(二)RuyiStudio安装
上一篇简单梳理了Hi35xx系列的软件包和文档,里面内容很多,光《HiSVP开发指南》就有258页。 就AI功能开发的话,我们先从RuyiStudio工具开始讲起,慢慢深入进去。RuyiStudio介绍 Ruyistudio是一个windows版本的工具,集成了NNIE的mapper和simulator两大基本功能。 mapper是文件格式转换的插件,即将caffe的模型文件*....原创 2019-03-18 18:32:52 · 18174 阅读 · 20 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(六)No MMC device available和can't get kernel image两个问题的解决
这两个问题分别和uboot和kernel load相关,下面分别谈谈。找不到MMC device在正常的uboot下面,通过eMMC烧写命令和tftp将某个版本的uboot写道flash里面,重启后遇到以下问题:一番折腾后,定位到该版本uboot不支持emmc device。解决办法如下:1)编译支持emmc device驱动的uboot,其配置文件使用如下:cp con...原创 2019-03-25 22:55:24 · 6278 阅读 · 8 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(五)SDK平台文档梳理
背景Hi3519A SDK包里面提供了很多文档。刚开始看,可能有些抓不住重点,尤其是当你需要通过文档获得帮助的时候,不知道如何快速获得有效的知识。我的个人理解是,将它们分为两大类。第一类是平台性相关文档,即开发环境如何建立等;第二类是局部功能性相关文档,比如Video,Audio,ISP相关API都有哪些等。刚开始接触开发板时,往往要仔细研读第一类文档,来搞定kernel编译烧写等...原创 2019-03-22 22:23:39 · 10156 阅读 · 0 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(七)ext4根文件系统制作
由于开发板上的flash类型为MMC,所以对应的要制作ext4类型g文根件系统。从零开始生成一个文件系统通常是使用busybox来从无到制作一个根文件系统。1)获取busybox源代码busybox完整源代码存放在opensource/osdrv/busybox。2)配置busybox3)编译和安装busyboxmake ARCH=arm CROSS_COMPILE=...原创 2019-03-26 23:28:25 · 6145 阅读 · 6 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(九)wk格式的模型生成以及PC仿真
前言《HiSVP开发指南》洋洋洒洒有258页之多,刚看很容易让人抓不住重点。本文结合自己的理解来对模型转换和仿真部分进行了一下梳理wk模型生成AI硬件加速器nnie只支持wk模型文件的加载。而SDK提供了 mapper工具来将caffe1.x 算法model转换成wk格式。该工具有linux和windows两个版本,我们这里只讨论windows版本,个人感觉它安装更方便,更容易使用。...原创 2019-04-05 00:58:39 · 18221 阅读 · 184 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(八)根文件系统运行遇到的两个问题
基本根文件系统image制作好并烧到flash里面后,启动时执行脚本遇到了两个问题rcS和bin/sh文件找不到现在网上找了一通,说是/etc/init.d/rcS权限不够或是出现了乱码,我用chmod 777 ./* 以及 dos2unix两个方法都没能解决。最后的解决方案是 把SDK release的rootfs的/bin全部拷过来原因是: 自己rootfs/bin是空的,根本...原创 2019-03-27 17:19:57 · 3290 阅读 · 5 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(十)将yolov3的darknet模型转换为caffemodel
前言海思35xx系列的nnie硬件引擎只支持caffe1.x模型。所以任何使用其它框架训练出来的算法模型想要在nnie上进行推理必须先要将其转换成caffemodel。本文所讨论的平台是ubun18.0.4+cuda8.x+opencv3.4.3caffe安装1.下载代码git clone git://github.com/BVLC/caffe.gitcd caffe/...原创 2019-04-08 23:29:30 · 23254 阅读 · 148 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(十一)分析bgr文件格式
前言 3519A nnie SDK只支持BGR以及yuv格式的数据输入。那么当手头刚好只有jpeg/png等图片文件时,怎么来进行目标识别呢?一般的思路是用opencv来读取图片文件,然后再转换成BGR/YUV等格式,最后扔到NNIE模块来进行深度学习推理。BGR文件数据格式nnie sample里面提供的测试图片有后缀名为bgr的文件,例如dog_bick_car.bgr。在sam...原创 2019-04-17 23:38:43 · 7224 阅读 · 30 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(十二)移植opencv343到hi3519A
前言将opencv移植到某个平台,无非就是用该平台对应的编译器将opencv源代码编译成so库。 这里的target平台是hi3519A,所以得用交叉编译器arm-himix200-linux交叉编译器。准备工作1)安装交叉编译器,这个海思SDK说得很明白,也可以参考我之前的系列(三)Ubuntu18.0.4上编译Hi3519AV100 uboot和kernel2)在ubuntu上...原创 2019-04-23 18:36:42 · 9281 阅读 · 56 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(十三)第一次在hi3519A ARM上运行yolov3模型
前言前段时间调通了nnie上运行 yolo3模型(darknet->caffe model->wk),但发现精度掉的很厉害,小目标检测根本就不行了(后注:后来发现参数设置有些问题,其实精度不会掉很多,就是比较敏感,容易误识别,但得分不高,所以可以通过提高置信度阈值来解决)。因为我们项目对实时性要求不苛刻,所以转而想直接在arm上运行darknet weights。运行yolo3...原创 2019-04-23 22:37:11 · 11172 阅读 · 34 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(十五)基于nnie引擎进行推理的仿真代码浅析
前言HISVP仿真(即基于nnie引擎进行推理)的代码有如下四个版本前两个是功能性仿真,后两个是指令性仿真。在功能性或指令性仿真内部又分为使用opencv库和不使用opencv库两种类型。它们的最终结果应该是一致的,但功能性验证显然速度要快很多。由于yolo层后处理都是软件实现的,所以当待仿真的算法模型(即wk文件)改变时,尤其网络size或目标识别种类数等方面不同,下面这些参数需...原创 2019-05-13 22:59:16 · 8558 阅读 · 10 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(十四)JPEG图片转换成bgr文件
前言在系列文章海思AI芯片(Hi3519A/3559A)方案学习(十一)分析bgr文件格式 中有详细介绍bgr文件分量排列格式是bbbb...gggg....rrrr.... 但当时只提供代码来将bgr文件转换成Mat格式。本文来具体讲述其逆过程,即如何一张jpeg图片转换成bgr文件(其实前面文章的逆过程)。读取jpg图片使用opencv来读取jpeg图片,并resize成算法...原创 2019-05-07 22:49:47 · 5646 阅读 · 32 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(十六)对图像进行不变形缩放 可以提高识别准确度
前言在海思AI芯片(Hi3519A/3559A)方案学习(十四)JPEG图片转换成bgr文件 中,有提到如何将jpeg文件转换为bgr格式数据,然后再输入到NNIE模型进行目标识别。但是在jpeg图片转换中,是先将原始图像直接resize成模型网络size,如下红框所示。问题加入说待识别的输入图片size是1200x800,而我们的模型网络size是600x600,那么如果长、宽...原创 2019-05-25 15:01:40 · 6932 阅读 · 13 评论 -
海思AI芯片(Hi3519A/3559A)方案学习(一)资料以及术语介绍
芯片系列介绍 海思AI芯片Hi35xx系列具体包括的型号Hi3559A V100, Hi3559C V100, Hi3519A V100, Hi3516C V500以及Hi3516D V300。下面要讲的资料,尤其AI部分应该是该系列通用的。 我们项目采用的是Hi3519AV100, 所以后续文章都是以该款芯片为学习和研究目标。 海思芯片命名有些坑的, 一不小心就会弄错,Hi351...原创 2019-03-15 23:21:10 · 47189 阅读 · 466 评论