{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":6799,"databundleVersionId":4225553,"sourceType":"competition"}],"dockerImageVersionId":30664,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import torch\nimport os\nimport torch.nn.functional as F\n\nfrom tqdm import tqdm\nfrom torchvision.io import read_image, ImageReadMode\nfrom torchvision.models import *\nfrom torchvision.datasets import ImageFolder\nfrom torchvision import transforms\nfrom torch.utils.data import DataLoader, Dataset","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-05-22T15:57:01.979763Z","iopub.execute_input":"2024-05-22T15:57:01.980392Z","iopub.status.idle":"2024-05-22T15:57:08.71209Z","shell.execute_reply.started":"2024-05-22T15:57:01.980338Z","shell.execute_reply":"2024-05-22T15:57:08.710907Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import warnings\nwarnings.filterwarnings('ignore')","metadata":{"execution":{"iopub.status.busy":"2024-05-22T15:57:08.714209Z","iopub.execute_input":"2024-05-22T15:57:08.714967Z","iopub.status.idle":"2024-05-22T15:57:08.723218Z","shell.execute_reply.started":"2024-05-22T15:57:08.714934Z","shell.execute_reply":"2024-05-22T15:57:08.722026Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"device = 'cuda' if torch.cuda.is_available() else 'cpu'\nimage_dir = \"/kaggle/input/imagenet-object-localization-challenge/ILSVRC/Data/CLS-LOC\"","metadata":{"execution":{"iopub.status.busy":"2024-05-22T15:57:08.724775Z","iopub.execute_input":"2024-05-22T15:57:08.725199Z","iopub.status.idle":"2024-05-22T15:57:08.735019Z","shell.execute_reply.started":"2024-05-22T15:57:08.725162Z","shell.execute_reply":"2024-05-22T15:57:08.733716Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def model_generator():\n    models = {\n        'alexnet_v1': (alexnet(AlexNet_Weights.IMAGENET1K_V1), AlexNet_Weights.IMAGENET1K_V1.transforms()),\n        'resnet18_v1': (resnet18(ResNet18_Weights.IMAGENET1K_V1), ResNet18_Weights.IMAGENET1K_V1.transforms()),\n        'resnet34_v1': (resnet34(ResNet34_Weights.IMAGENET1K_V1), ResNet34_Weights.IMAGENET1K_V1.transforms()),\n        'resnet50_v1': (resnet50(ResNet50_Weights.IMAGENET1K_V1), ResNet50_Weights.IMAGENET1K_V1.transforms()),\n        'resnet101_v1': (resnet101(ResNet101_Weights.IMAGENET1K_V1), ResNet101_Weights.IMAGENET1K_V1.transforms()),\n        'resnet152_v1': (resnet152(ResNet152_Weights.IMAGENET1K_V1), ResNet152_Weights.IMAGENET1K_V1.transforms()),\n        'resnet50_v2': (resnet50(ResNet50_Weights.IMAGENET1K_V2), ResNet50_Weights.IMAGENET1K_V2.transforms()),\n        'resnet101_v2': (resnet101(ResNet101_Weights.IMAGENET1K_V2), ResNet101_Weights.IMAGENET1K_V2.transforms()),\n        'resnet152_v2': (resnet152(ResNet152_Weights.IMAGENET1K_V2), ResNet152_Weights.IMAGENET1K_V2.transforms()),\n        'vgg11': (vgg11(VGG11_Weights.IMAGENET1K_V1), VGG11_Weights.IMAGENET1K_V1.transforms()),\n        'vgg11_bn': (vgg11_bn(VGG11_BN_Weights.IMAGENET1K_V1), VGG11_BN_Weights.IMAGENET1K_V1.transforms()),\n        'vgg13': (vgg13(VGG13_Weights.IMAGENET1K_V1), VGG13_Weights.IMAGENET1K_V1.transforms()),\n        'vgg13_bn': (vgg13_bn(VGG13_BN_Weights.IMAGENET1K_V1), VGG13_BN_Weights.IMAGENET1K_V1.transforms()),\n        'vgg16': (vgg16(VGG16_Weights.IMAGENET1K_V1), VGG16_Weights.IMAGENET1K_V1.transforms()),\n        'vgg16_bn': (vgg16_bn(VGG16_BN_Weights.IMAGENET1K_V1), VGG16_BN_Weights.IMAGENET1K_V1.transforms()),\n        'vgg19': (vgg19(VGG19_Weights.IMAGENET1K_V1), VGG19_Weights.IMAGENET1K_V1.transforms()),\n        'vgg19_bn': (vgg19_bn(VGG19_BN_Weights.IMAGENET1K_V1), VGG19_BN_Weights.IMAGENET1K_V1.transforms()),\n        'densenet121': (densenet121(DenseNet121_Weights.IMAGENET1K_V1), DenseNet121_Weights.IMAGENET1K_V1.transforms()),\n        'densenet161': (densenet161(DenseNet161_Weights.IMAGENET1K_V1), DenseNet161_Weights.IMAGENET1K_V1.transforms()),\n        'densenet169': (densenet169(DenseNet169_Weights.IMAGENET1K_V1), DenseNet169_Weights.IMAGENET1K_V1.transforms()),\n        'densenet201': (densenet201(DenseNet201_Weights.IMAGENET1K_V1), DenseNet201_Weights.IMAGENET1K_V1.transforms()),\n        'swin_t': (swin_t(Swin_T_Weights.IMAGENET1K_V1), Swin_T_Weights.IMAGENET1K_V1.transforms()),\n        'swin_b': (swin_b(Swin_B_Weights.IMAGENET1K_V1), Swin_B_Weights.IMAGENET1K_V1.transforms()),\n        'swin_v2_t': (swin_v2_t(Swin_V2_T_Weights.IMAGENET1K_V1), Swin_V2_T_Weights.IMAGENET1K_V1.transforms()),\n        'swin_v2_b': (swin_v2_b(Swin_V2_B_Weights.IMAGENET1K_V1), Swin_V2_B_Weights.IMAGENET1K_V1.transforms()),\n    }\n    for name, (model, transform) in models.items():\n        yield name, (model, transform)","metadata":{"execution":{"iopub.status.busy":"2024-05-22T15:57:14.614747Z","iopub.execute_input":"2024-05-22T15:57:14.615161Z","iopub.status.idle":"2024-05-22T15:57:14.624502Z","shell.execute_reply.started":"2024-05-22T15:57:14.615129Z","shell.execute_reply":"2024-05-22T15:57:14.623Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class ImagenetTestDataset(Dataset):\n    def __init__(self, path:str, transform):\n        super().__init__()\n        self.path = path\n        self.img_names = os.listdir(path)\n        self.img_names.sort()\n        self.transform = transform\n    \n    def __getitem__(self, idx):\n        img_path = self.path + '/' + self.img_names[idx]\n        image = read_image(img_path, ImageReadMode.RGB)\n        return self.transform(image)\n    \n    def __len__(self):\n        return len(self.img_names)","metadata":{"execution":{"iopub.status.busy":"2024-05-22T15:57:18.838479Z","iopub.execute_input":"2024-05-22T15:57:18.83936Z","iopub.status.idle":"2024-05-22T15:57:18.846723Z","shell.execute_reply.started":"2024-05-22T15:57:18.839296Z","shell.execute_reply":"2024-05-22T15:57:18.845673Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for name, (model, transform) in model_generator():\n    test_dataset = ImagenetTestDataset(image_dir + '/test', transform=transform)\n    test_dataloader = DataLoader(test_dataset, batch_size=100, shuffle=False, num_workers=2)    \n    test_probs = torch.empty((100000, 1000), dtype=torch.float32)\n\n    model = model.to(device)\n    model.eval()\n    with torch.no_grad():\n        for i, images in tqdm(enumerate(test_dataloader)):\n            images = images.to(device)\n            logits = model(images)\n            test_probs[i*100: (i+1)*100] = logits.detach().cpu()\n    \n    test_probs = test_probs.half()\n    torch.save(test_probs, f'{name}_test_logits.pth')","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}