{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "4b5f4bab",
   "metadata": {},
   "source": [
    "# Обзор медальных решений по датасету Brain Tumor Object Detection Datasets и реализация выбранной модели\n",
    "\n",
    "## Постановка задачи\n",
    "Задача состоит в **детекции опухоли мозга на МРТ-снимках**: модель должна предсказать класс (`negative` / `positive`) и координаты ограничивающего прямоугольника.\n",
    "\n",
    "## Важное замечание по исходным материалам\n",
    "В формулировке задания упоминаются **YOLOv7, YOLOv8, YOLOvX**. Однако среди фактически приложенных медальных ноутбуков представлены:\n",
    "- решение на **YOLOv5s**;\n",
    "- решение на **YOLOv8x**;\n",
    "- решение, опубликованное как проект для **YOLOvX App**, но обучающее **YOLOv9s** через пакет `ultralytics`.\n",
    "\n",
    "Поэтому обзор ниже построен **по реально доступным медальным ноутбукам**.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed27c5c5",
   "metadata": {},
   "source": [
    "## Краткий обзор рассмотренных решений\n",
    "\n",
    "### 1. Ноутбук `brain-tumor-yolo-od-train.ipynb`\n",
    "- Архитектура: **YOLOv5s**\n",
    "- Вход: `512×512`\n",
    "- Параметры обучения: `batch=32`, `epochs=5`\n",
    "- Набор данных: `axial_t1wce_2_class`\n",
    "- Особенность: это очень короткий учебный прогон, автор сам отмечает, что эпох слишком мало для сильного качества.\n",
    "\n",
    "**Полученные метрики по ноутбуку**\n",
    "- Precision = **0.0402**\n",
    "- Recall = **0.0494**\n",
    "- mAP@0.50 = **0.00782**\n",
    "- mAP@0.50:0.95 = **0.00155**\n",
    "\n",
    "**Интерпретация**  \n",
    "Это качество крайне низкое. Главная причина — не архитектура сама по себе, а слишком короткое обучение (5 эпох) на небольшом датасете. Поэтому данный результат нельзя считать репрезентативной оценкой потенциала семейства YOLO.\n",
    "\n",
    "---\n",
    "\n",
    "### 2. Ноутбук `brain-tumor-detection-using-yolov8.ipynb`\n",
    "- Архитектура: **YOLOv8x**\n",
    "- Параметры обучения: `epochs=200`, предобученные веса `yolov8x.pt`\n",
    "- Фреймворк: `ultralytics`\n",
    "- Детекция проводится по двум классам: `negative`, `positive`\n",
    "\n",
    "**Полученные метрики по ноутбуку**\n",
    "- Precision = **0.850**\n",
    "- Recall = **0.896**\n",
    "- mAP@0.50 = **0.921**\n",
    "- mAP@0.50:0.95 = **0.710**\n",
    "\n",
    "По классам:\n",
    "- `negative`: mAP@0.50 = **0.892**, mAP@0.50:0.95 = **0.702**\n",
    "- `positive`: mAP@0.50 = **0.951**, mAP@0.50:0.95 = **0.718**\n",
    "\n",
    "**Интерпретация**  \n",
    "Это сильный результат. Модель уверенно локализует опухоль и хорошо различает два класса. Среди приложенных решений именно этот ноутбук показывает наилучшее качество.\n",
    "\n",
    "---\n",
    "\n",
    "### 3. Ноутбук `brain-tumor-detection-yolovx.ipynb`\n",
    "- Архитектура: **YOLOv9s**\n",
    "- Развёртывание: через **YOLOvX App**\n",
    "- Параметры обучения: `epochs=100`, `imgsz=640`, `batch=4`\n",
    "- Важно: **YOLOvX здесь — это платформа/приложение**, а не отдельная детекторная архитектура.\n",
    "\n",
    "**Полученные метрики по ноутбуку**\n",
    "- Precision = **0.623**\n",
    "- Recall = **0.839**\n",
    "- mAP@0.50 = **0.784**\n",
    "- mAP@0.50:0.95 = **0.595**\n",
    "\n",
    "По классам:\n",
    "- `negative`: mAP@0.50 = **0.790**, mAP@0.50:0.95 = **0.601**\n",
    "- `positive`: mAP@0.50 = **0.779**, mAP@0.50:0.95 = **0.588**\n",
    "\n",
    "**Интерпретация**  \n",
    "Результат хороший, но ниже, чем у YOLOv8x. При этом модель компактнее и легче для развёртывания.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0f0fa921",
   "metadata": {},
   "source": [
    "## Сравнение архитектур\n",
    "\n",
    "### YOLOv5\n",
    "YOLOv5 использует классическую схему:\n",
    "- **backbone** для извлечения признаков;\n",
    "- **neck** (PAN/FPN) для объединения признаков разных масштабов;\n",
    "- **head** для предсказания рамок, objectness и классов.\n",
    "\n",
    "Преимущества:\n",
    "- высокая скорость;\n",
    "- зрелая экосистема;\n",
    "- простота обучения.\n",
    "\n",
    "Недостатки в данном эксперименте:\n",
    "- результат в медальном ноутбуке слишком слабый из-за короткого обучения;\n",
    "- на малом медицинском датасете без аккуратной настройки потенциал архитектуры не раскрыт.\n",
    "\n",
    "### YOLOv8\n",
    "YOLOv8 — более современное развитие семейства YOLO:\n",
    "- anchor-free head;\n",
    "- улучшенная схема регрессии рамок;\n",
    "- хорошая интеграция в `ultralytics`;\n",
    "- устойчивое обучение и удобная валидация.\n",
    "\n",
    "Преимущества:\n",
    "- лучшее качество среди рассмотренных решений;\n",
    "- хорошее соотношение точности и удобства;\n",
    "- стабильная работа на малых наборах данных при transfer learning.\n",
    "\n",
    "### YOLOv9s (решение через YOLOvX)\n",
    "YOLOv9s — более новая архитектура, ориентированная на эффективность и качество, а YOLOvX в данном случае используется как инструмент публикации и инференса модели.\n",
    "\n",
    "Преимущества:\n",
    "- компактность;\n",
    "- хороший recall;\n",
    "- удобное развёртывание.\n",
    "\n",
    "Недостатки:\n",
    "- по данным конкретного ноутбука качество всё же уступает YOLOv8x.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9661c3a7",
   "metadata": {},
   "source": [
    "## Выводы по применимости в медицинской диагностике\n",
    "\n",
    "1. **Архитектуры семейства YOLO в целом применимы** для задачи детекции опухоли на МРТ, поскольку позволяют одновременно локализовать подозрительную область и выдать класс.\n",
    "2. Для медицинской диагностики особенно важны:\n",
    "   - высокий **Recall**, чтобы минимизировать пропуск опухоли;\n",
    "   - достаточный **mAP@0.50:0.95**, чтобы локализация была не только грубой, но и устойчивой.\n",
    "3. Наиболее убедительный результат среди приложенных решений показала **YOLOv8x**:\n",
    "   - высокий recall (**0.896**);\n",
    "   - лучший `mAP@0.50 = 0.921`;\n",
    "   - лучший `mAP@0.50:0.95 = 0.710`.\n",
    "4. Однако даже хорошая модель детекции **не должна использоваться как автономный диагностический инструмент**. Для медицинской практики она может рассматриваться как **система поддержки принятия решений**, а не как замена врачу-рентгенологу.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "736d4def",
   "metadata": {},
   "source": [
    "## Выбранная модель для собственной реализации\n",
    "\n",
    "Для реализации выбирается **YOLOv8x**, потому что:\n",
    "- она показала **лучшие фактические метрики** среди медальных ноутбуков;\n",
    "- архитектура уже продемонстрировала хорошую устойчивость именно на этом датасете;\n",
    "- экосистема `ultralytics` позволяет быстро воспроизводить обучение, валидацию и инференс.\n",
    "\n",
    "Ниже приведён воспроизводимый код обучения и оценки модели.  \n",
    "Ноутбук **адаптирован под локальный запуск**: датасет можно положить в любую папку и указать путь вручную либо дать ноутбуку найти его автоматически.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "5499ee90",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Установка зависимостей\n",
    "# При локальном запуске при необходимости раскомментируйте:\n",
    "# !pip install -q ultralytics pyyaml pandas matplotlib\n",
    "\n",
    "import os\n",
    "from pathlib import Path\n",
    "import yaml\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from ultralytics import YOLO\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "686dc728",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DATA_ROOT = /home/konnilol/Downloads/brain-tumor-dataset/axial_t1wce_2_class\n"
     ]
    }
   ],
   "source": [
    "\n",
    "# Локально-совместимый поиск датасета\n",
    "# 1) Сначала можно явно указать путь вручную.\n",
    "# 2) Если путь не задан, ноутбук попробует найти датасет автоматически.\n",
    "\n",
    "MANUAL_DATA_ROOT = None\n",
    "# Примеры:\n",
    "# MANUAL_DATA_ROOT = Path('./brain-tumor-object-detection-datasets/axial_t1wce_2_class')\n",
    "# MANUAL_DATA_ROOT = Path('./data/axial_t1wce_2_class')\n",
    "\n",
    "def is_valid_dataset_root(p: Path) -> bool:\n",
    "    return (\n",
    "        p.exists()\n",
    "        and (p / 'images' / 'train').exists()\n",
    "        and (p / 'labels' / 'train').exists()\n",
    "        and (\n",
    "            (p / 'images' / 'test').exists()\n",
    "            or (p / 'images' / 'val').exists()\n",
    "        )\n",
    "    )\n",
    "\n",
    "def find_dataset_root() -> Path:\n",
    "    candidates = []\n",
    "\n",
    "    if MANUAL_DATA_ROOT is not None:\n",
    "        candidates.append(Path(MANUAL_DATA_ROOT))\n",
    "\n",
    "    # Частые варианты локального расположения\n",
    "    search_roots = [\n",
    "        Path('.'),\n",
    "        Path('./data'),\n",
    "        Path('./datasets'),\n",
    "        Path('./dataset'),\n",
    "        Path('./input'),\n",
    "        Path('./brain-tumor-object-detection-datasets'),\n",
    "    ]\n",
    "\n",
    "    for root in search_roots:\n",
    "        if not root.exists():\n",
    "            continue\n",
    "\n",
    "        direct_candidates = [\n",
    "            root / 'axial_t1wce_2_class',\n",
    "            root / 'brain-tumor-object-detection-datasets' / 'axial_t1wce_2_class',\n",
    "            root / 'data' / 'axial_t1wce_2_class',\n",
    "        ]\n",
    "        candidates.extend(direct_candidates)\n",
    "\n",
    "        # Рекурсивный поиск только при необходимости\n",
    "        for found in root.rglob('axial_t1wce_2_class'):\n",
    "            candidates.append(found)\n",
    "\n",
    "    seen = set()\n",
    "    unique_candidates = []\n",
    "    for c in candidates:\n",
    "        rc = c.resolve()\n",
    "        if rc not in seen:\n",
    "            seen.add(rc)\n",
    "            unique_candidates.append(rc)\n",
    "\n",
    "    for c in unique_candidates:\n",
    "        if is_valid_dataset_root(c):\n",
    "            return c\n",
    "\n",
    "    raise FileNotFoundError(\n",
    "        'Не удалось найти папку датасета. '\n",
    "        'Укажите путь вручную в переменной MANUAL_DATA_ROOT.'\n",
    "    )\n",
    "\n",
    "DATA_ROOT = find_dataset_root()\n",
    "print('DATA_ROOT =', DATA_ROOT)\n",
    "\n",
    "assert is_valid_dataset_root(DATA_ROOT), f'Не найден корректный DATA_ROOT: {DATA_ROOT}'\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f3a95ba2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "path: /home/konnilol/Downloads/brain-tumor-dataset/axial_t1wce_2_class\n",
      "train: images/train\n",
      "val: images/test\n",
      "test: images/test\n",
      "names:\n",
      "  0: negative\n",
      "  1: positive\n",
      "\n"
     ]
    }
   ],
   "source": [
    "\n",
    "# Формируем data.yaml для YOLOv8\n",
    "work_dir = Path('./brain_tumor_yolov8_work').resolve()\n",
    "work_dir.mkdir(parents=True, exist_ok=True)\n",
    "\n",
    "data_yaml_path = work_dir / 'brain_tumor_data.yaml'\n",
    "\n",
    "val_split = 'images/val' if (DATA_ROOT / 'images' / 'val').exists() else 'images/test'\n",
    "test_split = 'images/test' if (DATA_ROOT / 'images' / 'test').exists() else val_split\n",
    "\n",
    "data_dict = {\n",
    "    'path': str(DATA_ROOT.resolve()),\n",
    "    'train': 'images/train',\n",
    "    'val': val_split,\n",
    "    'test': test_split,\n",
    "    'names': {\n",
    "        0: 'negative',\n",
    "        1: 'positive'\n",
    "    }\n",
    "}\n",
    "\n",
    "with open(data_yaml_path, 'w', encoding='utf-8') as f:\n",
    "    yaml.safe_dump(data_dict, f, allow_unicode=True, sort_keys=False)\n",
    "\n",
    "print(data_yaml_path.read_text(encoding='utf-8'))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "cb7e0091",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[KDownloading https://github.com/ultralytics/assets/releases/download/v8.4.0/yolov8x.pt to 'yolov8x.pt': 100% ━━━━━━━━━━━━ 130.5MB 4.3MB/s 30.2s 30.2s<0.0s54\n"
     ]
    }
   ],
   "source": [
    "# Инициализация модели\n",
    "# Для максимального соответствия лучшему медальному решению используется yolov8x.pt.\n",
    "model = YOLO('yolov8x.pt')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c64b3abe",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ultralytics 8.4.24 🚀 Python-3.12.12 torch-2.10.0+cu128 CUDA:0 (NVIDIA GeForce RTX 3080, 9873MiB)\n",
      "\u001b[34m\u001b[1mengine/trainer: \u001b[0magnostic_nms=False, amp=True, angle=1.0, augment=False, auto_augment=randaugment, batch=16, bgr=0.0, box=7.5, cache=False, cfg=None, classes=None, close_mosaic=10, cls=0.5, compile=False, conf=None, copy_paste=0.0, copy_paste_mode=flip, cos_lr=False, cutmix=0.0, data=/home/konnilol/Downloads/brain_tumor_yolov8_work/brain_tumor_data.yaml, degrees=0.0, deterministic=True, device=None, dfl=1.5, dnn=False, dropout=0.0, dynamic=False, embed=None, end2end=None, epochs=200, erasing=0.4, exist_ok=True, fliplr=0.5, flipud=0.0, format=torchscript, fraction=1.0, freeze=None, half=False, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, imgsz=640, int8=False, iou=0.7, keras=False, kobj=1.0, line_width=None, lr0=0.01, lrf=0.01, mask_ratio=4, max_det=300, mixup=0.0, mode=train, model=yolov8x.pt, momentum=0.937, mosaic=1.0, multi_scale=0.0, name=yolov8x_brain_tumor, nbs=64, nms=False, opset=None, optimize=False, optimizer=auto, overlap_mask=True, patience=100, perspective=0.0, plots=True, pose=12.0, pretrained=True, profile=False, project=/home/konnilol/Downloads/brain_tumor_yolov8_work/runs, rect=False, resume=False, retina_masks=False, rle=1.0, save=True, save_conf=False, save_crop=False, save_dir=/home/konnilol/Downloads/brain_tumor_yolov8_work/runs/yolov8x_brain_tumor, save_frames=False, save_json=False, save_period=-1, save_txt=False, scale=0.5, seed=0, shear=0.0, show=False, show_boxes=True, show_conf=True, show_labels=True, simplify=True, single_cls=False, source=None, split=val, stream_buffer=False, task=detect, time=None, tracker=botsort.yaml, translate=0.1, val=True, verbose=True, vid_stride=1, visualize=False, warmup_bias_lr=0.1, warmup_epochs=3.0, warmup_momentum=0.8, weight_decay=0.0005, workers=8, workspace=None\n",
      "Overriding model.yaml nc=80 with nc=2\n",
      "\n",
      "                   from  n    params  module                                       arguments                     \n",
      "  0                  -1  1      2320  ultralytics.nn.modules.conv.Conv             [3, 80, 3, 2]                 \n",
      "  1                  -1  1    115520  ultralytics.nn.modules.conv.Conv             [80, 160, 3, 2]               \n",
      "  2                  -1  3    436800  ultralytics.nn.modules.block.C2f             [160, 160, 3, True]           \n",
      "  3                  -1  1    461440  ultralytics.nn.modules.conv.Conv             [160, 320, 3, 2]              \n",
      "  4                  -1  6   3281920  ultralytics.nn.modules.block.C2f             [320, 320, 6, True]           \n",
      "  5                  -1  1   1844480  ultralytics.nn.modules.conv.Conv             [320, 640, 3, 2]              \n",
      "  6                  -1  6  13117440  ultralytics.nn.modules.block.C2f             [640, 640, 6, True]           \n",
      "  7                  -1  1   3687680  ultralytics.nn.modules.conv.Conv             [640, 640, 3, 2]              \n",
      "  8                  -1  3   6969600  ultralytics.nn.modules.block.C2f             [640, 640, 3, True]           \n",
      "  9                  -1  1   1025920  ultralytics.nn.modules.block.SPPF            [640, 640, 5]                 \n",
      " 10                  -1  1         0  torch.nn.modules.upsampling.Upsample         [None, 2, 'nearest']          \n",
      " 11             [-1, 6]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           \n",
      " 12                  -1  3   7379200  ultralytics.nn.modules.block.C2f             [1280, 640, 3]                \n",
      " 13                  -1  1         0  torch.nn.modules.upsampling.Upsample         [None, 2, 'nearest']          \n",
      " 14             [-1, 4]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           \n",
      " 15                  -1  3   1948800  ultralytics.nn.modules.block.C2f             [960, 320, 3]                 \n",
      " 16                  -1  1    922240  ultralytics.nn.modules.conv.Conv             [320, 320, 3, 2]              \n",
      " 17            [-1, 12]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           \n",
      " 18                  -1  3   7174400  ultralytics.nn.modules.block.C2f             [960, 640, 3]                 \n",
      " 19                  -1  1   3687680  ultralytics.nn.modules.conv.Conv             [640, 640, 3, 2]              \n",
      " 20             [-1, 9]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           \n",
      " 21                  -1  3   7379200  ultralytics.nn.modules.block.C2f             [1280, 640, 3]                \n",
      " 22        [15, 18, 21]  1   8719894  ultralytics.nn.modules.head.Detect           [2, 16, None, [320, 640, 640]]\n",
      "Model summary: 210 layers, 68,154,534 parameters, 68,154,518 gradients, 258.1 GFLOPs\n",
      "\n",
      "Transferred 589/595 items from pretrained weights\n",
      "Freezing layer 'model.22.dfl.conv.weight'\n",
      "\u001b[34m\u001b[1mAMP: \u001b[0mrunning Automatic Mixed Precision (AMP) checks...\n",
      "\u001b[KDownloading https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n.pt to 'yolo26n.pt': 100% ━━━━━━━━━━━━ 5.3MB 5.2MB/s 1.0s.0s<0.1ss.0s7s\n",
      "\u001b[34m\u001b[1mAMP: \u001b[0mchecks passed ✅\n",
      "\u001b[34m\u001b[1mtrain: \u001b[0mFast image access ✅ (ping: 0.0±0.0 ms, read: 385.0±165.9 MB/s, size: 6.9 KB)\n",
      "\u001b[K\u001b[34m\u001b[1mtrain: \u001b[0mScanning /home/konnilol/Downloads/brain-tumor-dataset/axial_t1wce_2_class/labels/train... 296 images, 14 backgrounds, 0 corrupt: 100% ━━━━━━━━━━━━ 310/310 3.3Kit/s 0.1s\n",
      "\u001b[34m\u001b[1mtrain: \u001b[0mNew cache created: /home/konnilol/Downloads/brain-tumor-dataset/axial_t1wce_2_class/labels/train.cache\n",
      "\u001b[34m\u001b[1mval: \u001b[0mFast image access ✅ (ping: 0.0±0.0 ms, read: 396.6±297.4 MB/s, size: 11.2 KB)\n",
      "\u001b[K\u001b[34m\u001b[1mval: \u001b[0mScanning /home/konnilol/Downloads/brain-tumor-dataset/axial_t1wce_2_class/labels/test... 75 images, 0 backgrounds, 0 corrupt: 100% ━━━━━━━━━━━━ 75/75 2.4Kit/s 0.0s\n",
      "\u001b[34m\u001b[1mval: \u001b[0mNew cache created: /home/konnilol/Downloads/brain-tumor-dataset/axial_t1wce_2_class/labels/test.cache\n",
      "\u001b[34m\u001b[1moptimizer:\u001b[0m 'optimizer=auto' found, ignoring 'lr0=0.01' and 'momentum=0.937' and determining best 'optimizer', 'lr0' and 'momentum' automatically... \n",
      "\u001b[34m\u001b[1moptimizer:\u001b[0m AdamW(lr=0.001667, momentum=0.9) with parameter groups 97 weight(decay=0.0), 104 weight(decay=0.0005), 103 bias(decay=0.0)\n",
      "Plotting labels to /home/konnilol/Downloads/brain_tumor_yolov8_work/runs/yolov8x_brain_tumor/labels.jpg... \n",
      "Image sizes 640 train, 640 val\n",
      "Using 8 dataloader workers\n",
      "Logging results to \u001b[1m/home/konnilol/Downloads/brain_tumor_yolov8_work/runs/yolov8x_brain_tumor\u001b[0m\n",
      "Starting training for 200 epochs...\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "WARNING ⚠️ CUDA out of memory with batch=16. Reducing to batch=8 and retrying (1/3).\n",
      "\u001b[34m\u001b[1mtrain: \u001b[0mFast image access ✅ (ping: 0.0±0.0 ms, read: 22.1±6.4 MB/s, size: 7.4 KB)\n",
      "\u001b[K\u001b[34m\u001b[1mtrain: \u001b[0mScanning /home/konnilol/Downloads/brain-tumor-dataset/axial_t1wce_2_class/labels/train.cache... 296 images, 14 backgrounds, 0 corrupt: 100% ━━━━━━━━━━━━ 310/310 144.5Mit/s 0.0s\n",
      "\u001b[34m\u001b[1mval: \u001b[0mFast image access ✅ (ping: 0.0±0.0 ms, read: 234.1±240.6 MB/s, size: 11.8 KB)\n",
      "\u001b[K\u001b[34m\u001b[1mval: \u001b[0mScanning /home/konnilol/Downloads/brain-tumor-dataset/axial_t1wce_2_class/labels/test.cache... 75 images, 0 backgrounds, 0 corrupt: 100% ━━━━━━━━━━━━ 75/75 6.6Mit/s 0.0s\n",
      "\u001b[34m\u001b[1moptimizer:\u001b[0m 'optimizer=auto' found, ignoring 'lr0=0.01' and 'momentum=0.937' and determining best 'optimizer', 'lr0' and 'momentum' automatically... \n",
      "\u001b[34m\u001b[1moptimizer:\u001b[0m AdamW(lr=0.001667, momentum=0.9) with parameter groups 97 weight(decay=0.0), 104 weight(decay=0.0005), 103 bias(decay=0.0)\n",
      "\u001b[K: 0% ──────────── 0/20  1.8s\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K      1/200      8.78G      1.678      11.22      1.615         10        640: 100% ━━━━━━━━━━━━ 39/39 3.3it/s 11.9s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.3it/s 0.9s0.7s\n",
      "                   all         75         81          1     0.0123      0.506      0.456\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K      2/200      7.06G      1.512      3.038      1.535          9        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.2s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 4.0it/s 0.7s0.6s\n",
      "                   all         75         81          0          0          0          0\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K      3/200      7.06G       1.62      3.426      1.705         11        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.2s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81    0.00147     0.0988    0.00246   0.000601\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K      4/200      6.43G      1.676      2.613      1.693         17        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.2s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.4it/s 0.9s0.7s\n",
      "                   all         75         81      0.133     0.0617     0.0486     0.0206\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K      5/200      6.69G      1.563      1.998      1.583         16        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.3s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.4it/s 0.9s0.7s\n",
      "                   all         75         81          0          0          0          0\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K      6/200       6.7G      1.434      1.935      1.528         10        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.615      0.543       0.64       0.38\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K      7/200      7.05G       1.34      1.725      1.461         10        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.9s0.7s\n",
      "                   all         75         81      0.543      0.519       0.54      0.361\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K      8/200      7.07G      1.333      1.642      1.454         11        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.8s0.7s\n",
      "                   all         75         81      0.756      0.728      0.781      0.517\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K      9/200      7.08G      1.313      1.582      1.401         12        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.577      0.247        0.3      0.171\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     10/200      7.07G      1.405      1.635      1.471         10        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.4s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.8it/s 0.8s0.6s\n",
      "                   all         75         81          0          0          0          0\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     11/200      7.07G      1.285      1.505       1.41         11        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.8s0.7s\n",
      "                   all         75         81      0.621       0.63      0.638      0.417\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     12/200       6.4G      1.227       1.48      1.365         13        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.858      0.802      0.901      0.642\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     13/200      6.68G      1.219      1.441      1.356         11        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.677      0.765      0.712      0.481\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     14/200      6.68G      1.189      1.421      1.329          8        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.9s0.7s\n",
      "                   all         75         81      0.923      0.739      0.884      0.582\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     15/200      6.69G      1.172      1.338      1.295          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.468      0.185      0.212     0.0835\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     16/200      7.05G      1.162      1.371      1.306          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.8s0.7s\n",
      "                   all         75         81      0.758      0.657      0.716      0.472\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     17/200      7.09G      1.165      1.345      1.361         11        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.849      0.626      0.714      0.428\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     18/200      7.08G      1.137      1.287      1.248         15        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.4s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.9s0.7s\n",
      "                   all         75         81      0.817      0.815      0.867      0.556\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     19/200      7.05G      1.093      1.326      1.282         12        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.765      0.722      0.777      0.535\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     20/200      6.42G      1.147      1.299      1.314         10        640: 100% ━━━━━━━━━━━━ 39/39 3.9it/s 9.9s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.9it/s 0.8s0.6s\n",
      "                   all         75         81      0.889      0.787       0.86      0.571\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     21/200      6.68G      1.067      1.239      1.224         16        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.865      0.794      0.873      0.588\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     22/200      6.68G      1.151      1.279      1.311          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.7s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.8s0.7s\n",
      "                   all         75         81      0.847      0.754      0.798      0.543\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     23/200      7.07G      1.133      1.267      1.308         11        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.9s0.7s\n",
      "                   all         75         81      0.771      0.802      0.847      0.577\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     24/200      7.07G      1.071      1.201      1.238         10        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.7s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.798      0.802       0.85      0.569\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     25/200      7.07G       1.16      1.252      1.318          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.9s0.7s\n",
      "                   all         75         81      0.805      0.814      0.854      0.573\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     26/200      7.08G      1.136      1.243       1.29         10        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.7s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.8s0.7s\n",
      "                   all         75         81      0.754      0.914       0.87      0.532\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     27/200      7.05G      1.034      1.205       1.23         18        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.8s0.7s\n",
      "                   all         75         81      0.806      0.852      0.876      0.582\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     28/200      6.42G      1.106      1.233      1.301         11        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.788      0.782      0.804      0.527\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     29/200      6.65G      1.095      1.199      1.267          7        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.7s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.756      0.679      0.698      0.452\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     30/200      6.68G      1.086      1.211       1.26          7        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.7s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.8it/s 0.8s0.7s\n",
      "                   all         75         81      0.694      0.617      0.634      0.427\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     31/200      7.06G      1.072      1.154      1.268         12        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.3s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.9s0.7s\n",
      "                   all         75         81       0.78      0.704      0.677      0.453\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     32/200      7.07G      1.001      1.155      1.214          9        640: 100% ━━━━━━━━━━━━ 39/39 3.6it/s 10.7s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.8it/s 0.8s0.7s\n",
      "                   all         75         81      0.834      0.827      0.853      0.554\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     33/200      7.05G      1.054      1.173      1.249         13        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.9s0.7s\n",
      "                   all         75         81      0.754      0.802      0.854      0.571\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     34/200      7.08G      0.991      1.126      1.204          5        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.7s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.9s0.7s\n",
      "                   all         75         81      0.715      0.889      0.829      0.528\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     35/200      7.08G      1.029      1.111      1.221         12        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.8s0.7s\n",
      "                   all         75         81      0.872      0.852      0.893      0.573\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     36/200      6.43G      1.012      1.079       1.24         13        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.836      0.852      0.885      0.604\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     37/200      6.67G      1.047      1.133      1.267          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.757      0.807      0.835      0.536\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     38/200      6.66G      0.999       1.07      1.199         10        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.7s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.747      0.728      0.722      0.447\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     39/200      7.07G      0.969       1.06      1.198          6        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.9s0.7s\n",
      "                   all         75         81      0.783       0.84      0.855        0.6\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     40/200      7.09G      1.017      1.061      1.217          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.7s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.8s0.7s\n",
      "                   all         75         81      0.701      0.802      0.773       0.49\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     41/200      7.08G      1.033      1.058      1.248         14        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.9s0.7s\n",
      "                   all         75         81      0.685      0.832       0.81      0.526\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     42/200      7.08G      1.002      1.024      1.217         12        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.664      0.716      0.729        0.5\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     43/200      7.07G     0.9573      1.106      1.191         12        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.8s0.7s\n",
      "                   all         75         81      0.766      0.726      0.808      0.583\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     44/200      6.43G     0.9778      1.058      1.192         14        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.6s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.826      0.815      0.874      0.548\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     45/200      6.67G     0.9502      1.092       1.19          6        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.8it/s 0.8s0.7s\n",
      "                   all         75         81      0.727      0.815      0.738      0.508\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     46/200      6.69G      0.942       1.01      1.168          7        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.3s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.8it/s 0.8s0.7s\n",
      "                   all         75         81      0.804      0.741      0.787       0.54\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     47/200      7.06G     0.9341     0.9589      1.188          9        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.2s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.893      0.802      0.891      0.617\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     48/200      7.07G     0.9675     0.9732      1.183         10        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.2s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.846      0.748      0.805      0.589\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     49/200      7.07G     0.9671      1.004      1.216         13        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.3s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.9s0.7s\n",
      "                   all         75         81      0.575      0.741      0.595      0.357\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     50/200      7.08G     0.9848     0.9078      1.205         10        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.668      0.704      0.674      0.438\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     51/200      7.07G     0.9382     0.8774      1.191          8        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.724      0.753      0.796      0.528\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     52/200      6.39G     0.9628     0.9263      1.175          7        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81       0.75      0.741       0.81      0.523\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     53/200      6.65G     0.8867     0.8917      1.131          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.754       0.79      0.757      0.538\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     54/200      6.69G     0.9455     0.8715      1.177         14        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.2s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.8it/s 0.8s0.7s\n",
      "                   all         75         81      0.779      0.829      0.801      0.504\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     55/200      7.07G      0.908     0.9014      1.158         11        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.3s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.8it/s 0.8s0.6s\n",
      "                   all         75         81      0.899      0.659      0.824      0.547\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     56/200      7.04G     0.9133     0.8988      1.157          8        640: 100% ━━━━━━━━━━━━ 39/39 3.9it/s 10.1s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.8it/s 0.8s0.6s\n",
      "                   all         75         81      0.827      0.829      0.863       0.58\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     57/200      7.08G     0.9097     0.9007      1.164          8        640: 100% ━━━━━━━━━━━━ 39/39 3.9it/s 10.0s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.8it/s 0.8s0.7s\n",
      "                   all         75         81      0.574      0.631      0.674      0.399\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     58/200      7.08G     0.9007      0.854      1.158          7        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.2s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.834      0.373      0.573      0.347\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     59/200      7.08G     0.9682     0.8424       1.16         14        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.8s0.7s\n",
      "                   all         75         81      0.312      0.506      0.404      0.253\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     60/200       6.4G     0.9092     0.9085      1.155          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.697      0.753      0.713      0.438\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     61/200      6.68G     0.8863     0.8378      1.143         17        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.652      0.617      0.658      0.418\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     62/200      6.69G      0.893      0.841      1.167          8        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.817      0.728      0.863      0.606\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     63/200      7.07G     0.8341     0.7945      1.132          6        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.709       0.79      0.765      0.499\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     64/200      7.08G     0.8813     0.8208      1.153          8        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.681      0.711      0.736      0.506\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     65/200      7.05G     0.8699     0.7933      1.147         10        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.775      0.741      0.836      0.619\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     66/200      7.05G     0.8687     0.7775      1.117          8        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.739      0.874      0.853      0.583\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     67/200      7.05G      0.886     0.7668      1.159         10        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.736      0.655      0.759      0.495\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     68/200      6.42G     0.8802     0.7499       1.14         11        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.4s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.8s0.7s\n",
      "                   all         75         81      0.767      0.733       0.79      0.503\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     69/200      6.69G     0.8831     0.7986      1.153         11        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.4s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.914      0.802      0.904      0.633\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     70/200      6.67G     0.9055     0.7863      1.171         12        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.681      0.827      0.735      0.482\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     71/200      7.04G     0.8564     0.7137      1.112          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.662      0.593        0.7      0.442\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     72/200      7.08G     0.8566     0.7295      1.111         11        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81       0.71      0.716      0.758      0.532\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     73/200      7.08G     0.8369     0.7323      1.128         11        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.813        0.7      0.807      0.606\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     74/200      7.07G     0.8528     0.7787      1.123         11        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.695      0.845       0.84      0.602\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     75/200      7.04G     0.8248     0.7854       1.12          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.9s0.7s\n",
      "                   all         75         81      0.717      0.765      0.807      0.569\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     76/200      6.39G     0.8447     0.6818       1.11         11        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.4s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.923      0.744      0.892       0.64\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     77/200      6.67G     0.8227     0.6872      1.115         11        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.819      0.815      0.874      0.585\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     78/200      6.64G     0.7994     0.6726       1.08          8        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.794      0.827      0.876      0.602\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     79/200      6.69G     0.8255     0.6278      1.103          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.797      0.704      0.739      0.513\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     80/200      7.08G     0.7775      0.675      1.088         13        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.566      0.901      0.819      0.581\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     81/200      7.07G     0.8028     0.6361      1.092          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.9s0.7s\n",
      "                   all         75         81      0.785      0.741      0.818      0.577\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     82/200      7.05G     0.7967     0.6583        1.1         12        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.798      0.802       0.82      0.563\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     83/200      7.05G     0.7943      0.652      1.085         10        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.814      0.647      0.777      0.517\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     84/200      6.43G     0.7833      0.669      1.102          5        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.807      0.679      0.785      0.569\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     85/200       6.7G     0.7816     0.6456       1.07         15        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.832      0.691      0.847      0.571\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     86/200      7.06G     0.7798     0.6794      1.102          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.688      0.926      0.877      0.621\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     87/200      7.08G     0.7694     0.5896      1.075          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81       0.83      0.724      0.831      0.589\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     88/200      7.07G     0.7838     0.6436      1.085          5        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.805      0.763      0.832      0.617\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     89/200      7.08G     0.7727     0.6808      1.075          8        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.9s0.7s\n",
      "                   all         75         81       0.88      0.457      0.676      0.457\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     90/200      7.07G     0.7874     0.6558      1.082          7        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.694      0.716      0.771      0.516\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     91/200      7.04G     0.7509     0.5887       1.06          8        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.772       0.79      0.868      0.634\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     92/200       6.4G     0.7774     0.5958      1.061         11        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.755      0.759      0.868      0.626\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     93/200      6.64G     0.7673     0.6121      1.063         11        640: 100% ━━━━━━━━━━━━ 39/39 3.8it/s 10.4s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.875      0.753      0.892      0.632\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     94/200      6.65G     0.7822     0.6237       1.08         12        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.814      0.802      0.879      0.622\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     95/200      7.04G     0.7748     0.6013      1.076          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.778      0.679      0.793      0.546\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     96/200      7.06G     0.7494     0.5547      1.051         11        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.565      0.864      0.765      0.524\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     97/200      7.08G      0.755     0.5336      1.056          8        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.874      0.765      0.873      0.624\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     98/200      7.08G     0.7312     0.5701      1.063          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81       0.68      0.683       0.79      0.516\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K     99/200      7.07G     0.7248      0.541      1.052          7        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81        0.8       0.74      0.833      0.581\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K    100/200      6.43G     0.7193     0.5425      1.051          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.845      0.753      0.853      0.617\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K    101/200      6.69G     0.7385       0.57      1.062          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.855       0.51      0.743      0.514\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K    102/200      6.67G     0.7331      0.615      1.075          7        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.884      0.778      0.859      0.584\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K    103/200      7.06G     0.7092     0.5532      1.039          7        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.5it/s 0.8s0.7s\n",
      "                   all         75         81      0.836      0.728       0.83      0.569\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K    104/200      7.09G     0.6855     0.5588      1.024          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.887       0.68      0.891      0.625\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K    105/200      7.05G     0.7214     0.5928      1.042          5        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.863      0.776      0.834      0.593\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K    106/200      7.05G     0.7214       0.56       1.05          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.867      0.727       0.84      0.584\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K    107/200      7.08G     0.7241     0.5546      1.043          5        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.3s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.939      0.754       0.89      0.615\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K    108/200       6.4G     0.6998     0.5197      1.048          8        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.802      0.648      0.813      0.546\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K    109/200      6.64G      0.674     0.5007      1.037          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.7it/s 0.8s0.7s\n",
      "                   all         75         81      0.817      0.716      0.823      0.573\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K    110/200       6.7G     0.7052     0.5336      1.028          9        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.863      0.802      0.873      0.606\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K    111/200      7.04G     0.6917     0.5072      1.045          8        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.839      0.753      0.878      0.604\n",
      "\n",
      "      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size\n",
      "\u001b[K    112/200      7.08G     0.6863      0.503      1.007         15        640: 100% ━━━━━━━━━━━━ 39/39 3.7it/s 10.5s0.2s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.6it/s 0.8s0.7s\n",
      "                   all         75         81      0.776      0.769      0.853      0.592\n",
      "\u001b[34m\u001b[1mEarlyStopping: \u001b[0mTraining stopped early as no improvement observed in last 100 epochs. Best results observed at epoch 12, best model saved as best.pt.\n",
      "To update EarlyStopping(patience=100) pass a new patience value, i.e. `patience=300` or use `patience=0` to disable EarlyStopping.\n",
      "\n",
      "112 epochs completed in 0.394 hours.\n",
      "Optimizer stripped from /home/konnilol/Downloads/brain_tumor_yolov8_work/runs/yolov8x_brain_tumor/weights/last.pt, 136.7MB\n",
      "Optimizer stripped from /home/konnilol/Downloads/brain_tumor_yolov8_work/runs/yolov8x_brain_tumor/weights/best.pt, 136.7MB\n",
      "\n",
      "Validating /home/konnilol/Downloads/brain_tumor_yolov8_work/runs/yolov8x_brain_tumor/weights/best.pt...\n",
      "Ultralytics 8.4.24 🚀 Python-3.12.12 torch-2.10.0+cu128 CUDA:0 (NVIDIA GeForce RTX 3080, 9873MiB)\n",
      "Model summary (fused): 113 layers, 68,125,494 parameters, 0 gradients, 257.4 GFLOPs\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 3/3 3.4it/s 0.9s0.7s\n",
      "                   all         75         81      0.858      0.802      0.901      0.643\n",
      "              negative         75         81      0.858      0.802      0.901      0.643\n",
      "Speed: 0.1ms preprocess, 9.6ms inference, 0.0ms loss, 0.9ms postprocess per image\n",
      "Results saved to \u001b[1m/home/konnilol/Downloads/brain_tumor_yolov8_work/runs/yolov8x_brain_tumor\u001b[0m\n"
     ]
    }
   ],
   "source": [
    "\n",
    "# Обучение модели\n",
    "# При необходимости можно уменьшить epochs для быстрого теста.\n",
    "RUN_NAME = 'yolov8x_brain_tumor'\n",
    "\n",
    "train_results = model.train(\n",
    "    data=str(data_yaml_path),\n",
    "    epochs=200,\n",
    "    imgsz=640,\n",
    "    batch=16,\n",
    "    project=str(work_dir / 'runs'),\n",
    "    name=RUN_NAME,\n",
    "    pretrained=True,\n",
    "    plots=True,\n",
    "    exist_ok=True\n",
    ")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "a739b6b0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best_weights = /home/konnilol/Downloads/brain_tumor_yolov8_work/runs/yolov8x_brain_tumor/weights/best.pt\n",
      "Ultralytics 8.4.24 🚀 Python-3.12.12 torch-2.10.0+cu128 CUDA:0 (NVIDIA GeForce RTX 3080, 9873MiB)\n",
      "Model summary (fused): 113 layers, 68,125,494 parameters, 0 gradients, 257.4 GFLOPs\n",
      "\u001b[34m\u001b[1mval: \u001b[0mFast image access ✅ (ping: 0.0±0.0 ms, read: 345.1±167.2 MB/s, size: 8.3 KB)\n",
      "\u001b[K\u001b[34m\u001b[1mval: \u001b[0mScanning /home/konnilol/Downloads/brain-tumor-dataset/axial_t1wce_2_class/labels/test.cache... 75 images, 0 backgrounds, 0 corrupt: 100% ━━━━━━━━━━━━ 75/75 28.6Mit/s 0.0s\n",
      "\u001b[K                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 5/5 3.0it/s 1.7s0.5s\n",
      "                   all         75         81      0.843       0.79      0.881      0.642\n",
      "              negative         75         81      0.843       0.79      0.881      0.642\n",
      "Speed: 1.7ms preprocess, 17.6ms inference, 0.0ms loss, 0.4ms postprocess per image\n",
      "Results saved to \u001b[1m/home/konnilol/Downloads/runs/detect/val\u001b[0m\n"
     ]
    }
   ],
   "source": [
    "\n",
    "# Валидация лучшей модели\n",
    "best_weights = work_dir / 'runs' / RUN_NAME / 'weights' / 'best.pt'\n",
    "if not best_weights.exists():\n",
    "    candidates = list((work_dir / 'runs').rglob('best.pt'))\n",
    "    if len(candidates) == 0:\n",
    "        raise FileNotFoundError('Файл best.pt не найден после обучения.')\n",
    "    best_weights = max(candidates, key=lambda p: p.stat().st_mtime)\n",
    "\n",
    "print('best_weights =', best_weights)\n",
    "\n",
    "best_model = YOLO(str(best_weights))\n",
    "metrics = best_model.val(data=str(data_yaml_path), split='val')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "84b84f61",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.positron.dataexplorer+json": {
       "comm_id": "57ff4b80-6ab4-43c0-b09a-7de610e1cd64",
       "shape": {
        "columns": 2,
        "rows": 4
       },
       "source": "pandas",
       "title": "pandas",
       "version": 1
      },
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>metric</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>precision</td>\n",
       "      <td>0.842771</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>recall</td>\n",
       "      <td>0.790123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>mAP50</td>\n",
       "      <td>0.881480</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>mAP50-95</td>\n",
       "      <td>0.642498</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      metric     value\n",
       "0  precision  0.842771\n",
       "1     recall  0.790123\n",
       "2      mAP50  0.881480\n",
       "3   mAP50-95  0.642498"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Сводная таблица метрик\n",
    "metrics_df = pd.DataFrame({\n",
    "    'metric': ['precision', 'recall', 'mAP50', 'mAP50-95'],\n",
    "    'value': [\n",
    "        float(metrics.box.mp),\n",
    "        float(metrics.box.mr),\n",
    "        float(metrics.box.map50),\n",
    "        float(metrics.box.map)\n",
    "    ]\n",
    "})\n",
    "\n",
    "metrics_df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "6435896b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 700x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Визуализация ключевых метрик\n",
    "plt.figure(figsize=(7, 4))\n",
    "plt.bar(metrics_df['metric'], metrics_df['value'])\n",
    "plt.ylim(0, 1)\n",
    "plt.title('Качество модели YOLOv8x на Brain Tumor Object Detection')\n",
    "plt.ylabel('Значение')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "f349efca",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0: 640x640 1 positive, 17.7ms\n",
      "1: 640x640 (no detections), 17.7ms\n",
      "2: 640x640 (no detections), 17.7ms\n",
      "3: 640x640 (no detections), 17.7ms\n",
      "Speed: 1.5ms preprocess, 17.7ms inference, 0.3ms postprocess per image at shape (1, 3, 640, 640)\n",
      "Results saved to \u001b[1m/home/konnilol/Downloads/brain_tumor_yolov8_work/predictions/sample_preds\u001b[0m\n",
      "Сохранено в: /home/konnilol/Downloads/brain_tumor_yolov8_work/predictions/sample_preds\n"
     ]
    }
   ],
   "source": [
    "\n",
    "# Примеры инференса\n",
    "test_images_dir = DATA_ROOT / 'images' / ('test' if (DATA_ROOT / 'images' / 'test').exists() else 'val')\n",
    "sample_images = []\n",
    "for ext in ('*.jpg', '*.jpeg', '*.png', '*.bmp'):\n",
    "    sample_images.extend(sorted(test_images_dir.glob(ext)))\n",
    "sample_images = sample_images[:4]\n",
    "\n",
    "assert len(sample_images) > 0, f'В папке {test_images_dir} не найдены изображения для инференса.'\n",
    "\n",
    "predictions = best_model.predict(\n",
    "    source=[str(p) for p in sample_images],\n",
    "    conf=0.25,\n",
    "    save=True,\n",
    "    project=str(work_dir / 'predictions'),\n",
    "    name='sample_preds',\n",
    "    exist_ok=True\n",
    ")\n",
    "\n",
    "print('Сохранено в:', work_dir / 'predictions' / 'sample_preds')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7048a1e",
   "metadata": {},
   "source": [
    "В работе были рассмотрены три медальных решения по датасету детекции опухоли мозга на МРТ. В приложённых ноутбуках фактически представлены YOLOv5s, YOLOv8x и YOLOv9s через YOLOvX. Лучшее качество в обзорных решениях показала YOLOv8x: Precision = 0.850, Recall = 0.896, mAP@0.50 = 0.921, mAP@0.50:0.95 = 0.710. Решение через YOLOvX, использующее YOLOv9s, также дало хороший результат (0.623 / 0.839 / 0.784 / 0.595), но уступило YOLOv8x. Ноутбук на YOLOv5s показал очень слабое качество (mAP@0.50 = 0.00782), однако это связано прежде всего с тем, что обучение велось всего 5 эпох, поэтому такой результат нельзя считать репрезентативным для самой архитектуры.\n",
    "\n",
    "Для собственной реализации была выбрана YOLOv8x как наиболее сильная и устойчивая модель среди доступных решений. После обучения получены метрики: Precision = 0.843, Recall = 0.790, mAP@0.50 = 0.881, mAP@0.50:0.95 = 0.642. Это немного ниже, чем в медальном ноутбуке YOLOv8x, но результат остаётся высоким и подтверждает, что архитектура хорошо подходит для данной задачи.\n",
    "\n",
    "Вывод.\n",
    "Среди рассмотренных моделей наиболее эффективной для данного датасета оказалась YOLOv8x. Она обеспечивает лучшее сочетание точности детекции и качества локализации. Архитектуры семейства YOLO в целом применимы для медицинской диагностики как средства предварительного обнаружения и локализации опухоли, однако использовать их следует только как вспомогательный инструмент поддержки врача, а не как автономную диагностическую систему."
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
