import argparse import cv2 import numpy as np import torch from backbones import get_model @torch.no_grad() def inference(weight, name, img): if img is None: img = np.random.randint(0, 255, size=(112, 112, 3), dtype=np.uint8) else: img = cv2.imread(img) img = cv2.resize(img, (112, 112)) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = np.transpose(img, (2, 0, 1)) img = torch.from_numpy(img).unsqueeze(0).float() img.div_(255).sub_(0.5).div_(0.5) net = get_model(name, fp16=False) # For PyTorch 2.x, weights_only is supported, but fallback for older checkpoints try: state_dict = torch.load(weight, weights_only=True) except TypeError: state_dict = torch.load(weight) net.load_state_dict(state_dict) net.eval() # Optional: For PyTorch 2.x, you can compile the model for speedup # net = torch.compile(net) feat = net(img).numpy() print(feat) if __name__ == "__main__": parser = argparse.ArgumentParser(description='PyTorch ArcFace Training') parser.add_argument('--network', type=str, default='r50', help='backbone network') parser.add_argument('--weight', type=str, default='') parser.add_argument('--img', type=str, default=None) args = parser.parse_args() inference(args.weight, args.network, args.img)