系列文章目录
9种经典图片分类卷积模型系列合集(推荐程度依次递减):
Imagenet的预训练vggm是1000个类别,根据笔者添加了一个bottleneck层和一个head层使得可以进行自定义类别训练。
源码
from __future__ import print_function, division, absolute_import
import torch
import torch.nn as nn
from torch.autograd import Variable
# from torch.legacy import nn as nnl
import torch.utils.model_zoo as model_zoo
__all__ = ['vggm']
pretrained_settings = {
'vggm': {
True: {
'url': 'http://data.lip6.fr/cadene/pretrainedmodels/vggm-786f2434.pth',
'input_space': 'BGR',
'input_size': [3, 221, 221],
'input_range': [0, 255],
'mean': [123.68, 116.779, 103.939],
'std': [1, 1, 1],
'num_classes': 1000
}
}
}
def conv3x3(in_planes, out_planes, stride=1, groups=1, dilation=1):
"""3x3 convolution with padding"""
return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride,
padding=dilation, groups=groups, bias=False, dilation=dilation)
def conv1x1(in_planes, out_planes, stride=1):
"""1x1 convolution"""
return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False)
class BasicBlock(nn.Module):
expansion = 1
__constants__ = ['downsample']
def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1,
base_width=64, dilation=1, norm_layer=None):
super(BasicBlock, self).__init__()
if norm_layer is None:
norm_layer = nn.BatchNorm2d
if groups != 1 or base_width != 64:
raise ValueError('BasicBlock only supports groups=1 and base_width=64')
if dilation > 1:
raise NotImplementedError("Dilation > 1 not supported in BasicBlock")
# Both self.conv1 and self.downsample layers downsample the input when stride != 1
self.conv1 = conv3x3(inplanes, planes, stride)
self.bn1 = norm_layer(planes)
self.relu = nn.ReLU(inplace=True)
self.conv2 = conv3x3(planes, planes)
self.bn2 = norm_layer(planes)
self.downsample = downsample
self.stride = stride
def forward(self, x):
identity = x
out = self

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



