{"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":"\nimport os, sys, math, json\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport skimage.io\n\nfrom skimage.transform import resize\nfrom imgaug import augmenters as iaa\nfrom tqdm import tqdm\nimport PIL\nfrom PIL import Image, ImageOps\nimport cv2\nfrom sklearn.utils import class_weight, shuffle\n\n%matplotlib inline\n\nimport scipy\nimport tensorflow as tf\n\nfrom tensorflow.keras.losses import binary_crossentropy\nfrom tensorflow.keras.applications.resnet50 import preprocess_input\nimport tensorflow.keras.backend as K\nfrom tensorflow.keras.utils import Sequence\nfrom tensorflow.keras.utils import to_categorical\n\nfrom tensorflow.keras import layers\nfrom tensorflow.keras.applications import DenseNet121\nfrom tensorflow.keras.callbacks import Callback, ModelCheckpoint\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.optimizers import Adam\n\nfrom sklearn.metrics import f1_score, fbeta_score\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import cohen_kappa_score, accuracy_score\n\n\nWORKERS = 2\nCHANNEL = 3\n\nimport warnings\nwarnings.filterwarnings(\"ignore\")\n\nnp.random.seed(42)\ntf.random.set_seed(42)\n\nIMG_SIZE = 512\nNUM_CLASSES = 5\nSEED = 42\nTRAIN_NUM = 1000 # use 1000 when you just want to explore new idea, use -1 for full train\n\n#### Starting with just 2019 data","metadata":{"execution":{"iopub.status.busy":"2023-04-11T14:05:19.279475Z","iopub.execute_input":"2023-04-11T14:05:19.280485Z","iopub.status.idle":"2023-04-11T14:05:19.296298Z","shell.execute_reply.started":"2023-04-11T14:05:19.280439Z","shell.execute_reply":"2023-04-11T14:05:19.295238Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train = pd.read_csv('../input/diabetic-retinopathy-resized/trainLabels.csv')\ndf_test = pd.read_csv('../input/aptos2019-blindness-detection/test.csv')\n\nprint(df_test.shape[0])","metadata":{"execution":{"iopub.status.busy":"2023-04-11T14:07:50.817719Z","iopub.execute_input":"2023-04-11T14:07:50.818157Z","iopub.status.idle":"2023-04-11T14:07:50.849333Z","shell.execute_reply.started":"2023-04-11T14:07:50.818117Z","shell.execute_reply":"2023-04-11T14:07:50.848293Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train['level'].value_counts().plot(kind='bar')\ndf_train.level.value_counts()","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-04-11T14:05:19.426296Z","iopub.execute_input":"2023-04-11T14:05:19.426727Z","iopub.status.idle":"2023-04-11T14:05:19.709856Z","shell.execute_reply.started":"2023-04-11T14:05:19.426688Z","shell.execute_reply":"2023-04-11T14:05:19.708987Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class_weights = df_train['level'].value_counts()\ndfs = [df_train[df_train['level'] == i].sample(5*(2 if i < 3 else 1),replace=True) for i in range(5)]\nresampled = pd.concat(dfs, axis = 0).reset_index(drop=True)\nresampled","metadata":{"execution":{"iopub.status.busy":"2023-04-11T14:05:19.711399Z","iopub.execute_input":"2023-04-11T14:05:19.712161Z","iopub.status.idle":"2023-04-11T14:05:19.751907Z","shell.execute_reply.started":"2023-04-11T14:05:19.712126Z","shell.execute_reply":"2023-04-11T14:05:19.750475Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"resampled.level.value_counts()","metadata":{"execution":{"iopub.status.busy":"2023-04-11T14:05:19.753272Z","iopub.execute_input":"2023-04-11T14:05:19.753655Z","iopub.status.idle":"2023-04-11T14:05:19.763102Z","shell.execute_reply.started":"2023-04-11T14:05:19.753618Z","shell.execute_reply":"2023-04-11T14:05:19.761759Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train=resampled","metadata":{"execution":{"iopub.status.busy":"2023-04-11T14:05:19.765417Z","iopub.execute_input":"2023-04-11T14:05:19.765815Z","iopub.status.idle":"2023-04-11T14:05:19.773022Z","shell.execute_reply.started":"2023-04-11T14:05:19.765776Z","shell.execute_reply":"2023-04-11T14:05:19.771756Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def display_samples(df, columns=4, rows=3, gauss=False):\n    fig=plt.figure(figsize=(5*columns, 4*rows))\n\n    for i in range(columns*rows):\n        image_path = df.loc[i,'image']\n        image_id = df.loc[i,'level']\n#         img = cv2.imread(f'../input/aptos2019-blindness-detection/train_images/{image_path}.png')\n        img = cv2.imread(f'../input/diabetic-retinopathy-resized/resized_train/resized_train/{image_path}.jpeg')\n\n        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n        if gauss:\n            img = cv2.addWeighted (img,4, cv2.GaussianBlur( img , (0,0) , IMG_SIZE/10) ,-4 ,128) \n\n        fig.add_subplot(rows, columns, i+1)\n        plt.title(image_id)\n        plt.imshow(img)\n    \n    plt.tight_layout()\n    \ndisplay_samples(df_train)\n","metadata":{"execution":{"iopub.status.busy":"2023-04-11T14:05:19.799994Z","iopub.execute_input":"2023-04-11T14:05:19.800571Z","iopub.status.idle":"2023-04-11T14:05:24.631653Z","shell.execute_reply.started":"2023-04-11T14:05:19.800496Z","shell.execute_reply":"2023-04-11T14:05:24.630425Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"display_samples(df_train, gauss=True)","metadata":{"execution":{"iopub.status.busy":"2023-04-11T14:05:24.633489Z","iopub.execute_input":"2023-04-11T14:05:24.633848Z","iopub.status.idle":"2023-04-11T14:05:36.989147Z","shell.execute_reply.started":"2023-04-11T14:05:24.633813Z","shell.execute_reply":"2023-04-11T14:05:36.985035Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def preprocess_image(image_path, desired_size=224, gauss=False):\n    im = cv2.imread(image_path)\n    im = cv2.resize(im, (desired_size, desired_size), interpolation = cv2.INTER_AREA)\n    if gauss:\n        im = cv2.addWeighted(im,4, cv2.GaussianBlur( im , (0,0) , desired_size/10) ,-4 ,128)\n    \n    return im","metadata":{"execution":{"iopub.status.busy":"2023-04-11T14:05:36.990653Z","iopub.execute_input":"2023-04-11T14:05:36.991704Z","iopub.status.idle":"2023-04-11T14:05:36.999199Z","shell.execute_reply.started":"2023-04-11T14:05:36.991656Z","shell.execute_reply":"2023-04-11T14:05:36.997963Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"N = df_train.shape[0]\nx_train_array = np.empty((N, 224, 224, 3), dtype=np.uint8)\n\nfor i, image_id in enumerate(tqdm(df_train['image'])):\n    \n    print(i,image_id)    \n    \n#     Image.fromarray(x_train_array[i, :, :, :]).save(f'/kaggle/working/2019_244_resized_gauss/test_images/{image_id}.jpeg')","metadata":{"execution":{"iopub.status.busy":"2023-04-11T14:05:37.001620Z","iopub.execute_input":"2023-04-11T14:05:37.002065Z","iopub.status.idle":"2023-04-11T14:05:37.017261Z","shell.execute_reply.started":"2023-04-11T14:05:37.002010Z","shell.execute_reply":"2023-04-11T14:05:37.015991Z"},"trusted":true},"execution_count":null,"outputs":[]}]}