深度学习图像识别技术:基于TensorFlow Object Detection API和OpenVINO? 工具套件
上QQ阅读APP看书,第一时间看更新

3.2 使用TensorFlow预训练模型

TensorFlow预训练模型库(TensorFlow detection model zoo)提供了多个已经在COCO数据集、Kitti数据集、Open Images数据集、AVA v2.1数据集和iNaturalist Species Detection数据集上完成了训练的模型。

其网页链接为https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md。

若需要识别的物体刚好在这些数据集内,那么这些模型下载后无需训练就可以直接使用。若不在,则只需要在自己的数据集上做迁移学习即可。

3.2.1 如何选择预训练模型

Model zoo中的已训练好的模型如图3-2所示。

图3-2 COCO数据集预训练模型

模型名称(Model name)的命名规则是:目标检测算法_特征提取网络_训练数据集。例如,ssd_mobilenet_v1_coco的意思是,该模型使用了SSD(Single Shot Multibox Detector)目标检测算法,mobilenet特征提取网络,在COCO数据集上进行了训练。

速度(Speed)是指该模型在NVIDIA GeForce GTX TITAN X显卡上处理600×600分辨率图像(包含预处理和后处理)的速度,这个数值可以让大家对模型运行的相对快慢有个感性的认识。例如,ssd_resnet_50_fpn_coco的运行速度就比ssd_mobilenet_v1_coco要慢。

平均精度均值(mAP)是指该模型识别多类物体时,每类物体识别精度(AP)的平均值。mAP值越高,表明该模型识别精度越高。例如,ssd_resnet_50_fpn_coco的识别精度就比ssd_mobilenet_v1_coco要高。

输出(outputs)有两种类型:边界框(boxes)和掩膜(Masks),如图3-3所示。

图3-3 边界框和掩膜

3.2.2 预训练模型的文件构成

TensorFlow detection model zoo中预训练模型的文件组成基本一致,以ssd_inception_v2_coco为例,请下载ssd_inception_v2_coco,解压后请把文件夹名也改为ssd_inception_v2_coco,可以得到如图3-4所示的多个文件。

图3-4 预训练模型文件

frozen_inference_graph.pb是TensorFlow frozen graph(冻结图)文件,里面以常量的方式保存着模型的权重(weights),可以直接用于模型推理计算(Inference)。3.8.7节的范例程序object_detection_example_1.py,就是直接使用frozen_inference_graph.pb文件做推理计算的。

model.ckpt.data-00000-of-00001、model.ckpt.index和model.ckpt.meta这三个文件一起构成TensorFlow的Checkpoint文件,用于训练过程中,保存模型变量、模型权重等重要参数。迁移学习需要先从Checkpoint文件读取现有模型的变量、权重等重要数据,然后再基于新的训练数据集继续训练模型。

由于Checkpoint文件个数太多,不方便推理计算调用,所以当模型训练完毕后,需要执行模型Frozen(冻结)操作,即把所有变量的值提取出来变成常量,跟模型权重一起合并为一个*.pb文件。

pipeline.config是文本格式的用于生成TensorFlow Graph(计算图)的配置文件。迁移学习时,需要修改里面的一部分参数,这在后续章节中会详细介绍。

3.2.3 一个典型的深度学习训练流程

一个典型的TensorFlow Object Detection API框架的深度训练步骤包括:准备图片;标注图片;训练模型;导出冻结图(*.pb)。如图3-5所示。

图3-5 典型训练流程

接下来,本书将按照此流程依次详述深度学习训练的各个步骤。