{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: roboflow in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (1.1.50)\n",
      "Requirement already satisfied: certifi in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (2024.12.14)\n",
      "Requirement already satisfied: idna==3.7 in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (3.7)\n",
      "Requirement already satisfied: cycler in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (0.12.1)\n",
      "Requirement already satisfied: kiwisolver>=1.3.1 in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (1.4.8)\n",
      "Requirement already satisfied: matplotlib in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (3.10.0)\n",
      "Requirement already satisfied: numpy>=1.18.5 in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (1.26.3)\n",
      "Requirement already satisfied: opencv-python-headless==4.10.0.84 in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (4.10.0.84)\n",
      "Requirement already satisfied: Pillow>=7.1.2 in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (10.2.0)\n",
      "Requirement already satisfied: python-dateutil in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (2.9.0.post0)\n",
      "Requirement already satisfied: python-dotenv in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (1.0.1)\n",
      "Requirement already satisfied: requests in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (2.32.3)\n",
      "Requirement already satisfied: six in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (1.17.0)\n",
      "Requirement already satisfied: urllib3>=1.26.6 in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (2.3.0)\n",
      "Requirement already satisfied: tqdm>=4.41.0 in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (4.67.1)\n",
      "Requirement already satisfied: PyYAML>=5.3.1 in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (6.0.2)\n",
      "Requirement already satisfied: requests-toolbelt in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (1.0.0)\n",
      "Requirement already satisfied: filetype in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from roboflow) (1.2.0)\n",
      "Requirement already satisfied: colorama in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from tqdm>=4.41.0->roboflow) (0.4.6)\n",
      "Requirement already satisfied: contourpy>=1.0.1 in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from matplotlib->roboflow) (1.3.1)\n",
      "Requirement already satisfied: fonttools>=4.22.0 in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from matplotlib->roboflow) (4.55.3)\n",
      "Requirement already satisfied: packaging>=20.0 in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from matplotlib->roboflow) (24.2)\n",
      "Requirement already satisfied: pyparsing>=2.3.1 in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from matplotlib->roboflow) (3.2.1)\n",
      "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\ai_team\\.conda\\envs\\yolov11\\lib\\site-packages (from requests->roboflow) (3.4.1)\n",
      "loading Roboflow workspace...\n",
      "loading Roboflow project...\n",
      "Exporting format coco in progress : 85.0%\n",
      "Version export complete for coco format\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Downloading Dataset Version Zip in AI-ELANG-availability-5 to coco:: 100%|██████████| 66591/66591 [00:09<00:00, 6979.17it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "Extracting Dataset Version Zip to AI-ELANG-availability-5 in coco:: 100%|██████████| 930/930 [00:00<00:00, 1075.75it/s]\n"
     ]
    }
   ],
   "source": [
    "!pip install roboflow\n",
    "\n",
    "from roboflow import Roboflow\n",
    "rf = Roboflow(api_key=\"SPm4M5SwBEk2iz9jgn6G\")\n",
    "project = rf.workspace(\"elang-kub3m\").project(\"ai-elang-availability\")\n",
    "version = project.version(5)\n",
    "dataset = version.download(\"coco\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'detectron2'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[2], line 2\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mos\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mdetectron2\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mengine\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m DefaultTrainer\n\u001b[0;32m      3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mdetectron2\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mconfig\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m get_cfg\n\u001b[0;32m      4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mdetectron2\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdata\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdatasets\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m register_coco_instances\n",
      "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'detectron2'"
     ]
    }
   ],
   "source": [
    "import os\n",
    "from detectron2.engine import DefaultTrainer\n",
    "from detectron2.config import get_cfg\n",
    "from detectron2.data.datasets import register_coco_instances\n",
    "from detectron2 import model_zoo\n",
    "import torch\n",
    "\n",
    "# Periksa apakah GPU tersedia\n",
    "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n",
    "print(f\"Menggunakan perangkat: {device}\")\n",
    "\n",
    "# Path ke dataset\n",
    "dataset_dir = r\"G:\\MAGANG\\ai elang coco update 17 januari 2025\\AI-ELANG-availability-5\"\n",
    "train_images = os.path.join(dataset_dir, \"train\")\n",
    "val_images = os.path.join(dataset_dir, \"val\")\n",
    "train_annotations = os.path.join(dataset_dir, \"annotations/instances_train.json\")\n",
    "val_annotations = os.path.join(dataset_dir, \"annotations/instances_val.json\")\n",
    "\n",
    "# Registrasi dataset ke Detectron2\n",
    "register_coco_instances(\"ai_elang_train\", {}, train_annotations, train_images)\n",
    "register_coco_instances(\"ai_elang_val\", {}, val_annotations, val_images)\n",
    "\n",
    "# Konfigurasi model\n",
    "cfg = get_cfg()\n",
    "cfg.merge_from_file(model_zoo.get_config_file(\"COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml\"))  # Ganti model jika perlu\n",
    "cfg.DATASETS.TRAIN = (\"ai_elang_train\",)\n",
    "cfg.DATASETS.TEST = (\"ai_elang_val\",)\n",
    "cfg.DATALOADER.NUM_WORKERS = 4\n",
    "cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(\"COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml\")  # Pretrained weights\n",
    "cfg.SOLVER.IMS_PER_BATCH = 4  # Sesuaikan dengan GPU Anda\n",
    "cfg.SOLVER.BASE_LR = 0.001  # Learning rate\n",
    "cfg.SOLVER.MAX_ITER = 3000  # Jumlah iterasi\n",
    "cfg.SOLVER.STEPS = []  # Milestones untuk penurunan LR\n",
    "cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 128  # Per batch\n",
    "cfg.MODEL.ROI_HEADS.NUM_CLASSES = 1  # Ganti sesuai jumlah kelas dataset Anda\n",
    "\n",
    "# Set perangkat ke GPU/CPU\n",
    "cfg.MODEL.DEVICE = device\n",
    "\n",
    "# Path untuk menyimpan hasil\n",
    "output_dir = r\"G:\\MAGANG\\ai elang coco update 17 januari 2025\\output\"\n",
    "os.makedirs(output_dir, exist_ok=True)\n",
    "cfg.OUTPUT_DIR = output_dir\n",
    "\n",
    "# Mulai pelatihan\n",
    "trainer = DefaultTrainer(cfg)\n",
    "trainer.resume_or_load(resume=False)\n",
    "trainer.train()\n",
    "\n",
    "print(\"Pelatihan selesai. Model disimpan di:\", cfg.OUTPUT_DIR)\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "yolov11",
   "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.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
