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

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 的方式将结果输出.

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

2.2、具备功能

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

2.3、效果呈现

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

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

输出结果:

# -------------------Welcome HaasAI MicroPython--------------------
 
-----ml ucloud ObjectDet demo start-----
 
object num:4
 
Object Detect type: flower
 
Object Detect type: flower
 
Object Detect type: plants pot/vase
 
Object Detect type: laptop
 
 
 
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
 
-----ml ucloud ObjectDet demo end-----

3、图像分类技术介绍

3.1、常见机器视觉技术

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

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

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错误率

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

3.2.2、MobileNet

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

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

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

3.2.3、MobileNet-V1

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

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

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

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

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

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

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

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

3.2.4、MobileNet-V2

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

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

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

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

3.2.5、MobileNet-V3

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

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

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

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

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

4、Demo体验

4.1、代码下载和编译

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

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

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

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

4.2、示例代码

from minicv import ML
 
print("-------------------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/

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

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

4.3.2、OSS参数获取

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

AccessKey 获取:

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

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

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

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

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

Bucket账号获取:

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

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

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

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

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

Endpoint:oss-cn-shanghai.aliyuncs.com

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

4.3.3、Bucket文件夹创建

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

4.3.4、Bucket文件夹权限

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

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

开发者技术支持

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

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

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

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

上一篇:【阿里聚安全·安全周刊】操心的游戏破解者为开发商提高销量|加密货币必崩盘?


下一篇:bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居——排序+贪心+set