{"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":"!git clone https://github.com/aivclab/detr.git /tmp/packages/detr","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:36:49.918614Z","iopub.execute_input":"2021-12-18T02:36:49.918987Z","iopub.status.idle":"2021-12-18T02:36:53.246706Z","shell.execute_reply.started":"2021-12-18T02:36:49.918953Z","shell.execute_reply":"2021-12-18T02:36:53.245333Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport ast\nimport json\nimport shutil\nimport pandas as pd\nimport cv2\nimport matplotlib.pyplot as plt","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:49:41.132098Z","iopub.execute_input":"2021-12-18T02:49:41.132484Z","iopub.status.idle":"2021-12-18T02:49:41.168713Z","shell.execute_reply.started":"2021-12-18T02:49:41.132449Z","shell.execute_reply":"2021-12-18T02:49:41.167622Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install pycocotools\n# !conda install cudatoolkit=10.1 -c pytorch\n# !conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.1 -c pytorch","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:49:41.962428Z","iopub.execute_input":"2021-12-18T02:49:41.962804Z","iopub.status.idle":"2021-12-18T02:49:49.572515Z","shell.execute_reply.started":"2021-12-18T02:49:41.962771Z","shell.execute_reply":"2021-12-18T02:49:49.571115Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Preparing Data","metadata":{}},{"cell_type":"code","source":"x = \"730581268.jpg\"\n# airbus_bbox = pd.read_csv(r\"../input/irsc-airbus-bbox-list/bbox_dictionary.csv\")\n# airbus_bbox.rename(columns={\"Unnamed: 0\": \"ImageId\"}, inplace=True)\n# airbus_bbox[\"bbox_list\"] = airbus_bbox[\"bbox_list\"].apply(ast.literal_eval)\n# airbus_bbox = airbus_bbox.explode(\"bbox_list\")","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:09:10.346906Z","iopub.execute_input":"2021-12-18T02:09:10.347258Z","iopub.status.idle":"2021-12-18T02:09:10.352186Z","shell.execute_reply.started":"2021-12-18T02:09:10.347227Z","shell.execute_reply":"2021-12-18T02:09:10.350964Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"airbus_bbox = pd.read_csv(r\"../input/irsc-airbus-bbox-list/bbox_dictionary.csv\")[:500] #5000\nairbus_bbox.rename(columns={\"Unnamed: 0\": \"ImageId\"}, inplace=True)\nairbus_bbox[\"bbox_list\"] = airbus_bbox[\"bbox_list\"].apply(ast.literal_eval)\nairbus_bbox = airbus_bbox.explode(\"bbox_list\")\nairbus_bbox","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:34:09.073919Z","iopub.execute_input":"2021-12-18T02:34:09.07423Z","iopub.status.idle":"2021-12-18T02:34:09.58757Z","shell.execute_reply.started":"2021-12-18T02:34:09.074197Z","shell.execute_reply":"2021-12-18T02:34:09.586388Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"airbus_bbox[\"width\"] = airbus_bbox[\"bbox_list\"].apply(lambda x: x[3] - x[1])\nairbus_bbox[\"height\"] = airbus_bbox[\"bbox_list\"].apply(lambda x: x[2] - x[0])\nairbus_bbox[\"top_x\"] = airbus_bbox[\"bbox_list\"].apply(lambda x: x[1])\nairbus_bbox[\"top_y\"] = airbus_bbox[\"bbox_list\"].apply(lambda x: x[0])\nairbus_bbox","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:34:09.593235Z","iopub.execute_input":"2021-12-18T02:34:09.59606Z","iopub.status.idle":"2021-12-18T02:34:09.692643Z","shell.execute_reply.started":"2021-12-18T02:34:09.595999Z","shell.execute_reply":"2021-12-18T02:34:09.691445Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x = \"1e0382b66.jpg\"\nairbus_bbox[airbus_bbox[\"ImageId\"] == x]","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:34:30.133874Z","iopub.execute_input":"2021-12-18T02:34:30.134233Z","iopub.status.idle":"2021-12-18T02:34:30.155983Z","shell.execute_reply.started":"2021-12-18T02:34:30.134193Z","shell.execute_reply":"2021-12-18T02:34:30.154232Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# check that image have same shape\ntest_df = airbus_bbox.tail(10).copy()\ntest_df[\"shape\"] = test_df[\"ImageId\"].apply(lambda x: cv2.imread(f\"../input/airbus-ship-detection/train_v2/{x}\").shape)\ntest_df","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:34:32.141334Z","iopub.execute_input":"2021-12-18T02:34:32.14171Z","iopub.status.idle":"2021-12-18T02:34:32.38466Z","shell.execute_reply.started":"2021-12-18T02:34:32.141679Z","shell.execute_reply":"2021-12-18T02:34:32.383444Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# split into training and val\nfrom sklearn.model_selection import train_test_split\n\ntrain_df, val_df = train_test_split(airbus_bbox, test_size=0.2)","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:34:33.655689Z","iopub.execute_input":"2021-12-18T02:34:33.656059Z","iopub.status.idle":"2021-12-18T02:34:34.463906Z","shell.execute_reply.started":"2021-12-18T02:34:33.656027Z","shell.execute_reply":"2021-12-18T02:34:34.462634Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import shutil\n# shutil.rmtree(\"airbus_coco1\")\nif not os.path.exists(\"airbus_coco1\"):\n    os.makedirs(\"airbus_coco1/annotations\")\n    os.makedirs(\"airbus_coco1/train2017\")\n    os.makedirs(\"airbus_coco1/val2017\")","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:34:35.09896Z","iopub.execute_input":"2021-12-18T02:34:35.099401Z","iopub.status.idle":"2021-12-18T02:34:35.107204Z","shell.execute_reply.started":"2021-12-18T02:34:35.099367Z","shell.execute_reply":"2021-12-18T02:34:35.104378Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"final_dict = {}\nimg_list, ann_list = [], []\nfor img_id, i in enumerate(train_df[\"ImageId\"].unique()):\n    img_id = img_id + 1\n    img_list.append(\n        {\"id\": img_id, \"width\": 768, \"height\": 768, \"file_name\": i}\n    )\n    ann_index = 1\n    for x, bbox in train_df[train_df[\"ImageId\"] == i].iterrows():\n        ann_list.append(\n            {\"id\": ann_index, \"category_id\": 1, \"iscrowd\": 0, \"segmentation\": [], \"image_id\": img_id, \"area\": 0, \"bbox\": [bbox[\"top_x\"], bbox[\"top_y\"], bbox[\"width\"], bbox[\"height\"]]}\n        )\n        ann_index += 1\nfinal_dict[\"info\"] = {\"description\": \"airbusss\"}\nfinal_dict[\"licenses\"] = []\nfinal_dict[\"images\"] = img_list\nfinal_dict[\"annotations\"] = ann_list\nfinal_dict[\"categories\"] = [{\"id\": 1, \"name\": \"ship\"}]\nwith open(\"airbus_coco1/annotations/instances_train2017.json\", \"w\") as r:\n    json.dump(final_dict, r)","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:34:42.505401Z","iopub.execute_input":"2021-12-18T02:34:42.505809Z","iopub.status.idle":"2021-12-18T02:34:51.552715Z","shell.execute_reply.started":"2021-12-18T02:34:42.505771Z","shell.execute_reply":"2021-12-18T02:34:51.551694Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"final_dict = {}\nimg_list, ann_list = [], []\nfor img_id, i in enumerate(val_df[\"ImageId\"].unique()):\n    img_id = img_id + 99999\n    img_list.append(\n        {\"id\": img_id, \"width\": 768, \"height\": 768, \"file_name\": i}\n    )\n    ann_index = 1\n    for x, bbox in val_df[val_df[\"ImageId\"] == i].iterrows():\n        ann_list.append(\n            {\"id\": ann_index, \"category_id\": 1, \"iscrowd\": 0, \"segmentation\": [], \"image_id\": img_id, \"area\": 0, \"bbox\": [bbox[\"top_x\"], bbox[\"top_y\"], bbox[\"width\"], bbox[\"height\"]]}\n        )\n        ann_index += 1\nfinal_dict[\"info\"] = {\"description\": \"airbusss\"}\nfinal_dict[\"licenses\"] = []\nfinal_dict[\"images\"] = img_list\nfinal_dict[\"annotations\"] = ann_list\nfinal_dict[\"categories\"] = [{\"id\": 1, \"name\": \"ship\"}]\nwith open(\"airbus_coco1/annotations/instances_val2017.json\", \"w\") as r:\n    json.dump(final_dict, r)","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:34:51.5554Z","iopub.execute_input":"2021-12-18T02:34:51.555827Z","iopub.status.idle":"2021-12-18T02:34:53.440787Z","shell.execute_reply.started":"2021-12-18T02:34:51.555781Z","shell.execute_reply":"2021-12-18T02:34:53.439863Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_available = os.listdir(\"../input/airbus-ship-detection/train_v2\")\n\ndef copy_img_for_training(df, input_path, output_path):\n    for i in df[\"ImageId\"].unique():\n        if i in img_available:\n            shutil.copy(f\"{input_path}/{i}\", output_path)\n        else:\n            print(\"error transferring image. image not found!\")\n\ncopy_img_for_training(train_df, \"../input/airbus-ship-detection/train_v2\", \"./airbus_coco1/train2017\")\ncopy_img_for_training(val_df, \"../input/airbus-ship-detection/train_v2\", \"./airbus_coco1/val2017\")","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:54:09.709902Z","iopub.execute_input":"2021-12-18T02:54:09.710337Z","iopub.status.idle":"2021-12-18T02:54:09.865799Z","shell.execute_reply.started":"2021-12-18T02:54:09.710293Z","shell.execute_reply":"2021-12-18T02:54:09.862881Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import shutil\n# img_available = os.listdir(\"../input/airbus-ship-detection/train_v2\")\n# for i in train_df[\"ImageId\"].unique():\n#     if i in img_available:\n#         shutil.copy(f\"../input/airbus-ship-detection/train_v2/{i}\", \"./airbus_coco1/train2017\")\n#     else:\n#         print(\"nopw\")","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:34:53.44288Z","iopub.execute_input":"2021-12-18T02:34:53.443574Z","iopub.status.idle":"2021-12-18T02:35:53.918509Z","shell.execute_reply.started":"2021-12-18T02:34:53.443515Z","shell.execute_reply":"2021-12-18T02:35:53.917112Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# for i in val_df[\"ImageId\"].unique():\n#     if i in img_available:\n#         shutil.copy(f\"../input/airbus-ship-detection/train_v2/{i}\", \"./airbus_coco1/val2017\")\n#     else:\n#         print(\"nopw\")","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:35:53.922402Z","iopub.execute_input":"2021-12-18T02:35:53.922754Z","iopub.status.idle":"2021-12-18T02:36:06.444348Z","shell.execute_reply.started":"2021-12-18T02:35:53.92271Z","shell.execute_reply":"2021-12-18T02:36:06.443341Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch\nimport torchvision\ncheckpoint = torch.hub.load_state_dict_from_url(\n                url='https://dl.fbaipublicfiles.com/detr/detr-r50-e632da11.pth',\n                map_location='cpu',\n                check_hash=True)\n\n# Remove class weights\ndel checkpoint[\"model\"][\"class_embed.weight\"]\ndel checkpoint[\"model\"][\"class_embed.bias\"]\n\n# SaveOGH\ntorch.save(checkpoint,\n           'detr-r50_no-class-head.pth')","metadata":{"execution":{"iopub.status.busy":"2021-12-17T11:08:06.655193Z","iopub.execute_input":"2021-12-17T11:08:06.655554Z","iopub.status.idle":"2021-12-17T11:08:16.876335Z","shell.execute_reply.started":"2021-12-17T11:08:06.655524Z","shell.execute_reply":"2021-12-17T11:08:16.875167Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Check image","metadata":{}},{"cell_type":"code","source":"# with open(r\"./airbus_coco1/annotations/instances_val2017.json\", \"r\") as r:\n#     data = json.load(r)\n    \n# for i in data[\"categories\"]:\n#     print(i)\n\n# print(data[\"images\"][0])\n# # print(data[\"annotations\"][0])\n# x = \"../input/airbus-ship-detection/train_v2/\" + data[\"images\"][0][\"file_name\"]\n# print(x)\n# im = cv2.imread(x)\n# print(im.shape)\n# for ann in data[\"annotations\"]:\n#     if ann[\"image_id\"] == data[\"images\"][0][\"id\"]:\n#         print(ann)\n#         bbox = ann[\"bbox\"]\n#         top = (int(bbox[0]), int(bbox[1]))\n#         bottom = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))\n#         print(top, bottom)\n#         cv2.rectangle(im, top, bottom, color=(255,0,0), thickness=2)\n\n# cv2.imshow(\"im\", im)\n# cv2.waitKey()","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:49:07.893448Z","iopub.execute_input":"2021-12-18T02:49:07.893894Z","iopub.status.idle":"2021-12-18T02:49:08.062711Z","shell.execute_reply.started":"2021-12-18T02:49:07.893853Z","shell.execute_reply":"2021-12-18T02:49:08.05984Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Train Model","metadata":{}},{"cell_type":"code","source":"!python /tmp/packages/detr/main.py --output_dir \"./output\" --num_classes 2 --batch_size 2 --resume detr-r50_no-class-head.pth --coco_path airbus_coco1 --epochs 300","metadata":{"execution":{"iopub.status.busy":"2021-12-18T02:36:56.521651Z","iopub.execute_input":"2021-12-18T02:36:56.522062Z","iopub.status.idle":"2021-12-18T02:45:59.672559Z","shell.execute_reply.started":"2021-12-18T02:36:56.522026Z","shell.execute_reply":"2021-12-18T02:45:59.671207Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# !python /tmp/packages/detr/main.py --output_dir \"./output\" --num_classes 2 --batch_size 2 --resume ./output/checkpoint.pth --coco_path airbus_coco --batch_size 8 ","metadata":{"execution":{"iopub.status.busy":"2021-12-17T09:20:47.006895Z","iopub.execute_input":"2021-12-17T09:20:47.007236Z","iopub.status.idle":"2021-12-17T09:45:25.844772Z","shell.execute_reply.started":"2021-12-17T09:20:47.007207Z","shell.execute_reply":"2021-12-17T09:45:25.843554Z"},"trusted":true},"execution_count":null,"outputs":[]}]}