60 lines
3.7 KiB
Python
60 lines
3.7 KiB
Python
"""
|
|
Centralized configuration for the person detection dataset pipeline.
|
|
All tunable parameters are defined here.
|
|
"""
|
|
import os
|
|
|
|
# ──────────────────────────────────────────────
|
|
# Paths
|
|
# ──────────────────────────────────────────────
|
|
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
VIDEO_DIR = os.path.join(BASE_DIR, "video_data")
|
|
DATASET_DIR = os.path.join(BASE_DIR, "dataset")
|
|
CHECKPOINT_DIR = os.path.join(BASE_DIR, "checkpoints")
|
|
LOG_DIR = os.path.join(BASE_DIR, "logs")
|
|
|
|
# Model paths
|
|
DETECTOR_MODEL = os.path.join(BASE_DIR, "yolo26x.pt") # Large model for auto-labeling
|
|
TRAIN_MODEL = "yolo26n.pt" # Nano model to train (auto-downloads)
|
|
|
|
# ──────────────────────────────────────────────
|
|
# Dataset Extraction
|
|
# ──────────────────────────────────────────────
|
|
MAX_DATASET_SIZE_GB = 50 # Stop extraction if dataset exceeds this
|
|
JPEG_QUALITY = 85 # JPEG save quality (1-100)
|
|
DETECTION_CONF = 0.35 # Min confidence for person detection
|
|
DETECTION_IOU = 0.45 # NMS IoU threshold
|
|
BATCH_SIZE = 16 # Frames per YOLO inference batch
|
|
PERSON_CLASS_ID = 0 # YOLO class ID for "person"
|
|
|
|
# ──────────────────────────────────────────────
|
|
# Adaptive Sampling
|
|
# ──────────────────────────────────────────────
|
|
BASE_FPS = 1.0 # Default: 1 frame per second
|
|
HIGH_FPS = 3.0 # When person detected: 3 frames per second
|
|
LOW_FPS = 0.5 # When idle (no person): 0.5 frames per second
|
|
HIGH_FPS_DURATION = 5 # Seconds to stay at high FPS after person detected
|
|
LOW_FPS_THRESHOLD = 10 # Seconds without person before dropping to low FPS
|
|
|
|
# ──────────────────────────────────────────────
|
|
# Train/Test Split (Camera-Level)
|
|
# ──────────────────────────────────────────────
|
|
TEST_CAMERAS = 4 # Number of cameras to hold out for testing
|
|
RANDOM_SEED = 42 # For reproducible camera selection
|
|
|
|
# ──────────────────────────────────────────────
|
|
# Training
|
|
# ──────────────────────────────────────────────
|
|
TRAIN_EPOCHS = 100
|
|
TRAIN_BATCH = 16 # Batch size for training (adjust for VRAM)
|
|
TRAIN_IMGSZ = 640 # Training image size
|
|
EARLY_STOP_PATIENCE = 15 # Stop if no improvement for N epochs
|
|
TRAIN_WORKERS = 8 # DataLoader workers
|
|
TRAIN_PROJECT = os.path.join(BASE_DIR, "runs", "detect")
|
|
TRAIN_NAME = "person_detection"
|
|
|
|
# ──────────────────────────────────────────────
|
|
# Video file extensions to process
|
|
# ──────────────────────────────────────────────
|
|
VIDEO_EXTENSIONS = {".mp4", ".avi", ".mkv", ".mov", ".wmv", ".flv"}
|