模型描述
ResNet50 v1.5 模型是 原始 ResNet50 v1 模型的修改版本。
v1 和 v1.5 之间的区别在于,在需要下采样的瓶颈块(bottleneck blocks)中,v1 在第一个 1x1 卷积中步幅(stride)为 2,而 v1.5 在 3x3 卷积中步幅为 2。
这种差异使得 ResNet50 v1.5 的准确率(~0.5% top1)比 v1 略高,但性能(~5% imgs/sec)略有下降。
模型初始化方法如Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification中所述
该模型使用 Tensor Cores 在 Volta、Turing 和 NVIDIA Ampere GPU 架构上进行混合精度训练。因此,研究人员可以获得比不使用 Tensor Cores 训练快两倍以上的结果,同时体验混合精度训练的优势。该模型会针对每个 NGC 每月容器版本进行测试,以确保长时间保持一致的准确性和性能。
请注意,ResNet50 v1.5 模型可以使用 TorchScript、ONNX Runtime 或 TensorRT 作为执行后端部署在 NVIDIA Triton 推理服务器上进行推理。详情请查看 NGC
示例
在以下示例中,我们将使用预训练的 ResNet50 v1.5 模型对图像执行推理并展示结果。
要运行该示例,你需要安装一些额外的 python 包。这些包用于图像预处理和可视化。
!pip install validators matplotlib
import torch
from PIL import Image
import torchvision.transforms as transforms
import numpy as np
import json
import requests
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
print(f'Using {device} for inference')
加载在 ImageNet 数据集上预训练的模型。
resnet50 = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_resnet50', pretrained=True)
utils = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_convnets_processing_utils')
resnet50.eval().to(device)
准备示例输入数据。
uris = [
'http://images.cocodataset.org/test-stuff2017/000000024309.jpg',
'http://images.cocodataset.org/test-stuff2017/000000028117.jpg',
'http://images.cocodataset.org/test-stuff2017/000000006149.jpg',
'http://images.cocodataset.org/test-stuff2017/000000004954.jpg',
]
batch = torch.cat(
[utils.prepare_input_from_uri(uri) for uri in uris]
).to(device)
运行推理。使用 pick_n_best(predictions=output, n=topN)
辅助函数根据模型挑选 N 个最可能的假设。
with torch.no_grad():
output = torch.nn.functional.softmax(resnet50(batch), dim=1)
results = utils.pick_n_best(predictions=output, n=5)
显示结果。
for uri, result in zip(uris, results):
img = Image.open(requests.get(uri, stream=True).raw)
img.thumbnail((256,256), Image.LANCZOS)
plt.imshow(img)
plt.show()
print(result)
详情
有关模型输入输出、训练方案、推理和性能的详细信息,请访问:github 和/或 NGC
参考资料
- 原始 ResNet50 v1 论文
- Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification
- github 上的模型
- NGC 上的模型
- NGC 上的预训练模型