计算机视觉 图像处理 代码运行速度异常
  • 板块学术版
  • 楼主lans
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/14 00:06
  • 上次更新2024/8/14 10:33:10
查看原帖
计算机视觉 图像处理 代码运行速度异常
871481
lans楼主2024/8/14 00:06

我在把一张(37263, 32763)的图片经过unfold()生成滑窗后,得到(238, 3, 4096, 4096)的张量windows,把windows维度变为(B, H, W, C)后无论是使用np.array(windows)还是windows.numpy()把windows转换为numpy,windows_np, 我在后续操作中令window = windows_np[i, :, :, :], window = (window * 255).astypee(uint8)消耗了150s左右,但经测试对和windows_np相同形状的数组才需要这么多时间(也就是我只想对一个窗口做这个操作却对所有窗口做了一遍),或者window = windows_np[i, :, :, :].copy()但copy()竟然花了120s左右,显然是复制了所有的窗口。虽然我能在外面先把所有窗口处理好,但我不理解为什么会这样。


import os
os.environ["OPENCV_IO_MAX_IMAGE_PIXELS"] = pow(2, 40).__str__()
import cv2
import torch
import torchvision.transforms as transforms
import numpy as np
import time
import gc


if __name__ == '__main__':
    # 自定义滑动窗口的大小
    file1_name = ['PWYL', 'PWYN-C ', 'PWYN-S', 'PWZF-C', 'PWZF-S']
    file2_name = ['CS', 'SS']
    for file1 in file1_name:
        for file2 in file2_name:
            image = cv2.imread(f'{file1}/{file2}/{file1}-{file2}.jpg')
            transform = transforms.Compose([transforms.ToTensor()])
            data = transform(image)
            (winW, winH) = (4096, 4096)
            stepSize = (2048, 2048)
            windows = torch.nn.functional.unfold(data.unsqueeze(0), kernel_size=(winW, winH), stride=stepSize)
            num_windows = windows.shape[2]
            channels = 3
            windows_np = windows.permute(0, 2, 1).reshape(num_windows, channels, winW, winH).permute(0, 2, 3, 1).numpy()
            out_dir = f'dataset/{file1}/{file2}'
            if not os.path.exists(out_dir):
                os.makedirs(out_dir, exist_ok=True)
            for i in range(num_windows):
                s1 = time.perf_counter()
                window = windows_np[i, :, :, :]
                e1 = time.perf_counter()
                print(f'time2: {e1 - s1}')
                s2 = time.perf_counter()
                window_uint8 = (window * 255).astype(np.uint8)
                e2 = time.perf_counter()
                print(f'time3: {e2 - s2}')
                np.save( f'{out_dir}/{file1}_{file2}_{i}.npy', window_uint8)
                exit()
            del image
            del windows_np
            gc.collect()
2024/8/14 00:06
加载中...