热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HaaS轻应用(Python):基于HaaSAI的图像分类

1、序言HaaS即HardwareasaService,它是加速AIoT开发者创新的一个积木平台。Python轻应用是跑在HaaS积木平台上的一套应用框架。他是基于MicroP

1、序言

HaaS 即 Hardware as a Service, 它是加速AIoT开发者创新的一个积木平台。

Python轻应用是跑在HaaS积木平台上的一套应用框架。他是基于MicroPython进行开发,继承了python优美简介的语法,同时提供了便捷的嵌入式硬件操作库。

HaaS100作为阿里云智能IoT团队推出的一款 IoT 开发板,它适配了MicroPython的运行引擎, 提供了各种丰富的硬件操作接口,同时提供阿里云物联网平台和云端AI相关的能力。

本文将介绍怎么基于Python轻应用框架, 来实现图像分类功能。

 

2、方案

2.1、总体思路

方案涉及主要涉及Minicv,Alibaba Cloud SDK 等功能模块.

MiniCV 是一套轻量级视觉框架,支持数据获取,图像处理,图像编解码,视频编解码,机器学习,UI呈现。

Alibaba Cloud SDK是阿里达摩院视觉智能开放平台的端上的引覆盖人脸、人体、视频、文字等150+场景。

关于视觉视觉智能平台的详细信息可以参考官网:https://vision.aliyun.com/

数据处理流程为:

通过MiniCV模块,完成数据源的封装处理,图片的解码,图片数据的格式转换和缩放等功能,最后将处理好的数据喂给ML 模块,ML 模块通过Alibaba Cloud SDK引擎和达摩院的视觉开放智能平台进行交互,得到预期结果.

由于HaaS100的板子默认没有配置LCD, 所以为了方便开发者使用,通过打印LOG 的方式将结果输出.

 

2.2、具备功能

检测图像中的物体。可识别90类物体,例如:人体、椅子、篮球、摩托车、旗帜、斑马等。

 

2.3、效果呈现

测试资源图片:"/data/python-apps/ml/object-detect/res/test.jpg"

输出结果:

# -------------------Welcome HaasAI MicroPython-------------------------ml ucloud ObjectDet demo start-----object num:4Object Detect type: flowerObject Detect type: flowerObject Detect type: plants pot/vaseObject Detect type: laptopbytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')-----ml ucloud ObjectDet demo end-----

 


3、图像分类技术介绍

3.1、常见机器视觉技术

图像分类、目标定位、目标检测、实例分割是机器视觉中最常用的技术,其中,图像分类技术是其他几种技术的基础。

 

3.2、常见图像分类算法介绍


  • AlexNet(ILSVRC-2012):AlexNet 是LeNet的更深、更宽版本,深度达到了8层。推动卷积神经网络的普及。AlexNet首次在CNN中成功应用了RELU、Dropout和LRN等激活函数
  • ZF Net(ILSVRC-2013):是调整过架构超参数的AlexNet改进型。

  • VGGNet(ILSVRC-2014亚军):展示了网络的深度是良好表现的关键因素,VGG网络深度达到了19层。 自此,深度学习模型的分类准确率已经达到了人类的水平(5%~10%)。
  • GoogleNet(ILSVRC-2014):其主要贡献是研发了Inception Module,大幅减少了网络中的参数数量(四百万,相比AlexNet的六千万), Inception-v1同时也被称为googleNet,在后续几年中,google也相继提出了性能更好的Inception-v2和Inception-V3。

  • ResNet(ILSVRC-2015) 引入在在训练时更容易收敛的残差网络,网络深度达到了152,更高的精度。
  • Trimps-Soushen(ILSVRC-2016):以Top-5 2.99%的准确率获得冠军

  • SENet(ILSVRC-2017):以Top-5 2.25%的准确率获得冠军 ,SENet的卷积操作融合了空间和特征通道信息。

 

3.2.1、ImageNet系列算法

从AlexNet到RestNet,网络深度不断增加,识别准确率得到了大幅提高,下图是基于ImageNet数据集top5错误率

 

3.2.2、MobileNet

Google于2017年提出了更轻量的MobileNet-V1,并在后续几年提出了性能更好的MobileNet-V2, MobileNet-3; MobileNet在目标检测、细粒度分类、人脸属性和大规模地理定位等方面都体现出了非常好的实践效果,在详细介绍MobileNet之前,先对比一下GoogleNet,ResNet,MobileNet的算力开销。

 

3.2.3、MobileNet-V1

创新点1:使用深度可分离卷积,在低精度损失情况下有效减少了参数数量和算力开销

  • 设定DF为特征图尺寸,DK为卷积核尺寸,M为输入通道数,N为输出通道数。
  • 传统卷积计算量为: DF∗DF∗DK∗DK∗M∗N

  • 深度可分离卷积计算量为: DK∗DK∗M∗DF∗DF+1∗1∗M∗N∗DF∗DF

 

创新点2:使用了relu6作为激活函数

 

创新点3:增加两个超参数,称为Width Multiplier (α 超参数)和 Resolution Multiplier(ρ 超参数)

 

3.2.4、MobileNet-V2


  • 创新点1:引入了残差网络,使得训练时候更容易收敛
  • 创新点2:在进行depthwise之前先进行1x1的卷积增加feature map的通道数,实现feature maps的扩张,提升了精度,但是增加了一定的计算量。pointwise结束之后弃用RELU6激活函数,改用Linear激活函数,来防止RELU对特征的破坏

相对于MobileNet-V1 28层的网络深度,MobileNet-V2的网络深度达到了54层,延时也低了很多

 

3.2.5、MobileNet-V3


  • 对V2输出层的改造:
  • 将平均池化层提前。在使用1×1卷积进行扩张后,就紧接池化层-激活函数,最后使用1×1的卷积进行输出,通过这一改变,能减少10ms的延迟,提高了15%的运算速度,且几乎没有任何精度损失。

准确率和计算速度都高于MobileNet-V2,延时也不断下降

 

4、Demo体验

4.1、代码下载和编译

参考《HaaS100快速开始》下载,编译,烧录,AliOS Things代码.(解决方案选择:py_engine_demo)

烧录完成,启动设备,通过串口输入:

(命令中的 ssid password 是开发者自己工作环境的wifi 用户名和密码)

python /data/python-apps/wifi/main.py ssid  passwordpython /data/python-apps/ml/object-detect/main.py

 


4.2、示例代码


from minicv import MLprint("-------------------Welcome HaasAI MicroPython--------------------")print("-----ml ucloud ObjectDet demo start-----")#下面的这几个xxx 账号值,是阿里云官网系统按照4.3涨价的设备端配置一步步得到的,详细步骤参考4.3章节OSS_ACCESS_KEY = "xxxx"    #"Your-Access-Key"OSS_ACCESS_SECRET = "xxxx" #"Your-Access-Secret"OSS_ENDPOINT = "xxxx"      #"Your-OSS-Endpoint"OSS_BUCKET = "xxxx"        #"Your-OSS-Bucket"ml = ML()ml.open(ml.ML_ENGINE_CLOUD)ml.config(OSS_ACCESS_KEY, OSS_ACCESS_SECRET, OSS_ENDPOINT, OSS_BUCKET, "NULL")ml.setInputData("/data/python-apps/ml/object-detect/res/test.jpg")ml.loadNet("ObjectDet")ml.predict()responses_value = bytearray(10)ml.getPredictResponses(responses_value)print(responses_value)ml.unLoadNet()ml.close()print("-----ml ucloud ObjectDet demo end-----")

 


4.3、设备端配置


4.3.1、账号注册

注册链接:https://www.aliyun.com/

点击红色框圈中的“立即注册”按钮进行注册.

 

4.3.2、OSS参数获取

使用OSS功能的时候涉及到四个配置参数:AccessKeyId,AccessKeySecret,Endpoint,BucketName.

AccessKey 获取:

登录https://ram.console.aliyun.com/账号管理平台查看AccessKeyId,AccessKeySecret(账号为上一节中注册的账号)

点击账号头像框中的"AccessKey管理"按钮.

点击按钮"查看Select",获取AccessKeyId,AccessKeySecret

Bucket账号获取:

登陆OSS控制台https://oss.console.aliyun.com/创建Bucket,创建时地域一定要选择上海

 

 

在Bucket创建好后,从上图我们可以看到:

Endpoint:oss-cn-shanghai.aliyuncs.com

BucketName就是我们创建Bucket取的名字oss-ai-dev-one

 

4.3.3、Bucket文件夹创建

 

4.3.4、Bucket文件夹权限

创建好文件夹后,记住一定要修改文件夹权限,否则访问失败.

 

 

开发者技术支持

Python轻应用继承了Python易学易用的特点,同时提供了基于嵌入式硬件的基础库封装,让开发者可以很方便的通过交互式的环境,实时进行嵌入式开发,让嵌入式开发也变得简单方便。

如需更多技术支持,可加入钉钉开发者群,获取一对一的技术支持!

更多技术与解决方案介绍,请访问HaaS官网 https://haas.iot.aliyun.com/

 


推荐阅读
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 词袋模型的通俗介绍
    词,袋, ... [详细]
  • 本文介绍了网页播放视频的三种实现方式,分别是使用html5的video标签、使用flash来播放以及使用object标签。其中,推荐使用html5的video标签来简单播放视频,但有些老的浏览器不支持html5。另外,还可以使用flash来播放视频,需要使用object标签。 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • 本文介绍了Hive常用命令及其用途,包括列出数据表、显示表字段信息、进入数据库、执行select操作、导出数据到csv文件等。同时还涉及了在AndroidManifest.xml中获取meta-data的value值的方法。 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
author-avatar
小样2502857665
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有