def extract_imgs_feat(): encoder = Encoder(opt.resnet101_file) encoder.to(opt.device) encoder.eval() imgs = os.listdir(opt.imgs_dir) imgs.sort() if not os.path.exists(opt.out_feats_dir): os.makedirs(opt.out_feats_dir) with h5py.File(os.path.join(opt.out_feats_dir, '%s_fc.h5' % opt.dataset_name)) as file_fc, \ h5py.File(os.path.join(opt.out_feats_dir, '%s_att.h5' % opt.dataset_name)) as file_att: try: for img_nm in tqdm.tqdm(imgs, ncols=100): img = skimage.io.imread(os.path.join(opt.imgs_dir, img_nm)) with torch.no_grad(): img = encoder.preprocess(img) img = img.to(opt.device) img_fc, img_att = encoder(img) file_fc.create_dataset(img_nm, data=img_fc.cpu().float().numpy()) file_att.create_dataset(img_nm, data=img_att.cpu().float().numpy()) except BaseException as e: file_fc.close() file_att.close() print( '--------------------------------------------------------------------' ) raise e
from opts import parse_opt from models.decoder import Decoder from models.encoder import Encoder opt = parse_opt() assert opt.test_model, 'please input test_model' assert opt.image_file, 'please input image_file' encoder = Encoder(opt.resnet101_file) encoder.to(opt.device) encoder.eval() img = skimage.io.imread(opt.image_file) with torch.no_grad(): img = encoder.preprocess(img) img = img.to(opt.device) fc_feat, att_feat = encoder(img) print("====> loading checkpoint '{}'".format(opt.test_model)) chkpoint = torch.load(opt.test_model, map_location=lambda s, l: s) decoder = Decoder(chkpoint['idx2word'], chkpoint['settings']) decoder.load_state_dict(chkpoint['model']) print("====> loaded checkpoint '{}', epoch: {}, train_mode: {}".format( opt.test_model, chkpoint['epoch'], chkpoint['train_mode'])) decoder.to(opt.device) decoder.eval() rest, _ = decoder.sample(fc_feat, att_feat, beam_size=opt.beam_size,