【华为云-上云之路】昇腾AI弹性云服务器耦合ModelArts打造云上开发、部署灵活开发应用(目标检测方向篇)
ModelArts具备一键部署能力,但往往这“一键”操作带来不灵活的使用体验,这次就一起来试一下昇腾AI弹性云服务器耦合ModelArts部署灵活AI应用(目标检测),系统构成如下图所示。对于上云的优点与缺点,还有成本等因素会在实验介绍完后进行总结,接下来先进行简单的两大实力选手的“昇腾AI弹性云服务器”与“ModelArts”精彩耦合实验。
大致流程,先准备数据集,然后在ModelArt上训练模型,转换模型,在昇腾AI弹性云服务器上使用Mind Studio编写程序,建立目标检测应用(识别猫)。
1. ModelArt建立数据集,标注,选取算法训练,转换模型:
新建数据集:
标注:
这里标注,目标检测同一张图可以标注多个物体或标签,也可以标注不规则图像(这里是用自己找的图像来标注,数据量比较少但,想要实现能把猫张嘴的部分框出来):
选择算法,这里选择VGG_SSD物体检测:
资源优先使用GPU:
训练参数如下:
开始训练:
进入模型管理创建模型转换任务,获得模型后进入昇腾AI弹性云服务器:
2. 在昇腾AI弹性云服务器上使用Mind Studio编写程序,建立目标检测应用(识别猫):
首先需要有一台AI加速型ECS(昇腾AI弹性云服务器):
启动Mind Studio:
打开detectionTest项目,填入AI加速型ECS弹性公网IP,进行绑定:
这里填AI加速型ECS弹性公网IP,一定要填弹性公网IP:
如下图所示,显示YES才是连接正常:
目标检测原理步骤如下:
① 数据获取引擎,读取本地jpg图片,将图片数据发送给图片预处理引擎。
② 预处理引擎获取到图片数据后 ,首先调用DVPP的JPEGD功能,实现jpg图片的解码,解码后的图片格式为YUV,接着用DVPP的VPC功能实现抠图与缩放,将原始图片的大小缩放到适配模型的输入要求,将经过处理的图片信息依次发送给推理引擎
③ 推理引擎获取到经过处理后的图片信息并加载om模型,对图片做推理,将推理结果发送给后处理引擎
④ 后处理引擎接受推理结果,每个图片的推理结果对应两路输出Tensor,将三张图片的输出Tensor(总共6个Tensor),写入到result_files文件夹下,MindStudio在Run结束时会读取该目录下的文件回传到MindStudio工程的“run->out->outputs”目录下。
将转换后的om的离线模型(vgg_ssd)放到/home/user/AscendProjects/detectionTest/工程目录下,如图所示:
数据获取引擎关键代码编写:
数据获取引擎是指“/home/user/AscendProjects/detectionTest/src/DataInput”目录下的“DataInput.cpp”和“DataInput.h”。增加两部分代码。
预处理引擎关键代码编写:
预处理引擎是指”/home/user/AscendProjects/detectionTest/src/ ImagePreProcess”目录下的“ImagePreProcess.cpp”和“ImagePreProcess.h”。增加两部分代码。
调用DVPP的JPEGD功能将JPEG格式的图片数据转化为YUV格式。
调用DVPP的VPC功能将YUV格式的图片数据进行大小缩放,以适配模型的输入要求。
模型推理引擎关键代码编写
模型推理引擎是指“/home/user/AscendProjects/detectionTest/src/ MindInferenceEngine”目录下的“MindInferenceEngine.cpp”和“MindInferenceEngine.h”。
后处理引擎关键代码编写
模型推理引擎是指“/home/user/AscendProjects/detectionTest/src/SaveFilePostProcess”目录下的“SaveFilePostProcess.cpp”和“SaveFilePostProcess.h”。
使用opencv读取图片信息。
使用opencv将模型解析结果标注到图片上。
运行并验证
使用自己的图片时,需要更改图片名称,大小,分辨率参数;如下图:
点击“Run” -> “Run ‘detection Test’”运行程序,程序运行成功会读取result_files中的内容,回传到本地,结果如下图所示:
第一张图猫是能识别到的;
第二张图猫张嘴的识别边框没有框到嘴巴,估计是我准备了20多张猫张嘴图太少了,导致无法框到;
第三张图有两只猫,但该模型竟然把被子都识别成一只大猫,数据很重要,少量图片很难达到想要的识别效果;
怀着统计学概率论的知识,我重新编译了整个项目;
以为识别效果能更好,但与之前一样效果,从侧面验证了现在的深度学习不管使用了迁移学习还是别的方式来增加精度,数据的量一定要多才可以;
3.总结:
1.相比ModelArts一键部署,昇腾AI弹性云服务器耦合ModelArts打造云上开发、部署目标检测或其他人工智能应用灵活度很高,部署代码可修改,意味着能做出很多能适应特定场景具备昇腾加速能力的AI应用,降低算力成本(相对于GPU);
2.为什么要做到与云端强结合?还是因为成本!在昇腾之前的一场直播“手写汉字识别的边缘计算架构—基于Atlas 200 DK的实践”中提出了一种“边-云-无线传感融合架构”如下图所示;
这个融合架构的想法是不错的,在项目不差资金的时候,每个做工程项目的人都想这样做,这样能保证系统快速反应,也能保证云端服务器处理少量的数据与发送、接受少量数据,并且在部分Atlas200DK或云端主机故障不能工作时也能响应系统请求或数据处理。在这高性能高保障的主从设计实际上大部分人在资金面前却不会选择。试想一下,花掉项目大部分预算购买云服务器使用率却不高;或者花掉项目大部分预算购买Atlas200DK,那么云端主机性能就不会太高;通常选择的方案确实摄像头带网络连接将数据传送到云服务器处理,再回传数据到控制中心。(这方式就像工业中经常使用的大型PLC+小型PLC,在资金限制情况下妥协方案是大型(或超大型组合使用例如西门子PLC1500H系列、PLC400H系列)PLC+远程IO(无数据处理能力只负责收集传感器数据传送到大型PLC处理))。相比之下只在云上开发运行降低了维护成本(多种设备需要更多人力维护与运营),降低了硬件成本(本地硬件坏了就需要更换),增加了安全性(部分本地设备容易被入侵)等,当然,还是那句话,项目不差钱怎么部署都能得出比较好方案。
3.云计算对于个人开发者来说是个宝库,因为能在低成本的环境中做实验,例如:如果要做一些深度学习方面的研究,首先对于个人开发者来说首先需要买一张GPU(型号Tesla V100 32G,价格在6万以上),而在云端训练在需要极低的金额就能使用强大的算力(有时还有优惠套餐卖);云服务器只要有网络就能连接,随时随地改BUG,再也不用急急忙忙跑去连接公司服务器;云上数据库让数据更有保障,多地容灾,异地备份;防攻击等众多安全功能还不用买特定设备。
云上资源以后一定会像现在的电费、水费、燃气费一样融入大家的生活中。
- 点赞
- 收藏
- 关注作者
评论(0)