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
c8fa96f8
"git@developer.sourcefind.cn:OpenDAS/torch-cluster.git" did not exist on "fb3d8a818ece416ab20887a908b20a874b64f680"
Commit
c8fa96f8
authored
Apr 26, 2020
by
liyinhao
Browse files
change create sunrgbd and scannet related file based on comment
parent
24cde1eb
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
41 additions
and
80 deletions
+41
-80
tools/data_converter/scannet_converter.py
tools/data_converter/scannet_converter.py
+4
-8
tools/data_converter/scannet_data_utils.py
tools/data_converter/scannet_data_utils.py
+13
-29
tools/data_converter/sunrgbd_converter.py
tools/data_converter/sunrgbd_converter.py
+6
-8
tools/data_converter/sunrgbd_data_utils.py
tools/data_converter/sunrgbd_data_utils.py
+18
-35
No files found.
tools/data_converter/scannet_converter.py
View file @
c8fa96f8
...
@@ -14,17 +14,13 @@ def create_scannet_info_file(data_path, pkl_prefix='scannet', save_path=None):
...
@@ -14,17 +14,13 @@ def create_scannet_info_file(data_path, pkl_prefix='scannet', save_path=None):
assert
os
.
path
.
exists
(
save_path
)
assert
os
.
path
.
exists
(
save_path
)
train_filename
=
save_path
/
f
'
{
pkl_prefix
}
_infos_train.pkl'
train_filename
=
save_path
/
f
'
{
pkl_prefix
}
_infos_train.pkl'
val_filename
=
save_path
/
f
'
{
pkl_prefix
}
_infos_val.pkl'
val_filename
=
save_path
/
f
'
{
pkl_prefix
}
_infos_val.pkl'
dataset
=
ScannetObject
(
root_path
=
data_path
,
split
=
'train'
)
train_dataset
=
ScannetObject
(
root_path
=
data_path
,
split
=
'train'
)
train_split
,
val_split
=
'train'
,
'val'
val_dataset
=
ScannetObject
(
root_path
=
data_path
,
split
=
'val'
)
scannet_infos_train
=
train_dataset
.
get_scannet_infos
(
has_label
=
True
)
dataset
.
set_split
(
train_split
)
scannet_infos_train
=
dataset
.
get_scannet_infos
(
has_label
=
True
)
with
open
(
train_filename
,
'wb'
)
as
f
:
with
open
(
train_filename
,
'wb'
)
as
f
:
pickle
.
dump
(
scannet_infos_train
,
f
)
pickle
.
dump
(
scannet_infos_train
,
f
)
print
(
'Scannet info train file is saved to %s'
%
train_filename
)
print
(
'Scannet info train file is saved to %s'
%
train_filename
)
scannet_infos_val
=
val_dataset
.
get_scannet_infos
(
has_label
=
True
)
dataset
.
set_split
(
val_split
)
scannet_infos_val
=
dataset
.
get_scannet_infos
(
has_label
=
True
)
with
open
(
val_filename
,
'wb'
)
as
f
:
with
open
(
val_filename
,
'wb'
)
as
f
:
pickle
.
dump
(
scannet_infos_val
,
f
)
pickle
.
dump
(
scannet_infos_val
,
f
)
print
(
'Scannet info val file is saved to %s'
%
val_filename
)
print
(
'Scannet info val file is saved to %s'
%
val_filename
)
...
...
tools/data_converter/scannet_data_utils.py
View file @
c8fa96f8
...
@@ -10,32 +10,19 @@ class ScannetObject(object):
...
@@ -10,32 +10,19 @@ class ScannetObject(object):
self
.
root_dir
=
root_path
self
.
root_dir
=
root_path
self
.
split
=
split
self
.
split
=
split
self
.
split_dir
=
os
.
path
.
join
(
root_path
)
self
.
split_dir
=
os
.
path
.
join
(
root_path
)
self
.
type2class
=
{
self
.
classes
=
[
'cabinet'
:
0
,
'cabinet'
,
'bed'
,
'chair'
,
'sofa'
,
'table'
,
'door'
,
'window'
,
'bed'
:
1
,
'bookshelf'
,
'picture'
,
'counter'
,
'desk'
,
'curtain'
,
'chair'
:
2
,
'refrigerator'
,
'showercurtrain'
,
'toilet'
,
'sink'
,
'bathtub'
,
'sofa'
:
3
,
'garbagebin'
'table'
:
4
,
]
'door'
:
5
,
self
.
cat2label
=
{
cat
:
self
.
classes
.
index
(
cat
)
for
cat
in
self
.
classes
}
'window'
:
6
,
self
.
label2cat
=
{
self
.
cat2label
[
t
]:
t
for
t
in
self
.
cat2label
}
'bookshelf'
:
7
,
self
.
cat_ids
=
np
.
array
(
'picture'
:
8
,
'counter'
:
9
,
'desk'
:
10
,
'curtain'
:
11
,
'refrigerator'
:
12
,
'showercurtrain'
:
13
,
'toilet'
:
14
,
'sink'
:
15
,
'bathtub'
:
16
,
'garbagebin'
:
17
}
self
.
class2type
=
{
self
.
type2class
[
t
]:
t
for
t
in
self
.
type2class
}
self
.
nyu40ids
=
np
.
array
(
[
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
14
,
16
,
24
,
28
,
33
,
34
,
36
,
39
])
[
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
14
,
16
,
24
,
28
,
33
,
34
,
36
,
39
])
self
.
nyu40
id2class
=
{
self
.
cat_
id
s
2class
=
{
nyu40id
:
i
nyu40id
:
i
for
i
,
nyu40id
in
enumerate
(
list
(
self
.
nyu40
ids
))
for
i
,
nyu40id
in
enumerate
(
list
(
self
.
cat_
ids
))
}
}
assert
split
in
[
'train'
,
'val'
,
'test'
]
assert
split
in
[
'train'
,
'val'
,
'test'
]
split_dir
=
os
.
path
.
join
(
self
.
root_dir
,
'meta_data'
,
split_dir
=
os
.
path
.
join
(
self
.
root_dir
,
'meta_data'
,
...
@@ -46,9 +33,6 @@ class ScannetObject(object):
...
@@ -46,9 +33,6 @@ class ScannetObject(object):
def
__len__
(
self
):
def
__len__
(
self
):
return
len
(
self
.
sample_id_list
)
return
len
(
self
.
sample_id_list
)
def
set_split
(
self
,
split
):
self
.
__init__
(
self
.
root_dir
,
split
)
def
get_box_label
(
self
,
idx
):
def
get_box_label
(
self
,
idx
):
box_file
=
os
.
path
.
join
(
self
.
root_dir
,
'scannet_train_instance_data'
,
box_file
=
os
.
path
.
join
(
self
.
root_dir
,
'scannet_train_instance_data'
,
'%s_bbox.npy'
%
idx
)
'%s_bbox.npy'
%
idx
)
...
@@ -76,7 +60,7 @@ class ScannetObject(object):
...
@@ -76,7 +60,7 @@ class ScannetObject(object):
minmax_boxes3d
=
boxes_with_classes
[:,
:
-
1
]
# k, 6
minmax_boxes3d
=
boxes_with_classes
[:,
:
-
1
]
# k, 6
classes
=
boxes_with_classes
[:,
-
1
]
# k, 1
classes
=
boxes_with_classes
[:,
-
1
]
# k, 1
annotations
[
'name'
]
=
np
.
array
([
annotations
[
'name'
]
=
np
.
array
([
self
.
c
la
ss2type
[
self
.
nyu40
id2class
[
classes
[
i
]]]
self
.
la
bel2cat
[
self
.
cat_
id
s
2class
[
classes
[
i
]]]
for
i
in
range
(
annotations
[
'gt_num'
])
for
i
in
range
(
annotations
[
'gt_num'
])
])
])
annotations
[
'location'
]
=
minmax_boxes3d
[:,
:
3
]
annotations
[
'location'
]
=
minmax_boxes3d
[:,
:
3
]
...
@@ -85,7 +69,7 @@ class ScannetObject(object):
...
@@ -85,7 +69,7 @@ class ScannetObject(object):
annotations
[
'index'
]
=
np
.
arange
(
annotations
[
'index'
]
=
np
.
arange
(
annotations
[
'gt_num'
],
dtype
=
np
.
int32
)
annotations
[
'gt_num'
],
dtype
=
np
.
int32
)
annotations
[
'class'
]
=
np
.
array
([
annotations
[
'class'
]
=
np
.
array
([
self
.
nyu40
id2class
[
classes
[
i
]]
self
.
cat_
id
s
2class
[
classes
[
i
]]
for
i
in
range
(
annotations
[
'gt_num'
])
for
i
in
range
(
annotations
[
'gt_num'
])
])
])
info
[
'annos'
]
=
annotations
info
[
'annos'
]
=
annotations
...
...
tools/data_converter/sunrgbd_converter.py
View file @
c8fa96f8
...
@@ -17,17 +17,15 @@ def create_sunrgbd_info_file(data_path,
...
@@ -17,17 +17,15 @@ def create_sunrgbd_info_file(data_path,
assert
os
.
path
.
exists
(
save_path
)
assert
os
.
path
.
exists
(
save_path
)
train_filename
=
save_path
/
f
'
{
pkl_prefix
}
_infos_train.pkl'
train_filename
=
save_path
/
f
'
{
pkl_prefix
}
_infos_train.pkl'
val_filename
=
save_path
/
f
'
{
pkl_prefix
}
_infos_val.pkl'
val_filename
=
save_path
/
f
'
{
pkl_prefix
}
_infos_val.pkl'
dataset
=
SUNRGBDObject
(
root_path
=
data_path
,
split
=
'train'
,
use_v1
=
use_v1
)
train_
dataset
=
SUNRGBDObject
(
train_split
,
val_
split
=
'train'
,
'val'
root_path
=
data_path
,
split
=
'train'
,
use_v1
=
use_v1
)
val_dataset
=
SUNRGBDObject
(
dataset
.
set_split
(
train_split
)
root_path
=
data_path
,
split
=
'val'
,
use_v1
=
use_v1
)
sunrgbd_infos_train
=
dataset
.
get_sunrgbd_infos
(
has_label
=
True
)
sunrgbd_infos_train
=
train_
dataset
.
get_sunrgbd_infos
(
has_label
=
True
)
with
open
(
train_filename
,
'wb'
)
as
f
:
with
open
(
train_filename
,
'wb'
)
as
f
:
pickle
.
dump
(
sunrgbd_infos_train
,
f
)
pickle
.
dump
(
sunrgbd_infos_train
,
f
)
print
(
'Sunrgbd info train file is saved to %s'
%
train_filename
)
print
(
'Sunrgbd info train file is saved to %s'
%
train_filename
)
sunrgbd_infos_val
=
val_dataset
.
get_sunrgbd_infos
(
has_label
=
True
)
dataset
.
set_split
(
val_split
)
sunrgbd_infos_val
=
dataset
.
get_sunrgbd_infos
(
has_label
=
True
)
with
open
(
val_filename
,
'wb'
)
as
f
:
with
open
(
val_filename
,
'wb'
)
as
f
:
pickle
.
dump
(
sunrgbd_infos_val
,
f
)
pickle
.
dump
(
sunrgbd_infos_val
,
f
)
print
(
'Sunrgbd info val file is saved to %s'
%
val_filename
)
print
(
'Sunrgbd info val file is saved to %s'
%
val_filename
)
...
...
tools/data_converter/sunrgbd_data_utils.py
View file @
c8fa96f8
...
@@ -50,29 +50,14 @@ class SUNRGBDObject(object):
...
@@ -50,29 +50,14 @@ class SUNRGBDObject(object):
self
.
root_dir
=
root_path
self
.
root_dir
=
root_path
self
.
split
=
split
self
.
split
=
split
self
.
split_dir
=
os
.
path
.
join
(
root_path
)
self
.
split_dir
=
os
.
path
.
join
(
root_path
)
self
.
type2class
=
{
self
.
classes
=
[
'bed'
:
0
,
'bed'
,
'table'
,
'sofa'
,
'chair'
,
'toilet'
,
'desk'
,
'dresser'
,
'table'
:
1
,
'night_stand'
,
'bookshelf'
,
'bathtub'
'sofa'
:
2
,
]
'chair'
:
3
,
self
.
cat2label
=
{
cat
:
self
.
classes
.
index
(
cat
)
for
cat
in
self
.
classes
}
'toilet'
:
4
,
self
.
label2cat
=
{
'desk'
:
5
,
label
:
self
.
classes
[
label
]
'dresser'
:
6
,
for
label
in
len
(
self
.
classes
)
'night_stand'
:
7
,
'bookshelf'
:
8
,
'bathtub'
:
9
}
self
.
class2type
=
{
0
:
'bed'
,
1
:
'table'
,
2
:
'sofa'
,
3
:
'chair'
,
4
:
'toilet'
,
5
:
'desk'
,
6
:
'dresser'
,
7
:
'night_stand'
,
8
:
'bookshelf'
,
9
:
'bathtub'
}
}
assert
split
in
[
'train'
,
'val'
,
'test'
]
assert
split
in
[
'train'
,
'val'
,
'test'
]
split_dir
=
os
.
path
.
join
(
self
.
root_dir
,
'%s_data_idx.txt'
%
split
)
split_dir
=
os
.
path
.
join
(
self
.
root_dir
,
'%s_data_idx.txt'
%
split
)
...
@@ -91,9 +76,6 @@ class SUNRGBDObject(object):
...
@@ -91,9 +76,6 @@ class SUNRGBDObject(object):
def
__len__
(
self
):
def
__len__
(
self
):
return
len
(
self
.
sample_id_list
)
return
len
(
self
.
sample_id_list
)
def
set_split
(
self
,
split
):
self
.
__init__
(
self
.
root_dir
,
split
)
def
get_image
(
self
,
idx
):
def
get_image
(
self
,
idx
):
img_filename
=
os
.
path
.
join
(
self
.
image_dir
,
'%06d.jpg'
%
(
idx
))
img_filename
=
os
.
path
.
join
(
self
.
image_dir
,
'%06d.jpg'
%
(
idx
))
return
cv2
.
imread
(
img_filename
)
return
cv2
.
imread
(
img_filename
)
...
@@ -132,6 +114,7 @@ class SUNRGBDObject(object):
...
@@ -132,6 +114,7 @@ class SUNRGBDObject(object):
# convert depth to points
# convert depth to points
SAMPLE_NUM
=
50000
SAMPLE_NUM
=
50000
pc_upright_depth
=
self
.
get_depth
(
sample_idx
)
pc_upright_depth
=
self
.
get_depth
(
sample_idx
)
# TODO : sample points in loading process and test
pc_upright_depth_subsampled
=
random_sampling
(
pc_upright_depth_subsampled
=
random_sampling
(
pc_upright_depth
,
SAMPLE_NUM
)
pc_upright_depth
,
SAMPLE_NUM
)
np
.
savez_compressed
(
np
.
savez_compressed
(
...
@@ -159,41 +142,41 @@ class SUNRGBDObject(object):
...
@@ -159,41 +142,41 @@ class SUNRGBDObject(object):
annotations
=
{}
annotations
=
{}
annotations
[
'gt_num'
]
=
len
([
annotations
[
'gt_num'
]
=
len
([
obj
.
classname
for
obj
in
obj_list
obj
.
classname
for
obj
in
obj_list
if
obj
.
classname
in
self
.
type2class
.
keys
()
if
obj
.
classname
in
self
.
cat2label
.
keys
()
])
])
if
annotations
[
'gt_num'
]
!=
0
:
if
annotations
[
'gt_num'
]
!=
0
:
annotations
[
'name'
]
=
np
.
array
([
annotations
[
'name'
]
=
np
.
array
([
obj
.
classname
for
obj
in
obj_list
obj
.
classname
for
obj
in
obj_list
if
obj
.
classname
in
self
.
type2class
.
keys
()
if
obj
.
classname
in
self
.
cat2label
.
keys
()
])
])
annotations
[
'bbox'
]
=
np
.
concatenate
([
annotations
[
'bbox'
]
=
np
.
concatenate
([
obj
.
box2d
.
reshape
(
1
,
4
)
for
obj
in
obj_list
obj
.
box2d
.
reshape
(
1
,
4
)
for
obj
in
obj_list
if
obj
.
classname
in
self
.
type2class
.
keys
()
if
obj
.
classname
in
self
.
cat2label
.
keys
()
],
],
axis
=
0
)
axis
=
0
)
annotations
[
'location'
]
=
np
.
concatenate
([
annotations
[
'location'
]
=
np
.
concatenate
([
obj
.
centroid
.
reshape
(
1
,
3
)
for
obj
in
obj_list
obj
.
centroid
.
reshape
(
1
,
3
)
for
obj
in
obj_list
if
obj
.
classname
in
self
.
type2class
.
keys
()
if
obj
.
classname
in
self
.
cat2label
.
keys
()
],
],
axis
=
0
)
axis
=
0
)
annotations
[
'dimensions'
]
=
2
*
np
.
array
([
annotations
[
'dimensions'
]
=
2
*
np
.
array
([
[
obj
.
l
,
obj
.
h
,
obj
.
w
]
for
obj
in
obj_list
[
obj
.
l
,
obj
.
h
,
obj
.
w
]
for
obj
in
obj_list
if
obj
.
classname
in
self
.
type2class
.
keys
()
if
obj
.
classname
in
self
.
cat2label
.
keys
()
])
# lhw(depth) format
])
# lhw(depth) format
annotations
[
'rotation_y'
]
=
np
.
array
([
annotations
[
'rotation_y'
]
=
np
.
array
([
obj
.
heading_angle
for
obj
in
obj_list
obj
.
heading_angle
for
obj
in
obj_list
if
obj
.
classname
in
self
.
type2class
.
keys
()
if
obj
.
classname
in
self
.
cat2label
.
keys
()
])
])
annotations
[
'index'
]
=
np
.
arange
(
annotations
[
'index'
]
=
np
.
arange
(
len
(
obj_list
),
dtype
=
np
.
int32
)
len
(
obj_list
),
dtype
=
np
.
int32
)
annotations
[
'class'
]
=
np
.
array
([
annotations
[
'class'
]
=
np
.
array
([
self
.
type2class
[
obj
.
classname
]
for
obj
in
obj_list
self
.
cat2label
[
obj
.
classname
]
for
obj
in
obj_list
if
obj
.
classname
in
self
.
type2class
.
keys
()
if
obj
.
classname
in
self
.
cat2label
.
keys
()
])
])
annotations
[
'gt_boxes_upright_depth'
]
=
np
.
stack
(
annotations
[
'gt_boxes_upright_depth'
]
=
np
.
stack
(
[
[
obj
.
box3d
for
obj
in
obj_list
obj
.
box3d
for
obj
in
obj_list
if
obj
.
classname
in
self
.
type2class
.
keys
()
if
obj
.
classname
in
self
.
cat2label
.
keys
()
],
],
axis
=
0
)
# (K,8)
axis
=
0
)
# (K,8)
info
[
'annos'
]
=
annotations
info
[
'annos'
]
=
annotations
...
...
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