diff --git a/model_zoo/official/cv/squeezenet/README.md b/model_zoo/official/cv/squeezenet/README.md index 5d900260ba7..bf529f69337 100644 --- a/model_zoo/official/cv/squeezenet/README.md +++ b/model_zoo/official/cv/squeezenet/README.md @@ -62,7 +62,7 @@ For FP16 operators, if the input data type is FP32, the backend of MindSpore wil # [Environment Requirements](#contents) -- Hardware(Ascend) +- Hardware(Ascend/CPU) - Prepare hardware environment with Ascend processor. If you want to try Ascend, please send the [application form](https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/file/other/Ascend%20Model%20Zoo%E4%BD%93%E9%AA%8C%E8%B5%84%E6%BA%90%E7%94%B3%E8%AF%B7%E8%A1%A8.docx) to ascend@huawei.com. Once approved, you can get the resources. Squeezenet training on GPU performs badly now, and it is still in research. See [squeezenet in research](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/research/cv/squeezenet) to get up-to-date details. - Framework - [MindSpore](https://www.mindspore.cn/install/en) @@ -74,7 +74,7 @@ For FP16 operators, if the input data type is FP32, the backend of MindSpore wil After installing MindSpore via the official website, you can start training and evaluation as follows: -- runing on Ascend +- running on Ascend ```bash # distributed training @@ -87,6 +87,16 @@ After installing MindSpore via the official website, you can start training and Usage: sh scripts/run_eval.sh [squeezenet|squeezenet_residual] [cifar10|imagenet] [DEVICE_ID] [DATASET_PATH] [CHECKPOINT_PATH] ``` +- running on CPU + + ```bash + # standalone training + Usage: bash scripts/run_train_cpu.sh [squeezenet|squeezenet_residual] [cifar10|imagenet] [DATASET_PATH] [PRETRAINED_CKPT_PATH](optional) + + # run evaluation example + Usage: bash scripts/run_eval.sh [squeezenet|squeezenet_residual] [cifar10|imagenet] [DATASET_PATH] [CHECKPOINT_PATH] + ``` + # [Script Description](#contents) ## [Script and Sample Code](#contents) diff --git a/model_zoo/official/cv/squeezenet/eval.py b/model_zoo/official/cv/squeezenet/eval.py index a1eda27f3e1..ec0acd5181d 100755 --- a/model_zoo/official/cv/squeezenet/eval.py +++ b/model_zoo/official/cv/squeezenet/eval.py @@ -54,7 +54,8 @@ if __name__ == '__main__': target = args_opt.device_target # init context - device_id = int(os.getenv('DEVICE_ID')) + device_id = os.getenv('DEVICE_ID') + device_id = int(device_id) if device_id else 0 context.set_context(mode=context.GRAPH_MODE, device_target=target, device_id=device_id) diff --git a/model_zoo/official/cv/squeezenet/scripts/run_eval_cpu.sh b/model_zoo/official/cv/squeezenet/scripts/run_eval_cpu.sh new file mode 100755 index 00000000000..399d0d8570c --- /dev/null +++ b/model_zoo/official/cv/squeezenet/scripts/run_eval_cpu.sh @@ -0,0 +1,70 @@ +#!/bin/bash +# Copyright 2021 Huawei Technologies Co., Ltd +# +# 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. +# ============================================================================ + +if [ $# != 4 ] +then + echo "Usage: bash scripts/run_eval.sh [squeezenet|squeezenet_residual] [cifar10|imagenet] [DATASET_PATH] [CHECKPOINT_PATH]" +exit 1 +fi + +if [ $1 != "squeezenet" ] && [ $1 != "squeezenet_residual" ] +then + echo "error: the selected net is neither squeezenet nor squeezenet_residual" +exit 1 +fi + +if [ $2 != "cifar10" ] && [ $2 != "imagenet" ] +then + echo "error: the selected dataset is neither cifar10 nor imagenet" +exit 1 +fi + +get_real_path(){ + if [ "${1:0:1}" == "/" ]; then + echo "$1" + else + echo "$(realpath -m $PWD/$1)" + fi +} + +PATH1=$(get_real_path $3) +PATH2=$(get_real_path $4) + + +if [ ! -d $PATH1 ] +then + echo "error: DATASET_PATH=$PATH1 is not a directory" +exit 1 +fi + +if [ ! -f $PATH2 ] +then + echo "error: CHECKPOINT_PATH=$PATH2 is not a file" +exit 1 +fi + +if [ -d "eval" ]; +then + rm -rf ./eval +fi +mkdir ./eval +cp ./eval.py ./eval +cp -r ./src ./eval +cd ./eval || exit +env > env.log +echo "start evaluation for device CPU" +python eval.py --net=$1 --dataset=$2 --device_target=CPU --dataset_path=$PATH1 --checkpoint_path=$PATH2 &> log & +cd .. diff --git a/model_zoo/official/cv/squeezenet/scripts/run_train_cpu.sh b/model_zoo/official/cv/squeezenet/scripts/run_train_cpu.sh new file mode 100755 index 00000000000..045c282a7b3 --- /dev/null +++ b/model_zoo/official/cv/squeezenet/scripts/run_train_cpu.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# Copyright 2021 Huawei Technologies Co., Ltd +# +# 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. +# ============================================================================ + +if [ $# != 3 ] && [ $# != 4 ] +then + echo "Usage: bash scripts/run_train_cpu.sh [squeezenet|squeezenet_residual] [cifar10|imagenet] [DATASET_PATH] [PRETRAINED_CKPT_PATH](optional)" +exit 1 +fi + +if [ $1 != "squeezenet" ] && [ $1 != "squeezenet_residual" ] +then + echo "error: the selected net is neither squeezenet nor squeezenet_residual" +exit 1 +fi + +if [ $2 != "cifar10" ] && [ $2 != "imagenet" ] +then + echo "error: the selected dataset is neither cifar10 nor imagenet" +exit 1 +fi + +get_real_path(){ + if [ "${1:0:1}" == "/" ]; then + echo "$1" + else + echo "$(realpath -m $PWD/$1)" + fi +} + +PATH1=$(get_real_path $3) + +if [ $# == 4 ] +then + PATH2=$(get_real_path $4) +fi + +if [ ! -d $PATH1 ] +then + echo "error: DATASET_PATH=$PATH1 is not a directory" +exit 1 +fi + +if [ $# == 4 ] && [ ! -f $PATH2 ] +then + echo "error: PRETRAINED_CKPT_PATH=$PATH2 is not a file" +exit 1 +fi + +if [ -d "train" ]; +then + rm -rf ./train +fi +mkdir ./train +cp ./train.py ./train +cp -r ./src ./train +cd ./train || exit +echo "start training for device CPU" +env > env.log +if [ $# == 3 ] +then + python train.py --net=$1 --dataset=$2 --device_target=CPU --dataset_path=$PATH1 &> log & +fi + +if [ $# == 4 ] +then + python train.py --net=$1 --dataset=$2 --device_target=CPU --dataset_path=$PATH1 --pre_trained=$PATH2 &> log & +fi +cd .. diff --git a/model_zoo/official/cv/squeezenet/src/dataset.py b/model_zoo/official/cv/squeezenet/src/dataset.py index 38eaef30f30..fc4e8167e8c 100755 --- a/model_zoo/official/cv/squeezenet/src/dataset.py +++ b/model_zoo/official/cv/squeezenet/src/dataset.py @@ -42,6 +42,8 @@ def create_dataset_cifar(dataset_path, """ if target == "Ascend": device_num, rank_id = _get_rank_info() + elif target == "CPU": + device_num = 1 else: init() rank_id = get_rank() diff --git a/model_zoo/official/cv/squeezenet/train.py b/model_zoo/official/cv/squeezenet/train.py index 5da71a7d461..c9fe4b7d135 100755 --- a/model_zoo/official/cv/squeezenet/train.py +++ b/model_zoo/official/cv/squeezenet/train.py @@ -144,9 +144,10 @@ if __name__ == '__main__': amp_level="O2", keep_batchnorm_fp32=False) else: - # GPU target - print("Squeezenet training on GPU performs badly now, and it is still in research..." - "See model_zoo/research/cv/squeezenet to get up-to-date details.") + if target == "GPU": + # GPU target + print("Squeezenet training on GPU performs badly now, and it is still in research..." + "See model_zoo/research/cv/squeezenet to get up-to-date details.") opt = Momentum(filter(lambda x: x.requires_grad, net.get_parameters()), lr, config.momentum,