ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • jpg make_grid.py
    카테고리 없음 2022. 8. 3. 03:06

    한장씩 저장 -> torchvision.save_image가 더 편함

    from torchvision import transforms
    import torchvision
    from torchvision.utils import save_image
    
    for index, (data, label) in tqdm(enumerate(dataloader), total=len(dataloader)): 
        #cuda 올리기
        data = data.to('cuda')
        
        ################
        #case 1. 좌상단  
        ori = data.detach()
        parted = data.detach()[:, :, :128, :128]
        ori[:, :, :128, 128:] = parted
        #################
        
        for i in range(bs):
            idx = bs*index + i 
            filename = f'{str(idx).zfill(5)}.png'
            save_image(ori[i], os.path.join(out_dir, filename))

     

    plt로 학습 중 1장 보기

    plt.close()
    plt.imshow(ori[0].permute(1, 2, 0).detach().cpu().numpy())
    plt.show()
    plt.savefig('./d.png')

     

     

     

    make_grid

    from torchvision import utils
    import torch
    from natsort import natsorted
    import os
    from PIL import Image
    from torchvision import transforms
    import matplotlib.pyplot as plt
    
    path = "../../../dataset/dongkyun/dk_dataset/afhq_dataset/experiment_afhq/fsmr_dog_adained"
    out_dir = os.path.join(path[:-len(path.split("/")[-1])], "grid")
    
    #import pdb; pdb.set_trace()
    if not os.path.isdir(out_dir):
        os.mkdir(out_dir)
        
    
    a = natsorted(os.listdir(path))
    transform = transforms.ToTensor()
    output_tensor_array = torch.zeros(16, 3, 256, 256)
    
    for index, img_path in enumerate(natsorted(os.listdir(path))[:16]):
        img = Image.open(os.path.join(path, img_path))
        img = transform(img)
        img.to('cuda')
        output_tensor_array[index] = img
        
    
    grid = utils.make_grid(output_tensor_array, nrow = 4)
    
    
    plt.imshow(grid.permute(1, 2, 0))
    plt.axis('off')
    plt.savefig(os.path.join(out_dir,path.split("/")[-1]), dpi = 600)

     

    import numpy as np
    import os
    import torch
    from PIL import Image
    from torchvision import transforms
    from torchvision import utils
    import matplotlib.pyplot as plt
    
    name = "stylegan"
    grid_img_num = 16
    
    path = "../../dataset/dongkyun/dk_dataset/afhq_dataset/experiment_afhq/fsmr_dog_adained_all/"
    list_a = np.load('fsmr_npy/vit_fsmr.npy')
    list_b = np.load('fsmr_npy/resnet_fsmr.npy')
    #list_b = np.load('fsmr_npy/vit_stylegan.npy')
    
    
    sorted_dog = np.sort(list_a[:,0]-list_b[:,0])
    sort_index_dog = np.argsort(list_a[:,0]-list_b[:,0])
    
    dog_out_dir = f"fsmr_npy/{name}_-predicted-dog" #fsmr 은 dog 이라 예상
    cat_out_dir = f"fsmr_npy/{name}_-predicted-cat" #fsmr 은 cat 이라 예상
    
    transform = transforms.ToTensor()
    
    if not os.path.isdir(dog_out_dir):
        os.mkdir(dog_out_dir)
        os.mkdir(cat_out_dir)
        
    
    output_tensor_array = torch.zeros(grid_img_num, 3, 256, 256)
    plt.close()
    for index, data in enumerate(range(grid_img_num)):
        img = Image.open(os.path.join(path, f"{sort_index_dog[index]}.png"))
        img = transform(img)
        img.to('cuda')
        output_tensor_array[index] = img
    
    grid = utils.make_grid(output_tensor_array, nrow = 4)
    
                
    
    plt.imshow(grid.permute(1, 2, 0))
    for x in range(4):
        for y in range(4):
            plt.text(200+ 256*x, 225+ 256*y, f"img{x+4*y}", ha="center", va="center", size=10)
            
    plt.axis('off')
    plt.savefig(os.path.join(dog_out_dir,"dog"), dpi = 600)
    
    plt.close()
    plt.bar(range(grid_img_num), sorted_dog[:16])
    plt.title("vit predicted this image as cat , resnet did dog")
    plt.savefig(os.path.join(dog_out_dir,"dog_bar"), dpi = 600)

     

Designed by Tistory.