{"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":"# import","metadata":{"papermill":{"duration":0.006909,"end_time":"2023-10-23T04:32:24.761329","exception":false,"start_time":"2023-10-23T04:32:24.754420","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import torch\nfrom torch import nn\nimport torch.nn.functional as F\nimport torchvision\nimport math\nimport matplotlib.pyplot as plt\nimport albumentations as A\nfrom albumentations.pytorch import ToTensorV2\nfrom torch.utils.data import Dataset\nimport pandas as pd\nimport numpy as np\nfrom  PIL import Image\nimport os\nimport random\nfrom tqdm import tqdm\nimport timm\nimport sys\nsys.path.insert(0, '../input/tiny-vit-model')\nimport tiny_vit","metadata":{"collapsed":false,"execution":{"iopub.execute_input":"2023-10-23T04:32:24.776128Z","iopub.status.busy":"2023-10-23T04:32:24.775758Z","iopub.status.idle":"2023-10-23T04:32:33.663701Z","shell.execute_reply":"2023-10-23T04:32:33.662866Z"},"papermill":{"duration":8.898094,"end_time":"2023-10-23T04:32:33.666182","exception":false,"start_time":"2023-10-23T04:32:24.768088","status":"completed"},"tags":[],"ExecuteTime":{"end_time":"2023-11-02T04:59:56.991941400Z","start_time":"2023-11-02T04:59:35.071155800Z"},"jupyter":{"outputs_hidden":false}},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 定义参数","metadata":{"papermill":{"duration":0.00643,"end_time":"2023-10-23T04:32:33.679374","exception":false,"start_time":"2023-10-23T04:32:33.672944","status":"completed"},"tags":[]}},{"cell_type":"code","source":"TRAIN_CSV_PATH = '../input/cassava-leaf-disease-classification/train.csv'\nTEST_IMAGE_PATH = '../input/cassava-leaf-disease-classification/test_images/'\nSUBMISSION_PATH = 'submission.csv'\nRES50_PATH = '../input/ensemble-1023/1022_res50.pth'\nB4NS_PATH = '../input/ensemble-1023/1022_b4ns.pth'\nB5NS_PATH = '../input/ensemble-1023/b5v2.pth'\nTINY_VIT_PATH = '../input/1103-tinyvit/tinyvit.pth'\nCROPNET_PATH  = '../input/cropnet/cropnet'\nDEVICES = [torch.device(f'cuda:{i}') for i in range(torch.cuda.device_count())]\nOUT_CLASSES = 5\nIMAGE_SIZE = 512\nSEED = 42\nTTA_1 = 5\nTTA_2 = 5\nTTA_3 = 3","metadata":{"collapsed":false,"execution":{"iopub.execute_input":"2023-10-23T04:32:33.693685Z","iopub.status.busy":"2023-10-23T04:32:33.693367Z","iopub.status.idle":"2023-10-23T04:32:33.714450Z","shell.execute_reply":"2023-10-23T04:32:33.713730Z"},"papermill":{"duration":0.030426,"end_time":"2023-10-23T04:32:33.716467","exception":false,"start_time":"2023-10-23T04:32:33.686041","status":"completed"},"tags":[],"ExecuteTime":{"end_time":"2023-11-02T04:59:58.549149300Z","start_time":"2023-11-02T04:59:56.991941400Z"},"jupyter":{"outputs_hidden":false}},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# tr5.seed","metadata":{"papermill":{"duration":0.007719,"end_time":"2023-10-23T04:32:34.243258","exception":false,"start_time":"2023-10-23T04:32:34.235539","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def seed_everything(seed=42):\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# os.environ[\"CUDA_LAUNCH_BLOCKING\"] = \"1\"\nseed_everything(SEED)","metadata":{"ExecuteTime":{"end_time":"2023-10-17T15:15:34.278494800Z","start_time":"2023-10-17T15:15:34.268375900Z"},"collapsed":false,"execution":{"iopub.execute_input":"2023-10-23T04:32:34.258930Z","iopub.status.busy":"2023-10-23T04:32:34.258206Z","iopub.status.idle":"2023-10-23T04:32:34.268398Z","shell.execute_reply":"2023-10-23T04:32:34.267745Z"},"papermill":{"duration":0.019977,"end_time":"2023-10-23T04:32:34.270269","exception":false,"start_time":"2023-10-23T04:32:34.250292","status":"completed"},"tags":[],"jupyter":{"outputs_hidden":false}},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 定义模型","metadata":{"papermill":{"duration":0.007313,"end_time":"2023-10-23T04:32:34.298789","exception":false,"start_time":"2023-10-23T04:32:34.291476","status":"completed"},"tags":[]}},{"cell_type":"code","source":"model_name1 = \"resnext50_32x4d\"\nmy_model_1 = timm.create_model(model_name1, pretrained=False)\nmy_model_1.fc = nn.Linear(my_model_1.fc.in_features, OUT_CLASSES)","metadata":{"ExecuteTime":{"end_time":"2023-10-17T15:16:13.295628600Z","start_time":"2023-10-17T15:16:13.142310100Z"},"collapsed":false,"execution":{"iopub.execute_input":"2023-10-23T04:32:34.315814Z","iopub.status.busy":"2023-10-23T04:32:34.315472Z","iopub.status.idle":"2023-10-23T04:32:34.769651Z","shell.execute_reply":"2023-10-23T04:32:34.768673Z"},"papermill":{"duration":0.465335,"end_time":"2023-10-23T04:32:34.772093","exception":false,"start_time":"2023-10-23T04:32:34.306758","status":"completed"},"tags":[],"jupyter":{"outputs_hidden":false}},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_name2 = \"efficientnet_b5.sw_in12k_ft_in1k\"\nmy_model_2 = timm.create_model(model_name2, pretrained=False)\nmy_model_2.classifier = nn.Linear(my_model_2.classifier.in_features, OUT_CLASSES)","metadata":{"ExecuteTime":{"end_time":"2023-10-17T15:16:14.257983Z","start_time":"2023-10-17T15:16:14.028862200Z"},"collapsed":false,"execution":{"iopub.execute_input":"2023-10-23T04:32:34.789865Z","iopub.status.busy":"2023-10-23T04:32:34.789529Z","iopub.status.idle":"2023-10-23T04:32:35.159497Z","shell.execute_reply":"2023-10-23T04:32:35.158497Z"},"papermill":{"duration":0.381781,"end_time":"2023-10-23T04:32:35.162337","exception":false,"start_time":"2023-10-23T04:32:34.780556","status":"completed"},"tags":[],"jupyter":{"outputs_hidden":false}},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"my_model_3 = tiny_vit.tiny_vit_21m_512(pretrained=False)\nmy_model_3.head = nn.Linear(my_model_3.head.in_features, OUT_CLASSES)","metadata":{"collapsed":false,"ExecuteTime":{"end_time":"2023-11-02T05:00:07.786901300Z","start_time":"2023-11-02T05:00:07.581798500Z"},"jupyter":{"outputs_hidden":false}},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"torch.cuda.empty_cache()","metadata":{"collapsed":false,"execution":{"iopub.execute_input":"2023-10-23T04:32:35.218486Z","iopub.status.busy":"2023-10-23T04:32:35.217703Z","iopub.status.idle":"2023-10-23T04:32:35.222333Z","shell.execute_reply":"2023-10-23T04:32:35.221402Z"},"papermill":{"duration":0.016437,"end_time":"2023-10-23T04:32:35.224281","exception":false,"start_time":"2023-10-23T04:32:35.207844","status":"completed"},"tags":[],"jupyter":{"outputs_hidden":false}},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 验证","metadata":{"papermill":{"duration":0.008556,"end_time":"2023-10-23T04:32:35.241681","exception":false,"start_time":"2023-10-23T04:32:35.233125","status":"completed"},"tags":[]}},{"cell_type":"code","source":"test_augs = A.Compose([\n    A.OneOf([\n        A.Resize(IMAGE_SIZE, IMAGE_SIZE, p=1.0),\n        A.CenterCrop(IMAGE_SIZE, IMAGE_SIZE, p=1.0),\n        A.RandomResizedCrop(IMAGE_SIZE, IMAGE_SIZE, p=1.0)\n    ], p=1.0),\n    A.Transpose(p=0.5),\n    A.HorizontalFlip(p=0.5),\n    A.VerticalFlip(p=0.5),\n    A.Resize(IMAGE_SIZE, IMAGE_SIZE),\n    A.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.0\n)\n\nIMAGE_SIZE1 = 512\nIMAGE_SIZE2 = 224\ntest_augs_tf = A.Compose([A.RandomResizedCrop(IMAGE_SIZE1, IMAGE_SIZE1),\n                   A.Resize(IMAGE_SIZE2, IMAGE_SIZE2)])\n\npreds_1 = []\nmodel_param = torch.load(RES50_PATH)\nnew_model_param = {k[7:]: v for k, v in model_param.items() if 'module.' in k}\nmy_model_1.load_state_dict(new_model_param)\nmy_model_1 = my_model_1.to(DEVICES[0])\nmy_model_1.eval()\ntest_image_list = np.asarray([image_name for image_name in os.listdir(TEST_IMAGE_PATH)])\nfor single_image_name in test_image_list:\n    with torch.no_grad():\n        ans = torch.zeros(5).cuda()\n        for _ in range(1):\n            image = Image.open(os.path.join(TEST_IMAGE_PATH, single_image_name))\n            aug_image = test_augs(image=np.array(image))['image']\n            test_image = torch.tensor(aug_image, dtype=torch.float).unsqueeze(0).cuda()\n            ans += my_model_1(test_image).view(ans.shape)\n        preds_1.append(ans)\npredictions_1 = torch.stack(preds_1, dim=0).to('cpu')\nnormalize_pred_1 = F.normalize(predictions_1.T, p=2, dim=0).T\ntorch.cuda.empty_cache()\n\n\npreds_2 = []\nmodel_param = torch.load(B5NS_PATH)\nnew_model_param = {k[7:]: v for k, v in model_param.items() if 'module.' in k}\nmy_model_2.load_state_dict(new_model_param)\nmy_model_2 = my_model_2.to(DEVICES[0])\nmy_model_2.eval()\ntest_image_list = np.asarray([image_name for image_name in os.listdir(TEST_IMAGE_PATH)])\nfor single_image_name in test_image_list:\n    with torch.no_grad():\n        ans = torch.zeros(5).cuda()\n        for _ in range(TTA_1):\n            image = Image.open(os.path.join(TEST_IMAGE_PATH, single_image_name))\n            aug_image = test_augs(image=np.array(image))['image']\n            test_image = torch.tensor(aug_image, dtype=torch.float).unsqueeze(0).cuda()\n            ans += my_model_2(test_image).view(ans.shape)\n        ans /= TTA_1\n        preds_2.append(ans)\npredictions_2 = torch.stack(preds_2, dim=0).to('cpu')\nnormalize_pred_2 = F.normalize(predictions_2.T, p=2, dim=0).T\nnormalize_pred_2 = normalize_pred_2.cpu()\ntorch.cuda.empty_cache()\n\n\npreds_3 = []\nmodel_param = torch.load(TINY_VIT_PATH)\nnew_model_param = {k[7:]: v for k, v in model_param.items() if 'module.' in k}\nmy_model_3.load_state_dict(new_model_param)\nmy_model_3 = my_model_3.to(DEVICES[0])\nmy_model_3.eval()\ntest_image_list = np.asarray([image_name for image_name in os.listdir(TEST_IMAGE_PATH)])\nfor single_image_name in test_image_list:\n    with torch.no_grad():\n        ans = torch.zeros(5).cuda()\n        for _ in range(TTA_2):\n            image = Image.open(os.path.join(TEST_IMAGE_PATH, single_image_name))\n            aug_image = test_augs(image=np.array(image))['image']\n            test_image = torch.tensor(aug_image, dtype=torch.float).unsqueeze(0).cuda()\n            ans += my_model_3(test_image).view(ans.shape)\n        ans /= TTA_2\n        preds_3.append(ans)\npredictions_3 = torch.stack(preds_3, dim=0).to('cpu')\nnormalize_pred_3 = F.normalize(predictions_3.T, p=2, dim=0).T\ntorch.cuda.empty_cache()\n\nimport tensorflow as tf\nmy_model_4 = tf.keras.models.load_model(CROPNET_PATH)\npreds_4 = []\ntest_image_list = np.asarray([image_name for image_name in os.listdir(TEST_IMAGE_PATH)])\nfor single_image_name in test_image_list:\n    ans = torch.zeros(5)\n    for _ in range(TTA_3):\n        image = Image.open(os.path.join(TEST_IMAGE_PATH, single_image_name))\n        test_image = np.array([test_augs_tf(image=np.asarray(image))['image']]) / 255.0\n        ans += (my_model_4(test_image).numpy())[0][0: 5]\n    ans /= TTA_3\n    preds_4.append(ans)\npredictions_4 = torch.stack(preds_4, dim=0)\nnormalize_pred_4 = F.normalize(predictions_4.T, p=2, dim=0).T\ntorch.cuda.empty_cache()\n\nfinal_pred = (normalize_pred_1 * 0.5) + (normalize_pred_2 * 1.0) + (normalize_pred_3 * 1.15) + (normalize_pred_4 * 1.1)\n\nlabel = final_pred.argmax(dim=-1).numpy()\nlabel_list = list(label)\ndf_submission = pd.DataFrame(columns=pd.read_csv(TRAIN_CSV_PATH).columns)\ndf_submission['image_id'] = pd.DataFrame(test_image_list)\ndf_submission['label'] = pd.DataFrame(label_list)\ndf_submission.to_csv(SUBMISSION_PATH, index=False)","metadata":{"collapsed":false,"execution":{"iopub.execute_input":"2023-10-23T04:32:35.260356Z","iopub.status.busy":"2023-10-23T04:32:35.259806Z","iopub.status.idle":"2023-10-23T04:32:47.061725Z","shell.execute_reply":"2023-10-23T04:32:47.060760Z"},"papermill":{"duration":11.813702,"end_time":"2023-10-23T04:32:47.063973","exception":false,"start_time":"2023-10-23T04:32:35.250271","status":"completed"},"tags":[],"jupyter":{"outputs_hidden":false}},"execution_count":null,"outputs":[]}]}