!10394 Modify resnet50_adv_pruning net

From: @zhanghuiyao
Reviewed-by: @linqingke,@oacjiewen
Signed-off-by: @linqingke
pull/10394/MERGE
mindspore-ci-bot 4 years ago committed by Gitee
commit de63ffc952

@ -58,6 +58,7 @@ Dataset used: [Oxford-IIIT Pet](https://www.robots.ox.ac.uk/~vgg/data/pets/)
``` ```
## [Training process](#contents) ## [Training process](#contents)
To Be Done To Be Done
## [Eval process](#contents) ## [Eval process](#contents)
@ -66,11 +67,10 @@ To Be Done
After installing MindSpore via the official website, you can start evaluation as follows: After installing MindSpore via the official website, you can start evaluation as follows:
### Launch ### Launch
``` ```bash
# infer example # infer example
Ascend: python eval.py --dataset_path ~/Pets/test.mindrecord --platform Ascend --checkpoint_path [CHECKPOINT_PATH] Ascend: python eval.py --dataset_path ~/Pets/test.mindrecord --platform Ascend --checkpoint_path [CHECKPOINT_PATH]
GPU: python eval.py --dataset_path ~/Pets/test.mindrecord --platform GPU --checkpoint_path [CHECKPOINT_PATH] GPU: python eval.py --dataset_path ~/Pets/test.mindrecord --platform GPU --checkpoint_path [CHECKPOINT_PATH]
@ -80,18 +80,18 @@ After installing MindSpore via the official website, you can start evaluation as
### Result ### Result
``` ```python
result: {'acc': 0.8023984736985554} ckpt= ./resnet50-imgnet-0.65x-80.24.ckpt result: {'acc': 0.8023984736985554} ckpt= ./resnet50-imgnet-0.65x-80.24.ckpt
``` ```
# [Model Description](#contents) # [Model Description](#contents)
## [Performance](#contents) ## [Performance](#contents)
#### Evaluation Performance ### Evaluation Performance
#### ResNet50-0.65x on ImageNet2012
###### ResNet50-0.65x on ImageNet2012
| Parameters | | | Parameters | |
| -------------------------- | -------------------------------------- | | -------------------------- | -------------------------------------- |
| Model Version | ResNet50-0.65x | | Model Version | ResNet50-0.65x |
@ -102,7 +102,8 @@ result: {'acc': 0.8023984736985554} ckpt= ./resnet50-imgnet-0.65x-80.24.ckpt
| FLOPs (G) | 2.1 | | FLOPs (G) | 2.1 |
| Accuracy (Top1) | 75.80 | | Accuracy (Top1) | 75.80 |
###### ResNet50-0.65x on Oxford-IIIT Pet #### ResNet50-0.65x on Oxford-IIIT Pet
| Parameters | | | Parameters | |
| -------------------------- | -------------------------------------- | | -------------------------- | -------------------------------------- |
| Model Version | ResNet50-0.65x | | Model Version | ResNet50-0.65x |

@ -26,7 +26,7 @@ from mindspore.train.serialization import load_checkpoint, load_param_into_net
from mindspore.common import dtype as mstype from mindspore.common import dtype as mstype
from src.pet_dataset import create_dataset from src.pet_dataset import create_dataset
from src.config import config_ascend, config_gpu from src.config import cfg
from src.resnet_imgnet import resnet50 from src.resnet_imgnet import resnet50
@ -40,14 +40,12 @@ args_opt = parser.parse_args()
if __name__ == '__main__': if __name__ == '__main__':
config_platform = None config_platform = cfg
if args_opt.platform == "Ascend": if args_opt.platform == "Ascend":
config_platform = config_ascend
device_id = int(os.getenv('DEVICE_ID')) device_id = int(os.getenv('DEVICE_ID'))
context.set_context(mode=context.GRAPH_MODE, device_target="Ascend", context.set_context(mode=context.GRAPH_MODE, device_target="Ascend",
device_id=device_id, save_graphs=False) device_id=device_id, save_graphs=False)
elif args_opt.platform == "GPU": elif args_opt.platform == "GPU":
config_platform = config_gpu
context.set_context(mode=context.GRAPH_MODE, context.set_context(mode=context.GRAPH_MODE,
device_target="GPU", save_graphs=False) device_target="GPU", save_graphs=False)
else: else:
@ -55,12 +53,6 @@ if __name__ == '__main__':
loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')
if args_opt.platform == "Ascend":
net.to_float(mstype.float16)
for _, cell in net.cells_and_names():
if isinstance(cell, nn.Dense):
cell.to_float(mstype.float32)
dataset = create_dataset(dataset_path=args_opt.dataset_path, dataset = create_dataset(dataset_path=args_opt.dataset_path,
do_train=False, do_train=False,
config=config_platform, config=config_platform,
@ -76,6 +68,13 @@ if __name__ == '__main__':
net = resnet50( net = resnet50(
rate=0.65, class_num=config_platform.num_classes, index=index) rate=0.65, class_num=config_platform.num_classes, index=index)
if args_opt.platform == "Ascend":
net.to_float(mstype.float16)
for _, cell in net.cells_and_names():
if isinstance(cell, nn.Dense):
cell.to_float(mstype.float32)
if args_opt.checkpoint_path: if args_opt.checkpoint_path:
param_dict = load_checkpoint(args_opt.checkpoint_path) param_dict = load_checkpoint(args_opt.checkpoint_path)
load_param_into_net(net, param_dict) load_param_into_net(net, param_dict)

@ -17,25 +17,7 @@ network config setting, will be used in train.py and eval.py
""" """
from easydict import EasyDict as ed from easydict import EasyDict as ed
config_ascend = ed({ cfg = ed({
"num_classes": 438,
"image_height": 224,
"image_width": 224,
"batch_size": 256,
"epoch_size": 200,
"warmup_epochs": 1,
"lr": 0.02,
"momentum": 0.9,
"weight_decay": 4e-5,
"label_smooth": 0.1,
"loss_scale": 1024,
"save_checkpoint": True,
"save_checkpoint_epochs": 5,
"keep_checkpoint_max": 200,
"save_checkpoint_path": "./checkpoint",
})
config_gpu = ed({
"num_classes": 37, "num_classes": 37,
"image_height": 224, "image_height": 224,
"image_width": 224, "image_width": 224,

@ -18,10 +18,11 @@ create train or eval dataset.
import os import os
import mindspore.common.dtype as mstype import mindspore.common.dtype as mstype
import mindspore.dataset.engine as de import mindspore.dataset.engine as de
import mindspore.dataset.transforms.vision.c_transforms as C import mindspore.dataset.vision.c_transforms as C
import mindspore.dataset.transforms.vision.py_transforms as P import mindspore.dataset.vision.py_transforms as P
import mindspore.dataset.transforms.c_transforms as C2 import mindspore.dataset.transforms.c_transforms as C2
from mindspore.dataset.transforms.vision import Inter import mindspore.dataset.transforms.py_transforms as P2
from mindspore.dataset.vision import Inter
def create_dataset(dataset_path, do_train, config, platform, repeat_num=1, batch_size=100): def create_dataset(dataset_path, do_train, config, platform, repeat_num=1, batch_size=100):
@ -78,13 +79,13 @@ def create_dataset(dataset_path, do_train, config, platform, repeat_num=1, batch
center_crop_p = P.CenterCrop(224) center_crop_p = P.CenterCrop(224)
totensor = P.ToTensor() totensor = P.ToTensor()
normalize_p = P.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)) normalize_p = P.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))
composeop = P.ComposeOp( composeop = P2.Compose(
[decode_p, resize_p, center_crop_p, totensor, normalize_p]) [decode_p, resize_p, center_crop_p, totensor, normalize_p])
if do_train: if do_train:
trans = [resize_crop_op, horizontal_flip_op, color_op, trans = [resize_crop_op, horizontal_flip_op, color_op,
rescale_op, normalize_op, change_swap_op] rescale_op, normalize_op, change_swap_op]
else: else:
trans = composeop() trans = composeop
type_cast_op = C2.TypeCast(mstype.int32) type_cast_op = C2.TypeCast(mstype.int32)
ds = ds.map(input_columns="image", operations=trans, ds = ds.map(input_columns="image", operations=trans,

@ -327,21 +327,21 @@ class ResNet(nn.Cell):
for _, m in self.cells_and_names(): for _, m in self.cells_and_names():
if isinstance(m, (nn.Conv2d)): if isinstance(m, (nn.Conv2d)):
n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
m.weight.set_parameter_data(Tensor(np.random.normal(0, np.sqrt(2. / n), m.weight.set_data(Tensor(np.random.normal(0, np.sqrt(2. / n),
m.weight.data.shape).astype("float32"))) m.weight.data.shape).astype("float32")))
if m.bias is not None: if m.bias is not None:
m.bias.set_parameter_data( m.bias.set_data(
Tensor(np.zeros(m.bias.data.shape, dtype="float32"))) Tensor(np.zeros(m.bias.data.shape, dtype="float32")))
elif isinstance(m, nn.BatchNorm2d): elif isinstance(m, nn.BatchNorm2d):
m.gamma.set_parameter_data( m.gamma.set_data(
Tensor(np.ones(m.gamma.data.shape, dtype="float32"))) Tensor(np.ones(m.gamma.data.shape, dtype="float32")))
m.beta.set_parameter_data( m.beta.set_data(
Tensor(np.zeros(m.beta.data.shape, dtype="float32"))) Tensor(np.zeros(m.beta.data.shape, dtype="float32")))
elif isinstance(m, nn.Dense): elif isinstance(m, nn.Dense):
m.weight.set_parameter_data(Tensor(np.random.normal( m.weight.set_data(Tensor(np.random.normal(
0, 0.01, m.weight.data.shape).astype("float32"))) 0, 0.01, m.weight.data.shape).astype("float32")))
if m.bias is not None: if m.bias is not None:
m.bias.set_parameter_data( m.bias.set_data(
Tensor(np.zeros(m.bias.data.shape, dtype="float32"))) Tensor(np.zeros(m.bias.data.shape, dtype="float32")))

Loading…
Cancel
Save