昇腾社区首页
中文
注册

模型使用

进行相应环境准备后,我们可以开始模型训练与评估任务。

准备模型源码和数据集

  1. 请通过单击模型页面的“获取源码”方式,准备模型源码。
  2. 安装依赖。

    在模型根目录执行以下命令,安装模型对应PyTorch版本需要的依赖。

    pip install -r 2.1_requirements.txt  # PyTorch2.1版本
  3. 请自行获取COCO2017数据集。
    解压后数据集目录结构参考如下(文件夹名称以“$coco_data”为例):
    $coco_data: # 根目录
        ├── train2017 # 训练集图片,约118287张
        ├── val2017 # 验证集图片,约5000张
        └── annotations # 标注目录
              ├── instances_train2017.json # 对应目标检测、分割任务的训练集标注文件
              ├── instances_val2017.json # 对应目标检测、分割任务的验证集标注文件
              ├── captions_train2017.json
              ├── captions_val2017.json
              ├── person_keypoints_train2017.json
              └── person_keypoints_val2017.json
  4. 生成专用标注文件。
    将代码仓中“coco/coco2yolo.py”“coco/coco_class.txt”拷贝到“$coco_data”根目录,运行如下命令,在“$coco_data”根目录生成“train2017.txt”“val2017.txt”文件。
    python3 coco2yolo.py
  5. 配置数据集路径。

    在模型根目录执行以下命令:

    mkdir datasets
    ln -s $coco_data ./datasets/coco

    $coco_data参数填写数据集路径。

  6. 编译安装torchvision。

    为了更快的推理性能,请编译安装而非直接安装torchvision。

    git clone -b v0.9.1 https://github.com/pytorch/vision.git  # 根据torch版本选择不同分支
    cd vision
    python3 setup.py bdist_wheel
    pip3 install dist/*.whl
  7. 编译安装opencv-python。

    为了获得最好的图像处理性能,请编译安装opencv-python而非直接安装。编译安装步骤如下:

    export GIT_SSL_NO_VERIFY=true
    git clone https://github.com/opencv/opencv.git
    cd opencv
    mkdir -p build
    cd build
    cmake -D BUILD_opencv_python3=yes -D BUILD_opencv_python2=no -D PYTHON3_EXECUTABLE=/root/miniconda3/envs/yolov5/bin/python3.8 -D PYTHON3_INCLUDE_DIR=/root/miniconda3/envs/yolov5/include/python3.8 -D PYTHON3_LIBRARY=/root/miniconda3/envs/yolov5/lib/libpython3.8.so -D PYTHON3_NUMPY_INCLUDE_DIRS=/root/miniconda3/envs/yolov5/lib/python3.8/site-packages/numpy/core/include -D   PYTHON3_PACKAGES_PATH=/root/miniconda3/envs/yolov5/lib/python3.8/site-packages -D PYTHON3_DEFAULT_EXECUTABLE=/root/miniconda3/envs/yolov5/bin/python3.8 ..
    make -j$nproc
    make install

    上述cmake命令中的路径,请自行替换为实际conda虚拟环境或者系统环境的Python路径。

    编译安装过程中会刷新numpy的版本,该版本的numpy无法运行本项目。

    请在编译安装OpenCV后,将numpy回退到1.23.0版本。

    pip install numpy==1.23.0

模型训练

本文以YOLOv5模型为例介绍模型训练。

YOLOv5模型支持单机训练和多机多卡训练,请根据您的机器规格从下列训练方式中选择一种即可(如果您是初学者,推荐使用单机训练即可)。

您需要在模型根目录执行以下命令。

  • 单机训练
    • 单机单卡
      启动单卡训练。
      bash test/train_yolov5m_performance_1p.sh  //yolov5m 1p_performance
      bash test/train_yolov5s_performance_1p.sh  //yolov5s 1p_performance
      以下为单卡训练成功的示例日志:
      图1 单卡训练成功日志
    • 单机8卡

      启动8卡训练。

      bash test/train_yolov5s_performance_8p.sh  //yolov5s 8p_performance
      bash test/train_yolov5m_performance_8p.sh  //yolov5m 8p_performance
      bash test/train_yolov5s_full_8p.sh  //yolov5s 8p_accuracy
      bash test/train_yolov5m_full_8p.sh  //yolov5m 8p_accuracy
      bash test/train_yolov5m_full_8p_high_preci.sh  //yolov5m 8p_high_precision

    至此,恭喜您完成了一次单机模型训练。

    默认情况下进行2轮训练,可通过在训练脚本中设置epochs参数取值决定训练轮数。

    训练完成后,权重文件、模型训练精度和性能信息保存在当前路径下。

  • 多机多卡训练
    bash test/train_yolov5s_performance_cluster.sh --data_path=$coco_data --nnodes=机器数量 --node_rank=机器序号(0,1,2...) --master_addr=主机服务器地址 --master_port=主机服务器端口号
    bash test/train_yolov5m_performance_cluster.sh --data_path=$coco_data --nnodes=机器数量 --node_rank=机器序号(0,1,2...) --master_addr=主机服务器地址 --master_port=主机服务器端口号
    • $coco_data参数填写数据集路径。
    • 当前脚本默认为8卡,若使用自定义卡数,需要在上面命令后添加 --device_number(每台机器使用卡数)与 --head_rank(起始卡号)两个参数。例如分别为4、0时,代表使用0-3卡训练。

    至此,恭喜您完成了一次多机多卡模型训练。

    默认情况下进行2轮训练,可通过在训练脚本中设置epochs参数取值决定训练轮数。

    训练完成后,权重文件、模型训练精度和性能信息保存在当前路径下。

评估

本文以YOLOv5模型为例介绍评估。

评估只支持单机单卡。

您需要在模型根目录执行以下命令。

模型评估
bash test/train_yolov5m_eval.sh

以下为评估成功的示例日志:

图2 评估成功日志

至此,恭喜您完成了一次模型评估。

脚本参数说明

训练脚本公共参数:
--data                              //数据集路径
--workers                           //加载数据进程数     
--batch-size                        //训练批次大小
--epochs                            //重复训练次数
--weights                           //初始权重路径
--rect                              //矩形训练
--nosave                            //保存最后一个权重
--noval                             //验证最后一个epoch
--artifact_alias                    //数据集版本
--save-period                       //保存权重

更多介绍

关于YOLOv5模型的更多介绍,可参见YOLOv5使用教程