使用mmdetection 中的RegNet bcakbones替换YOLOX中原始的Backbone
将mmdet/models/backbones/regnet.py中相关的代码复制到YOLOX中,并进行适配
注意通道数要适配
in_channels = [64, 160, 384]
,可以通过调试后,先运行到后后端输出结果出,打印出通道数,得到通道后,在写到这个地方。
(yolox) xuefei@f123:/mnt/d/work/study/detect/8$ python -m yolox.tools.train -f exps/kitti_car_detection/yolox_regnet.py -d 0 -b 16 --fp16
2024-02-18 22:17:51 | INFO | yolox.core.trainer:126 - args: Namespace(batch_size=16, cache=False, ckpt=None, devices=0, dist_backend='nccl', dist_url=None, exp_file='exps/kitti_car_detection/yolox_regnet.py', experiment_name='yolox_regnet', fp16=True, logger='tensorboard', machine_rank=0, name=None, num_machines=1, occupy=False, opts=[], resume=False, start_epoch=None)
2024-02-18 22:17:51 | INFO | yolox.core.trainer:127 - exp value:
╒═══════════════════╤═══════════════════════════════════════════════════════════════╕
│ keys │ values │
╞═══════════════════╪═══════════════════════════════════════════════════════════════╡
│ seed │ None │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ output_dir │ './YOLOX_outputs' │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ print_interval │ 10 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ eval_interval │ 10 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ num_classes │ 7 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ depth │ 1.0 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ width │ 0.5 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ act │ 'silu' │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ data_num_workers │ 16 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ input_size │ (256, 832) │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ multiscale_range │ 5 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ data_dir │ '/mnt/d/BaiduNetdiskDownload/CV/KITTI/KITTI_YOLOX/img/' │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ train_ann │ '/mnt/d/BaiduNetdiskDownload/CV/KITTI/KITTI_YOLOX/train.json' │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ val_ann │ '/mnt/d/BaiduNetdiskDownload/CV/KITTI/KITTI_YOLOX/val.json' │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ test_ann │ '/mnt/d/BaiduNetdiskDownload/CV/KITTI/KITTI_YOLOX/test.json' │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ mosaic_prob │ 1.0 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ mixup_prob │ 1.0 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ hsv_prob │ 1.0 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ flip_prob │ 0.5 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ degrees │ 10.0 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ translate │ 0.1 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ mosaic_scale │ (0.1, 2) │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ enable_mixup │ True │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ mixup_scale │ (0.5, 1.5) │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ shear │ 2.0 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ warmup_epochs │ 5 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ max_epoch │ 300 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ warmup_lr │ 0 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ min_lr_ratio │ 0.05 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ basic_lr_per_img │ 0.00015625 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ scheduler │ 'yoloxwarmcos' │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ no_aug_epochs │ 80 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ ema │ True │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ weight_decay │ 0.0005 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ momentum │ 0.9 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ save_history_ckpt │ True │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ exp_name │ 'yolox_regnet' │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ test_size │ (256, 832) │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ test_conf │ 0.01 │
├───────────────────┼───────────────────────────────────────────────────────────────┤
│ nmsthre │ 0.65 │
╘═══════════════════╧═══════════════════════════════════════════════════════════════╛
2024-02-18 22:17:52 | INFO | yolox.core.trainer:133 - Model Summary: Params: 8.90M, Gflops: 10.70
2024-02-18 22:17:54 | INFO | yolox.data.datasets.kitti:64 - loading annotations into memory...
2024-02-18 22:17:55 | INFO | yolox.data.datasets.kitti:64 - Done (t=0.08s)
2024-02-18 22:17:55 | INFO | pycocotools.coco:86 - creating index...
2024-02-18 22:17:55 | INFO | pycocotools.coco:86 - index created!
2024-02-18 22:17:55 | INFO | yolox.core.trainer:151 - init prefetcher, this might take one minute or less...
2024-02-18 22:18:07 | INFO | yolox.data.datasets.kitti:64 - loading annotations into memory...
2024-02-18 22:18:08 | INFO | yolox.data.datasets.kitti:64 - Done (t=0.11s)
2024-02-18 22:18:08 | INFO | pycocotools.coco:86 - creating index...
2024-02-18 22:18:08 | INFO | pycocotools.coco:86 - index created!
2024-02-18 22:18:08 | INFO | yolox.core.trainer:187 - Training start...
2024-02-18 22:18:08 | INFO | yolox.core.trainer:188 -
YOLOX(
(backbone): YOLOPAFPNRegNet(
(backbone): RegNet(
(conv1): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
(bn1): BatchNorm2d(32, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(layer1): ResLayer(
(0): Bottleneck(
(conv1): Conv2d(32, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(32, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=2, bias=False)
(bn2): BatchNorm2d(32, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(32, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(32, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(32, 32, kernel_size=(1, 1), stride=(2, 2), bias=False)
(1): BatchNorm2d(32, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
)
(layer2): ResLayer(
(0): Bottleneck(
(conv1): Conv2d(32, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(64, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=4, bias=False)
(bn2): BatchNorm2d(64, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(64, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(32, 64, kernel_size=(1, 1), stride=(2, 2), bias=False)
(1): BatchNorm2d(64, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
(1): Bottleneck(
(conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(64, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=4, bias=False)
(bn2): BatchNorm2d(64, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(64, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
)
(layer3): ResLayer(
(0): Bottleneck(
(conv1): Conv2d(64, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(160, 160, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=10, bias=False)
(bn2): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(160, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(64, 160, kernel_size=(1, 1), stride=(2, 2), bias=False)
(1): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
(1): Bottleneck(
(conv1): Conv2d(160, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(160, 160, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=10, bias=False)
(bn2): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(160, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
(2): Bottleneck(
(conv1): Conv2d(160, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(160, 160, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=10, bias=False)
(bn2): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(160, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
(3): Bottleneck(
(conv1): Conv2d(160, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(160, 160, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=10, bias=False)
(bn2): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(160, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
(4): Bottleneck(
(conv1): Conv2d(160, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(160, 160, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=10, bias=False)
(bn2): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(160, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
(5): Bottleneck(
(conv1): Conv2d(160, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(160, 160, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=10, bias=False)
(bn2): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(160, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
(6): Bottleneck(
(conv1): Conv2d(160, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(160, 160, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=10, bias=False)
(bn2): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(160, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(160, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
)
(layer4): ResLayer(
(0): Bottleneck(
(conv1): Conv2d(160, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(384, 384, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=24, bias=False)
(bn2): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(384, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(160, 384, kernel_size=(1, 1), stride=(2, 2), bias=False)
(1): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
(1): Bottleneck(
(conv1): Conv2d(384, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=24, bias=False)
(bn2): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(384, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
(2): Bottleneck(
(conv1): Conv2d(384, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=24, bias=False)
(bn2): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(384, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
(3): Bottleneck(
(conv1): Conv2d(384, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=24, bias=False)
(bn2): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(384, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
(4): Bottleneck(
(conv1): Conv2d(384, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=24, bias=False)
(bn2): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(384, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
init_cfg={'type': 'Constant', 'val': 0, 'override': {'name': 'norm3'}}
(5): Bottleneck(
(conv1): Conv2d(384, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv2): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=24, bias=False)
(bn2): BatchNorm2d(384, eps=0.001, momentum=0.03, affine=True, track_running_stats=True)
(conv3): Conv2d(384, 384, kern