分享 | 使用TensorFlow+OpenVINO™ 工具套件训练并部署AI模型

openlab_4276841a 更新于 1月前

概述


TensorFlow是Google开源深度学习框架,可以用于机器学习、语音识别、目标检测等多种人工智能算法的开发。TensorFlow Object Detection API是TensorFlow框架中专门用于目标检测应用的深度学习框架,使用该框架可以快速训练出不同种类的深度学习目标检测模型。如图1所示。

图1 TensorFlow Object Detection API

本文基于TensorFlow Object Detection API框架搭建基于深度学习的目标检测应用的开发环境,OpenVINO™工具套件为目标检测模型优化部署的框架,详细介绍了FasterRCNN目标检测模型训练,以及在OpenVINO™ Inference Engine 应用程序典型的开发流程中,怎样使用C++编程语言开发AI推理应用程序。

训练目标检测模型需要极大的算力,本文的硬件平台选择为为英特尔®NUC(N ext Unit of Computer)产品线系列的幻影峡谷,英特尔®NUC 是英特尔®公司设计制造的功能强大的迷你计算机(Mini PC),而该系列中的幻影峡谷是一款具备 AI 训练能力的迷你计算机。

使用的幻影峡谷与深度学习模型训练相关的参数如下。


本文需要的软件运行环境及其对应版本如下。


使用TensorFlow Object Detection API进行模型训练

第一步,标注数据集并生成TFRecord文件


首先从Kaggle直接下载猫狗数据集,使用LabelImg进行标注,将标注后的.xml文件和.jpg格式的原文件一齐放进数据训练集所对应的文件夹,再按照比例依次划分验证集和测试集并分别放入相应文件夹。

标注图片完毕后,根据标注文件的标签类型创建标签映射文件:label_map.pbtxt,在标签文件中,每个标注类型对应一个item项,每个项有两个属性,id和name。id是整形数据本文标签有猫和狗两个类型,id的编号便从1到2,如代码清单1所示:

代码清单1 创建标签映射文件

item {
id: 1
name: 'cat'
}


item {
id: 2
name: 'dog'
}

最后创建TFRecord文件,TFRecord格式文件是向TensorFlow模型输入数据速度最快,效率最高的格式文件。标注完数据集,创建标签映射文件后,根据如图2所示相应命令,创建train.tfrecord和eval.tfrecord文件。


图2 创建TFRecord文件

第二步,修改预训练模型配置文件,启动模型训练


TensorFlow Model Zoo提供多个在coco数据集上完成训练的目标检测模型,本文以下载faster_rcnn_resnet50_v1_640*640_coco17_tpu-8模型为例,模型下载解压后,得到“checkpoint”、“saved_model”和“pipeline.config”三个文件,在进行迁移学习配置模型文件时需要修改“pipeline,config”文件的内部参数。

根据模型训练的需要分别修改配置文件“pipeline.config”中num_classe***atch_size、num_steps等参数值,以及配置标签映射文件和TFRecord文件的路径。Pipeline.config文件配置完毕后,即可根据本文提供的模型训练脚本启动训练,如图3所示。


图3 启动模型训练

第三步,导出模型推理预测


在模型训练过程中会产生一系列的checkpoint检查点文件,模型训练过程中,所涉及到的参数和权重值全部记录在检查点文件中,但是检查点文件没有关于模型计算的源代码。

所以在模型推理计算阶段,需要将checkpoint文件和模型计算的描述一起打包成可以部署的SavedModel格式。生成的SavedModel格式文件夹如图4所示。


图4 生成SavedModel格式文件

生成SavedModel后即可执行推理计算,首先将本文附带的object_detection_example_2.py模型推理计算的脚本下载到本地,打开object_detection_example_2.py文件,根据实际路径情况修改PATH_TO_IMAGES_DIR,PATH_TO_SAVED_MODEL,PATH_TO_LABELS三处,修改完毕运行该Python脚本,即可得到模型推理计算的结果,如图5所示。


图5 执行模型推理计算

使用OpenVINO™工具套件


部署


TensorFlow支持将训练好的深度学习模型通过OpenVINO™工具套件对模型进行优化部署,在初始化OpenVINO™工具套件使用环境,安装完毕OpenVINO™工具套件相关依赖后即可进行加速部署。

第一步,使用Model——Optimizer优化模型


Model_Optimizer工具是OpenVINO™工具套件中用于深度学习优化的Python脚本,支持从各种深度学习框架导入训练后的模型,并将其转换为IR格式文件。

启动tensorflow虚拟环境,首先输入命令<pip install -r requirements_tf2.txt>安装mo_tf.py运行时依赖的python软件包,再输入命令:<python mo_tf.py --saved_model_dir d:\tf_train\workspaces\cats_dogs\exported_model\my_faster_rcnn\saved_model --tensorflow_object_detection_api_pipeline_config d:\tf_train\workspaces\cats_dogs\exported_model\my_faster_rcnn\pipeline.config --output_dir d:\tf_train\workspaces\cats_dogs\IR_model --data_type FP16 --transformations_config extensions\front\tf\faster_rcnn_support_api_v2.0.json>,执行TensorFlow模型并优化成IR文件,运行结果如图6所示:


图6 生成IR格式文件

第二步,Inference Engine应用程序典型开发流程


Inference Engine典型的开发流程一共有八步,每一步都对应着相应的C++ API,如图7所示。


图7 Inference Engine 典型开发流程

第三步,编写OpenVINO™ AI推理计算C++范例


根据第二步的八个Inference Engine典型开发程序所对应的C++ API即可编写AI推理计算程序。

首先完成Visual Studio 项目属性和环境变量的配置,然后使用C++编程语言开发OpenVINO™推理应用程序,在执行main()函数之前引入相应库函数,配置推理计算设备,IR文件路径,媒体文件路径,部分代码如代码清单2所示:

代码清单2 AI推理范例部分代码
// ----- Step 3. 配置模型输入&输出 ----------------
// ------------------------------------------------
// 参考资料:https://docs.openvinotoolkit.org/latest/openvino_docs_IE_DG_Integrate_with_customer_application_new_API.html
std::cout << "Step 3. Configure input & output." << std::endl;
// 获得网络输入信息(键值对)
InferenceEngine::InputsDataMap inputs_info = network.getInputsInfo();
// 获得网络输出信息(键值对)
InferenceEngine::OutputsDataMap output_info = network.getOutputsInfo();
std::string image_info_name = ""; //存储image_info的名字
std::string input_tensor_name = ""; //存储input_tensor的名字
auto item = inputs_info.begin();
image_info_name = item->first; //获取image_info输入的名字
auto image_info_ptr = item->second; //获取image_info输入的指针
item++;
input_tensor_name = item->first; //获取input_tensor输入的名字
auto input_tensor_ptr = item->second; //获取input_tensor输入的指针
std::cout << "image_info_name:" << image_info_name << "; input_tensor_name:" << input_tensor_name << std::endl;
//配置input_tensor输入:U8,NCHW, 保持默认的禁止自动放缩输入图像和禁止自动转换颜色通道
input_tensor_ptr->setPrecision(InferenceEngine::Precision::U8);
// U8最通用,参考资料:https://docs.openvinotoolkit.org/latest/openvino_docs_IE_DG_supported_plugins_Supported_Devices.html
input_tensor_ptr->setLayout(InferenceEngine::Layout::NCHW);

编译好程序后,将解决方案配置设置为Release和X64,单击“本地windows调试器”编译并运行cats_dogs程序,编译结果如图8所示:


图8 AI范例程序编译结果

总结


本文通过从零开始训练猫狗数据集目标检测模型,详细介绍了基于TensorFlow Object Detection API框架和预训练模型,使用Python编程语言训练猫狗FasterRCNN目标检测模型的完整流程,在模型部署模块中,详细介绍了OpenVINO™工具套件及其两个重要组件:Model Optimizer和Inference Engine的安装和使用,将训练完毕的FasterRCNN模型转换为IR格式文件后,使用C++编程语言进行AI应用程序的开发方法。

在使用Inference Engine进行模型推理部署时,OpenVINO™工具套件提供了八个统一的API接口,流程化的开发方式极大降低了AI应用程序开发的难度,对于不同模型的不同输入输出节点,只需少量改动应用程序,便可快速独立开发属于自己的AI应用程序。

**本文转自:英特尔物联网 **

0个评论