边缘设备上的计算机视觉
几周前,当在全球速卖通(AliExpress)购物时,偶然发现了一个很棒的Maixduino设备。它宣称自带RISC V架构和KPU (KPU是一个通用神经网络处理器)。其不同规格如下;
CPU: RISC-V双核64位,带FPU
图像识别:QVGA@60fps / VGA@30fps
芯片功耗< 300mW
说实话,这个单位很旧了,最近才开始关注。考虑到我对边缘计算的兴趣,我想为一个对象检测示例提供一个完整的端到端指南。这个例子是基于这篇文章:https://www.instructables.com/Object-Detection-With-Sipeed-MaiX-BoardsKendryte-K/
但是,我将全面介绍如何收集图像并对它们进行注释。如果你想知道什么是边缘计算,请阅读下面的文章。
https://medium.com/swlh/what-is-edge-computing-d27d15f843e
让我们尝试建立一个图像检测程序,将能够检测出苹果和香蕉。有了检测器,你可以变得更有创造力。在接下来的讨论中,我们将讨论所需的工具和库。
迁移学习注释
迁移学习是指我们使用预先训练的模型来进一步专业化。简单地说,就是用自己的分类层(或更多层)替换训练过的模型的最后一个预测层。然后冻结除你的自定义层(或一些经过预训练的层)以外的所有层。然后训练网络,以便使用预先训练过的模型的特性来微调你的层,以预测你想要的类。
不幸的是,目前我们要训练的网络没有任何预先训练过的模型。因此,我们将从头开始训练。但这将是一个有趣的实验!
准备数据
我们需要按以下格式准备数据。首先,我们需要有苹果和香蕉的图像。同时,我们需要对它们进行注释,以确定每个水果可能在图像中的位置。这就是目标分类和检测之间的区别所在。我们需要说出物体在哪里。为此,你需要以下工具。
tzutalin / labelImg :https://github.com/tzutalin/labelImg
LabelImg是一个图形图像标注工具。它是用Python编写的,使用Qt作为图形界面…
或者你可以使用我的工具使用你的背景和对象图像生成注释图像(例如:来自Kaggle的Fruit 360的图像)。:
用于对象检测的注释器:https://anuradhawick.medium.com/annotator-for-object-detection-950fd799b651
在我的例子中,我使用以下程序,因为我从网络摄像头捕获。选择简单的方法。下面的程序是用Nvidia jetson nano get started容器编译的。
dusty-nv / camra-capture :https://github.com/dusty-nv/camera-capture
数据集训练
我们想训练我们的模型,这样它们就可以在maxduino设备上运行。为此,我们可以使用以下存储库。它对模型层进行了所有必要的修改,以适应K210处理器的体系结构。克隆并安装所需的依赖项。所有说明可在以下链接获得;
AIWintermuteAI / aXeleRate :https://github.com/AIWintermuteAI/aXeleRate
aXeleRate简化了训练,并将计算机视觉模型转换为在各种硬件平台上运行……
我们需要将我们的训练数据组织如下;
path-to/data
---anns # store the training annotations
---imgs # relevant images for the training
---anns_val # validation annotations
---imgs_val # validation images
现在我们需要创建一个配置。json设置训练选项。对于我们的例子,它应该如下所示:
{"model" : {"type": "Detector","architecture": "MobileNet7_5","input_size": [224,224],"anchors": [0.57273, 0.677385, 1.87446, 2.06253, 3.33843, 5.47434, 7.88282, 3.52778, 9.77052, 9.16828],"labels": ["Apple", "Banana"],"coord_scale" : 1.0,"class_scale" : 1.0,"object_scale" : 5.0,"no_object_scale" : 1.0},"weights" : {"full": "","backend": "imagenet"},"train" : {"actual_epoch": 50,"train_image_folder": "data/imgs","train_annot_folder": "data/anns","train_times": 2,"valid_image_folder": "data/imgs_val","valid_annot_folder": "data/anns_val","valid_times": 2,"valid_metric": "mAP","batch_size": 4,"learning_rate": 1e-4,"saved_folder": "obj_detector","first_trainable_layer": "","augumentation": true,"is_only_detect" : false},"converter" : {"type": ["k210"]}
}
注意:使用绝对路径可以避免不必要的错误。
接下来,我们可以使用以下命令进行训练;
python3 aXelerate/axelerate/traing.py -c config.json
现在训练结束了。我们感兴趣的是在项目文件夹中生成的kmodel文件。我们可以把它移到microSD卡上,然后连接到MaixDuino设备上。
预测
下面是我将在maixPy IDE中使用的草图。
import sensor,image,lcd
import KPU as kpulcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224, 224))
sensor.set_vflip(1)
sensor.run(1)classes = ["Apple", "Banana"]
task = kpu.load("/sd/name_of_the_model_file.kmodel")
a = kpu.set_outputs(task, 0, 7, 7, 35)anchor = (0.57273, 0.677385, 1.87446, 2.06253, 3.33843, 5.47434, 7.88282, 3.52778, 9.77052, 9.16828)
a = kpu.init_yolo2(task, 0.3, 0.3, 5, anchor) while(True):img = sensor.snapshot().rotation_corr(z_rotation=90.0)a = img.pix_to_ai()code = kpu.run_yolo2(task, img)if code:for i in code:a = img.draw_rectangle(i.rect(),color = (0, 255, 0))a = img.draw_string(i.x(),i.y(), classes[i.classid()],color=(255,0,0), scale=3)a = lcd.display(img)else:a = lcd.display(img)a = kpu.deinit(task)
一定要更改输出参数,以适应kpu中训练过的神经网络中的输出参数。set_outputs(task, 0, 7, 7, 35)。现在可以运行程序了。这很容易。查看以下截图。
请注意,质量很低。这是因为maixPy IDE允许我们将LCD显示流传输到计算机。所以质量更差。
该图像检测程序可以在300mA电流下运行。此外,它有类似Arduino nano板的GPIO引脚。所以可能性是很多的。
希望本文能使你对数据科学的新水平有所了解。
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓
边缘设备上的计算机视觉相关推荐
- 一文详解边缘设备上的计算机视觉
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 几周前,当在全球速卖通(AliExpress)购物时,偶然发现了一个很棒的Maixduino设备.它宣 ...
- YolactEdge:首个开源边缘设备上的实时实例分割(Jetson AGX Xavier: 30 FPS)
YolactEdge 是第一个可在小型边缘设备上以实时速度运行的有竞争力的实例分割方法. 在550x550分辨率的图像上,以ResNet-101为主干网的YolactEdge 在Jetson AGX ...
- 边缘设备上的实时AI虫害消除:入门
目录 介绍 选择器与检测器 实时性呢? 下一步 在这里,我们从使用AI和DNN的角度阐述了害虫消除的问题.然后,我们提出两种可能的解决方案:1--使用预训练的SSD模型检测猫.羊和其他动物:2--使用 ...
- 边缘设备上的实时AI人员检测:入门
下载数据-19.3 MB 下载模型-43.5 MB 下载结果-36.66 MB 得益于深度学习(DL),实时视频流中的人的实时检测几年前就已经解决了.但是,在边缘和物联网设备上并不总是那么容易,因为它 ...
- 170 FPS!YolactEdge:边缘设备上的实时实例分割,已开源!
点击上方"CVer",选择加"星标"置顶 重磅干货,第一时间送达 本文转载自:AI人工智能初学者 论文:https://arxiv.org/abs/2012.1 ...
- 边缘设备上的实时AI人员检测:以实时模式检测视频中的人员
下载数据-19.3 MB 下载模型-43.5 MB 下载结果-36.66 MB 这是七篇系列文章中的最后一篇.到目前为止,我们已经有了用于人员检测的DNN模型和用于在Raspberry Pi设备上启动 ...
- 边缘设备上的实时AI人员检测:检测视频中的人员
下载数据-19.3 MB 下载模型-43.5 MB 下载结果-36.66 MB 从本系列的前几篇文章中,我们获得了使用SSD DNN模型检测图像中人物的Python代码.而且我们已经展示了该代码可以在 ...
- YolactEdge:边缘设备上的实时实例分割(Xavier: 30 FPS, RTX 2080 Ti:170 FPS)
带有ResNet-101的YolactEdge在Jetson AGX Xavier上的速度高达30.8 FPS,在RTX 2080 Ti上的速度为172.7 FPS,AP性能超强!速度是目前主流方法的 ...
- 边缘设备上的实时AI人员检测:在Raspberry Pi上启动SSD
下载数据-19.3 MB 下载模型-43.5 MB 下载结果-36.66 MB 在本系列的最后一篇文章中,我们编写了Python代码,用于使用SSD模型检测图像中的人物.在本文中,我们将介绍在Rasp ...
最新文章
- RDKit | 基于RDKit去除片段(盐或络合物等)
- 错排、卡特兰数、斯特林数小结
- CodeForces - 1354E Graph Coloring(dfs判断二分图+dp)
- Hbase写数据,存数据,读数据的详细过程
- CRM_REPORT_RF_CHECK_AUTHORITY call CRM_REPORT_RF_AUTH_OBJ_ORD_LP
- 解读华为云原生数据库设计原则,打破传统数据库上云瓶颈
- SpringBoot集成Spring Security(1)——入门程序
- git rebase 的使用
- python学习路程1
- break stop java_怎么break java8 stream的foreach
- java protected_Java中的访问修饰符详解
- Java面试题大全带答案110道(持续更新)
- python爬虫入门之————————————————案例演练
- 2016中国移动CRM洞察力论坛召开|码客荣获2016中国移动CRM产品创新奖
- 高中计算机教师研究方向,高中信息技术教师专业知识研究
- 编程算法 - 大整数乘法
- 资金流入流出预测(上)(阿里云天池大赛)
- MT6(8)735平台Android5.1 codege.dws 配置
- 黑魂复刻游戏的玩家输入模块——Unity随手记(2021.3.14)
- 华强北的AirPods耳机谁家比较靠谱?