TorchVision v0.9 已经 发布,其中包含了大量新的机器学习模型、功能特性、速度提升以及错误修复。在这篇博文中,我们将快速概述新引入的机器学习模型,并讨论它们的主要功能和特性。
分类 (Classification)
- MobileNetV3 Large & Small: 这两个分类模型针对移动端用例进行了优化,并被用作其他计算机视觉任务的骨干网络(backbone)。新的 MobileNetV3 架构实现支持 Large 和 Small 变体以及原论文中所述的深度乘数(depth multiplier)参数。我们为深度乘数为 1.0、分辨率为 224×224 的 Large 和 Small 网络提供了 ImageNet 预训练权重。我们之前的训练配方已更新,可用于轻松地从头开始训练这些模型(特别感谢 Ross Wightman 为我们的一些训练配置提供的灵感)。Large 变体在提供与 ResNet50 相当的竞争精度的同时,在 CPU 上的运行速度快了 6 倍以上,这意味着它是速度敏感型应用的绝佳候选者。对于那些对速度要求极高的应用,可以进一步以精度换速度,使用比 ResNet50 快 15 倍的 Small 变体。
- 量化版 MobileNetV3 Large: MobileNetV3 Large 的量化版本参数数量减少了 45%,且运行速度比非量化版本快约 2.5 倍,同时在精度方面仍具竞争力。它是通过在非量化版本的基础上进行迭代,利用量化感知训练(Quantization Aware Training)在 ImageNet 上拟合而成的,并可以使用现有的参考脚本进行从头训练。
用法
model = torchvision.models.mobilenet_v3_large(pretrained=True)
# model = torchvision.models.mobilenet_v3_small(pretrained=True)
# model = torchvision.models.quantization.mobilenet_v3_large(pretrained=True)
model.eval()
predictions = model(img)
目标检测 (Object Detection)
- Faster R-CNN MobileNetV3-Large FPN: 将 MobileNetV3 Large 骨干网络与 Faster R-CNN 检测器和特征金字塔网络(FPN)相结合,可以实现一个高精度且快速的目标检测器。其预训练权重是使用提供的参考脚本在 COCO 2017 数据集上拟合的;该模型在 CPU 上的运行速度比同等的 ResNet50 检测器快 5 倍,同时在精度方面仍具竞争力。
- Faster R-CNN MobileNetV3-Large 320 FPN: 这是上述模型的一个迭代版本,使用了较低的分辨率(min_size=320 像素),以精度换取速度。它在 CPU 上的运行速度比同等的 ResNet50 检测器快 25 倍,因此非常适合真实的移动端用例。
用法
model = torchvision.models.detection.fasterrcnn_mobilenet_v3_large_fpn(pretrained=True)
# model = torchvision.models.detection.fasterrcnn_mobilenet_v3_large_320_fpn(pretrained=True)
model.eval()
predictions = model(img)
语义分割 (Semantic Segmentation)
- DeepLabV3 与扩张版 MobileNetV3 Large 骨干网络: 将扩张版(dilated)MobileNetV3 Large 骨干网络与 DeepLabV3 相结合,有助于我们构建一个高精度且快速的语义分割模型。预训练权重是使用我们的标准训练配方在 COCO 2017 上拟合的。最终模型具有与 FCN ResNet50 相同的精度,但在 CPU 上快了 8.5 倍,从而使其成为大多数应用的出色替代方案。
- Lite R-ASPP 与扩张版 MobileNetV3 Large 骨干网络: 我们引入了一种名为 Lite R-ASPP 的新分割头(segmentation head),并将其与扩张版 MobileNetV3 Large 骨干网络相结合,以构建一个非常快速的分割模型。与之前最轻量级的分割模型 FCN ResNet50 相比,新模型通过牺牲一定的精度,实现了 15 倍的速度提升。
用法
model = torchvision.models.segmentation.deeplabv3_mobilenet_v3_large(pretrained=True)
# model = torchvision.models.segmentation.lraspp_mobilenet_v3_large(pretrained=True)
model.eval()
predictions = model(img)
在不久的将来,我们计划发表一篇文章,详细介绍上述模型的训练过程,并讨论它们在权衡和设计选择上的考量。在此之前,我们鼓励您尝试这些新模型并提供您的反馈。