文件最后提交记录最后更新时间
!1166 [北京科技大学][高效贡献][Pytorch离线推理][Cascade R-CNN]-初次提交 * 添加Cascade RCNN R101 310P修改 * 合并patch,一次性修改代码;修改readme相关内容和语法错误;修改license;去除调试代码; * 修改后处理脚本中的错误 * 添加license文件头 * 添加补丁,使用patch修改代码;修改readme相关内容 * 修改后处理脚本以适应ais_infer工具使用;修改readme中精度和性能内容 * 添加Cascade R-CNN 710修改 * init * 添加Cascade R-CNN 710修改 3 年前
!6851 [Clean Code] 修改芯片型号描述 Merge pull request !6851 from 施康/master 1 年前
!2901 [众智][PyTorch离线推理][cv]Cascade-RCNN-Resnet50-FPN模型代码和资料整改 * . * . 3 年前
!2901 [众智][PyTorch离线推理][cv]Cascade-RCNN-Resnet50-FPN模型代码和资料整改 * . * . 3 年前
!1166 [北京科技大学][高效贡献][Pytorch离线推理][Cascade R-CNN]-初次提交 * 添加Cascade RCNN R101 310P修改 * 合并patch,一次性修改代码;修改readme相关内容和语法错误;修改license;去除调试代码; * 修改后处理脚本中的错误 * 添加license文件头 * 添加补丁,使用patch修改代码;修改readme相关内容 * 修改后处理脚本以适应ais_infer工具使用;修改readme中精度和性能内容 * 添加Cascade R-CNN 710修改 * init * 添加Cascade R-CNN 710修改 3 年前
!1166 [北京科技大学][高效贡献][Pytorch离线推理][Cascade R-CNN]-初次提交 * 添加Cascade RCNN R101 310P修改 * 合并patch,一次性修改代码;修改readme相关内容和语法错误;修改license;去除调试代码; * 修改后处理脚本中的错误 * 添加license文件头 * 添加补丁,使用patch修改代码;修改readme相关内容 * 修改后处理脚本以适应ais_infer工具使用;修改readme中精度和性能内容 * 添加Cascade R-CNN 710修改 * init * 添加Cascade R-CNN 710修改 3 年前
!2901 [众智][PyTorch离线推理][cv]Cascade-RCNN-Resnet50-FPN模型代码和资料整改 * . * . 3 年前
!1166 [北京科技大学][高效贡献][Pytorch离线推理][Cascade R-CNN]-初次提交 * 添加Cascade RCNN R101 310P修改 * 合并patch,一次性修改代码;修改readme相关内容和语法错误;修改license;去除调试代码; * 修改后处理脚本中的错误 * 添加license文件头 * 添加补丁,使用patch修改代码;修改readme相关内容 * 修改后处理脚本以适应ais_infer工具使用;修改readme中精度和性能内容 * 添加Cascade R-CNN 710修改 * init * 添加Cascade R-CNN 710修改 3 年前
README.md

Cascade-RCNN-Resnet50-FPN模型-推理指导

概述

Cascade-RCNN_DCN在之前的cascade-RCNN的基础上,采用形变卷积算子,使整体网络精度提升。

  • 参考实现:

    url=https://github.com/open-mmlab/mmdetection
    commit_id=a21eb25535f31634cef332b09fc27d28956fb24b
    code_path=contrib/cv/detection/Cascade-RCNN-Resnet50-FPN
    

输入输出数据

  • 输入数据

    输入数据 数据类型 大小 数据排布格式
    input RGB_FP32 batchsize x 3 x 1216 x 1216 NCHW
  • 输出数据

    输出数据 数据类型 大小 数据排布格式
    boxes FLOAT32 100 x 5 ND
    labels INT64 100 x 1 ND

推理环境准备

  • 该模型需要以下插件与驱动

    表 1 版本配套表

    配套 版本 环境准备指导
    固件与驱动 1.0.17(NPU驱动固件版本为6.0.RC1) Pytorch框架推理环境准备
    CANN 6.0.RC1 -
    Python 3.7.5 -

快速上手

获取源码

  1. 安装依赖。

    pip install -r requirements.txt     
    
  2. 获取源码。

    1. 安装开源仓
    git clone --branch v2.8.0 https://github.com/open-mmlab/mmdetection
    cd mmdetection
    git reset --hard a21eb25535f31634cef332b09fc27d28956fb24b
    pip install -v -e .
    
    
    1. 修改模型
    patch -p1 < ../Cascade_RCNN.patch
    cd ..
    
  3. 安装mmcv-full,mmpycocotools

    pip install openmim
    mim install mmcv-full==1.2.5
    mim install mmpycocotools==12.0.3
    

准备数据集

  1. 获取原始数据集。 本模型已在coco 2017数据集上验证过精度。推理数据集采用coco_val_2017,请用户自行获取coco_val_2017数据集。将instances_val2017.json文件和val2017文件夹按照如下目录结构上传并解压数据集到服务器任意目录。 最终,数据的目录结构如下:

    ├── coco
        ├── val2017   
        ├── annotations
             ├──instances_val2017.json
          
    
    
  2. 数据预处理,将原始数据集转换为模型输入的数据。

    执行cascade_rcnn_r50_fpn_preprocess.py脚本,完成预处理。

    python cascade_rcnn_r50_fpn_preprocess.py --image_folder_path ./coco/val2017 --bin_folder_path ./val2017_bin
    
    • 参数说明:
      • --image_folder_path:数据集路径。
      • --bin_folder_path:预处理后的数据文件的相对路径。

    运行成功后,会在当前目录下生成二进制文件。

模型推理

  1. 模型转换。

    使用PyTorch将模型权重文件.pth转换为.onnx文件,再使用ATC工具将.onnx文件转为离线推理模型文件.om文件。

    1. 获取权重文件。

      获取地址

    2. 导出onnx文件。

      1. 使用mmdetection/tools/pytorch2onnx.py导出onnx文件。

        python mmdetection/tools/pytorch2onnx.py mmdetection/configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_coco.py 
        ./cascade_rcnn_r50_fpn_1x_coco_20200316-3dc56deb.pth --output-file=cascade_rcnn_r50_fpn.onnx --shape 1216 
        
        
        • 参数说明:
          • --shape : 模型大小
          • --output-file: 输出onnx模型

        获得cascade_rcnn_r50_fpn.onnx文件,模型只支持bs1。

    3. 使用ATC工具将ONNX模型转OM模型。

      1. 配置环境变量。

         source /usr/local/Ascend/ascend-toolkit/set_env.sh
        
      2. 执行命令查看芯片名称(${chip_name})。

        npu-smi info
        #该设备芯片名为Ascend310P3 (自行替换)
        回显如下:
        +-------------------+-----------------+------------------------------------------------------+
        | NPU     Name      | Health          | Power(W)     Temp(C)           Hugepages-Usage(page) |
        | Chip    Device    | Bus-Id          | AICore(%)    Memory-Usage(MB)                        |
        +===================+=================+======================================================+
        | 0       310P3     | OK              | 15.8         42                0    / 0              |
        | 0       0         | 0000:82:00.0    | 0            1074 / 21534                            |
        +===================+=================+======================================================+
        | 1       310P3     | OK              | 15.4         43                0    / 0              |
        | 0       1         | 0000:89:00.0    | 0            1070 / 21534                            |
        +===================+=================+======================================================+
        
      3. 执行ATC命令。

           atc --framework=5\ 
                --model=./cascade_rcnn_r50_fpn.onnx\ 
                --output=./cascade_rcnn_r50_fpn\ 
                --input_format=NCHW\ 
                --input_shape="input:1,3,1216,1216"\ 
                --log=info\
                --out_nodes="Concat_828:0;Reshape_830:0"\
                --soc_version=Ascend${ChipName}
        
        • 参数说明:

          • --model:为ONNX模型文件。
          • --framework:5代表ONNX模型。
          • --output:输出的OM模型。
          • --input_format:输入数据的格式。
          • --input_shape:输入数据的shape。
          • --log:日志级别。
          • --soc_version:处理器型号。
          • --out_nodes: 输出节点

      运行成功后生成cascade_rcnn_r50_fpn.om模型文件。

  2. 开始推理验证。

    1. 安装ais_bench推理工具。

      请访问ais_bench推理工具代码仓,根据readme文档进行工具安装。

    2. 执行推理。

    python -m ais_bench --model ./cascade_rcnn_r50_fpn.om\  
                                  --input ./val2017_bin/\ 
                                  --output ./result\ 
                                  --batchsize 1\
                                  --outfmt BIN\
                                  --output_dirname ais-result
    
    • 参数说明:

      • --model: OM模型路径。
      • --input: 存放预处理bin文件的目录路径
      • --output: 存放推理结果的目录路径
      • --batchsize:每次输入模型的样本数
      • --outfmt: 推理结果数据的格式
      • --output_dirname: 输出结果子目录 推理后的输出默认在当前目录result下。
    1. 精度验证。

      运行get_info.py,生成图片数据文件

    python get_info.py jpg ./coco/val2017 coco2017_jpg.info
    
    • 参数说明:

      • --第一个参数:原始数据集
      • --第二个参数:图片数据信息

      调用“cascade_rcnn_r50_fpn_postprocess.py”评测模型的精度。

    python cascade_rcnn_r50_fpn_postprocess.py --bin_data_path=result --prob_thres=0.05 --ifShowDetObj --det_results_path=detection-results --test_annotation=coco2017_jpg.info  
    
    • 参数说明:

      • --bin_data_path: 推理结果。
      • --test_annotatio: 原始图片信息文件。
      • --det_results_path: 后处理输出结果。
      • --ifShowDetObj:是否将box画在图上显示。
      • --prob_thres: 目标框的置信度阈值

      评测结果的mAP值需要使用官方的pycocotools工具,首先将后处理输出的txt文件转化为coco数据集评测精度的标准json格式。

    python txt_to_json.py --npu_txt_path detection-results --json_output_file coco_detection_aisInfer_result
    
    • 参数说明:

      • --npu_txt_path: 后处理输出结果
      • --json_output_file: 输出json

      调用coco_eval.py脚本,输出推理结果的详细评测报告。

    python coco_eval.py --detection_result coco_detection_aisInfer_result.json --ground_truth ./coco/annotations/instances_val2017.json
    
    • 参数说明:

      • --detection_result: 输出json
      • --ground_truth: 标签
    1. 性能验证。

      可使用ais_bench推理工具的纯推理模式验证不同batch_size的om模型的性能,参考命令如下:

    python -m ais_bench --model ./cascade_rcnn_r50_fpn.om --loop 100 --batchsize 1
    
    • 参数说明:

      • --model: om模型
      • --batchsize: 每次输入模型样本数
      • --loop: 循环次数

模型推理性能&精度

调用ACL接口推理计算,性能参考下列数据。

  1. 精度对比

    Model batchsize Accuracy
    Cascade_rcnn_r50 1 bbox_mAP = 0.405
  2. 性能对比

    batchsize 300I PRO 性能
    1 6.5