{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"Forked from [Kun Hao Yeh notebook](https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-inference-tta) and changed some small parameters.\n\nPlease upvote the original notebook as well","metadata":{}},{"cell_type":"code","source":"import sys\n\npackage_path = '../input/vision-transformer-pytorch/VisionTransformer-Pytorch'\nsys.path.append(package_path)\nfrom vision_transformer_pytorch import VisionTransformer","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:11.484126Z","iopub.execute_input":"2023-10-21T17:14:11.484438Z","iopub.status.idle":"2023-10-21T17:14:12.889144Z","shell.execute_reply.started":"2023-10-21T17:14:11.484403Z","shell.execute_reply":"2023-10-21T17:14:12.888452Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"package_path = '../input/pytorch-image-models/pytorch-image-models-master'\nsys.path.append(package_path)","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:12.890976Z","iopub.execute_input":"2023-10-21T17:14:12.891255Z","iopub.status.idle":"2023-10-21T17:14:12.894724Z","shell.execute_reply.started":"2023-10-21T17:14:12.891227Z","shell.execute_reply":"2023-10-21T17:14:12.893939Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from glob import glob\nfrom sklearn.model_selection import GroupKFold, StratifiedKFold\nimport cv2\nfrom skimage import io\nimport torch\nfrom torch import nn\nimport os\nfrom datetime import datetime\nimport time\nimport random\nimport cv2\nimport torchvision\nfrom torchvision import transforms\nimport pandas as pd\nimport numpy as np\nfrom tqdm import tqdm\n\nimport matplotlib.pyplot as plt\nfrom torch.utils.data import Dataset,DataLoader\nfrom torch.utils.data.sampler import SequentialSampler, RandomSampler\nfrom  torch.cuda.amp import autocast, GradScaler\n\nimport sklearn\nimport warnings\nimport joblib\nfrom sklearn.metrics import roc_auc_score, log_loss\nfrom sklearn import metrics\nimport warnings\nimport cv2\nimport pydicom\nimport timm #from efficientnet_pytorch import EfficientNet\nfrom scipy.ndimage.interpolation import zoom\nfrom sklearn.metrics import log_loss","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-10-21T17:14:12.895965Z","iopub.execute_input":"2023-10-21T17:14:12.896231Z","iopub.status.idle":"2023-10-21T17:14:15.829643Z","shell.execute_reply.started":"2023-10-21T17:14:12.896204Z","shell.execute_reply":"2023-10-21T17:14:15.828465Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"MODEL_DIR = '../input/cassava-resnext50-32x4d-weights/'","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:15.831335Z","iopub.execute_input":"2023-10-21T17:14:15.831646Z","iopub.status.idle":"2023-10-21T17:14:15.835496Z","shell.execute_reply.started":"2023-10-21T17:14:15.831613Z","shell.execute_reply":"2023-10-21T17:14:15.834729Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"CFG = {\n    'fold_num': 10,\n    'seed': 719,\n    'model_arch': 'tf_efficientnet_b4_ns',\n    'model_name':'resnext50_32x4d',\n    'img_size': 384,\n    'img_size_ef': 512,\n    'img_size_vit': 384,\n    'epochs': 32,\n    'train_bs': 28,\n    'valid_bs': 32,\n    'lr': 1e-4,\n    'num_workers': 4,\n    'accum_iter': 1, # suppoprt to do batch accumulation for backprop with effectively larger batch size\n    'verbose_step': 1,\n    'device': 'cuda:0',\n    'device1': 'cuda:1',\n    'tta':3,\n    'used_epochs': [6,7,8,9],\n    'weights': [1,1,1,1]\n}","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:15.839001Z","iopub.execute_input":"2023-10-21T17:14:15.839288Z","iopub.status.idle":"2023-10-21T17:14:15.849426Z","shell.execute_reply.started":"2023-10-21T17:14:15.839260Z","shell.execute_reply":"2023-10-21T17:14:15.848558Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('../input/pure-data-19-20-pictures/train.csv')\ntrain.head()","metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","execution":{"iopub.status.busy":"2023-10-21T17:14:15.852500Z","iopub.execute_input":"2023-10-21T17:14:15.852778Z","iopub.status.idle":"2023-10-21T17:14:15.907578Z","shell.execute_reply.started":"2023-10-21T17:14:15.852740Z","shell.execute_reply":"2023-10-21T17:14:15.906652Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.label.value_counts()","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:15.908609Z","iopub.execute_input":"2023-10-21T17:14:15.908883Z","iopub.status.idle":"2023-10-21T17:14:15.916715Z","shell.execute_reply.started":"2023-10-21T17:14:15.908843Z","shell.execute_reply":"2023-10-21T17:14:15.915716Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"> We could do stratified validation split in each fold to make each fold's train and validation set looks like the whole train set in target distributions.","metadata":{}},{"cell_type":"code","source":"submission = pd.read_csv('../input/cassava-leaf-disease-classification/sample_submission.csv')\nsubmission.head()","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:15.918146Z","iopub.execute_input":"2023-10-21T17:14:15.918463Z","iopub.status.idle":"2023-10-21T17:14:15.930751Z","shell.execute_reply.started":"2023-10-21T17:14:15.918435Z","shell.execute_reply":"2023-10-21T17:14:15.929947Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Helper Functions","metadata":{}},{"cell_type":"code","source":"def seed_everything(seed):\n    random.seed(seed)\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    np.random.seed(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)\n    torch.backends.cudnn.deterministic = True\n    torch.backends.cudnn.benchmark = True\n    \ndef get_img(path):\n    im_bgr = cv2.imread(path)\n    im_rgb = im_bgr[:, :, ::-1]\n    #print(im_rgb)\n    return im_rgb\n\nimg = get_img('../input/cassava-leaf-disease-classification/train_images/1000015157.jpg')\nplt.imshow(img)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:15.932293Z","iopub.execute_input":"2023-10-21T17:14:15.932733Z","iopub.status.idle":"2023-10-21T17:14:16.202058Z","shell.execute_reply.started":"2023-10-21T17:14:15.932696Z","shell.execute_reply":"2023-10-21T17:14:16.201207Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Dataset","metadata":{}},{"cell_type":"code","source":"class CassavaDataset(Dataset):\n    def __init__(\n        self, df, data_root, transforms=None, output_label=True\n    ):\n        \n        super().__init__()\n        self.df = df.reset_index(drop=True).copy()\n        self.transforms = transforms\n        self.data_root = data_root\n        self.output_label = output_label\n    \n    def __len__(self):\n        return self.df.shape[0]\n    \n    def __getitem__(self, index: int):\n        \n        # get labels\n        if self.output_label:\n            target = self.df.iloc[index]['label']\n          \n        path = \"{}/{}\".format(self.data_root, self.df.iloc[index]['image_id'])\n        \n        img  = get_img(path)\n        \n        if self.transforms:\n            img = self.transforms(image=img)['image']\n            \n        # do label smoothing\n        if self.output_label == True:\n            return img, target\n        else:\n            return img","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:16.203622Z","iopub.execute_input":"2023-10-21T17:14:16.204036Z","iopub.status.idle":"2023-10-21T17:14:16.216784Z","shell.execute_reply.started":"2023-10-21T17:14:16.203994Z","shell.execute_reply":"2023-10-21T17:14:16.215838Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Define Train\\Validation Image Augmentations","metadata":{}},{"cell_type":"code","source":"from albumentations import (\n    HorizontalFlip, VerticalFlip, IAAPerspective, ShiftScaleRotate, CLAHE, RandomRotate90,\n    Transpose, ShiftScaleRotate, Blur, OpticalDistortion, GridDistortion, HueSaturationValue,\n    IAAAdditiveGaussianNoise, GaussNoise, MotionBlur, MedianBlur, IAAPiecewiseAffine, RandomResizedCrop,\n    IAASharpen, IAAEmboss, RandomBrightnessContrast, Flip, OneOf, Compose, Normalize, Cutout, CoarseDropout, ShiftScaleRotate, CenterCrop, Resize\n)\n\nfrom albumentations.pytorch import ToTensorV2\n\nfrom albumentations import (\n    HorizontalFlip, VerticalFlip, IAAPerspective, ShiftScaleRotate, CLAHE, RandomRotate90,\n    Transpose, ShiftScaleRotate, Blur, OpticalDistortion, GridDistortion, HueSaturationValue,\n    IAAAdditiveGaussianNoise, GaussNoise, MotionBlur, MedianBlur, IAAPiecewiseAffine, RandomResizedCrop,\n    IAASharpen, IAAEmboss, RandomBrightnessContrast, Flip, OneOf, Compose, Normalize, Cutout, CoarseDropout, ShiftScaleRotate, CenterCrop, Resize\n)\n\nfrom albumentations.pytorch import ToTensorV2\n\ndef get_train_transforms():\n    return Compose([\n            RandomResizedCrop(CFG['img_size'], CFG['img_size']),\n            Transpose(p=0.5),\n            HorizontalFlip(p=0.5),\n            VerticalFlip(p=0.5),\n            ShiftScaleRotate(p=0.5),\n            HueSaturationValue(hue_shift_limit=0.2, sat_shift_limit=0.2, val_shift_limit=0.2, p=0.5),\n            RandomBrightnessContrast(brightness_limit=(-0.1,0.1), contrast_limit=(-0.1, 0.1), p=0.5),\n            Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], max_pixel_value=255.0, p=1.0),\n            CoarseDropout(p=0.5),\n            Cutout(p=0.5),\n            ToTensorV2(p=1.0),\n        ], p=1.)\n  \n        \ndef get_valid_transforms():\n    return Compose([\n            CenterCrop(CFG['img_size'], CFG['img_size'], p=1.),\n            Resize(CFG['img_size'], CFG['img_size']),\n            Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], max_pixel_value=255.0, p=1.0),\n            ToTensorV2(p=1.0),\n        ], p=1.)\n\ndef get_inference_transforms():\n    return Compose([\n            RandomResizedCrop(CFG['img_size'], CFG['img_size']),\n            Transpose(p=0.5),\n            HorizontalFlip(p=0.5),\n            VerticalFlip(p=0.5),\n            HueSaturationValue(hue_shift_limit=0.2, sat_shift_limit=0.2, val_shift_limit=0.2, p=0.5),\n            RandomBrightnessContrast(brightness_limit=(-0.1,0.1), contrast_limit=(-0.1, 0.1), p=0.5),\n            Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], max_pixel_value=255.0, p=1.0),\n            ToTensorV2(p=1.0),\n        ], p=1.)\ndef get_inference_transforms_ef():\n    return Compose([\n            Resize(CFG['img_size_ef'], CFG['img_size_ef']),\n            RandomResizedCrop(CFG['img_size_ef'], CFG['img_size_ef']),\n            Transpose(p=0.5),\n            HorizontalFlip(p=0.5),\n            VerticalFlip(p=0.5),\n            HueSaturationValue(hue_shift_limit=0.2, sat_shift_limit=0.2, val_shift_limit=0.2, p=0.5),\n            RandomBrightnessContrast(brightness_limit=(-0.1,0.1), contrast_limit=(-0.1, 0.1), p=0.5),\n            Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], max_pixel_value=255.0, p=1.0),\n            ToTensorV2(p=1.0),\n        ], p=1.)\ndef get_inference_transforms_vit():\n    return Compose([\n            Resize(CFG['img_size_ef'], CFG['img_size_ef']),\n            RandomResizedCrop(CFG['img_size_vit'], CFG['img_size_vit']),\n            Transpose(p=0.5),\n            HorizontalFlip(p=0.5),\n            VerticalFlip(p=0.5),\n            HueSaturationValue(hue_shift_limit=0.2, sat_shift_limit=0.2, val_shift_limit=0.2, p=0.5),\n            RandomBrightnessContrast(brightness_limit=(-0.1,0.1), contrast_limit=(-0.1, 0.1), p=0.5),\n            Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], max_pixel_value=255.0, p=1.0),\n            ToTensorV2(p=1.0),\n        ], p=1.)","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:16.218035Z","iopub.execute_input":"2023-10-21T17:14:16.218366Z","iopub.status.idle":"2023-10-21T17:14:16.893414Z","shell.execute_reply.started":"2023-10-21T17:14:16.218338Z","shell.execute_reply":"2023-10-21T17:14:16.892428Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# ====================================================\n# Dataset\n# ====================================================\nclass TestDataset(Dataset):\n    def __init__(self, df, transform=None):\n        self.df = df\n        self.file_names = df['image_id'].values\n        self.transform = transform\n        \n    def __len__(self):\n        return len(self.df)\n\n    def __getitem__(self, idx):\n        file_name = self.file_names[idx]\n        file_path = f'{TEST_PATH}/{file_name}'\n        image = cv2.imread(file_path)\n        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n        if self.transform:\n            augmented = self.transform(image=image)\n            image = augmented['image']\n        return image","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:16.894910Z","iopub.execute_input":"2023-10-21T17:14:16.895299Z","iopub.status.idle":"2023-10-21T17:14:16.903587Z","shell.execute_reply.started":"2023-10-21T17:14:16.895259Z","shell.execute_reply":"2023-10-21T17:14:16.902823Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# ====================================================\n# Transforms\n# ====================================================\ndef get_transforms(*, data):\n    if data == 'valid':\n        return Compose([\n            Resize(CFG['img_size_ef'], CFG['img_size_ef']),\n            Normalize(\n                mean=[0.485, 0.456, 0.406],\n                std=[0.229, 0.224, 0.225],\n            ),\n            ToTensorV2(),\n        ])","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:16.904862Z","iopub.execute_input":"2023-10-21T17:14:16.905173Z","iopub.status.idle":"2023-10-21T17:14:16.918416Z","shell.execute_reply.started":"2023-10-21T17:14:16.905144Z","shell.execute_reply":"2023-10-21T17:14:16.917562Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model","metadata":{}},{"cell_type":"markdown","source":"> 19+20数据：vit(d5)+ef原始","metadata":{}},{"cell_type":"code","source":"# ====================================================\n# MODEL\n# ====================================================\nclass CustomResNext(nn.Module):\n    def __init__(self, model_name='resnext50_32x4d', pretrained=False):\n        super().__init__()\n        self.model = timm.create_model(model_name, pretrained=pretrained)\n        n_features = self.model.fc.in_features\n        self.model.fc = nn.Linear(n_features, 5)\n\n    def forward(self, x):\n        x = self.model(x)\n        return x","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:16.919666Z","iopub.execute_input":"2023-10-21T17:14:16.920055Z","iopub.status.idle":"2023-10-21T17:14:16.929010Z","shell.execute_reply.started":"2023-10-21T17:14:16.920015Z","shell.execute_reply":"2023-10-21T17:14:16.928302Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class CassvaImgClassifier(nn.Module):\n    def __init__(self, model_arch, n_class, pretrained=False):\n        super().__init__()\n        self.model = timm.create_model(model_arch, pretrained=pretrained)\n        n_features = self.model.classifier.in_features\n        self.model.classifier = nn.Linear(n_features, n_class)\n        \n    def forward(self, x):\n        x = self.model(x)\n        return x\n    \nclass EnsembleClassifier(nn.Module):\n    def __init__(self, model_arch, n_class, pretrained=False):\n        super().__init__()\n        self.model1 = VisionTransformer.from_name('ViT-B_16', num_classes=5) \n        self.model1.load_state_dict(torch.load('../input/d8-vision-transformer-vit-0107/ViT-B_16.pt'))\n        self.model2 = CassvaImgClassifier(model_arch, n_class, pretrained)\n        \n    def forward(self, ef=None,vit=None):\n        if ef is None:\n            x1 = self.model1(vit)\n            return x1\n        if vit is None:\n            x2 = self.model2(ef)\n            return x2\n    \n    def load(self, state_dict):\n        self.model2.load_state_dict(state_dict)","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:16.930722Z","iopub.execute_input":"2023-10-21T17:14:16.931106Z","iopub.status.idle":"2023-10-21T17:14:16.943318Z","shell.execute_reply.started":"2023-10-21T17:14:16.931065Z","shell.execute_reply":"2023-10-21T17:14:16.942591Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Main Loop","metadata":{}},{"cell_type":"code","source":"# from tqdm import tqdm\n\n# #range用法\n# for i in tqdm(range(1000)):  \n#      #do something\n#      pass \n# #list用法\n# for char in tqdm([\"a\", \"b\", \"c\", \"d\"]):\n#     #do something\n#     pass","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:16.944395Z","iopub.execute_input":"2023-10-21T17:14:16.944656Z","iopub.status.idle":"2023-10-21T17:14:16.957602Z","shell.execute_reply.started":"2023-10-21T17:14:16.944630Z","shell.execute_reply":"2023-10-21T17:14:16.956947Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# lt=['a','b','c']\n# for i,item in enumerate(tqdm(lt)):\n#     print(i, item)","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:16.959050Z","iopub.execute_input":"2023-10-21T17:14:16.959374Z","iopub.status.idle":"2023-10-21T17:14:16.967774Z","shell.execute_reply.started":"2023-10-21T17:14:16.959325Z","shell.execute_reply":"2023-10-21T17:14:16.967059Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # 两个模型预测不同得aug图片，然后再相乘\n# def inference_one_epoch(model, data_loader_vit,data_loader_ef, device,device1):\n# #     model.eval()\n#     image_preds_ef=[]\n#     image_preds_vit=[]\n#     image_preds_all = []\n    \n#     for step, (imgs) in enumerate(tqdm(data_loader_vit)):\n# #         print(\"ef-imgs:\",imgs)\n#         imgs = imgs.to(device).float()\n#         image_preds = model(vit=imgs)   #output = model(input)\n#         image_preds_vit += [torch.softmax(image_preds, 1).detach().cpu().numpy()]\n    \n# #     print(\"---------------------------------------\")\n# #     pbar_ef = tqdm(enumerate(data_loader_ef), total=len(data_loader_ef))\n# #     print(pbar_ef)\n# #     print(\"========================================\")\n#     for step, (imgs) in enumerate(tqdm(data_loader_ef)):\n# #         print(imgs)\n#         imgs = imgs.to(device).float()\n#         image_preds = model(ef=imgs)   #output = model(input)\n#         image_preds_ef += [torch.softmax(image_preds, 1).detach().cpu().numpy()]\n# #     pbar_vit = tqdm(enumerate(data_loader_vit), total=len(data_loader_vit))\n# #     print(pbar_vit)\n   \n#     print(\"ef:\",image_preds_ef)\n#     print(\"vit\",image_preds_vit)\n#     image_preds_list=torch.from_numpy((0.4*np.array(image_preds_ef)+0.6*np.array(image_preds_vit))) \n#     image_preds_all = np.concatenate(torch.softmax(image_preds_list, 2).detach().cpu().numpy(), axis=0)\n# #     print(\"result:\",image_preds_all)\n#     return image_preds_all","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:16.969327Z","iopub.execute_input":"2023-10-21T17:14:16.969599Z","iopub.status.idle":"2023-10-21T17:14:16.979166Z","shell.execute_reply.started":"2023-10-21T17:14:16.969572Z","shell.execute_reply":"2023-10-21T17:14:16.978506Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# result=[]\n# a=[[0.1,0.2,0.3],[0.1,0.2,0.3],[0.1,0.2,0.3]]\n# b=[[0.1,0.2,0.3],[0.1,0.2,0.3],[0.1,0.2,0.3]]\n# result+=a\n# result+=b\n# result\n# # c=np.array([[0.7,0.8,0.9],[0.7,0.8,0.9]])\n# # print(a.shape)\n# # soft_a=torch.softmax(torch.from_numpy(a), 1).detach().cpu().numpy()\n# # print(soft_a.shape)\n# # list_a=soft_a.tolist()\n# # print(list_a)\n# # soft_b=torch.softmax(torch.from_numpy(b), 1).detach().cpu().numpy()\n# # list_b=soft_b.tolist()\n# # soft_c=torch.softmax(torch.from_numpy(c), 1).detach().cpu().numpy()\n# # list_c=soft_c.tolist()\n# # result+=[list_a]\n# # result+=[list_b]\n# # result+=[list_c]\n# # print(np.array(result).shape)\n# # print(result)\n# # result=np.array(result)\n# # print(result.shape)\n# # result=result.astype(float) \n# # image_preds_list=torch.from_numpy(result)","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:16.980091Z","iopub.execute_input":"2023-10-21T17:14:16.980349Z","iopub.status.idle":"2023-10-21T17:14:16.993133Z","shell.execute_reply.started":"2023-10-21T17:14:16.980323Z","shell.execute_reply":"2023-10-21T17:14:16.992424Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# result=[]\n# a=np.array([[0.1,0.2,0.3],[0.1,0.2,0.3],[0.1,0.2,0.3]])\n# b=np.array([[0.1,0.2,0.3],[0.1,0.2,0.3],[0.1,0.2,0.3]])\n# c=np.array([[0.7,0.8,0.9],[0.7,0.8,0.9]])\n# print(a.shape)\n# soft_a=torch.softmax(torch.from_numpy(a), 1).detach().cpu().numpy()\n# print(soft_a.shape)\n# list_a=soft_a.tolist()\n# print(list_a)\n# soft_b=torch.softmax(torch.from_numpy(b), 1).detach().cpu().numpy()\n# list_b=soft_b.tolist()\n# soft_c=torch.softmax(torch.from_numpy(c), 1).detach().cpu().numpy()\n# list_c=soft_c.tolist()\n# result+=list_a\n# print(\"resulta:\",result)\n# result+=list_b\n# print(\"resultb:\",result)\n# result+=list_c\n# print(np.array(result).shape)\n# print(result)\n# result=np.array(result)\n# print(result.shape)\n# result=result.astype(float) \n# image_preds_list=torch.from_numpy(result)","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:16.994201Z","iopub.execute_input":"2023-10-21T17:14:16.994464Z","iopub.status.idle":"2023-10-21T17:14:17.006761Z","shell.execute_reply.started":"2023-10-21T17:14:16.994437Z","shell.execute_reply":"2023-10-21T17:14:17.006101Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# ====================================================\n# Helper functions\n# ====================================================\ndef load_state(model_path):\n    model = CustomResNext(CFG['model_name'], pretrained=False)\n    try:  # single GPU model_file\n        model.load_state_dict(torch.load(model_path)['model'], strict=True)\n        state_dict = torch.load(model_path)['model']\n    except:  # multi GPU model_file\n        state_dict = torch.load(model_path)['model']\n        state_dict = {k[7:] if k.startswith('module.') else k: state_dict[k] for k in state_dict.keys()}\n\n    return state_dict\n\n\ndef inference(model, states, test_loader, device):\n    model.to(device)\n    tk0 = tqdm(enumerate(test_loader), total=len(test_loader))\n    probs = []\n    for i, (images) in tk0:\n#         print(\"images:\",images.shape)\n#         print(\"i:\",i)\n        images = images.to(device)\n        avg_preds = []\n        for state in states:\n            model.load_state_dict(state)\n            model.eval()\n            with torch.no_grad():\n                y_preds = model(images)\n            avg_preds.append(y_preds.softmax(1).to('cpu').numpy())\n        avg_preds = np.mean(avg_preds, axis=0)\n        probs.append(avg_preds)\n    probs = np.concatenate(probs)\n#     print(\"probs:\",probs)\n    return probs","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:17.007897Z","iopub.execute_input":"2023-10-21T17:14:17.008170Z","iopub.status.idle":"2023-10-21T17:14:17.021734Z","shell.execute_reply.started":"2023-10-21T17:14:17.008143Z","shell.execute_reply":"2023-10-21T17:14:17.020796Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 正常版本\n# 两个模型预测不同得aug图片，然后再相乘\ndef inference_one_epoch(model, data_loader_vit,data_loader_ef, device):\n    model.eval()\n    image_preds_ef=[]\n    image_preds_vit=[]\n    image_preds_all = []\n    pbar_vit = tqdm(enumerate(data_loader_vit), total=len(data_loader_vit))\n    for step, (imgs) in pbar_vit:\n        imgs = imgs.to(device).float()     \n        image_preds = model(vit=imgs)   #output = model(input)\n        image_preds_vit += torch.softmax(image_preds, 1).detach().cpu().numpy().tolist()  \n    pbar_ef = tqdm(enumerate(data_loader_ef), total=len(data_loader_ef))\n    for step, (imgs) in pbar_ef:\n        imgs = imgs.to(device).float()\n        image_preds = model(ef=imgs)   #output = model(input)\n        image_preds_ef += torch.softmax(image_preds, 1).detach().cpu().numpy().tolist()\n    print(\"image_preds_ef_list:\",image_preds_ef)\n    image_preds_ef=np.array(image_preds_ef)\n    image_preds_vit=np.array(image_preds_vit)\n    print(\"image_preds_ef:\",image_preds_ef)\n    result=0.4*image_preds_ef+0.6*image_preds_vit\n    result=result.astype(float) \n    print(\"result:\",result)\n    image_preds_list=torch.from_numpy(result)\n    print(\"image_preds_list:\",image_preds_list.shape)\n    image_preds_all = torch.softmax(image_preds_list, 1).detach().cpu().numpy()\n    print(\"image_preds_all:\",image_preds_all.shape)\n    print(\"image_preds_all:\",image_preds_all)\n    return image_preds_all","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:17:34.715346Z","iopub.execute_input":"2023-10-21T17:17:34.715735Z","iopub.status.idle":"2023-10-21T17:17:34.730329Z","shell.execute_reply.started":"2023-10-21T17:17:34.715696Z","shell.execute_reply":"2023-10-21T17:17:34.729146Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # 两个模型预测不同得aug图片，然后再相乘\n# # 预测单个模型版本\n# def inference_one_epoch(model, data_loader_vit,data_loader_ef, device):\n#     model.eval()\n#     image_preds_ef=[]\n#     image_preds_vit=[]\n#     image_preds_all = []\n# #     pbar_vit = tqdm(enumerate(data_loader_vit), total=len(data_loader_vit))\n# #     for step, (imgs) in pbar_vit:\n# #         imgs = imgs.to(device).float()     \n# #         image_preds = model(vit=imgs)   #output = model(input)\n# #         image_preds_vit += torch.softmax(image_preds, 1).detach().cpu().numpy().tolist()  \n#     pbar_ef = tqdm(enumerate(data_loader_ef), total=len(data_loader_ef))\n#     for step, (imgs) in pbar_ef:\n#         imgs = imgs.to(device).float()\n#         image_preds = model(ef=imgs)   #output = model(input)\n#         image_preds_ef += torch.softmax(image_preds, 1).detach().cpu().numpy().tolist()\n#     image_preds_ef=np.array(image_preds_ef)\n# #     image_preds_vit=np.array(image_preds_vit)\n#     result=image_preds_ef\n#     result=result.astype(float) \n#     image_preds_list=torch.from_numpy(result)\n#     image_preds_all = torch.softmax(image_preds_list, 1).detach().cpu().numpy()\n#     return image_preds_all","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:17.038839Z","iopub.execute_input":"2023-10-21T17:14:17.039230Z","iopub.status.idle":"2023-10-21T17:14:17.050759Z","shell.execute_reply.started":"2023-10-21T17:14:17.039183Z","shell.execute_reply":"2023-10-21T17:14:17.050108Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"# # 两个模型预测同一组数据\n# def inference_one_epoch(model, data_loader_vit,data_loader_ef, device):\n#     model.eval()\n\n#     image_preds_all = []\n    \n#     pbar_ef = tqdm(enumerate(data_loader_ef), total=len(data_loader_ef))\n#     pbar_vit = tqdm(enumerate(data_loader_vit), total=len(data_loader_vit))\n#     for step, (imgs) in pbar_vit:\n#         imgs = imgs.to(device).float()\n        \n#         image_preds = model(imgs)   #output = model(input)\n#         image_preds_all += [torch.softmax(image_preds, 1).detach().cpu().numpy()]\n        \n    \n#     image_preds_all = np.concatenate(image_preds_all, axis=0)\n# #     print(\"result:\",image_preds_all)\n#     return image_preds_all","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:17.052288Z","iopub.execute_input":"2023-10-21T17:14:17.052681Z","iopub.status.idle":"2023-10-21T17:14:17.064233Z","shell.execute_reply.started":"2023-10-21T17:14:17.052644Z","shell.execute_reply":"2023-10-21T17:14:17.063531Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # ====================================================\n# # inference\n# # ====================================================\n# model = CustomResNext(CFG.model_name, pretrained=False)\n# #states = [torch.load(MODEL_DIR+f'{CFG.model_name}_GradualWarmupSchedulerV2_fold{fold}_best.pth') for fold in CFG.trn_fold]\n# #states = [load_state(MODEL_DIR+f'{CFG.model_name}_GradualWarmupSchedulerV2_fold{fold}_best.pth') for fold in CFG.trn_fold]\n# #states = [load_state(MODEL_DIR+f'{CFG.model_name}_GradualWarmupSchedulerV2_fold{fold}_best_coarsedrop_1129.pth') for fold in CFG.trn_fold]\n# states = [load_state(MODEL_DIR+f'{CFG.model_name}_GradualWarmupSchedulerV2_fold{fold}_best_1130.pth') for fold in CFG.trn_fold]\n# test_dataset = TestDataset(test, transform=get_transforms(data='valid'))\n# test_loader = DataLoader(test_dataset, batch_size=CFG.batch_size, shuffle=False, \n#                          num_workers=CFG.num_workers, pin_memory=True)\n# predictions = inference(model, states, test_loader, device)\n# # submission\n# test['label'] = predictions.argmax(1)\n# test[['image_id', 'label']].to_csv(OUTPUT_DIR+'submission.csv', index=False)\n# test.head()","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:17.065298Z","iopub.execute_input":"2023-10-21T17:14:17.065543Z","iopub.status.idle":"2023-10-21T17:14:17.073699Z","shell.execute_reply.started":"2023-10-21T17:14:17.065519Z","shell.execute_reply":"2023-10-21T17:14:17.073085Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"testResNet=test = pd.read_csv('../input/cassava-leaf-disease-classification/sample_submission.csv')","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:17.074684Z","iopub.execute_input":"2023-10-21T17:14:17.075032Z","iopub.status.idle":"2023-10-21T17:14:17.089353Z","shell.execute_reply.started":"2023-10-21T17:14:17.074981Z","shell.execute_reply":"2023-10-21T17:14:17.088585Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# !mkdir ./test","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:17.090382Z","iopub.execute_input":"2023-10-21T17:14:17.090630Z","iopub.status.idle":"2023-10-21T17:14:17.100178Z","shell.execute_reply.started":"2023-10-21T17:14:17.090606Z","shell.execute_reply":"2023-10-21T17:14:17.099529Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# df_test = train[0:2]","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:17.101361Z","iopub.execute_input":"2023-10-21T17:14:17.101727Z","iopub.status.idle":"2023-10-21T17:14:17.110843Z","shell.execute_reply.started":"2023-10-21T17:14:17.101681Z","shell.execute_reply":"2023-10-21T17:14:17.110135Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# df_test","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:17.112126Z","iopub.execute_input":"2023-10-21T17:14:17.112442Z","iopub.status.idle":"2023-10-21T17:14:17.121156Z","shell.execute_reply.started":"2023-10-21T17:14:17.112412Z","shell.execute_reply":"2023-10-21T17:14:17.120382Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# !cp ../input/pure-data-19-20-pictures/train/1000015157.jpg ./test\n# !cp ../input/pure-data-19-20-pictures/train/1000201771.jpg ./test","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:17.122379Z","iopub.execute_input":"2023-10-21T17:14:17.122645Z","iopub.status.idle":"2023-10-21T17:14:17.132133Z","shell.execute_reply.started":"2023-10-21T17:14:17.122619Z","shell.execute_reply":"2023-10-21T17:14:17.131371Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# df_test.to_csv('test.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:17.133485Z","iopub.execute_input":"2023-10-21T17:14:17.133757Z","iopub.status.idle":"2023-10-21T17:14:17.142431Z","shell.execute_reply.started":"2023-10-21T17:14:17.133722Z","shell.execute_reply":"2023-10-21T17:14:17.141722Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# if __name__ == '__main__':\n#      # for training only, need nightly build pytorch\n\n#     seed_everything(CFG['seed'])\n    \n#     folds = StratifiedKFold(n_splits=CFG['fold_num']).split(np.arange(train.shape[0]), train.label.values)\n    \n#     for fold, (trn_idx, val_idx) in enumerate(folds):\n#         print('Inference fold {} started'.format(fold))\n# #         print(val_idx)\n#         if fold > 0:\n#             break \n#         print('Inference fold {} started'.format(fold))\n#         val_idx=[0,1]\n#         train_test= pd.read_csv('./test.csv')\n#         valid_ = train_test.loc[val_idx,:].reset_index(drop=True)\n#         valid_ds_ef = CassavaDataset(valid_, './test/', transforms=get_inference_transforms_ef(), output_label=False)\n#         valid_ds_vit = CassavaDataset(valid_, './test/', transforms=get_inference_transforms_vit(), output_label=False)\n\n#         test = pd.DataFrame()\n#         test['image_id'] = list(os.listdir('../input/cassava-leaf-disease-classification/test_images/'))\n#         test_ds_ef = CassavaDataset(test, '../input/cassava-leaf-disease-classification/test_images/', transforms=get_inference_transforms_ef(), output_label=False)       \n#         test_ds_vit = CassavaDataset(test, '../input/cassava-leaf-disease-classification/test_images/', transforms=get_inference_transforms_vit(), output_label=False)       \n# #         test_ds = CassavaDataset(test, '../input/cassava-leaf-disease-classification/test_images/', transforms=get_inference_transforms_vit(), output_label=False)       \n#         val_loader_ef = torch.utils.data.DataLoader(\n#             valid_ds_ef, \n#             batch_size=CFG['valid_bs'],\n#             num_workers=CFG['num_workers'],\n#             shuffle=False,\n#             pin_memory=False,\n#         )\n#         val_loader_vit = torch.utils.data.DataLoader(\n#             valid_ds_vit, \n#             batch_size=CFG['valid_bs'],\n#             num_workers=CFG['num_workers'],\n#             shuffle=False,\n#             pin_memory=False,\n#         )\n#         tst_loader_vit = torch.utils.data.DataLoader(\n#             test_ds_vit, \n#             batch_size=CFG['valid_bs'],\n#             num_workers=CFG['num_workers'],\n#             shuffle=False,\n#             pin_memory=False,\n#         )\n#         tst_loader_ef = torch.utils.data.DataLoader(\n#             test_ds_ef, \n#             batch_size=CFG['valid_bs'],\n#             num_workers=CFG['num_workers'],\n#             shuffle=False,\n#             pin_memory=False,\n#         )\n\n#         device = torch.device(CFG['device'])\n#         device1 = torch.device(CFG['device1'])\n#         model = EnsembleClassifier(CFG['model_arch'], train.label.nunique()).to(device)\n        \n#         val_preds = []\n#         tst_preds = []\n#         for i in range(1):\n#             if i ==0:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-94-02/pytorch-efficientnet-baseline-train-94/tf_efficientnet_b4_ns_fold_0_3\"\n#             if i ==1:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-94-02/pytorch-efficientnet-baseline-train-94/tf_efficientnet_b4_ns_fold_1_5\"\n#             if i ==2:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-94-02/pytorch-efficientnet-baseline-train-94/tf_efficientnet_b4_ns_fold_2_4\"\n#             if i ==3:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-94-02/tf_efficientnet_b4_ns_fold_3_7\"\n#             if i ==4:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-94-02/tf_efficientnet_b4_ns_fold_4_4\"\n#             model.load(torch.load(ef_path))        \n#             with torch.no_grad():\n# #                 for _ in range(CFG['tta']):\n#                 for _ in range(1):\n#                     val_preds += [inference_one_epoch(model, val_loader_vit,val_loader_ef, device)]\n#                     tst_preds += [inference_one_epoch(model, tst_loader_vit,tst_loader_ef, device)]\n#         val_preds = np.mean(val_preds, axis=0)\n#         tst_preds = np.mean(tst_preds, axis=0) \n#         print('fold {} validation loss = {:.5f}'.format(fold, log_loss(valid_.label.values, val_preds)))\n#         print('fold {} validation accuracy = {:.5f}'.format(fold, (valid_.label.values==np.argmax(val_preds, axis=1)).mean()))\n        \n#         del model\n#         torch.cuda.empty_cache()","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:17.147000Z","iopub.execute_input":"2023-10-21T17:14:17.147325Z","iopub.status.idle":"2023-10-21T17:14:17.153369Z","shell.execute_reply.started":"2023-10-21T17:14:17.147287Z","shell.execute_reply":"2023-10-21T17:14:17.152489Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# if __name__ == '__main__':\n#      # for training only, need nightly build pytorch\n\n#     seed_everything(CFG['seed'])\n    \n#     folds = StratifiedKFold(n_splits=CFG['fold_num']).split(np.arange(train.shape[0]), train.label.values)\n    \n#     for fold, (trn_idx, val_idx) in enumerate(folds):\n#         # we'll train fold 0 first\n#         if fold > 0:\n#             break \n\n#         print('Inference fold {} started'.format(fold))\n\n#         valid_ = train.loc[val_idx,:].reset_index(drop=True)\n#         valid_ds = CassavaDataset(valid_, '../input/cassava-leaf-disease-classification/train_images/', transforms=get_inference_transforms(), output_label=False)\n        \n#         test = pd.DataFrame()\n#         test['image_id'] = list(os.listdir('../input/cassava-leaf-disease-classification/test_images/'))\n#         test_ds = CassavaDataset(test, '../input/cassava-leaf-disease-classification/test_images/', transforms=get_inference_transforms(), output_label=False)\n        \n#         val_loader = torch.utils.data.DataLoader(\n#             valid_ds, \n#             batch_size=CFG['valid_bs'],\n#             num_workers=CFG['num_workers'],\n#             shuffle=False,\n#             pin_memory=False,\n#         )\n        \n#         tst_loader = torch.utils.data.DataLoader(\n#             test_ds, \n#             batch_size=CFG['valid_bs'],\n#             num_workers=CFG['num_workers'],\n#             shuffle=False,\n#             pin_memory=False,\n#         )\n\n#         device = torch.device(CFG['device'])\n#         model = EnsembleClassifier(CFG['model_arch'], train.label.nunique()).to(device)\n        \n#         val_preds = []\n#         tst_preds = []\n        \n#         #for epoch in range(CFG['epochs']-3):\n#         for i, epoch in enumerate(CFG['used_epochs']):    \n#             model.load(torch.load('../input/fork-pytorch-efficientnet-baseline-train-amp-a/{}_fold_{}_{}'.format(CFG['model_arch'], fold, epoch)))\n            \n#             with torch.no_grad():\n#                 for _ in range(CFG['tta']):\n# #                     val_preds += [CFG['weights'][i]/sum(CFG['weights'])/CFG['tta']*inference_one_epoch(model, val_loader, device)]\n#                     tst_preds += [CFG['weights'][i]/sum(CFG['weights'])/CFG['tta']*inference_one_epoch(model, tst_loader, device)]\n\n# #         val_preds = np.mean(val_preds, axis=0) \n#         tst_preds = np.mean(tst_preds, axis=0) \n        \n# #         print('fold {} validation loss = {:.5f}'.format(fold, log_loss(valid_.label.values, val_preds)))\n# #         print('fold {} validation accuracy = {:.5f}'.format(fold, (valid_.label.values==np.argmax(val_preds, axis=1)).mean()))\n        \n#         del model\n#         torch.cuda.empty_cache()","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:17.155025Z","iopub.execute_input":"2023-10-21T17:14:17.155367Z","iopub.status.idle":"2023-10-21T17:14:17.167293Z","shell.execute_reply.started":"2023-10-21T17:14:17.155316Z","shell.execute_reply":"2023-10-21T17:14:17.166599Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# if __name__ == '__main__':\n#      # for training only, need nightly build pytorch\n\n#     seed_everything(CFG['seed'])\n    \n#     folds = StratifiedKFold(n_splits=CFG['fold_num']).split(np.arange(train.shape[0]), train.label.values)\n    \n#     for fold, (trn_idx, val_idx) in enumerate(folds):\n#         # we'll train fold 0 first\n#         if fold > 0:\n#             break \n\n#         print('Inference fold {} started'.format(fold))\n\n#         valid_ = train.loc[val_idx,:].reset_index(drop=True)\n#         valid_ds = CassavaDataset(valid_, '../input/cassava-leaf-disease-classification/train_images/', transforms=get_inference_transforms(), output_label=False)\n        \n#         test = pd.DataFrame()\n#         test['image_id'] = list(os.listdir('../input/cassava-leaf-disease-classification/test_images/'))\n#         test_ds = CassavaDataset(test, '../input/cassava-leaf-disease-classification/test_images/', transforms=get_inference_transforms(), output_label=False)\n        \n#         val_loader = torch.utils.data.DataLoader(\n#             valid_ds, \n#             batch_size=CFG['valid_bs'],\n#             num_workers=CFG['num_workers'],\n#             shuffle=False,\n#             pin_memory=False,\n#         )\n        \n#         tst_loader = torch.utils.data.DataLoader(\n#             test_ds, \n#             batch_size=CFG['valid_bs'],\n#             num_workers=CFG['num_workers'],\n#             shuffle=False,\n#             pin_memory=False,\n#         )\n\n#         device = torch.device(CFG['device'])\n#         model = EnsembleClassifier(CFG['model_arch'], train.label.nunique()).to(device)\n        \n#         val_preds = []\n#         tst_preds = []\n        \n#         #for epoch in range(CFG['epochs']-3):\n#         for i in range(2):\n#             if i ==0:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-94-02/pytorch-efficientnet-baseline-train-94/tf_efficientnet_b4_ns_fold_0_3\"\n#             if i ==1:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-94-02/pytorch-efficientnet-baseline-train-94/tf_efficientnet_b4_ns_fold_1_5\"\n#             if i ==2:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-94-02/pytorch-efficientnet-baseline-train-94/tf_efficientnet_b4_ns_fold_2_4\"\n#             if i ==3:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-94-02/tf_efficientnet_b4_ns_fold_3_7\"\n#             if i ==4:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-94-02/tf_efficientnet_b4_ns_fold_4_4\"\n#             model.load(torch.load(ef_path))  \n#             with torch.no_grad():\n#                 for _ in range(1):\n#                     val_preds += [CFG['weights'][i]/sum(CFG['weights'])/CFG['tta']*inference_one_epoch(model,val_loader, val_loader, device)]\n#                     tst_preds += [CFG['weights'][i]/sum(CFG['weights'])/CFG['tta']*inference_one_epoch(model,val_loader, tst_loader, device)]\n\n#         val_preds = np.mean(val_preds, axis=0) \n#         tst_preds = np.mean(tst_preds, axis=0) \n        \n#         print('fold {} validation loss = {:.5f}'.format(fold, log_loss(valid_.label.values, val_preds)))\n#         print('fold {} validation accuracy = {:.5f}'.format(fold, (valid_.label.values==np.argmax(val_preds, axis=1)).mean()))\n        \n#         del model\n#         torch.cuda.empty_cache()","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:17.168353Z","iopub.execute_input":"2023-10-21T17:14:17.168606Z","iopub.status.idle":"2023-10-21T17:14:17.180566Z","shell.execute_reply.started":"2023-10-21T17:14:17.168582Z","shell.execute_reply":"2023-10-21T17:14:17.179564Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TEST_PATH = '../input/cassava-leaf-disease-classification/test_images'","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:17.181894Z","iopub.execute_input":"2023-10-21T17:14:17.182278Z","iopub.status.idle":"2023-10-21T17:14:17.193408Z","shell.execute_reply.started":"2023-10-21T17:14:17.182239Z","shell.execute_reply":"2023-10-21T17:14:17.192774Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 正常版本\nif __name__ == '__main__':\n     # for training only, need nightly build pytorch\n\n    seed_everything(CFG['seed'])\n    \n#     folds = StratifiedKFold(n_splits=CFG['fold_num']).split(np.arange(train.shape[0]), train.label.values)\n    \n    for fold in range(1):\n        print('Inference fold {} started'.format(fold))        \n        test = pd.DataFrame()\n        test['image_id'] = list(os.listdir('../input/cassava-leaf-disease-classification/test_images/'))\n        test_ds_vit = CassavaDataset(test, '../input/cassava-leaf-disease-classification/test_images/', transforms=get_inference_transforms_vit(), output_label=False)       \n        test_ds_ef = CassavaDataset(test, '../input/cassava-leaf-disease-classification/test_images/', transforms=get_inference_transforms_ef(), output_label=False)       \n        tst_loader_vit = torch.utils.data.DataLoader(\n            test_ds_vit, \n            batch_size=CFG['valid_bs'],\n            num_workers=CFG['num_workers'],\n            shuffle=False,\n            pin_memory=False,\n        )\n        tst_loader_ef = torch.utils.data.DataLoader(\n            test_ds_ef, \n            batch_size=CFG['valid_bs'],\n            num_workers=CFG['num_workers'],\n            shuffle=False,\n            pin_memory=False,\n        )\n\n        device = torch.device(CFG['device'])\n        model = EnsembleClassifier(CFG['model_arch'], train.label.nunique()).to(device)\n        \n        val_preds = []\n        tst_preds = []\n        tst_preds1=[]\n        for i in range(5):\n            if i ==0:\n                ef_path=\"../input/d8-pytorch-effnet-01-93/tf_efficientnet_b4_ns_fold_0_6\"\n            if i ==1:\n                ef_path=\"../input/d8-pytorch-effnet-02-0107/tf_efficientnet_b4_ns_fold_1_8\"\n            if i ==2:\n                ef_path=\"../input/d8-pytorch-effnet-03-94/tf_efficientnet_b4_ns_fold_2_7\"\n            if i ==3:\n                ef_path=\"../input/d8-pytorch-effnet-04-92/tf_efficientnet_b4_ns_fold_3_7\"\n            if i ==4:\n                ef_path=\"../input/d8-pytorch-effnet-05-92/tf_efficientnet_b4_ns_fold_4_7\"\n            model.load(torch.load(ef_path))        \n            with torch.no_grad():\n                for _ in range(CFG['tta']):\n                    tst_preds += [inference_one_epoch(model, tst_loader_vit,tst_loader_ef, device)]\n                    print(\"tst_preds:\",tst_preds)\n        tst_preds = np.mean(tst_preds, axis=0)  \n        print(\"tst_preds1:\",tst_preds)\n#         for i in range(5):\n#             if i ==0:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-93-02/tf_efficientnet_b4_ns_fold_0_5\"\n#             if i ==1:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-93-02/tf_efficientnet_b4_ns_fold_1_8\"\n#             if i ==2:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-93-02/tf_efficientnet_b4_ns_fold_2_7\"\n#             if i ==3:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-93-02/tf_efficientnet_b4_ns_fold_3_3\"\n#             if i ==4:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-93-02/tf_efficientnet_b4_ns_fold_4_8\"\n#             model.load(torch.load(ef_path))        \n#             with torch.no_grad():\n#                 for _ in range(CFG['tta']):\n#                     tst_preds1 += [inference_one_epoch(model, tst_loader_vit,tst_loader_ef, device)]\n#         tst_preds1 = np.mean(tst_preds, axis=0) \n#         tst_preds=tst_preds1*0.5+tst_preds*0.5\n#         print(\"tst_preds:\",tst_preds)\n        # ====================================================\n        # inference ResNet\n        # ====================================================\n#         modelRsNet = CustomResNext(CFG['model_name'], pretrained=False)\n#         #states = [torch.load(MODEL_DIR+f'{CFG.model_name}_GradualWarmupSchedulerV2_fold{fold}_best.pth') for fold in CFG.trn_fold]\n#         #states = [load_state(MODEL_DIR+f'{CFG.model_name}_GradualWarmupSchedulerV2_fold{fold}_best.pth') for fold in CFG.trn_fold]\n#         #states = [load_state(MODEL_DIR+f'{CFG.model_name}_GradualWarmupSchedulerV2_fold{fold}_best_coarsedrop_1129.pth') for fold in CFG.trn_fold]\n#         states = [load_state(MODEL_DIR+f'resnext50_32x4d_fold{fold}.pth') for fold in [0, 1, 2, 3, 4]]\n#         test_dataset = TestDataset(testResNet, transform=get_transforms(data='valid'))\n#         test_loader = DataLoader(test_dataset, batch_size=CFG['valid_bs'], shuffle=False, \n#                                  num_workers=4, pin_memory=True)\n#         predictions = inference(modelRsNet, states, test_loader, device)\n# #         print(\"predictions:\",predictions)\n        tst_preds=tst_preds\n#         print(tst_preds)\n        # submission\n#         test['label'] = predictions.argmax(1)\n#         test[['image_id', 'label']].to_csv(OUTPUT_DIR+'submission.csv', index=False)\n#         test.head()\n        \n        del model\n        torch.cuda.empty_cache()","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:17:41.709949Z","iopub.execute_input":"2023-10-21T17:17:41.710320Z","iopub.status.idle":"2023-10-21T17:17:51.324736Z","shell.execute_reply.started":"2023-10-21T17:17:41.710283Z","shell.execute_reply":"2023-10-21T17:17:51.323679Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # 预测单个模型版本\n# if __name__ == '__main__':\n#      # for training only, need nightly build pytorch\n\n#     seed_everything(CFG['seed'])\n    \n# #     folds = StratifiedKFold(n_splits=CFG['fold_num']).split(np.arange(train.shape[0]), train.label.values)\n    \n#     for fold in range(1):\n#         print('Inference fold {} started'.format(fold))        \n#         test = pd.DataFrame()\n#         test['image_id'] = list(os.listdir('../input/cassava-leaf-disease-classification/test_images/'))\n#         test_ds_vit = CassavaDataset(test, '../input/cassava-leaf-disease-classification/test_images/', transforms=get_inference_transforms_vit(), output_label=False)       \n#         test_ds_ef = CassavaDataset(test, '../input/cassava-leaf-disease-classification/test_images/', transforms=get_inference_transforms_ef(), output_label=False)       \n#         tst_loader_vit = torch.utils.data.DataLoader(\n#             test_ds_vit, \n#             batch_size=CFG['valid_bs'],\n#             num_workers=CFG['num_workers'],\n#             shuffle=False,\n#             pin_memory=False,\n#         )\n#         tst_loader_ef = torch.utils.data.DataLoader(\n#             test_ds_ef, \n#             batch_size=CFG['valid_bs'],\n#             num_workers=CFG['num_workers'],\n#             shuffle=False,\n#             pin_memory=False,\n#         )\n\n#         device = torch.device(CFG['device'])\n#         model = EnsembleClassifier(CFG['model_arch'], train.label.nunique()).to(device)\n        \n#         val_preds = []\n#         tst_preds = []\n# #         ef_path=\"../input/d7-pytorch-effnet-baseline-train-93-02/tf_efficientnet_b4_ns_fold_4_7\"\n# #         model.load(torch.load(ef_path))        \n# #         with torch.no_grad():\n# #             for _ in range(CFG['tta']):\n# #                 tst_preds += [inference_one_epoch(model, tst_loader_vit,tst_loader_ef, device)]\n#         for i in range(5):\n#             if i ==0:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-93-02/tf_efficientnet_b4_ns_fold_0_5\"\n#             if i ==1:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-93-02/tf_efficientnet_b4_ns_fold_1_8\"\n#             if i ==2:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-93-02/tf_efficientnet_b4_ns_fold_2_7\"\n#             if i ==3:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-93-02/tf_efficientnet_b4_ns_fold_3_3\"\n#             if i ==4:\n#                 ef_path=\"../input/pytorch-efficientnet-baseline-train-93-02/tf_efficientnet_b4_ns_fold_4_8\"\n#             model.load(torch.load(ef_path))        \n#             with torch.no_grad():\n#                 for _ in range(CFG['tta']):\n#                     tst_preds += [inference_one_epoch(model, tst_loader_vit,tst_loader_ef, device)]\n#         tst_preds = np.mean(tst_preds, axis=0)     \n# #         print(\"tst_preds:\",tst_preds)\n# #         # ====================================================\n# #         # inference ResNet\n# #         # ====================================================\n# #         modelRsNet = CustomResNext(CFG['model_name'], pretrained=False)\n# #         #states = [torch.load(MODEL_DIR+f'{CFG.model_name}_GradualWarmupSchedulerV2_fold{fold}_best.pth') for fold in CFG.trn_fold]\n# #         #states = [load_state(MODEL_DIR+f'{CFG.model_name}_GradualWarmupSchedulerV2_fold{fold}_best.pth') for fold in CFG.trn_fold]\n# #         #states = [load_state(MODEL_DIR+f'{CFG.model_name}_GradualWarmupSchedulerV2_fold{fold}_best_coarsedrop_1129.pth') for fold in CFG.trn_fold]\n# #         states = [load_state(MODEL_DIR+f'resnext50_32x4d_fold{fold}.pth') for fold in [0, 1, 2, 3, 4]]\n# #         test_dataset = TestDataset(testResNet, transform=get_transforms(data='valid'))\n# #         test_loader = DataLoader(test_dataset, batch_size=CFG['valid_bs'], shuffle=False, \n# #                                  num_workers=4, pin_memory=True)\n# #         predictions = inference(modelRsNet, states, test_loader, device)\n# # #         print(\"predictions:\",predictions)\n# #         tst_preds=tst_preds*0.5+predictions*0.5\n# #         print(tst_preds)\n#         # submission\n# #         test['label'] = predictions.argmax(1)\n# #         test[['image_id', 'label']].to_csv(OUTPUT_DIR+'submission.csv', index=False)\n# #         test.head()\n        \n#         del model\n#         torch.cuda.empty_cache()","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:38.120373Z","iopub.execute_input":"2023-10-21T17:14:38.120798Z","iopub.status.idle":"2023-10-21T17:14:38.127764Z","shell.execute_reply.started":"2023-10-21T17:14:38.120751Z","shell.execute_reply":"2023-10-21T17:14:38.126790Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# tst_preds","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:38.129278Z","iopub.execute_input":"2023-10-21T17:14:38.129658Z","iopub.status.idle":"2023-10-21T17:14:38.142891Z","shell.execute_reply.started":"2023-10-21T17:14:38.129616Z","shell.execute_reply":"2023-10-21T17:14:38.142066Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test['label'] = np.argmax(tst_preds, axis=1)\ntest.head()","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:38.144050Z","iopub.execute_input":"2023-10-21T17:14:38.144429Z","iopub.status.idle":"2023-10-21T17:14:38.162053Z","shell.execute_reply.started":"2023-10-21T17:14:38.144399Z","shell.execute_reply":"2023-10-21T17:14:38.161143Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2023-10-21T17:14:38.163414Z","iopub.execute_input":"2023-10-21T17:14:38.163775Z","iopub.status.idle":"2023-10-21T17:14:38.558781Z","shell.execute_reply.started":"2023-10-21T17:14:38.163737Z","shell.execute_reply":"2023-10-21T17:14:38.557845Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Please upvote the original notebook as well","metadata":{}}]}