北风吹来个毛 2022-11-28 16:32 采纳率: 28.6%
浏览 19
已结题

有什么方法可以减少pytorch的permute函数运行的时间?

我在使用pytorch的C++接口的张量转置函数permute时,发现这个函数在转换到CPU时调用的时间太多,大概是10ms,我现在想把这个速度提升到5毫秒左右,我应该怎么做?
代码如下:


#include<torch/torch.h>
#include<torch/script.h>
#include<opencv2/opencv.hpp>

#include<iostream>

using namespace std;

void main(){

    cv::Mat image = cv::imread("C:\\Users\\Desktop\\1.jpg");  // filePaths[0]
    cv::resize(image, image, cv::Size(256, 256));

    torch::Tensor x = torch::from_blob(image.data, { 1,3,256,256 }, torch::kByte); // [1, 3, 256, 256]

    try
    {
        x = x.squeeze(0);
        double start = clock();
        torch::Tensor argmax_out = x.permute({ 1, 2, 0 }).to(torch::kCPU).detach().div(255.0).to(torch::kFloat32);   // 3
        
        cv::Mat resultImg(256, 256, CV_32FC3, argmax_out.data_ptr<float>());
        double end = clock();
        cout << "时间: " << double(end - start) << endl;
        cv::imshow("resultImg", resultImg);
    }
    catch (const c10::Error & e)
    {
        cout << e.msg() << endl;
    }

    cv::waitKey(0);
    system("pause");
}

以下是程序输出:

img

  • 写回答

2条回答 默认 最新

  • YF云飞 Unity领域新星创作者 2022-11-28 16:50
    关注

    我认为唯一主要的加速将发生于并行。如果您因为cpu受限问题,那么利用多核是至关重要的。试着让每一行通过不同的(线程/进程)。当然,这会引起更多的问题,例如数据是否需要按照输入文件中的相同顺序排列。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日
  • 修改了问题 11月28日
  • 创建了问题 11月28日

悬赏问题

  • ¥20 机器学习或深度学习问题?困扰了我一个世纪,晚来天欲雪,能饮一杯无?
  • ¥15 c语言数据结构高铁订票系统
  • ¥15 关于wkernell.PDB加载的问题,如何解决?(语言-c#|开发工具-vscode)
  • ¥15 (标签-STM32|关键词-智能小车)
  • ¥20 关于#stm32#的问题,请各位专家解答!
  • ¥15 (标签-python)
  • ¥20 搭建awx,试了很多版本都有错
  • ¥15 java corba的客户端该如何指定使用本地某个固定IP去连接服务端?
  • ¥15 activiti工作流问题,求解答
  • ¥15 有人写过RPA后台管理系统么?