triton 部署yolov5模型

一、安装triton

0.安装docker和nvidia-docker

1. 安装以下网站获取Nvidia授权账号密码

Nvidia授权

2. 安装triton

docker login nvcr.io

Username: XXXXXXX
Password: XXXXXXX

sudo docker pull nvcr.io/nvidia/tritonserver:22.04-py3

二、准备yolov5模型

参考 yolov5训练自己的数据集

三、启动triton服务

1.搭建模型目录

/home/triton/model_repository  # model-repository-path 可自行修改 
└── model_test  # your_model_name  可自行修改
      ├── 1  # 固定路径,不可修改
      │   └── model.onnx    # 默认onnx模型名

2.启动服务

sudo docker run -d --gpus=1 --rm -p8000:8000 -p8001:8001 -p8002:8002 -v /home/triton/model_repository:/models nvcr.io/nvidia/tritonserver:22.04-py3 tritonserver --model-repository=/models --strict-model-config=false

4. 查看config,登录网址

http://ip:8000/v2/models/model_test/config

三、客户端调用

1.需要tritonclient模块,参考代码

import numpy as np
import tritonclient.grpc as grpcclient
import cv2 as cv

color_list = [(255, 0, 0), (0, 255, 0)]

class MY_data:
    def __init__(self, rect_list, name_list, img) -> None:
        self.rect_list = rect_list
        self.name_list = name_list
        self.img = img

    def show(self):
        for i in range(len(self.rect_list)):
            cv.rectangle(self.img, self.rect_list[i], color_list[0] if self.name_list[i] == 'people' else color_list[1])
        cv.imshow("test", self.img)
        cv.waitKey(0)
        cv.imwrite('test.jpg', self.img)

if __name__ == "__main__":

    triton_client =  grpcclient.InferenceServerClient(
        url='XXX.XXX.XXX.XXX:8001',
        verbose=False,
        ssl=False,
        root_certificates=None,
        private_key=None,
        certificate_chain=None)
    # 测试图片    
    src_img = cv.imread('3.jpg')

    max_side = src_img.shape[1] if src_img.shape[1] >src_img.shape[0] else src_img.shape[0]

    dst_img = np.zeros([max_side, max_side, 3], dtype=np.uint8)
    dst_img[0:src_img.shape[0], 0:src_img.shape[1]] = src_img.copy()


    x_factor = dst_img.shape[1]/640
    y_factor = dst_img.shape[0]/640

    img = cv.resize(dst_img, [640, 640])
    
    img = img /255.
    inputs = []
    inputs.append(grpcclient.InferInput('images', [3, 640, 640], "FP32"))
    img = img.astype(np.float32).transpose((2, 0, 1))

    # 增加维度,编程 1X3X640X640
    # img = np.expand_dims(img,axis=0)

    inputs[0].set_data_from_numpy(img)
    outputs = []
    outputs.append(grpcclient.InferRequestedOutput('output'))

    results = triton_client.infer(model_name='yolov5', inputs=inputs, outputs=outputs,compression_algorithm=None)

    predictions = results.as_numpy("output")[0]
    # print(predictions[0])

    rows = 25200
    dimensions = 7

    scoreThreshold = 0.2
    nmsThreshold = 0.4
    confThreshold = 0.4

    class_name = ['label1', 'label2']

    confidence_list = []
    class_list = []
    rect_list = []

    for i in range(rows):
        res = predictions[i]
        confidence = res[4]
        
        if confidence > confThreshold:
            print(confidence)
            max = -1
            max_index = -1
            for j in range(len(class_name)):
                if res[5 + j] > max:
                    max = res[5 + j]
                    max_index = j
            confidence_list.append(confidence)
            class_list.append(class_name[max_index])
            x = res[0]
            y = res[1]
            w = res[2]
            h = res[3]
            left = int((x - w/2)*x_factor)
            top = int((y - h/2)*y_factor)
            width = int(w*x_factor)
            height = int(h*y_factor)
            rect_list.append([left, top, width, height])
    # print(rect_list)
    nms_result = cv.dnn.NMSBoxes(np.array(rect_list), np.array(confidence_list), scoreThreshold, nmsThreshold)  
    print(nms_result)  
    r_l = []
    n_l = []
    for k in range(len(nms_result)):
        id = nms_result[k]
        rect = rect_list[id]
        r_l.append(rect)
        name = class_list[id]
        n_l.append(name)
    # print(r_l)
    my_data = MY_data(r_l, n_l, src_img)
    my_data.show()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值