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