Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleHub
提交
f40cdd8e
P
PaddleHub
项目概览
PaddlePaddle
/
PaddleHub
接近 2 年 前同步成功
通知
284
Star
12117
Fork
2091
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
200
列表
看板
标记
里程碑
合并请求
4
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleHub
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
200
Issue
200
列表
看板
标记
里程碑
合并请求
4
合并请求
4
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
f40cdd8e
编写于
11月 11, 2020
作者:
H
haoyuying
提交者:
GitHub
11月 11, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
adapt resnet50_vd_imagenet_ssld for paddle-2.0.0rc
上级
dd81c4f5
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
24 addition
and
18 deletion
+24
-18
modules/image/classification/resnet50_vd_imagenet_ssld/module.py
.../image/classification/resnet50_vd_imagenet_ssld/module.py
+24
-18
未找到文件。
modules/image/classification/resnet50_vd_imagenet_ssld/module.py
浏览文件 @
f40cdd8e
...
...
@@ -13,13 +13,16 @@
# limitations under the License.
import
os
import
math
from
typing
import
Union
import
numpy
as
np
import
paddle
from
paddle
import
ParamAttr
import
paddle.nn
as
nn
from
paddle.nn
import
Conv2d
,
BatchNorm
,
Linear
,
Dropout
from
paddle.nn
import
AdaptiveAvgPool2d
,
MaxPool2d
,
AvgPool2d
import
paddle.nn.functional
as
F
import
paddlehub.vision.transforms
as
T
from
paddle.nn
import
Conv2D
,
BatchNorm
,
Linear
,
Dropout
from
paddle.nn
import
AdaptiveAvgPool2D
,
MaxPool2D
,
AvgPool2D
from
paddle.nn.initializer
import
Uniform
from
paddlehub.module.module
import
moduleinfo
from
paddlehub.module.cv_module
import
ImageClassifierModule
...
...
@@ -42,8 +45,8 @@ class ConvBNLayer(nn.Layer):
super
(
ConvBNLayer
,
self
).
__init__
()
self
.
is_vd_mode
=
is_vd_mode
self
.
_pool2d_avg
=
AvgPool2
d
(
kernel_size
=
2
,
stride
=
2
,
padding
=
0
,
ceil_mode
=
True
)
self
.
_conv
=
Conv2
d
(
self
.
_pool2d_avg
=
AvgPool2
D
(
kernel_size
=
2
,
stride
=
2
,
padding
=
0
,
ceil_mode
=
True
)
self
.
_conv
=
Conv2
D
(
in_channels
=
num_channels
,
out_channels
=
num_filters
,
kernel_size
=
filter_size
,
...
...
@@ -116,7 +119,8 @@ class BottleneckBlock(nn.Layer):
short
=
inputs
else
:
short
=
self
.
short
(
inputs
)
y
=
paddle
.
elementwise_add
(
x
=
short
,
y
=
conv2
,
act
=
'relu'
)
y
=
paddle
.
add
(
x
=
short
,
y
=
conv2
)
y
=
F
.
relu
(
y
)
return
y
...
...
@@ -161,7 +165,8 @@ class BasicBlock(nn.Layer):
short
=
inputs
else
:
short
=
self
.
short
(
inputs
)
y
=
paddle
.
elementwise_add
(
x
=
short
,
y
=
conv1
,
act
=
'relu'
)
y
=
paddle
.
add
(
x
=
short
,
y
=
conv1
)
y
=
F
.
relu
(
y
)
return
y
...
...
@@ -177,11 +182,12 @@ class BasicBlock(nn.Layer):
class
ResNet50_vd
(
nn
.
Layer
):
"""ResNet50_vd model."""
def
__init__
(
self
,
class_dim
:
int
=
1000
,
load_checkpoint
:
str
=
None
):
def
__init__
(
self
,
label_list
:
list
,
load_checkpoint
:
str
=
None
):
super
(
ResNet50_vd
,
self
).
__init__
()
self
.
layers
=
50
self
.
labels
=
label_list
class_dim
=
len
(
self
.
labels
)
depth
=
[
3
,
4
,
6
,
3
]
num_channels
=
[
64
,
256
,
512
,
1024
]
num_filters
=
[
64
,
128
,
256
,
512
]
...
...
@@ -189,7 +195,7 @@ class ResNet50_vd(nn.Layer):
self
.
conv1_1
=
ConvBNLayer
(
num_channels
=
3
,
num_filters
=
32
,
filter_size
=
3
,
stride
=
2
,
act
=
'relu'
,
name
=
"conv1_1"
)
self
.
conv1_2
=
ConvBNLayer
(
num_channels
=
32
,
num_filters
=
32
,
filter_size
=
3
,
stride
=
1
,
act
=
'relu'
,
name
=
"conv1_2"
)
self
.
conv1_3
=
ConvBNLayer
(
num_channels
=
32
,
num_filters
=
64
,
filter_size
=
3
,
stride
=
1
,
act
=
'relu'
,
name
=
"conv1_3"
)
self
.
pool2d_max
=
MaxPool2
d
(
kernel_size
=
3
,
stride
=
2
,
padding
=
1
)
self
.
pool2d_max
=
MaxPool2
D
(
kernel_size
=
3
,
stride
=
2
,
padding
=
1
)
self
.
block_list
=
[]
...
...
@@ -210,7 +216,7 @@ class ResNet50_vd(nn.Layer):
self
.
block_list
.
append
(
bottleneck_block
)
shortcut
=
True
self
.
pool2d_avg
=
AdaptiveAvgPool2
d
(
1
)
self
.
pool2d_avg
=
AdaptiveAvgPool2
D
(
1
)
self
.
pool2d_avg_channels
=
num_channels
[
-
1
]
*
2
stdv
=
1.0
/
math
.
sqrt
(
self
.
pool2d_avg_channels
*
1.0
)
...
...
@@ -227,13 +233,13 @@ class ResNet50_vd(nn.Layer):
else
:
checkpoint
=
os
.
path
.
join
(
self
.
directory
,
'resnet50_vd_ssld.pdparams'
)
if
not
os
.
path
.
exists
(
checkpoint
):
os
.
system
(
'wget https://paddlehub.bj.bcebos.com/dygraph/image_classification/resnet50_vd_ssld.pdparams -O '
+
checkpoint
)
model_dict
=
paddle
.
load
(
checkpoint
)[
0
]
model_dict
=
paddle
.
load
(
checkpoint
)
self
.
set_dict
(
model_dict
)
print
(
"load pretrained checkpoint success"
)
def
transforms
(
self
,
images
:
Union
[
str
,
np
.
ndarray
]):
transforms
=
T
.
Compose
([
T
.
Resize
((
224
,
224
)),
T
.
Normalize
()])
return
transforms
(
images
)
def
forward
(
self
,
inputs
:
paddle
.
Tensor
):
y
=
self
.
conv1_1
(
inputs
)
...
...
@@ -242,7 +248,7 @@ class ResNet50_vd(nn.Layer):
y
=
self
.
pool2d_max
(
y
)
for
block
in
self
.
block_list
:
y
=
block
(
y
)
y
=
self
.
pool2d_avg
(
y
)
y
=
paddle
.
reshape
(
y
,
shape
=
[
-
1
,
self
.
pool2d_avg_channels
])
feature
=
self
.
pool2d_avg
(
y
)
y
=
paddle
.
reshape
(
feature
,
shape
=
[
-
1
,
self
.
pool2d_avg_channels
])
y
=
self
.
out
(
y
)
return
y
return
y
,
feature
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录