
# 准备模型
本方案以开源YOLOv7模型为例说明如何准备模型。
1. 在宿主机上基于[步骤二：获取基础镜像](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_auto_data_911013.html#ZH-CN_TOPIC_0000002516330051__section5980742152416)获取的基础镜像起一个容器，挂载宿主机目录/home/driving_model用于存储模型相关数据，启动容器可参考如下命令：
   ```
   ctr run \
     --device=/dev/davinci_manager \
     --device=/dev/devmm_svm \
     --device=/dev/hisi_hdc \
     --device=/dev/davinci0  \
     --device=/dev/davinci1  \
     --device=/dev/davinci2  \
     --device=/dev/davinci3  \
     --device=/dev/davinci4  \
     --device=/dev/davinci5  \
     --device=/dev/davinci6  \
     --device=/dev/davinci7  \
     --mount "type=bind,src=/etc/localtime,dst=/etc/localtime,options=rbind:ro" \
     --mount "type=bind,src=/var/log/npu/,dst=/usr/slog,options=rbind:rw" \
     --mount "type=bind,src=/usr/local/sbin/npu-smi,dst=/usr/local/sbin/npu-smi,options=rbind:rw" \
     --mount "type=bind,src=/usr/local/dcmi,dst=/usr/local/dcmi,options=rbind:rw" \
     --mount "type=bind,src=/etc/ascend_install.info,dst=/etc/ascend_install.info,options=rbind:rw" \
     --mount "type=bind,src=/sys/fs/cgroup,dst=/sys/fs/cgroup,options=rbind:ro" \
     --mount "type=bind,src=/usr/local/Ascend/driver,dst=/usr/local/Ascend/driver,options=rbind:rw" \
     --mount "type=bind,src=/usr/bin/hccn_tool,dst=/usr/bin/hccn_tool,options=rbind:rw" \
     --mount "type=bind,src=/etc/hccn.conf,dst=/etc/hccn.conf,options=rbind:rw" \
     --mount "type=bind,src=/home/driving_model,dst=/home/driving_model,options=rbind:rw" \
     --net=host \
     -u root \
     --shm-size 64g \
     {image} \
     {container_name} \
     /bin/sh
   ```
   **参数说明：**
   - ${image}：基础镜像名称。
   
   - {container_name}：容器名称。
    
2. 在容器中执行如下命令下载yolov7源码并安装依赖。
   ```
   git clone https://github.com/WongKinYiu/yolov7.git
   cd yolov7
   git reset --hard 1cb8aa5
   pip3 install -r requirements.txt
   ```
   
3. 从如下链接中下载权重文件：<https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-e6.pt>。
4. 在yolov7目录中执行如下命令，导出名为yolov7-e6.onnx的模型。
   ```
   python export.py --weights ./yolov7-e6.pt --batch-size 1 --simplify --grid --topk-all 100 --iou-thres 0.65 --conf-thres 0.001 --img-size 1280 1280 --max-wh 1280
   ```
   其中各参数含义如下：
   - --weights：模型权重文件
   
   - --batch-size：batch大小，可取1、4、8、16、32、64
   
   - --topk-all：每张图片上最多能检测出来物体的数量
   
   - --iou-thres：交并比阈值
   
   - --conf-thres：置信度阈值
   
   - --img-size：图片大小
    
5. 导出onnx模型后，需要导出mindspore对应的模型，下载mindir工具包 <https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.7.1/MindSporeLite/lite/release/linux/aarch64/cloud_fusion/python39/mindspore-lite-2.7.1-linux-aarch64.tar.gz>
   
6. 执行如下命令导出名为output_model.mindir的模型。
   ```
   tar -zxvf mindspore-lite-2.7.1-linux-aarch64.tar.gz
   export LITE_HOME=./mindspore-lite-2.7.1-linux-aarch64       # 建议使用绝对路径
   export LD_LIBRARY_PATH=${LITE_HOME}/runtime/third_party/dnnl:$LD_LIBRARY_PATH
   export LD_LIBRARY_PATH=${LITE_HOME}/runtime/lib:${LITE_HOME}/tools/converter/lib:$LD_LIBRARY_PATH
   ./mindspore-lite-2.7.1-linux-aarch64/tools/converter/converter/converter_lite --modelFile=model.onnx --outputFile=output_model --fmk=ONNX --optimize=ascend_oriented --configFile= --inputShape=imgs:1,3,1280,1280
   ```
   其中各参数含义如下：
   - --modelFile：需要转换的模型路径
   
   - --outputFile：转换后的mindir文件保存路径，默认添加.mindir后缀
   
   - --fmk：输入的模型类型，ONNX表示输入的模型为ONNX模型，如果输入模型类型为pb，则设置为TF
   
   - --optimize：走Ascend推理，必须配置的默认参数，表示走ascend后端的离线转换推理；若设置为--optimize=None，表示转换阶段不进行编译，经过此步骤转换得到的mindir可以进行在线推理
   
   - --configFile：设置一些优化一起配置文件配置动态分档，纯动态相关信息
   
   - --inputShape：在固定shape场景下配置，其余场景不需要配置该参数
    
 
