2021-07-08 Alphapose_TRT和YOLOV5_TRT部署

介绍

本篇文章将介绍如何把Yolov5和Alphapose进行Tensorrt部署

环境

Ubuntu18

Cuda11.1

Cudnn8.0

Tensorrt7.2.2

此三者安装可参考我的其他文章

Alphapose中的Fast pose的模型部署

git clone https://github.com/oreo-lp/AlphaPose_TRT.git
如果已经安装原版的Alphapose库需要pip卸载

按照readme的教程安装好alphapose库

git clone https://github.com/NVIDIA/trt-samples-for-hackathon-cn.git
把该库下的plugins文件夹和Makefile文件都放到AlphaPose_TRT的目录下



在AlphaPose_TRT目录下运行make

对build目录下的Makefile做修改,参考如下

请注意tensorrt的路径和GENCODE要根据情况而定

SHELL=/bin/bash
CUDA_PATH = /usr/local/cuda
TRT_PATH = /home/leo/TensorRT-7.2.2.3
GENCODE = -gencode arch=compute_61,code=sm_61

GCC = g++
NVCC = $(CUDA_PATH)/bin/nvcc
CCFLAGS = -g -DNDEBUG -std=c++17
INCLUDES := -I../include -isystem $(CUDA_PATH)/include -isystem $(TRT_PATH)/include
LDFLAGS := -L$(CUDA_PATH)/lib64 -L$(TRT_PATH)/lib -Wl,-rpath=$(CUDA_PATH)/lib64
LDFLAGS += -lnvinfer -lnvonnxparser -lcudart -ldl -lpthread -lcuda

OBJ_DIR = obj
OBJ = $(shell find $(OBJ_DIR) -name *.o 2>/dev/null)
DEP = $(OBJ:.o=.d)

SO = AddPlugin.so GridSamplerPlugin.so ScatterND.so GatherND.so OnehotPlugin.so

all: $(SO)

AddPlugin.so: $(addprefix $(OBJ_DIR)/, AddPlugin.o)
GridSamplerPlugin.so: $(addprefix $(OBJ_DIR)/, GridSamplerPlugin.o)
ScatterND.so: $(addprefix $(OBJ_DIR)/, ScatterND.o)
GatherND.so: $(addprefix $(OBJ_DIR)/, GatherND.o)

-include $(DEP)

clean:
	rm -rf $(BIN) $(SO) $(DEP) $(OBJ_DIR) out.trt int8_cache.*
	rm -rf ../python/resnet50.{onnx,trt} ../python/resnet50.dynamic_shape.{onnx,trt} ../python/{custom.onnx,custom_surgeon.onnx} ../python/out.trt ../python/__pycache__

VPATH = ../include:../samples:../plugins

$(OBJ_DIR)/%.o: %.cpp
	@mkdir -p $(@D)
	$(GCC) $(CCFLAGS) -fPIC -MD -MP $(INCLUDES) -o $@ -c $<

$(OBJ_DIR)/%.o: %.cu
	@mkdir -p $(@D)
	$(NVCC) $(CCFLAGS) -M -MT $@ $(INCLUDES) -o $(@:.o=.d) $<
	$(NVCC) $(CCFLAGS) $(INCLUDES) -Xcompiler -fPIC $(GENCODE) -o $@ -c $<

$(SO):
	$(GCC) $(CCFLAGS) -shared -o $@ $+ $(LDFLAGS)

$(BIN):
	$(GCC) $(CCFLAGS) -o $@ $+ $(LDFLAGS)

$(CUDA_BIN):
	$(NVCC) $(NVCCFLAGS) -o $@ $+ $(LDFLAGS)

在ALphapose_TRT的目录下make一下,会在build下生成plugins的链接库

参考README中FastPose(PyTorch) to engine 的部分进行模型转换操作,而YOLOV3的部分可以跳过,因为本文将使用YOLOV5s

YOLOV5的TRT部署

首先需要跑通YOLOV54.0的官方库

主要参考https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5下的教程进行部署

tensorrtx/yolov5目录下的CMakeLists.txt参考如下进行修改,注意Tensorrt路径的设置

cmake_minimum_required(VERSION 2.6)

project(yolov5)

add_definitions(-std=c++11)

option(CUDA_USE_STATIC_CUDA_RUNTIME OFF)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Debug)

find_package(CUDA REQUIRED)

include_directories(${PROJECT_SOURCE_DIR}/include)
# include and link dirs of cuda and tensorrt, you need adapt them if yours are different
# cuda
include_directories(/usr/local/cuda/include)
link_directories(/usr/local/cuda/lib64)
# tensorrt
include_directories(/usr/include/x86_64-linux-gnu/)
include_directories(/home/leo/TensorRT-7.2.2.3/include/)
link_directories(/usr/lib/x86_64-linux-gnu/)
link_directories(/home/leo/TensorRT-7.2.2.3/lib/)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Ofast -Wfatal-errors -D_MWAITXINTRIN_H_INCLUDED")

cuda_add_library(myplugins SHARED ${PROJECT_SOURCE_DIR}/yololayer.cu)
target_link_libraries(myplugins nvinfer cudart)

find_package(OpenCV)
include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(yolov5 ${PROJECT_SOURCE_DIR}/yolov5.cpp)
# add_executable(yolov5 ${PROJECT_SOURCE_DIR}/calibrator.cpp ${PROJECT_SOURCE_DIR}/yolov5.cpp)
target_link_libraries(yolov5 nvinfer)
target_link_libraries(yolov5 cudart)
target_link_libraries(yolov5 myplugins)
target_link_libraries(yolov5 ${OpenCV_LIBS})

add_definitions(-O2 -pthread)

联合YOLOV5和FASTPOSE进行运行

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值