{"metadata":{"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":52279,"databundleVersionId":5822112,"sourceType":"competition"},{"sourceId":8141841,"sourceType":"datasetVersion","datasetId":4813848},{"sourceId":8142422,"sourceType":"datasetVersion","datasetId":4813118},{"sourceId":8142579,"sourceType":"datasetVersion","datasetId":4814408},{"sourceId":8151508,"sourceType":"datasetVersion","datasetId":4820593}],"dockerImageVersionId":30683,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true},"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"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.10.13"},"papermill":{"default_parameters":{},"duration":392.312,"end_time":"2024-04-16T14:54:26.328338","environment_variables":{},"exception":true,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2024-04-16T14:47:54.016338","version":"2.5.0"},"colab":{"provenance":[],"collapsed_sections":["EiHZvO3A8XUb","2dKlEwp06PBN","t9EjhKsc8Azy","9a3c49b6","2ac13d0d","75dc840a","78f2ce7d"],"toc_visible":true,"gpuType":"T4"},"accelerator":"GPU"},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"### Cài đặt thư viện","metadata":{"execution":{"iopub.execute_input":"2024-04-16T12:53:23.751745Z","iopub.status.busy":"2024-04-16T12:53:23.751153Z","iopub.status.idle":"2024-04-16T12:53:23.756279Z","shell.execute_reply":"2024-04-16T12:53:23.755189Z","shell.execute_reply.started":"2024-04-16T12:53:23.751709Z"},"papermill":{"duration":0.006599,"end_time":"2024-04-16T14:47:56.751950","exception":false,"start_time":"2024-04-16T14:47:56.745351","status":"completed"},"tags":[],"id":"a7f6477b"}},{"cell_type":"code","source":"!pip install --no-index --find-links /kaggle/input/final-wheels/final-wheels /kaggle/input/final-wheels/final-wheels/detectron2-0.6-cp310-cp310-linux_x86_64.whl","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install --no-deps /kaggle/input/final-wheels/headache/numpy-1.22.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install --no-index --find-links /kaggle/input/final-wheels/final-wheels /kaggle/input/final-wheels/final-wheels/detrex-0.3.0-cp310-cp310-linux_x86_64.whl","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install --no-deps /kaggle/input/final-wheels/final-wheels/numpy-1.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install --no-deps /kaggle/input/final-wheels/headache/setuptools-66.0.0-py3-none-any.whl /kaggle/input/final-wheels/headache/setuptools_scm-7.1.0-py3-none-any.whl","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"Restarting kernel...\")\nget_ipython().kernel.do_shutdown(True)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!cp -r /kaggle/input/maskdino /kaggle/working/maskdino\n!cd /kaggle/working/maskdino/maskdino/modeling/pixel_decoder/ops && sh make.sh","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"Restarting kernel...\")\nget_ipython().kernel.do_shutdown(True)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Config model và training","metadata":{"execution":{"iopub.execute_input":"2024-04-16T11:03:19.797419Z","iopub.status.busy":"2024-04-16T11:03:19.796281Z","iopub.status.idle":"2024-04-16T11:03:19.802102Z","shell.execute_reply":"2024-04-16T11:03:19.800913Z","shell.execute_reply.started":"2024-04-16T11:03:19.797380Z"},"papermill":{"duration":0.022898,"end_time":"2024-04-16T14:54:08.961287","exception":false,"start_time":"2024-04-16T14:54:08.938389","status":"completed"},"tags":[],"id":"839843e6"}},{"cell_type":"code","source":"!cp -r /kaggle/input/vasculature-coco ./dataset","metadata":{"papermill":{"duration":11.651553,"end_time":"2024-04-16T14:54:08.914898","exception":false,"start_time":"2024-04-16T14:53:57.263345","status":"completed"},"tags":[],"id":"db3706a9","outputId":"8e908075-7165-4d82-cd05-8ce14f5e749b","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import sys, torch\nfrom detectron2.data.datasets import register_coco_instances\n\nsys.path.append('/kaggle/input/maskdino')\n\ntorch.cuda.empty_cache()\n\nfor d in [\"train\", \"val\"]:\n    register_coco_instances(f\"vasculature_{d}\", {}, f\"/kaggle/working/dataset/annotations/instances_{d}2017.json\", f\"/kaggle/working/dataset/{d}2017\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nfrom detectron2.config import get_cfg\nfrom detectron2.projects.deeplab import add_deeplab_config\nfrom maskdino.config import add_maskdino_config\nfrom train_net import Trainer\n\ncfg = get_cfg()\n\nadd_deeplab_config(cfg)\nadd_maskdino_config(cfg)\n\ncfg.merge_from_file(\"/kaggle/working/maskdino/configs/coco/instance-segmentation/swin/maskdino_R50_bs16_50ep_4s_dowsample1_2048.yaml\")\n\ncfg.MODEL.WEIGHTS = \"/kaggle/input/maskdino-weights/maskdino_swinl_50ep_300q_hid2048_3sd1_instance_maskenhanced_mask52.3ap_box59.0ap.pth\"\n\ncfg.MODEL.SEM_SEG_HEAD.NUM_CLASSES = 2\n\ncfg.DATASETS.TRAIN = (\"vasculature_train\",)\ncfg.DATASETS.TEST = (\"vasculature_val\",)\n\ncfg.DATALOADER.NUM_WORKERS = 1\n\ncfg.SOLVER.IMS_PER_BATCH = 1\ncfg.SOLVER.MAX_ITER = 1000\ncfg.SOLVER.BASE_LR = 0.0001\n\ncfg.INPUT.IMAGE_SIZE = 512\n\nos.makedirs(cfg.OUTPUT_DIR, exist_ok=True)\n\ntrainer = Trainer(cfg)\ntrainer.resume_or_load(resume=False)\ntrainer.train()","metadata":{"papermill":{"duration":14.542226,"end_time":"2024-04-16T14:54:23.581383","exception":true,"start_time":"2024-04-16T14:54:09.039157","status":"failed"},"tags":[],"id":"2786aa74","outputId":"93c0381b-e5af-4924-e08a-df426515985a","execution":{"iopub.status.busy":"2024-04-18T04:11:34.494159Z","iopub.execute_input":"2024-04-18T04:11:34.494541Z","iopub.status.idle":"2024-04-18T04:34:55.187274Z","shell.execute_reply.started":"2024-04-18T04:11:34.494512Z","shell.execute_reply":"2024-04-18T04:34:55.186081Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Kiểm tra output","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"id":"75dc840a"}},{"cell_type":"code","source":"from detectron2.engine import DefaultPredictor\n\ncfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, \"model_final.pth\")\ncfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5 # set the testing threshold for this model\ncfg.DATASETS.TEST = (\"vasculature_val\", )\npredictor = DefaultPredictor(cfg)","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"id":"1a6439ee","execution":{"iopub.status.busy":"2024-04-18T04:37:13.416822Z","iopub.execute_input":"2024-04-18T04:37:13.417986Z","iopub.status.idle":"2024-04-18T04:37:19.352998Z","shell.execute_reply.started":"2024-04-18T04:37:13.417950Z","shell.execute_reply":"2024-04-18T04:37:19.351875Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import random, cv2\nfrom detectron2.utils.visualizer import ColorMode\nfrom detectron2.data import DatasetCatalog, MetadataCatalog\nfrom detectron2.utils.visualizer import Visualizer\nimport matplotlib.pyplot as plt\nfrom plotly.offline import init_notebook_mode, iplot\n\ninit_notebook_mode(connected=True)\n\ndataset_dicts = DatasetCatalog.get('vasculature_val')\ndatset_metadata = MetadataCatalog.get('vasculature_val')\n\nd = random.sample(dataset_dicts, 1)[0]\n\nim = cv2.imread(d[\"file_name\"])\noutputs = predictor(im)\nv = Visualizer(im[:, :, ::-1],\n    metadata=datset_metadata,\n    scale=0.8,\n    instance_mode=ColorMode.IMAGE_BW # remove the colors of unsegmented pixels\n)\nv = v.draw_instance_predictions(outputs[\"instances\"][(outputs[\"instances\"].scores > 0.5).nonzero().squeeze(1)].to(\"cpu\"))\nplt.imshow(v.get_image()[:, :, ::-1])\nplt.show()","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"id":"b5d875ca","execution":{"iopub.status.busy":"2024-04-18T04:38:35.090955Z","iopub.execute_input":"2024-04-18T04:38:35.091699Z","iopub.status.idle":"2024-04-18T04:38:36.397167Z","shell.execute_reply.started":"2024-04-18T04:38:35.091657Z","shell.execute_reply":"2024-04-18T04:38:36.396187Z"},"trusted":true},"execution_count":null,"outputs":[]}]}