PyTorch的ResNet工具。
resnet-pytorch的Python项目详细描述
雷斯内特火把
更新(2020年2月20日)
更新是为了便于使用和部署。在
现在,为预训练模型加载新数量的转移学习课程也非常简单:
fromresnet_pytorchimportResNetmodel=ResNet.from_pretrained('resnet18',num_classes=10)
更新(2020年2月2日)
此更新允许您使用NVIDIA的Apex工具进行加速训练。默认选择hybrid training precision
+dynamic loss amplified
版本,如果您需要了解有关apex
工具的详细信息,请访问https://github.com/NVIDIA/apex。在
概述
此存储库包含一个op for op PyTorch重新实现Deep Residual Learning for Image Recognition。在
这个实现的目标是简单,高度可扩展,并且易于集成到您自己的项目中。这个实现是一个正在进行的工作——新特性目前正在实现中。在
目前,您可以轻松地:
- 加载预训练的ResNet模型
- 使用ResNet模型进行分类或特征提取
即将推出的功能:在接下来的几天内,您将能够:
- 在你自己的数据集中快速调整ResNet
- 导出ResNet模型用于生产
目录
关于ResNet
如果您是resnet的新手,这里有一个直接来自官方PyTorch实现的解释:
Resnet模型是在“图像识别的深度残差学习”中提出的。这里有5个版本的resnet模型, 分别包含5层、34层、50层、101层、152层。详细的模型架构见表1。在
安装
从pypi安装:
^{pr2}$从源安装:
$ git clone https://github.com/Lornatang/ResNet-PyTorch.git
$ cd ResNet-PyTorch
$ pip3 install -e .
用法
加载预训练模型
加载resnet18网络:
fromresnet_pytorchimportResNetmodel=ResNet.from_name("resnet18")
加载预先训练的resnet18:
fromresnet_pytorchimportResNetmodel=ResNet.from_pretrained("resnet18")
下面列出了他们在imagenet数据集上使用预训练模型的一次裁剪错误率。在
Model structure | Top-1 error | Top-5 error |
---|---|---|
resnet18 | 30.24 | 10.92 |
resnet34 | 26.70 | 8.58 |
resnet50 | 23.85 | 7.13 |
resnet101 | 22.63 | 6.44 |
resnet152 | 21.69 | 5.94 |
resnet-18/34/50/101/152的选项B仅使用投影来增加维度。
有关扩展到cifar10数据集的结果,请参见examples/cifar
示例:分类
我们假设在当前目录中,有一个img.jpg
文件和一个labels_map.txt
文件(ImageNet类名)。它们都包含在examples/simple
中。在
所有预先训练的模型都期望输入图像以同样的方式标准化,
i、 e.形状为(3 x H x W)
的三通道RGB图像的小批量,其中H
和{[0, 1]
的范围内,然后使用mean = [0.485, 0.456, 0.406]
进行标准化
和std = [0.229, 0.224, 0.225]
。在
这是一个执行示例。在
importjsonimporttorchimporttorchvision.transformsastransformsfromPILimportImagefromresnet_pytorchimportResNet# Open imageinput_image=Image.open("img.jpg")# Preprocess imagepreprocess=transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225]),])input_tensor=preprocess(input_image)input_batch=input_tensor.unsqueeze(0)# create a mini-batch as expected by the model# Load class nameslabels_map=json.load(open("labels_map.txt"))labels_map=[labels_map[str(i)]foriinrange(1000)]# Classify with ResNet18model=ResNet.from_pretrained("resnet18")model.eval()# move the input and model to GPU for speed if availableiftorch.cuda.is_available():input_batch=input_batch.to("cuda")model.to("cuda")withtorch.no_grad():logits=model(input_batch)preds=torch.topk(logits,k=5).indices.squeeze(0).tolist()print("-----")foridxinpreds:label=labels_map[idx]prob=torch.softmax(logits,dim=1)[0,idx].item()print(f"{label:<75} ({prob*100:.2f}%)")
示例:特征提取
您可以使用model.extract_features
轻松提取特征:
importtorchfromresnet_pytorchimportResNetmodel=ResNet.from_pretrained('resnet18')# ... image preprocessing as in the classification example ...inputs=torch.randn(1,3,224,224)print(inputs.shape)# torch.Size([1, 3, 224, 224])features=model.extract_features(inputs)print(features.shape)# torch.Size([1, 512, 1, 1])
示例:导出到ONNX
导出到ONNX以部署到生产环境现在很简单:
importtorchfromresnet_pytorchimportResNetmodel=ResNet.from_pretrained('resnet18')dummy_input=torch.randn(16,3,224,224)torch.onnx.export(model,dummy_input,"demo.onnx",verbose=True)
示例:视觉
cd $REPO$/framework sh start.sh
然后打开浏览器并输入浏览器地址http://127.0.0.1:10004/。在
好好享受吧。在
ImageNet
有关在ImageNet上求值的详细信息,请参见examples/imagenet
。在
信用
图像识别的深度残差学习何开明、张向玉、任少卿、孙建新
摘要
更深层次的神经网络更难训练。我们 提出一个剩余学习框架,以便于培训 比所使用的网络更深的网络 以前。我们明确地将层重新定义为参考层输入的学习剩余函数,而不是学习未引用的函数。我们提供了全面的经验证据表明这些残差 网络更容易优化,并且可以从 深度大大增加。在ImageNet数据集上,我们 评估残差网深度达152层-8× 比VGG网络更深入[41],但仍然具有更低的复杂性。这些残差网的集合达到了3.57%的误差 在ImageNet测试集中。这个结果在 ILSVRC 2015分类任务。我们也进行了分析 在具有100和1000层的CIFAR-10上。 表达的深度至关重要 对于许多视觉识别任务。仅仅由于我们非常深入的表示,我们获得了28%的相对改善的COCO对象检测数据集。深 残差网是我们提交给ILSVRC的基础 &;COCO 2015竞争1 ,我们也赢得了第一名 重点介绍了ImageNet检测、ImageNet定位、COCO检测和COCO分割等任务。在
@article{He2015, author = {Kaiming He and Xiangyu Zhang and Shaoqing Ren and Jian Sun}, title = {Deep Residual Learning for Image Recognition}, journal = {arXiv preprint arXiv:1512.03385}, year = {2015} }
- 项目
标签: