基于pytorch的精细预训练卷积神经网络
cnn-finetune的Python项目详细描述
用pytorch微调预训练卷积神经网络。
功能
- 允许访问在ImageNet上预先训练过的最流行的CNN架构。
- 自动替换网络顶部的分类器,这允许您使用具有不同数量类的数据集来训练网络。
- 允许您使用任何分辨率的图像(不仅是用于在ImageNet上训练原始模型的分辨率)。
- 允许添加退出层或自定义池层。
支持的体系结构和模型
来自torchvision包:
- resnet(
resnet18
,resnet34
,resnet50
,resnet101
,resnet152
) - resnext(
resnext50_32x4d
,resnext101_32x8d
) - densenet(
densenet121
,densenet169
,densenet201
,densenet161
) - 初始v3(
inception_v3
) - vgg(
vgg11
,vgg11_bn
,vgg13
,vgg13_bn
,vgg16
,vgg16_bn
,vgg19
,vgg19_bn
) - 挤压网(
squeezenet1_0
,squeezenet1_1
) - mobilenet v2(
mobilenet_v2
) - shufflenet v2(
shufflenet_v2_x0_5
,shufflenet_v2_x1_0
) - AlexNet(
alexnet
) - 谷歌网(
googlenet
)
来自Pretrained models for PyTorch包:
- resnext(
resnext101_32x4d
,resnext101_64x4d
) - nasnet-a大型(
nasnetalarge
) - NASNET-A移动电话(
nasnetamobile
) - 初始resnet v2(
inceptionresnetv2
) - 双路径网络(
dpn68
,dpn68b
,dpn92
,dpn98
,dpn131
,dpn107
) - 初始v4(
inception_v4
) - 异常(
xception
) - 挤压和激发网络(
senet154
,se_resnet50
,se_resnet101
,se_resnet152
,se_resnext50_32x4d
,se_resnext101_32x4d
) - PNASnet-5-大(^{
}) - 波利尼特(
polynet
)
要求
- Python3.5+
- 喷灯1.1+
安装
pip install cnn_finetune
主要变化:
版本0.4
make_model
中pretrained
参数的默认值从False
更改为True
。现在callmake_model('resnet18', num_classes=10)
等于make_model('resnet18', num_classes=10, pretrained=True)
示例用法:
制作10个类的图像净重模型
from cnn_finetune import make_model
model = make_model('resnet18', num_classes=10, pretrained=True)
制作带有辍学的模型
model = make_model('nasnetalarge', num_classes=10, pretrained=True, dropout_p=0.5)
创建一个具有全局最大池而不是全局平均池的模型
import torch.nn as nn
model = make_model('inceptionresnetv2', num_classes=10, pretrained=True, pool=nn.AdaptiveMaxPool2d(1))
制作一个可拍摄256x256像素图像的vgg16模型
make_model
中pretrained
参数的默认值从False
更改为True
。现在callmake_model('resnet18', num_classes=10)
等于make_model('resnet18', num_classes=10, pretrained=True)
from cnn_finetune import make_model
model = make_model('resnet18', num_classes=10, pretrained=True)
model = make_model('nasnetalarge', num_classes=10, pretrained=True, dropout_p=0.5)
创建一个具有全局最大池而不是全局平均池的模型
import torch.nn as nn
model = make_model('inceptionresnetv2', num_classes=10, pretrained=True, pool=nn.AdaptiveMaxPool2d(1))
制作一个可拍摄256x256像素图像的vgg16模型
vgg和alexnet模型使用完全连接的层,因此必须另外传递图像的输入大小 在构建新模型时。此信息用于确定完全连接层的输入大小。
model = make_model('vgg16', num_classes=10, pretrained=True, input_size=(256, 256))
制作一个vgg16模型,该模型拍摄256x256像素大小的图像并使用自定义分类器
import torch.nn as nn
def make_classifier(in_features, num_classes):
return nn.Sequential(
nn.Linear(in_features, 4096),
nn.ReLU(inplace=True),
nn.Linear(4096, num_classes),
)
model = make_model('vgg16', num_classes=10, pretrained=True, input_size=(256, 256), classifier_factory=make_classifier)
显示用于在ImageNet上训练原始模型的预处理
>> model = make_model('resnext101_64x4d', num_classes=10, pretrained=True)
>> print(model.original_model_info)
ModelInfo(input_space='RGB', input_size=[3, 224, 224], input_range=[0, 1], mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
>> print(model.original_model_info.mean)
[0.485, 0.456, 0.406]
CIFAR10示例
>> model = make_model('resnext101_64x4d', num_classes=10, pretrained=True)
>> print(model.original_model_info)
ModelInfo(input_space='RGB', input_size=[3, 224, 224], input_range=[0, 1], mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
>> print(model.original_model_info.mean)
[0.485, 0.456, 0.406]
请参阅examples/cifar10.py文件(需要pytorch 1.1+)。