in src/net.py [0:0]
def extractFeatures(loader, model, ignore_first=False, numpy=False, verbose=True):
assert not model.training
with torch.no_grad():
n = len(loader.dataset)
features = None
# targets = np.zeros((n), dtype=int)
offset = 0
start = time.time()
for elements in loader:
if ignore_first:
elements = elements[1:]
img = elements[0]
ft = model(img.cuda(non_blocking=True))
sz = img.size(0)
if features is None:
d = ft.size(1)
# features = np.zeros((n, d), dtype=np.float32)
features = torch.zeros((n, d), dtype=torch.float32)
all_targets = [torch.zeros((n, ), dtype=int) for _ in elements[1:]]
features[offset:offset+sz] = ft.cpu().detach()#.numpy()
for target, targets in zip(elements[1:], all_targets):
targets[offset:offset+sz] = target#.numpy()
offset += sz
if offset % (100 * sz) == 0 and verbose:
speed = offset / (time.time() - start)
eta = (len(loader)*sz - offset) / speed
print(f"Speed: {speed}, ETA: {eta}")
# if offset >= 20000 and n >= 1e6:
# for i in range(10):
# print(20 * "*")
# print("WARNING: Quit extractFeatures before having extracted features of all samples")
# for i in range(10):
# print(20 * "*")
# break
assert offset == n
# if offset < n:
# features = features[:offset]
# all_targets = tuple([targets[:offset] for targets in all_targets])
if numpy:
features = features.numpy()
all_targets = [targets.numpy() for targets in all_targets]
return (features,) + tuple(all_targets)