{"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":"code","source":"# # This Python 3 environment comes with many helpful analytics libraries installed\n# # It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# # For example, here's several helpful packages to load\n\n# import numpy as np # linear algebra\n# import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# # Input data files are available in the read-only \"../input/\" directory\n# # For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\n# import os\n# for dirname, _, filenames in os.walk('/kaggle/input'):\n#     for filename in filenames:\n#         print(os.path.join(dirname, filename))\n\n# # You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# # You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-12-24T06:17:56.133249Z","iopub.execute_input":"2022-12-24T06:17:56.133738Z","iopub.status.idle":"2022-12-24T06:17:56.14195Z","shell.execute_reply.started":"2022-12-24T06:17:56.133679Z","shell.execute_reply":"2022-12-24T06:17:56.140877Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! nvidia-smi","metadata":{"execution":{"iopub.status.busy":"2022-12-24T06:17:56.146379Z","iopub.execute_input":"2022-12-24T06:17:56.14711Z","iopub.status.idle":"2022-12-24T06:17:57.685222Z","shell.execute_reply.started":"2022-12-24T06:17:56.147081Z","shell.execute_reply":"2022-12-24T06:17:57.684065Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! pip install timm","metadata":{"execution":{"iopub.status.busy":"2022-12-24T06:17:57.686486Z","iopub.execute_input":"2022-12-24T06:17:57.688069Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from timm.data import create_transform\nimport torch\nfrom torch.utils.data import Dataset\nimport torch.nn as nn\nfrom PIL import Image\nfrom sklearn.model_selection import StratifiedKFold\nimport timm.optim.optim_factory as optim_factory\nfrom sklearn.metrics import classification_report\nimport pandas as pd\nimport numpy as np\nimport cv2\nimport timm\nimport tqdm\nimport albumentations\nfrom albumentations.pytorch import ToTensorV2","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"NUM_EPOCHS = 4\nNUM_SPLITS = 4\n\nRESIZE_TO = (512, 512)\n\nDATA_PATH = '/kaggle/input/rsna-breast-cancer-detection/'\nTRAIN_IMAGE_DIR = '/kaggle/input/rsnabcd-512-png-v2-dataset/train_images/'\n# TEST_DICOM_DIR = '/kaggle/input/rsna-breast-cancer-detection/test_images/'\n# SAVE_FOLDER = \"/kaggle/tmp/output/\"\n# MODEL_PATH = ''","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_csv = pd.read_csv(f'{DATA_PATH}/train.csv')\n# test_csv = pd.read_csv(f'{DATA_PATH}/test.csv')\n\n# train_csv['path'] = TRAIN_IMAGE_DIR + train_csv[\"patient_id\"].astype(str) + \"_\" + train_csv[\"image_id\"].astype(str) + \".png\"\ntrain_csv['path'] = TRAIN_IMAGE_DIR + train_csv[\"patient_id\"].astype(str) + \"/\" + train_csv[\"image_id\"].astype(str) + \".png\"\n# test_csv['path'] = TEST_DICOM_DIR + test_csv['patient_id'].astype(str) + '/' + test_csv[\"image_id\"].astype(str) + \".dcm\"\n\nskf = StratifiedKFold(NUM_SPLITS, shuffle=True, random_state=7)\n\ndata_train=train_csv['path'].values\nlabels_train=train_csv['cancer'].values\n\n# data_test=test_csv['path'].values","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# img = Image.open(train_csv['path'].values[2])\n# np.array(img).max()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class GetLoader(Dataset):\n    def __init__(self, transform, data_train=train_csv['path'].values, labels_train=train_csv['cancer'].values, is_train=True):\n        self.data = data_train\n        self.label = labels_train\n        self.trans = transform\n\n    def __getitem__(self, index):\n        data = Image.open(self.data[index]).convert(\"RGB\")\n        data = torch.tensor(self.trans(data)).cuda()\n        labels = torch.tensor(self.label[index]).cuda()\n        return data, labels\n\n    def __len__(self):\n        return len(self.data)\n\n\ndef build_transform(is_train):\n    if is_train:\n        transform = create_transform(\n            RESIZE_TO, is_training=True)\n    else:\n        transform = create_transform(\n            RESIZE_TO, is_training=False)\n\n    return transform\n\n\ndef build_dataset(data_train=train_csv['path'].values, labels_train=train_csv['cancer'].values, is_train=True):\n    transform = build_transform(is_train)\n    dataset = GetLoader(transform,data_train, labels_train, is_train=True)\n    return dataset","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def tf_efficientnetv2_s():\n    model = timm.create_model(\n        'tf_efficientnetv2_s', pretrained=True, in_chans=3, num_classes=1,)\n    return model","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"epochs = 4\nbatch_size = 8\nTHRESHOLD = 0.16","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# train_dataset = build_dataset(is_train=True)\n# train_dataloader = torch.utils.data.DataLoader(train_dataset,batch_size=128,drop_last=True)\n# prediction = []\n# labels = []\n# model.eval()\n# for img, label in tqdm.tqdm(train_dataloader):\n#     output = model(img)\n# #     pred_list = (output.detach().cpu().numpy() > THRESHOLD).astype(int)\n#     pred_list = (output.detach().cpu().numpy())\n#     labe_list = label.cpu().numpy()\n#     prediction = np.append(prediction,pred_list)\n#     labels = np.append(labels,labe_list)\n# print(prediction.shape)\n# print(classification_report(labels,prediction))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# pres = [nn.Sigmoid()(torch.tensor(i)).item() for i in prediction]","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# pres = [nn.Sigmoid()(torch.tensor(i)).item() for i in prediction]\n# THRESHOLD = 0.014\n# pres = [int(i>THRESHOLD) for i in pres]\n# print(classification_report(labels,pres))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# pres = [nn.Sigmoid()(torch.tensor(i)).item() for i in prediction]\n# np.absolutearray(pres).max()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# X_train= np.array(data_train)\n# y_train = np.array(labels_train)\n# train_dataset = build_dataset(X_train, y_train,is_train=True)\n# train_dataloader = torch.utils.data.DataLoader(\n# train_dataset,\n# batch_size=batch_size,\n# drop_last=True,\n# )\n# model = efficientnet_b4().cuda()\n# model_without_ddp = model\n# #         print(\"Model = %s\" % str(model_without_ddp))\n# param_groups = optim_factory.param_groups_weight_decay(model_without_ddp,0.05)\n# optimizer = torch.optim.AdamW(param_groups, lr=0.001, betas=(0.9, 0.95))\n# loss = nn.MSELoss()\n# model.train()\n\n# for epoch in range(epochs):\n#     for img, label in tqdm.tqdm(train_dataloader):\n#         label = label.unsqueeze(1)\n#         l = loss(model(img),label.float())\n#         optimizer.zero_grad()\n#         l.backward()\n#         optimizer.step()\n#     print(l)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for train_index, test_index in skf.split(data_train,labels_train):\n        X_train, X_test = np.array(data_train)[train_index], np.array(data_train)[test_index]\n        y_train, y_test = np.array(labels_train)[train_index], np.array(labels_train)[test_index]\n        train_dataset = build_dataset(X_train, y_train,is_train=True)\n        train_dataloader = torch.utils.data.DataLoader(\n        train_dataset,\n        batch_size=batch_size,\n        drop_last=True,\n    )\n        test_dataset = build_dataset(X_test, y_test,is_train=False)\n        test_dataloader = torch.utils.data.DataLoader(\n        test_dataset,\n        batch_size=batch_size,\n        drop_last=False,\n    )\n        model = tf_efficientnetv2_s().cuda()\n        model_without_ddp = model\n        param_groups = optim_factory.param_groups_weight_decay(model_without_ddp,0.05)\n        optimizer = torch.optim.AdamW(param_groups, lr=3e-4, betas=(0.9, 0.999))\n        loss = nn.BCELoss().cuda()\n        model.train()\n        \n        for epoch in range(epochs):\n            model.train()\n            for img, label in tqdm.tqdm(train_dataloader):\n                label = label.unsqueeze(1)\n                l = loss(nn.Sigmoid()(model(img)),label.float())\n                optimizer.zero_grad()\n                l.backward()\n                optimizer.step()\n            print(\"loss:{}\".format(l))\n            prediction = []\n            labels = []\n            model.eval()\n            for img, label in test_dataloader:\n                output = nn.Sigmoid()(model(img))\n                pred_list = (output.detach().cpu().numpy() > THRESHOLD).astype(int)\n                labe_list = label.cpu().numpy()\n                prediction = np.append(prediction,pred_list)\n                labels = np.append(labels,labe_list)\n            print(prediction.shape)\n            print(classification_report(labels,prediction))\n        break","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# prediction = []\n# labels = []\n# for img, label in test_dataloader:\n#     output = model(img)\n#     pred_list = (output.detach().cpu().numpy() > THRESHOLD).astype(int)\n#     labe_list = label.cpu().numpy()\n#     prediction = np.append(prediction,pred_list)\n#     labels = np.append(labels,labe_list)\n# print(prediction.shape)\n# print(classification_report(labels,prediction))\n# #     break\n# #     output = model(img)\n    \n\n# #     label =label.argmax(dim=1, keepdim=True).flatten()\n# #     pred_list = pred.cpu().numpy()\n# #     labe_list = label.cpu().numpy()\n# #     prediction = np.append(prediction,pred_list)\n# #     labels = np.append(labels,labe_list)\n# # print(prediction.shape)\n# # print(classification_report(labels,prediction))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"torch.save(model.state_dict(),'/kaggle/working/tf_efficientnetv2_s.pth')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"! nvidia-smi","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}