{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":85240,"databundleVersionId":9622164,"sourceType":"competition"}],"dockerImageVersionId":30805,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Imports","metadata":{}},{"cell_type":"code","source":"!pip install ultralytics","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-06T17:18:52.994628Z","iopub.execute_input":"2024-12-06T17:18:52.994966Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nimport torch\nimport random\n# from yolov5 import utils\nfrom ultralytics import YOLO\nimport torch\nfrom IPython import display\nfrom IPython.display import clear_output\nfrom pathlib import Path\nimport yaml\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\nfrom torchvision import transforms\nimport glob\nimport io\nimport os\nimport cv2\nimport json\nimport shutil\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\n\n%matplotlib inline","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"SEED = 67\nrandom.seed(SEED)\nnp.random.seed(SEED)\ntorch.manual_seed(SEED)\nif torch.cuda.is_available():\n    torch.cuda.manual_seed(SEED)\nDEVICE = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\nprint(f\"Using device: {DEVICE}\")","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"TRAIN_IMAGES_DIR = \"/kaggle/input/dlp-object-detection/final_dlp_data/final_dlp_data/train/images\"\nTRAIN_LABELS_DIR = \"/kaggle/input/dlp-object-detection/final_dlp_data/final_dlp_data/train/labels\"\nTEST_IMAGES_DIR = \"/kaggle/input/dlp-object-detection/final_dlp_data/final_dlp_data/test/images\"\nSUBMISSION_TEMPLATE = \"/kaggle/input/dlp-object-detection/sample_submission.csv\"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_files = os.listdir(TRAIN_IMAGES_DIR)\ntrain_labels = [f.replace('.jpg', '.txt') for f in train_files]\ntrain_files, val_files = train_test_split(train_files, test_size=0.2, random_state=SEED)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"os.makedirs(\"yolo_dataset/train/images\", exist_ok=True)\nos.makedirs(\"yolo_dataset/train/labels\", exist_ok=True)\nos.makedirs(\"yolo_dataset/val/images\", exist_ok=True)\nos.makedirs(\"yolo_dataset/val/labels\", exist_ok=True)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for f in train_files:\n    shutil.copy(os.path.join(TRAIN_IMAGES_DIR, f), f\"yolo_dataset/train/images/{f}\")\n    shutil.copy(os.path.join(TRAIN_LABELS_DIR, f.replace('.jpeg', '.txt')), f\"yolo_dataset/train/labels/{f.replace('.jpeg', '.txt')}\")\n\nfor f in val_files:\n    shutil.copy(os.path.join(TRAIN_IMAGES_DIR, f), f\"yolo_dataset/val/images/{f}\")\n    shutil.copy(os.path.join(TRAIN_LABELS_DIR, f.replace('.jpeg', '.txt')), f\"yolo_dataset/val/labels/{f.replace('.jpeg', '.txt')}\")","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"yaml_content = f\"\"\"\npath: yolo_dataset\ntrain: /kaggle/working/yolo_dataset/train/images\nval: /kaggle/working/yolo_dataset/val/images\ntest: {TEST_IMAGES_DIR}\nnames:\n  0: aegypti\n  1: albopictus\n  2: anopheles\n  3: culex\n  4: culiseta\n  5: japonicus/koreicus\n\"\"\"\n\nwith open(\"dataset.yaml\", \"w\") as f:\n    f.write(yaml_content)\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model = YOLO(\"yolov5s.pt\")\nmodel.train(data=\"dataset.yaml\", epochs=2, batch=16, imgsz=640, device=DEVICE)\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"predictions = model.predict(TEST_IMAGES_DIR, save_txt = True)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission_data = []\n\n# Loop through each prediction\nfor i, result in enumerate(predictions):\n    # Iterate over each detected object in the image\n    for box in result.boxes:\n        image_id = result.path.split(\"/\")[-1]  # Get the image file name\n        label_name = result.names[int(box.cls)]  # Class name\n        conf = float(box.conf)  # Confidence score\n        x_center, y_center, width, height = box.xywh[0].tolist()  # Bounding box details\n        \n        # Append to the submission data list\n        submission_data.append({\n            \"id\": i,\n            \"ImageID\": image_id,\n            \"LabelName\": label_name,\n            \"Conf\": conf,\n            \"xcenter\": x_center,\n            \"ycenter\": y_center,\n            \"bbx_width\": width,\n            \"bbx_height\": height\n        })","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission_df = pd.DataFrame(submission_data)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission_df = submission_df[[\n    \"id\", \"ImageID\", \"LabelName\", \"Conf\", \"xcenter\", \"ycenter\", \"bbx_width\", \"bbx_height\"\n]]","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission_df.to_csv(\"submission.csv\", index=False)\nsubmission_df","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}