| import os,sys |
| sys.path.append("..") |
| from util.simple_image_loader import Image_dataset |
| from torch.utils.data import DataLoader |
| import timm |
| import torch |
| from tqdm import tqdm |
| import numpy as np |
| from transformers import DPTForDepthEstimation, DPTFeatureExtractor |
| import argparse |
| from util import misc |
| from datasets.taxonomy import synthetic_arkit_category_combined |
| parser=argparse.ArgumentParser() |
|
|
| parser.add_argument("--category",nargs="+",type=str) |
| parser.add_argument("--root_dir",type=str, default="../data") |
| parser.add_argument("--ckpt_path",type=str,default="../open_clip_pytorch_model.bin") |
| parser.add_argument("--batch_size",type=int,default=24) |
| parser.add_argument('--world_size', default=1, type=int, |
| help='number of distributed processes') |
| parser.add_argument('--local_rank', default=-1, type=int) |
| parser.add_argument('--dist_on_itp', action='store_true') |
| parser.add_argument('--dist_url', default='env://', |
| help='url used to set up distributed training') |
| args= parser.parse_args() |
| misc.init_distributed_mode(args) |
| category=args.category |
|
|
| |
| if args.category[0]=="all": |
| category=synthetic_arkit_category_combined["all"] |
| print("loading dataset") |
| dataset=Image_dataset(dataset_folder=args.root_dir,categories=category,n_px=224) |
| num_tasks = misc.get_world_size() |
| global_rank = misc.get_rank() |
| sampler = torch.utils.data.DistributedSampler( |
| dataset, num_replicas=num_tasks, rank=global_rank, |
| shuffle=False) |
|
|
| dataloader=DataLoader( |
| dataset, |
| sampler=sampler, |
| batch_size=args.batch_size, |
| num_workers=4, |
| pin_memory=True, |
| drop_last=False |
| ) |
| print("loading model") |
| VIT_MODEL = 'vit_huge_patch14_224_clip_laion2b' |
| model=timm.create_model(VIT_MODEL, pretrained=True,pretrained_cfg_overlay=dict(file=args.ckpt_path)) |
| model=model.eval().float().cuda() |
| save_dir=os.path.join(args.root_dir,"other_data") |
| for idx,data_batch in enumerate(dataloader): |
| if idx%50==0: |
| print("{}/{}".format(dataloader.__len__(),idx)) |
| images = data_batch["images"].cuda().float() |
| model_id= data_batch["model_id"] |
| image_name=data_batch["image_name"] |
| category=data_batch["category"] |
| with torch.no_grad(): |
| |
| output_features=model.forward_features(images) |
| |
| |
| for j in range(output_features.shape[0]): |
| save_folder=os.path.join(save_dir,category[j],"7_img_features",model_id[j]) |
| os.makedirs(save_folder,exist_ok=True) |
| save_path=os.path.join(save_folder,image_name[j]+".npz") |
| |
| np.savez_compressed(save_path,img_features=output_features[j].detach().cpu().numpy().astype(np.float32)) |
|
|
|
|
|
|
|
|