TF2目标检测API

Posted 人工智能遇见磐创

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TF2目标检测API相关的知识,希望对你有一定的参考价值。

作者|Ivan Ralašić
编译|VK
来源|Analytics Vidhya

Tensorflow目标检测API(TF OD API)刚刚变得更好。最近,Google发布了tf od api的新版本,它现在支持Tensorflow 2.x,这是一个我们一直在等待的巨大改进!

简介

最近目标检测(OD)的改进是由工业界广泛采用该技术所推动的。汽车制造商使用目标检测来帮助车辆自主驾驶道路,医生使用它改进诊断过程,农民使用它来检测各种农作物疾病……还有许多其他的使用案例(尚未发现),OD可以提供巨大的价值。

Tensorflow是一个深度学习框架,为自然语言处理(NLP)、语音合成、语义分割和目标检测等领域的许多最先进(SOTA)模型提供了支持。tf od api是一个开放源码的目标检测模型集合,它被深度学习爱好者和该领域的不同专家使用。

现在,当我们讨论了基本术语之后,让我们看看新的tf od api提供了什么!


新TF OD API

新的TF2 OD API引入了Eager执行,使得对象检测模型的调试更加容易;它还包括TF2 Model Zoo支持的新的SOTA模型。对于Tensorflow 1.x的好消息是新的OD API是向后兼容的,所以如果你喜欢,你仍然可以使用TF1,尽管强烈建议切换到TF2 !

除了SSD (MobileNet/ResNet),Faster R-CNN (ResNet/Inception ResNet),和Mask R-CNN模型在TF1 Model Zoo,TF2 Model Zoo引入了新的SOTA模型,如CenterNet, ExtremeNet,和EfficientDet。

TF2 OD API Model Zoo 中的模型是在COCO 2017数据集上预训练的,如果你对数据集中已经包含的类别感兴趣或在新的数据集中进行训练时可以用预训练模型初始化你的模型。预训练模型对于开箱即用的推断很有用。

使用TF OD API模型而不是自己实现SOTA模型可以让你有更多的时间关注数据,这是实现OD模型高性能的另一个关键因素。然而,即使你决定自己构建模型,TF OD API模型也提供了一个很好的性能基准测试!

根据你的要求,你可以从一长串不同型号中进行选择(速度与精度):

Model name Speed (ms) COCO mAP Outputs
CenterNet HourGlass104 512x512 70 41.9 Boxes
CenterNet HourGlass104 Keypoints 512x512 76 40.0/61.4 Boxes/Keypoints
CenterNet HourGlass104 1024x1024 197 44.5 Boxes
CenterNet HourGlass104 Keypoints 1024x1024 211 42.8/64.5 Boxes/Keypoints
CenterNet Resnet50 V1 FPN 512x512 27 31.2 Boxes
CenterNet Resnet50 V1 FPN Keypoints 512x512 30 29.3/50.7 Boxes/Keypoints
CenterNet Resnet101 V1 FPN 512x512 34 34.2 Boxes
CenterNet Resnet50 V2 512x512 27 29.5 Boxes
CenterNet Resnet50 V2 Keypoints 512x512 30 27.6/48.2 Boxes/Keypoints
EfficientDet D0 512x512 39 33.6 Boxes
EfficientDet D1 640x640 54 38.4 Boxes
EfficientDet D2 768x768 67 41.8 Boxes
EfficientDet D3 896x896 95 45.4 Boxes
EfficientDet D4 1024x1024 133 48.5 Boxes
EfficientDet D5 1280x1280 222 49.7 Boxes
EfficientDet D6 1280x1280 268 50.5 Boxes
EfficientDet D7 1536x1536 325 51.2 Boxes
SSD MobileNet v2 320x320 19 20.2 Boxes
SSD MobileNet V1 FPN 640x640 48 29.1 Boxes
SSD MobileNet V2 FPNLite 320x320 22 22.2 Boxes
SSD MobileNet V2 FPNLite 640x640 39 28.2 Boxes
SSD ResNet50 V1 FPN 640x640 (RetinaNet50) 46 34.3 Boxes
SSD ResNet50 V1 FPN 1024x1024 (RetinaNet50) 87 38.3 Boxes
SSD ResNet101 V1 FPN 640x640 (RetinaNet101) 57 35.6 Boxes
SSD ResNet101 V1 FPN 1024x1024 (RetinaNet101) 104 39.5 Boxes
SSD ResNet152 V1 FPN 640x640 (RetinaNet152) 80 35.4 Boxes
SSD ResNet152 V1 FPN 1024x1024 (RetinaNet152) 111 39.6 Boxes
Faster R-CNN ResNet50 V1 640x640 53 29.3 Boxes
Faster R-CNN ResNet50 V1 1024x1024 65 31.0 Boxes
Faster R-CNN ResNet50 V1 800x1333 65 31.6 Boxes
Faster R-CNN ResNet101 V1 640x640 55 31.8 Boxes
Faster R-CNN ResNet101 V1 1024x1024 72 37.1 Boxes
Faster R-CNN ResNet101 V1 800x1333 77 36.6 Boxes
Faster R-CNN ResNet152 V1 640x640 64 32.4 Boxes
Faster R-CNN ResNet152 V1 1024x1024 85 37.6 Boxes
Faster R-CNN ResNet152 V1 800x1333 101 37.4 Boxes
Faster R-CNN Inception ResNet V2 640x640 206 37.7 Boxes
Faster R-CNN Inception ResNet V2 1024x1024 236 38.7 Boxes
Mask R-CNN Inception ResNet V2 1024x1024 301 39.0/34.6 Boxes/Masks
ExtremeNet -- -- Boxes

在上表中,你可以看到表中只给出了平均COCO mAP 度量。尽管对于模型的性能来说,这是一个相当好的方向,但是如果你对模型在不同大小或不同类型的对象上的执行情况感兴趣,那么附加的统计信息可能非常有用。例如,如果你对开发高级驱动辅助系统(ADAS)感兴趣,那么你并不真正关心检测器检测香蕉的能力是否不好!

在这篇博客中,我们将重点解释如何对TF2 Model Zoo中现成的、经过预训练的EfficientDet检查点进行详细评估。


EfficientDets OD模型

EfficientDet是一种与RetinaNet模型非常相似的单次探测器,有几个改进:EfficientNet backboneweighted bi-directional feature pyramid network (BiFPN)和复合缩放方法。

BiFPN是非常流行的FPN的改进版本。该算法在反复应用自顶向下和自下而上的多尺度特征融合的同时,学习表示不同输入特征重要性的权重。

资料来源:https://arxiv.org/pdf/1911.09070.pdf

为了提高目标检测模型的准确性,通常的方法是增加输入图像的大小或使用更大的骨干网。复合缩放不是在单一维度或有限的缩放维度上操作,而是联合缩放中枢、特征网络和盒/类预测网络的分辨率/深度/宽度。

具有不同缩放因子的EfficientDet模型包含在tf OD API Model Zoo中,缩放因子用模型名称中的{X}表示,而输入图像分辨率表示为{RES}X{RES}EfficientDet D{X}{RES}X{RES}。

复合缩放配置效率设置。资料来源:https://arxiv.org/pdf/1911.09070.pdf

EfficientDet体系结构以EfficientNet为骨干网,BiFPN为特征网络,共享类/盒预测网络。资料来源:https://arxiv.org/pdf/1911.09070.pdf


预训练的EfficientDet评估

我们希望进行详细的精度比较,以研究复合缩放配置对网络本身性能的影响。

基于这个原因,我们创建了一个google colab Notebook,其中我们解释了如何对模型进行评估,以及如何有效地比较评估结果。我们对详细的评估统计数据感兴趣,包括每个类和不同对象大小的统计信息。

不幸的是,tf od api不支持这种现成的统计信息。这就是为什么我们创建了TF OD repo的一个分支,并更新了相关的脚本,以按照本issue中给出的说明引入此功能:https://github.com/tensorflow/models/issues/4778#issuecomment-430262110

Notebook中,我们提供了有关如何设置Tensorflow 2和TF2 OD API的说明。我们还包括一些脚本,这些脚本可以方便地下载EfficientDet检查点,以及其他脚本,帮助你获取COCO 2017 Val数据集并创建tf record文件,这些文件在评估阶段由TF OD API使用。

最后,我们修改pipeline.config用于EfficientDet检查点,为8个EfficientDet检查点的顺序评估做好准备。tfodapi使用它们来配置训练和评估过程。训练管道的模式可以object_detection/protos/pipeline.proto 找到。在较高级别上,配置文件分为5个部分:

  1. Modell_config。这定义了将要训练的模型类型(即元体系结构、特征提取器…)。

  2. train_config,它决定应该使用哪些参数来训练模型参数(即,SGD参数、输入预处理和特征提取程序初始化值…)。

  3. eval_config,它确定将报告哪些度量以供评估。

  4. train_input_config,它定义了模型应该在哪个数据集上训练。

  5. eval_input_config,它定义将对哪个数据集评估模型。通常这应该不同于训练输入数据集。

model {
(... Add model config here...)
}
train_config : {
(... Add train_config here...)
}
train_input_reader: {
(... Add train_input configuration here...)
}
eval_config: {
}
eval_input_reader: {
(... Add eval_input configuration here...)
}

我们只对配置文件的eval_config和eval_input_config部分感兴趣。请仔细查看google colab中的这个单元格,以了解有关如何设置eval参数的更多详细信息。

在TF OD API中没有现成启用的另外两个标志是:include_metrics_per_category和all_metrics_per_category。在应用Colab Notebook中给出的补丁后,当设置为true时,这两个将启用我们感兴趣的详细统计信息(每个类别和大小)!


Allegro Trains-高效实验管理

为了能够有效地比较模型评估,我们使用了一个开源的实验管理工具allegro trains。很容易将其集成到代码中,并且可以实现开箱即用的不同功能。它可以作为Tensorboard的替代品,用于可视化实验结果。

OD API中的主脚本是object_detection/model_main_tf2.py。它同时处理训练和评估阶段。我们创建了一个小脚本,在循环中调用model_main_tf.py来计算所有EfficientDet检查点。

为了将Allegro Trains实验管理集成到评估脚本中,我们必须添加2(+1)行代码。在model_main_tf2.py脚本中,我们添加了以下行:

from trains import Task

task = Task.init(project_name="NAME_OF_THE_PROJECT", task_name="NAME_OF_THE_TASK")

# 可选-记录pipeline.config进入训练仪表板
task.connect_configuration(FLAGS.pipeline_config_path)

在训练时会自动为你记录很多事情。你可以在这里找到一个全面的特征列表:https://allegro.ai/docs/concepts_arch/concepts_arch/


比较不同的EfficientDet模型

在此链接中,你可以找到对包含在TF2 OD API中的8个EfficientDet模型的评估结果。我们将这些实验命名为efficientdet_d{X}_coco17_tpu-32,其中{x}表示efficientdet模型的复合比例因子。如果你运行Colab Notebook,你会得到同样的结果,你的实验会显示在demo Trains服务器上:https://demoapp.trains.allegro.ai/。

在本节中,我们将向你展示如何有效地比较不同的模型,并在评估数据集中验证它们的性能。我们使用COCO 2017 Val数据集,因为它是用于评估TF OD API中目标检测模型的标准数据集。

我们对COCO目标检测模型评估度量感兴趣。按这里查看实验结果。这个页面包含我们感兴趣的所有指标的图表:https://demoapp.trains.allegro.ai/projects/8d752f81080b46cb9bf6ebcaf35bc8d2/experiments/950e39d811aa413d81aa0f2c8cbf0e5a/info-output/metrics/scalar?columns=selected&columns=type&columns=name&columns=tags&columns=status&columns=project.name&columns=users&columns=started&columns=last_update&columns=last_iteration&order=-name

我们可以先看看DetectionBoxes_Precision图,它包含数据集中所有类别的平均精度度量。mAP度量值的值与TF2 Model Zoo中的表中报告的mAP度量值相对应。

多亏了我们应用pycocotools的补丁,我们还可以获得每个类别的mAP度量。由于COCO数据集中有90个类别,我们想知道每个类别对平均精度的贡献。通过这种方式,我们可以更精确地了解评估模型的性能。

例如,你可能对模型如何仅对特定类别中的小对象执行操作感兴趣。从汇总的统计数据来看,不可能获得这样的结论,而建议的补丁程序可以做到这一点!

我们还使用Allegro Trains的能力来比较多个实验。实验对比表明了模型之间的所有差异。我们首先可以得到相关统计数据的详细标量和图表比较。在我们的示例中,我们将比较efficientdetd0、D1和D2模型的性能。显然,复合标度对模型的性能有积极的影响。

拥有每个类别的统计信息的另一个好处是,你可以分析复合比例因子对特定类别兴趣的准确性的影响。例如,如果你对监控视频中的公交车感兴趣,可以分析显示公交车类别的mAP性能与EfficientDet模型的复合比例因子的关系图。这有助于决定使用哪种模型,以及性能和计算复杂性之间的最佳位置!

你还可以比较其中一个有趣的东西是模型配置文件pipeline.config. 你可以看到EfficientDet模型之间的基本区别在于输入图像的尺寸和滤波器的数量/深度,如前所述。

下一个图包含3个EfficientDet模型的mAP值。提高输入图像分辨率以及增加模型中滤波器的数量有明显的好处。D0模型的mAP为33.55%,D2模型的mAP为41.79%。你还可以尝试执行每个类的比较、其他EfficientDet模型的比较,或者你认为对你的应用程序感兴趣的任何东西。


如何使用TF-OD-API来提高建筑工地的安全性?

Forsight是一个早期的创业公司,我们的任务是把建筑工地变成工人的安全环境。Forsight利用计算机视觉和机器学习,处理实时闭路电视画面,帮助安全工程师监控个人防护设备(PPE)的正确使用,确保现场安全。

我们的施工现场监控管道建立在TF OD API之上,其功能包括PPE检测和监控、社会距离跟踪、虚拟土工围栏监控、禁止停车区监控和火灾探测。在Forsight,我们还使用Trains来记录我们的实验,在团队成员之间分享,并记录所有的事情,以便我们能够重现。

随着COVID-19流感大流行的持续,世界各地的建筑项目都在积极寻找方法,在保证工人安全的前提下,重新启动或维持项目。计算机视觉和机器学习可以帮助建筑经理确保他们的建筑工地是安全的。我们建立了一个实时监控管道,跟踪员工之间的距离。

除了COVID带来的新的、无形的威胁外,所有建筑工人每天都面临一些古老的危险,尤其是“致命的四个”:坠落、被物体击中、夹在中间或夹在中间以及触电的危险。确保工人穿戴个人防护用品对建筑工地的整体安全至关重要。tfodapi是构建一个自治的PPE监控管道的一个很好的起点。我们的下一个博客将讨论如何使用新的tfodapi训练一个基本的头盔探测器。

建筑工地的某些区域比其他地方更危险。创建虚拟的土工围栏区域并使用闭路电视摄像头监控这些区域,为施工经理增加了巨大的价值,因为他们可以专注于其他任务,同时也能意识到现场发生的任何土工围栏违规事件。此外,地理围栏可以很容易地扩展到监控机器和重型设备的访问。


结论

在本博客中,我们讨论了使用新的TF2 OD API的好处。我们展示了如何有效地评估预训练的OD模型,这些模型可以在tf OD API Model Zoo中找到。我们还展示了如何使用Allegro Trains作为有效的实验管理解决方案,实现强大的洞察力和统计数据。最后,我们展示了目标检测在构建环境中的一些实际应用。

在博客中提供有关使用此博客API的第一个博客的建议。在下一篇博客中,我们将展示如何训练一个定制的目标检测器,使你能够检测到穿戴PPE的工人。请跟随我们获取更多的实践教程!


[1] “Speed/accuracy trade-offs for modern convolutional object detectors.”
Huang J, Rathod V, Sun C, Zhu M, Korattikara A, Fathi A, Fischer I, Wojna Z,
Song Y, Guadarrama S, Murphy K, CVPR 2017

[2] TensorFlow Object Detection API, https://github.com/tensorflow/models/tree/master/research/object_detection

[3] “EfficientDet: Scalable and Efficient Object Detection” Mingxing Tan, Ruoming Pang, Quoc V. Le, https://arxiv.org/abs/1911.09070

[4] “EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks” Mingxing Tan and Quoc V. Le, 2019, https://arxiv.org/abs/1905.11946

原文链接:https://towardsdatascience.com/new-tf2-object-detection-api-5c6ea8362a8c

欢迎关注磐创AI博客站:
http://panchuang.net/

sklearn机器学习中文官方文档:
http://sklearn123.com/

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/

以上是关于TF2目标检测API的主要内容,如果未能解决你的问题,请参考以下文章

Tensoflow目标检测实战训练模型转换至tflite并部署

Tensoflow目标检测实战训练模型转换至tflite并部署

Tensoflow目标检测实战训练模型转换至tflite并部署

使用Tensorflow Object Detection API训练自己的数据,并使用编译成功的模型进行识别

使用Tensorflow Object Detection API训练自己的数据,并使用编译成功的模型进行识别

为啥来自 Tensorflow 2 对象检测 API 的微调模型上的 mAP 较低?