Skip to content
GitLab
菜单
项目
群组
代码片段
/
帮助
帮助
支持
社区论坛
快捷键
?
提交反馈
登录/注册
切换导航
菜单
打开侧边栏
Lin Sui
detectron2
提交
9f5f790d
提交
9f5f790d
编辑于
5月 10, 2021
作者:
suilin0432
浏览文件
add vggtorch
上级
a9c4f2f0
变更
1
Hide whitespace changes
Inline
Side-by-side
detectron2/modeling/backbone/vgg_torch.py
0 → 100644
浏览文件 @
9f5f790d
import
torch
import
torch.nn
as
nn
from
.utils
import
load_state_dict_from_url
from
typing
import
Union
,
List
,
Dict
,
Any
,
cast
__all__
=
[
'VGG'
,
'vgg11'
,
'vgg11_bn'
,
'vgg13'
,
'vgg13_bn'
,
'vgg16'
,
'vgg16_bn'
,
'vgg19_bn'
,
'vgg19'
,
]
model_urls
=
{
'vgg11'
:
'https://download.pytorch.org/models/vgg11-bbd30ac9.pth'
,
'vgg13'
:
'https://download.pytorch.org/models/vgg13-c768596a.pth'
,
'vgg16'
:
'https://download.pytorch.org/models/vgg16-397923af.pth'
,
'vgg19'
:
'https://download.pytorch.org/models/vgg19-dcbb9e9d.pth'
,
'vgg11_bn'
:
'https://download.pytorch.org/models/vgg11_bn-6002323d.pth'
,
'vgg13_bn'
:
'https://download.pytorch.org/models/vgg13_bn-abd245e5.pth'
,
'vgg16_bn'
:
'https://download.pytorch.org/models/vgg16_bn-6c64b313.pth'
,
'vgg19_bn'
:
'https://download.pytorch.org/models/vgg19_bn-c79401a0.pth'
,
}
class
VGG
(
nn
.
Module
):
def
__init__
(
self
,
features
:
nn
.
Module
,
num_classes
:
int
=
1000
,
init_weights
:
bool
=
True
)
->
None
:
super
(
VGG
,
self
).
__init__
()
self
.
features
=
features
self
.
avgpool
=
nn
.
AdaptiveAvgPool2d
((
7
,
7
))
self
.
classifier
=
nn
.
Sequential
(
nn
.
Linear
(
512
*
7
*
7
,
4096
),
nn
.
ReLU
(
True
),
nn
.
Dropout
(),
nn
.
Linear
(
4096
,
4096
),
nn
.
ReLU
(
True
),
nn
.
Dropout
(),
nn
.
Linear
(
4096
,
num_classes
),
)
if
init_weights
:
self
.
_initialize_weights
()
def
forward
(
self
,
x
:
torch
.
Tensor
)
->
torch
.
Tensor
:
x
=
self
.
features
(
x
)
x
=
self
.
avgpool
(
x
)
x
=
torch
.
flatten
(
x
,
1
)
x
=
self
.
classifier
(
x
)
return
x
def
_initialize_weights
(
self
)
->
None
:
for
m
in
self
.
modules
():
if
isinstance
(
m
,
nn
.
Conv2d
):
nn
.
init
.
kaiming_normal_
(
m
.
weight
,
mode
=
'fan_out'
,
nonlinearity
=
'relu'
)
if
m
.
bias
is
not
None
:
nn
.
init
.
constant_
(
m
.
bias
,
0
)
elif
isinstance
(
m
,
nn
.
BatchNorm2d
):
nn
.
init
.
constant_
(
m
.
weight
,
1
)
nn
.
init
.
constant_
(
m
.
bias
,
0
)
elif
isinstance
(
m
,
nn
.
Linear
):
nn
.
init
.
normal_
(
m
.
weight
,
0
,
0.01
)
nn
.
init
.
constant_
(
m
.
bias
,
0
)
def
make_layers
(
cfg
:
List
[
Union
[
str
,
int
]],
batch_norm
:
bool
=
False
)
->
nn
.
Sequential
:
layers
:
List
[
nn
.
Module
]
=
[]
in_channels
=
3
for
v
in
cfg
:
if
v
==
'M'
:
layers
+=
[
nn
.
MaxPool2d
(
kernel_size
=
2
,
stride
=
2
)]
else
:
v
=
cast
(
int
,
v
)
conv2d
=
nn
.
Conv2d
(
in_channels
,
v
,
kernel_size
=
3
,
padding
=
1
)
if
batch_norm
:
layers
+=
[
conv2d
,
nn
.
BatchNorm2d
(
v
),
nn
.
ReLU
(
inplace
=
True
)]
else
:
layers
+=
[
conv2d
,
nn
.
ReLU
(
inplace
=
True
)]
in_channels
=
v
return
nn
.
Sequential
(
*
layers
)
cfgs
:
Dict
[
str
,
List
[
Union
[
str
,
int
]]]
=
{
'A'
:
[
64
,
'M'
,
128
,
'M'
,
256
,
256
,
'M'
,
512
,
512
,
'M'
,
512
,
512
,
'M'
],
'B'
:
[
64
,
64
,
'M'
,
128
,
128
,
'M'
,
256
,
256
,
'M'
,
512
,
512
,
'M'
,
512
,
512
,
'M'
],
'D'
:
[
64
,
64
,
'M'
,
128
,
128
,
'M'
,
256
,
256
,
256
,
'M'
,
512
,
512
,
512
,
'M'
,
512
,
512
,
512
,
'M'
],
'E'
:
[
64
,
64
,
'M'
,
128
,
128
,
'M'
,
256
,
256
,
256
,
256
,
'M'
,
512
,
512
,
512
,
512
,
'M'
,
512
,
512
,
512
,
512
,
'M'
],
}
def
_vgg
(
arch
:
str
,
cfg
:
str
,
batch_norm
:
bool
,
pretrained
:
bool
,
progress
:
bool
,
**
kwargs
:
Any
)
->
VGG
:
if
pretrained
:
kwargs
[
'init_weights'
]
=
False
model
=
VGG
(
make_layers
(
cfgs
[
cfg
],
batch_norm
=
batch_norm
),
**
kwargs
)
if
pretrained
:
state_dict
=
load_state_dict_from_url
(
model_urls
[
arch
],
progress
=
progress
)
model
.
load_state_dict
(
state_dict
)
return
model
def
vgg11
(
pretrained
:
bool
=
False
,
progress
:
bool
=
True
,
**
kwargs
:
Any
)
->
VGG
:
r
"""VGG 11-layer model (configuration "A") from
`"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`_.
Args:
pretrained (bool): If True, returns a model pre-trained on ImageNet
progress (bool): If True, displays a progress bar of the download to stderr
"""
return
_vgg
(
'vgg11'
,
'A'
,
False
,
pretrained
,
progress
,
**
kwargs
)
def
vgg11_bn
(
pretrained
:
bool
=
False
,
progress
:
bool
=
True
,
**
kwargs
:
Any
)
->
VGG
:
r
"""VGG 11-layer model (configuration "A") with batch normalization
`"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`_.
Args:
pretrained (bool): If True, returns a model pre-trained on ImageNet
progress (bool): If True, displays a progress bar of the download to stderr
"""
return
_vgg
(
'vgg11_bn'
,
'A'
,
True
,
pretrained
,
progress
,
**
kwargs
)
def
vgg13
(
pretrained
:
bool
=
False
,
progress
:
bool
=
True
,
**
kwargs
:
Any
)
->
VGG
:
r
"""VGG 13-layer model (configuration "B")
`"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`_.
Args:
pretrained (bool): If True, returns a model pre-trained on ImageNet
progress (bool): If True, displays a progress bar of the download to stderr
"""
return
_vgg
(
'vgg13'
,
'B'
,
False
,
pretrained
,
progress
,
**
kwargs
)
def
vgg13_bn
(
pretrained
:
bool
=
False
,
progress
:
bool
=
True
,
**
kwargs
:
Any
)
->
VGG
:
r
"""VGG 13-layer model (configuration "B") with batch normalization
`"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`_.
Args:
pretrained (bool): If True, returns a model pre-trained on ImageNet
progress (bool): If True, displays a progress bar of the download to stderr
"""
return
_vgg
(
'vgg13_bn'
,
'B'
,
True
,
pretrained
,
progress
,
**
kwargs
)
def
vgg16
(
pretrained
:
bool
=
False
,
progress
:
bool
=
True
,
**
kwargs
:
Any
)
->
VGG
:
r
"""VGG 16-layer model (configuration "D")
`"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`_.
Args:
pretrained (bool): If True, returns a model pre-trained on ImageNet
progress (bool): If True, displays a progress bar of the download to stderr
"""
return
_vgg
(
'vgg16'
,
'D'
,
False
,
pretrained
,
progress
,
**
kwargs
)
def
vgg16_bn
(
pretrained
:
bool
=
False
,
progress
:
bool
=
True
,
**
kwargs
:
Any
)
->
VGG
:
r
"""VGG 16-layer model (configuration "D") with batch normalization
`"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`_.
Args:
pretrained (bool): If True, returns a model pre-trained on ImageNet
progress (bool): If True, displays a progress bar of the download to stderr
"""
return
_vgg
(
'vgg16_bn'
,
'D'
,
True
,
pretrained
,
progress
,
**
kwargs
)
def
vgg19
(
pretrained
:
bool
=
False
,
progress
:
bool
=
True
,
**
kwargs
:
Any
)
->
VGG
:
r
"""VGG 19-layer model (configuration "E")
`"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`_.
Args:
pretrained (bool): If True, returns a model pre-trained on ImageNet
progress (bool): If True, displays a progress bar of the download to stderr
"""
return
_vgg
(
'vgg19'
,
'E'
,
False
,
pretrained
,
progress
,
**
kwargs
)
def
vgg19_bn
(
pretrained
:
bool
=
False
,
progress
:
bool
=
True
,
**
kwargs
:
Any
)
->
VGG
:
r
"""VGG 19-layer model (configuration 'E') with batch normalization
`"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`_.
Args:
pretrained (bool): If True, returns a model pre-trained on ImageNet
progress (bool): If True, displays a progress bar of the download to stderr
"""
return
_vgg
(
'vgg19_bn'
,
'E'
,
True
,
pretrained
,
progress
,
**
kwargs
)
\ No newline at end of file
编辑
预览
支持
Markdown
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录