weixin_37878092 2022-03-25 16:35
浏览 373
已结题

关于使用libtorch实现Yolov5的NMS算法比pytorch慢的问题


python代码片段,红色部分的切片操作:
def non_max_suppression(prediction, conf_thres=0.25, iou_thres=0.45,         classes=None, agnostic=False, multi_label=False,
                        labels=(), max_det=300):
    
    nc = prediction.shape[2] - 5  # number of classes
    xc = prediction[..., 4] > conf_thres  # candidates
    
    output = [torch.zeros((0, 6), device=prediction.device)] * prediction.shape[0]
    print('-----------------------------------------')
    for xi, x in enumerate(prediction):  # image index, image inference
        
        begin_time = datetime.datetime.now()
        x = x[xc[xi]]  # confidence
        end_time = datetime.datetime.now()
        d_time = end_time - begin_time
        print(str(xi) + ': ' + str(d_time.microseconds))
其中prediction的形状是torch.Size([16, 15120, 85])
 x = x[xc[xi]]这一句在循环中的执行时间如下,单位是微秒:

img

C++ Libtorch代码片段:

img


其中torch::masked_select一行对应于Pytorch版本中的x = x[xc[xi]],执行的时间如下,单位是毫秒:

img


第一次切片操作Libtorch处理时间是Python版本的一倍还多。

第一次forward的时间也比pytorch长的多,请教有没有人解决过这个问题?
我现在使用的libtorch相关的lib和dll都是从python那边拷贝过来的。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月2日
    • 修改了问题 3月25日
    • 修改了问题 3月25日
    • 修改了问题 3月25日
    • 展开全部

    悬赏问题

    • ¥15 (标签-matlab)
    • ¥200 基于同花顺supermind的量化策略脚本编辑
    • ¥20 Html备忘录页面制作
    • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
    • ¥20 数学建模来解决我这个问题
    • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
    • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
    • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
    • ¥30 NIRfast软件使用指导
    • ¥20 matlab仿真问题,求功率谱密度