K210系列第一个示例程序

引言

关于K210的受众群体也算不少,在网上许多爱好者写了各种学习教程。本系列文章的目的是帮大家从众多信息中梳理一些关键步骤。

第一篇文章让大家了解K210芯片的性能如何,能做哪些事。

第二篇文章带大家配置好软硬件的开发环境。

本篇从官方示例教程出发,教大家如何在开发板上做图像算法和深度学习的部署。

下面是一些小编推荐的学习链接:

canaan-creative.com/dev:官网的链接,可以在上面下载SDK、datasheet以及演示Demo。

cn.dl.sipeed.com/shareU:包括了各种工具,固件的下载链接

wiki.sipeed.com/:包含了资料和文档的学习指南

MaixPy存储系统是如何设计的?

在给大家演示各种实例程序之前,有必要介绍一下MaixPy的存储系统,因为这块会涉及模型文件该从哪里读取的问题。

v2-83200e82aad8e9b93b01b06443bd85ac_b.jpg

开发板内置了一块16M Flash区域,以及一个SD卡插槽,所以如果自己的模型较大可以放置在外插的SD卡中。这里我们说说Flash区域的地址分配,它由三部分组成:

  • 固件区
  • 模型区
  • 文件系统区

固件区的地址从0x000000开始,上一篇中我们通过kflash刷固件就是将系统程序烧在一个位置,K210也正是从此处开始运行程序。

模型区的地址从0x300000开始,可以通过kflash工具烧写到此位置,流程同固件的烧录。因为该区域不受文件系统的管理,所以需要根据烧写时的起始地址进行访问,比如:

v2-13745b797547e16ab0ded1a166558843_b.png

如果模型太大,可以将其拷贝到SD卡中,通过文件路径进行访问,但是读取速度不如直接从Flash中快。

文件系统区的地址从0xD00000开始,预留了3M的空间用于文件存储。该区域的文件系统会被自动挂载到/flash目录。

v2-17c1bbf79e07a760dfce4f0f6a63633a_b.jpg

这里我们会看到在/flash目录下有三个文件:

  • freq.conf
  • main.py
  • config.json

开发板上电后会自动执行boot文件,然后在执行该处的main.py,如果想让自己的程序开机自启动,可以将程序拷贝到boot中或者写入main.py。

SD卡在上电后会被挂载到/sd,值得注意的是只能将数据写入/flash和/sd下。

为啥会有两块图像缓冲区?

在跑AI Demo之前,还有另一个需要关注的点就是MaixPy的图像缓冲区,否则你会发现在处理图像时常常会蹦出下面的错误:

v2-bbbe31d41d73d267af536e3db66a46ab_b.jpg

MaixPy设计了两个缓冲区,即RGB565和RGB888。主要因为底层代码对图像操作和显示使用的是RGB565的内存块,而AI加速使用的KPU调用的是RGB888的内存块。

RGB565的格式存放着图像信息的一块内存,其在内存中的排序是[像素1 RGB, 像素2 RGB...]。

RGB88的格式存放着图像信息的一块内存,其在内存中的排序是[所有像素 R, 所有像素 G, 所有像素 B]。

v2-58bee27a1fd993303228bde7e21c1339_b.jpg

由于在软件层面转换图像格式是一件比较耗时的事情,所以MaixPy在摄像头采集图片的时候,就从硬件上分了两路数据,一份保存在RGB565内存块,一份保存在RGB888内存块。

当执行图像的缩放,裁剪等操作时是从RGB565处取图像;当执行KPU内部运算时是从RGB888处取图片。那么有小伙伴会问,当将图像resize到某个尺寸后,再送入网络进行前向传播是不是会出现下面的情况?

v2-457fcd2f8989e5371d22046ee885f99b_b.jpg

所以这里提供了两个API用于数据同步,当更改了RGB565内存块中的图像数据后,如果希望KPU使用更改后的图像数据,需要执行pix_to_ai()函数将RGB565的数据更新到RGB888内存中,如下图所示:

v2-5dd92defaf236946c2569178a492d761_b.jpg

KPU硬件加速需要注意点啥?

在K210上有一块专用的硬件加速单元,即KPU。类似于我们平时用的GPU,NPU,DSP等玩意。通常了解一款AI加速模块,我们会考虑这几个维度:

  • 支持多大的内存
  • 支持多少种算子
  • 支持哪些框架做模型转换
  • 如何在上面做前向传播

下图是一张KPU的工作原理,挂着镇楼。在KPU中一些基础操作并非是单独的加速模块,而是合成一体的加速模块,能够有效避免了CPU干预造成的损耗,但也丧失了一些操作上的灵活性。(图片来源于官方文档,如有侵权,联系删除)

v2-6b5e3f0702c4d4ad89317074d37ed8c3_b.jpg

K210对特征图尺寸(包括输入图像尺寸)有一定限制,宽高不得超过320×240,否则就会超出栈内存:

v2-a968adf0d236243d72a1a91398ef50b7_b.jpg

硬件支持的深度学习算子包括卷积、池化、激活、批归一化四大类,每一种算子的支持也有限制,比如:

  • 卷积层支持1×1和3×3两种核;
  • 池化层支持2×2和4×4两种位移;
  • 激活函数支持ReLU,ReLU6,Sigmoid,LReLU;

其他操作往往需要通过替换才能实现,比如:

  • matmul等价于4×4 Pad + 1×1 Conv + 1×1 Crop
  • transpose等价于SpaceToBatch + Conv + BatchToSpace

K210中的模型转换的环节,用户需要将开源框架训练的权重通过nncase工具转换成kmodel格式的模型。nncase是一个神经网络编译器,支持的权重格式包括tflite、caffe、onnx。具体使用可以查阅链接: github.com/kendryte/nnc

示例小程序

寻找绿色块

这是一个传统的图像处理小程序,设置绿色像素点的阈值,在图像中查找绿色的块状物体。跑这个Demo发现此IDE内置了一个调参神器,当我们手动给定一套阈值时,检测结果如图:

v2-5d582ae7d0981a66d0d009c28ce737b2_b.jpg

可以看到图像周围还是有一些像素点落在了阈值范围中,这时锁定图片,在颜色编辑器中调整阈值范围:

v2-852f6308b9b53c03ee83ca9a44c57fd6_b.jpg

把这套阈值替换到程序代码中,再次检测杂点被过滤了

v2-bb1e30f80630e2330ae662e754d2e380_b.jpg

人脸检测

小编用的官方训练好并转换成kmodel格式的yolov2模型:face_model_at_0x300000.kfpkg,在下载模型的时候需要注意其与固件是否匹配,网上有V3和V4两种版本,该版本和ncc的模型转换有关,二者区别在于:

  • V3版本支持的算子较少,但是基本都采用硬件加速
  • V4版本支持的算子较多,但是部分算子是CPU运行

那么我们在下载固件的时候就要留意是选择***_kmodel_v4_***.bin的固件还是不带v4字样的固件版本。

这里可能大家会疑惑,不是说KPU需要的是kmodel格式的模型文件吗,怎么下载的是kfpkg?

v2-ff6809c74d6ba2de2c3cdeb8e821b82e_b.jpg

其实它是一个压缩文件,解压后我们可以看到里面有一个kmodel的人脸检测模型和一份json配置。可以通过kflash工具将压缩包直接上传到开发板。

这里也有一个疑惑,MaixPy的模型区因为没有文件系统,所以是通过地址进行访问,那么压缩包上传到开发板后,模型要从哪个地址读取呢?

v2-a2a85f7a6bc0b4f859812d079f6ff74f_b.jpg

打开压缩包中的flash-list.json配置,我们会发现访问地址原来烧录在这里的,所以当我们涉及多个模型时,可以在配置中分配好各自读取的首地址位置。

比如当我们要做一个人脸关键点检测时,通常需要检测模型+关键点提取模型配合。可以将检测模型存烧录在0x00200000,将关键点模型烧录在0x00300000。在通过kpu.load(address)分别调用。

小编没用摄像头的实时数据(主要不上镜),特地找了张网红脸合集图片,机器视觉应该会用参数说明什么是流水线量产吧~~~嘿嘿!

v2-8ac2e74e37dccb097da395a48df2f4ef_b.jpg

具体代码没几行,从官方Github即可下载到,略微不同之处在于:

需要先将下载好的图片通过IDE或者串口上传到开发板,这里会保存到/flash目录下;

  1. 读取图片后需要注意尺寸过大会超时内存限制,根据烧录估计的不同可用内存略有浮动,全功能固件只提供2M大小的RAM,精简版估计大约在5M的RAM;
  2. 最后千万记得将RGB565上图像处理的结果同步到RGB888,否则使用KPU后可能等来的是各种报错。

v2-407d4cd6b01bf1751aadfba025c204a0_b.jpg

欢迎关注小编公众号,每周分享关于计算机视觉或无人驾驶感知方面的内容。

v2-6bda0ab88a91aa149d711c6110c0c63d_b.jpg

思绪零乱成海
关注 关注
  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
K210编程实例-高速GPIO与外部中断
视觉与物联智能
07-16 432
K210的CPU中断管理分为平台中断管理(PLIC)和本地中断管理(CLINT)。其中平台中断管理支持高级中断管理,支持64个外部中断源路由到2个CPU核心;本地中断管理支持CPU内置定时器中断和跨核心中断。
飞凌嵌入式OK210开发板手册上的错误集锦及解决方法【持续更新】
公西雒的技术站
01-26 2493
2014.1.26 错误:9.1.1  SD卡引导制作与烧写方法 步骤13 :通过 SD_Writer.exe 将bootimage.nb0 烧写到 SD卡中。 原因分析:在光盘资料中,Linux文件夹下没有bootimage.nb0这个文件,找了一圈发现是winCE的,难道可以通用?但是图片说明中的路径分明是Linux下啊!由此推断,这是个错误。应该是文档编辑时工作人员的错误,估计是直接复制粘
Arduino-ArduinoCore-k210.zip
09-18
Arduino-ArduinoCore-k210.zip,见Arduinoardinocore-K210上Kendryte K210 SOC的代码,Arduino是一家开源软硬件公司和制造商社区。Arduino始于21世纪初,深受电子制造商的欢迎,Arduino通过开源系统提供了很多灵活性。
【正点原子K210连载】第三十五章 image图像特征检测实验 摘自【正点原子】DNK210使用指南-CanMV版指南
最新发布
weixin_55796564的博客
09-13 740
接着在一个循环中不断地获取摄像头输出的图像,因为获取到的图像就是Image对象,因此可以直接调用image模块为Image对象提供的各种方法,然后就是对图像进行特征检测,最后在LCD显示图像以及检测到的特征。x_margin、y_margin和r_margin指的是控制所检测的圆的合并,圆像素为x_margin、y_margin和r_margin的部分合并。find_edges()方法用于检测图像中的边缘特征,该方法会将图像变为黑白,仅将边缘像素保留为白色,需要注意的是该方法仅支持灰度图像。
K210开发3-例程&API手册
qq_42947060的博客
02-01 1430
例程仓库 API手册 标准库 cmath 复数的数学函数 实现CPython模块的子集 具体可参考 cmath gc 内存回收 实现CPython模块的子集 具体可参考 gc 扩展函数: gc.mem_alloc()-返回分配的堆RAM的字节数 gc.mem_free()-返回可用堆RAM的字节数,如果堆剩余数量未知,则返回-1 gc.threshold([amount])-设置或查询其他GC分配阈值,通常,仅当不能满足新分配时,即内存不足(OOM)条件下才触发集合。如果调用此函数,除了OOM之外
K210的MicroPython扩展例程——自动驾驶例程(视觉循迹)
qq_52251819的博客
05-16 1170
该例程实现的功能是,可为想拿K210做视觉循迹开发作为参考例程使用前需要搭建好MicroPython的。
写一个k210识别数字的程序
weixin_35750747的博客
12-18 924
首先,您需要准备好一块 K210 开发板和一个支持 K210 的开发环境,并安装好必要的驱动程序。然后,您可以使用以下步骤来编写 K210 识别数字的程序: 准备训练好的模型:您可以使用开源的数据集(例如 MNIST)或自己收集的数据集来训练一个模型,以便在 K210 上使用。 将模型转换为 K210 可以使用的格式:您可以使用 K210 提供的工具将模型转换为 KPU 格式,以便在 K210...
K210基础实验——点亮LED灯
qq_52251819的博客
02-19 1389
【代码】K210基础实验——点亮LED灯。
k210怎么下载示例
07-28
- *2* [K210系列第一个示例程序](https://blog.csdn.net/neil3611244/article/details/119777167)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_...
K210开发环境搭建.zip
04-20
按照文档中的步骤操作,从创建第一个“Hello, World!”程序开始,逐步熟悉K210的开发流程。 8. **调试与优化**:学会使用GDB调试器,这对于查找和修复代码错误至关重要。K210的开发环境通常支持远程调试,通过GDB...
K210学习记录(1)——GPIO与软件使用
u014798590的博客
09-04 3881
0、引言 本系列博客仅作为本人学习K210单片机的学习记录,作为初学者难免有错误之处,还望指出。 硬件:Sipeed Maix Dock开发板(推荐官方KD233开发板) 软件:Kendryte IDE(基于VS Code 开发) 文档: Kendryte IDE使用手册 Standalone SDK编程指南 芯片技术规格书 SDK: Kendryte SDK MaixPy/drive 1、Kendryte IDE的使用 Kendryte IDE是基于VS Code所开发的编译器,并且已做了汉化处理,使用上
K210单片机 20类分类模型及实现代码
12-04
该工程用于实现使用ncc工具箱对.tflite模型进行转换,得到的kmodel模型在K210单片机中实现20类物体分类任务。硬件:Sipeed Maix Dock开发板;软件:MaixPy IDE,NNCase Converter v0.1.0 RC5(模型转换工具),20类yolo模型.tflite,及使用说明
K210烧录软件kflash_gui
07-22
K210烧录软件kflash_gui
使用亚博智能K210实现人脸特征提取和识别
热门推荐
weixin_46154937的博客
03-17 1万+
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
k210在win10上烧写从GitHub上下载的例程(lcd、lcd_image等)
wjt_159
12-22 4025
一、先搭建好windows环境,可以参考https://blog.csdn.net/qq_27882147/article/details/103647684这篇章; 二、以上成功以后就可以从GitHub上下载裸机demo了,GitHub下载地址为:https://github.com/kendryte/kendryte-standalone-demo将工程文件下载到电脑中。 三、打开kend...
K210基础案例&串口收发
m0_60313295的博客
06-07 941
之前买了块K210bit开发板,就想着写写,汇总汇总,一些简单的例程。方便使用到的时候,能快速应用到自己的代码中。下面的基础案例都是完整的代码,可以直接复制到主程序中看现象的。本篇介绍的是串口收发。
K210基础实验— 触屏实验
咸鱼菌
06-30 1672
K210基础实验— 触屏实验使用设备ZTFR开发板显示英文显示中文利用显示图片的方式显示英文在图片上显示文字触屏实验 搞一下触屏,顺便总结一下在屏幕上显示文字 使用设备 ZTFR开发板 显示英文 import lcd lcd.init() #初始屏幕 lcd.draw_string(100, 100, "xymgf.blog.csdn.net", lcd.RED, lcd.BLACK) 效果: 显示中文 使用方法参考:https://xymgf.blog.csdn.net/article/det
K210视觉识别模块学习笔记1:第一个串口程序_程序烧录与开机启动
NULL指向我的博客
05-30 3234
今日开始学习K210视觉识别模块:简单的认识与串口程序 既然K210作为一个视觉识别外设模块来使用,我认为第一个程序 就没必要学点灯之类的了,直接学习串口如何配置开始为妥,毕竟后面都要用到.....
k210的初探一MixNo—AIOnenet_按键按一下调用动物检测API并框出位置
yuguoyu123456的博客
04-19 1019
AIOnenet_按键按一下调用动物检测API并框出位置 今天的测评是MixNo调用Onenet平台智能识别哈士奇并框出来,串口输出图像位置。 程序如下: (图片来自百度) 如需使用,在画箭头的地方写入wifi的账号和密码,Onenet平台的账号和密码。当按下开发板上的key键,哈士奇的位置已在上图串口中输出。 有问题的可以加入QQ群:1056344043 ...
写文章

热门文章

  • 代码也浪漫——Python烟花秀 32662
  • tensorflow随笔——深度学习中GPU型号对比 19913
  • 激光雷达原理介绍 17873
  • tensorflow随笔——concat(), stack(), unstack() 14784
  • K210系列开发板介绍 13942

分类专栏

  • 无人驾驶 10篇
  • C# 8篇
  • C++ 2篇
  • 点云处理 8篇
  • 机器学习 2篇
  • Tensorflow 12篇
  • 图像处理 7篇
  • Python 8篇
  • 论文解读 4篇
  • 深度学习 10篇

最新评论

  • 炼丹系列之原料储备

    WXG1011: 博主,伪3D框标注有工具推荐吗?

  • 信息量、信息熵、交叉熵、KL散度、JS散度、Wasserstein距离

    Colin_David: KL散度貌似是错的吧

  • YOLO系列专题——Complex-YOLO

    AI改变视界: 如果点云数据里,在z轴有上下两个目标,转成二维数据后,是不是就只能看到一个目标了?

  • K210系列开发板介绍

    canji233: 请问文中提到的麦克风阵列音频处理相关的具体内容有无推荐?

  • YOLO系列专题——Complex-YOLO

    维杰太保齐肯: 请问你理解了吗,这个是不是说地面和z不一定垂直?

最新文章

  • 特斯拉AI日的感知之旅
  • K210系列开发环境搭建
  • K210系列开发板介绍
2021年24篇
2020年22篇
2019年1篇
2018年22篇
2017年9篇
2016年1篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家广西玻璃钢智能雕塑东营小品系列玻璃钢雕塑广门上玻璃钢雕塑河北玻璃钢迎宾人物雕塑双鸭山玻璃钢商场美陈商场产品美陈佛山发光玻璃钢雕塑山西玻璃钢霸王龙恐龙雕塑定做江苏开业商场美陈费用福建超市商场美陈怎么样巴彦淖尔商场美陈沈阳景观玻璃钢雕塑多少钱哈尔滨玻璃钢雕塑租赁铁岭外贸沈阳玻璃钢花盆北京开业商场美陈采购文山玻璃钢座椅雕塑报价桔子玻璃钢雕塑定制厂家2022商场美陈布置闵行区拉丝玻璃钢雕塑在线咨询闵行区进口玻璃钢雕塑厂家报价商城玻璃钢树造型雕塑小品制作福建公园玻璃钢雕塑厂家湖南定制玻璃钢雕塑贵州玻璃钢小羊动物雕塑定制江西玻璃钢小狗雕塑报价玻璃钢雕塑价格如何河北步行街玻璃钢雕塑销售厂家沈阳商场美陈费用玻璃钢雕塑的主要有哪些性能南京商场周年美陈香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化