当前位置: 首页 > 科技观察

不知道如何部署机器学习模型?15张图带你走进TensorFlow部署框架!

时间:2023-03-13 18:15:53 科技观察

这篇文章开始的前几天,和一个从事开发3年的朋友小李聊天,了解到他的公司在做一个机器学习相关的项目。最近,他接到了一个任务,部署训练好的机器学习模型。这让小李很担心。接触机器学习开发快半年了。主要从事数据收集、数据清洗、环境搭建、模型训练、模型评估,但做模型部署还是第一次。所以,我结合自己的经验,对机器学习模型部署进行了普及。如图1所示,在传统的编程中,我们将规则和数据传递给程序,得到我们想要的答案,而对于机器学习,我们是通过答案和数据来训练规则,而这个规则就是机器学习的模型.图1传统编程与机器学习的区别。机器学习的模型部署就是将这个规则(模型)部署到需要应用机器学习的终端上。如图2所示,机器学习训练出来的模型可以理解为函数、API或SDK,部署到相应的终端(图中灰色部分)。部署后,终端具有模型赋予的能力。这时可以输入新的数据,根据规则(模型)得到预测结果。图2机器学习模型部署原理TensorFlow机器学习部署框架小李听了我的介绍表示能看懂,还饶有兴致的跟我讲了他们项目的部署情况,想征求我的意见。如图3所示,他们想把一个图像识别模型部署到IOS、Android、RaspberryPi、Web浏览器和服务器上。图3模型部署场景从部署应用场景来看,具有轻量级、跨平台的特点。同一个机器学习模型需要部署在多个不同的平台上,每个平台的存储和计算能力不同。同时还要兼顾模型运行的可用性、性能、安全性和可扩展性,需要一个相对稳定的大平台。于是,我向他推荐了TensorFlow的机器学习部署框架。如图4所示,TensorFlow的部署框架提供了针对不同平台的组件来支持。其中Android、IOS、RaspberryPi对应的是TensorFlowLite,它是专门用于移动端的模型部署框架。浏览器端可以使用TensorFlow.js,服务器端可以使用TensorFlowServing。图4TensorFlow机器学习模型部署框架TensorFlowLite实战操作小李想了解更多部署流程。刚好有个项目用了TensorFlow部署框架,就给他看了流程。本项目是将“猫狗识别”模型部署到安卓手机上。由于IOS、Android、树莓派、浏览器都属于客户端,它们所拥有的计算资源无法与服务器相提并论。尤其是移动应用,具有轻量、低延迟、高效、隐私保护、省电等特点。因此,TensorFlow专门设计了它们的部署,并使用TensorFlowLite部署它们。使用TensorFlowLite部署模型需要三个步骤:使用TensorFlow训练模型。转换TensorFlowLite格式。使用TensorFlowLite解释器加载执行。第一步,我们完成了模型训练,第二步,将生成的模型转换成TensorFlowLite可以识别和使用的模式格式。上面提到,模型是在移动端使用的,需要考虑各种问题,所以需要为移动端生成专门的文件格式。第三步,将转换后的TensorFlowLite文件加载到移动端的解释器中并执行。由于我们的重点是模型的部署,所以第一步的训练模型暂时略过,即假设你已经训练好了模型。第二步的模型转换可以参考图5,TensorFlow模型会通过Converter转换成后缀为“.tflite”的模型文件,然后发布到不同的平台,由解释器在各个平台上进行处理平台。解释和加载。图5TensorFlowLite模型转换架构模型保存和转换以上介绍了TensorFlowLite的架构,这里需要将模型保存为TensorFlow模型并进行转换。如图6所示,我们调用TensorFlow中的saved_model.save方法将模型(训练好的模型)保存到指定目录。图6保存TensorFlow模型。保存模型后,转换模型。如图7所示,在TensorFlowLite中调用TFLiteConverter包中的from_saved_model方法生成转换器实例(模型转换器),然后调用转换器中的convert方法对模型进行转换,将转换后的文件保存到指定的目录。图7转换为tflite模型格式并加载应用模型由于本例为Android系统的模型部署,因此需要引入Android中TensorFlowLite的依赖。如图8所示,引入TensorFlowLite的依赖,在aaptOptions中设置noCompress为“tflite”,即不压缩带有“tflite”的文件。如果设置了压缩,Android系统可能无法识别tflite文件。图8在项目中引入TensorFlowLite的依赖。配置好依赖后,将转换后的tflite文件复制到assets文件中,如图9所示,稍后会加载该文件执行机器学习模型。图9添加tflite文件添加tflite文件后,我们将创建一个Classifier分类器来对“猫狗”图片进行分类。如图10所示,Classifer中的init初始化解释器(interpreter),调用loadModuleFlie方法加载tflite文件,并指定分类标签(labelList),其中标签为“猫狗”(catdog)。图10初始化解释器创建分类器后,使用猫和狗的分类模型来识别图片。即在Classifier类中,如图10所示,convertBitmapToByteBuffer方法的入参是bitmap,也就是我们输入的猫狗的图片,会在这个方法中进行转换,特别注意for循环中的红色。对绿色和蓝色三个通道进行转换,转换后的结果放入byteBuffer返回。recoginzeImage方法会调用convertBitmapToByteBuffer,使用解释器的run方法进行图像识别工作,即使用机器学习模型识别猫狗图片。图11图片的识别上面的图形转换过程过于抽象,我们就如图12所示具体描述一下。我们输入的图片是图片左上角的一张395*500的图片,imageView中的图片会被转换成位图形式。由于我们的模型输入需要224*224的格式,所以需要进行转换。然后,将像素点放入224*224的ByteBuffer数组中存储,最后归一化RGB(红绿蓝)像素点(除以255)作为模型的输入参数。图12输入图像的转换过程至此,机器学习模型的加载和应用就完成了。当然,输入文件和布局是少不了的。如图13所示,我们将待预测的图片(猫狗图片)存放在drawable文件夹下。然后在布局下创建activity_image_classifier.xml文件来构建和存储ImageView。图13输入图像文件和布局文件最后,创建ImageClassifierActivity以显示图像并响应识别图像的事件。如图14所示,在initViews方法中绑定每张图片的onclick事件,然后在onclick方法中调用recoginzieImage方法对图片进行识别。图14在onclick中进行图像识别我们来看看效果吧。如图15所示,当点击相应的图片时,会出现“狗”的提示,提示预测结果。图15演示效果回顾整个过程并不复杂。我将TensorFlowlite部署模型总结为以下步骤:保存机器学习模型。将模型转换为tflite格式。以tflite格式加载模型。使用解释器加载模型。输入参数来预测结果。想进一步学习TensorFlow模型部署技巧的同学可以前往TensorFlow官方课程,注册中文大学MOOC账号,免费学习:https://www.icourse163.org/course/youdao-1467217161?from=searchPage&outVendor=zw_mooc_pcssjg_.还有Google开发者专家的在线部署讲解和Q&A,非常不错。建议想初步了解TensorFlow部署功能的同学关注https://zhibo.51cto.com/liveDetail/373。最后,小李听了我对机器学习模型部署的讲解,了解了TensorFlow的部署流程后,更加迫不及待想要尝试实际部署了。我认为使用TensorFlow的部署过程合乎逻辑且易于实施,对于具有3-5年经验的开发人员来说很容易学习。另外,TensorFlow官方提供《TensorFlow入门实操课程》,适合机器学习零基础初学者:https://www.icourse163.org/course/youdao-1460578162?from=searchPage&outVendor=zw_mooc_pcssjg_。作者介绍崔浩,社区编辑,资深架构师,拥有20年架构经验。曾任惠普技术专家,参与多个机器学习项目,撰写并翻译了20多篇关于机器学习和NLP的热门技术文章。《分布式架构原理与实践》作者。