Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
3a8b5680
P
PaddleClas
项目概览
PaddlePaddle
/
PaddleClas
1 年多 前同步成功
通知
116
Star
4999
Fork
1114
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
19
列表
看板
标记
里程碑
合并请求
6
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleClas
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
19
Issue
19
列表
看板
标记
里程碑
合并请求
6
合并请求
6
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
3a8b5680
编写于
12月 25, 2022
作者:
H
HydrogenSulfate
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat(model): add EfficientNetV2 code and fix AttrDict BUG
上级
7a0c7965
变更
10
展开全部
隐藏空白更改
内联
并排
Showing
10 changed file
with
1364 addition
and
9 deletion
+1364
-9
deploy/utils/config.py
deploy/utils/config.py
+1
-1
ppcls/arch/backbone/__init__.py
ppcls/arch/backbone/__init__.py
+1
-0
ppcls/arch/backbone/model_zoo/efficientnet_v2.py
ppcls/arch/backbone/model_zoo/efficientnet_v2.py
+991
-0
ppcls/configs/ImageNet/EfficientNetV2/EfficientNetV2_S.yaml
ppcls/configs/ImageNet/EfficientNetV2/EfficientNetV2_S.yaml
+142
-0
ppcls/data/preprocess/__init__.py
ppcls/data/preprocess/__init__.py
+9
-0
ppcls/data/preprocess/ops/operators.py
ppcls/data/preprocess/ops/operators.py
+19
-0
ppcls/data/preprocess/ops/randaugment.py
ppcls/data/preprocess/ops/randaugment.py
+135
-6
ppcls/engine/train/__init__.py
ppcls/engine/train/__init__.py
+2
-1
ppcls/engine/train/train_efficientnetv2.py
ppcls/engine/train/train_efficientnetv2.py
+63
-0
ppcls/utils/config.py
ppcls/utils/config.py
+1
-1
未找到文件。
deploy/utils/config.py
浏览文件 @
3a8b5680
...
@@ -33,7 +33,7 @@ class AttrDict(dict):
...
@@ -33,7 +33,7 @@ class AttrDict(dict):
self
[
key
]
=
value
self
[
key
]
=
value
def
__deepcopy__
(
self
,
content
):
def
__deepcopy__
(
self
,
content
):
return
copy
.
deepcopy
(
dict
(
self
))
return
AttrDict
(
copy
.
deepcopy
(
dict
(
self
)
))
def
create_attr_dict
(
yaml_config
):
def
create_attr_dict
(
yaml_config
):
...
...
ppcls/arch/backbone/__init__.py
浏览文件 @
3a8b5680
...
@@ -38,6 +38,7 @@ from .model_zoo.dpn import DPN68, DPN92, DPN98, DPN107, DPN131
...
@@ -38,6 +38,7 @@ from .model_zoo.dpn import DPN68, DPN92, DPN98, DPN107, DPN131
from
.model_zoo.dsnet
import
DSNet_tiny
,
DSNet_small
,
DSNet_base
from
.model_zoo.dsnet
import
DSNet_tiny
,
DSNet_small
,
DSNet_base
from
.model_zoo.densenet
import
DenseNet121
,
DenseNet161
,
DenseNet169
,
DenseNet201
,
DenseNet264
from
.model_zoo.densenet
import
DenseNet121
,
DenseNet161
,
DenseNet169
,
DenseNet201
,
DenseNet264
from
.model_zoo.efficientnet
import
EfficientNetB0
,
EfficientNetB1
,
EfficientNetB2
,
EfficientNetB3
,
EfficientNetB4
,
EfficientNetB5
,
EfficientNetB6
,
EfficientNetB7
,
EfficientNetB0_small
from
.model_zoo.efficientnet
import
EfficientNetB0
,
EfficientNetB1
,
EfficientNetB2
,
EfficientNetB3
,
EfficientNetB4
,
EfficientNetB5
,
EfficientNetB6
,
EfficientNetB7
,
EfficientNetB0_small
from
.model_zoo.efficientnet_v2
import
EfficientNetV2_S
from
.model_zoo.resnest
import
ResNeSt50_fast_1s1x64d
,
ResNeSt50
,
ResNeSt101
,
ResNeSt200
,
ResNeSt269
from
.model_zoo.resnest
import
ResNeSt50_fast_1s1x64d
,
ResNeSt50
,
ResNeSt101
,
ResNeSt200
,
ResNeSt269
from
.model_zoo.googlenet
import
GoogLeNet
from
.model_zoo.googlenet
import
GoogLeNet
from
.model_zoo.mobilenet_v2
import
MobileNetV2_x0_25
,
MobileNetV2_x0_5
,
MobileNetV2_x0_75
,
MobileNetV2
,
MobileNetV2_x1_5
,
MobileNetV2_x2_0
from
.model_zoo.mobilenet_v2
import
MobileNetV2_x0_25
,
MobileNetV2_x0_5
,
MobileNetV2_x0_75
,
MobileNetV2
,
MobileNetV2_x1_5
,
MobileNetV2_x2_0
...
...
ppcls/arch/backbone/model_zoo/efficientnet_v2.py
0 → 100644
浏览文件 @
3a8b5680
此差异已折叠。
点击以展开。
ppcls/configs/ImageNet/EfficientNetV2/EfficientNetV2_S.yaml
0 → 100644
浏览文件 @
3a8b5680
# global configs
Global
:
checkpoints
:
null
pretrained_model
:
null
output_dir
:
./output/
device
:
gpu
save_interval
:
100
eval_during_train
:
True
eval_interval
:
1
epochs
:
350
print_batch_step
:
20
use_visualdl
:
False
# used for static mode and model export
image_shape
:
[
3
,
384
,
384
]
save_inference_dir
:
./inference
train_mode
:
efficientnetv2
# progressive training
AMP
:
scale_loss
:
65536
use_dynamic_loss_scaling
:
True
# O1: mixed fp16
level
:
O1
EMA
:
decay
:
0.9999
# model architecture
Arch
:
name
:
EfficientNetV2_S
class_num
:
1000
use_sync_bn
:
True
# loss function config for traing/eval process
Loss
:
Train
:
-
CELoss
:
weight
:
1.0
epsilon
:
0.1
Eval
:
-
CELoss
:
weight
:
1.0
Optimizer
:
name
:
Momentum
momentum
:
0.9
lr
:
name
:
Cosine
learning_rate
:
0.65
# 8gpux128bs
warmup_epoch
:
5
regularizer
:
name
:
L2
coeff
:
0.00001
# data loader for train and eval
DataLoader
:
Train
:
dataset
:
name
:
ImageNetDataset
image_root
:
./dataset/ILSVRC2012/
cls_label_path
:
./dataset/ILSVRC2012/train_list.txt
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
RandCropImage
:
scale
:
[
0.05
,
1.0
]
size
:
224
-
RandFlipImage
:
flip_code
:
1
-
RandAugmentV2
:
num_layers
:
2
magnitude
:
5
-
NormalizeImage
:
scale
:
1.0
mean
:
[
128.0
,
128.0
,
128.0
]
std
:
[
128.0
,
128.0
,
128.0
]
order
:
"
"
sampler
:
name
:
DistributedBatchSampler
batch_size
:
128
drop_last
:
True
shuffle
:
True
loader
:
num_workers
:
8
use_shared_memory
:
True
Eval
:
dataset
:
name
:
ImageNetDataset
image_root
:
./dataset/ILSVRC2012/
cls_label_path
:
./dataset/ILSVRC2012/val_list.txt
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
CropImageAtRatio
:
size
:
384
pad
:
32
interpolation
:
bilinear
-
NormalizeImage
:
scale
:
1.0
mean
:
[
128.0
,
128.0
,
128.0
]
std
:
[
128.0
,
128.0
,
128.0
]
order
:
"
"
sampler
:
name
:
DistributedBatchSampler
batch_size
:
128
drop_last
:
False
shuffle
:
False
loader
:
num_workers
:
8
use_shared_memory
:
True
Infer
:
infer_imgs
:
docs/images/inference_deployment/whl_demo.jpg
batch_size
:
10
transforms
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
CropImageAtRatio
:
size
:
384
pad
:
32
interpolation
:
bilinear
-
NormalizeImage
:
scale
:
1.0
mean
:
[
128.0
,
128.0
,
128.0
]
std
:
[
128.0
,
128.0
,
128.0
]
order
:
"
"
PostProcess
:
name
:
Topk
topk
:
5
class_id_map_file
:
ppcls/utils/imagenet1k_label_list.txt
Metric
:
Train
:
-
TopkAcc
:
topk
:
[
1
,
5
]
Eval
:
-
TopkAcc
:
topk
:
[
1
,
5
]
ppcls/data/preprocess/__init__.py
浏览文件 @
3a8b5680
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
from
ppcls.data.preprocess.ops.autoaugment
import
ImageNetPolicy
as
RawImageNetPolicy
from
ppcls.data.preprocess.ops.autoaugment
import
ImageNetPolicy
as
RawImageNetPolicy
from
ppcls.data.preprocess.ops.randaugment
import
RandAugment
as
RawRandAugment
from
ppcls.data.preprocess.ops.randaugment
import
RandAugment
as
RawRandAugment
from
ppcls.data.preprocess.ops.randaugment
import
RandomApply
from
ppcls.data.preprocess.ops.randaugment
import
RandomApply
from
ppcls.data.preprocess.ops.randaugment
import
RandAugmentV2
as
RawRandAugmentV2
from
ppcls.data.preprocess.ops.timm_autoaugment
import
RawTimmAutoAugment
from
ppcls.data.preprocess.ops.timm_autoaugment
import
RawTimmAutoAugment
from
ppcls.data.preprocess.ops.cutout
import
Cutout
from
ppcls.data.preprocess.ops.cutout
import
Cutout
...
@@ -25,6 +26,7 @@ from ppcls.data.preprocess.ops.grid import GridMask
...
@@ -25,6 +26,7 @@ from ppcls.data.preprocess.ops.grid import GridMask
from
ppcls.data.preprocess.ops.operators
import
DecodeImage
from
ppcls.data.preprocess.ops.operators
import
DecodeImage
from
ppcls.data.preprocess.ops.operators
import
ResizeImage
from
ppcls.data.preprocess.ops.operators
import
ResizeImage
from
ppcls.data.preprocess.ops.operators
import
CropImage
from
ppcls.data.preprocess.ops.operators
import
CropImage
from
ppcls.data.preprocess.ops.operators
import
CropImageAtRatio
from
ppcls.data.preprocess.ops.operators
import
CenterCrop
,
Resize
from
ppcls.data.preprocess.ops.operators
import
CenterCrop
,
Resize
from
ppcls.data.preprocess.ops.operators
import
RandCropImage
from
ppcls.data.preprocess.ops.operators
import
RandCropImage
from
ppcls.data.preprocess.ops.operators
import
RandCropImageV2
from
ppcls.data.preprocess.ops.operators
import
RandCropImageV2
...
@@ -101,6 +103,13 @@ class RandAugment(RawRandAugment):
...
@@ -101,6 +103,13 @@ class RandAugment(RawRandAugment):
return
img
return
img
class
RandAugmentV2
(
RawRandAugmentV2
):
""" RandAugmentV2 wrapper to auto fit different img types """
def
__init__
(
self
,
*
args
,
**
kwargs
):
super
().
__init__
(
*
args
,
**
kwargs
)
class
TimmAutoAugment
(
RawTimmAutoAugment
):
class
TimmAutoAugment
(
RawTimmAutoAugment
):
""" TimmAutoAugment wrapper to auto fit different img tyeps. """
""" TimmAutoAugment wrapper to auto fit different img tyeps. """
...
...
ppcls/data/preprocess/ops/operators.py
浏览文件 @
3a8b5680
...
@@ -319,6 +319,25 @@ class CropImage(object):
...
@@ -319,6 +319,25 @@ class CropImage(object):
return
img
[
h_start
:
h_end
,
w_start
:
w_end
,
:]
return
img
[
h_start
:
h_end
,
w_start
:
w_end
,
:]
class
CropImageAtRatio
(
object
):
""" crop image with specified size and padding"""
def
__init__
(
self
,
size
:
int
,
pad
:
int
,
interpolation
=
"bilinear"
):
self
.
size
=
size
self
.
ratio
=
size
/
(
size
+
pad
)
self
.
interpolation
=
interpolation
def
__call__
(
self
,
img
):
height
,
width
=
img
.
shape
[:
2
]
crop_size
=
int
(
self
.
ratio
*
min
(
height
,
width
))
y
=
(
height
-
crop_size
)
//
2
x
=
(
width
-
crop_size
)
//
2
crop_img
=
img
[
y
:
y
+
crop_size
,
x
:
x
+
crop_size
,
:]
return
F
.
resize
(
crop_img
,
[
self
.
size
,
self
.
size
],
self
.
interpolation
)
class
Padv2
(
object
):
class
Padv2
(
object
):
def
__init__
(
self
,
def
__init__
(
self
,
size
=
None
,
size
=
None
,
...
...
ppcls/data/preprocess/ops/randaugment.py
浏览文件 @
3a8b5680
...
@@ -15,12 +15,60 @@
...
@@ -15,12 +15,60 @@
# This code is based on https://github.com/heartInsert/randaugment
# This code is based on https://github.com/heartInsert/randaugment
# reference: https://arxiv.org/abs/1909.13719
# reference: https://arxiv.org/abs/1909.13719
from
PIL
import
Image
,
ImageEnhance
,
ImageOps
import
numpy
as
np
import
random
import
random
from
.operators
import
RawColorJitter
from
.operators
import
RawColorJitter
from
paddle.vision.transforms
import
transforms
as
T
from
paddle.vision.transforms
import
transforms
as
T
import
numpy
as
np
from
PIL
import
Image
,
ImageEnhance
,
ImageOps
def
solarize_add
(
img
,
add
,
thresh
=
128
,
**
__
):
lut
=
[]
for
i
in
range
(
256
):
if
i
<
thresh
:
lut
.
append
(
min
(
255
,
i
+
add
))
else
:
lut
.
append
(
i
)
if
img
.
mode
in
(
"L"
,
"RGB"
):
if
img
.
mode
==
"RGB"
and
len
(
lut
)
==
256
:
lut
=
lut
+
lut
+
lut
return
img
.
point
(
lut
)
else
:
return
img
def
cutout
(
image
,
pad_size
,
replace
=
0
):
image_np
=
np
.
array
(
image
)
image_height
,
image_width
,
_
=
image_np
.
shape
# Sample the center location in the image where the zero mask will be applied.
cutout_center_height
=
np
.
random
.
randint
(
0
,
image_height
+
1
)
cutout_center_width
=
np
.
random
.
randint
(
0
,
image_width
+
1
)
lower_pad
=
np
.
maximum
(
0
,
cutout_center_height
-
pad_size
)
upper_pad
=
np
.
maximum
(
0
,
image_height
-
cutout_center_height
-
pad_size
)
left_pad
=
np
.
maximum
(
0
,
cutout_center_width
-
pad_size
)
right_pad
=
np
.
maximum
(
0
,
image_width
-
cutout_center_width
-
pad_size
)
cutout_shape
=
[
image_height
-
(
lower_pad
+
upper_pad
),
image_width
-
(
left_pad
+
right_pad
)
]
padding_dims
=
[[
lower_pad
,
upper_pad
],
[
left_pad
,
right_pad
]]
mask
=
np
.
pad
(
np
.
zeros
(
cutout_shape
,
dtype
=
image_np
.
dtype
),
padding_dims
,
constant_values
=
1
)
mask
=
np
.
expand_dims
(
mask
,
-
1
)
mask
=
np
.
tile
(
mask
,
[
1
,
1
,
3
])
image_np
=
np
.
where
(
np
.
equal
(
mask
,
0
),
np
.
full_like
(
image_np
,
fill_value
=
replace
,
dtype
=
image_np
.
dtype
),
image_np
)
return
Image
.
fromarray
(
image_np
)
class
RandAugment
(
object
):
class
RandAugment
(
object
):
def
__init__
(
self
,
num_layers
=
2
,
magnitude
=
5
,
fillcolor
=
(
128
,
128
,
128
)):
def
__init__
(
self
,
num_layers
=
2
,
magnitude
=
5
,
fillcolor
=
(
128
,
128
,
128
)):
...
@@ -95,10 +143,10 @@ class RandAugment(object):
...
@@ -95,10 +143,10 @@ class RandAugment(object):
"brightness"
:
lambda
img
,
magnitude
:
"brightness"
:
lambda
img
,
magnitude
:
ImageEnhance
.
Brightness
(
img
).
enhance
(
ImageEnhance
.
Brightness
(
img
).
enhance
(
1
+
magnitude
*
rnd_ch_op
([
-
1
,
1
])),
1
+
magnitude
*
rnd_ch_op
([
-
1
,
1
])),
"autocontrast"
:
lambda
img
,
magnitude
:
"autocontrast"
:
lambda
img
,
_
:
ImageOps
.
autocontrast
(
img
),
ImageOps
.
autocontrast
(
img
),
"equalize"
:
lambda
img
,
magnitude
:
ImageOps
.
equalize
(
img
),
"equalize"
:
lambda
img
,
_
:
ImageOps
.
equalize
(
img
),
"invert"
:
lambda
img
,
magnitude
:
ImageOps
.
invert
(
img
)
"invert"
:
lambda
img
,
_
:
ImageOps
.
invert
(
img
)
}
}
def
__call__
(
self
,
img
):
def
__call__
(
self
,
img
):
...
@@ -121,4 +169,85 @@ class RandomApply(object):
...
@@ -121,4 +169,85 @@ class RandomApply(object):
def
__call__
(
self
,
img
):
def
__call__
(
self
,
img
):
timg
=
self
.
trans
(
img
)
timg
=
self
.
trans
(
img
)
return
timg
return
timg
\ No newline at end of file
## RandAugment_EfficientNetV2 code below ##
class
RandAugmentV2
(
RandAugment
):
"""Customed RandAugment for EfficientNetV2"""
def
__init__
(
self
,
num_layers
=
2
,
magnitude
=
5
,
fillcolor
=
(
128
,
128
,
128
)):
super
().
__init__
(
num_layers
,
magnitude
,
fillcolor
)
abso_level
=
self
.
magnitude
/
self
.
max_level
# [5.0~10.0/10.0]=[0.5, 1.0]
self
.
level_map
=
{
"shearX"
:
0.3
*
abso_level
,
"shearY"
:
0.3
*
abso_level
,
"translateX"
:
100.0
*
abso_level
,
"translateY"
:
100.0
*
abso_level
,
"rotate"
:
30
*
abso_level
,
"color"
:
1.8
*
abso_level
+
0.1
,
"posterize"
:
int
(
4.0
*
abso_level
),
"solarize"
:
int
(
256.0
*
abso_level
),
"solarize_add"
:
int
(
110.0
*
abso_level
),
"contrast"
:
1.8
*
abso_level
+
0.1
,
"sharpness"
:
1.8
*
abso_level
+
0.1
,
"brightness"
:
1.8
*
abso_level
+
0.1
,
"autocontrast"
:
0
,
"equalize"
:
0
,
"invert"
:
0
,
"cutout"
:
int
(
40
*
abso_level
)
}
def
rotate_with_fill
(
img
,
magnitude
):
rot
=
img
.
convert
(
"RGBA"
).
rotate
(
magnitude
)
return
Image
.
composite
(
rot
,
Image
.
new
(
"RGBA"
,
rot
.
size
,
(
128
,
)
*
4
),
rot
).
convert
(
img
.
mode
)
rnd_ch_op
=
random
.
choice
self
.
func
=
{
"shearX"
:
lambda
img
,
magnitude
:
img
.
transform
(
img
.
size
,
Image
.
AFFINE
,
(
1
,
magnitude
*
rnd_ch_op
([
-
1
,
1
]),
0
,
0
,
1
,
0
),
Image
.
NEAREST
,
fillcolor
=
fillcolor
),
"shearY"
:
lambda
img
,
magnitude
:
img
.
transform
(
img
.
size
,
Image
.
AFFINE
,
(
1
,
0
,
0
,
magnitude
*
rnd_ch_op
([
-
1
,
1
]),
1
,
0
),
Image
.
NEAREST
,
fillcolor
=
fillcolor
),
"translateX"
:
lambda
img
,
magnitude
:
img
.
transform
(
img
.
size
,
Image
.
AFFINE
,
(
1
,
0
,
magnitude
*
rnd_ch_op
([
-
1
,
1
]),
0
,
1
,
0
),
Image
.
NEAREST
,
fillcolor
=
fillcolor
),
"translateY"
:
lambda
img
,
magnitude
:
img
.
transform
(
img
.
size
,
Image
.
AFFINE
,
(
1
,
0
,
0
,
0
,
1
,
magnitude
*
rnd_ch_op
([
-
1
,
1
])),
Image
.
NEAREST
,
fillcolor
=
fillcolor
),
"rotate"
:
lambda
img
,
magnitude
:
rotate_with_fill
(
img
,
magnitude
*
rnd_ch_op
([
-
1
,
1
])),
"color"
:
lambda
img
,
magnitude
:
ImageEnhance
.
Color
(
img
).
enhance
(
magnitude
),
"posterize"
:
lambda
img
,
magnitude
:
ImageOps
.
posterize
(
img
,
magnitude
),
"solarize"
:
lambda
img
,
magnitude
:
ImageOps
.
solarize
(
img
,
magnitude
),
"solarize_add"
:
lambda
img
,
magnitude
:
solarize_add
(
img
,
magnitude
),
"contrast"
:
lambda
img
,
magnitude
:
ImageEnhance
.
Contrast
(
img
).
enhance
(
magnitude
),
"sharpness"
:
lambda
img
,
magnitude
:
ImageEnhance
.
Sharpness
(
img
).
enhance
(
magnitude
),
"brightness"
:
lambda
img
,
magnitude
:
ImageEnhance
.
Brightness
(
img
).
enhance
(
magnitude
),
"autocontrast"
:
lambda
img
,
_
:
ImageOps
.
autocontrast
(
img
),
"equalize"
:
lambda
img
,
_
:
ImageOps
.
equalize
(
img
),
"invert"
:
lambda
img
,
_
:
ImageOps
.
invert
(
img
),
"cutout"
:
lambda
img
,
magnitude
:
cutout
(
img
,
magnitude
,
replace
=
fillcolor
[
0
])
}
ppcls/engine/train/__init__.py
浏览文件 @
3a8b5680
...
@@ -12,5 +12,6 @@
...
@@ -12,5 +12,6 @@
# See the License for the specific language governing permissions and
# See the License for the specific language governing permissions and
# limitations under the License.
# limitations under the License.
from
ppcls.engine.train.train
import
train_epoch
from
ppcls.engine.train.train
import
train_epoch
from
ppcls.engine.train.train_efficientnetv2
import
train_epoch_efficientnetv2
from
ppcls.engine.train.train_fixmatch
import
train_epoch_fixmatch
from
ppcls.engine.train.train_fixmatch
import
train_epoch_fixmatch
from
ppcls.engine.train.train_fixmatch_ccssl
import
train_epoch_fixmatch_ccssl
from
ppcls.engine.train.train_fixmatch_ccssl
import
train_epoch_fixmatch_ccssl
\ No newline at end of file
ppcls/engine/train/train_efficientnetv2.py
0 → 100644
浏览文件 @
3a8b5680
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from
__future__
import
absolute_import
,
division
,
print_function
import
time
import
numpy
as
np
from
ppcls.data
import
build_dataloader
from
ppcls.utils
import
logger
from
.train
import
train_epoch
def
train_epoch_efficientnetv2
(
engine
,
epoch_id
,
print_batch_step
):
# 1. Build training hyper-parameters for different training stage
num_stage
=
4
ratio_list
=
[(
i
+
1
)
/
num_stage
for
i
in
range
(
num_stage
)]
ram_list
=
np
.
linspace
(
5
,
10
,
num_stage
)
# dropout_rate_list = np.linspace(0.0, 0.2, num_stage)
stones
=
[
int
(
engine
.
config
[
"Global"
][
"epochs"
]
*
ratio_list
[
i
])
for
i
in
range
(
num_stage
)
]
image_size_list
=
[
int
(
128
+
(
300
-
128
)
*
ratio_list
[
i
])
for
i
in
range
(
num_stage
)
]
stage_id
=
0
for
i
in
range
(
num_stage
):
if
epoch_id
>
stones
[
i
]:
stage_id
=
i
+
1
# 2. Adjust training hyper-parameters for different training stage
if
not
hasattr
(
engine
,
'last_stage'
)
or
engine
.
last_stage
<
stage_id
:
engine
.
config
[
"DataLoader"
][
"Train"
][
"dataset"
][
"transform_ops"
][
1
][
"RandCropImage"
][
"size"
]
=
image_size_list
[
stage_id
]
engine
.
config
[
"DataLoader"
][
"Train"
][
"dataset"
][
"transform_ops"
][
3
][
"RandAugment"
][
"magnitude"
]
=
ram_list
[
stage_id
]
engine
.
train_dataloader
=
build_dataloader
(
engine
.
config
[
"DataLoader"
],
"Train"
,
engine
.
device
,
engine
.
use_dali
,
seed
=
epoch_id
)
engine
.
train_dataloader_iter
=
iter
(
engine
.
train_dataloader
)
engine
.
last_stage
=
stage_id
logger
.
info
(
f
"Training stage: [
{
stage_id
+
1
}
/
{
num_stage
}
](random_aug_magnitude=
{
ram_list
[
stage_id
]
}
, train_image_size=
{
image_size_list
[
stage_id
]
}
)"
)
# 3. Train one epoch as usual at current stage
train_epoch
(
engine
,
epoch_id
,
print_batch_step
)
ppcls/utils/config.py
浏览文件 @
3a8b5680
...
@@ -33,7 +33,7 @@ class AttrDict(dict):
...
@@ -33,7 +33,7 @@ class AttrDict(dict):
self
[
key
]
=
value
self
[
key
]
=
value
def
__deepcopy__
(
self
,
content
):
def
__deepcopy__
(
self
,
content
):
return
copy
.
deepcopy
(
dict
(
self
))
return
AttrDict
(
copy
.
deepcopy
(
dict
(
self
)
))
def
create_attr_dict
(
yaml_config
):
def
create_attr_dict
(
yaml_config
):
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录