Проект для автоматической детекции и сегментации стен и комнат на архитектурных планах с использованием Detectron2 и Mask R-CNN.
Проект включает два типа моделей:
- Detection — детекция стен и комнат (bounding boxes)
- Segmentation — сегментация комнат с масками (instance segmentation)
После серии экспериментов с различными подходами (OpenCV, HEAT, MMDetection, YOLOv10), Detectron2 с Mask R-CNN был выбран как наиболее эффективное решение.
- ✅ Высокая точность: стабильная детекция и сегментация
- ✅ Эффективность: низкое потребление ресурсов (< 1GB VRAM)
- ✅ Скорость: быстрый inference (< 15 секунд с тайлингом)
- ✅ Масштабируемость: поддержка больших изображений через тайлинг
- ✅ Гибкость: CLI и FastAPI интерфейсы
- ✅ Конфигурируемость: JSON конфигурационные файлы для разных экспериментов
- Быстрый старт
- Установка
- Формат данных
- Обучение
- Fine-tuning
- Инференс
- API
- Конфигурация
- Сравнение версий train.py
- Структура проекта
# Создание conda окружения
conda create -n detectron python=3.10
conda activate detectron
# Установка PyTorch с CUDA
conda install pytorch==2.0.1 torchvision==0.15.2 pytorch-cuda=11.8 -c pytorch -c nvidia
# Установка Detectron2
pip install --no-build-isolation 'git+https://github.com/facebookresearch/detectron2.git'
# Установка зависимостей
pip install -r requirements.txt# Сегментация комнат с масками
python scripts/inference/segmentation_inference.py image.png --confidence 0.5
# С сохранением масок в PNG
python scripts/inference/segmentation_inference.py image.png --save-masks --mask-format png# FastAPI сервер для сегментации
python scripts/inference/segmentation_api.py --port 8001
# Тест через curl
curl -X POST "http://localhost:8001/predict?confidence=0.5" \
-F "file=@plan.png" -o result.json- Python 3.10+
- CUDA 11.8+ (для GPU)
- 8GB+ RAM
- 1GB+ VRAM (для GPU inference)
# 1. Создание окружения
conda create -n detectron python=3.10
conda activate detectron
# 2. Установка PyTorch
conda install pytorch==2.0.1 torchvision==0.15.2 pytorch-cuda=11.8 -c pytorch -c nvidia
# 3. Установка Detectron2
pip install --no-build-isolation 'git+https://github.com/facebookresearch/detectron2.git'
# 4. Установка зависимостей
pip install -r requirements.txtИли используйте скрипт установки:
chmod +x setup.sh
./setup.shПроект использует COCO формат для аннотаций. Структура директорий:
Data/
├── Detection/ # Данные для детекции (стены + комнаты)
│ ├── train/
│ │ ├── _annotations.coco.json
│ │ ├── image1.jpg
│ │ ├── image2.jpg
│ │ └── ...
│ └── valid/
│ ├── _annotations.coco.json
│ └── [images]
│
└── Segmentation/ # Данные для сегментации (только комнаты)
├── train/
│ ├── _annotations.coco.json
│ └── [images]
└── valid/
├── _annotations.coco.json
└── [images]
Файл _annotations.coco.json должен содержать:
{
"info": {...},
"licenses": [...],
"images": [
{
"id": 1,
"file_name": "image1.jpg",
"width": 1024,
"height": 768
}
],
"annotations": [
{
"id": 1,
"image_id": 1,
"category_id": 1,
"bbox": [x, y, width, height],
"area": 12345,
"segmentation": [[x1, y1, x2, y2, ...]],
"iscrowd": 0
}
],
"categories": [
{"id": 1, "name": "room", "supercategory": "rooms"}
]
}| Поле | Формат | Описание |
|---|---|---|
bbox |
[x, y, w, h] |
Bounding box в формате XYWH |
segmentation |
[[x1,y1,x2,y2,...]] |
Полигон маски (для сегментации) |
category_id |
int |
ID категории (начиная с 1) |
area |
float |
Площадь объекта в пикселях |
- Detection: CubiCasa5k — 5000 архитектурных планов
- Segmentation: Roboflow test-cubi — датасет для сегментации комнат
# Базовое обучение (использует дефолтные пути Data/Detection/)
python scripts/detection/train.py \
--num-gpus 1 \
--batch-size 2 \
--max-iter 50000
# С конфигурационным файлом (рекомендуется)
python scripts/detection/train.py \
--config detection_faster_r101_warmupcosine_2cls.json \
--num-gpus 1 \
--batch-size 2 \
--max-iter 50000
# С Early Stopping (рекомендуется)
python scripts/detection/train.py \
--num-gpus 1 \
--batch-size 4 \
--lr 0.0001 \
--max-iter 50000 \
--eval-period 5000 \
--early-stopping-patience 5
# С указанием своих данных
python scripts/detection/train.py \
--config detection_cascade_r50_warmupcosine_2cls.json \
--num-gpus 1 \
--batch-size 4 \
--lr 0.0001 \
--max-iter 50000 \
--eval-period 5000 \
--early-stopping-patience 5 \
--train-json /path/to/train/_annotations.coco.json \
--train-images /path/to/train/ \
--val-json /path/to/valid/_annotations.coco.json \
--val-images /path/to/valid/
# Grid Search гиперпараметров (долгий процесс)
python scripts/detection/train.py \
--num-gpus 1 \
--hypersearch# Базовое обучение (использует дефолтные пути Data/Segmentation/)
python scripts/segmentation/train.py \
--num-gpus 1 \
--batch-size 2 \
--max-iter 50000
# С указанием своих данных
python scripts/segmentation/train.py \
--num-gpus 1 \
--batch-size 4 \
--lr 0.0001 \
--max-iter 50000 \
--eval-period 5000 \
--train-json /path/to/train/_annotations.coco.json \
--train-images /path/to/train/ \
--val-json /path/to/valid/_annotations.coco.json \
--val-images /path/to/valid/Проект поддерживает JSON конфигурационные файлы для гибкой настройки моделей. Конфигурации находятся в папке configs/.
Формат названий: {тип}_{базовая_конфигурация}_{backbone}_{lr_scheduler}_{классы}.json
| Конфигурация | Описание | Backbone | LR Scheduler | Классы |
|---|---|---|---|---|
detection_cascade_r50_warmupcosine_2cls.json ⭐ БАЗОВЫЙ |
Cascade R-CNN ResNet-50 FPN | Cascade R-CNN R-50 | WarmupCosineLR | 2 (wall, room) |
detection_faster_r101_warmupcosine_2cls.json |
Faster R-CNN ResNet-101 FPN | Faster R-CNN R-101 | WarmupCosineLR | 2 (wall, room) |
detection_faster_r50_warmupcosine_2cls.json |
Faster R-CNN ResNet-50 FPN | Faster R-CNN R-50 | WarmupCosineLR | 2 (wall, room) |
detection_faster_r50_warmupcosine_4cls.json |
Faster R-CNN с 4 классами | Faster R-CNN R-50 | WarmupCosineLR | 4 (wall, room, door, window) |
⭐ Базовый конфиг: detection_cascade_r50_warmupcosine_2cls.json (также доступен как default.json)
Использование:
# С конфигурацией
python scripts/detection/train.py --config detection_faster_r101_warmupcosine_2cls.json ...
# Без конфигурации (используется default.json -> detection_cascade_r50_warmupcosine_2cls.json)
python scripts/detection/train.py ...Структура конфигурационного файла:
{
"name": "resnet101",
"description": "Faster R-CNN с ResNet-101",
"model": {
"model_zoo_config": "COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml",
"fallback_config": "COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml",
"num_classes": 2,
"device": "cuda"
},
"classes": {
"0": "wall",
"1": "room"
},
"input": {
"min_size_test": 800,
"max_size_test": 2000
},
"rpn": {
"pre_nms_topk_test": 3000,
"post_nms_topk_test": 1000,
"nms_thresh": 0.7
},
"roi_heads": {
"score_thresh_test": 0.5,
"pooler_resolution": 14
},
"anchor_generator": {
"aspect_ratios": [[0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0]],
"sizes": [[8, 16], [16, 32], [32, 64], [64, 128], [128, 256]]
}
}Подробнее: configs/README.md
| Параметр | Описание | По умолчанию |
|---|---|---|
--config |
JSON конфигурационный файл (из configs/) | default.json |
--num-gpus |
Количество GPU | 1 |
--batch-size |
Размер батча | 2 |
--lr |
Learning rate | 0.0001 |
--max-iter |
Макс. итераций | 50000 |
--eval-period |
Период валидации | 5000 |
--early-stopping-patience |
Early stopping patience (0=выкл) | 0 |
--hypersearch |
Включить grid search гиперпараметров | False |
--output-dir |
Директория результатов | auto |
--train-json |
Путь к train аннотациям | Data/{type}/train/ |
--val-json |
Путь к valid аннотациям | Data/{type}/valid/ |
Автоматически останавливает обучение при переобучении:
--early-stopping-patience 5 # Остановка после 5 eval периодов без улучшенияАвтоматический поиск лучших параметров:
--hypersearch # Перебирает комбинации LR, batch size, max iter- ✅ Автоматическое чтение классов из JSON
- ✅ Кэширование файлов (ускорение загрузки в 10-100 раз)
- ✅ Прогресс-бары для загрузки данных
- ✅ Автоматическое логирование гиперпараметров
Подробнее: docs/TRAINING_ADVANCED.md
После обучения результаты сохраняются в:
output/
├── detection/
│ └── train_1/
│ ├── model_final.pth # Финальная модель
│ ├── model_best.pth # Лучшая модель (по AP)
│ ├── metrics.json # Метрики обучения
│ └── events.out.tfevents* # TensorBoard логи
└── segmentation/
└── train_1/
└── ...
Просмотр метрик в TensorBoard:
tensorboard --logdir output/Fine-tuning эффективен когда:
- ✅ У вас есть 5-100 аннотированных изображений нового типа
- ✅ Новые изображения качественно отличаются от обучающей выборки (другой стиль, разрешение)
- ✅ Нужен быстрый результат без полного переобучения (30 минут вместо 8 часов)
- ✅ Основная модель работает неплохо, но есть специфичные ошибки
Fine-tuning НЕ эффективен когда:
- ❌ Всего 1-3 изображения (высокий риск переобучения)
- ❌ Новые изображения типичны для датасета (лучше добавить в train)
- ❌ Модель вообще плохо работает на новых данных (нужно полное переобучение)
# Fine-tuning на малых данных (5-20 изображений)
python scripts/detection/finetune.py \
--model-path ./output/detection/train_1/model_best.pth \
--train-json ./Data/NewData/train/_annotations.coco.json \
--train-images ./Data/NewData/train/ \
--val-json ./Data/NewData/valid/_annotations.coco.json \
--val-images ./Data/NewData/valid/ \
--lr 0.00001 \
--max-iter 1500 \
--batch-size 1 \
--freeze-backbone-iters 500
# Fine-tuning на средних данных (20-100 изображений)
python scripts/detection/finetune.py \
--model-path ./output/detection/train_1/model_best.pth \
--train-json ./Data/NewData/train/_annotations.coco.json \
--train-images ./Data/NewData/train/ \
--val-json ./Data/NewData/valid/_annotations.coco.json \
--val-images ./Data/NewData/valid/ \
--lr 0.00005 \
--max-iter 3000 \
--batch-size 2# Fine-tuning на малых данных (5-20 изображений)
python scripts/segmentation/finetune.py \
--model-path ./output/segmentation/train_1/model_best.pth \
--train-json ./Data/NewData/train/_annotations.coco.json \
--train-images ./Data/NewData/train/ \
--val-json ./Data/NewData/valid/_annotations.coco.json \
--val-images ./Data/NewData/valid/ \
--lr 0.00001 \
--max-iter 1500 \
--batch-size 1 \
--freeze-backbone-iters 500
# Fine-tuning на средних данных (20-100 изображений)
python scripts/segmentation/finetune.py \
--model-path ./output/segmentation/train_1/model_best.pth \
--train-json ./Data/NewData/train/_annotations.coco.json \
--train-images ./Data/NewData/train/ \
--val-json ./Data/NewData/valid/_annotations.coco.json \
--val-images ./Data/NewData/valid/ \
--lr 0.00005 \
--max-iter 3000 \
--batch-size 2| Параметр | Описание | Рекомендуемые значения |
|---|---|---|
--model-path |
Путь к обученной модели | output/{type}/train_N/model_best.pth |
--lr |
Learning rate (НИЗКИЙ!) | 0.00001-0.00005 (в 10-20 раз меньше) |
--max-iter |
Количество итераций | 1000-5000 (меньше чем при обучении) |
--batch-size |
Размер батча | 1-2 (маленький для малых данных) |
--eval-period |
Период валидации | 100-500 (частая валидация) |
--freeze-backbone-iters |
Заморозка backbone | 0-500 (500 для малых данных) |
ВАЖНО: При fine-tuning на малых данных высок риск переобучения!
# Запустите TensorBoard для мониторинга
tensorboard --logdir output/
# Следите за графиками:
# ✅ Хорошо: train loss и val loss падают вместе
# ⚠️ Переобучение: train loss падает, val loss растёт
# 🛑 STOP: если val loss растёт 3+ валидации подрядoutput/
├── detection/
│ └── finetune_1/
│ ├── model_best_finetuned.pth # Лучшая модель после fine-tuning
│ ├── model_final.pth # Финальная модель
│ ├── finetune_params.json # Параметры fine-tuning
│ └── events.out.tfevents* # TensorBoard логи
└── segmentation/
└── finetune_1/
└── ...
# Базовый запуск (тайлинг определяется автоматически)
python scripts/inference/segmentation/inference.py image.png
# С настройками модели
python scripts/inference/segmentation/inference.py image.png \
--model-path ./output/segmentation/train_1/model_best.pth \
--confidence 0.5 \
--output-dir ./results \
--save-masks \
--mask-format png
# Форматы масок: png, rle (COCO), polygon
python scripts/inference/segmentation/inference.py image.png --mask-format rle
# Управление тайлингом
# Принудительно включить тайлинг с настройками
python scripts/inference/segmentation/inference.py large_image.png \
--use-tiling true \
--tile-size 2048 \
--overlap 512
# Отключить тайлинг (обработать изображение целиком)
python scripts/inference/segmentation/inference.py small_image.png \
--no-tiling# Автоматический режим (рекомендуется)
# Автоматически выбирает режим по размеру изображения
python scripts/detection/predict.py image.png
# Режим FULL: обработка без тайлинга (для небольших изображений)
python scripts/detection/predict.py image.png --mode full \
--room-threshold 0.7 \
--wall-threshold 0.3
# Режим TILED: тайлинг для всех объектов (стены и комнаты)
python scripts/detection/predict.py image.png --mode tiled \
--tile-size 2048 \
--overlap 512 \
--room-threshold 0.85 \
--wall-threshold 0.5
# Режим HYBRID: комбинированный подход (стены через тайлинг, комнаты целиком)
python scripts/detection/predict.py image.png --mode hybrid \
--tile-size 1024 \
--overlap 256 \
--room-threshold 0.67 \
--wall-threshold 0.4
# Без визуализации (только JSON)
python scripts/detection/predict.py image.png --no-visualize
# Без сохранения JSON
python scripts/detection/predict.py image.png --no-json
# Создание scratch версии (белый фон, черные стены, заштрихованные комнаты)
# Функция draw_scratch доступна в коде, можно добавить флаг --draw-scratch| Параметр | Описание | По умолчанию |
|---|---|---|
--mode |
Режим работы: full, tiled, hybrid, auto |
auto |
--api-url |
URL API эндпоинта | http://localhost:8000/predict |
--room-threshold |
Порог уверенности для комнат | 0.7 |
--wall-threshold |
Порог уверенности для стен | 0.3 |
--tile-size |
Размер тайла (для режимов tiled/hybrid) | 1024 |
--overlap |
Перекрытие между тайлами | 256 |
--nms-iou |
Порог IoU для NMS (для режимов tiled/hybrid) | 0.3 |
--min-box-area |
Минимальная площадь бокса | 100 |
--output-path |
Путь для сохранения визуализации | auto |
--no-json |
Не сохранять результаты в JSON | False |
--no-visualize |
Не создавать визуализацию | False |
--auto-threshold |
Порог размера для авто-режима | 1024 |
-
auto(по умолчанию): Автоматически выбирает режим по размеру изображения- Изображения ≤ 1024px →
full - Изображения > 1024px →
hybrid
- Изображения ≤ 1024px →
-
full: Обработка без тайлинга (для небольших изображений)- Быстро
- Подходит для изображений до 1024x1024
-
tiled: Тайлинг для всех объектов (стены и комнаты)- Точнее для больших изображений
- Дольше по времени
-
hybrid: Комбинированный подход- Стены через тайлинг (точнее для длинных стен)
- Комнаты на полном изображении (лучше для больших комнат)
- Оптимальный баланс скорости и точности
Автоматический режим (по умолчанию):
- Тайлинг включается автоматически для изображений > 1024x1024
- Для меньших изображений обработка целиком
Ручное управление:
# Принудительно включить тайлинг
--use-tiling True
# Принудительно отключить тайлинг
--no-tiling
# Настройка параметров тайлинга
--tile-size 2048 # Размер тайла (256-4096)
--overlap 512 # Перекрытие (0-512){
"rooms": [
{
"id": 0,
"bbox": {"x1": 100, "y1": 200, "x2": 300, "y2": 400, "width": 200, "height": 200},
"confidence": 0.95,
"class_name": "room",
"area_pixels": 35000,
"mask_path": "image_masks/room_000.png"
}
],
"stats": {
"total_rooms": 5,
"image_size": {"width": 1024, "height": 768},
"used_tiling": false
}
}# Запуск на порту 8001
python scripts/inference/segmentation/api.py --port 8001
# С указанием модели
python scripts/inference/segmentation/api.py \
--model-path ./output/segmentation/train_1/model_best.pth \
--host 0.0.0.0 \
--port 8001# Запуск на порту 8000 (использует default.json)
python scripts/detection/api.py
# С конфигурационным файлом
python scripts/detection/api.py \
--config detection_faster_r101_warmupcosine_2cls.json \
--host 0.0.0.0 \
--port 8000
# С указанием модели и конфигурации
python scripts/detection/api.py \
--config detection_cascade_r50_warmupcosine_2cls.json \
--model-path ./output/detection/train_1/model_best.pth \
--host 0.0.0.0 \
--port 8000
# Через переменные окружения
CONFIG_PATH=detection_faster_r101_warmupcosine_2cls.json MODEL_PATH=./weights/model_best.pth python scripts/detection/api.py| Endpoint | Метод | Описание |
|---|---|---|
/ |
GET | Информация об API |
/health |
GET | Проверка здоровья |
/model_info |
GET | Детальная информация о модели (backbone, классы, конфигурация) |
/predict |
POST | Детекция одного изображения |
/predict_batch |
POST | Batch детекция нескольких изображений |
Python:
import requests
# Детекция изображения с общим порогом
with open("plan.png", "rb") as f:
response = requests.post(
"http://localhost:8000/predict",
files={"file": f},
params={"confidence": 0.5}
)
result = response.json()
print(f"Найдено детекций: {result['stats']['total_detections']}")
print(f" Стены: {result['stats']['num_walls']}")
print(f" Комнаты: {result['stats']['num_rooms']}")
# Детекция с индивидуальными порогами для классов
with open("plan.png", "rb") as f:
response = requests.post(
"http://localhost:8000/predict",
files={"file": f},
params={
"confidence": 0.5,
"wall_confidence": 0.3,
"room_confidence": 0.7
}
)
result = response.json()
for wall in result['walls']:
print(f" Wall: {wall['confidence']:.2f}")
# Получение информации о модели
response = requests.get("http://localhost:8000/model_info")
model_info = response.json()
print(f"Модель: {model_info['model_type']}")
print(f"Backbone: {model_info['backbone']}")
print(f"Классы: {model_info['classes']}")cURL:
# Получить JSON с результатами (общий порог)
curl -X POST "http://localhost:8000/predict?confidence=0.5" \
-F "file=@plan.png" \
-o result.json
# С индивидуальными порогами для классов
curl -X POST "http://localhost:8000/predict?confidence=0.5&wall_confidence=0.3&room_confidence=0.7" \
-F "file=@plan.png" \
-o result.json
# Получить информацию о модели
curl -X GET "http://localhost:8000/model_info" \
-o model_info.json
# Batch обработка нескольких изображений
curl -X POST "http://localhost:8000/predict_batch?confidence=0.5" \
-F "files=@plan1.png" \
-F "files=@plan2.png" \
-o batch_result.json| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
confidence |
float | Общий порог уверенности (0.0-1.0) | 0.5 |
wall_confidence |
float | Порог для стен (опционально, переопределяет общий) | None |
room_confidence |
float | Порог для комнат (опционально, переопределяет общий) | None |
door_confidence |
float | Порог для дверей (для 4-классных моделей) | None |
window_confidence |
float | Порог для окон (для 4-классных моделей) | None |
API автоматически определяет архитектуру модели (ResNet-50 или ResNet-101) следующими способами:
- Через config.yaml - проверяет файл
config.yamlрядом с моделью и читаетDEPTHвRESNETS - Через state_dict - анализирует ключи в checkpoint (например,
res4.6,res4.22для ResNet-101) - По размеру файла - fallback метод (ResNet-50 обычно ~300MB, ResNet-101 ~600MB)
Это позволяет автоматически загружать правильную конфигурацию без явного указания.
После запуска сервера документация доступна по адресу:
- Swagger UI:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
floorplan-detection/
├── README.md # Документация
├── requirements.txt # Зависимости
├── setup.sh # Скрипт установки
│
├── Data/ # Данные (COCO формат)
│ ├── Detection/
│ │ ├── train/
│ │ │ ├── _annotations.coco.json
│ │ │ └── [images]
│ │ └── valid/
│ └── Segmentation/
│ ├── train/
│ └── valid/
│
├── configs/ # Конфигурационные файлы
│ ├── default.json # Символическая ссылка на базовый конфиг
│ ├── detection_cascade_r50_warmupcosine_2cls.json # ⭐ Базовый конфиг
│ ├── detection_faster_r101_warmupcosine_2cls.json # ResNet-101 конфигурация
│ ├── detection_faster_r50_warmupcosine_2cls.json # Faster R-CNN R-50
│ ├── detection_faster_r50_warmupcosine_4cls.json # 4 класса конфигурация
│ └── README.md # Документация конфигураций
│
├── scripts/ # Скрипты
│ ├── detection/ # Детекция (стены + комнаты)
│ │ ├── api.py # FastAPI сервер с поддержкой конфигов и автоопределением ResNet-50/101
│ │ ├── predict.py # Универсальный скрипт предсказания (режимы: full, tiled, hybrid)
│ │ ├── register_detection_dataset.py
│ │ └── train.py # Обучение с поддержкой конфигов
│ │
│ ├── segmentation/ # Сегментация (комнаты)
│ │ ├── register_dataset.py
│ │ └── train.py
│ │
│ ├── inference/ # Инференс
│ │ └── segmentation/ # Инференс сегментации
│ │ ├── api.py # FastAPI сервер сегментации
│ │ └── inference.py # CLI для сегментации
│ │
│ └── utils/ # Утилиты
│ └── tensorboard_hook.py
│
├── docs/ # Документация
│ └── DATASET.md
│
├── examples/ # Примеры результатов
│ ├── plan_example-1.png
│ ├── plan_example-1_hybrid.png
│ └── plan_example-1_tiled.png
│
├── weights/ # Веса моделей
│ └── README.md
│
└── output/ # Результаты обучения
├── detection/
│ └── train_N/
└── segmentation/
└── train_N/
| Метрика | Detection | Segmentation |
|---|---|---|
| VRAM | < 1GB | < 1GB |
| Inference (тайлинг) | < 15 сек | < 15 сек |
| Поддержка больших изображений | ✅ | ✅ |
| Оригинал | Сегментация |
|---|---|
![]() |
![]() |
Проект поддерживает гибкую систему конфигураций через JSON файлы в папке configs/. Это позволяет легко переключаться между различными экспериментами:
- Разные backbone: ResNet-50, ResNet-101, Cascade R-CNN
- Разные anchor sizes: оптимизированные для стен и комнат
- Разные классы: 2 класса (стены, комнаты) или 4 класса (+ двери, окна)
- Разные разрешения: настройка входного разрешения изображений
Расположение: floorplan-detection/configs/
Использование:
# При обучении
python scripts/detection/train.py --config resnet101.json ...
# При запуске API
python scripts/detection/api.py --config resnet101.jsonДоступные конфигурации:
detection_cascade_r50_warmupcosine_2cls.json⭐ - базовая (Cascade R-CNN ResNet-50, 2 класса)detection_faster_r101_warmupcosine_2cls.json- Faster R-CNN ResNet-101 (2 класса)detection_faster_r50_warmupcosine_2cls.json- Faster R-CNN ResNet-50 (2 класса)detection_faster_r50_warmupcosine_4cls.json- Faster R-CNN ResNet-50 (4 класса: стены, комнаты, двери, окна)
⭐ Базовый конфиг: detection_cascade_r50_warmupcosine_2cls.json (также доступен как default.json)
Подробнее: configs/README.md
По умолчанию модель использует:
- Detection:
COCO-Detection/cascade_rcnn_R_50_FPN_3x.yaml - Segmentation:
COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml
Основные параметры:
- Backbone: ResNet-50 с FPN (можно изменить через конфиг)
- Pre-training: COCO
- Входной размер: адаптивный (через тайлинг)
В проекте есть две версии скрипта обучения:
Особенности:
- ✅ Поддержка конфигурационных JSON файлов (
--config) - ✅ Early Stopping Hook - автоматическая остановка при переобучении
- ✅ Grid Search гиперпараметров (
--hypersearch) - ✅ Гибкая система конфигурации - можно менять backbone, anchors, классы через JSON
- ✅ Автоматическое определение NUM_CLASSES из metadata или конфига
- ✅ Поддержка разных режимов обучения (обычное, grid search)
- ✅ Расширенное логирование и сохранение гиперпараметров
- 📏 926 строк кода - более функциональная версия
Использование:
python scripts/detection/train.py --config resnet101.json --early-stopping-patience 5Особенности:
- ✅ Улучшенные настройки по умолчанию (anchor sizes, resolution, etc.)
- ✅ Cosine LR scheduler с warmup - лучшая сходимость
- ✅ Multi-scale training - обучение на разных разрешениях
- ✅ Увеличенное количество proposals (3000 vs 1000)
- ✅ Увеличенное разрешение ROI pooling (14×14 vs 7×7)
- ❌ Нет поддержки конфигурационных файлов - настройки захардкожены
- ❌ Нет Early Stopping - нужно вручную следить за переобучением
- ❌ Нет Grid Search - нет автоматического поиска гиперпараметров
- 📏 426 строк кода - более простая версия
Использование:
python train.py --model-config "COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml"-
Используйте
floorplan-detection/scripts/detection/train.pyдля:- Экспериментов с разными конфигурациями
- Автоматического поиска лучших гиперпараметров
- Обучения с Early Stopping
- Гибкой настройки через JSON конфиги
-
Используйте
floorplan-detection-new/train.pyдля:- Быстрого обучения с улучшенными настройками по умолчанию
- Когда нужны конкретные оптимизации (multi-scale, cosine LR)
- Когда не нужна гибкость конфигураций
Проект использует Detectron2 (Apache 2.0) и другие open-source библиотеки.
Это исследовательский проект. Для вопросов и предложений создавайте issues.

