Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
mmdetection3d
Commits
9247e72c
Commit
9247e72c
authored
Jul 07, 2022
by
ZCMax
Committed by
ChaimZhu
Jul 20, 2022
Browse files
[Fix] fix kitti metric and kitti data_converter
parent
a5d463d7
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
35 additions
and
18 deletions
+35
-18
mmdet3d/metrics/kitti_metric.py
mmdet3d/metrics/kitti_metric.py
+32
-14
tools/data_converter/update_infos_to_v2.py
tools/data_converter/update_infos_to_v2.py
+3
-4
No files found.
mmdet3d/metrics/kitti_metric.py
View file @
9247e72c
...
@@ -10,7 +10,8 @@ from mmcv.utils import print_log
...
@@ -10,7 +10,8 @@ from mmcv.utils import print_log
from
mmengine.evaluator
import
BaseMetric
from
mmengine.evaluator
import
BaseMetric
from
mmengine.logging
import
MMLogger
from
mmengine.logging
import
MMLogger
from
mmdet3d.core.bbox
import
Box3DMode
,
points_cam2img
from
mmdet3d.core.bbox
import
(
Box3DMode
,
CameraInstance3DBoxes
,
LiDARInstance3DBoxes
,
points_cam2img
)
from
mmdet3d.core.evaluation
import
kitti_eval
from
mmdet3d.core.evaluation
import
kitti_eval
from
mmdet3d.registry
import
METRICS
from
mmdet3d.registry
import
METRICS
...
@@ -112,8 +113,9 @@ class KittiMetric(BaseMetric):
...
@@ -112,8 +113,9 @@ class KittiMetric(BaseMetric):
for
instance
in
annos
[
'instances'
]:
for
instance
in
annos
[
'instances'
]:
labels
=
instance
[
'bbox_label'
]
labels
=
instance
[
'bbox_label'
]
if
labels
==
-
1
:
if
labels
==
-
1
:
continue
kitti_annos
[
'name'
].
append
(
'DontCare'
)
kitti_annos
[
'name'
].
append
(
classes
[
labels
])
else
:
kitti_annos
[
'name'
].
append
(
classes
[
labels
])
kitti_annos
[
'truncated'
].
append
(
instance
[
'truncated'
])
kitti_annos
[
'truncated'
].
append
(
instance
[
'truncated'
])
kitti_annos
[
'occluded'
].
append
(
instance
[
'occluded'
])
kitti_annos
[
'occluded'
].
append
(
instance
[
'occluded'
])
kitti_annos
[
'alpha'
].
append
(
instance
[
'alpha'
])
kitti_annos
[
'alpha'
].
append
(
instance
[
'alpha'
])
...
@@ -161,8 +163,8 @@ class KittiMetric(BaseMetric):
...
@@ -161,8 +163,8 @@ class KittiMetric(BaseMetric):
pred
[
pred_result
][
attr_name
]
=
pred
[
pred_result
][
pred
[
pred_result
][
attr_name
]
=
pred
[
pred_result
][
attr_name
].
to
(
self
.
collect_device
)
attr_name
].
to
(
self
.
collect_device
)
result
[
pred_result
]
=
pred
[
pred_result
]
result
[
pred_result
]
=
pred
[
pred_result
]
sample_idx
=
data
[
'data_sample'
][
'sample_idx'
]
sample_idx
=
data
[
'data_sample'
][
'sample_idx'
]
result
[
'sample_idx'
]
=
sample_idx
result
[
'sample_idx'
]
=
sample_idx
self
.
results
.
append
(
result
)
self
.
results
.
append
(
result
)
def
compute_metrics
(
self
,
results
:
list
)
->
Dict
[
str
,
float
]:
def
compute_metrics
(
self
,
results
:
list
)
->
Dict
[
str
,
float
]:
...
@@ -356,6 +358,7 @@ class KittiMetric(BaseMetric):
...
@@ -356,6 +358,7 @@ class KittiMetric(BaseMetric):
scores
=
box_dict
[
'scores'
]
scores
=
box_dict
[
'scores'
]
box_preds_lidar
=
box_dict
[
'box3d_lidar'
]
box_preds_lidar
=
box_dict
[
'box3d_lidar'
]
label_preds
=
box_dict
[
'label_preds'
]
label_preds
=
box_dict
[
'label_preds'
]
pred_box_type_3d
=
box_dict
[
'pred_box_type_3d'
]
for
box
,
box_lidar
,
bbox
,
score
,
label
in
zip
(
for
box
,
box_lidar
,
bbox
,
score
,
label
in
zip
(
box_preds
,
box_preds_lidar
,
box_2d_preds
,
scores
,
box_preds
,
box_preds_lidar
,
box_2d_preds
,
scores
,
...
@@ -365,8 +368,12 @@ class KittiMetric(BaseMetric):
...
@@ -365,8 +368,12 @@ class KittiMetric(BaseMetric):
anno
[
'name'
].
append
(
class_names
[
int
(
label
)])
anno
[
'name'
].
append
(
class_names
[
int
(
label
)])
anno
[
'truncated'
].
append
(
0.0
)
anno
[
'truncated'
].
append
(
0.0
)
anno
[
'occluded'
].
append
(
0
)
anno
[
'occluded'
].
append
(
0
)
anno
[
'alpha'
].
append
(
if
pred_box_type_3d
==
CameraInstance3DBoxes
:
-
np
.
arctan2
(
-
box_lidar
[
1
],
box_lidar
[
0
])
+
box
[
6
])
anno
[
'alpha'
].
append
(
-
np
.
arctan2
(
box
[
0
],
box
[
2
])
+
box
[
6
])
elif
pred_box_type_3d
==
LiDARInstance3DBoxes
:
anno
[
'alpha'
].
append
(
-
np
.
arctan2
(
-
box_lidar
[
1
],
box_lidar
[
0
])
+
box
[
6
])
anno
[
'bbox'
].
append
(
bbox
)
anno
[
'bbox'
].
append
(
bbox
)
anno
[
'dimensions'
].
append
(
box
[
3
:
6
])
anno
[
'dimensions'
].
append
(
box
[
3
:
6
])
anno
[
'location'
].
append
(
box
[:
3
])
anno
[
'location'
].
append
(
box
[:
3
])
...
@@ -588,7 +595,13 @@ class KittiMetric(BaseMetric):
...
@@ -588,7 +595,13 @@ class KittiMetric(BaseMetric):
info
[
'images'
][
'CAM2'
][
'width'
])
info
[
'images'
][
'CAM2'
][
'width'
])
P2
=
box_preds
.
tensor
.
new_tensor
(
P2
)
P2
=
box_preds
.
tensor
.
new_tensor
(
P2
)
box_preds_camera
=
box_preds
.
convert_to
(
Box3DMode
.
CAM
,
lidar2cam
)
if
isinstance
(
box_preds
,
LiDARInstance3DBoxes
):
box_preds_camera
=
box_preds
.
convert_to
(
Box3DMode
.
CAM
,
lidar2cam
)
box_preds_lidar
=
box_preds
elif
isinstance
(
box_preds
,
CameraInstance3DBoxes
):
box_preds_camera
=
box_preds
box_preds_lidar
=
box_preds
.
convert_to
(
Box3DMode
.
LIDAR
,
np
.
linalg
.
inv
(
lidar2cam
))
box_corners
=
box_preds_camera
.
corners
box_corners
=
box_preds_camera
.
corners
box_corners_in_image
=
points_cam2img
(
box_corners
,
P2
)
box_corners_in_image
=
points_cam2img
(
box_corners
,
P2
)
...
@@ -602,23 +615,28 @@ class KittiMetric(BaseMetric):
...
@@ -602,23 +615,28 @@ class KittiMetric(BaseMetric):
valid_cam_inds
=
((
box_2d_preds
[:,
0
]
<
image_shape
[
1
])
&
valid_cam_inds
=
((
box_2d_preds
[:,
0
]
<
image_shape
[
1
])
&
(
box_2d_preds
[:,
1
]
<
image_shape
[
0
])
&
(
box_2d_preds
[:,
1
]
<
image_shape
[
0
])
&
(
box_2d_preds
[:,
2
]
>
0
)
&
(
box_2d_preds
[:,
3
]
>
0
))
(
box_2d_preds
[:,
2
]
>
0
)
&
(
box_2d_preds
[:,
3
]
>
0
))
# check box_preds
# check box_preds_lidar
limit_range
=
box_preds
.
tensor
.
new_tensor
(
self
.
pcd_limit_range
)
if
isinstance
(
box_preds
,
LiDARInstance3DBoxes
):
valid_pcd_inds
=
((
box_preds
.
center
>
limit_range
[:
3
])
&
limit_range
=
box_preds
.
tensor
.
new_tensor
(
self
.
pcd_limit_range
)
(
box_preds
.
center
<
limit_range
[
3
:]))
valid_pcd_inds
=
((
box_preds_lidar
.
center
>
limit_range
[:
3
])
&
valid_inds
=
valid_cam_inds
&
valid_pcd_inds
.
all
(
-
1
)
(
box_preds_lidar
.
center
<
limit_range
[
3
:]))
valid_inds
=
valid_cam_inds
&
valid_pcd_inds
.
all
(
-
1
)
else
:
valid_inds
=
valid_cam_inds
if
valid_inds
.
sum
()
>
0
:
if
valid_inds
.
sum
()
>
0
:
return
dict
(
return
dict
(
bbox
=
box_2d_preds
[
valid_inds
,
:].
numpy
(),
bbox
=
box_2d_preds
[
valid_inds
,
:].
numpy
(),
pred_box_type_3d
=
type
(
box_preds
),
box3d_camera
=
box_preds_camera
[
valid_inds
].
tensor
.
numpy
(),
box3d_camera
=
box_preds_camera
[
valid_inds
].
tensor
.
numpy
(),
box3d_lidar
=
box_preds
[
valid_inds
].
tensor
.
numpy
(),
box3d_lidar
=
box_preds
_lidar
[
valid_inds
].
tensor
.
numpy
(),
scores
=
scores
[
valid_inds
].
numpy
(),
scores
=
scores
[
valid_inds
].
numpy
(),
label_preds
=
labels
[
valid_inds
].
numpy
(),
label_preds
=
labels
[
valid_inds
].
numpy
(),
sample_idx
=
sample_idx
)
sample_idx
=
sample_idx
)
else
:
else
:
return
dict
(
return
dict
(
bbox
=
np
.
zeros
([
0
,
4
]),
bbox
=
np
.
zeros
([
0
,
4
]),
pred_box_type_3d
=
type
(
box_preds
),
box3d_camera
=
np
.
zeros
([
0
,
7
]),
box3d_camera
=
np
.
zeros
([
0
,
7
]),
box3d_lidar
=
np
.
zeros
([
0
,
7
]),
box3d_lidar
=
np
.
zeros
([
0
,
7
]),
scores
=
np
.
zeros
([
0
]),
scores
=
np
.
zeros
([
0
]),
...
...
tools/data_converter/update_infos_to_v2.py
View file @
9247e72c
...
@@ -401,14 +401,13 @@ def update_kitti_infos(pkl_path, out_dir):
...
@@ -401,14 +401,13 @@ def update_kitti_infos(pkl_path, out_dir):
loc
=
anns
[
'location'
][
instance_id
]
loc
=
anns
[
'location'
][
instance_id
]
dims
=
anns
[
'dimensions'
][
instance_id
]
dims
=
anns
[
'dimensions'
][
instance_id
]
rots
=
anns
[
'rotation_y'
][:,
None
][
instance_id
]
rots
=
anns
[
'rotation_y'
][:,
None
][
instance_id
]
gt_bboxes_3d
=
np
.
concatenate
([
loc
,
dims
,
gt_bboxes_3d
=
np
.
concatenate
([
loc
,
dims
,
rots
]).
tolist
()
rots
]).
astype
(
np
.
float32
).
tolist
()
empty_instance
[
'bbox_3d'
]
=
gt_bboxes_3d
empty_instance
[
'bbox_3d'
]
=
gt_bboxes_3d
empty_instance
[
'bbox_label_3d'
]
=
copy
.
deepcopy
(
empty_instance
[
'bbox_label_3d'
]
=
copy
.
deepcopy
(
empty_instance
[
'bbox_label'
])
empty_instance
[
'bbox_label'
])
empty_instance
[
'bbox'
]
=
anns
[
'bbox'
][
instance_id
].
tolist
()
empty_instance
[
'bbox'
]
=
anns
[
'bbox'
][
instance_id
].
tolist
()
empty_instance
[
'truncated'
]
=
int
(
empty_instance
[
'truncated'
]
=
anns
[
'truncated'
][
anns
[
'truncated'
][
instance_id
].
tolist
()
)
instance_id
].
tolist
()
empty_instance
[
'occluded'
]
=
anns
[
'occluded'
][
instance_id
].
tolist
()
empty_instance
[
'occluded'
]
=
anns
[
'occluded'
][
instance_id
].
tolist
()
empty_instance
[
'alpha'
]
=
anns
[
'alpha'
][
instance_id
].
tolist
()
empty_instance
[
'alpha'
]
=
anns
[
'alpha'
][
instance_id
].
tolist
()
empty_instance
[
'score'
]
=
anns
[
'score'
][
instance_id
].
tolist
()
empty_instance
[
'score'
]
=
anns
[
'score'
][
instance_id
].
tolist
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment