当前位置:   article > 正文

YOLOV4ToTensorRT引擎 python实现记录

YOLOV4ToTensorRT引擎 python实现记录

YOLOV4ToTensorRT引擎 python实现记录

问题:yolov4权重导出成onnx,生成tensorRT引擎失败
原因:yolov4中存网络中使用临近差值上采样在tensorRT中不支持。
解决方案:

  1. 修改yolov4网络模型中的上采样,使用下面的代码代替网络中的torch.nn.Upsample
import torch
import torch.nn as nn
import torch.nn.functional as F

class Upsample(nn.Module):
    def __init__(self, size, scale, mode, align_corners=None):
        super(Upsample, self).__init__()
        self.size = size
        self.scale = scale
        self.mode = mode
        self.align_corners = align_corners

    def forward(self, x):
        sh = torch.tensor(x.shape)
        return F.interpolate(x, size=(int(sh[2]*self.scale), int(sh[3]*self.scale)), mode=self.mode, align_corners=self.align_corners)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  1. 将权重导出成onnx时使用修改后的网络,下面创建的YoloBody网络为替换了上采样的网络
import numpy as np
from PIL import Image
import torch.onnx
from nets.yolo4_tiny import YoloBody
from utils.utils import letterbox_image

def get_classes(classes_path):
    '''loads the classes'''
    with open(classes_path) as f:
        class_names = f.readlines()
    class_names = [c.strip() for c in class_names]
    return class_na
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/578551
推荐阅读
相关标签
  

闽ICP备14008679号