Unverified Commit d7067e44 authored by Wenwei Zhang's avatar Wenwei Zhang Committed by GitHub
Browse files

Bump version to v1.1.0rc2

Bump to v1.1.0rc2
parents 28fe73d2 fb0e57e5
...@@ -14,7 +14,7 @@ Collections: ...@@ -14,7 +14,7 @@ Collections:
Version: v0.6.0 Version: v0.6.0
Models: Models:
- Name: hv_pointpillars_secfpn_6x8_160e_kitti-3d-car - Name: pointpillars_hv_secfpn_8xb6-160e_kitti-3d-car
In Collection: PointPillars In Collection: PointPillars
Config: configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-car.py Config: configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-car.py
Metadata: Metadata:
...@@ -28,7 +28,7 @@ Models: ...@@ -28,7 +28,7 @@ Models:
AP: 77.6 AP: 77.6
Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/pointpillars/hv_pointpillars_secfpn_6x8_160e_kitti-3d-car/hv_pointpillars_secfpn_6x8_160e_kitti-3d-car_20220331_134606-d42d15ed.pth Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/pointpillars/hv_pointpillars_secfpn_6x8_160e_kitti-3d-car/hv_pointpillars_secfpn_6x8_160e_kitti-3d-car_20220331_134606-d42d15ed.pth
- Name: hv_pointpillars_secfpn_6x8_160e_kitti-3d-3class - Name: pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class
In Collection: PointPillars In Collection: PointPillars
Config: configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py Config: configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py
Metadata: Metadata:
...@@ -42,7 +42,7 @@ Models: ...@@ -42,7 +42,7 @@ Models:
AP: 64.07 AP: 64.07
Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/pointpillars/hv_pointpillars_secfpn_6x8_160e_kitti-3d-3class/hv_pointpillars_secfpn_6x8_160e_kitti-3d-3class_20220301_150306-37dc2420.pth Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/pointpillars/hv_pointpillars_secfpn_6x8_160e_kitti-3d-3class/hv_pointpillars_secfpn_6x8_160e_kitti-3d-3class_20220301_150306-37dc2420.pth
- Name: hv_pointpillars_secfpn_sbn-all_4x8_2x_nus-3d - Name: pointpillars_hv_secfpn_sbn-all_8xb4-2x_nus-3d
In Collection: PointPillars In Collection: PointPillars
Config: configs/pointpillars/pointpillars_hv_secfpn_sbn-all_8xb4-2x_nus-3d.py Config: configs/pointpillars/pointpillars_hv_secfpn_sbn-all_8xb4-2x_nus-3d.py
Metadata: Metadata:
...@@ -57,7 +57,29 @@ Models: ...@@ -57,7 +57,29 @@ Models:
NDS: 49.1 NDS: 49.1
Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/pointpillars/hv_pointpillars_secfpn_sbn-all_4x8_2x_nus-3d/hv_pointpillars_secfpn_sbn-all_4x8_2x_nus-3d_20210826_225857-f19d00a3.pth Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/pointpillars/hv_pointpillars_secfpn_sbn-all_4x8_2x_nus-3d/hv_pointpillars_secfpn_sbn-all_4x8_2x_nus-3d_20210826_225857-f19d00a3.pth
- Name: hv_pointpillars_fpn_sbn-all_4x8_2x_nus-3d - Name: pointpillars_hv_secfpn_sbn-all_8xb4-amp-2x_nus-3d
In Collection: PointPillars
Config: configs/pointpillars/pointpillars_hv_secfpn_sbn-all_8xb4-amp-2x_nus-3d.py
Metadata:
Training Techniques:
- AdamW
- Mixed Precision Training
Training Resources: 8x TITAN Xp
Architecture:
- Hard Voxelization
Training Data: nuScenes
Training Memory (GB): 8.37
Results:
- Task: 3D Object Detection
Dataset: nuScenes
Metrics:
mAP: 35.19
NDS: 50.27
Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/fp16/hv_pointpillars_secfpn_sbn-all_fp16_2x8_2x_nus-3d/hv_pointpillars_secfpn_sbn-all_fp16_2x8_2x_nus-3d_20201020_222626-c3f0483e.pth
Code:
Version: v0.7.0
- Name: pointpillars_hv_fpn_sbn-all_8xb4-2x_nus-3d
In Collection: PointPillars In Collection: PointPillars
Config: configs/pointpillars/pointpillars_hv_fpn_sbn-all_8xb4-2x_nus-3d.py Config: configs/pointpillars/pointpillars_hv_fpn_sbn-all_8xb4-2x_nus-3d.py
Metadata: Metadata:
...@@ -72,7 +94,29 @@ Models: ...@@ -72,7 +94,29 @@ Models:
NDS: 53.15 NDS: 53.15
Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/pointpillars/hv_pointpillars_fpn_sbn-all_4x8_2x_nus-3d/hv_pointpillars_fpn_sbn-all_4x8_2x_nus-3d_20210826_104936-fca299c1.pth Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/pointpillars/hv_pointpillars_fpn_sbn-all_4x8_2x_nus-3d/hv_pointpillars_fpn_sbn-all_4x8_2x_nus-3d_20210826_104936-fca299c1.pth
- Name: hv_pointpillars_secfpn_sbn-all_2x8_2x_lyft-3d - Name: pointpillars_hv_fpn_sbn-all_8xb4-amp-2x_nus-3d
In Collection: PointPillars
Config: configs/pointpillars/pointpillars_hv_fpn_sbn-all_8xb4-amp-2x_nus-3d.py
Metadata:
Training Techniques:
- AdamW
- Mixed Precision Training
Training Resources: 8x TITAN Xp
Architecture:
- Hard Voxelization
Training Data: nuScenes
Training Memory (GB): 8.40
Results:
- Task: 3D Object Detection
Dataset: nuScenes
Metrics:
mAP: 39.26
NDS: 53.26
Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/fp16/hv_pointpillars_fpn_sbn-all_fp16_2x8_2x_nus-3d/hv_pointpillars_fpn_sbn-all_fp16_2x8_2x_nus-3d_20201021_120719-269f9dd6.pth
Code:
Version: v0.7.0
- Name: pointpillars_hv_secfpn_sbn-all_8xb2-2x_lyft-3d
In Collection: PointPillars In Collection: PointPillars
Config: configs/pointpillars/pointpillars_hv_secfpn_sbn-all_8xb2-2x_lyft-3d.py Config: configs/pointpillars/pointpillars_hv_secfpn_sbn-all_8xb2-2x_lyft-3d.py
Metadata: Metadata:
...@@ -87,7 +131,7 @@ Models: ...@@ -87,7 +131,7 @@ Models:
Public Score: 14.1 Public Score: 14.1
Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/pointpillars/hv_pointpillars_secfpn_sbn-all_2x8_2x_lyft-3d/hv_pointpillars_secfpn_sbn-all_2x8_2x_lyft-3d_20210829_100455-82b81c39.pth Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/pointpillars/hv_pointpillars_secfpn_sbn-all_2x8_2x_lyft-3d/hv_pointpillars_secfpn_sbn-all_2x8_2x_lyft-3d_20210829_100455-82b81c39.pth
- Name: hv_pointpillars_fpn_sbn-all_2x8_2x_lyft-3d - Name: pointpillars_hv_fpn_sbn-all_8xb2-2x_lyft-3d
In Collection: PointPillars In Collection: PointPillars
Config: configs/pointpillars/pointpillars_hv_fpn_sbn-all_8xb2-2x_lyft-3d.py Config: configs/pointpillars/pointpillars_hv_fpn_sbn-all_8xb2-2x_lyft-3d.py
Metadata: Metadata:
...@@ -167,47 +211,3 @@ Models: ...@@ -167,47 +211,3 @@ Models:
mAPH@L1: 63.3 mAPH@L1: 63.3
mAP@L2: 62.6 mAP@L2: 62.6
mAPH@L2: 57.6 mAPH@L2: 57.6
- Name: hv_pointpillars_secfpn_sbn-all_fp16_2x8_2x_nus-3d
In Collection: PointPillars
Config: configs/pointpillars/hv_pointpillars_secfpn_sbn-all_fp16_2x8_2x_nus-3d.py
Metadata:
Training Techniques:
- AdamW
- Mixed Precision Training
Training Resources: 8x TITAN Xp
Architecture:
- Hard Voxelization
Training Data: nuScenes
Training Memory (GB): 8.37
Results:
- Task: 3D Object Detection
Dataset: nuScenes
Metrics:
mAP: 35.19
NDS: 50.27
Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/fp16/hv_pointpillars_secfpn_sbn-all_fp16_2x8_2x_nus-3d/hv_pointpillars_secfpn_sbn-all_fp16_2x8_2x_nus-3d_20201020_222626-c3f0483e.pth
Code:
Version: v0.7.0
- Name: hv_pointpillars_fpn_sbn-all_fp16_2x8_2x_nus-3d
In Collection: PointPillars
Config: configs/pointpillars/hv_pointpillars_fpn_sbn-all_fp16_2x8_2x_nus-3d.py
Metadata:
Training Techniques:
- AdamW
- Mixed Precision Training
Training Resources: 8x TITAN Xp
Architecture:
- Hard Voxelization
Training Data: nuScenes
Training Memory (GB): 8.40
Results:
- Task: 3D Object Detection
Dataset: nuScenes
Metrics:
mAP: 39.26
NDS: 53.26
Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/fp16/hv_pointpillars_fpn_sbn-all_fp16_2x8_2x_nus-3d/hv_pointpillars_fpn_sbn-all_fp16_2x8_2x_nus-3d_20201021_120719-269f9dd6.pth
Code:
Version: v0.7.0
_base_ = 'pointpillars_hv_fpn_sbn-all_8xb4-2x_nus-3d.py'
# schedule settings
optim_wrapper = dict(type='AmpOptimWrapper', loss_scale=512.)
...@@ -8,7 +8,7 @@ point_cloud_range = [0, -39.68, -3, 69.12, 39.68, 1] ...@@ -8,7 +8,7 @@ point_cloud_range = [0, -39.68, -3, 69.12, 39.68, 1]
# dataset settings # dataset settings
data_root = 'data/kitti/' data_root = 'data/kitti/'
class_names = ['Pedestrian', 'Cyclist', 'Car'] class_names = ['Pedestrian', 'Cyclist', 'Car']
metainfo = dict(CLASSES=class_names) metainfo = dict(classes=class_names)
# PointPillars adopted a different sampling strategies among classes # PointPillars adopted a different sampling strategies among classes
db_sampler = dict( db_sampler = dict(
......
...@@ -4,7 +4,7 @@ _base_ = './pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py' ...@@ -4,7 +4,7 @@ _base_ = './pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py'
dataset_type = 'KittiDataset' dataset_type = 'KittiDataset'
data_root = 'data/kitti/' data_root = 'data/kitti/'
class_names = ['Car'] class_names = ['Car']
metainfo = dict(CLASSES=class_names) metainfo = dict(classes=class_names)
point_cloud_range = [0, -39.68, -3, 69.12, 39.68, 1] point_cloud_range = [0, -39.68, -3, 69.12, 39.68, 1]
...@@ -24,7 +24,7 @@ model = dict( ...@@ -24,7 +24,7 @@ model = dict(
_delete_=True, _delete_=True,
assigner=dict( assigner=dict(
type='Max3DIoUAssigner', type='Max3DIoUAssigner',
iou_calculator=dict(type='mmdet3d.BboxOverlapsNearest3D'), iou_calculator=dict(type='BboxOverlapsNearest3D'),
pos_iou_thr=0.6, pos_iou_thr=0.6,
neg_iou_thr=0.45, neg_iou_thr=0.45,
min_pos_iou=0.45, min_pos_iou=0.45,
......
_base_ = 'pointpillars_hv_secfpn_sbn-all_8xb4-2x_nus-3d.py'
# schedule settings
optim_wrapper = dict(type='AmpOptimWrapper', loss_scale=512.)
# PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection
> [PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection](https://arxiv.org/abs/1912.13192)
<!-- [ALGORITHM] -->
## Introduction
3D object detection has been receiving increasing attention from both industry and academia thanks to its wide applications in various fields such as autonomous driving and robotics. LiDAR sensors are widely adopted in autonomous driving vehicles and robots for capturing 3D scene information as sparse and irregular point clouds, which provide vital cues for 3D scene perception and understanding. In this paper, we propose to achieve high performance 3D object detection by designing novel point-voxel integrated networks to learn better 3D features from irregular point clouds.
<div align=center>
<img src="https://user-images.githubusercontent.com/88368822/202114244-ccf52f56-b8c9-4f1b-9cc2-80c7a9952c99.png" width="800"/>
</div>
## Results and models
### KITTI
| Backbone | Class | Lr schd | Mem (GB) | Inf time (fps) | mAP | Download |
| :---------------------------------------------: | :-----: | :--------: | :------: | :------------: | :---: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| [SECFPN](./pv_rcnn_8xb2-80e_kitti-3d-3class.py) | 3 Class | cyclic 80e | 5.4 | | 72.28 | [model](https://download.openmmlab.com/mmdetection3d/v1.1.0_models/pv_rcnn/pv_rcnn_8xb2-80e_kitti-3d-3class/pv_rcnn_8xb2-80e_kitti-3d-3class_20221117_234428-b384d22f.pth) \\ [log](https://download.openmmlab.com/mmdetection3d/v1.1.0_models/pv_rcnn/pv_rcnn_8xb2-80e_kitti-3d-3class/pv_rcnn_8xb2-80e_kitti-3d-3class_20221117_234428.json) |
Note: mAP represents AP11 results on 3 Class under the moderate setting.
Detailed performance on KITTI 3D detection (3D) is as follows, evaluated by AP11 metric:
| | Easy | Moderate | Hard |
| ---------- | :---: | :------: | :---: |
| Car | 89.20 | 83.72 | 78.79 |
| Pedestrian | 66.64 | 59.84 | 55.33 |
| Cyclist | 87.25 | 73.27 | 69.61 |
## Citation
```latex
@article{ShaoshuaiShi2020PVRCNNPF,
title={PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection},
author={Shaoshuai Shi and Chaoxu Guo and Li Jiang and Zhe Wang and Jianping Shi and Xiaogang Wang and Hongsheng Li},
journal={computer vision and pattern recognition},
year={2020}
}
```
Collections:
- Name: PV-RCNN
Metadata:
Training Data: KITTI
Training Techniques:
- AdamW
Training Resources: 8x A100 GPUs
Architecture:
- Feature Pyramid Network
Paper:
URL: https://arxiv.org/abs/1912.13192
Title: 'PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection'
README: configs/pv_rcnn/README.md
Code:
URL: https://github.com/open-mmlab/mmdetection3d/blob/dev-1.x/mmdet3d/models/detectors/pv_rcnn.py#L12
Version: v1.1.0rc2
Models:
- Name: pv_rcnn_8xb2-80e_kitti-3d-3class
In Collection: PV-RCNN
Config: configs/pv_rcnn/pv_rcnn_8xb2-80e_kitti-3d-3class.py
Metadata:
Training Memory (GB): 5.4
Results:
- Task: 3D Object Detection
Dataset: KITTI
Metrics:
mAP: 72.28
Weights: <https://download.openmmlab.com/mmdetection3d/v1.1.0_models/pv_rcnn/pv_rcnn_8xb2-80e_kitti-3d-3class/pv_rcnn_8xb2-80e_kitti-3d-3class_20221117_234428-b384d22f.pth
_base_ = [
'../_base_/datasets/kitti-3d-3class.py',
'../_base_/schedules/cyclic-40e.py', '../_base_/default_runtime.py'
]
voxel_size = [0.05, 0.05, 0.1]
point_cloud_range = [0, -40, -3, 70.4, 40, 1]
data_root = 'data/kitti/'
class_names = ['Pedestrian', 'Cyclist', 'Car']
metainfo = dict(CLASSES=class_names)
db_sampler = dict(
data_root=data_root,
info_path=data_root + 'kitti_dbinfos_train.pkl',
rate=1.0,
prepare=dict(
filter_by_difficulty=[-1],
filter_by_min_points=dict(Car=5, Pedestrian=5, Cyclist=5)),
classes=class_names,
sample_groups=dict(Car=15, Pedestrian=10, Cyclist=10),
points_loader=dict(
type='LoadPointsFromFile', coord_type='LIDAR', load_dim=4, use_dim=4))
train_pipeline = [
dict(type='LoadPointsFromFile', coord_type='LIDAR', load_dim=4, use_dim=4),
dict(type='LoadAnnotations3D', with_bbox_3d=True, with_label_3d=True),
dict(type='ObjectSample', db_sampler=db_sampler, use_ground_plane=True),
dict(type='RandomFlip3D', flip_ratio_bev_horizontal=0.5),
dict(
type='GlobalRotScaleTrans',
rot_range=[-0.78539816, 0.78539816],
scale_ratio_range=[0.95, 1.05]),
dict(type='PointsRangeFilter', point_cloud_range=point_cloud_range),
dict(type='ObjectRangeFilter', point_cloud_range=point_cloud_range),
dict(type='PointShuffle'),
dict(
type='Pack3DDetInputs',
keys=['points', 'gt_bboxes_3d', 'gt_labels_3d'])
]
test_pipeline = [
dict(type='LoadPointsFromFile', coord_type='LIDAR', load_dim=4, use_dim=4),
dict(
type='MultiScaleFlipAug3D',
img_scale=(1333, 800),
pts_scale_ratio=1,
flip=False,
transforms=[
dict(
type='GlobalRotScaleTrans',
rot_range=[0, 0],
scale_ratio_range=[1., 1.],
translation_std=[0, 0, 0]),
dict(type='RandomFlip3D'),
dict(
type='PointsRangeFilter', point_cloud_range=point_cloud_range)
]),
dict(type='Pack3DDetInputs', keys=['points'])
]
model = dict(
type='PointVoxelRCNN',
data_preprocessor=dict(
type='Det3DDataPreprocessor',
voxel=True,
voxel_layer=dict(
max_num_points=5, # max_points_per_voxel
point_cloud_range=point_cloud_range,
voxel_size=voxel_size,
max_voxels=(16000, 40000))),
voxel_encoder=dict(type='HardSimpleVFE'),
middle_encoder=dict(
type='SparseEncoder',
in_channels=4,
sparse_shape=[41, 1600, 1408],
order=('conv', 'norm', 'act'),
encoder_paddings=((0, 0, 0), ((1, 1, 1), 0, 0), ((1, 1, 1), 0, 0),
((0, 1, 1), 0, 0)),
return_middle_feats=True),
points_encoder=dict(
type='VoxelSetAbstraction',
num_keypoints=2048,
fused_out_channel=128,
voxel_size=voxel_size,
point_cloud_range=point_cloud_range,
voxel_sa_cfgs_list=[
dict(
type='StackedSAModuleMSG',
in_channels=16,
scale_factor=1,
radius=(0.4, 0.8),
sample_nums=(16, 16),
mlp_channels=((16, 16), (16, 16)),
use_xyz=True),
dict(
type='StackedSAModuleMSG',
in_channels=32,
scale_factor=2,
radius=(0.8, 1.2),
sample_nums=(16, 32),
mlp_channels=((32, 32), (32, 32)),
use_xyz=True),
dict(
type='StackedSAModuleMSG',
in_channels=64,
scale_factor=4,
radius=(1.2, 2.4),
sample_nums=(16, 32),
mlp_channels=((64, 64), (64, 64)),
use_xyz=True),
dict(
type='StackedSAModuleMSG',
in_channels=64,
scale_factor=8,
radius=(2.4, 4.8),
sample_nums=(16, 32),
mlp_channels=((64, 64), (64, 64)),
use_xyz=True)
],
rawpoints_sa_cfgs=dict(
type='StackedSAModuleMSG',
in_channels=1,
radius=(0.4, 0.8),
sample_nums=(16, 16),
mlp_channels=((16, 16), (16, 16)),
use_xyz=True),
bev_feat_channel=256,
bev_scale_factor=8),
backbone=dict(
type='SECOND',
in_channels=256,
layer_nums=[5, 5],
layer_strides=[1, 2],
out_channels=[128, 256]),
neck=dict(
type='SECONDFPN',
in_channels=[128, 256],
upsample_strides=[1, 2],
out_channels=[256, 256]),
rpn_head=dict(
type='PartA2RPNHead',
num_classes=3,
in_channels=512,
feat_channels=512,
use_direction_classifier=True,
dir_offset=0.78539,
anchor_generator=dict(
type='Anchor3DRangeGenerator',
ranges=[[0, -40.0, -0.6, 70.4, 40.0, -0.6],
[0, -40.0, -0.6, 70.4, 40.0, -0.6],
[0, -40.0, -1.78, 70.4, 40.0, -1.78]],
sizes=[[0.8, 0.6, 1.73], [1.76, 0.6, 1.73], [3.9, 1.6, 1.56]],
rotations=[0, 1.57],
reshape_out=False),
diff_rad_by_sin=True,
assigner_per_size=True,
assign_per_class=True,
bbox_coder=dict(type='DeltaXYZWLHRBBoxCoder'),
loss_cls=dict(
type='mmdet.FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=1.0),
loss_bbox=dict(
type='mmdet.SmoothL1Loss', beta=1.0 / 9.0, loss_weight=2.0),
loss_dir=dict(
type='mmdet.CrossEntropyLoss', use_sigmoid=False,
loss_weight=0.2)),
roi_head=dict(
type='PVRCNNRoiHead',
num_classes=3,
semantic_head=dict(
type='ForegroundSegmentationHead',
in_channels=640,
extra_width=0.1,
loss_seg=dict(
type='mmdet.FocalLoss',
use_sigmoid=True,
reduction='sum',
gamma=2.0,
alpha=0.25,
activated=True,
loss_weight=1.0)),
bbox_roi_extractor=dict(
type='Batch3DRoIGridExtractor',
grid_size=6,
roi_layer=dict(
type='StackedSAModuleMSG',
in_channels=128,
radius=(0.8, 1.6),
sample_nums=(16, 16),
mlp_channels=((64, 64), (64, 64)),
use_xyz=True,
pool_mod='max'),
),
bbox_head=dict(
type='PVRCNNBBoxHead',
in_channels=128,
grid_size=6,
num_classes=3,
class_agnostic=True,
shared_fc_channels=(256, 256),
reg_channels=(256, 256),
cls_channels=(256, 256),
dropout_ratio=0.3,
with_corner_loss=True,
bbox_coder=dict(type='DeltaXYZWLHRBBoxCoder'),
loss_bbox=dict(
type='mmdet.SmoothL1Loss',
beta=1.0 / 9.0,
reduction='sum',
loss_weight=1.0),
loss_cls=dict(
type='mmdet.CrossEntropyLoss',
use_sigmoid=True,
reduction='sum',
loss_weight=1.0))),
# model training and testing settings
train_cfg=dict(
rpn=dict(
assigner=[
dict( # for Pedestrian
type='Max3DIoUAssigner',
iou_calculator=dict(type='BboxOverlapsNearest3D'),
pos_iou_thr=0.5,
neg_iou_thr=0.35,
min_pos_iou=0.35,
ignore_iof_thr=-1),
dict( # for Cyclist
type='Max3DIoUAssigner',
iou_calculator=dict(type='BboxOverlapsNearest3D'),
pos_iou_thr=0.5,
neg_iou_thr=0.35,
min_pos_iou=0.35,
ignore_iof_thr=-1),
dict( # for Car
type='Max3DIoUAssigner',
iou_calculator=dict(type='BboxOverlapsNearest3D'),
pos_iou_thr=0.6,
neg_iou_thr=0.45,
min_pos_iou=0.45,
ignore_iof_thr=-1)
],
allowed_border=0,
pos_weight=-1,
debug=False),
rpn_proposal=dict(
nms_pre=9000,
nms_post=512,
max_num=512,
nms_thr=0.8,
score_thr=0,
use_rotate_nms=True),
rcnn=dict(
assigner=[
dict( # for Pedestrian
type='Max3DIoUAssigner',
iou_calculator=dict(
type='BboxOverlaps3D', coordinate='lidar'),
pos_iou_thr=0.55,
neg_iou_thr=0.55,
min_pos_iou=0.55,
ignore_iof_thr=-1),
dict( # for Cyclist
type='Max3DIoUAssigner',
iou_calculator=dict(
type='BboxOverlaps3D', coordinate='lidar'),
pos_iou_thr=0.55,
neg_iou_thr=0.55,
min_pos_iou=0.55,
ignore_iof_thr=-1),
dict( # for Car
type='Max3DIoUAssigner',
iou_calculator=dict(
type='BboxOverlaps3D', coordinate='lidar'),
pos_iou_thr=0.55,
neg_iou_thr=0.55,
min_pos_iou=0.55,
ignore_iof_thr=-1)
],
sampler=dict(
type='IoUNegPiecewiseSampler',
num=128,
pos_fraction=0.5,
neg_piece_fractions=[0.8, 0.2],
neg_iou_piece_thrs=[0.55, 0.1],
neg_pos_ub=-1,
add_gt_as_proposals=False,
return_iou=True),
cls_pos_thr=0.75,
cls_neg_thr=0.25)),
test_cfg=dict(
rpn=dict(
nms_pre=1024,
nms_post=100,
max_num=100,
nms_thr=0.7,
score_thr=0,
use_rotate_nms=True),
rcnn=dict(
use_rotate_nms=True,
use_raw_score=True,
nms_thr=0.1,
score_thr=0.1)))
train_dataloader = dict(
batch_size=2,
num_workers=2,
dataset=dict(dataset=dict(pipeline=train_pipeline, metainfo=metainfo)))
test_dataloader = dict(dataset=dict(pipeline=test_pipeline, metainfo=metainfo))
eval_dataloader = dict(dataset=dict(pipeline=test_pipeline, metainfo=metainfo))
lr = 0.001
optim_wrapper = dict(optimizer=dict(lr=lr))
param_scheduler = [
# learning rate scheduler
# During the first 16 epochs, learning rate increases from 0 to lr * 10
# during the next 24 epochs, learning rate decreases from lr * 10 to
# lr * 1e-4
dict(
type='CosineAnnealingLR',
T_max=15,
eta_min=lr * 10,
begin=0,
end=15,
by_epoch=True,
convert_to_iter_based=True),
dict(
type='CosineAnnealingLR',
T_max=25,
eta_min=lr * 1e-4,
begin=15,
end=40,
by_epoch=True,
convert_to_iter_based=True),
# momentum scheduler
# During the first 16 epochs, momentum increases from 0 to 0.85 / 0.95
# during the next 24 epochs, momentum increases from 0.85 / 0.95 to 1
dict(
type='CosineAnnealingMomentum',
T_max=15,
eta_min=0.85 / 0.95,
begin=0,
end=15,
by_epoch=True,
convert_to_iter_based=True),
dict(
type='CosineAnnealingMomentum',
T_max=25,
eta_min=1,
begin=15,
end=40,
by_epoch=True,
convert_to_iter_based=True)
]
Models: Models:
- Name: hv_pointpillars_regnet-400mf_secfpn_sbn-all_4x8_2x_nus-3d - Name: hv_pointpillars_regnet-400mf_secfpn_sbn-all_4x8_2x_nus-3d
In Collection: PointPillars In Collection: PointPillars
Config: configs/regnet/hv_pointpillars_regnet-400mf_secfpn_sbn-all_4x8_2x_nus-3d.py Config: configs/regnet/hv_pointpillars_regnet-400mf_secfpn_sbn-all_8xb4-2x_nus-3d.py
Metadata: Metadata:
Training Data: nuScenes Training Data: nuScenes
Training Memory (GB): 16.4 Training Memory (GB): 16.4
...@@ -16,9 +16,9 @@ Models: ...@@ -16,9 +16,9 @@ Models:
NDS: 55.2 NDS: 55.2
Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/regnet/hv_pointpillars_regnet-400mf_secfpn_sbn-all_4x8_2x_nus-3d/hv_pointpillars_regnet-400mf_secfpn_sbn-all_4x8_2x_nus-3d_20200620_230334-53044f32.pth Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/regnet/hv_pointpillars_regnet-400mf_secfpn_sbn-all_4x8_2x_nus-3d/hv_pointpillars_regnet-400mf_secfpn_sbn-all_4x8_2x_nus-3d_20200620_230334-53044f32.pth
- Name: hv_pointpillars_regnet-400mf_fpn_sbn-all_4x8_2x_nus-3d - Name: hv_pointpillars_regnet-400mf_fpn_sbn-all_8xb4-2x_nus-3d
In Collection: PointPillars In Collection: PointPillars
Config: configs/regnet/hv_pointpillars_regnet-400mf_fpn_sbn-all_4x8_2x_nus-3d.py Config: configs/regnet/hv_pointpillars_regnet-400mf_fpn_sbn-all_8xb4-2x_nus-3d.py
Metadata: Metadata:
Training Data: nuScenes Training Data: nuScenes
Training Memory (GB): 17.3 Training Memory (GB): 17.3
...@@ -33,9 +33,9 @@ Models: ...@@ -33,9 +33,9 @@ Models:
NDS: 56.4 NDS: 56.4
Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/regnet/hv_pointpillars_regnet-400mf_fpn_sbn-all_4x8_2x_nus-3d/hv_pointpillars_regnet-400mf_fpn_sbn-all_4x8_2x_nus-3d_20200620_230239-c694dce7.pth Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/regnet/hv_pointpillars_regnet-400mf_fpn_sbn-all_4x8_2x_nus-3d/hv_pointpillars_regnet-400mf_fpn_sbn-all_4x8_2x_nus-3d_20200620_230239-c694dce7.pth
- Name: hv_pointpillars_regnet-1.6gf_fpn_sbn-all_4x8_2x_nus-3d - Name: hv_pointpillars_regnet-1.6gf_fpn_sbn-all_8xb4-2x_nus-3d
In Collection: PointPillars In Collection: PointPillars
Config: configs/regnet/hv_pointpillars_regnet-1.6gf_fpn_sbn-all_4x8_2x_nus-3d.py Config: configs/regnet/hv_pointpillars_regnet-1.6gf_fpn_sbn-all_8xb4-2x_nus-3d.py
Metadata: Metadata:
Training Data: nuScenes Training Data: nuScenes
Training Memory (GB): 24.0 Training Memory (GB): 24.0
......
...@@ -7,11 +7,14 @@ voxel_size = [0.05, 0.05, 0.1] ...@@ -7,11 +7,14 @@ voxel_size = [0.05, 0.05, 0.1]
model = dict( model = dict(
type='SASSD', type='SASSD',
voxel_layer=dict( data_preprocessor=dict(
max_num_points=5, type='Det3DDataPreprocessor',
point_cloud_range=[0, -40, -3, 70.4, 40, 1], voxel=True,
voxel_size=voxel_size, voxel_layer=dict(
max_voxels=(16000, 40000)), max_num_points=5,
point_cloud_range=[0, -40, -3, 70.4, 40, 1],
voxel_size=voxel_size,
max_voxels=(16000, 40000))),
voxel_encoder=dict(type='HardSimpleVFE'), voxel_encoder=dict(type='HardSimpleVFE'),
middle_encoder=dict( middle_encoder=dict(
type='SparseEncoderSASSD', type='SparseEncoderSASSD',
...@@ -42,39 +45,41 @@ model = dict( ...@@ -42,39 +45,41 @@ model = dict(
[0, -40.0, -0.6, 70.4, 40.0, -0.6], [0, -40.0, -0.6, 70.4, 40.0, -0.6],
[0, -40.0, -1.78, 70.4, 40.0, -1.78], [0, -40.0, -1.78, 70.4, 40.0, -1.78],
], ],
sizes=[[0.6, 0.8, 1.73], [0.6, 1.76, 1.73], [1.6, 3.9, 1.56]], sizes=[[0.8, 0.6, 1.73], [1.76, 0.6, 1.73], [3.9, 1.6, 1.56]],
rotations=[0, 1.57], rotations=[0, 1.57],
reshape_out=False), reshape_out=False),
diff_rad_by_sin=True, diff_rad_by_sin=True,
bbox_coder=dict(type='DeltaXYZWLHRBBoxCoder'), bbox_coder=dict(type='DeltaXYZWLHRBBoxCoder'),
loss_cls=dict( loss_cls=dict(
type='FocalLoss', type='mmdet.FocalLoss',
use_sigmoid=True, use_sigmoid=True,
gamma=2.0, gamma=2.0,
alpha=0.25, alpha=0.25,
loss_weight=1.0), loss_weight=1.0),
loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=2.0), loss_bbox=dict(
type='mmdet.SmoothL1Loss', beta=1.0 / 9.0, loss_weight=2.0),
loss_dir=dict( loss_dir=dict(
type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.2)), type='mmdet.CrossEntropyLoss', use_sigmoid=False,
loss_weight=0.2)),
# model training and testing settings # model training and testing settings
train_cfg=dict( train_cfg=dict(
assigner=[ assigner=[
dict( # for Pedestrian dict( # for Pedestrian
type='MaxIoUAssigner', type='Max3DIoUAssigner',
iou_calculator=dict(type='BboxOverlapsNearest3D'), iou_calculator=dict(type='BboxOverlapsNearest3D'),
pos_iou_thr=0.35, pos_iou_thr=0.35,
neg_iou_thr=0.2, neg_iou_thr=0.2,
min_pos_iou=0.2, min_pos_iou=0.2,
ignore_iof_thr=-1), ignore_iof_thr=-1),
dict( # for Cyclist dict( # for Cyclist
type='MaxIoUAssigner', type='Max3DIoUAssigner',
iou_calculator=dict(type='BboxOverlapsNearest3D'), iou_calculator=dict(type='BboxOverlapsNearest3D'),
pos_iou_thr=0.35, pos_iou_thr=0.35,
neg_iou_thr=0.2, neg_iou_thr=0.2,
min_pos_iou=0.2, min_pos_iou=0.2,
ignore_iof_thr=-1), ignore_iof_thr=-1),
dict( # for Car dict( # for Car
type='MaxIoUAssigner', type='Max3DIoUAssigner',
iou_calculator=dict(type='BboxOverlapsNearest3D'), iou_calculator=dict(type='BboxOverlapsNearest3D'),
pos_iou_thr=0.6, pos_iou_thr=0.6,
neg_iou_thr=0.45, neg_iou_thr=0.45,
......
...@@ -14,9 +14,9 @@ Collections: ...@@ -14,9 +14,9 @@ Collections:
Version: v0.5.0 Version: v0.5.0
Models: Models:
- Name: hv_second_secfpn_6x8_80e_kitti-3d-car - Name: second_hv_secfpn_8xb6-80e_kitti-3d-car
In Collection: SECOND In Collection: SECOND
Config: configs/second/hv_second_secfpn_6x8_80e_kitti-3d-car.py Config: configs/second/second_hv_secfpn_8xb6-80e_kitti-3d-car.py
Metadata: Metadata:
Training Data: KITTI Training Data: KITTI
Training Memory (GB): 5.4 Training Memory (GB): 5.4
...@@ -28,9 +28,9 @@ Models: ...@@ -28,9 +28,9 @@ Models:
mAP: 79.07 mAP: 79.07
Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/second/hv_second_secfpn_6x8_80e_kitti-3d-car/hv_second_secfpn_6x8_80e_kitti-3d-car_20200620_230238-393f000c.pth Weights: https://download.openmmlab.com/mmdetection3d/v0.1.0_models/second/hv_second_secfpn_6x8_80e_kitti-3d-car/hv_second_secfpn_6x8_80e_kitti-3d-car_20200620_230238-393f000c.pth
- Name: hv_second_secfpn_6x8_80e_kitti-3d-3class - Name: second_hv_secfpn_8xb6-80e_kitti-3d-3class
In Collection: SECOND In Collection: SECOND
Config: configs/second/hv_second_secfpn_6x8_80e_kitti-3d-3class.py Config: configs/second/second_hv_secfpn_8xb6-80e_kitti-3d-3class.py
Metadata: Metadata:
Training Data: KITTI Training Data: KITTI
Training Memory (GB): 5.4 Training Memory (GB): 5.4
...@@ -42,9 +42,9 @@ Models: ...@@ -42,9 +42,9 @@ Models:
mAP: 65.74 mAP: 65.74
Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/second/hv_second_secfpn_6x8_80e_kitti-3d-3class/hv_second_secfpn_6x8_80e_kitti-3d-3class_20210831_022017-ae782e87.pth Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/second/hv_second_secfpn_6x8_80e_kitti-3d-3class/hv_second_secfpn_6x8_80e_kitti-3d-3class_20210831_022017-ae782e87.pth
- Name: hv_second_secfpn_sbn_2x16_2x_waymoD5-3d-3class - Name: second_hv_secfpn_sbn-all_16xb2-2x_waymoD5-3d-3class
In Collection: SECOND In Collection: SECOND
Config: configs/second/hv_second_secfpn_sbn_2x16_2x_waymoD5-3d-3class.py Config: configs/second/second_hv_secfpn_sbn-all_16xb2-2x_waymoD5-3d-3class.py
Metadata: Metadata:
Training Data: Waymo Training Data: Waymo
Training Memory (GB): 8.12 Training Memory (GB): 8.12
...@@ -58,9 +58,9 @@ Models: ...@@ -58,9 +58,9 @@ Models:
mAP@L2: 58.9 mAP@L2: 58.9
mAPH@L2: 55.7 mAPH@L2: 55.7
- Name: hv_second_secfpn_fp16_6x8_80e_kitti-3d-car - Name: second_hv_secfpn_8xb6-amp-80e_kitti-3d-car
In Collection: SECOND In Collection: SECOND
Config: configs/second/hv_second_secfpn_fp16_6x8_80e_kitti-3d-car.py Config: configs/second/hv_second_secfpn_8xb6-amp-80e_kitti-3d-car.py
Metadata: Metadata:
Training Techniques: Training Techniques:
- AdamW - AdamW
...@@ -77,9 +77,9 @@ Models: ...@@ -77,9 +77,9 @@ Models:
Code: Code:
Version: v0.7.0 Version: v0.7.0
- Name: hv_second_secfpn_fp16_6x8_80e_kitti-3d-3class - Name: second_hv_secfpn_8xb6-amp-80e_kitti-3d-3class
In Collection: SECOND In Collection: SECOND
Config: configs/second/hv_second_secfpn_fp16_6x8_80e_kitti-3d-3class.py Config: configs/second/hv_second_secfpn_8xb6-amp-80e_kitti-3d-3class.py
Metadata: Metadata:
Training Techniques: Training Techniques:
- AdamW - AdamW
......
...@@ -19,7 +19,7 @@ model = dict( ...@@ -19,7 +19,7 @@ model = dict(
train_cfg=dict( train_cfg=dict(
_delete_=True, _delete_=True,
assigner=dict( assigner=dict(
type='MaxIoUAssigner', type='Max3DIoUAssigner',
iou_calculator=dict(type='BboxOverlapsNearest3D'), iou_calculator=dict(type='BboxOverlapsNearest3D'),
pos_iou_thr=0.6, pos_iou_thr=0.6,
neg_iou_thr=0.45, neg_iou_thr=0.45,
......
_base_ = 'second_hv_secfpn_8xb6-80e_kitti-3d-3class.py'
# schedule settings
optim_wrapper = dict(type='AmpOptimWrapper', loss_scale=512.)
_base_ = 'second_hv_secfpn_8xb6-80e_kitti-3d-car.py'
# schedule settings
optim_wrapper = dict(type='AmpOptimWrapper', loss_scale=512.)
...@@ -8,7 +8,7 @@ _base_ = [ ...@@ -8,7 +8,7 @@ _base_ = [
dataset_type = 'WaymoDataset' dataset_type = 'WaymoDataset'
data_root = 'data/waymo/kitti_format/' data_root = 'data/waymo/kitti_format/'
class_names = ['Car', 'Pedestrian', 'Cyclist'] class_names = ['Car', 'Pedestrian', 'Cyclist']
metainfo = dict(CLASSES=class_names) metainfo = dict(classes=class_names)
point_cloud_range = [-76.8, -51.2, -2, 76.8, 51.2, 4] point_cloud_range = [-76.8, -51.2, -2, 76.8, 51.2, 4]
input_modality = dict(use_lidar=True, use_camera=False) input_modality = dict(use_lidar=True, use_camera=False)
......
...@@ -17,9 +17,9 @@ Collections: ...@@ -17,9 +17,9 @@ Collections:
Version: v1.0.0 Version: v1.0.0
Models: Models:
- Name: smoke_dla34_pytorch_dlaneck_gn-all_8x4_6x_kitti-mono3d - Name: smoke_dla34_pytorch_dlaneck_gn-all_4xb8-6x_kitti-mono3d
In Collection: SMOKE In Collection: SMOKE
Config: configs/smoke/smoke_dla34_pytorch_dlaneck_gn-all_8x4_6x_kitti-mono3d.py Config: configs/smoke/smoke_dla34_pytorch_dlaneck_gn-all_4xb8-6x_kitti-mono3d.py
Metadata: Metadata:
Training Memory (GB): 9.6 Training Memory (GB): 9.6
Results: Results:
......
...@@ -15,7 +15,7 @@ Collections: ...@@ -15,7 +15,7 @@ Collections:
Version: v0.7.0 Version: v0.7.0
Models: Models:
- Name: hv_ssn_secfpn_sbn-all_2x16_2x_nus-3d - Name: hv_ssn_secfpn_sbn-all_16xb2-2x_nus-3d
In Collection: SSN In Collection: SSN
Config: configs/ssn/ssn_hv_secfpn_sbn-all_16xb2-2x_nus-3d.py Config: configs/ssn/ssn_hv_secfpn_sbn-all_16xb2-2x_nus-3d.py
Metadata: Metadata:
...@@ -29,7 +29,7 @@ Models: ...@@ -29,7 +29,7 @@ Models:
NDS: 54.44 NDS: 54.44
Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/ssn/hv_ssn_secfpn_sbn-all_2x16_2x_nus-3d/hv_ssn_secfpn_sbn-all_2x16_2x_nus-3d_20210830_101351-51915986.pth Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/ssn/hv_ssn_secfpn_sbn-all_2x16_2x_nus-3d/hv_ssn_secfpn_sbn-all_2x16_2x_nus-3d_20210830_101351-51915986.pth
- Name: hv_ssn_regnet-400mf_secfpn_sbn-all_2x16_2x_nus-3d - Name: hv_ssn_regnet-400mf_secfpn_sbn-all_16xb2-2x_nus-3d
In Collection: SSN In Collection: SSN
Config: configs/ssn/ssn_hv_regnet-400mf_secfpn_sbn-all_16xb2-2x_nus-3d.py Config: configs/ssn/ssn_hv_regnet-400mf_secfpn_sbn-all_16xb2-2x_nus-3d.py
Metadata: Metadata:
...@@ -43,7 +43,7 @@ Models: ...@@ -43,7 +43,7 @@ Models:
NDS: 58.24 NDS: 58.24
Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/ssn/hv_ssn_regnet-400mf_secfpn_sbn-all_2x16_2x_nus-3d/hv_ssn_regnet-400mf_secfpn_sbn-all_2x16_2x_nus-3d_20210829_210615-361e5e04.pth Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/ssn/hv_ssn_regnet-400mf_secfpn_sbn-all_2x16_2x_nus-3d/hv_ssn_regnet-400mf_secfpn_sbn-all_2x16_2x_nus-3d_20210829_210615-361e5e04.pth
- Name: hv_ssn_secfpn_sbn-all_2x16_2x_lyft-3d - Name: hv_ssn_secfpn_sbn-all_16xb2-2x_lyft-3d
In Collection: SSN In Collection: SSN
Config: configs/ssn/ssn_hv_secfpn_sbn-all_16xb2-2x_lyft-3d.py Config: configs/ssn/ssn_hv_secfpn_sbn-all_16xb2-2x_lyft-3d.py
Metadata: Metadata:
...@@ -57,9 +57,9 @@ Models: ...@@ -57,9 +57,9 @@ Models:
Public Score: 17.5 Public Score: 17.5
Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/ssn/hv_ssn_secfpn_sbn-all_2x16_2x_lyft-3d/hv_ssn_secfpn_sbn-all_2x16_2x_lyft-3d_20210822_134731-46841b41.pth Weights: https://download.openmmlab.com/mmdetection3d/v1.0.0_models/ssn/hv_ssn_secfpn_sbn-all_2x16_2x_lyft-3d/hv_ssn_secfpn_sbn-all_2x16_2x_lyft-3d_20210822_134731-46841b41.pth
- Name: hv_ssn_regnet-400mf_secfpn_sbn-all_1x16_2x_lyft-3d - Name: hv_ssn_regnet-400mf_secfpn_sbn-all_16xb1-2x_lyft-3d
In Collection: SSN In Collection: SSN
Config: configs/ssn/hv_ssn_regnet-400mf_secfpn_sbn-all_1x16_2x_lyft-3d.py Config: configs/ssn/hv_ssn_regnet-400mf_secfpn_sbn-all_16xb1-2x_lyft-3d.py
Metadata: Metadata:
Training Data: Lyft Training Data: Lyft
Training Memory (GB): 7.4 Training Memory (GB): 7.4
......
...@@ -174,7 +174,7 @@ model = dict( ...@@ -174,7 +174,7 @@ model = dict(
min_pos_iou=0.4, min_pos_iou=0.4,
ignore_iof_thr=-1), ignore_iof_thr=-1),
dict( # animal dict( # animal
type='MaxIoUAssigner', type='Max3DIoUAssigner',
iou_calculator=dict(type='BboxOverlapsNearest3D'), iou_calculator=dict(type='BboxOverlapsNearest3D'),
pos_iou_thr=0.55, pos_iou_thr=0.55,
neg_iou_thr=0.4, neg_iou_thr=0.4,
......
...@@ -56,11 +56,11 @@ test_pipeline = [ ...@@ -56,11 +56,11 @@ test_pipeline = [
train_dataloader = dict( train_dataloader = dict(
batch_size=2, batch_size=2,
num_workers=4, num_workers=4,
dataset=dict(pipeline=train_pipeline, metainfo=dict(CLASSES=class_names))) dataset=dict(pipeline=train_pipeline, metainfo=dict(classes=class_names)))
test_dataloader = dict( test_dataloader = dict(
dataset=dict(pipeline=test_pipeline, metainfo=dict(CLASSES=class_names))) dataset=dict(pipeline=test_pipeline, metainfo=dict(classes=class_names)))
val_dataloader = dict( val_dataloader = dict(
dataset=dict(pipeline=test_pipeline, metainfo=dict(CLASSES=class_names))) dataset=dict(pipeline=test_pipeline, metainfo=dict(classes=class_names)))
# model settings # model settings
model = dict( model = dict(
......
...@@ -16,16 +16,39 @@ The ideal situation is that we can reorganize the customized raw data and conver ...@@ -16,16 +16,39 @@ The ideal situation is that we can reorganize the customized raw data and conver
#### Point cloud Format #### Point cloud Format
Currently, we only support '.bin' format point cloud for training and inference. Before training on your own datasets, you need to convert your point cloud files with other formats to '.bin' files. The common point cloud data formats include `.pcd` and `.las`, we list some open-source tools for reference. Currently, we only support `.bin` format point cloud for training and inference. Before training on your own datasets, you need to convert your point cloud files with other formats to `.bin` files. The common point cloud data formats include `.pcd` and `.las`, we list some open-source tools for reference.
1. Convert pcd to bin: https://github.com/leofansq/Tools_RosBag2KITTI 1. Convert `.pcd` to `.bin`: https://github.com/DanielPollithy/pypcd
2. Convert las to bin: The common conversion path is las -> pcd -> bin, and the conversion from las -> pcd can be achieved through [this tool](https://github.com/Hitachi-Automotive-And-Industry-Lab/semantic-segmentation-editor).
- You can install `pypcd` with the following command:
```bash
pip install git+https://github.com/DanielPollithy/pypcd.git
```
- You can use the following script to read the `.pcd` file and convert it to `.bin` format and save it:
```python
import numpy as np
from pypcd import pypcd
pcd_data = pypcd.PointCloud.from_path('point_cloud_data.pcd')
points = np.zeros([pcd_data.width, 4], dtype=np.float32)
points[:, 0] = pcd_data.pc_data['x'].copy()
points[:, 1] = pcd_data.pc_data['y'].copy()
points[:, 2] = pcd_data.pc_data['z'].copy()
points[:, 3] = pcd_data.pc_data['intensity'].copy().astype(np.float32)
with open('point_cloud_data.bin', 'wb') as f:
f.write(points.tobytes())
```
2. Convert `.las` to `.bin`: The common conversion path is `.las -> .pcd -> .bin`, and the conversion from `.las -> .pcd` can be achieved through [this tool](https://github.com/Hitachi-Automotive-And-Industry-Lab/semantic-segmentation-editor).
#### Label Format #### Label Format
The most basic information: 3D bounding box and category label of each scene need to be contained in the annotation `.txt` file. Each line represents a 3D box in a certain scene as follow: The most basic information: 3D bounding box and category label of each scene need to be contained in the annotation `.txt` file. Each line represents a 3D box in a certain scene as follow:
```python ```
# format: [x, y, z, dx, dy, dz, yaw, category_name] # format: [x, y, z, dx, dy, dz, yaw, category_name]
1.23 1.42 0.23 3.96 1.65 1.55 1.56 Car 1.23 1.42 0.23 3.96 1.65 1.55 1.56 Car
3.51 2.15 0.42 1.05 0.87 1.86 1.23 Pedestrian 3.51 2.15 0.42 1.05 0.87 1.86 1.23 Pedestrian
...@@ -83,7 +106,7 @@ mmdetection3d ...@@ -83,7 +106,7 @@ mmdetection3d
#### Vision-Based 3D Detection #### Vision-Based 3D Detection
The raw data for vision-based 3D object detection are typically organized as follows, where `ImageSets` contains split files indicating which files belong to training/validation set, `images` contains the images from different cameras, for example, images from `camera_x` need to be placed in `images\images_x`. `calibs` contains calibration information files which store the camera intrinsic matrix of each camera, and `labels` includes label files for 3D detection. The raw data for vision-based 3D object detection are typically organized as follows, where `ImageSets` contains split files indicating which files belong to training/validation set, `images` contains the images from different cameras, for example, images from `camera_x` need to be placed in `images/images_x`. `calibs` contains calibration information files which store the camera intrinsic matrix of each camera, and `labels` includes label files for 3D detection.
``` ```
mmdetection3d mmdetection3d
...@@ -197,22 +220,17 @@ class MyDataset(Det3DDataset): ...@@ -197,22 +220,17 @@ class MyDataset(Det3DDataset):
# replace with all the classes in customized pkl info file # replace with all the classes in customized pkl info file
METAINFO = { METAINFO = {
'CLASSES': ('Pedestrian', 'Cyclist', 'Car') 'classes': ('Pedestrian', 'Cyclist', 'Car')
} }
def parse_ann_info(self, info): def parse_ann_info(self, info):
"""Get annotation info according to the given index. """Process the `instances` in data info to `ann_info`
Args: Args:
info (dict): Data information of single data sample. info (dict): Info dict.
Returns: Returns:
dict: annotation information consists of the following keys: dict | None: Processed `ann_info`
- gt_bboxes_3d (:obj:`LiDARInstance3DBoxes`):
3D ground truth bboxes.
- bbox_labels_3d (np.ndarray): Labels of ground truths.
""" """
ann_info = super().parse_ann_info(info) ann_info = super().parse_ann_info(info)
if ann_info is None: if ann_info is None:
...@@ -250,7 +268,7 @@ data_root = 'data/custom/' ...@@ -250,7 +268,7 @@ data_root = 'data/custom/'
class_names = ['Pedestrian', 'Cyclist', 'Car'] # replace with your dataset class class_names = ['Pedestrian', 'Cyclist', 'Car'] # replace with your dataset class
point_cloud_range = [0, -40, -3, 70.4, 40, 1] # adjust according to your dataset point_cloud_range = [0, -40, -3, 70.4, 40, 1] # adjust according to your dataset
input_modality = dict(use_lidar=True, use_camera=False) input_modality = dict(use_lidar=True, use_camera=False)
metainfo = dict(CLASSES=class_names) metainfo = dict(classes=class_names)
train_pipeline = [ train_pipeline = [
dict( dict(
...@@ -464,9 +482,8 @@ _base_ = [ ...@@ -464,9 +482,8 @@ _base_ = [
#### Visualize your dataset (optional) #### Visualize your dataset (optional)
To valiate whether your prepared data and config are correct, it's highly recommended to use `tools/browse_dataest.py` script To valiate whether your prepared data and config are correct, it's highly recommended to use `tools/misc/browse_dataest.py` script
to visualize your dataset and annotations before training and validation, more details refer to the [visualization](https://github.com/open-mmlab/mmdetection3d/blob/dev-1.x/docs/en/user_guides/visualization.md/) doc. to visualize your dataset and annotations before training and validation, more details refer to the [visualization](https://github.com/open-mmlab/mmdetection3d/blob/dev-1.x/docs/en/user_guides/visualization.md) doc.
s
## Evaluation ## Evaluation
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment