模型轻量化示例
=======

#### TensorFlow Quant\_INT8-8无训练量化Demo

#### \[h2\]环境准备

请参见[环境准备](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-no-training-and-quantization#环境准备)，安装TensorFlow及依赖。

#### \[h2\]模型配置

*   准备量化模型
    
    将基线模型的pb文件放入"dopt\_tf\_py3/demo/quant8-8/notrain/tensorflow\_mnist/basemodel/"中。该路径下已经放入了mnist基线模型mnist.pb。
    
*   准备量化输入数据
    
    参见[模型量化](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-no-training-and-quantization#模型量化)，将图片或二进制形式的校准集放入"dopt\_tf\_py3/demo/quant8-8/notrain/tensorflow\_mnist/mnist\_test/"中。该路径下已经放入了图片校准集。
    

#### \[h2\]模型量化

执行"dopt\_tf\_py3/demo/quant8-8/notrain/tensorflow\_mnist/"下run\_release.sh即可。

"dopt\_tf\_py3/demo/quant8-8/notrain/tensorflow\_mnist"中存有量化后的pb模型和量化配置文件，运行demo后生成的文件如下图所示：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c7/v3/J5_aFtEVT42Fnq8bH3m83w/zh-cn_image_0000002594669510.png?HW-CC-KV=V1&HW-CC-Date=20260612T073654Z&HW-CC-Expire=86400&HW-CC-Sign=E2155340AF1776F83BD1611079F06AE0B91E6F33CFA1E876BCABCC4FD99653ED)

#### PyTorch Quant\_INT8-8无训练量化Demo

#### \[h2\]环境准备

请参见[环境准备](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-no-training-and-quantization#环境准备-1)，安装PyTorch及依赖。

#### \[h2\]模型配置

*   准备量化模型
    
    将基线模型的模型定义文件(.py)以及模型参数文件放入"dopt\_pytorch\_py3/demo/quant8-8/notrain/pytorch\_mnist/"。
    
    该路径下已经放入了mnist基线模型定义文件mnist.py以及模型参数文件mnist.pth。
    
*   准备量化输入数据
    
    参见[模型量化](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-no-training-and-quantization#模型量化-1)，将图片或二进制形式的校准集放入"dopt\_pytorch\_py3/demo/quant8-8/notrain/pytorch\_mnist/"中。
    

#### \[h2\]模型量化

执行"dopt\_pytorch\_py3/demo/quant8-8/notrain/pytorch\_mnist/"下run\_release.sh即可。

"dopt\_pytorch\_py3/demo/quant8-8/notrain/pytorch\_mnist/"中存有PyTorch无训练量化示例文件，如下图所示：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/1d/v3/hu8oG_ywR-uITmWTwk_42g/zh-cn_image_0000002594829438.png?HW-CC-KV=V1&HW-CC-Date=20260612T073654Z&HW-CC-Expire=86400&HW-CC-Sign=31CDA7EE449083DEEA925F3A7295E2FF77B76024159348B2A16A6189CC4546AB)

#### ONNX Quant\_INT8-8无训练量化Demo

#### \[h2\]环境准备

环境准备请参见[环境准备](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-no-training-and-quantization#环境准备-2)，安装ONNX及依赖。

#### \[h2\]示例代码

将dopt\_onnx\_py3 目录添加到系统环境中，在终端环境执行

python3 ./dopt\_so.py \\
    --framework 5 \\
    --mode   0 \\
    --model "./resnet18\_matmul.onnx" \\          ## 待量化的ONNX模型
    --cal\_conf "./config.prototxt" \\            ## 校准集配置文件
    --output  "./resnet18\_matmul\_quant.onnx" \\  ## 量化后的ONNX文件
    --input\_shape   input:1,3,128,128 \\         ## 浮点模型输入shape
    --compress\_conf  ./mnist\_param              ## dopt 工具生成的量化文件

其中，./config.prototxt配置内容为（[配置文件使用方法](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-no-training-and-quantization#onnx模型无训练量化)）：

strategy: 'Quant\_INT8-8'
device: USE\_CPU
preprocess\_parameter:
{
    input\_type: BINARY
    input\_file\_path: './input1.bin'
}

#### TensorFlow Quant\_INT8-8插件式量化Demo

#### \[h2\]环境准备

请参见[准备TensorFlow环境](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-plugin-based-quantization#准备tensorflow环境)。安装TensorFlow-gpu 2.8.0版本以及其必要的依赖。

#### \[h2\]示例代码

import sys
sys.path.append(".../dopt\_tf\_py3") ## 其中路径为绝对路径

def generate\_config():
    with tf.Session(config=config) as sess:
        build\_tf\_model() ## 自定义tf模型graph，仅构建拓扑图，不可加载权重
        from dopt.dopt\_tf.opt\_main import generate\_config\_file
        generate\_config\_file(sess, dst\_path="./config\_gen.json")

def train\_model():
    with tf.Session(config=config) as sess:
        build\_tf\_model() ## 自定义tf模型graph，仅构建拓扑图，不可加载权重
        from dopt.dopt\_tf.opt\_main import optimize\_model
        quant\_flag = tf.placeholder(tf.int32)
        is\_train\_flag = tf.placeholder(tf.bool, name='is\_train')
        ## 模型量化，自动在 tf.get\_default\_graph()上进行改图操作
        optimize\_model(
            sess,
            "./config\_gen.json",
            is\_train\_flag,
            quant\_flag
        )
        ## 调用完optimize\_model之后，加载模型权重
        saver = tf.Saver()
        saver.restore(ckpt)
        tf.global\_variables\_initializer().run()
        ## train model
        for i in range(...):
            optimizer = ...
            feed\_dict\[is\_train\_flag\] = True
            feed\_dict\[quant\_flag\] = 1
            sess.run(train\_op, feed\_dict)
        ## eval model
        feed\_dict\[is\_train\_flag\] = False
        feed\_dict\[quant\_flag\] = 1
        sess.run(output, feed\_dict)
        evaluate\_output(output)

def calibrate\_model():
    with tf.Session(config=config) as sess:
        build\_tf\_model() ## 自定义tf模型graph，仅构建拓扑图，不可加载权重
        from dopt.dopt\_tf.opt\_main import optimize\_model, set\_calibrate\_state
        quant\_flag = tf.placeholder(tf.int32)
        is\_train\_flag = tf.placeholder(tf.bool, name='is\_train')
        ## 模型量化，自动在 tf.get\_default\_graph()上进行改图操作
        optimize\_model(
            sess,
            "./config\_gen.json",
            is\_train\_flag,
            quant\_flag
        )
        ## 调用完optimize\_model之后，加载模型权重
        saver = tf.Saver()
        saver.restore(ckpt)

        calibration\_mode = True
        set\_calibrate\_state(sess, calibration\_mode )
        ## eval model
        feed\_dict\[is\_train\_flag\] = False
        feed\_dict\[quant\_flag\] = 1
        sess.run(output, feed\_dict)
        evaluate\_output(output)

def generate\_params():
    with tf.Session(config=config) as sess:
        build\_tf\_model()
        from dopt.dopt\_tf.opt\_main import generate\_final\_model
        generate\_final\_model(
            sess,
            config\_file         = "./config\_gen.json",
            output\_name\_list    = \["output"\],
            ckpt\_file           = "train\_ckpt\_path",
            output\_dir          = "./output\_dir"
        )
if \_\_name\_\_ == "\_\_main\_\_":
    ## step 1
    ## 开发者接入，配置修改
    generate\_config()
    
    ## step 2
    ## 训练模型，直至达标
    train\_model() ## 重训练量化模型
    ## calibrate\_model()  ## 校准量化模型
    
    ## step 3
    ## 提取参数，用于后续模型部署
    generate\_params()

#### PyTorch Quant\_INT8-8插件式量化Demo

#### \[h2\]环境准备

请参见[准备PyTorch环境](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-plugin-based-quantization#准备pytorch环境)。安装PyTorch-gpu 1.11版本以及其必要的依赖。

#### \[h2\]示例代码

import sys
sys.path.append(".../dopt\_tf\_py3") ## 其中路径为绝对路径

def generate\_config():
    model = build\_torch\_model()  ## 开发者待量化的浮点模型
    generate\_config\_file(model, input\_shape, dst\_path="./config\_gen.json") # model：torch.nn.Module， input\_shape : "input1:input1.shape;input2:input2.shape"
    return model

def train\_model():
    model = build\_torch\_model() ## 开发者待量化的浮点模型
    from dopt.dopt\_torch.opt\_main import optimize\_model
    model.load\_state\_dict(state)  ## load 浮点模型参数
    
    ## 调用optimize model 量化模型
    quanted\_model = optimize\_model(model, config\_path)
    
    ## train model
    quant\_loss = get\_quant\_loss(quant\_model)
    optimizer = torch.optim.SGD(quanted\_model.parameters(), lr=0.001, momentum=0.9) ## 假设使用SGD优化器
    
    for input\_data, label in range(...):
        optimizer.zero\_grad()
        outputs = model(input\_data)
        loss = loss\_fn(outputs, label) ## loss\_fn 为原始浮点网络训练loss
        
        total\_loss = loss + quant\_weight \* quant\_loss ## quant\_weight是指量化损失所占比例
        loss.backward()
        
        optimizer.step()

def calibrate\_model():
    model = build\_torch\_model() ## 开发者待量化的浮点模型
    from dopt.dopt\_torch.opt\_main import optimize\_model, set\_calibrate\_state
    model.load\_state\_dict(state)  ## load 浮点模型参数
    
    ## 调用optimize model 量化模型
    quanted\_model = optimize\_model(model, config\_path)
    
    calibrate\_mode = True
    set\_calibrate\_state(model, calibrate\_mode)
    
    for input\_data, label in range(...):
        outputs = model(input\_data)

def generate\_params():
    model = build\_torch\_model()
    from dopt.dopt\_torch.opt\_main import generate\_final\_model
    generate\_final\_model(model,
                        config\_file,
                        pth\_file="quant.pth",
                        output\_dir="./results\_dir")

if \_\_name\_\_ == "\_\_main\_\_":
    ## step 1
    ## 开发者接入，配置修改
    generate\_config()
    
    ## step 2
    ## 训练模型，直至达标
    train\_model()
    ## 无训练模式
    ## calibrate\_model()
 
    ## step 3
    ## 提取参数，用于后续模型部署
    generate\_params()

#### TensorFlow NASEA网络结构搜索Demo

#### \[h2\]NASEA分类网络

分类网络Demo位于tools\_dopt/dopt\_tf\_py3/demo/nas\_ea/ea\_cls\_imagenet，包含5个文件，如下图所示：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/27/v3/3G4_Lxn0QKe9tVReqWeaBw/zh-cn_image_0000002625188885.png?HW-CC-KV=V1&HW-CC-Date=20260612T073654Z&HW-CC-Expire=86400&HW-CC-Sign=F0ECAFE5874025C06871AA6A22D39949493CE1D82353F27F89250656D0626484)

*   blocks.so：搜索空间文件
    
*   readme.md：搜索训练指导文件
    
*   run\_release.sh：开始搜索的执行脚本
    
*   scen.yaml：配置项
    
*   user\_module.py：工具的自定义接口
    

执行步骤：

1.  准备ImageNet数据集（tfrecord格式），并修改scen.yaml文件中的数据集路径。
    
2.  环境准备请参见[环境准备](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#环境准备)。
    
3.  加载依赖的开源代码：
    
    1.  进入分类网络demo目录：
        
        cd tools\_dopt/dopt\_tf\_py3/demo/nas\_ea/ea\_cls\_imagenet
        
    2.  下载开源代码：
        
        git clone https://github.com/Tensorflow/models.git
        
    3.  进入开源代码目录：
        
        cd models
        
    4.  切换到指定版本：
        
        *   如果TensorFlow版本为1.12.0，执行如下命令：
            
            git checkout v1.12.0
            
        *   如果TensorFlow版本为2.1.0，执行如下命令：
            
            git checkout v2.1.0
            
    5.  返回分类网络demo目录：
        
        cd ..
        
    6.  设置PYTHONPATH默认路径：
        
        export PYTHONPATH=$PYTHONPATH:\`pwd\`/models/
        
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/e0/v3/ZseB8YazSyeCSX36XHPlYQ/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073654Z&HW-CC-Expire=86400&HW-CC-Sign=7D0B2BAF759E297D67AE0DB341C45B7B5D8271EC88409E0ABCE26198D508D1E6)
    
    每次打开终端需要重新执行一次上述命令，或添加到“~/.bashrc”文件，并执行“source ~/.bashrc”。
    
4.  配置demo下的scen.yaml文件，请参见[搜索参数配置](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#搜索参数配置)。scen.yaml中提供了建议参数，开发者可根据实际需求修改。
    
5.  修改demo下的user\_module.py文件，模型接口定义请参见[TensorFlow用户自定义接口](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#tensorflow开发者自定义接口)。user\_module.py中提供了建议配置，开发者可根据实际需求进行修改。
    
6.  执行脚本run\_release.sh，在results下，生成多个model\_arch\_result\_\*.py文件。开发者可根据log\_classification中提供的信息选择合适的网络结构进行训练。后续训练可参考readme.md中的指导。
    

#### \[h2\]NASEA检测网络

检测网络Demo位于"tools\_dopt/dopt\_tf\_py3/demo/nas\_ea/ea\_det\_coco"，包含6个文件，如下图所示：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/0f/v3/m1AqD20uSR61NrJl6KUkjg/zh-cn_image_0000002625109029.png?HW-CC-KV=V1&HW-CC-Date=20260612T073654Z&HW-CC-Expire=86400&HW-CC-Sign=E9FBE2A0A6C970CA803759DC9C5E1588BE9ED95B72FF79920D0ECC04A9BE2420)

*   blocks.so：搜索空间文件。
    
*   pre\_train.yaml：预训练的配置项。
    
*   readme.md：搜索训练指导文件。
    
*   run\_release.sh：开始搜索的执行脚本。
    
*   scen.yaml：配置项。
    
*   user\_module.py：工具的自定义接口。
    

执行步骤：

1.  准备数据集，包括用于预训的ImageNet数据集（tfrecord格式）和用于训练的COCO数据集（原始格式）。若有完成预训练的ckpt文件，则不需再准备ImageNet数据集。请参见[搜索参数配置](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#搜索参数配置)，修改scen.yaml文件中的数据集路径。
    
2.  环境准备请参见[环境准备](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#环境准备)。
    
3.  加载依赖的开源代码。
    
    1.  进入检测网络demo目录。
        
        cd tools\_dopt/dopt\_tf\_py3/demo/nas\_ea/ea\_det\_coco
        
    2.  下载开源代码。
        
        git clone https://github.com/pierluigiferrari/ssd\_keras.git
        git clone https://github.com/Tensorflow/models.git
        
    3.  进入开源代码目录。
        
        cd ssd\_keras
        
    4.  切换到指定版本。
        
        git checkout -b v0.9.0
        
    5.  返回检测网络demo目录。
        
        cd ..
        
    6.  进入models开源代码目录。
        
        cd models
        
    7.  切换models到指定版本。
        
        如果TensorFlow版本为1.12.0，执行如下命令：
        
        git checkout v1.12.0
        
        如果TensorFlow版本为2.1.0，则执行如下命令：
        
        git checkout v2.1.0
        
    8.  进入models开源代码目录
        
        cd models
        
    9.  设置PYTHONPATH默认路径
        
        export PYTHONPATH=$PYTHONPATH:\`pwd\`/models/
        
    10.  按照readme.md中的step1~step4步骤，修改相关开源文件。
         
4.  配置demo的scen.yaml文件和pre\_train.yaml，请参见[搜索参数配置](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#搜索参数配置)。scen.yaml中提供了建议参数，开发者可根据实际需求修改。
    
5.  修改demo的user\_module.py文件，模型接口定义请参见[TensorFlow用户自定义接口](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#tensorflow开发者自定义接口)。user\_module.py中提供了建议配置，开发者可根据实际需求进行修改。
    
6.  执行脚本run\_release.sh，在results下，生成多个model\_arch\_result\_\*.py文件。开发者可根据log\_detection中提供的信息选择合适的网络结构进行训练。后续训练可参考readme.md中的指导。
    

#### \[h2\]NASEA分割网络

分割网络Demo位于tools\_dopt/dopt\_tf\_py3/demo/nas\_ea/ea\_seg\_voc，包含 6个文件，如下图所示：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/71/v3/oGQWdliARMqUH6pdTkpW-A/zh-cn_image_0000002594669512.png?HW-CC-KV=V1&HW-CC-Date=20260612T073654Z&HW-CC-Expire=86400&HW-CC-Sign=F81C66BC077F207A2ABB350D967EDF3B04A9B230D09D69DA8A92D9FF1793C39E)

*   blocks.so：搜索空间文件。
    
*   pre\_train.yaml：预训练的配置项
    
*   readme.md：搜索训练指导文件。
    
*   run\_release.sh：开始搜索的执行脚本。
    
*   scen.yaml：配置项。
    
*   user\_module.py：工具的自定义接口。
    

执行步骤：

1.  准备数据集，包括用于预训练的ImageNet数据集（tfrecord格式）和用于训练的VOC数据集（tfrecord格式）。若有完成预训练的ckpt文件，则不需再准备ImageNet数据集。请参见[搜索参数配置](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#搜索参数配置)，修改scen.yaml文件中的数据集路径。
    
2.  环境准备请参见[环境准备](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#环境准备)。
    
3.  加载依赖的开源代码。
    
    1.  进入分割网络demo目录。
        
        cd tools\_dopt/dopt\_tf\_py3/demo/nas\_ea/ea\_seg\_voc
        
    2.  下载开源代码：
        
        git clone https://github.com/Tensorflow/models.git
        
    3.  进入开源代码目录。
        
        cd models
        
    4.  切换到指定版本。
        
        git checkout v1.13.0
        
    5.  返回分割网络demo目录。
        
        cd ..
        
    6.  设置PYTHONPATH默认路径：
        
        export PYTHONPATH=$PYTHONPATH:\`pwd\`/models/research:\`pwd\`/models/research/slim
        
    7.  如果TensorFlow版本为2.1.0，需要执行如下命令：
        1.  创建models\_tf2.1，并进入文件夹
            
            mkdir models\_tf2.1
            cd models\_tf2.1
            
        2.  下载开源实现
            
            git clone https://github.com/Tensorflow/models.git
            
        3.  进入开源代码路径
            
            cd models
            
        4.  切换到指定版本
            
            git checkout v2.1.0
            
        5.  返回models\_tf2.1目录
            
            cd ..
            
        6.  设置PYTHONPATH默认路径
            
            export PYTHONPATH=$PYTHONPATH:\`pwd\`/models/
            
            ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/f7/v3/k5WWXXAKTpi0vMod7k4C6g/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073654Z&HW-CC-Expire=86400&HW-CC-Sign=AF35EA57CE0B48AD707C8C7A360379CBA744BB60F4CB2A67C1064DBD9548394E)
            
            每次打开终端需要重新执行一次上述命令，或添加到"~/.bashrc"文件，并执行"source ~/.bashrc"。
            
    8.  修改开源实现，按照readme.md中修改开源实现的步骤，修改相关开源文件。
4.  配置demo的scen.yaml文件和pre\_train.yaml，请参见[搜索参数配置](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#搜索参数配置)。scen.yaml中提供了建议参数，开发者可根据实际需求修改。
    
5.  修改demo的user\_module.py文件，模型接口定义请参见[TensorFlow用户自定义接口](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#tensorflow开发者自定义接口)。user\_module.py中提供了建议配置，开发者可根据实际需求进行修改。
    
6.  执行脚本run\_release.sh，在results下，生成多个model\_arch\_result\_\*.py文件。开发者可根据log\_segmentation中提供的信息选择合适的网络结构进行训练。后续训练可参考readme.md中的指导。
    

#### PyTorch NASEA网络结构搜索Demo

#### \[h2\]NASEA分类网络

分类网络Demo位于tools\_dopt/dopt\_pytorch\_py3/demo/nas\_ea/ea\_cls\_imagenet\_pytorch，包含5个文件，如下：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/6f/v3/UlQfgSBoQJSWcf-PGb3hPg/zh-cn_image_0000002594829440.png?HW-CC-KV=V1&HW-CC-Date=20260612T073654Z&HW-CC-Expire=86400&HW-CC-Sign=6D73E8BC4E11247A032B81ECA01D2026BA348442BE1C714B9E2E8D79F320EA23)

*   blocks.so：搜索空间文件
    
*   readme.md：搜索训练指导文件
    
*   run\_release.sh：开始搜索的执行脚本
    
*   scen.yaml：配置项
    
*   user\_module.py：工具的自定义接口
    

执行步骤：

1.  准备ImageNet数据集（原始格式），并修改scen.yaml文件中的数据集路径。
    
2.  环境准备请参见[环境准备](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#环境准备)。
    
3.  配置demo下的scen.yaml文件，请参见[搜索参数配置](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#搜索参数配置)。scen.yaml中提供了建议参数，开发者可根据实际需求修改。
    
4.  修改demo下的user\_module.py文件，模型接口定义请参见[PyTorch开发者自定义接口](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#pytorch开发者自定义接口)。user\_module.py中提供了建议配置，开发者可根据实际需求进行修改。
    
5.  执行脚本run\_release.sh，在results下，生成多个model\_arch\_result\_\*.py文件。开发者可根据log\_classification中提供的信息选择合适的网络结构进行训练。后续训练可参考readme.md中的指导。
    

#### \[h2\]NASEA分割网络

分割网络Demo位于tools\_dopt/dopt\_pytorch\_py3/demo/nas\_ea/ea\_seg\_voc\_pytorch，包含 6个文件，如下：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/b4/v3/X_j-gPPoQpC6C5DPEkaD8A/zh-cn_image_0000002625188887.png?HW-CC-KV=V1&HW-CC-Date=20260612T073654Z&HW-CC-Expire=86400&HW-CC-Sign=24D637DE7C80D013F440E1B2AC60FF03009C1656198802A08849DDBD740BA95B)

*   blocks.so：搜索空间文件
    
*   pre\_train.yaml：预训练的配置项
    
*   readme.md：搜索训练指导文件
    
*   run\_release.sh：开始搜索的执行脚本
    
*   scen.yaml：配置项
    
*   user\_module.py：工具的自定义接口
    

执行步骤：

1.  准备数据集，包括用于预训练的ImageNet数据集（原始格式）和用于训练VOC数据集（原始格式）。若有完成预训练的ckpt文件，则不需再准备ImageNet数据集。请参见[搜索参数配置](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#搜索参数配置)，修改scen.yaml文件中的数据集路径。
    
2.  环境准备请参见[环境准备](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#环境准备)。
    
3.  加载依赖的开源代码：参考tools\_dopt/dopt\_pytorch\_py3/demo/nas\_ea/ea\_seg\_voc\_pytorch/readme.md
    
4.  配置demo下的scen.yaml文件和pre\_train.yaml文件，请参见[搜索参数配置](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#搜索参数配置)。scen.yaml中提供了建议参数，开发者可根据实际需求修改。
    
5.  修改demo下的user\_module.py文件，模型接口定义请参见[PyTorch开发者自定义接口](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-network-structure-search-training#pytorch开发者自定义接口)。user\_module.py中提供了建议配置，开发者可根据实际需求进行修改。
    
6.  执行脚本run\_release.sh，在results下，生成多个model\_arch\_result\_\*.py文件。开发者可根据log\_segmentation中提供的信息选择合适的网络结构进行训练。后续训练可参考readme.md中的指导。