北风吹来个毛 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日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么