Skip to content

Commit

Permalink
Merge pull request #38 from Megvii-BaseDetection/add-sche-exps
Browse files Browse the repository at this point in the history
[Enhance]: Add sche exps.
  • Loading branch information
yinchimaoliang authored Aug 27, 2022
2 parents a030aae + 543ad5f commit 647b9b9
Show file tree
Hide file tree
Showing 8 changed files with 308 additions and 48 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ python [EXP_PATH] --ckpt_path [CKPT_PATH] -e -b 8 --gpus 8
### Benchmark
|Backbone |mAP |mATE| mASE | mAOE |mAVE| mAAE | NDS | weights |
| ------ | :---: |:---: |:---: | :---: | :----: | :----: | :----: | :----: |
|[R50](exps/bev_depth_lss_r50_256x704_128x128_24e_2key.py)| 0.3329 | 0.6832 |0.2761 | 0.5446 | 0.5258 | 0.2259 | 0.4409 | [github](https://github.com/Megvii-BaseDetection/BEVDepth/releases/download/v0.1.0/bev_depth_lss_r50_256x704_128x128_24e_2key.pth)
|[R50](exps/bev_depth_lss_r50_256x704_128x128_20e_cbgs_2key_da.py)| 0.3589 | 0.6119 |0.2692 | 0.5074 | 0.4086 | 0.2009 | 0.4797 | [github](https://github.com/Megvii-BaseDetection/BEVDepth/releases/download/v0.1.0/bev_depth_lss_r50_256x704_128x128_20e_cbgs_2key_da.pth) |
|[R50](exps/bev_depth_lss_r50_256x704_128x128_24e_2key_ema.py)| 0.3329 | 0.6832 |0.2761 | 0.5446 | 0.5258 | 0.2259 | 0.4409 | [github](https://github.com/Megvii-BaseDetection/BEVDepth/releases/download/v0.1.0/bev_depth_lss_r50_256x704_128x128_24e_2key.pth)
|[R50](exps/bev_depth_lss_r50_256x704_128x128_20e_cbgs_2key_da_ema.py)| 0.3589 | 0.6119 |0.2692 | 0.5074 | 0.4086 | 0.2009 | 0.4797 | [github](https://github.com/Megvii-BaseDetection/BEVDepth/releases/download/v0.1.0/bev_depth_lss_r50_256x704_128x128_20e_cbgs_2key_da.pth) |

## Cite BEVDepth
If you use BEVDepth in your research, please cite our work by using the following BibTeX entry:
Expand Down
42 changes: 22 additions & 20 deletions exps/bev_depth_lss_r50_256x704_128x128_20e_cbgs_2key_da.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,33 @@
# Copyright (c) Megvii Inc. All rights reserved.
"""
mAP: 0.3589
mATE: 0.6119
mASE: 0.2692
mAOE: 0.5074
mAVE: 0.4086
mAAE: 0.2009
NDS: 0.4797
Eval time: 183.3s
mAP: 0.3484
mATE: 0.6159
mASE: 0.2716
mAOE: 0.4144
mAVE: 0.4402
mAAE: 0.1954
NDS: 0.4805
Eval time: 110.7s
Per-class results:
Object Class AP ATE ASE AOE AVE AAE
car 0.559 0.475 0.157 0.112 0.370 0.205
truck 0.270 0.659 0.196 0.103 0.356 0.181
bus 0.374 0.651 0.184 0.072 0.846 0.326
trailer 0.179 0.963 0.227 0.512 0.294 0.127
construction_vehicle 0.081 0.825 0.481 1.352 0.094 0.345
pedestrian 0.363 0.690 0.297 0.831 0.491 0.244
motorcycle 0.354 0.580 0.255 0.545 0.615 0.164
bicycle 0.301 0.447 0.280 0.920 0.203 0.015
traffic_cone 0.539 0.435 0.324 nan nan nan
barrier 0.569 0.394 0.293 0.120 nan nan
car 0.553 0.480 0.157 0.117 0.386 0.205
truck 0.252 0.645 0.202 0.097 0.381 0.185
bus 0.378 0.674 0.197 0.090 0.871 0.298
trailer 0.163 0.932 0.230 0.409 0.543 0.098
construction_vehicle 0.076 0.878 0.495 1.015 0.103 0.344
pedestrian 0.361 0.694 0.300 0.816 0.491 0.247
motorcycle 0.319 0.569 0.252 0.431 0.552 0.181
bicycle 0.286 0.457 0.255 0.630 0.194 0.006
traffic_cone 0.536 0.438 0.339 nan nan nan
barrier 0.559 0.392 0.289 0.124 nan nan
"""
from argparse import ArgumentParser, Namespace

import pytorch_lightning as pl
import torch
import torch.nn as nn
from torch.cuda.amp.autocast_mode import autocast
from torch.optim.lr_scheduler import MultiStepLR

from callbacks.ema import EMACallback
from exps.bev_depth_lss_r50_256x704_128x128_24e_2key import \
Expand Down Expand Up @@ -135,8 +136,9 @@ def configure_optimizers(self):
self.batch_size_per_device * self.gpus
optimizer = torch.optim.AdamW(self.model.parameters(),
lr=lr,
weight_decay=1e-2)
return [optimizer]
weight_decay=1e-7)
scheduler = MultiStepLR(optimizer, [16, 19])
return [[optimizer], [scheduler]]


def main(args: Namespace) -> None:
Expand Down
93 changes: 93 additions & 0 deletions exps/bev_depth_lss_r50_256x704_128x128_20e_cbgs_2key_da_ema.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Copyright (c) Megvii Inc. All rights reserved.
"""
mAP: 0.3589
mATE: 0.6119
mASE: 0.2692
mAOE: 0.5074
mAVE: 0.4086
mAAE: 0.2009
NDS: 0.4797
Eval time: 183.3s
Per-class results:
Object Class AP ATE ASE AOE AVE AAE
car 0.559 0.475 0.157 0.112 0.370 0.205
truck 0.270 0.659 0.196 0.103 0.356 0.181
bus 0.374 0.651 0.184 0.072 0.846 0.326
trailer 0.179 0.963 0.227 0.512 0.294 0.127
construction_vehicle 0.081 0.825 0.481 1.352 0.094 0.345
pedestrian 0.363 0.690 0.297 0.831 0.491 0.244
motorcycle 0.354 0.580 0.255 0.545 0.615 0.164
bicycle 0.301 0.447 0.280 0.920 0.203 0.015
traffic_cone 0.539 0.435 0.324 nan nan nan
barrier 0.569 0.394 0.293 0.120 nan nan
"""
from argparse import ArgumentParser, Namespace

import pytorch_lightning as pl
import torch

from callbacks.ema import EMACallback
from exps.bev_depth_lss_r50_256x704_128x128_20e_cbgs_2key_da import \
BEVDepthLightningModel as BaseBEVDepthLightningModel


class BEVDepthLightningModel(BaseBEVDepthLightningModel):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.data_use_cbgs = True

def configure_optimizers(self):
lr = self.basic_lr_per_img * \
self.batch_size_per_device * self.gpus
optimizer = torch.optim.AdamW(self.model.parameters(),
lr=lr,
weight_decay=1e-2)
return [optimizer]


def main(args: Namespace) -> None:
if args.seed is not None:
pl.seed_everything(args.seed)

model = BEVDepthLightningModel(**vars(args))
train_dataloader = model.train_dataloader()
ema_callback = EMACallback(len(train_dataloader.dataset) * args.max_epochs)
trainer = pl.Trainer.from_argparse_args(args, callbacks=[ema_callback])
if args.evaluate:
trainer.test(model, ckpt_path=args.ckpt_path)
else:
trainer.fit(model)


def run_cli():
parent_parser = ArgumentParser(add_help=False)
parent_parser = pl.Trainer.add_argparse_args(parent_parser)
parent_parser.add_argument('-e',
'--evaluate',
dest='evaluate',
action='store_true',
help='evaluate model on validation set')
parent_parser.add_argument('-b', '--batch_size_per_device', type=int)
parent_parser.add_argument('--seed',
type=int,
default=0,
help='seed for initializing training.')
parent_parser.add_argument('--ckpt_path', type=str)
parser = BEVDepthLightningModel.add_model_specific_args(parent_parser)
parser.set_defaults(profiler='simple',
deterministic=False,
max_epochs=20,
accelerator='ddp',
num_sanity_val_steps=0,
gradient_clip_val=5,
limit_val_batches=0,
enable_checkpointing=False,
precision=16,
default_root_dir='./outputs/bev_depth_lss_r50_'
'256x704_128x128_20e_cbgs_2key_da_ema')
args = parser.parse_args()
main(args)


if __name__ == '__main__':
run_cli()
15 changes: 6 additions & 9 deletions exps/bev_depth_lss_r50_256x704_128x128_24e.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
import torchvision.models as models
from pytorch_lightning.core import LightningModule
from torch.cuda.amp.autocast_mode import autocast
from torch.optim.lr_scheduler import MultiStepLR

from callbacks.ema import EMACallback
from dataset.nusc_mv_det_dataset import NuscMVDetDataset, collate_fn
from evaluators.det_mv_evaluators import DetMVNuscEvaluator
from models.bev_depth import BEVDepth
Expand Down Expand Up @@ -220,10 +220,8 @@ def __init__(self,
self.img_conf = img_conf
self.data_use_cbgs = False
self.num_sweeps = 1
self.sweep_idxes = []
self.key_idxes = []
self.data_return_depth = False
self.model_use_ema = True
self.sweep_idxes = list()
self.key_idxes = list()
self.data_return_depth = True
self.downsample_factor = self.backbone_conf['downsample_factor']
self.dbound = self.backbone_conf['d_bound']
Expand Down Expand Up @@ -371,7 +369,8 @@ def configure_optimizers(self):
optimizer = torch.optim.AdamW(self.model.parameters(),
lr=lr,
weight_decay=1e-7)
return [optimizer]
scheduler = MultiStepLR(optimizer, [19, 23])
return [[optimizer], [scheduler]]

def train_dataloader(self):
train_dataset = NuscMVDetDataset(
Expand Down Expand Up @@ -442,9 +441,7 @@ def main(args: Namespace) -> None:
pl.seed_everything(args.seed)

model = BEVDepthLightningModel(**vars(args))
train_dataloader = model.train_dataloader()
ema_callback = EMACallback(len(train_dataloader.dataset) * args.max_epochs)
trainer = pl.Trainer.from_argparse_args(args, callbacks=[ema_callback])
trainer = pl.Trainer.from_argparse_args(args)
if args.evaluate:
trainer.test(model, ckpt_path=args.ckpt_path)
else:
Expand Down
35 changes: 18 additions & 17 deletions exps/bev_depth_lss_r50_256x704_128x128_24e_2key.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
# Copyright (c) Megvii Inc. All rights reserved.
"""
mAP: 0.3329
mATE: 0.6832
mASE: 0.2761
mAOE: 0.5446
mAVE: 0.5258
mAAE: 0.2259
NDS: 0.4409
mAP: 0.3304
mATE: 0.7021
mASE: 0.2795
mAOE: 0.5346
mAVE: 0.5530
mAAE: 0.2274
NDS: 0.4355
Eval time: 171.8s
Per-class results:
Object Class AP ATE ASE AOE AVE AAE
car 0.505 0.531 0.165 0.189 0.618 0.234
truck 0.274 0.731 0.206 0.211 0.546 0.223
bus 0.394 0.673 0.219 0.148 1.061 0.274
trailer 0.174 0.934 0.228 0.544 0.369 0.183
construction_vehicle 0.079 1.043 0.528 1.162 0.112 0.376
pedestrian 0.284 0.748 0.294 0.973 0.575 0.297
motorcycle 0.345 0.633 0.256 0.719 0.667 0.214
bicycle 0.314 0.544 0.252 0.778 0.259 0.007
traffic_cone 0.453 0.519 0.335 nan nan nan
barrier 0.506 0.475 0.279 0.178 nan nan
car 0.499 0.540 0.165 0.211 0.650 0.233
truck 0.278 0.719 0.218 0.265 0.547 0.215
bus 0.386 0.661 0.211 0.171 1.132 0.274
trailer 0.168 1.034 0.235 0.548 0.408 0.168
construction_vehicle 0.075 1.124 0.510 1.177 0.111 0.385
pedestrian 0.284 0.757 0.298 0.966 0.578 0.301
motorcycle 0.335 0.624 0.263 0.621 0.734 0.237
bicycle 0.305 0.554 0.264 0.653 0.263 0.006
traffic_cone 0.462 0.516 0.355 nan nan nan
barrier 0.512 0.491 0.275 0.200 nan nan
"""
from argparse import ArgumentParser, Namespace

Expand Down
96 changes: 96 additions & 0 deletions exps/bev_depth_lss_r50_256x704_128x128_24e_2key_ema.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# Copyright (c) Megvii Inc. All rights reserved.
"""
mAP: 0.3329
mATE: 0.6832
mASE: 0.2761
mAOE: 0.5446
mAVE: 0.5258
mAAE: 0.2259
NDS: 0.4409
Per-class results:
Object Class AP ATE ASE AOE AVE AAE
car 0.505 0.531 0.165 0.189 0.618 0.234
truck 0.274 0.731 0.206 0.211 0.546 0.223
bus 0.394 0.673 0.219 0.148 1.061 0.274
trailer 0.174 0.934 0.228 0.544 0.369 0.183
construction_vehicle 0.079 1.043 0.528 1.162 0.112 0.376
pedestrian 0.284 0.748 0.294 0.973 0.575 0.297
motorcycle 0.345 0.633 0.256 0.719 0.667 0.214
bicycle 0.314 0.544 0.252 0.778 0.259 0.007
traffic_cone 0.453 0.519 0.335 nan nan nan
barrier 0.506 0.475 0.279 0.178 nan nan
"""
from argparse import ArgumentParser, Namespace

import pytorch_lightning as pl

from callbacks.ema import EMACallback
from exps.bev_depth_lss_r50_256x704_128x128_24e_ema import \
BEVDepthLightningModel as BaseBEVDepthLightningModel
from models.bev_depth import BEVDepth


class BEVDepthLightningModel(BaseBEVDepthLightningModel):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.key_idxes = [-1]
self.head_conf['bev_backbone_conf']['in_channels'] = 80 * (
len(self.key_idxes) + 1)
self.head_conf['bev_neck_conf']['in_channels'] = [
80 * (len(self.key_idxes) + 1), 160, 320, 640
]
self.head_conf['train_cfg']['code_weight'] = [
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
]
self.model = BEVDepth(self.backbone_conf,
self.head_conf,
is_train_depth=True)


def main(args: Namespace) -> None:
if args.seed is not None:
pl.seed_everything(args.seed)

model = BEVDepthLightningModel(**vars(args))
train_dataloader = model.train_dataloader()
ema_callback = EMACallback(len(train_dataloader.dataset) * args.max_epochs)
trainer = pl.Trainer.from_argparse_args(args, callbacks=[ema_callback])
if args.evaluate:
trainer.test(model, ckpt_path=args.ckpt_path)
else:
trainer.fit(model)


def run_cli():
parent_parser = ArgumentParser(add_help=False)
parent_parser = pl.Trainer.add_argparse_args(parent_parser)
parent_parser.add_argument('-e',
'--evaluate',
dest='evaluate',
action='store_true',
help='evaluate model on validation set')
parent_parser.add_argument('-b', '--batch_size_per_device', type=int)
parent_parser.add_argument('--seed',
type=int,
default=0,
help='seed for initializing training.')
parent_parser.add_argument('--ckpt_path', type=str)
parser = BEVDepthLightningModel.add_model_specific_args(parent_parser)
parser.set_defaults(profiler='simple',
deterministic=False,
max_epochs=24,
accelerator='ddp',
num_sanity_val_steps=0,
gradient_clip_val=5,
limit_val_batches=0,
enable_checkpointing=False,
precision=16,
default_root_dir='./outputs/bev_depth_lss_r50_256x704_'
'128x128_24e_2key_ema')
args = parser.parse_args()
main(args)


if __name__ == '__main__':
run_cli()
Loading

0 comments on commit 647b9b9

Please sign in to comment.