前言
随着人工智能的不断发展,深度学习这门技术也越来越重要并逐步普及,很多人也对深度学习这项技术产生了浓厚兴趣,奈何受制于自身知识储备和学习训练环境的缺乏,对此知之甚少。本文就此介绍深度学习的基础知识和MindStudio的可视化流程编排分析。
一、深度学习是什么?
深度学习是机器学习的一种,而机器学习是实现人工智能的必经路径。深度学习的概念源于人工神经网络的研究,含多个隐藏层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。研究深度学习的动机在于建立模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本等。
以上文字摘自百度百科关于深度学习的词条解释,对于我们大多数人而言,百度百科上的词条解释过于抽象晦涩,难于理解 。其实,不管是本科阶段听闻的卷积神经网络(CNN),还是近期爆火的“OpenAI”,它们都属于深度学习的一种或多种技术应用。在我个人的理解上,深度学习的本质是一种算法,一种实现机器学习的算法。也许你会听到诸如CNN,DBN(以多层自编码神经网络的方式进行预训练,进而结合鉴别信息进一步优化神经网络权值的深度置信网)等概念与专业名词,但它们都是属于深度学习的一种技术应用。简而言之,深度学习就是一种模型识别算法的统称。
二、深度学习的三大支柱—算力,算法和数据
why?如何理解上述标题?
看下面:
机器输入大量文本,图片等数据, 通过深度学习算法训练学习识别特定目标,使之具备学习分析能力,而训练模型,运行海量数据则需要巨量算力资源(硬件服务器资源)。因此,愚私以为,算力是“基础”,数据是“源头”,算法是“灵魂”。
三、MindStudio是什么?
引用华为昇腾社区官方的定义说明,“全流程开发工具链MindStudio提供您在AI开发所需的一站式开发环境,支持模型开发、算子开发以及应用开发三个主流程中的开发任务依靠模型可视化、算力测试、IDE本地仿真调试等功能,MindStudio能够帮助您在一个工具上就能高效便捷地完成AI应用开发”。
简而言之,MindStudio是一个全流程开发的AI应用,它通过CANN整合调动整个算力资源,内置自研的深度学习框架或适配外界流行的AI框架,并且它也包含内置AI开发所需的工具包和模型库,开发者可以用它开发自己想要的AI应用,便捷高效。
四、案例应用可视化流程编排分析
4.1 案例应用环境准备
1.购置云服务器,按照指南配置ECS
2.下载并安装MindStudio及相应的SDK,配置环境
3.运行情绪识别案例代码
4.2 情绪识别案例运行结果
如下图所示
4.3 案例可视化流程编排分析
4.3.1 图像输入(appsrc)
功能叙述:该插件需配合SendDate接口与SendDateWithUniqueId接口,主函数通过调用streamManagerApi.SendData()方法向Stream中发送数据,appsrc将数据发给下游元件(图像预处理模块)
代码分析
streamName = b"detection" #流的名称 inPluginId = 0 #目标输入插件Id,即appsrc元件的编号0 dataInput = MxDataInput() #待发送的数据 try: with open(img_path, 'rb') as f: dataInput.data = f.read() except: print("No such image") exit() ret = streamManagerApi.SendData(streamName, inPluginId, dataInput) #向指定Stream上的输入元件发送数据(appsrc)
4.3.2 图像预处理(mxpi_imagedecoder,mxpi_imageresize)
1.mxpi_imagedecoder
功能简述:给传输进来的图片解码
详细功能如下
2.mxpi_imageresize
功能叙述:对解码后的图片进行缩放
详细功能如下
4.3.3 人脸检测(mxpi_tensorinfer、mxpi_objectpostprocessor和mxpi_distributor)
1.mxpi_tensorinfer
功能叙述:对缩放后的图片输入的张量进行推理
详细功能如下
2.mxpi_objectpostprocessor
功能叙述:对前段mxpi_tensorinfer插件推理的结果进行后护理
详细功能如下
3.mxpi_distributor
功能叙述:将后处理的检测结果发送人脸检测结果
详细功能如下
4.3.4 人脸抠图(mxpi_imagecrop)
功能叙述:此插件会根据人脸检测结果中的(x,y)坐标和宽高抠出人脸
详细功能如下
4.3.5 情绪分类(mxpi_tensorinfer)
功能叙述:运用scan模型对人脸进行情绪分类
详细功能如下
4.3.6 输出结果(appsink)
功能叙述:将最终的结果输出
详细功能如下
代码如下
for face_loc, emo in zip (face_locations, emotion_results): #将前面的face_location,emotion_result)通过python内置函数zip合成一个列表,使用for循环进行遍历处理输出 max_index = np.argmax(np.frombuffer(emo.tensorVec[0].dataStr, dtype = np.float32)) y0 = face_loc.y0 x0 = face_loc.x0 y1 = face_loc.y1 x1 = face_loc.x1 height = y1 - y0 width = x1 - x0 cv2.rectangle(img, (int(x0), int(y0)), (int(x1), int(y1)), (255, 0, 0), 2) cv2.putText(img, emotions[max_index], (int(x0), int(y0) - 1), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 0), 2) cv2.imwrite("./my_result.jpg", img) #输出结果
五、思考
提起深度学习和AI应用,很多人可能都认为该类应用开发需涉及数学,机器学习,数据分析等大量学科领域的知识储备,晦涩难以掌握,是学术大咖,院士学者之流研究的“屠龙宝刀”,但其实不然,辅以MindStudio这种全流程开发工具,让普通人也能参与开发AI应用,让AI不再神秘,让高精尖技术真正落地,让我们每一个人真正参与其中,更好的服务我们自己乃至整个社会。
本文讨论的情绪识别样例,它是从插件appsrc开始,中间穿插多个媒体数据处理插件的协作运行,到插件appsink结束,整个业务流程的开展表面上简单的就好像我们写一个方法,输入一个变量进入该方法内,然后处理完后输出变量,over!
情绪识别样例虽以python开发启动,辅以各种插件处理,然近期正学习后端开发的相关知识,对数据挖掘知识知之甚少, 特别是样例代码中的numpy,cv2的用法,故只能对整个情绪识别样例做个整体上的了解与思考,不清楚细节,欢迎各位大佬们批评指正。