/AiInfer

Primary LanguageC++

最新消息

该项目已废弃,最新项目地址:nndeploy代替

项目介绍

这是一个c++版的AI推理库,目前只支持tensorrt模型的推理。为了对相关任务进行加速,任务的前后处理大多是由cuda编写,项目中会有cuda版本标识。

新增项目消息:

项目目录介绍

AiInfer
  |--application # 模型推理应用的实现,你自己的模型推理可以在该目录下实现
    |--yolov8_det_app # 举例:实现的一个yolov8检测
    |--xxxx
  |--utils # 工具目录
    |--backend # 这里实现backend的推理类
    |--common # 里面放着一些常用的工具类
      |--arg_parsing.hpp # 命令行解析类,类似python的argparse
      |--cuda_utils.hpp # 里面放着一些cuda常用的工具函数
      |--cv_cpp_utils.hpp # 里面放着一些cv相关的工具函数
      |--memory.hpp # 有关cpu、gpu内存申请和释放的工具类
      |--model_info.hpp # 有关模型的前后处理的常用参数定义,例如均值方差、nms阈值等
      |--utils.hpp # cpp中常用到的工具函数,计时、mkdir等
    |--post_process # 后处理实现目录,cuda后处理加速,如果你有自定义的后处理也可以写在这里
    |--pre_process # 前处理实现目录,cuda前处理加速,如果你有自定义的前处理也可以写在这里
    |--tracker # 这个是目标检测追踪库的实现,已解耦,不想用可直接删除
  |--workspaces # 工作目录,里面可以放一些测试图片/视频、模型,然后在main.cpp中直接使用相对路径
  |--mains # 这里面是main.cpp合集,这里采用每个app单独对应一个main文件,便于理解,写一起太冗余

如何开始

1. Linux & Windows下环境配置
  • linux推荐使用VSCode,windows推荐使用visual studio 2019
  • 安装显卡驱动、cuda、cudnn、opencv、tensorrt-->安装教程
  • 建议先从一个检测的例子入手,熟悉项目架构,例如:application/yolov8_app/yolov8_det_cuda
2. onnx转trt【fp16+int8】
  • onnx的导出建议是动态batch,这里举例pytorch模型的导出,如果你需要动态宽高,该项目也支持~
torch.onnx._export(
        model,
        dummy_input, # 例如torch.randn(1,3,640,640)
        save_onnx_path,
        input_names=["image"],
        output_names=["output"],
        dynamic_axes={'image': {0: 'batch'},
                      'output': {0: 'batch'}},
        opset_version=args.opset, # 一般11或12更加适用于各种芯片或板子
    )
  • 将onnx精简[可选]
# 注意,如果你已经在代码中运行过onnxsim了,那就略过这步
pip install onnxsim # 安装onnxsim库,可以直接将复杂的onnx转为简单的onnx模型,且不改变其推理精度
onnxsim input_onnx_model output_onnx_model # 通过该命令行你会得到一个去除冗余算子的onnx模型
  • onnx的fp16量化,转tensorrt,建议动态batch
# 前提,保证导出的onnx是动态batch,也就是输入shape是[-1,3,640,640]。注:640只是举例,输入你的宽高即可
trtexec --onnx=xxx_dynamic.onnx \
        --workspace=4098 \
        --minShapes=image:1x3x640x640 \
        --maxShapes=image:16x3x640x640 \
        --optShapes=image:4x3x640x640 \
        --saveEngine=xxx.engine \
        --avgRuns=100 \
        --fp16
3. 项目编译和运行
  • 配置CMakeLists中的计算能力为你的显卡对应值
  • 在CMakeLists.txt中配置你本机安装的tensorrt路径,和add_executable中你要使用的main.cpp文件
  • CMake:
    • mkdir build && cd build
    • cmake ..
    • make -j8
    • cd ..
  • 查看项目需要输入的命令
cd workspaces
./infer -h
  • --model_path, -f: 要输如模型的路径,必选
  • --image_path, -i: 要输出的测试图片,必选
  • --batch_size, -b: 要使用的batch_size[>=1],可选,默认=1
  • --score_thr, -s: 一般指后处理要筛选的得分阈值,可选,默认=0.5f
  • --device_id, -g: 多显卡的显卡id,可选,默认=0
  • --loop_count, -c: 要推理的次数,一般用于计时,可选,默认=10
  • --warmup_runs, -w: 模型推理的预热次数(激活cuda核),可选,默认=2
  • --output_dir, -o: 要存储结果的目录,可选,默认=''
  • --help, -h: 使用-h来查看都有哪些命令
# 然后运行按照你自己的要求运行即可,例如:
./infer -f xxx.engine -i xxx.jpg -b 10 -c 10 -o cuda_res # 使用cuda的前后处理,结果保存在cuda_res文件夹下
4. 制作成c++的sdk,交付项目
cd build
make install
# 然后你会在workspaces下看到一个install文件夹,这里面就是你要交付的include文件和so库

感谢相关项目