文章来源于英特尔物联网
概述
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 训练能力的迷你计算机。
使用的幻影峡谷与深度学习模型训练相关的参数如下。
11th Gen Intel® Core™ i7-1165G7
Intel® Iris® Xe Graphics
11th Gen Intel® Core™ i7-1165G7
本文需要的软件运行环境及其对应版本如下。
TensorFlow 2.4.0
OpenVINO 2021.4 LTS
Python 3.8.10
使用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_classes、batch_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所示。
使用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_trainworkspacescats_dogsexported_modelmy_faster_rcnnsaved_model –tensorflow_object_detection_api_pipeline_config d:tf_trainworkspacescats_dogsexported_modelmy_faster_rcnnpipeline.config –output_dir d:tf_trainworkspacescats_dogsIR_model –data_type FP16 –transformations_config extensionsfronttffaster_rcnn_support_api_v2.0.json>,执行TensorFlow模型并优化成IR文件,运行结果如图6所示:
第二步,Inference Engine应用程序典型开发流程
Inference Engine典型的开发流程一共有八步,每一步都对应着相应的C++ API,如图7所示。
第三步,编写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所示:
总结
本文通过从零开始训练猫狗数据集目标检测模型,详细介绍了基于TensorFlow Object Detection API框架和预训练模型,使用Python编程语言训练猫狗FasterRCNN目标检测模型的完整流程,在模型部署模块中,详细介绍了OpenVINO™工具套件及其两个重要组件:Model Optimizer和Inference Engine的安装和使用,将训练完毕的FasterRCNN模型转换为IR格式文件后,使用C++编程语言进行AI应用程序的开发方法。在使用Inference Engine进行模型推理部署时,OpenVINO™工具套件提供了八个统一的API接口,流程化的开发方式极大降低了AI应用程序开发的难度,对于不同模型的不同输入输出节点,只需少量改动应用程序,便可快速独立开发属于自己的AI应用程序。
详细步骤和完整代码见文末阅读原文链接。
如欲了解更多OpenVINO™ 开发资料,
请扫描下方二维码,
我们会把最新资料及时推送给您。
* 本文内容及配图均为“英特尔物联网”的原创内容。该公众号的运营主体拥有上述内容的著作权或相应许可。除在微信朋友圈分享之外,如未经该运营主体书面同意,请勿转载、转帖或以其他任何方式复制、发表或发布上述内容。如需转载上述内容或其中任何部分,请留言联系。
英特尔、英特尔标识、以及其他英特尔商标是英特尔公司或其子公司在美国和/或其他国家的商标。
©英特尔公司版权所有。
* 文中涉及的其它名称及商标属于各自所有者资产。