Skip to content

Latest commit

 

History

History
63 lines (44 loc) · 2.94 KB

README.md

File metadata and controls

63 lines (44 loc) · 2.94 KB

运行该示例前请安装Paddle1.6或更高版本

PaddleSeg神经网络搜索(NAS)示例

在阅读本教程前,请确保您已经了解过PaddleSeg使用说明等章节,以便对PaddleSeg有一定的了解

该文档介绍如何使用PaddleSlim对分割库中的模型进行搜索。

该教程中所示操作,如无特殊说明,均在PaddleSeg/路径下执行。

概述

我们选取Deeplab+mobilenetv2模型作为神经网络搜索示例,该示例使用PaddleSlim 辅助完成神经网络搜索实验,具体技术细节,请您参考神经网络搜索策略

定义搜索空间

搜索实验中,我们采用了SANAS的方式进行搜索,本次实验会对网络模型中的通道数和卷积核尺寸进行搜索。 所以我们定义了如下搜索空间:

  • head通道模块head_num:定义了MobilenetV2 head模块中通道数变化区间;
  • inverse_res_block1-6filter_num1-6: 定义了inverse_res_block模块中通道数变化区间;
  • inverse_res_blockrepeat:定义了MobilenetV2 inverse_res_block模块中unit的个数;
  • inverse_res_blockmultiply:定义了MobilenetV2 inverse_res_block模块中expansion_factor变化区间;
  • 卷积核尺寸k_size:定义了MobilenetV2中卷积和尺寸大小是3x3或者5x5。

根据定义的搜索空间各个区间,我们的搜索空间tokens共9位,变化区间在([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [7, 5, 8, 6, 2, 5, 8, 6, 2, 5, 8, 6, 2, 5, 10, 6, 2, 5, 10, 6, 2, 5, 12, 6, 2])范围内。

初始化tokens为:[4, 4, 5, 1, 0, 4, 4, 1, 0, 4, 4, 3, 0, 4, 5, 2, 0, 4, 7, 2, 0, 4, 9, 0, 0]。

开始搜索

首先需要安装PaddleSlim,请参考安装教程

配置paddleseg的config, 下面只展示nas相关的内容

SLIM:
    NAS_PORT: 23333 # 端口
    NAS_ADDRESS: "" # ip地址,作为server不用填写,作为client的时候需要填写server的ip
    NAS_SEARCH_STEPS: 100 # 搜索多少个结构
    NAS_START_EVAL_EPOCH: -1 # 第几个epoch开始对模型进行评估
    NAS_IS_SERVER: True # 是否为server
    NAS_SPACE_NAME: "MobileNetV2SpaceSeg" # 搜索空间

训练与评估

执行以下命令,边训练边评估

CUDA_VISIBLE_DEVICES=0 python -u ./slim/nas/train_nas.py --log_steps 10 --cfg configs/deeplabv3p_mobilenetv2_cityscapes.yaml --use_gpu \
SLIM.NAS_PORT 23333 \
SLIM.NAS_ADDRESS "" \
SLIM.NAS_SEARCH_STEPS 2 \
SLIM.NAS_START_EVAL_EPOCH -1 \
SLIM.NAS_IS_SERVER True \
SLIM.NAS_SPACE_NAME "MobileNetV2SpaceSeg" \

FAQ

  • 运行报错:socket.error: [Errno 98] Address already in use

解决方法:当前端口被占用,请修改SLIM.NAS_PORT端口。