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模型。新的OD API是向后兼容的,所以如你仍然可以使用TF1,尽管官方强烈建议切换到TF2。 除了包含在TF1 Model Zoo中的SSD (MobileNet/ResNet),Faster R-CNN (ResNet/Inception ResNet),和Mask R-CNN模型等模型,TF2 Model Zoo引入了新的SOTA模型,如CenterNet, ExtremeNet,和EfficientDet。 TF2 OD API Model Zoo 中的模型是在COCO 2017数据集上预训练的,如果你对数据集中已经包含的类别感兴趣,可以在新的数据集中进行训练时用预训练模型初始化你的模型。预训练模型对于开箱即用的推断很有用。 使用TF OD API模型而不是自己实现SOTA模型可以让你有更多的时间去关注数据,这是实现OD模型高性能的另一个关键因素,然而,即使你决定自己构建模型,TF OD API模型也提供了一个很好的性能基准测试! 根据你的要求,你可以从一长串不同型号中进行选择(速度与精度):

在上表中,你可以看到表中只给出了COCO的平均 mAP 度量。尽管对于模型的性能来说,这是一个相当好的方向,但是如果你对模型在不同大小或不同类型的对象上的执行情况感兴趣,那么附加的统计信息可能是非常有用的,例如,如果你对开发高级驱动辅助系统(ADAS)感兴趣,那么你并不真正关心检测器检测香蕉的能力是否不好! 在本文中,我们将重点解释如何对TF2 Model Zoo中现成的、经过预训练的EfficientDet模型进行详细评估。 EfficientDets OD模型 EfficientDet是一种与RetinaNet模型非常相似的单次探测器,它有几个改进的地方:EfficientNet backbone、weighted 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作为有效的实验管理解决方案,实现强大的洞察力和统计数据;最后,我们展示了目标检测在构建环境中的一些实际应用。 [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