{"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":"import numpy as np\nimport pandas as pd\nimport torch\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport ast\nimport sys\neffdet_path = \"../input/effdet\"\nsys.path.append(effdet_path)\ntimm_path = \"../input/timm-pytorch-image-models/pytorch-image-models-master\"\nsys.path.append(timm_path)\nimport timm\nfrom timm.data import IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport sklearn\nimport os\nfrom tqdm.notebook import tqdm\nimport matplotlib.pyplot as plt\nomega_path = \"../input/omegaconf\"\nsys.path.append(omega_path)\nfrom omegaconf import OmegaConf\nimport glob\nimport sklearn\nimport math\nimport random\n\nimport cv2\nimport albumentations as A\nfrom albumentations.pytorch import ToTensorV2\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.utils.data import Dataset,DataLoader\nfrom torch import optim\nfrom torchvision import transforms\n\nfrom transformers import get_cosine_schedule_with_warmup\n\nimport warnings\nwarnings.filterwarnings('ignore')\nfrom sklearn import metrics, model_selection, preprocessing\nfrom sklearn.model_selection import GroupKFold\ndevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\ndevice","metadata":{"execution":{"iopub.status.busy":"2022-01-21T11:29:54.500976Z","iopub.execute_input":"2022-01-21T11:29:54.5013Z","iopub.status.idle":"2022-01-21T11:30:03.646997Z","shell.execute_reply.started":"2022-01-21T11:29:54.501216Z","shell.execute_reply":"2022-01-21T11:30:03.646264Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install --no-deps '../input/pycocotools202/pycocotools-2.0.2-cp37-cp37m-linux_x86_64.whl' > /dev/null","metadata":{"execution":{"iopub.status.busy":"2022-01-21T11:30:03.648722Z","iopub.execute_input":"2022-01-21T11:30:03.650247Z","iopub.status.idle":"2022-01-21T11:30:25.7906Z","shell.execute_reply.started":"2022-01-21T11:30:03.650207Z","shell.execute_reply":"2022-01-21T11:30:25.789774Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model","metadata":{}},{"cell_type":"code","source":"IMAGE_SIZE = 320\nfrom effdet import create_model","metadata":{"execution":{"iopub.status.busy":"2022-01-21T11:30:25.792193Z","iopub.execute_input":"2022-01-21T11:30:25.792459Z","iopub.status.idle":"2022-01-21T11:30:26.196578Z","shell.execute_reply.started":"2022-01-21T11:30:25.792422Z","shell.execute_reply":"2022-01-21T11:30:26.195884Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = create_model(\"tf_efficientdet_lite0\" , bench_task='predict' , num_classes= 1 , image_size=(IMAGE_SIZE,IMAGE_SIZE),pretrained=False,pretrained_backbone=False)\npath = \"../input/efficientdet-train/Fold 0 model with val loss 1.4488916648517955.pth\"\nmodel.load_state_dict(torch.load(path))\nmodel.eval()\nmodel.to(device)","metadata":{"_kg_hide-output":true,"execution":{"iopub.status.busy":"2022-01-21T11:30:26.197789Z","iopub.execute_input":"2022-01-21T11:30:26.198038Z","iopub.status.idle":"2022-01-21T11:30:33.513801Z","shell.execute_reply.started":"2022-01-21T11:30:26.198006Z","shell.execute_reply":"2022-01-21T11:30:33.513143Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Prediction","metadata":{}},{"cell_type":"code","source":"test_transform = A.Compose([\n   A.Resize(IMAGE_SIZE,IMAGE_SIZE ,p = 1.0),\n            A.Normalize(mean=IMAGENET_DEFAULT_MEAN, std=IMAGENET_DEFAULT_STD),\n            ToTensorV2()\n])","metadata":{"execution":{"iopub.status.busy":"2022-01-21T11:30:33.515541Z","iopub.execute_input":"2022-01-21T11:30:33.515766Z","iopub.status.idle":"2022-01-21T11:30:33.523553Z","shell.execute_reply.started":"2022-01-21T11:30:33.515736Z","shell.execute_reply":"2022-01-21T11:30:33.522819Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def format_prediction_string(boxes, scores):\n    # Format as specified in the evaluation page\n    pred_strings = []\n    for j in zip(scores, boxes):\n        pred_strings.append(\"{0:.2f} {1} {2} {3} {4}\".format(j[0], j[1][0], j[1][1], j[1][2], j[1][3]))\n\n    return \" \".join(pred_strings)","metadata":{"execution":{"iopub.status.busy":"2022-01-21T11:30:33.525155Z","iopub.execute_input":"2022-01-21T11:30:33.526255Z","iopub.status.idle":"2022-01-21T11:30:33.539425Z","shell.execute_reply.started":"2022-01-21T11:30:33.526214Z","shell.execute_reply":"2022-01-21T11:30:33.538749Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction_confidence_threshold = 0.15\ndef predict(model, pixel_array,prediction_confidence_threshold):\n    # Predictions for a single image\n    \n    # Apply all the transformations that are required\n    pixel_array = np.array(pixel_array, dtype=np.float32)\n    image = test_transform(image=pixel_array)['image'].unsqueeze(0)\n    \n    # Get predictions\n    #each row representing [x_min, y_min, x_max, y_max, score, class]\n    with torch.no_grad():\n        detections = model(image.to(device)) \n    \n    # Move predictions to cpu and numpy\n    \n    boxes = detections[0].detach().cpu().numpy()[:, :4]\n    scores = detections[0].detach().cpu().numpy()[:, 4]\n    indexes = np.where(scores > prediction_confidence_threshold)[0]\n    boxes = boxes[indexes]\n    scores =scores[indexes]\n    \n    boxes[:, 0] = (boxes[:, 0]*(1280/IMAGE_SIZE)).astype(np.int32).clip(min=0, max=1280)\n    boxes[:, 1] = (boxes[:, 1]*(720/IMAGE_SIZE)).astype(np.int32).clip(min=0, max=720)\n    boxes[:, 2] = (boxes[:, 2]*(1280/IMAGE_SIZE)).astype(np.int32).clip(min=0, max=1280)\n    boxes[:, 3] = (boxes[:, 3]*(720/IMAGE_SIZE)).astype(np.int32).clip(min=0, max=720)\n    \n    \n    # Go back from x_min, y_min, x_max, y_max to x_min, y_min, w, h\n    boxes[:, 2] = (boxes[:, 2] - boxes[:, 0])\n    boxes[:, 3] = (boxes[:, 3] - boxes[:, 1])\n    \n    \n  \n    # Format results as requested in the Evaluation tab\n    return format_prediction_string(boxes, scores)","metadata":{"execution":{"iopub.status.busy":"2022-01-21T11:30:33.540878Z","iopub.execute_input":"2022-01-21T11:30:33.541379Z","iopub.status.idle":"2022-01-21T11:30:33.566246Z","shell.execute_reply.started":"2022-01-21T11:30:33.541342Z","shell.execute_reply":"2022-01-21T11:30:33.565384Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import greatbarrierreef\nenv = greatbarrierreef.make_env()\niter_test = env.iter_test() ","metadata":{"execution":{"iopub.status.busy":"2022-01-21T11:30:33.570402Z","iopub.execute_input":"2022-01-21T11:30:33.572943Z","iopub.status.idle":"2022-01-21T11:30:33.600133Z","shell.execute_reply.started":"2022-01-21T11:30:33.572904Z","shell.execute_reply":"2022-01-21T11:30:33.599464Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for (pixel_array, df_pred) in iter_test:  # iterate through all test set images\n    df_pred['annotations'] = predict(model, pixel_array,prediction_confidence_threshold)\n    env.predict(df_pred)","metadata":{"execution":{"iopub.status.busy":"2022-01-21T11:30:33.603806Z","iopub.execute_input":"2022-01-21T11:30:33.60577Z","iopub.status.idle":"2022-01-21T11:30:39.419857Z","shell.execute_reply.started":"2022-01-21T11:30:33.605733Z","shell.execute_reply":"2022-01-21T11:30:39.419142Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}