{"cells":[{"metadata":{},"cell_type":"markdown","source":"#### Fork of older version of [this kernel](https://www.kaggle.com/khursani8/fast-ai-starter-resnet34)"},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"from fastai.vision import *\nfrom fastai.metrics import KappaScore, accuracy\nfrom fastai.callbacks.tracker import ReduceLROnPlateauCallback, SaveModelCallback\nfrom fastai.callbacks import MixedPrecision\nimport sys, os, gc\nsys.path.insert(0, '../input/aptos2019-blindness-detection')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# copy pretrained weights for resnet34 to the folder fastai will search by default\nPath('/tmp/.cache/torch/checkpoints/').mkdir(exist_ok=True, parents=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!cp '../input/resnet101/resnet101.pth' '/tmp/.cache/torch/checkpoints/resnet101-5d3b4d8f.pth'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"PATH = Path('../input/aptos2019-blindness-detection')\ndf = pd.read_csv(PATH/'train.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tfms = get_transforms(\n    do_flip=True,\n    flip_vert=True,\n    max_rotate=360,\n    max_warp=0,\n    max_zoom=1.1,\n    max_lighting=0.1,\n    p_lighting=0.5\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def return_train_data(size=56, bs=256):\n    return ImageDataBunch.from_df(\n        df=df,\n        folder='train_images',\n        path=PATH,\n        valid_pct=0.2,\n        ds_tfms=tfms,\n        size=size,\n        bs=bs,\n        suffix=\".png\",\n        resize_method=ResizeMethod.SQUISH,\n        padding_mode='zeros'\n    ).normalize(imagenet_stats)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Small image data\ntrain_data = return_train_data()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### 56*256"},{"metadata":{"trusted":true},"cell_type":"code","source":"kappa = KappaScore()\nkappa.weights = \"quadratic\"\n# loss_func = LabelSmoothingCrossEntropy()\nlearn = cnn_learner(\n    train_data,models.resnet101,metrics=[accuracy,kappa], model_dir='/kaggle', pretrained=True\n                   ).mixup()\n# learn = load_learner(path=\"../input/retinopathy-model\", file=\"stage_1.pkl\").to_fp32()\n\n# learn.data = train_data","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Callbacks\nreduce_lr = ReduceLROnPlateauCallback(learn=learn, monitor='kappa_score', factor=1e-3, patience=2, min_delta=0.0002)\nsave_mod = SaveModelCallback(learn, every='improvement', monitor='kappa_score', name='best')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"learn.lr_find()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"learn.recorder.plot(suggestion=True)\nmin_grad_lr = learn.recorder.min_grad_lr","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"learn.fit_one_cycle(5, min_grad_lr, callbacks=[\n    reduce_lr, save_mod\n])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.load(\"best\");\nlearn.export(f\"/kaggle/working/model_bs_{train_data.batch_size}.pkl\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"del train_data\ngc.collect(); gc.collect()\nlearn.load(\"best\");","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### 112*128"},{"metadata":{"trusted":false},"cell_type":"code","source":"train_data = return_train_data(size=112, bs=128)\nlearn.data = train_data\nlearn.unfreeze()\nlearn.lr_find()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.recorder.plot(suggestion=True)\nmin_grad_lr = learn.recorder.min_grad_lr","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.fit_one_cycle(5, min_grad_lr, callbacks=[reduce_lr, save_mod])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.load(\"best\");\nlearn.export(f\"/kaggle/working/model_bs_{train_data.batch_size}.pkl\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"del train_data\ngc.collect(); gc.collect()\nlearn.load(\"best\");","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### 224*64"},{"metadata":{"trusted":false},"cell_type":"code","source":"train_data = return_train_data(size=224, bs=64)\nlearn.data = train_data\nlearn.freeze()\nlearn.lr_find()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.recorder.plot(suggestion=True)\nmin_grad_lr = learn.recorder.min_grad_lr","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.fit_one_cycle(5, min_grad_lr, callbacks=[reduce_lr, save_mod])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.load(\"best\");\nlearn.export(f\"/kaggle/working/model_bs_{train_data.batch_size}.pkl\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"del train_data\ngc.collect(); gc.collect()\nlearn.load(\"best\");","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### 336*32"},{"metadata":{"trusted":false},"cell_type":"code","source":"train_data = return_train_data(size=336, bs=32)\nlearn.data = train_data\n##### UNFREEZING #######\nlearn.unfreeze()\nlearn.lr_find()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.recorder.plot(suggestion=True)\nmin_grad_lr = learn.recorder.min_grad_lr","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.fit_one_cycle(5, min_grad_lr, callbacks=[reduce_lr, save_mod])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.load(\"best\");\nlearn.export(f\"/kaggle/working/model_bs_{train_data.batch_size}.pkl\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"del train_data\ngc.collect(); gc.collect()\nlearn.load(\"best\");","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Make Predictions"},{"metadata":{"trusted":false},"cell_type":"code","source":"sample_df = pd.read_csv(PATH/'sample_submission.csv')\nsample_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"learn.data.add_test(ImageList.from_df(sample_df,PATH,folder='test_images',suffix='.png'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"preds,y = learn.get_preds(DatasetType.Test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"sample_df.diagnosis = preds.argmax(1)\nsample_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"sample_df.to_csv('submission.csv',index=False)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.6"}},"nbformat":4,"nbformat_minor":1}