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: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、常见机器视觉技术
图像分类、目标定位、目标检测、实例分割是机器视觉中最常用的技术,其中,图像分类技术是其他几种技术的基础。
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 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、账号注册
点击红色框圈中的“立即注册”按钮进行注册.
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/