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
5a658d61
Unverified
Commit
5a658d61
authored
Feb 08, 2023
by
ZLTJohn
Committed by
GitHub
Feb 08, 2023
Browse files
[Feature]: Support waymo_info_test.pkl and ImageSets generating (#2180)
parent
aecc7a17
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
130 additions
and
90 deletions
+130
-90
tools/create_data.py
tools/create_data.py
+6
-0
tools/dataset_converters/kitti_data_utils.py
tools/dataset_converters/kitti_data_utils.py
+8
-8
tools/dataset_converters/update_infos_to_v2.py
tools/dataset_converters/update_infos_to_v2.py
+83
-78
tools/dataset_converters/waymo_converter.py
tools/dataset_converters/waymo_converter.py
+33
-4
No files found.
tools/create_data.py
View file @
5a658d61
...
@@ -199,6 +199,10 @@ def waymo_data_prep(root_path,
...
@@ -199,6 +199,10 @@ def waymo_data_prep(root_path,
test_mode
=
(
split
test_mode
=
(
split
in
[
'testing'
,
'testing_3d_camera_only_detection'
]))
in
[
'testing'
,
'testing_3d_camera_only_detection'
]))
converter
.
convert
()
converter
.
convert
()
from
tools.dataset_converters.waymo_converter
import
\
create_ImageSets_img_ids
create_ImageSets_img_ids
(
osp
.
join
(
out_dir
,
'kitti_format'
),
splits
)
# Generate waymo infos
# Generate waymo infos
out_dir
=
osp
.
join
(
out_dir
,
'kitti_format'
)
out_dir
=
osp
.
join
(
out_dir
,
'kitti_format'
)
kitti
.
create_waymo_info_file
(
kitti
.
create_waymo_info_file
(
...
@@ -206,9 +210,11 @@ def waymo_data_prep(root_path,
...
@@ -206,9 +210,11 @@ def waymo_data_prep(root_path,
info_train_path
=
osp
.
join
(
out_dir
,
f
'
{
info_prefix
}
_infos_train.pkl'
)
info_train_path
=
osp
.
join
(
out_dir
,
f
'
{
info_prefix
}
_infos_train.pkl'
)
info_val_path
=
osp
.
join
(
out_dir
,
f
'
{
info_prefix
}
_infos_val.pkl'
)
info_val_path
=
osp
.
join
(
out_dir
,
f
'
{
info_prefix
}
_infos_val.pkl'
)
info_trainval_path
=
osp
.
join
(
out_dir
,
f
'
{
info_prefix
}
_infos_trainval.pkl'
)
info_trainval_path
=
osp
.
join
(
out_dir
,
f
'
{
info_prefix
}
_infos_trainval.pkl'
)
test_path
=
osp
.
join
(
out_dir
,
f
'
{
info_prefix
}
_infos_test.pkl'
)
update_pkl_infos
(
'waymo'
,
out_dir
=
out_dir
,
pkl_path
=
info_train_path
)
update_pkl_infos
(
'waymo'
,
out_dir
=
out_dir
,
pkl_path
=
info_train_path
)
update_pkl_infos
(
'waymo'
,
out_dir
=
out_dir
,
pkl_path
=
info_val_path
)
update_pkl_infos
(
'waymo'
,
out_dir
=
out_dir
,
pkl_path
=
info_val_path
)
update_pkl_infos
(
'waymo'
,
out_dir
=
out_dir
,
pkl_path
=
info_trainval_path
)
update_pkl_infos
(
'waymo'
,
out_dir
=
out_dir
,
pkl_path
=
info_trainval_path
)
update_pkl_infos
(
'waymo'
,
out_dir
=
out_dir
,
pkl_path
=
test_path
)
GTDatabaseCreater
(
GTDatabaseCreater
(
'WaymoDataset'
,
'WaymoDataset'
,
out_dir
,
out_dir
,
...
...
tools/dataset_converters/kitti_data_utils.py
View file @
5a658d61
...
@@ -365,14 +365,14 @@ class WaymoInfoGatherer:
...
@@ -365,14 +365,14 @@ class WaymoInfoGatherer:
self
.
training
,
self
.
training
,
self
.
relative_path
,
self
.
relative_path
,
use_prefix_id
=
True
)
use_prefix_id
=
True
)
with
open
(
with
open
(
get_timestamp_path
(
get_timestamp_path
(
idx
,
idx
,
self
.
path
,
self
.
path
,
self
.
training
,
self
.
training
,
relative_path
=
False
,
relative_path
=
False
,
use_prefix_id
=
True
))
as
f
:
use_prefix_id
=
True
))
as
f
:
info
[
'timestamp'
]
=
np
.
int64
(
f
.
read
())
info
[
'timestamp'
]
=
np
.
int64
(
f
.
read
())
image_info
[
'image_path'
]
=
get_image_path
(
image_info
[
'image_path'
]
=
get_image_path
(
idx
,
idx
,
self
.
path
,
self
.
path
,
...
...
tools/dataset_converters/update_infos_to_v2.py
View file @
5a658d61
...
@@ -919,8 +919,9 @@ def update_waymo_infos(pkl_path, out_dir):
...
@@ -919,8 +919,9 @@ def update_waymo_infos(pkl_path, out_dir):
'point_cloud'
][
'num_features'
]
'point_cloud'
][
'num_features'
]
temp_data_info
[
'lidar_points'
][
'timestamp'
]
=
ori_info_dict
[
temp_data_info
[
'lidar_points'
][
'timestamp'
]
=
ori_info_dict
[
'timestamp'
]
'timestamp'
]
temp_data_info
[
'lidar_points'
][
'lidar_path'
]
=
Path
(
velo_path
=
ori_info_dict
[
'point_cloud'
].
get
(
'velodyne_path'
)
ori_info_dict
[
'point_cloud'
][
'velodyne_path'
]).
name
if
velo_path
is
not
None
:
temp_data_info
[
'lidar_points'
][
'lidar_path'
]
=
Path
(
velo_path
).
name
# TODO discuss the usage of Tr_velo_to_cam in lidar
# TODO discuss the usage of Tr_velo_to_cam in lidar
Trv2c
=
ori_info_dict
[
'calib'
][
'Tr_velo_to_cam'
].
astype
(
np
.
float32
)
Trv2c
=
ori_info_dict
[
'calib'
][
'Tr_velo_to_cam'
].
astype
(
np
.
float32
)
...
@@ -953,93 +954,97 @@ def update_waymo_infos(pkl_path, out_dir):
...
@@ -953,93 +954,97 @@ def update_waymo_infos(pkl_path, out_dir):
temp_data_info
[
'lidar_sweeps'
].
append
(
lidar_sweep
)
temp_data_info
[
'lidar_sweeps'
].
append
(
lidar_sweep
)
temp_data_info
[
'image_sweeps'
].
append
(
image_sweep
)
temp_data_info
[
'image_sweeps'
].
append
(
image_sweep
)
anns
=
ori_info_dict
[
'annos'
]
anns
=
ori_info_dict
.
get
(
'annos'
)
num_instances
=
len
(
anns
[
'name'
])
ignore_class_name
=
set
()
ignore_class_name
=
set
()
instance_list
=
[]
if
anns
is
not
None
:
for
instance_id
in
range
(
num_instances
):
num_instances
=
len
(
anns
[
'name'
])
empty_instance
=
get_empty_instance
()
empty_instance
[
'bbox'
]
=
anns
[
'bbox'
][
instance_id
].
tolist
()
if
anns
[
'name'
][
instance_id
]
in
METAINFO
[
'classes'
]:
instance_list
=
[]
empty_instance
[
'bbox_label'
]
=
METAINFO
[
'classes'
].
index
(
for
instance_id
in
range
(
num_instances
):
anns
[
'name'
][
instance_id
])
empty_instance
=
get_empty_instance
()
else
:
empty_instance
[
'bbox'
]
=
anns
[
'bbox'
][
instance_id
].
tolist
()
ignore_class_name
.
add
(
anns
[
'name'
][
instance_id
])
empty_instance
[
'bbox_label'
]
=
-
1
empty_instance
[
'bbox'
]
=
anns
[
'bbox'
][
instance_id
].
tolist
()
if
anns
[
'name'
][
instance_id
]
in
METAINFO
[
'classes'
]:
empty_instance
[
'bbox_label'
]
=
METAINFO
[
'classes'
].
index
(
anns
[
'name'
][
instance_id
])
else
:
ignore_class_name
.
add
(
anns
[
'name'
][
instance_id
])
empty_instance
[
'bbox_label'
]
=
-
1
loc
=
anns
[
'location'
][
instance_id
]
empty_instance
[
'bbox'
]
=
anns
[
'bbox'
][
instance_id
].
tolist
()
dims
=
anns
[
'dimensions'
][
instance_id
]
rots
=
anns
[
'rotation_y'
][:,
None
][
instance_id
]
loc
=
anns
[
'location'
][
instance_id
]
gt_bboxes_3d
=
np
.
concatenate
([
loc
,
dims
,
dims
=
anns
[
'dimensions'
][
instance_id
]
rots
]).
astype
(
np
.
float32
).
tolist
()
rots
=
anns
[
'rotation_y'
][:,
None
][
instance_id
]
empty_instance
[
'bbox_3d'
]
=
gt_bboxes_3d
gt_bboxes_3d
=
np
.
concatenate
([
loc
,
dims
,
rots
empty_instance
[
'bbox_label_3d'
]
=
copy
.
deepcopy
(
]).
astype
(
np
.
float32
).
tolist
()
empty_instance
[
'bbox_label'
])
empty_instance
[
'bbox_3d'
]
=
gt_bboxes_3d
empty_instance
[
'bbox'
]
=
anns
[
'bbox'
][
instance_id
].
tolist
()
empty_instance
[
'bbox_label_3d'
]
=
copy
.
deepcopy
(
empty_instance
[
'truncated'
]
=
int
(
empty_instance
[
'bbox_label'
])
anns
[
'truncated'
][
instance_id
].
tolist
())
empty_instance
[
'bbox'
]
=
anns
[
'bbox'
][
instance_id
].
tolist
()
empty_instance
[
'occluded'
]
=
anns
[
'occluded'
][
instance_id
].
tolist
()
empty_instance
[
'truncated'
]
=
int
(
empty_instance
[
'alpha'
]
=
anns
[
'alpha'
][
instance_id
].
tolist
()
anns
[
'truncated'
][
instance_id
].
tolist
())
empty_instance
[
'index'
]
=
anns
[
'index'
][
instance_id
].
tolist
()
empty_instance
[
'occluded'
]
=
anns
[
'occluded'
][
empty_instance
[
'group_id'
]
=
anns
[
'group_ids'
][
instance_id
].
tolist
(
instance_id
].
tolist
()
)
empty_instance
[
'alpha'
]
=
anns
[
'alpha'
][
instance_id
].
tolist
()
empty_instance
[
'difficulty'
]
=
anns
[
'difficulty'
][
empty_instance
[
'index'
]
=
anns
[
'index'
][
instance_id
].
tolist
()
instance_id
].
tolist
()
empty_instance
[
'group_id'
]
=
anns
[
'group_ids'
][
empty_instance
[
'num_lidar_pts'
]
=
anns
[
'num_points_in_gt'
][
instance_id
].
tolist
()
instance_id
].
tolist
()
empty_instance
[
'difficulty'
]
=
anns
[
'difficulty'
][
empty_instance
[
'camera_id'
]
=
anns
[
'camera_id'
][
instance_id
].
tolist
()
instance_id
].
tolist
()
empty_instance
[
'num_lidar_pts'
]
=
anns
[
'num_points_in_gt'
][
empty_instance
=
clear_instance_unused_keys
(
empty_instance
)
instance_id
].
tolist
()
instance_list
.
append
(
empty_instance
)
empty_instance
[
'camera_id'
]
=
anns
[
'camera_id'
][
temp_data_info
[
'instances'
]
=
instance_list
instance_id
].
tolist
()
empty_instance
=
clear_instance_unused_keys
(
empty_instance
)
instance_list
.
append
(
empty_instance
)
temp_data_info
[
'instances'
]
=
instance_list
# waymo provide the labels that sync with cam
# waymo provide the labels that sync with cam
anns
=
ori_info_dict
[
'cam_sync_annos'
]
anns
=
ori_info_dict
.
get
(
'cam_sync_annos'
)
num_instances
=
len
(
anns
[
'name'
])
ignore_class_name
=
set
()
ignore_class_name
=
set
()
instance_list
=
[]
if
anns
is
not
None
:
for
instance_id
in
range
(
num_instances
):
num_instances
=
len
(
anns
[
'name'
])
empty_instance
=
get_empty_instance
()
instance_list
=
[]
empty_instance
[
'bbox'
]
=
anns
[
'bbox'
][
instance_id
].
tolist
()
for
instance_id
in
range
(
num_instances
):
empty_instance
=
get_empty_instance
()
empty_instance
[
'bbox'
]
=
anns
[
'bbox'
][
instance_id
].
tolist
()
if
anns
[
'name'
][
instance_id
]
in
METAINFO
[
'classes'
]:
if
anns
[
'name'
][
instance_id
]
in
METAINFO
[
'classes'
]:
empty_instance
[
'bbox_label'
]
=
METAINFO
[
'classes'
].
index
(
empty_instance
[
'bbox_label'
]
=
METAINFO
[
'classes'
].
index
(
anns
[
'name'
][
instance_id
])
anns
[
'name'
][
instance_id
])
else
:
else
:
ignore_class_name
.
add
(
anns
[
'name'
][
instance_id
])
ignore_class_name
.
add
(
anns
[
'name'
][
instance_id
])
empty_instance
[
'bbox_label'
]
=
-
1
empty_instance
[
'bbox_label'
]
=
-
1
empty_instance
[
'bbox'
]
=
anns
[
'bbox'
][
instance_id
].
tolist
()
empty_instance
[
'bbox'
]
=
anns
[
'bbox'
][
instance_id
].
tolist
()
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
rots
]).
astype
(
np
.
float32
).
tolist
()
]).
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'
]
=
int
(
anns
[
'truncated'
][
instance_id
].
tolist
())
anns
[
'truncated'
][
instance_id
].
tolist
())
empty_instance
[
'occluded'
]
=
anns
[
'occluded'
][
instance_id
].
tolist
()
empty_instance
[
'occluded'
]
=
anns
[
'occluded'
][
empty_instance
[
'alpha'
]
=
anns
[
'alpha'
][
instance_id
].
tolist
()
instance_id
].
tolist
()
empty_instance
[
'index'
]
=
anns
[
'index'
][
instance_id
].
tolist
()
empty_instance
[
'alpha'
]
=
anns
[
'alpha'
][
instance_id
].
tolist
()
empty_instance
[
'group_id'
]
=
anns
[
'group_ids'
][
instance_id
].
tolist
(
empty_instance
[
'index'
]
=
anns
[
'index'
][
instance_id
].
tolist
()
)
empty_instance
[
'group_id'
]
=
anns
[
'group_ids'
][
empty_instance
[
'camera_id'
]
=
anns
[
'camera_id'
][
instance_id
].
tolist
()
instance_id
].
tolist
()
empty_instance
[
'camera_id'
]
=
anns
[
'camera_id'
][
empty_instance
=
clear_instance_unused_keys
(
empty_instance
)
instance_id
].
tolist
()
instance_list
.
append
(
empty_instance
)
empty_instance
=
clear_instance_unused_keys
(
empty_instance
)
temp_data_info
[
'cam_sync_instances'
]
=
instance_list
instance_list
.
append
(
empty_instance
)
temp_data_info
[
'cam_sync_instances'
]
=
instance_list
cam_instances
=
generate_waymo_camera_instances
(
cam_instances
=
generate_waymo_camera_instances
(
ori_info_dict
,
camera_types
)
ori_info_dict
,
camera_types
)
temp_data_info
[
'cam_instances'
]
=
cam_instances
temp_data_info
[
'cam_instances'
]
=
cam_instances
temp_data_info
,
_
=
clear_data_info_unused_keys
(
temp_data_info
)
temp_data_info
,
_
=
clear_data_info_unused_keys
(
temp_data_info
)
converted_list
.
append
(
temp_data_info
)
converted_list
.
append
(
temp_data_info
)
...
...
tools/dataset_converters/waymo_converter.py
View file @
5a658d61
...
@@ -9,8 +9,9 @@ except ImportError:
...
@@ -9,8 +9,9 @@ except ImportError:
raise
ImportError
(
'Please run "pip install waymo-open-dataset-tf-2-5-0" '
raise
ImportError
(
'Please run "pip install waymo-open-dataset-tf-2-5-0" '
'>1.4.5 to install the official devkit first.'
)
'>1.4.5 to install the official devkit first.'
)
import
os
from
glob
import
glob
from
glob
import
glob
from
os.path
import
join
from
os.path
import
exists
,
join
import
mmengine
import
mmengine
import
numpy
as
np
import
numpy
as
np
...
@@ -132,9 +133,7 @@ class Waymo2KITTI(object):
...
@@ -132,9 +133,7 @@ class Waymo2KITTI(object):
self
.
save_image
(
frame
,
file_idx
,
frame_idx
)
self
.
save_image
(
frame
,
file_idx
,
frame_idx
)
self
.
save_calib
(
frame
,
file_idx
,
frame_idx
)
self
.
save_calib
(
frame
,
file_idx
,
frame_idx
)
if
'testing_3d_camera_only_detection'
not
in
self
.
load_dir
:
self
.
save_lidar
(
frame
,
file_idx
,
frame_idx
)
# the camera only split doesn't contain lidar points.
self
.
save_lidar
(
frame
,
file_idx
,
frame_idx
)
self
.
save_pose
(
frame
,
file_idx
,
frame_idx
)
self
.
save_pose
(
frame
,
file_idx
,
frame_idx
)
self
.
save_timestamp
(
frame
,
file_idx
,
frame_idx
)
self
.
save_timestamp
(
frame
,
file_idx
,
frame_idx
)
...
@@ -230,6 +229,9 @@ class Waymo2KITTI(object):
...
@@ -230,6 +229,9 @@ class Waymo2KITTI(object):
range_images
,
camera_projections
,
seg_labels
,
range_image_top_pose
=
\
range_images
,
camera_projections
,
seg_labels
,
range_image_top_pose
=
\
parse_range_image_and_camera_projection
(
frame
)
parse_range_image_and_camera_projection
(
frame
)
if
range_image_top_pose
is
None
:
# the camera only split doesn't contain lidar points.
return
# First return
# First return
points_0
,
cp_points_0
,
intensity_0
,
elongation_0
,
mask_indices_0
=
\
points_0
,
cp_points_0
,
intensity_0
,
elongation_0
,
mask_indices_0
=
\
self
.
convert_range_image_to_point_cloud
(
self
.
convert_range_image_to_point_cloud
(
...
@@ -601,3 +603,30 @@ class Waymo2KITTI(object):
...
@@ -601,3 +603,30 @@ class Waymo2KITTI(object):
else
:
else
:
raise
ValueError
(
mat
.
shape
)
raise
ValueError
(
mat
.
shape
)
return
ret
return
ret
def
create_ImageSets_img_ids
(
root_dir
,
splits
):
save_dir
=
join
(
root_dir
,
'ImageSets/'
)
if
not
exists
(
save_dir
):
os
.
mkdir
(
save_dir
)
idx_all
=
[[]
for
i
in
splits
]
for
i
,
split
in
enumerate
(
splits
):
path
=
join
(
root_dir
,
splits
[
i
],
'calib'
)
if
not
exists
(
path
):
RawNames
=
[]
else
:
RawNames
=
os
.
listdir
(
path
)
for
name
in
RawNames
:
if
name
.
endswith
(
'.txt'
):
idx
=
name
.
replace
(
'.txt'
,
'
\n
'
)
idx_all
[
int
(
idx
[
0
])].
append
(
idx
)
idx_all
[
i
].
sort
()
open
(
save_dir
+
'train.txt'
,
'w'
).
writelines
(
idx_all
[
0
])
open
(
save_dir
+
'val.txt'
,
'w'
).
writelines
(
idx_all
[
1
])
open
(
save_dir
+
'trainval.txt'
,
'w'
).
writelines
(
idx_all
[
0
]
+
idx_all
[
1
])
open
(
save_dir
+
'test.txt'
,
'w'
).
writelines
(
idx_all
[
2
])
# open(save_dir+'test_cam_only.txt','w').writelines(idx_all[3])
print
(
'created txt files indicating what to collect in '
,
splits
)
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