in data/dataset.py [0:0]
def generate_features(self, out_file):
data = self.train_data + self.val_data + self.test_data
transform = imagenet_transform('test')
feat_extractor = tmodels.resnet18(pretrained=True)
feat_extractor.fc = nn.Sequential()
feat_extractor.eval().cuda()
image_feats = []
image_files = []
for chunk in tqdm.tqdm(
utils.chunks(data, 512), total=len(data) // 512):
files, attrs, objs = zip(*chunk)
imgs = list(map(self.loader, files))
imgs = list(map(transform, imgs))
feats = feat_extractor(torch.stack(imgs, 0).cuda())
image_feats.append(feats.data.cpu())
image_files += files
image_feats = torch.cat(image_feats, 0)
print('features for %d images generated' % (len(image_files)))
torch.save({'features': image_feats, 'files': image_files}, out_file)