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模型用于生产

目录

  1. About ResNet
  2. Installation
  3. Usage
  4. Contributing

关于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 structureTop-1 errorTop-5 error
resnet1830.2410.92
resnet3426.708.58
resnet5023.857.13
resnet10122.636.44
resnet15221.695.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分割等任务。在

papercode

@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}
}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java随机填充2d数组   java运行时。getRuntime。带有长参数的exec(cmd)   java Minecraft无法放置自定义背景   java AChartEngine YAxis自定义标签区域边距和图表值为字符串?   泛型类的java类型安全错误   整数的java符号等价物。toBinaryString方法?   Java中数组列表的数组   java WebView应用程序在谷歌登录后显示空白屏幕   java从backback中删除特定片段   如果服务器不支持使用的协议,java JSSE是否实现回退?   java Sonarqube正在进行核心漏洞查找。如何解决   javajavax。jcr。UnsupportedPositionOperationException:testVersionable处的节点不可版本化   java在安卓中每隔X小时运行一次文件/函数,无需打开应用程序   java如何为磁盘持久性配置BigMemory?   java BufferWriter不转换383以上的整数   Java7交集类型:规范具体说明了什么?   Java:CollectionHow创建多列   java如何检测运算符的空白   java问题:在firebase中为导航栏中的第二个表单提交数据第一个表单工作正常。实际isse是连接Mainactivity中的另一个活动