"git@developer.sourcefind.cn:zhaoyu6/sglang.git" did not exist on "26ebb849eb4dffa1e6ec8679d2bc364f16b655a0"
Unverified Commit c2d958aa authored by ChaimZhu's avatar ChaimZhu Committed by GitHub
Browse files

[Refactor] update data flow and ut (#1776)

* update data flow and ut

* update ut

* update code

* fix mapping bug

* fix comments
parent c2c5abd6
......@@ -3,7 +3,7 @@ import unittest
import numpy as np
import torch
from mmengine.data import BaseDataElement
from mmengine.structures import BaseDataElement
from mmdet3d.evaluation.metrics import SegMetric
from mmdet3d.structures import Det3DDataSample, PointData
......@@ -11,28 +11,22 @@ from mmdet3d.structures import Det3DDataSample, PointData
class TestSegMetric(unittest.TestCase):
def _demo_mm_inputs(self):
"""Create a superset of inputs needed to run test or train batches."""
packed_inputs = []
mm_inputs = dict()
pts_semantic_mask = np.array([
0, 0, 0, 255, 0, 0, 1, 1, 1, 255, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3,
3, 255
])
ann_info_data = dict(pts_semantic_mask=pts_semantic_mask)
mm_inputs['data_sample'] = dict(eval_ann_info=ann_info_data)
packed_inputs.append(mm_inputs)
return packed_inputs
def _demo_mm_model_output(self):
"""Create a superset of inputs needed to run test or train batches."""
pts_semantic_mask = torch.Tensor([
pred_pts_semantic_mask = torch.Tensor([
0, 0, 1, 0, 0, 2, 1, 3, 1, 2, 1, 0, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3
])
pred_pts_seg_data = dict(pts_semantic_mask=pts_semantic_mask)
pred_pts_seg_data = dict(pts_semantic_mask=pred_pts_semantic_mask)
data_sample = Det3DDataSample()
data_sample.pred_pts_seg = PointData(**pred_pts_seg_data)
gt_pts_semantic_mask = np.array([
0, 0, 0, 255, 0, 0, 1, 1, 1, 255, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3,
3, 255
])
ann_info_data = dict(pts_semantic_mask=gt_pts_semantic_mask)
data_sample.eval_ann_info = ann_info_data
batch_data_samples = [data_sample]
predictions = []
......@@ -44,7 +38,7 @@ class TestSegMetric(unittest.TestCase):
return predictions
def test_evaluate(self):
data_batch = self._demo_mm_inputs()
data_batch = {}
predictions = self._demo_mm_model_output()
label2cat = {
0: 'car',
......
......@@ -34,59 +34,64 @@ class TestDet3DDataPreprocessor(TestCase):
points = torch.randn((5000, 3))
image = torch.randint(0, 256, (3, 11, 10)).float()
inputs_dict = dict(points=points, img=image)
inputs_dict = dict(points=[points], img=[image])
data = [{'inputs': inputs_dict, 'data_sample': Det3DDataSample()}]
inputs, data_samples = processor(data)
data = {'inputs': inputs_dict, 'data_samples': [Det3DDataSample()]}
out_data = processor(data)
batch_inputs, batch_data_samples = out_data['inputs'], out_data[
'data_samples']
self.assertEqual(inputs['imgs'].shape, (1, 3, 11, 10))
self.assertEqual(len(inputs['points']), 1)
self.assertEqual(len(data_samples), 1)
self.assertEqual(batch_inputs['imgs'].shape, (1, 3, 11, 10))
self.assertEqual(len(batch_inputs['points']), 1)
self.assertEqual(len(batch_data_samples), 1)
# test image channel_conversion
processor = Det3DDataPreprocessor(
mean=[0., 0., 0.], std=[1., 1., 1.], bgr_to_rgb=True)
inputs, data_samples = processor(data)
self.assertEqual(inputs['imgs'].shape, (1, 3, 11, 10))
self.assertEqual(len(data_samples), 1)
out_data = processor(data)
batch_inputs, batch_data_samples = out_data['inputs'], out_data[
'data_samples']
self.assertEqual(batch_inputs['imgs'].shape, (1, 3, 11, 10))
self.assertEqual(len(batch_data_samples), 1)
# test image padding
data = [{
data = {
'inputs': {
'points': torch.randn((5000, 3)),
'img': torch.randint(0, 256, (3, 10, 11))
'points': [torch.randn((5000, 3)),
torch.randn((5000, 3))],
'img': [
torch.randint(0, 256, (3, 10, 11)),
torch.randint(0, 256, (3, 9, 14))
]
}
}, {
'inputs': {
'points': torch.randn((5000, 3)),
'img': torch.randint(0, 256, (3, 9, 14))
}
}]
}
processor = Det3DDataPreprocessor(
mean=[0., 0., 0.], std=[1., 1., 1.], bgr_to_rgb=True)
inputs, data_samples = processor(data)
self.assertEqual(inputs['imgs'].shape, (2, 3, 10, 14))
self.assertIsNone(data_samples)
out_data = processor(data)
batch_inputs, batch_data_samples = out_data['inputs'], out_data[
'data_samples']
self.assertEqual(batch_inputs['imgs'].shape, (2, 3, 10, 14))
self.assertIsNone(batch_data_samples)
# test pad_size_divisor
data = [{
'inputs': {
'points': torch.randn((5000, 3)),
'img': torch.randint(0, 256, (3, 10, 11))
},
'data_sample': Det3DDataSample()
}, {
data = {
'inputs': {
'points': torch.randn((5000, 3)),
'img': torch.randint(0, 256, (3, 9, 24))
'points': [torch.randn((5000, 3)),
torch.randn((5000, 3))],
'img': [
torch.randint(0, 256, (3, 10, 11)),
torch.randint(0, 256, (3, 9, 24))
]
},
'data_sample': Det3DDataSample()
}]
'data_samples': [Det3DDataSample()] * 2
}
processor = Det3DDataPreprocessor(
mean=[0., 0., 0.], std=[1., 1., 1.], pad_size_divisor=5)
inputs, data_samples = processor(data)
self.assertEqual(inputs['imgs'].shape, (2, 3, 10, 25))
self.assertEqual(len(data_samples), 2)
for data_sample, expected_shape in zip(data_samples, [(10, 15),
(10, 25)]):
out_data = processor(data)
batch_inputs, batch_data_samples = out_data['inputs'], out_data[
'data_samples']
self.assertEqual(batch_inputs['imgs'].shape, (2, 3, 10, 25))
self.assertEqual(len(batch_data_samples), 2)
for data_sample, expected_shape in zip(batch_data_samples, [(10, 15),
(10, 25)]):
self.assertEqual(data_sample.pad_shape, expected_shape)
......@@ -161,11 +161,12 @@ class TestFCOSMono3DHead(TestCase):
self.assertGreater(gt_atr_loss, 0, 'attribue loss should be positive')
# test get_results
results_list = fcos_mono3d_head.predict_by_feat(*ret_dict, img_metas)
self.assertEqual(
len(results_list), 1,
'there should be no centerness loss when there are no true boxes')
results = results_list[0]
results_list_3d, results_list_2d = fcos_mono3d_head.predict_by_feat(
*ret_dict, img_metas)
self.assertEqual(len(results_list_3d), 1, 'batch size should be 1')
self.assertEqual(results_list_2d, None,
'there is no 2d result in fcos3d')
results = results_list_3d[0]
pred_bboxes_3d = results.bboxes_3d
pred_scores_3d = results.scores_3d
pred_labels_3d = results.labels_3d
......
......@@ -4,7 +4,6 @@ import torch
from mmengine import DefaultScope
from mmdet3d.registry import MODELS
from mmdet3d.structures import LiDARInstance3DBoxes
from tests.utils.model_utils import (_create_detector_inputs,
_get_detector_cfg, _setup_seed)
......@@ -22,51 +21,52 @@ class TestFreeAnchor(unittest.TestCase):
'anchor_4x8_2x_nus-3d.py')
model = MODELS.build(freeanchor_cfg)
num_gt_instance = 3
data = [
_create_detector_inputs(
num_gt_instance=num_gt_instance, gt_bboxes_dim=9)
]
aug_data = [
_create_detector_inputs(
num_gt_instance=num_gt_instance, gt_bboxes_dim=9),
_create_detector_inputs(
num_gt_instance=num_gt_instance + 1, gt_bboxes_dim=9)
]
# test_aug_test
metainfo = {
'pcd_scale_factor': 1,
'pcd_horizontal_flip': 1,
'pcd_vertical_flip': 1,
'box_type_3d': LiDARInstance3DBoxes
}
for item in aug_data:
item['data_sample'].set_metainfo(metainfo)
packed_inputs = _create_detector_inputs(
num_gt_instance=num_gt_instance, gt_bboxes_dim=9)
# TODO: Support aug_test
# aug_data = [
# _create_detector_inputs(
# num_gt_instance=num_gt_instance, gt_bboxes_dim=9),
# _create_detector_inputs(
# num_gt_instance=num_gt_instance + 1, gt_bboxes_dim=9)
# ]
# # test_aug_test
# metainfo = {
# 'pcd_scale_factor': 1,
# 'pcd_horizontal_flip': 1,
# 'pcd_vertical_flip': 1,
# 'box_type_3d': LiDARInstance3DBoxes
# }
# for item in aug_data:
# item['data_sample'].set_metainfo(metainfo)
if torch.cuda.is_available():
model = model.cuda()
# test simple_test
with torch.no_grad():
batch_inputs, data_samples = model.data_preprocessor(
data, True)
data = model.data_preprocessor(packed_inputs, True)
torch.cuda.empty_cache()
results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
results = model.forward(**data, mode='predict')
self.assertEqual(len(results), 1)
self.assertIn('bboxes_3d', results[0].pred_instances_3d)
self.assertIn('scores_3d', results[0].pred_instances_3d)
self.assertIn('labels_3d', results[0].pred_instances_3d)
batch_inputs, data_samples = model.data_preprocessor(
aug_data, True)
aug_results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
self.assertIn('bboxes_3d', aug_results[0].pred_instances_3d)
self.assertIn('scores_3d', aug_results[0].pred_instances_3d)
self.assertIn('labels_3d', aug_results[0].pred_instances_3d)
self.assertIn('bboxes_3d', aug_results[1].pred_instances_3d)
self.assertIn('scores_3d', aug_results[1].pred_instances_3d)
self.assertIn('labels_3d', aug_results[1].pred_instances_3d)
losses = model.forward(batch_inputs, data_samples, mode='loss')
# TODO: Support aug_test
# batch_inputs, data_samples = model.data_preprocessor(
# aug_data, True)
# aug_results = model.forward(
# batch_inputs, data_samples, mode='predict')
# self.assertEqual(len(results), len(data))
# self.assertIn('bboxes_3d', aug_results[0].pred_instances_3d)
# self.assertIn('scores_3d', aug_results[0].pred_instances_3d)
# self.assertIn('labels_3d', aug_results[0].pred_instances_3d)
# self.assertIn('bboxes_3d', aug_results[1].pred_instances_3d)
# self.assertIn('scores_3d', aug_results[1].pred_instances_3d)
# self.assertIn('labels_3d', aug_results[1].pred_instances_3d)
losses = model.forward(**data, mode='loss')
self.assertGreater(losses['positive_bag_loss'], 0)
self.assertGreater(losses['negative_bag_loss'], 0)
self.assertGreaterEqual(losses['positive_bag_loss'], 0)
self.assertGreaterEqual(losses['negative_bag_loss'], 0)
......@@ -186,11 +186,12 @@ class TestFGDHead(TestCase):
'consistency loss should be positive')
# test get_results
results_list = pgd_head.predict_by_feat(*ret_dict, img_metas)
self.assertEqual(
len(results_list), 1,
'there should be no centerness loss when there are no true boxes')
results, results_2d = results_list[0]
results_list_3d, results_list_2d = pgd_head.predict_by_feat(
*ret_dict, img_metas)
self.assertEqual(len(results_list_3d), 1, 'batch size should be 1')
self.assertEqual(len(results_list_2d), 1, 'batch size should be 1')
results = results_list_3d[0]
results_2d = results_list_2d[0]
pred_bboxes_3d = results.bboxes_3d
pred_scores_3d = results.scores_3d
pred_labels_3d = results.labels_3d
......
......@@ -4,7 +4,6 @@ import torch
from mmengine import DefaultScope
from mmdet3d.registry import MODELS
from mmdet3d.structures import LiDARInstance3DBoxes
from tests.utils.model_utils import (_create_detector_inputs,
_get_detector_cfg, _setup_seed)
......@@ -21,51 +20,52 @@ class TestSSN(unittest.TestCase):
'ssn/ssn_hv_secfpn_sbn-all_16xb2-2x_nus-3d.py')
model = MODELS.build(ssn_cfg)
num_gt_instance = 50
data = [
_create_detector_inputs(
num_gt_instance=num_gt_instance, gt_bboxes_dim=9)
]
aug_data = [
_create_detector_inputs(
num_gt_instance=num_gt_instance, gt_bboxes_dim=9),
_create_detector_inputs(
num_gt_instance=num_gt_instance + 1, gt_bboxes_dim=9)
]
packed_inputs = _create_detector_inputs(
num_gt_instance=num_gt_instance, gt_bboxes_dim=9)
# TODO: Support aug_test
# aug_data = [
# _create_detector_inputs(
# num_gt_instance=num_gt_instance, gt_bboxes_dim=9),
# _create_detector_inputs(
# num_gt_instance=num_gt_instance + 1, gt_bboxes_dim=9)
# ]
# test_aug_test
metainfo = {
'pcd_scale_factor': 1,
'pcd_horizontal_flip': 1,
'pcd_vertical_flip': 1,
'box_type_3d': LiDARInstance3DBoxes
}
for item in aug_data:
item['data_sample'].set_metainfo(metainfo)
# metainfo = {
# 'pcd_scale_factor': 1,
# 'pcd_horizontal_flip': 1,
# 'pcd_vertical_flip': 1,
# 'box_type_3d': LiDARInstance3DBoxes
# }
# for item in aug_data:
# item['data_sample'].set_metainfo(metainfo)
if torch.cuda.is_available():
model = model.cuda()
# test simple_test
with torch.no_grad():
batch_inputs, data_samples = model.data_preprocessor(
data, True)
results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
data = model.data_preprocessor(packed_inputs, True)
results = model.forward(**data, mode='predict')
self.assertEqual(len(results), 1)
self.assertIn('bboxes_3d', results[0].pred_instances_3d)
self.assertIn('scores_3d', results[0].pred_instances_3d)
self.assertIn('labels_3d', results[0].pred_instances_3d)
batch_inputs, data_samples = model.data_preprocessor(
aug_data, True)
aug_results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
self.assertIn('bboxes_3d', aug_results[0].pred_instances_3d)
self.assertIn('scores_3d', aug_results[0].pred_instances_3d)
self.assertIn('labels_3d', aug_results[0].pred_instances_3d)
self.assertIn('bboxes_3d', aug_results[1].pred_instances_3d)
self.assertIn('scores_3d', aug_results[1].pred_instances_3d)
self.assertIn('labels_3d', aug_results[1].pred_instances_3d)
losses = model.forward(batch_inputs, data_samples, mode='loss')
# TODO: Support aug_test
# batch_inputs, data_samples = model.data_preprocessor(
# aug_data, True)
# aug_results = model.forward(
# batch_inputs, data_samples, mode='predict')
# self.assertEqual(len(results), len(data))
# self.assertIn('bboxes_3d', aug_results[0].pred_instances_3d)
# self.assertIn('scores_3d', aug_results[0].pred_instances_3d)
# self.assertIn('labels_3d', aug_results[0].pred_instances_3d)
# self.assertIn('bboxes_3d', aug_results[1].pred_instances_3d)
# self.assertIn('scores_3d', aug_results[1].pred_instances_3d)
# self.assertIn('labels_3d', aug_results[1].pred_instances_3d)
losses = model.forward(**data, mode='loss')
self.assertGreater(losses['loss_cls'][0], 0)
self.assertGreater(losses['loss_bbox'][0], 0)
self.assertGreater(losses['loss_dir'][0], 0)
self.assertGreaterEqual(losses['loss_cls'][0], 0)
self.assertGreaterEqual(losses['loss_bbox'][0], 0)
self.assertGreaterEqual(losses['loss_dir'][0], 0)
......@@ -19,25 +19,21 @@ class Test3DSSD(unittest.TestCase):
voxel_net_cfg = _get_detector_cfg('3dssd/3dssd_4xb4_kitti-3d-car.py')
model = MODELS.build(voxel_net_cfg)
num_gt_instance = 3
data = [
_create_detector_inputs(
num_gt_instance=num_gt_instance, num_classes=1)
]
packed_inputs = _create_detector_inputs(
num_gt_instance=num_gt_instance, num_classes=1)
if torch.cuda.is_available():
model = model.cuda()
# test simple_test
with torch.no_grad():
batch_inputs, data_samples = model.data_preprocessor(
data, True)
data = model.data_preprocessor(packed_inputs, True)
torch.cuda.empty_cache()
results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
results = model.forward(**data, mode='predict')
self.assertEqual(len(results), 1)
self.assertIn('bboxes_3d', results[0].pred_instances_3d)
self.assertIn('scores_3d', results[0].pred_instances_3d)
self.assertIn('labels_3d', results[0].pred_instances_3d)
losses = model.forward(batch_inputs, data_samples, mode='loss')
losses = model.forward(**data, mode='loss')
self.assertGreater(losses['centerness_loss'], 0)
......@@ -22,14 +22,11 @@ class TestCenterPoint(unittest.TestCase):
)
model = MODELS.build(centerpoint_net_cfg)
num_gt_instance = 50
data = [
_create_detector_inputs(
with_img=True,
num_gt_instance=num_gt_instance,
points_feat_dim=5)
]
for sample_id in range(len(data)):
det_sample = data[sample_id]['data_sample']
packed_inputs = _create_detector_inputs(
with_img=True, num_gt_instance=num_gt_instance, points_feat_dim=5)
for sample_id in range(len(packed_inputs['data_samples'])):
det_sample = packed_inputs['data_samples'][sample_id]
num_instances = len(det_sample.gt_instances_3d.bboxes_3d)
bbox_3d_class = det_sample.gt_instances_3d.bboxes_3d.__class__
det_sample.gt_instances_3d.bboxes_3d = bbox_3d_class(
......@@ -40,10 +37,10 @@ class TestCenterPoint(unittest.TestCase):
model = model.cuda()
# test simple_test
batch_inputs, data_samples = model.data_preprocessor(data, True)
data = model.data_preprocessor(packed_inputs, True)
with torch.no_grad():
torch.cuda.empty_cache()
losses = model.forward(batch_inputs, data_samples, mode='loss')
losses = model.forward(**data, mode='loss')
assert losses['task0.loss_heatmap'] >= 0
assert losses['task0.loss_bbox'] >= 0
assert losses['task1.loss_heatmap'] >= 0
......@@ -58,9 +55,8 @@ class TestCenterPoint(unittest.TestCase):
assert losses['task5.loss_bbox'] >= 0
with torch.no_grad():
results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
results = model.forward(**data, mode='predict')
self.assertEqual(len(results), 1)
self.assertIn('bboxes_3d', results[0].pred_instances_3d)
self.assertIn('scores_3d', results[0].pred_instances_3d)
self.assertIn('labels_3d', results[0].pred_instances_3d)
......
......@@ -20,31 +20,27 @@ class TestGroupfree3d(unittest.TestCase):
'groupfree3d/groupfree3d_head-L6-O256_4xb8_scannet-seg.py')
model = MODELS.build(voxel_net_cfg)
num_gt_instance = 5
data = [
_create_detector_inputs(
num_gt_instance=num_gt_instance,
points_feat_dim=3,
with_pts_semantic_mask=True,
with_pts_instance_mask=True)
]
packed_inputs = _create_detector_inputs(
num_gt_instance=num_gt_instance,
points_feat_dim=3,
with_pts_semantic_mask=True,
with_pts_instance_mask=True)
if torch.cuda.is_available():
model = model.cuda()
# test simple_test
with torch.no_grad():
batch_inputs, data_samples = model.data_preprocessor(
data, True)
data = model.data_preprocessor(packed_inputs, True)
torch.cuda.empty_cache()
results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
results = model.forward(**data, mode='predict')
self.assertEqual(len(results), 1)
self.assertIn('bboxes_3d', results[0].pred_instances_3d)
self.assertIn('scores_3d', results[0].pred_instances_3d)
self.assertIn('labels_3d', results[0].pred_instances_3d)
# save the memory
with torch.no_grad():
losses = model.forward(batch_inputs, data_samples, mode='loss')
losses = model.forward(**data, mode='loss')
self.assertGreater(losses['sampling_objectness_loss'], 0)
self.assertGreater(losses['proposal.objectness_loss'], 0)
......
......@@ -19,31 +19,27 @@ class TestH3D(unittest.TestCase):
voxel_net_cfg = _get_detector_cfg('h3dnet/h3dnet_8xb3_scannet-seg.py')
model = MODELS.build(voxel_net_cfg)
num_gt_instance = 5
data = [
_create_detector_inputs(
num_gt_instance=num_gt_instance,
points_feat_dim=4,
bboxes_3d_type='depth',
with_pts_semantic_mask=True,
with_pts_instance_mask=True)
]
packed_inputs = _create_detector_inputs(
num_gt_instance=num_gt_instance,
points_feat_dim=4,
bboxes_3d_type='depth',
with_pts_semantic_mask=True,
with_pts_instance_mask=True)
if torch.cuda.is_available():
model = model.cuda()
# test simple_test
with torch.no_grad():
batch_inputs, data_samples = model.data_preprocessor(
data, True)
results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
data = model.data_preprocessor(packed_inputs, True)
results = model.forward(**data, mode='predict')
self.assertEqual(len(results), 1)
self.assertIn('bboxes_3d', results[0].pred_instances_3d)
self.assertIn('scores_3d', results[0].pred_instances_3d)
self.assertIn('labels_3d', results[0].pred_instances_3d)
# save the memory
with torch.no_grad():
losses = model.forward(batch_inputs, data_samples, mode='loss')
losses = model.forward(**data, mode='loss')
self.assertGreater(losses['vote_loss'], 0)
self.assertGreater(losses['objectness_loss'], 0)
......
......@@ -20,20 +20,16 @@ class TestImvoteNet(unittest.TestCase):
'imvotenet/imvotenet_faster-rcnn-r50_fpn_4xb2_sunrgbd-3d.py')
model = MODELS.build(votenet_net_cfg)
data = [
_create_detector_inputs(
with_points=False, with_img=True, img_size=128)
]
packed_inputs = _create_detector_inputs(
with_points=False, with_img=True, img_size=128)
if torch.cuda.is_available():
model = model.cuda()
# test simple_test
with torch.no_grad():
batch_inputs, data_samples = model.data_preprocessor(
data, True)
results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
data = model.data_preprocessor(packed_inputs, True)
results = model.forward(**data, mode='predict')
self.assertEqual(len(results), 1)
self.assertIn('bboxes', results[0].pred_instances)
self.assertIn('scores', results[0].pred_instances)
self.assertIn('labels', results[0].pred_instances)
......@@ -41,7 +37,7 @@ class TestImvoteNet(unittest.TestCase):
# save the memory
with torch.no_grad():
torch.cuda.empty_cache()
losses = model.forward(batch_inputs, data_samples, mode='loss')
losses = model.forward(**data, mode='loss')
self.assertGreater(sum(losses['loss_rpn_cls']), 0)
......@@ -58,30 +54,26 @@ class TestImvoteNet(unittest.TestCase):
'imvotenet/imvotenet_stage2_8xb16_sunrgbd-3d.py')
model = MODELS.build(votenet_net_cfg)
data = [
_create_detector_inputs(
with_points=True,
with_img=True,
img_size=128,
bboxes_3d_type='depth')
]
packed_inputs = _create_detector_inputs(
with_points=True,
with_img=True,
img_size=128,
bboxes_3d_type='depth')
if torch.cuda.is_available():
model = model.cuda()
# test simple_test
with torch.no_grad():
batch_inputs, data_samples = model.data_preprocessor(
data, True)
results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
data = model.data_preprocessor(packed_inputs, True)
results = model.forward(**data, mode='predict')
self.assertEqual(len(results), 1)
self.assertIn('bboxes_3d', results[0].pred_instances_3d)
self.assertIn('scores_3d', results[0].pred_instances_3d)
self.assertIn('labels_3d', results[0].pred_instances_3d)
# save the memory
with torch.no_grad():
losses = model.forward(batch_inputs, data_samples, mode='loss')
losses = model.forward(**data, mode='loss')
self.assertGreater(losses['vote_loss'], 0)
self.assertGreater(losses['objectness_loss'], 0)
......
......@@ -20,33 +20,29 @@ class TestImVoxelNet(unittest.TestCase):
'imvoxelnet/imvoxelnet_8xb4_kitti-3d-car.py')
model = MODELS.build(imvoxel_net_cfg)
num_gt_instance = 1
data = [
_create_detector_inputs(
with_points=False,
with_img=True,
img_size=(128, 128),
num_gt_instance=num_gt_instance,
with_pts_semantic_mask=False,
with_pts_instance_mask=False)
]
packed_inputs = _create_detector_inputs(
with_points=False,
with_img=True,
img_size=(128, 128),
num_gt_instance=num_gt_instance,
with_pts_semantic_mask=False,
with_pts_instance_mask=False)
if torch.cuda.is_available():
model = model.cuda()
# test simple_test
with torch.no_grad():
batch_inputs, data_samples = model.data_preprocessor(
data, True)
data = model.data_preprocessor(packed_inputs, True)
torch.cuda.empty_cache()
results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
results = model.forward(**data, mode='predict')
self.assertEqual(len(results), 1)
self.assertIn('bboxes_3d', results[0].pred_instances_3d)
self.assertIn('scores_3d', results[0].pred_instances_3d)
self.assertIn('labels_3d', results[0].pred_instances_3d)
# save the memory
with torch.no_grad():
losses = model.forward(batch_inputs, data_samples, mode='loss')
losses = model.forward(**data, mode='loss')
self.assertGreaterEqual(losses['loss_cls'][0], 0)
self.assertGreaterEqual(losses['loss_bbox'][0], 0)
......
......@@ -22,30 +22,25 @@ class TestMVXNet(unittest.TestCase):
)
model = MODELS.build(mvx_net_cfg)
num_gt_instance = 1
data = [
_create_detector_inputs(
with_img=False,
num_gt_instance=num_gt_instance,
points_feat_dim=4)
]
packed_inputs = _create_detector_inputs(
with_img=False, num_gt_instance=num_gt_instance, points_feat_dim=4)
if torch.cuda.is_available():
model = model.cuda()
# test simple_test
batch_inputs, data_samples = model.data_preprocessor(data, True)
data = model.data_preprocessor(packed_inputs, True)
# save the memory when do the unitest
with torch.no_grad():
torch.cuda.empty_cache()
losses = model.forward(batch_inputs, data_samples, mode='loss')
losses = model.forward(**data, mode='loss')
assert losses['loss_cls'][0] >= 0
assert losses['loss_bbox'][0] >= 0
assert losses['loss_dir'][0] >= 0
with torch.no_grad():
results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
results = model.forward(**data, mode='predict')
self.assertEqual(len(results), 1)
self.assertIn('bboxes_3d', results[0].pred_instances_3d)
self.assertIn('scores_3d', results[0].pred_instances_3d)
self.assertIn('labels_3d', results[0].pred_instances_3d)
......
......@@ -4,7 +4,6 @@ import torch
from mmengine import DefaultScope
from mmdet3d.registry import MODELS
from mmdet3d.structures import LiDARInstance3DBoxes
from tests.utils.model_utils import (_create_detector_inputs,
_get_detector_cfg, _setup_seed)
......@@ -21,51 +20,43 @@ class TestPartA2(unittest.TestCase):
'parta2/PartA2_hv_secfpn_8xb2-cyclic-80e_kitti-3d-3class.py')
model = MODELS.build(parta2_cfg)
num_gt_instance = 2
data = [_create_detector_inputs(num_gt_instance=num_gt_instance)]
aug_data = [
_create_detector_inputs(num_gt_instance=num_gt_instance),
_create_detector_inputs(num_gt_instance=num_gt_instance + 1)
]
packed_inputs = _create_detector_inputs(
num_gt_instance=num_gt_instance)
# TODO: Support aug data test
# aug_packed_inputs = [
# _create_detector_inputs(num_gt_instance=num_gt_instance),
# _create_detector_inputs(num_gt_instance=num_gt_instance + 1)
# ]
# test_aug_test
metainfo = {
'pcd_scale_factor': 1,
'pcd_horizontal_flip': 1,
'pcd_vertical_flip': 1,
'box_type_3d': LiDARInstance3DBoxes
}
for item in aug_data:
item['data_sample'].set_metainfo(metainfo)
# metainfo = {
# 'pcd_scale_factor': 1,
# 'pcd_horizontal_flip': 1,
# 'pcd_vertical_flip': 1,
# 'box_type_3d': LiDARInstance3DBoxes
# }
# for item in aug_packed_inputs:
# for batch_id in len(item['data_samples']):
# item['data_samples'][batch_id].set_metainfo(metainfo)
if torch.cuda.is_available():
model = model.cuda()
# test simple_test
with torch.no_grad():
batch_inputs, data_samples = model.data_preprocessor(
data, True)
data = model.data_preprocessor(packed_inputs, True)
torch.cuda.empty_cache()
results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
results = model.forward(**data, mode='predict')
self.assertEqual(len(results), 1)
self.assertIn('bboxes_3d', results[0].pred_instances_3d)
self.assertIn('scores_3d', results[0].pred_instances_3d)
self.assertIn('labels_3d', results[0].pred_instances_3d)
batch_inputs, data_samples = model.data_preprocessor(
aug_data, True)
aug_results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
self.assertIn('bboxes_3d', aug_results[0].pred_instances_3d)
self.assertIn('scores_3d', aug_results[0].pred_instances_3d)
self.assertIn('labels_3d', aug_results[0].pred_instances_3d)
self.assertIn('bboxes_3d', aug_results[1].pred_instances_3d)
self.assertIn('scores_3d', aug_results[1].pred_instances_3d)
self.assertIn('labels_3d', aug_results[1].pred_instances_3d)
# save the memory
# save the memory
with torch.no_grad():
losses = model.forward(batch_inputs, data_samples, mode='loss')
losses = model.forward(**data, mode='loss')
torch.cuda.empty_cache()
self.assertGreater(losses['loss_rpn_cls'][0], 0)
self.assertGreater(losses['loss_rpn_bbox'][0], 0)
self.assertGreaterEqual(losses['loss_rpn_bbox'][0], 0)
self.assertGreater(losses['loss_seg'], 0)
self.assertGreater(losses['loss_part'], 0)
self.assertGreater(losses['loss_cls'], 0)
......@@ -4,7 +4,6 @@ import torch
from mmengine import DefaultScope
from mmdet3d.registry import MODELS
from mmdet3d.structures import LiDARInstance3DBoxes
from tests.utils.model_utils import (_create_detector_inputs,
_get_detector_cfg, _setup_seed)
......@@ -21,44 +20,48 @@ class TestVotenet(unittest.TestCase):
'votenet/votenet_8xb16_sunrgbd-3d.py')
model = MODELS.build(voxel_net_cfg)
num_gt_instance = 50
data = [_create_detector_inputs(num_gt_instance=num_gt_instance)]
aug_data = [
_create_detector_inputs(num_gt_instance=num_gt_instance),
_create_detector_inputs(num_gt_instance=num_gt_instance + 1)
]
# test_aug_test
metainfo = {
'pcd_scale_factor': 1,
'pcd_horizontal_flip': 1,
'pcd_vertical_flip': 1,
'box_type_3d': LiDARInstance3DBoxes
}
for item in aug_data:
item['data_sample'].set_metainfo(metainfo)
packed_inputs = _create_detector_inputs(
num_gt_instance=num_gt_instance)
# TODO: Support aug test
# aug_data = [
# _create_detector_inputs(num_gt_instance=num_gt_instance),
# _create_detector_inputs(num_gt_instance=num_gt_instance + 1)
# ]
# # test_aug_test
# metainfo = {
# 'pcd_scale_factor': 1,
# 'pcd_horizontal_flip': 1,
# 'pcd_vertical_flip': 1,
# 'box_type_3d': LiDARInstance3DBoxes
# # }
# for item in aug_data:
# item['data_sample'].set_metainfo(metainfo)
if torch.cuda.is_available():
model = model.cuda()
# test simple_test
with torch.no_grad():
batch_inputs, data_samples = model.data_preprocessor(
data, True)
results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
data = model.data_preprocessor(packed_inputs, True)
results = model.forward(**data, mode='predict')
self.assertEqual(len(results), 1)
self.assertIn('bboxes_3d', results[0].pred_instances_3d)
self.assertIn('scores_3d', results[0].pred_instances_3d)
self.assertIn('labels_3d', results[0].pred_instances_3d)
batch_inputs, data_samples = model.data_preprocessor(
aug_data, True)
aug_results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertIn('bboxes_3d', aug_results[0].pred_instances_3d)
self.assertIn('scores_3d', aug_results[0].pred_instances_3d)
self.assertIn('labels_3d', aug_results[0].pred_instances_3d)
# TODO: Support aug_test
# batch_inputs, data_samples = model.data_preprocessor(
# aug_data, True)
# aug_results = model.forward(
# batch_inputs, data_samples, mode='predict')
# self.assertIn('bboxes_3d', aug_results[0].pred_instances_3d)
# self.assertIn('scores_3d', aug_results[0].pred_instances_3d)
# self.assertIn('labels_3d', aug_results[0].pred_instances_3d)
# save the memory
with torch.no_grad():
losses = model.forward(batch_inputs, data_samples, mode='loss')
losses = model.forward(**data, mode='loss')
self.assertGreater(losses['vote_loss'], 0)
self.assertGreater(losses['objectness_loss'], 0)
......
......@@ -5,7 +5,6 @@ import torch
from mmengine import DefaultScope
from mmdet3d.registry import MODELS
from mmdet3d.structures import LiDARInstance3DBoxes
from tests.utils.model_utils import (_create_detector_inputs,
_get_detector_cfg, _setup_seed)
......@@ -22,49 +21,54 @@ class TestVoxelNet(unittest.TestCase):
'pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py')
model = MODELS.build(pointpillars_cfg)
num_gt_instance = 2
data = [_create_detector_inputs(num_gt_instance=num_gt_instance)]
aug_data = [
_create_detector_inputs(num_gt_instance=num_gt_instance),
_create_detector_inputs(num_gt_instance=num_gt_instance + 1)
]
# test_aug_test
metainfo = {
'pcd_scale_factor': 1,
'pcd_horizontal_flip': 1,
'pcd_vertical_flip': 1,
'box_type_3d': LiDARInstance3DBoxes
}
for item in aug_data:
item['data_sample'].set_metainfo(metainfo)
packed_inputs = _create_detector_inputs(
num_gt_instance=num_gt_instance)
# TODO: Support aug_test
# aug_data = [
# _create_detector_inputs(num_gt_instance=num_gt_instance),
# _create_detector_inputs(num_gt_instance=num_gt_instance + 1)
# ]
# # test_aug_test
# metainfo = {
# 'pcd_scale_factor': 1,
# 'pcd_horizontal_flip': 1,
# 'pcd_vertical_flip': 1,
# 'box_type_3d': LiDARInstance3DBoxes
# }
# for item in aug_data:
# item['data_sample'].set_metainfo(metainfo)
if torch.cuda.is_available():
model = model.cuda()
# test simple_test
with torch.no_grad():
batch_inputs, data_samples = model.data_preprocessor(
data, True)
data = model.data_preprocessor(packed_inputs, True)
torch.cuda.empty_cache()
results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
results = model.forward(**data, mode='predict')
self.assertEqual(len(results), 1)
self.assertIn('bboxes_3d', results[0].pred_instances_3d)
self.assertIn('scores_3d', results[0].pred_instances_3d)
self.assertIn('labels_3d', results[0].pred_instances_3d)
batch_inputs, data_samples = model.data_preprocessor(
aug_data, True)
aug_results = model.forward(
batch_inputs, data_samples, mode='predict')
self.assertEqual(len(results), len(data))
self.assertIn('bboxes_3d', aug_results[0].pred_instances_3d)
self.assertIn('scores_3d', aug_results[0].pred_instances_3d)
self.assertIn('labels_3d', aug_results[0].pred_instances_3d)
self.assertIn('bboxes_3d', aug_results[1].pred_instances_3d)
self.assertIn('scores_3d', aug_results[1].pred_instances_3d)
self.assertIn('labels_3d', aug_results[1].pred_instances_3d)
# TODO: Support aug_test
# batch_inputs, data_samples = model.data_preprocessor(
# aug_data, True)
# aug_results = model.forward(
# batch_inputs, data_samples, mode='predict')
# self.assertEqual(len(results), len(data))
# self.assertIn('bboxes_3d', aug_results[0].pred_instances_3d)
# self.assertIn('scores_3d', aug_results[0].pred_instances_3d)
# self.assertIn('labels_3d', aug_results[0].pred_instances_3d)
# self.assertIn('bboxes_3d', aug_results[1].pred_instances_3d)
# self.assertIn('scores_3d', aug_results[1].pred_instances_3d)
# self.assertIn('labels_3d', aug_results[1].pred_instances_3d)
# save the memory
with torch.no_grad():
losses = model.forward(batch_inputs, data_samples, mode='loss')
losses = model.forward(**data, mode='loss')
torch.cuda.empty_cache()
self.assertGreater(losses['loss_dir'][0], 0)
self.assertGreater(losses['loss_bbox'][0], 0)
self.assertGreater(losses['loss_cls'][0], 0)
self.assertGreaterEqual(losses['loss_dir'][0], 0)
self.assertGreaterEqual(losses['loss_bbox'][0], 0)
self.assertGreaterEqual(losses['loss_cls'][0], 0)
......@@ -6,11 +6,19 @@ CommandLine:
"""
import torch
from mmengine import DefaultScope
from mmdet3d.registry import TASK_UTILS
def test_anchor_3d_range_generator():
import mmdet3d.models.task_modules
assert hasattr(mmdet3d.models.task_modules, 'Anchor3DRangeGenerator')
DefaultScope.get_instance(
'test_ancho3drange_generator', scope_name='mmdet3d')
if torch.cuda.is_available():
device = 'cuda'
else:
......@@ -44,6 +52,14 @@ def test_anchor_3d_range_generator():
def test_aligned_anchor_generator():
import mmdet3d.models.task_modules
assert hasattr(mmdet3d.models.task_modules,
'AlignedAnchor3DRangeGenerator')
DefaultScope.get_instance(
'test_aligned_ancho3drange_generator', scope_name='mmdet3d')
if torch.cuda.is_available():
device = 'cuda'
else:
......@@ -185,6 +201,14 @@ def test_aligned_anchor_generator():
def test_aligned_anchor_generator_per_cls():
import mmdet3d.models.task_modules
assert hasattr(mmdet3d.models.task_modules,
'AlignedAnchor3DRangeGeneratorPerCls')
DefaultScope.get_instance(
'test_ancho3drange_generator_percls', scope_name='mmdet3d')
if torch.cuda.is_available():
device = 'cuda'
else:
......
# Copyright (c) OpenMMLab. All rights reserved.
import pytest
import torch
from mmengine import InstanceData
from mmengine.structures import InstanceData
from mmdet3d.models.task_modules import IoUNegPiecewiseSampler
from mmdet3d.models.task_modules.assigners import Max3DIoUAssigner
......
import pytest
from mmcv import ConfigDict
from mmengine import ConfigDict
from mmdet3d.utils.compat_cfg import (compat_imgs_per_gpu, compat_loader_args,
compat_runner_args)
......
......@@ -5,8 +5,7 @@ import platform
import sys
import cv2
from mmcv import Config
from mmengine import DefaultScope
from mmengine import Config, DefaultScope
from mmdet3d.utils import register_all_modules, setup_multi_processes
......
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