Google Brain团队发表了他们的EfficientDet模型,旨在为对象检测提供一个可扩展的框架,该框架可以轻松应用于其他对象检测用例。这篇论文得出结论,EfficientDet在基准数据集上的表现优于相似大小的模型。在Roboflow,发现基础EfficientDet模型可以泛化到平台上托管的自定义数据集。(有关如何实现EfficientDet的深入教程,请参阅这篇博客文章,以及这篇Colab笔记本。)
在这篇博客文章中,将探讨形成最终EfficientDet模型的决策背后的理念,EfficientDet的工作原理,以及EfficientDet与流行对象检测模型如YOLOv3、Faster R-CNN和MobileNet的比较。
在深入探讨模型之前,这里是一些阻碍图像检测系统部署到实际用例的关键领域。数据收集 - 有了模型架构和预训练的检查点,EfficientDet减少了泛化到新领域的数据量。模型设计和超参数化 - 一旦收集了数据,机器学习工程师需要仔细设置模型设计并调整许多超参数。训练时间 - 在收集的数据集上训练模型所需的时间。在EfficientDet论文中,这是以FLOPS(每秒浮点运算次数)来衡量的。内存占用 - 一旦模型训练完成,存储模型权重以供推理时需要多少内存?推理时间 - 当模型被调用时,它能否快速进行预测以用于生产环境?
训练对象检测模型的第一步是将图像的像素转换为可以通过神经网络传输的特征。通过使用卷积神经网络(CNN)从图像中创建可学习的特征,计算机视觉领域取得了重大进展。卷积神经网络在不同粒度级别混合和池化图像特征,允许模型在学习和手头的图像检测任务时选择可能的组合来关注。
然而,卷积神经网络(ConvNet)创建特征的确切方式一直是研究社区感兴趣的领域。ConvNet版本包括ResNet、NASNet、YoloV3、Inception、DenseNet等,每个版本都试图通过扩展ConvNet模型大小和调整ConvNet设计来提高图像检测性能。这些ConvNet模型以可扩展的方式提供,因此程序员可以部署更大的模型来提高性能,如果他们的资源允许的话。
最近,Google Brain团队发布了他们自己的ConvNet模型EfficientNet。EfficientNet构成了EfficientDet架构的主干,因此将在继续EfficientDet的贡献之前先介绍其设计。EfficientNet旨在研究ConvNet架构的扩展过程。事实证明,有很多方法可以向ConvNet添加更多参数。可以使每一层更宽,可以增加层数,可以输入更高分辨率的图像,或者可以将这些改进结合起来。可以想象,探索所有这些可能性对机器学习研究人员来说可能是相当繁琐的。EfficientNet旨在定义一个自动扩展ConvNet模型架构的过程。该论文寻求在目标内存和目标FLOPs的约束下,优化下游性能,同时在深度、宽度和分辨率上自由范围。他们发现他们的扩展方法改善了以前的ConvNets以及他们的EfficientNet架构的优化。
创建一个新的模型扩展技术是一个巨大的进步,们将他们的发现进一步推进,通过创建一个新的ConvNet架构,将他们的最新结果推向更高的水平。新的模型架构是通过神经架构搜索发现的。神经架构搜索优化了准确性,给定一定数量的FLOPS,并创建了一个名为EfficientNet-B0的基线ConvNet。使用扩展搜索,EfficientNet-B0被扩展到EfficientNet-B1。从EfficientNet-B0到EfficientNet-B1的扩展函数被保存并应用于后续的扩展,通过EfficientNet-B7,因为额外的搜索变得过于昂贵。新的EfficientNet网络家族在ImageNet排行榜上进行评估,这是一个图像分类任务。注意:自EfficientNet最初发布以来,已经有一些改进,包括调整分辨率差异和部署EfficientNet作为教师和学生。EfficientNet看起来是一个很好的主干来构建。它有效地随着模型大小扩展,并优于其他ConvNet主干。
到目前为止,已经涵盖了EfficientDet网络的以下部分:在ImageNet数据上预训练的EfficientNet构成了EfficientDet的主干。
现在,将转向EfficientDet的贡献,它试图回答以下问题:应该如何组合ConvNets的特征进行对象检测?一旦开发了这种组合过程,应该如何扩展模型架构?EfficientDet特征融合特征融合旨在组合给定图像在不同分辨率下的表示。通常,融合使用ConvNet的最后几个特征层,但确切的神经架构可能有所不同。在上面的图像中,FPN是融合特征的基线方法,采用自上而下的流。PA网络允许特征融合从较小到较大分辨率的前后流动。NAS-FPN是一种通过神经架构搜索发现的特征融合技术,它肯定不像第一个设计可能会想到的那样。EfficientDet论文使用“直觉”(并且可能还有很多开发集)来编辑NAS-FPN的结构,最终确定为BiFPN,一个双向特征金字塔网络。EfficientDet模型在彼此之上堆叠这些BiFPN块。模型扩展过程中块的数量会有所不同。此外,假设某些特征和特征通道可能在对最终预测的贡献上有所不同,因此他们在通道的开头添加了一组可学习的权重。
以前的对象检测模型扩展工作通常独立地扩展网络的部分。例如,ResNet只扩展了主干网络的大小。但还没有探索联合扩展函数。这种方法非常类似于创建EfficientNet时所做的联合扩展工作。设置了一个扩展问题,以改变主干网络、BiFPN网络、类别/框网络和输入分辨率的大小。主干网络直接随着EfficientNet-B0到EfficientNet-B6的预训练检查点进行扩展。BiFPN网络的宽度和深度以及BiFPN堆栈的数量也有所不同。
EfficientDet模型在COCO(Common Objects in Context)数据集上进行评估,该数据集包含大约170个图像类别和100,000个图像的注释。COCO被认为是对象检测的通用挑战。如果模型在这个通用领域表现良好,它很可能在更具体的任务上也表现得很好。EfficientDet在许多约束下优于以前的对象检测模型。下面,看看模型在FLOPS函数下的性能。在这里,可以看到模型在类似约束下相对于其他模型家族的表现相当好。还在Pascal VOC上对模型进行了语义分割评估。他们发现他们也在那里实现了最新的技术。嘿,为什么不呢?简单地说,为什么EfficientDet有用?从实现细节中退一步,思考EfficientDet的开源检查点对计算机视觉工程师意味着什么,这是相当令人难以置信的。EfficientNet的预训练检查点凝聚了Google Brain的研究人员在构建ConvNet时的所有发现和自动化,以及ImageNet上的图像分类可以提供的所有监督。EfficientNet检查点进一步利用了特征融合,并且架构的所有组件都有效地进行了扩展。最后,这些模型权重在COCO上进行了预训练,这是一个通用的图像检测数据集。作为用户,除了提供给模型的数据类型之外,几乎没有什么决策需要质疑。
在Roboflow,在这篇博客文章中提供了一个教程,以及这篇Colab笔记本,介绍如何训练EfficientDet。通过Roboflow,可以输入带有注释的数据集,只需将新的数据下载链接输入示例中,就可以获得一些结果。然后,在训练完成后,笔记本导出训练好的权重以部署到应用程序!EfficientDet泛化到国际象棋在Colab笔记本中,介绍如何训练EfficientDet。