#!/usr/bin/env python3 # -*- coding:utf-8 -*- # Copyright (c) Megvii, Inc. and its affiliates. import os from yolox.exp import Exp as MyExp class Exp(MyExp): def __init__(self): super(Exp, self).__init__() self.data_dir = "/home/kitraining/To_Annotate/" self.train_ann = "coco_project_54_train.json" self.val_ann = "coco_project_54_valid.json" self.test_ann = "coco_project_54_test.json" self.num_classes = 3 self.pretrained_ckpt = r'/home/kitraining/Yolox/YOLOX-main/pretrained/YOLOX_s.pth' self.depth = 0.33 self.width = 0.50 self.exp_name = os.path.split(os.path.realpath(__file__))[1].split(".")[0] # -------------- training config --------------------- # self.use_focal_loss = True # Focal Loss for better class imbalance handling self.focal_loss_alpha = 0.25 self.focal_loss_gamma = 1.5 self.warmup_epochs = 20 # More warmup self.max_epoch = 150 # More epochs for better convergence self.act = "silu" # Activation function self.no_aug_epochs = 30 # No augmentation for last epochs to stabilize training self.class_weights = [1.0, 1.0, 1.0] # Weights for each class to handle imbalance # Thresholds self.test_conf = 0.15 # Low to catch more the second class self.nmsthre = 0.5 # IoU threshold for NMS # Data Augmentation intens to improve generalization self.enable_mixup = True self.mixup_prob = 0.7 # mixup self.mosaic_prob = 0.8 # mosaico self.degrees = 20.0 # Rotation self.translate = 0.2 # Translation self.scale = (0.5, 1.5) # Scaling self.shear = 5.0 # Shear self.flip_prob = 0.8 self.hsv_prob = 1.0 # Learning rate self.basic_lr_per_img = 0.001 / 64.0 # Lower LR to avoid divergence self.scheduler = "yoloxwarmcos" self.min_lr_ratio = 0.01 # Loss weights self.cls_loss_weight = 8.0 # More weight to the classification loss self.obj_loss_weight = 1.0 self.reg_loss_weight = 1.0 # Input size bigger for better detection of small objects like babys self.input_size = (832, 832) self.test_size = (832, 832) # Batch size self.batch_size = 5 # Reduce if you have memory issues