precompute_targets.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import torchvision.models as models
  2. from dataset import DataManager
  3. from PIL import Image
  4. import torch
  5. import glob
  6. import numpy as np
  7. import time
  8. import config as cfg
  9. manager=DataManager(cfg.IMGPATH_FILE, cfg.SOFT_TARGET_PATH, [224,224])
  10. device=torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')
  11. print('Using device {}'.format(torch.cuda.get_device_name(device)))
  12. BATCH_SIZE=256
  13. results_152=np.zeros((n_images, 1000), dtype=np.float32)
  14. resnet152 = models.resnet152(pretrained=True, progress=True).to(device).eval()
  15. transform = T.Compose([T.Resize(256), T.CenterCrop(224), T.ToTensor(), T.Normalize(mean=[0.485, 0.456, 0.406],
  16. std=[0.229, 0.224, 0.225])])
  17. begin=time.time()
  18. for start in range(0,n_images, BATCH_SIZE):
  19. end= min(start+BATCH_SIZE, n_images)
  20. batch_names=image_paths[start:end]
  21. batch_images=[Image.open(p).convert('RGB') for p in batch_names]
  22. with torch.no_grad():
  23. tensor_images=[torch.unsqueeze(transform(img),0) for img in batch_images]
  24. in_tensor=torch.cat(tensor_images).to(device)
  25. out_tensor_152=resnet152(in_tensor)
  26. out_numpy_152=out_tensor_152.cpu().detach().numpy()
  27. results_152[start:end,:]=out_numpy_152
  28. pg=100*end/n_images
  29. sys.stdout.write('\r Progress= {:.2f} %'.format(pg))
  30. np.save(f'resnet152_results.npy', results_152)
  31. end=time.time()
  32. print('Total time taken for inference = {:.2f}'.format(end-begin))