edward2021 commited on
Commit
744c933
1 Parent(s): ce1fcfd

add inference files

Browse files
assets/meta/scannetv2-labels.combined.tsv ADDED
@@ -0,0 +1,608 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ id raw_category category count nyu40id eigen13id nyuClass nyu40class eigen13class ModelNet40 ModelNet10 ShapeNetCore55 synsetoffset wnsynsetid wnsynsetkey mpcat40 mpcat40index
2
+ 1 wall wall 8277 1 12 wall wall Wall n04546855 wall.n.01 wall 1
3
+ 2 chair chair 4646 5 4 chair chair Chair chair chair chair 3001627 n03001627 chair.n.01 chair 3
4
+ 22 books book 1678 23 2 book books Books n02870526 book.n.11 objects 39
5
+ 3 floor floor 1553 2 5 floor floor Floor n03365592 floor.n.01 floor 2
6
+ 5 door door 1483 8 12 door door Wall door n03221720 door.n.01 door 4
7
+ 1163 object object 1313 40 7 otherprop Objects objects 39
8
+ 16 window window 1209 9 13 window window Window n04587648 window.n.01 window 9
9
+ 4 table table 1170 7 10 table table Table table table table 4379243 n04379243 table.n.02 table 5
10
+ 56 trash can trash can 1090 39 6 garbage bin otherfurniture Furniture trash_bin 2747177 n02747177 ashcan.n.01 objects 39
11
+ 13 pillow pillow 937 18 7 pillow pillow Objects pillow 3938244 n03938244 pillow.n.01 cushion 8
12
+ 15 picture picture 862 11 8 picture picture Picture n03931044 picture.n.01 picture 6
13
+ 41 ceiling ceiling 806 22 3 ceiling ceiling Ceiling n02990373 ceiling.n.01 ceiling 17
14
+ 26 box box 775 29 7 box box Objects n02883344 box.n.01 objects 39
15
+ 161 doorframe doorframe 768 8 12 door door Wall door doorframe.n.01 door 4
16
+ 19 monitor monitor 765 40 7 monitor otherprop Objects monitor monitor tv or monitor 3211117 n03782190 monitor.n.04 objects 39
17
+ 7 cabinet cabinet 731 3 6 cabinet cabinet Furniture cabinet 2933112 n02933112 cabinet.n.01 cabinet 7
18
+ 9 desk desk 680 14 10 desk desk Table desk desk table 4379243 n03179701 desk.n.01 table 5
19
+ 8 shelf shelf 641 15 6 shelves shelves Furniture bookshelf bookshelf 2871439 n02871439 bookshelf.n.01 shelving 31
20
+ 10 office chair office chair 595 5 4 chair chair Chair chair chair chair 3001627 n04373704 swivel_chair.n.01 chair 3
21
+ 31 towel towel 570 27 7 towel towel Objects n04459362 towel.n.01 towel 20
22
+ 6 couch couch 502 6 9 sofa sofa Sofa sofa sofa sofa 4256520 n04256520 sofa.n.01 sofa 10
23
+ 14 sink sink 488 34 7 sink sink Objects sink n04223580 sink.n.01 sink 15
24
+ 48 backpack backpack 479 40 7 backpack otherprop Objects n02769748 backpack.n.01 objects 39
25
+ 28 lamp lamp 419 35 7 lamp lamp Objects lamp lamp 3636649 n03636649 lamp.n.02 lighting 28
26
+ 11 bed bed 370 4 1 bed bed Bed bed bed bed 2818832 n02818832 bed.n.01 bed 11
27
+ 18 bookshelf bookshelf 360 10 6 bookshelf bookshelf Furniture bookshelf bookshelf 2871439 n02871439 bookshelf.n.01 shelving 31
28
+ 71 mirror mirror 349 19 7 mirror mirror Objects n03773035 mirror.n.01 mirror 21
29
+ 21 curtain curtain 347 16 13 curtain curtain Window curtain n03151077 curtain.n.01 curtain 12
30
+ 40 plant plant 331 40 7 plant otherprop Objects plant n00017222 plant.n.02 plant 14
31
+ 52 whiteboard whiteboard 327 30 7 whiteboard whiteboard Objects n03211616 display_panel.n.01 board_panel 35
32
+ 96 radiator radiator 322 39 6 radiator otherfurniture Furniture n04041069 radiator.n.02 misc 40
33
+ 22 book book 318 23 2 book books Books n02870526 book.n.11 objects 39
34
+ 29 kitchen cabinet kitchen cabinet 310 3 6 cabinet cabinet Furniture n02933112 cabinet.n.01 cabinet 7
35
+ 49 toilet paper toilet paper 291 40 7 toilet paper otherprop Objects n15075141 toilet_tissue.n.01 objects 39
36
+ 29 kitchen cabinets kitchen cabinet 289 3 6 cabinet cabinet Furniture cabinet 2933112 n02933112 cabinet.n.01 cabinet 7
37
+ 23 armchair armchair 281 5 4 chair chair Chair chair chair chair 3001627 n02738535 armchair.n.01 chair 3
38
+ 63 shoes shoe 272 40 7 shoe otherprop Objects n04199027 shoe.n.01 clothes 38
39
+ 24 coffee table coffee table 258 7 10 coffee table table Table table table table 4379243 n03063968 coffee_table.n.01 table 5
40
+ 17 toilet toilet 256 33 7 toilet toilet Objects toilet toilet n04446276 toilet.n.01 toilet 18
41
+ 47 bag bag 252 37 7 bag bag Objects suitcase 2773838 n02773838 bag.n.06 objects 39
42
+ 32 clothes clothes 248 21 7 clothes clothes Objects n02728440 apparel.n.01 clothes 38
43
+ 46 keyboard keyboard 246 40 7 keyboard otherprop Objects keyboard computer keyboard 3085013 n03085013 computer_keyboard.n.01 objects 39
44
+ 65 bottle bottle 226 40 7 bottle otherprop Objects bottle bottle 2876657 n02876657 bottle.n.01 objects 39
45
+ 97 recycling bin recycling bin 225 39 6 garbage bin otherfurniture Furniture trash_bin 2747177 n02747177 ashcan.n.01 objects 39
46
+ 34 nightstand nightstand 224 32 6 night stand night stand Furniture night_stand night_stand n03015254 chest_of_drawers.n.01 chest_of_drawers 13
47
+ 38 stool stool 221 40 7 stool otherprop Objects stool n04326896 stool.n.01 stool 19
48
+ 33 tv tv 219 25 11 television television TV tv or monitor 3211117 n03211117 display.n.06 tv_monitor 22
49
+ 75 file cabinet file cabinet 217 3 6 cabinet cabinet Furniture cabinet 2933112 n02933112 cabinet.n.01 cabinet 7
50
+ 36 dresser dresser 213 17 6 dresser dresser Furniture dresser dresser n03015254 chest_of_drawers.n.01 chest_of_drawers 13
51
+ 64 computer tower computer tower 203 40 7 computer otherprop Objects n03082979 computer.n.01 objects 39
52
+ 32 clothing clothes 165 21 7 clothes clothes Objects n02728440 apparel.n.01 clothes 38
53
+ 101 telephone telephone 164 40 7 telephone otherprop Objects telephone 4401088 n04401088 telephone.n.01 objects 39
54
+ 130 cup cup 157 40 7 cup otherprop Objects cup cup or mug 3797390 n03797390 mug.n.04 objects 39
55
+ 27 refrigerator refrigerator 154 24 6 refridgerator refridgerator Furniture n04070727 refrigerator.n.01 appliances 37
56
+ 44 end table end table 147 7 10 table table Table table table table 4379243 n04379243 table.n.02 table 5
57
+ 131 jacket jacket 146 40 7 jacket otherprop Objects n03589791 jacket.n.01 clothes 38
58
+ 55 shower curtain shower curtain 144 28 7 shower curtain shower curtain Objects curtain n04209239 shower_curtain.n.01 curtain 12
59
+ 42 bathtub bathtub 144 36 7 bathtub bathtub Objects bathtub bathtub tub 2808440 n02808440 bathtub.n.01 bathtub 25
60
+ 59 microwave microwave 141 40 7 microwave otherprop Objects microwave 3761084 n03761084 microwave.n.02 appliances 37
61
+ 159 kitchen counter kitchen counter 140 12 6 counter counter Furniture table table table 4379243 n03116530 counter.n.01 counter 26
62
+ 74 sofa chair sofa chair 129 5 4 chair chair Chair chair chair chair 3001627 n03001627 chair.n.01 chair 3
63
+ 82 paper towel dispenser paper towel dispenser 129 40 7 paper towel dispenser otherprop Objects objects 39
64
+ 1164 bathroom vanity bathroom vanity 126 3 6 cabinet cabinet Furniture cabinet 2933112 n02933112 cabinet.n.01 table 5
65
+ 93 suitcase suitcase 118 40 7 luggage otherprop Objects n02773838 bag.n.06 objects 39
66
+ 77 laptop laptop 111 40 7 laptop otherprop Objects laptop laptop 3642806 n03642806 laptop.n.01 objects 39
67
+ 67 ottoman ottoman 111 39 6 ottoman otherfurniture Furniture stool n03380724 footstool.n.01 stool 19
68
+ 128 shower walls shower wall 109 1 12 wall wall Wall n04546855 wall.n.01 wall 1
69
+ 50 printer printer 106 40 7 printer otherprop Objects printer 4004475 n04004475 printer.n.03 appliances 37
70
+ 35 counter counter 104 12 6 counter counter Furniture table table table 4379243 n03116530 counter.n.01 counter 26
71
+ 69 board board 100 38 7 board otherstructure Objects board_panel 35
72
+ 100 soap dispenser soap dispenser 99 40 7 otherprop Objects n04254120 soap_dispenser.n.01 objects 39
73
+ 62 stove stove 95 38 7 stove otherstructure Objects stove 4330267 n04330267 stove.n.02 appliances 37
74
+ 105 light light 93 38 7 light otherstructure Objects n03665366 light.n.02 lighting 28
75
+ 1165 closet wall closet wall 90 1 12 wall wall Wall n04546855 wall.n.01 wall 1
76
+ 165 mini fridge mini fridge 87 24 6 refridgerator refridgerator Furniture n03273913 electric_refrigerator.n.01 appliances 37
77
+ 7 cabinets cabinet 79 3 6 cabinet cabinet Furniture cabinet 2933112 n02933112 cabinet.n.01 cabinet 7
78
+ 5 doors door 76 8 12 door door Wall door n03221720 door.n.01 door 4
79
+ 76 fan fan 75 40 7 fan otherprop Objects n03320046 fan.n.01 misc 40
80
+ 230 tissue box tissue box 73 40 7 tissue box otherprop Objects n02883344 box.n.01 objects 39
81
+ 54 blanket blanket 72 40 7 blanket otherprop Objects n02849154 blanket.n.01 objects 39
82
+ 125 bathroom stall bathroom stall 71 38 7 otherstructure Objects n02873839 booth.n.02 misc 40
83
+ 72 copier copier 70 40 7 otherprop Objects n03257586 duplicator.n.01 appliances 37
84
+ 68 bench bench 66 39 6 bench otherfurniture Furniture bench bench 2828884 n02828884 bench.n.01 seating 34
85
+ 145 bar bar 66 38 7 bar otherstructure Objects n02788689 bar.n.03 misc 40
86
+ 157 soap dish soap dish 65 40 7 soap dish otherprop Objects n04254009 soap_dish.n.01 objects 39
87
+ 1166 laundry hamper laundry hamper 65 40 7 laundry basket otherprop Objects objects 39
88
+ 132 storage bin storage bin 63 40 7 storage bin otherprop Objects objects 39
89
+ 1167 bathroom stall door bathroom stall door 62 8 12 door door Wall door n03221720 door.n.01 door 4
90
+ 232 light switch light switch 61 38 7 light switch otherstructure Objects n04372370 switch.n.01 misc 40
91
+ 134 coffee maker coffee maker 61 40 7 otherprop Objects n03063338 coffee_maker.n.01 appliances 37
92
+ 51 tv stand tv stand 61 39 6 tv stand otherfurniture Furniture tv_stand n03290653 entertainment_center.n.01 furniture 36
93
+ 250 decoration decoration 60 40 7 otherprop Objects n03169390 decoration.n.01 misc 40
94
+ 1168 ceiling light ceiling light 59 38 7 light otherstructure Objects n03665366 light.n.02 lighting 28
95
+ 342 range hood range hood 59 38 7 range hood otherstructure Objects range_hood n04053677 range_hood.n.01 misc 40
96
+ 89 blackboard blackboard 58 38 7 blackboard otherstructure Objects n02846511 blackboard.n.01 board_panel 35
97
+ 103 clock clock 58 40 7 clock otherprop Objects clock 3046257 n03046257 clock.n.01 objects 39
98
+ 99 wardrobe closet wardrobe 54 39 6 wardrobe otherfurniture Furniture wardrobe n04550184 wardrobe.n.01 furniture 36
99
+ 95 rail rail 53 38 7 railing otherstructure Objects n04047401 railing.n.01 railing 30
100
+ 154 bulletin board bulletin board 53 38 7 board otherstructure Objects n03211616 display_panel.n.01 board_panel 35
101
+ 140 mat mat 52 20 5 floor mat floor mat Floor n03727837 mat.n.01 floor 2
102
+ 1169 trash bin trash bin 52 39 6 garbage bin otherfurniture Furniture trash_bin 2747177 n02747177 ashcan.n.01 objects 39
103
+ 193 ledge ledge 51 38 7 otherstructure Objects n09337253 ledge.n.01 misc 40
104
+ 116 seat seat 49 39 6 furniture otherfurniture Furniture n04161981 seat.n.03 furniture 36
105
+ 202 mouse mouse 49 40 7 mouse otherprop Objects n03793489 mouse.n.04 objects 39
106
+ 73 basket basket 48 40 7 basket otherprop Objects basket 2801938 n02801938 basket.n.01 objects 39
107
+ 78 shower shower 48 38 7 otherstructure Objects n04208936 shower.n.01 shower 23
108
+ 1170 dumbbell dumbbell 48 40 7 otherprop Objects n03255030 dumbbell.n.01 objects 39
109
+ 79 paper paper 46 26 7 paper paper Objects n14974264 paper.n.01 objects 39
110
+ 80 person person 46 31 7 person person Objects person n05217688 person.n.02 misc 40
111
+ 141 windowsill windowsill 45 38 7 otherstructure Objects n04590263 windowsill.n.01 window 9
112
+ 57 closet closet 45 39 6 wardrobe otherfurniture Furniture wardrobe misc 40
113
+ 102 bucket bucket 45 40 7 bucket otherprop Objects n02909870 bucket.n.01 misc 40
114
+ 261 sign sign 44 40 7 sign otherprop Objects n04217882 signboard.n.01 objects 39
115
+ 118 speaker speaker 43 40 7 speaker otherprop Objects speaker 3691459 n03691459 loudspeaker.n.01 objects 39
116
+ 136 dishwasher dishwasher 43 38 7 dishwasher otherstructure Objects dishwasher 3207941 n03207941 dishwasher.n.01 appliances 37
117
+ 98 container container 43 40 7 container otherprop Objects n03094503 container.n.01 objects 39
118
+ 1171 stair rail stair rail 42 38 7 banister otherstructure Objects n02788148 bannister.n.02 railing 30
119
+ 170 shower curtain rod shower curtain rod 42 40 7 otherprop Objects curtain 12
120
+ 1172 tube tube 41 40 7 otherprop Objects misc 40
121
+ 1173 bathroom cabinet bathroom cabinet 39 3 6 cabinet cabinet Furniture cabinet 2933112 n02933112 cabinet.n.01 cabinet 7
122
+ 79 papers paper 39 26 7 paper paper Objects n14974264 paper.n.01 objects 39
123
+ 221 storage container storage container 39 40 7 container otherprop Objects objects 39
124
+ 570 paper bag paper bag 39 37 7 bag bag Objects n04122825 sack.n.01 objects 39
125
+ 138 paper towel roll paper towel roll 39 40 7 paper towel otherprop Objects n03887697 paper_towel.n.01 towel 20
126
+ 168 ball ball 39 40 7 ball otherprop Objects objects 39
127
+ 276 closet doors closet door 38 8 12 door door Wall door n03221720 door.n.01 door 4
128
+ 106 laundry basket laundry basket 37 40 7 laundry basket otherprop Objects basket 2801938 n03050864 clothes_hamper.n.01 objects 39
129
+ 214 cart cart 37 40 7 cart otherprop Objects n03484083 handcart.n.01 shelving 31
130
+ 276 closet door closet door 35 8 12 door door Wall door n03221720 door.n.01 door 4
131
+ 323 dish rack dish rack 35 40 7 dish rack otherprop Objects n03207630 dish_rack.n.01 objects 39
132
+ 58 stairs stairs 35 38 7 stairs otherstructure Objects n04298308 stairway.n.01 stairs 16
133
+ 86 blinds blinds 35 13 13 blinds blinds Window n02851099 blind.n.03 blinds 32
134
+ 2 stack of chairs chair 35 5 4 chair chair Chair chair chair chair 3001627 n03001627 chair.n.01 chair 3
135
+ 399 purse purse 34 40 7 purse otherprop Objects n02774152 bag.n.04 objects 39
136
+ 121 bicycle bicycle 33 40 7 bicycle otherprop Objects bicycle 2834778 n02834778 bicycle.n.01 objects 39
137
+ 185 tray tray 32 40 7 tray otherprop Objects n04476259 tray.n.01 objects 39
138
+ 300 plunger plunger 30 40 7 otherprop Objects n03970156 plunger.n.03 objects 39
139
+ 180 paper cutter paper cutter 30 40 7 paper cutter otherprop Objects n03886940 paper_cutter.n.01 objects 39
140
+ 163 toilet paper dispenser toilet paper dispenser 29 40 7 otherprop Objects objects 39
141
+ 26 boxes box 29 29 7 box box Objects n02883344 box.n.01 objects 39
142
+ 66 bin bin 28 40 7 bin otherprop Objects n02839910 bin.n.01 objects 39
143
+ 208 toilet seat cover dispenser toilet seat cover dispenser 28 40 7 otherprop Objects objects 39
144
+ 112 guitar guitar 28 40 7 guitar otherprop Objects guitar guitar 3467517 n03467517 guitar.n.01 objects 39
145
+ 540 mailboxes mailbox 28 29 7 box box Objects mailbox 3710193 n03710193 mailbox.n.01 misc 40
146
+ 395 handicap bar handicap bar 27 38 7 bar otherstructure Objects misc 40
147
+ 166 fire extinguisher fire extinguisher 27 40 7 fire extinguisher otherprop Objects n03345837 fire_extinguisher.n.01 misc 40
148
+ 122 ladder ladder 27 39 6 ladder otherfurniture Furniture stairs n03632277 ladder.n.01 stairs 16
149
+ 120 column column 26 38 7 column otherstructure Objects n03074380 column.n.06 column 24
150
+ 107 pipe pipe 25 40 7 pipe otherprop Objects n03944672 pipe.n.02 misc 40
151
+ 283 vacuum cleaner vacuum cleaner 25 40 7 otherprop Objects n04517823 vacuum.n.04 objects 39
152
+ 88 plate plate 24 40 7 plate otherprop Objects n03959485 plate.n.04 objects 39
153
+ 90 piano piano 24 39 6 piano otherfurniture Furniture piano piano 3928116 n03928116 piano.n.01 furniture 36
154
+ 177 water cooler water cooler 24 39 6 water cooler otherfurniture Furniture n04559166 water_cooler.n.01 misc 40
155
+ 1174 cd case cd case 24 40 7 otherprop Objects objects 39
156
+ 562 bowl bowl 24 40 7 bowl otherprop Objects bowl bowl 2880940 n02880940 bowl.n.03 objects 39
157
+ 1175 closet rod closet rod 24 40 7 otherprop Objects n04100174 rod.n.01 misc 40
158
+ 1156 bathroom counter bathroom counter 24 12 6 counter counter Furniture table table table 4379243 n03116530 counter.n.01 counter 26
159
+ 84 oven oven 23 38 7 oven otherstructure Objects n03862676 oven.n.01 appliances 37
160
+ 104 stand stand 23 39 6 stand otherfurniture Furniture table table table 4379243 n04301000 stand.n.04 table 5
161
+ 229 scale scale 23 40 7 scale otherprop Objects n04141975 scale.n.07 objects 39
162
+ 70 washing machine washing machine 23 39 6 washing machine otherfurniture Furniture washing_machine 4554684 n04554684 washer.n.03 appliances 37
163
+ 325 broom broom 22 40 7 broom otherprop Objects n02906734 broom.n.01 objects 39
164
+ 169 hat hat 22 40 7 hat otherprop Objects n03497657 hat.n.01 clothes 38
165
+ 128 shower wall shower wall 22 1 12 wall wall Wall n04208936 shower.n.01 wall 1
166
+ 331 guitar case guitar case 21 40 7 guitar case otherprop Objects objects 39
167
+ 87 rack rack 21 39 6 stand otherfurniture Furniture n04038440 rack.n.05 shelving 31
168
+ 488 water pitcher water pitcher 21 40 7 pitcher otherprop Objects n03950228 pitcher.n.02 objects 39
169
+ 776 laundry detergent laundry detergent 21 40 7 otherprop Objects objects 39
170
+ 370 hair dryer hair dryer 21 40 7 hair dryer otherprop Objects n03483316 hand_blower.n.01 objects 39
171
+ 191 pillar pillar 21 38 7 column otherstructure Objects n03073977 column.n.07 column 24
172
+ 748 divider divider 20 40 7 otherprop Objects wall 1
173
+ 242 power outlet power outlet 19 40 7 otherprop Objects misc 40
174
+ 45 dining table dining table 19 7 10 table table Table table table table 4379243 n04379243 table.n.02 table 5
175
+ 417 shower floor shower floor 19 2 5 floor floor Floor n04208936 shower.n.01 floor 2
176
+ 70 washing machines washing machine 19 39 6 washing machine otherfurniture Furniture washing_machine 4554684 n04554684 washer.n.03 appliances 37
177
+ 188 shower door shower door 19 8 12 door door Wall door n04208936 shower.n.01 door 4
178
+ 1176 coffee kettle coffee kettle 18 40 7 pot otherprop Objects n03612814 kettle.n.01 objects 39
179
+ 1177 wardrobe cabinet wardrobe 18 39 6 wardrobe otherfurniture Furniture wardrobe n04550184 wardrobe.n.01 furniture 36
180
+ 1178 structure structure 18 38 7 otherstructure Objects misc 40
181
+ 18 bookshelves bookshelf 17 10 6 bookshelf bookshelf Furniture bookshelf bookshelf 2871439 n02871439 bookshelf.n.01 shelving 31
182
+ 110 clothes dryer clothes dryer 17 39 6 otherfurniture Furniture n03251766 dryer.n.01 appliances 37
183
+ 148 toaster toaster 17 40 7 toaster otherprop Objects n04442312 toaster.n.02 appliances 37
184
+ 63 shoe shoe 17 40 7 shoe otherprop Objects n04199027 shoe.n.01 clothes 38
185
+ 155 ironing board ironing board 16 39 6 ironing board otherfurniture Furniture n03586090 ironing_board.n.01 objects 39
186
+ 572 alarm clock alarm clock 16 40 7 alarm clock otherprop Objects clock 3046257 n02694662 alarm_clock.n.01 objects 39
187
+ 1179 shower head shower head 15 38 7 otherstructure Objects shower 23
188
+ 28 lamp base lamp 15 35 7 lamp lamp Objects lamp lamp 3636649 n03636649 lamp.n.02 lighting 28
189
+ 392 water bottle water bottle 15 40 7 bottle otherprop Objects bottle bottle 2876657 n04557648 water_bottle.n.01 objects 39
190
+ 1180 keyboard piano keyboard piano 15 39 6 piano otherfurniture Furniture piano piano 3928116 n03928116 piano.n.01 furniture 36
191
+ 609 projector screen projector screen 15 38 7 projector screen otherstructure Objects misc 40
192
+ 1181 case of water bottles case of water bottles 15 40 7 otherprop Objects objects 39
193
+ 195 toaster oven toaster oven 14 40 7 toaster oven otherprop Objects n04442441 toaster_oven.n.01 appliances 37
194
+ 581 music stand music stand 14 39 6 music stand otherfurniture Furniture n03801760 music_stand.n.01 furniture 36
195
+ 58 staircase stairs 14 38 7 stairs otherstructure Objects n04298308 stairway.n.01 stairs 16
196
+ 1182 coat rack coat rack 14 40 7 otherprop Objects n03059103 coatrack.n.01 shelving 3
197
+ 1183 storage organizer storage organizer 14 40 7 otherprop Objects shelving 3
198
+ 139 machine machine 14 40 7 machine otherprop Objects n03699975 machine.n.01 appliances 37
199
+ 1184 folded chair folded chair 14 5 4 chair chair Chair chair chair chair 3001627 n03001627 chair.n.01 chair 3
200
+ 1185 fire alarm fire alarm 14 40 7 otherprop Objects n03343737 fire_alarm.n.02 misc 40
201
+ 156 fireplace fireplace 13 38 7 fireplace otherstructure Objects n03346455 fireplace.n.01 fireplace 27
202
+ 408 vent vent 13 40 7 otherprop Objects n04526241 vent.n.01 misc 40
203
+ 213 furniture furniture 13 39 6 furniture otherfurniture Furniture n03405725 furniture.n.01 furniture 36
204
+ 1186 power strip power strip 13 40 7 otherprop Objects objects 39
205
+ 1187 calendar calendar 13 40 7 otherprop Objects objects 39
206
+ 1188 poster poster 13 11 8 picture picture Picture n03931044 picture.n.01 picture 6
207
+ 115 toilet paper holder toilet paper holder 13 40 7 toilet paper holder otherprop Objects objects 39
208
+ 1189 potted plant potted plant 12 40 7 plant otherprop Objects plant n00017222 plant.n.02 plant 14
209
+ 304 stuffed animal stuffed animal 12 40 7 stuffed animal otherprop Objects n04399382 teddy.n.01 objects 39
210
+ 1190 luggage luggage 12 40 7 luggage otherprop Objects n02774630 baggage.n.01 objects 39
211
+ 21 curtains curtain 12 16 13 curtain curtain Window curtain n03151077 curtain.n.01 curtain 12
212
+ 312 headphones headphones 12 40 7 otherprop Objects n03261776 earphone.n.01 objects 39
213
+ 233 crate crate 12 39 6 crate otherfurniture Furniture n03127925 crate.n.01 objects 39
214
+ 286 candle candle 12 40 7 candle otherprop Objects lamp n02948072 candle.n.01 objects 39
215
+ 264 projector projector 12 40 7 projector otherprop Objects n04009552 projector.n.02 objects 39
216
+ 110 clothes dryers clothes dryer 12 39 6 otherfurniture Furniture n03251766 dryer.n.01 appliances 37
217
+ 1191 mattress mattress 12 4 1 bed bed Bed bed bed bed 2818832 n02818832 bed.n.01 bed 11
218
+ 356 dustpan dustpan 12 40 7 otherprop Objects n03259009 dustpan.n.02 objects 39
219
+ 25 drawer drawer 11 39 6 drawer otherfurniture Furniture n03233905 drawer.n.01 furniture 36
220
+ 750 rod rod 11 40 7 otherprop Objects pistol 3948459 n03427202 gat.n.01 misc 40
221
+ 269 globe globe 11 40 7 globe otherprop Objects objects 39
222
+ 307 footrest footrest 11 39 6 foot rest otherfurniture Furniture stool n03380724 footstool.n.01 stool 19
223
+ 410 piano bench piano bench 11 39 6 piano bench otherfurniture Furniture bench bench 2828884 n02828884 bench.n.01 seating 34
224
+ 730 breakfast bar breakfast bar 11 38 7 bar otherstructure Objects counter 26
225
+ 216 step stool step stool 11 40 7 step stool otherprop Objects stool n04315713 step_stool.n.01 stool 19
226
+ 1192 hand rail hand rail 11 38 7 railing otherstructure Objects railing 30
227
+ 119 vending machine vending machine 11 40 7 machine otherprop Objects n04525305 vending_machine.n.01 appliances 37
228
+ 682 ceiling fan ceiling fan 11 40 7 fan otherprop Objects n03320046 fan.n.01 misc 40
229
+ 434 swiffer swiffer 11 40 7 otherprop Objects objects 39
230
+ 126 foosball table foosball table 11 39 6 foosball table otherfurniture Furniture table table table 4379243 n04379243 table.n.02 table 5
231
+ 919 jar jar 11 40 7 jar otherprop Objects jar 3593526 n03593526 jar.n.01 objects 39
232
+ 85 footstool footstool 11 39 6 ottoman otherfurniture Furniture stool n03380724 footstool.n.01 stool 19
233
+ 1193 folded table folded table 10 7 10 table table Table table table table 4379243 n04379243 table.n.02 table 5
234
+ 108 round table round table 10 7 10 table table Table table table table 4379243 n04114554 round_table.n.02 table 5
235
+ 135 hamper hamper 10 40 7 basket otherprop Objects basket 2801938 n03482405 hamper.n.02 objects 39
236
+ 1194 poster tube poster tube 10 40 7 otherprop Objects objects 39
237
+ 432 case case 10 40 7 case otherprop Objects objects 39
238
+ 53 carpet carpet 10 40 7 rug otherprop Objects n04118021 rug.n.01 floor 2
239
+ 1195 thermostat thermostat 10 40 7 otherprop Objects n04422875 thermostat.n.01 misc 40
240
+ 111 coat coat 10 40 7 jacket otherprop Objects n03057021 coat.n.01 clothes 38
241
+ 305 water fountain water fountain 10 38 7 water fountain otherstructure Objects n03241335 drinking_fountain.n.01 misc 40
242
+ 1125 smoke detector smoke detector 10 40 7 otherprop Objects misc 40
243
+ 13 pillows pillow 9 18 7 pillow pillow Objects pillow 3938244 n03938244 pillow.n.01 cushion 8
244
+ 1196 flip flops flip flops 9 40 7 shoe otherprop Objects n04199027 shoe.n.01 clothes 38
245
+ 1197 cloth cloth 9 21 7 clothes clothes Objects n02728440 apparel.n.01 clothes 38
246
+ 1198 banner banner 9 40 7 otherprop Objects n02788021 banner.n.01 misc 40
247
+ 1199 clothes hanger clothes hanger 9 40 7 otherprop Objects n03057920 coat_hanger.n.01 objects 39
248
+ 1200 whiteboard eraser whiteboard eraser 9 40 7 otherprop Objects objects 39
249
+ 378 iron iron 9 40 7 otherprop Objects n03584829 iron.n.04 objects 39
250
+ 591 instrument case instrument case 9 40 7 case otherprop Objects objects 39
251
+ 49 toilet paper rolls toilet paper 9 40 7 toilet paper otherprop Objects n15075141 toilet_tissue.n.01 objects 39
252
+ 92 soap soap 9 40 7 soap otherprop Objects n04253437 soap.n.01 objects 39
253
+ 1098 block block 9 40 7 otherprop Objects misc 40
254
+ 291 wall hanging wall hanging 8 40 7 otherprop Objects n03491178 hanging.n.01 picture 6
255
+ 1063 kitchen island kitchen island 8 38 7 kitchen island otherstructure Objects n03620600 kitchen_island.n.01 counter 26
256
+ 107 pipes pipe 8 38 7 otherstructure Objects misc 40
257
+ 1135 toothbrush toothbrush 8 40 7 toothbrush otherprop Objects n04453156 toothbrush.n.01 objects 39
258
+ 189 shirt shirt 8 40 7 otherprop Objects n04197391 shirt.n.01 clothes 38
259
+ 245 cutting board cutting board 8 40 7 cutting board otherprop Objects n03025513 chopping_board.n.01 objects 39
260
+ 194 vase vase 8 40 7 vase otherprop Objects vase jar 3593526 n04522168 vase.n.01 objects 39
261
+ 1201 shower control valve shower control valve 8 38 7 otherstructure Objects n04208936 shower.n.01 shower 23
262
+ 386 exercise machine exercise machine 8 40 7 machine otherprop Objects gym_equipment 33
263
+ 1202 compost bin compost bin 8 39 6 garbage bin otherfurniture Furniture trash_bin 2747177 n02747177 ashcan.n.01 objects 39
264
+ 857 shorts shorts 8 40 7 shorts otherprop Objects clothes 38
265
+ 452 tire tire 8 40 7 otherprop Objects n04440749 tire.n.01 objects 39
266
+ 1203 teddy bear teddy bear 7 40 7 stuffed animal otherprop Objects n04399382 teddy.n.01 objects 39
267
+ 346 bathrobe bathrobe 7 40 7 otherprop Objects n02807616 bathrobe.n.01 clothes 38
268
+ 152 handrail handrail 7 38 7 railing otherstructure Objects n02788148 bannister.n.02 railing 30
269
+ 83 faucet faucet 7 40 7 faucet otherprop Objects faucet 3325088 n03325088 faucet.n.01 misc 40
270
+ 1204 pantry wall pantry wall 7 1 12 wall wall Wall n04546855 wall.n.01 wall 1
271
+ 726 thermos thermos 7 40 7 flask otherprop Objects bottle bottle 2876657 n04422727 thermos.n.01 objects 39
272
+ 61 rug rug 7 40 7 rug otherprop Objects n04118021 rug.n.01 floor 2
273
+ 39 couch cushions cushion 7 18 7 pillow pillow Objects n03151500 cushion.n.03 cushion 8
274
+ 1117 tripod tripod 7 39 6 stand otherfurniture Furniture n04485082 tripod.n.01 objects 39
275
+ 540 mailbox mailbox 7 29 7 box box Objects mailbox 3710193 n03710193 mailbox.n.01 misc 40
276
+ 1205 tupperware tupperware 7 40 7 otherprop Objects objects 39
277
+ 415 shoe rack shoe rack 7 40 7 shoe rack otherprop Objects shelving 31
278
+ 31 towels towel 6 27 7 towel towel Objects n04459362 towel.n.01 towel 20
279
+ 1206 beer bottles beer bottle 6 40 7 bottle otherprop Objects bottle bottle 2876657 n02876657 bottle.n.01 objects 39
280
+ 153 treadmill treadmill 6 39 6 treadmill otherfurniture Furniture n04477387 treadmill.n.01 gym_equipment 33
281
+ 1207 salt salt 6 40 7 otherprop Objects objects 39
282
+ 129 chest chest 6 39 6 chest otherfurniture Furniture dresser dresser chest_of_drawers 13
283
+ 220 dispenser dispenser 6 40 7 otherprop Objects n03210683 dispenser.n.01 objects 39
284
+ 1208 mirror doors mirror door 6 8 12 door door Wall door n03221720 door.n.01 door 4
285
+ 231 remote remote 6 40 7 otherprop Objects remote_control 4074963 n04074963 remote_control.n.01 objects 39
286
+ 1209 folded ladder folded ladder 6 39 6 ladder otherfurniture Furniture stairs n03632277 ladder.n.01 misc 40
287
+ 39 cushion cushion 6 18 7 pillow pillow Objects n03151500 cushion.n.03 cushion 8
288
+ 1210 carton carton 6 40 7 otherprop Objects objects 39
289
+ 117 step step 6 38 7 otherstructure Objects n04314914 step.n.04 misc 40
290
+ 822 drying rack drying rack 6 39 6 drying rack otherfurniture Furniture shelving 31
291
+ 238 slippers slipper 6 40 7 shoe otherprop Objects n04241394 slipper.n.01 clothes 38
292
+ 143 pool table pool table 6 39 6 pool table otherfurniture Furniture table table table 4379243 n03982430 pool_table.n.01 table 5
293
+ 1211 soda stream soda stream 6 40 7 otherprop Objects objects 39
294
+ 228 toilet brush toilet brush 6 40 7 toilet brush otherprop Objects objects 39
295
+ 494 loft bed loft bed 6 4 1 bed bed Bed bed bed bed 2818832 n02818832 bed.n.01 bed 11
296
+ 226 cooking pot cooking pot 6 40 7 pot otherprop Objects objects 39
297
+ 91 heater heater 6 39 6 heater otherfurniture Furniture n03508101 heater.n.01 misc 40
298
+ 1072 messenger bag messenger bag 6 37 7 bag bag Objects objects 39
299
+ 435 stapler stapler 6 40 7 stapler otherprop Objects n04303497 stapler.n.01 objects 39
300
+ 1165 closet walls closet wall 5 1 12 wall wall Wall n04546855 wall.n.01 wall 1
301
+ 345 scanner scanner 5 40 7 otherprop Objects appliances 37
302
+ 893 elliptical machine elliptical machine 5 40 7 machine otherprop Objects gym_equipment 33
303
+ 621 kettle kettle 5 40 7 pot otherprop Objects n03612814 kettle.n.01 objects 39
304
+ 1212 metronome metronome 5 40 7 otherprop Objects n03757604 metronome.n.01 objects 39
305
+ 297 dumbell dumbell 5 40 7 otherprop Objects objects 39
306
+ 1213 music book music book 5 23 2 book books Books n02870526 book.n.11 objects 39
307
+ 1214 rice cooker rice cooker 5 40 7 otherprop Objects objects 39
308
+ 1215 dart board dart board 5 38 7 board otherstructure Objects n03162940 dartboard.n.01 objects 39
309
+ 529 sewing machine sewing machine 5 40 7 sewing machine otherprop Objects n04179913 sewing_machine.n.01 objects 39
310
+ 1216 grab bar grab bar 5 38 7 railing otherstructure Objects railing 30
311
+ 1217 flowerpot flowerpot 5 40 7 vase otherprop Objects vase jar 3593526 n04522168 vase.n.01 objects 39
312
+ 1218 painting painting 5 11 8 picture picture Picture n03931044 picture.n.01 picture 6
313
+ 1219 railing railing 5 38 7 railing otherstructure Objects n04047401 railing.n.01 railing 30
314
+ 1220 stair stair 5 38 7 stairs otherstructure Objects stairs n04314914 step.n.04 stairs 16
315
+ 525 toolbox toolbox 5 39 6 chest otherfurniture Furniture n04452615 toolbox.n.01 objects 39
316
+ 204 nerf gun nerf gun 5 40 7 otherprop Objects objects 39
317
+ 693 binders binder 5 40 7 binder otherprop Objects objects 39
318
+ 179 desk lamp desk lamp 5 35 7 lamp lamp Objects lamp lamp 3636649 n03636649 lamp.n.02 lighting 28
319
+ 1221 quadcopter quadcopter 5 40 7 otherprop Objects objects 39
320
+ 1222 pitcher pitcher 5 40 7 pitcher otherprop Objects n03950228 pitcher.n.02 objects 39
321
+ 1223 hanging hanging 5 40 7 otherprop Objects misc 40
322
+ 1224 mail mail 5 40 7 otherprop Objects misc 40
323
+ 1225 closet ceiling closet ceiling 5 22 3 ceiling ceiling Ceiling n02990373 ceiling.n.01 ceiling 17
324
+ 1226 hoverboard hoverboard 5 40 7 otherprop Objects objects 39
325
+ 1227 beanbag chair beanbag chair 5 39 6 bean bag otherfurniture Furniture n02816656 beanbag.n.01 chair 3
326
+ 571 water heater water heater 5 40 7 water heater otherprop Objects n04560113 water_heater.n.01 misc 40
327
+ 1228 spray bottle spray bottle 5 40 7 bottle otherprop Objects bottle bottle 2876657 n02876657 bottle.n.01 objects 39
328
+ 556 rope rope 5 40 7 rope otherprop Objects n04108268 rope.n.01 objects 39
329
+ 280 plastic container plastic container 5 40 7 container otherprop Objects objects 39
330
+ 1229 soap bottle soap bottle 5 40 7 soap otherprop Objects objects 39
331
+ 1230 ikea bag ikea bag 4 37 7 bag bag Objects 2773838 n02773838 bag.n.06 objects 39
332
+ 1231 sleeping bag sleeping bag 4 40 7 otherprop Objects n04235860 sleeping_bag.n.01 objects 39
333
+ 1232 duffel bag duffel bag 4 37 7 bag bag Objects suitcase 2773838 n02773838 bag.n.06 objects 39
334
+ 746 frying pan frying pan 4 40 7 frying pan otherprop Objects n03400231 frying_pan.n.01 objects 39
335
+ 1233 oven mitt oven mitt 4 40 7 otherprop Objects objects 39
336
+ 1234 pot pot 4 40 7 pot otherprop Objects n04235860 sleeping_bag.n.01 objects 39
337
+ 144 hand dryer hand dryer 4 40 7 otherprop Objects objects 39
338
+ 282 dollhouse dollhouse 4 39 6 doll house otherfurniture Furniture n03219483 dollhouse.n.01 objects 39
339
+ 167 shampoo bottle shampoo bottle 4 40 7 bottle otherprop Objects bottle bottle 2876657 n02876657 bottle.n.01 objects 39
340
+ 1235 hair brush hair brush 4 40 7 otherprop Objects n02908217 brush.n.02 objects 39
341
+ 1236 tennis racket tennis racket 4 40 7 otherprop Objects n04409806 tennis_racket.n.01 objects 39
342
+ 1237 display case display case 4 40 7 case otherprop Objects objects 39
343
+ 234 ping pong table ping pong table 4 39 6 ping pong table otherfurniture Furniture table table table 4379243 n04379243 table.n.02 table 5
344
+ 563 boiler boiler 4 40 7 otherprop Objects misc 40
345
+ 1238 bag of coffee beans bag of coffee beans 4 37 7 bag bag Objects suitcase 2773838 n02773838 bag.n.06 objects 39
346
+ 1239 bananas banana 4 40 7 otherprop Objects n00021265 food.n.01 objects 39
347
+ 1240 carseat carseat 4 40 7 otherprop Objects misc 40
348
+ 366 helmet helmet 4 40 7 otherprop Objects helmet 3513137 n03513137 helmet.n.02 clothes 38
349
+ 816 umbrella umbrella 4 40 7 umbrella otherprop Objects n04507155 umbrella.n.01 objects 39
350
+ 1241 coffee box coffee box 4 40 7 otherprop Objects objects 39
351
+ 719 envelope envelope 4 40 7 envelope otherprop Objects n03291819 envelope.n.01 objects 39
352
+ 284 wet floor sign wet floor sign 4 40 7 sign otherprop Objects misc 40
353
+ 1242 clothing rack clothing rack 4 39 6 stand otherfurniture Furniture n04038440 rack.n.05 shelving 31
354
+ 247 controller controller 4 40 7 otherprop Objects n03096960 control.n.09 objects 39
355
+ 1243 bath walls bathroom wall 4 1 12 wall wall Wall n04546855 wall.n.01 wall 1
356
+ 1244 podium podium 4 39 6 otherfurniture Furniture n03159640 dais.n.01 furniture 36
357
+ 1245 storage box storage box 4 29 7 box box Objects n02883344 box.n.01 objects 39
358
+ 1246 dolly dolly 4 40 7 otherprop Objects misc 40
359
+ 1247 shampoo shampoo 3 40 7 otherprop Objects n04183516 shampoo.n.01 objects 39
360
+ 592 paper tray paper tray 3 40 7 paper tray otherprop Objects objects 39
361
+ 385 cabinet door cabinet door 3 8 12 door door Wall door door 4
362
+ 1248 changing station changing station 3 40 7 otherprop Objects misc 40
363
+ 1249 poster printer poster printer 3 40 7 printer otherprop Objects printer 4004475 n04004475 printer.n.03 appliances 37
364
+ 133 screen screen 3 40 7 otherprop Objects n03151077 curtain.n.01 curtain 12
365
+ 301 soap bar soap bar 3 38 7 bar otherstructure Objects objects 39
366
+ 1250 crutches crutches 3 40 7 otherprop Objects n03141823 crutch.n.01 objects 39
367
+ 379 studio light studio light 3 38 7 light otherstructure Objects lighting 28
368
+ 130 stack of cups cup 3 40 7 cup otherprop Objects cup cup or mug 3797390 n03797390 mug.n.04 objects 39
369
+ 1251 toilet flush button toilet flush button 3 40 7 otherprop Objects objects 39
370
+ 450 trunk trunk 3 40 7 otherprop Objects misc 40
371
+ 1252 grocery bag grocery bag 3 37 7 bag bag Objects suitcase 2773838 n03461288 grocery_bag.n.01 objects 39
372
+ 316 plastic bin plastic bin 3 40 7 bin otherprop Objects objects 39
373
+ 1253 pizza box pizza box 3 29 7 box box Objects objects 39
374
+ 385 cabinet doors cabinet door 3 3 6 cabinet cabinet Furniture cabinet 2933112 n02933112 cabinet.n.01 door 4
375
+ 1254 legs legs 3 31 7 person person Objects person n05217688 person.n.02 misc 40
376
+ 461 car car 3 40 7 car otherprop Objects car car 2958343 n02958343 car.n.01 misc 40
377
+ 1255 shaving cream shaving cream 3 40 7 otherprop Objects n04186051 shaving_cream.n.01 objects 39
378
+ 1256 luggage stand luggage stand 3 39 6 stand otherfurniture Furniture n04038440 rack.n.05 shelving 31
379
+ 599 shredder shredder 3 40 7 otherprop Objects n04210120 shredder.n.01 objects 39
380
+ 281 statue statue 3 40 7 sculpture otherprop Objects n04306847 statue.n.01 misc 40
381
+ 1257 urinal urinal 3 33 7 toilet toilet Objects toilet toilet n04515991 urinal.n.01 toilet 18
382
+ 1258 hose hose 3 40 7 otherprop Objects n03539875 hose.n.03 misc 40
383
+ 1259 bike pump bike pump 3 40 7 otherprop Objects objects 39
384
+ 319 coatrack coatrack 3 40 7 otherprop Objects n03059103 coatrack.n.01 shelving 31
385
+ 1260 bear bear 3 40 7 otherprop Objects objects 39
386
+ 28 wall lamp lamp 3 35 7 lamp lamp Objects lamp lamp 3636649 n03636649 lamp.n.02 lighting 28
387
+ 1261 humidifier humidifier 3 40 7 otherprop Objects objects 39
388
+ 546 toothpaste toothpaste 3 40 7 toothpaste otherprop Objects objects 39
389
+ 1262 mouthwash bottle mouthwash bottle 3 40 7 bottle otherprop Objects bottle bottle 2876657 n02876657 bottle.n.01 objects 39
390
+ 1263 poster cutter poster cutter 3 40 7 otherprop Objects objects 39
391
+ 1264 golf bag golf bag 3 37 7 bag bag Objects suitcase 2773838 n03445617 golf_bag.n.01 objects 39
392
+ 1265 food container food container 3 40 7 container otherprop Objects n03094503 container.n.01 objects 39
393
+ 1266 camera camera 3 40 7 otherprop Objects objects 39
394
+ 28 table lamp lamp 3 35 7 lamp lamp Objects lamp lamp 3636649 n04380533 table_lamp.n.01 lighting 28
395
+ 1267 yoga mat yoga mat 3 20 5 floor mat floor mat Floor n03727837 mat.n.01 floor 2
396
+ 1268 card card 3 40 7 otherprop Objects objects 39
397
+ 1269 mug mug 3 40 7 cup otherprop Objects cup cup or mug 3797390 n03797390 mug.n.04 objects 39
398
+ 188 shower doors shower door 3 38 7 otherstructure Objects n04208936 shower.n.01 door 4
399
+ 689 cardboard cardboard 3 40 7 otherprop Objects objects 39
400
+ 1270 rack stand rack stand 3 39 6 stand otherfurniture Furniture n04038440 rack.n.05 shelving 31
401
+ 1271 boxes of paper boxes of paper 3 29 7 box box Objects n02883344 box.n.01 objects 39
402
+ 1272 flag flag 3 40 7 otherprop Objects misc 40
403
+ 354 futon futon 3 39 6 mattress otherfurniture Furniture n03408444 futon.n.01 sofa 10
404
+ 339 magazine magazine 3 40 7 magazine otherprop Objects n06595351 magazine.n.01 objects 39
405
+ 1009 exit sign exit sign 3 40 7 exit sign otherprop Objects misc 40
406
+ 1273 rolled poster rolled poster 3 40 7 otherprop Objects objects 39
407
+ 1274 wheel wheel 3 40 7 otherprop Objects objects 39
408
+ 15 pictures picture 3 11 8 picture picture Picture n03931044 picture.n.01 picture 6
409
+ 1275 blackboard eraser blackboard eraser 3 40 7 eraser otherprop Objects n03294833 eraser.n.01 objects 39
410
+ 361 organizer organizer 3 40 7 otherprop Objects n03918737 personal_digital_assistant.n.01 objects 39
411
+ 1276 doll doll 3 40 7 toy otherprop Objects n03219135 doll.n.01 objects 39
412
+ 326 book rack book rack 3 39 6 bookrack otherfurniture Furniture objects 39
413
+ 1277 laundry bag laundry bag 3 40 7 laundry basket otherprop Objects basket 2801938 n03050864 clothes_hamper.n.01 objects 39
414
+ 1278 sponge sponge 3 40 7 otherprop Objects n01906749 sponge.n.04 objects 39
415
+ 116 seating seat 3 39 6 furniture otherfurniture Furniture n04161981 seat.n.03 furniture 36
416
+ 1184 folded chairs folded chair 2 5 4 chair chair Chair chair chair chair 3001627 n03001627 chair.n.01 chair 3
417
+ 1279 lotion bottle lotion bottle 2 40 7 bottle otherprop Objects bottle bottle 2876657 n02876657 bottle.n.01 objects 39
418
+ 212 can can 2 40 7 can otherprop Objects can 2946921 n02946921 can.n.01 objects 39
419
+ 1280 lunch box lunch box 2 40 7 otherprop Objects objects 39
420
+ 1281 food display food display 2 40 7 otherprop Objects misc 40
421
+ 794 storage shelf storage shelf 2 40 7 otherprop Objects shelving 31
422
+ 1282 sliding wood door sliding wood door 2 40 7 otherprop Objects door 4
423
+ 955 pants pants 2 40 7 otherprop Objects n04489008 trouser.n.01 clothes 38
424
+ 387 wood wood 2 40 7 otherprop Objects misc 40
425
+ 69 boards board 2 38 7 board otherstructure Objects board_panel 35
426
+ 65 bottles bottle 2 40 7 bottle otherprop Objects bottle bottle 2876657 n02876657 bottle.n.01 objects 39
427
+ 523 washcloth washcloth 2 40 7 otherprop Objects n04554523 washcloth.n.01 towel 20
428
+ 389 workbench workbench 2 39 6 bench otherfurniture Furniture bench table 4379243 n04600486 workbench.n.01 table 5
429
+ 29 open kitchen cabinet kitchen cabinet 2 3 6 cabinet cabinet Furniture n02933112 cabinet.n.01 cabinet 7
430
+ 1283 organizer shelf organizer shelf 2 15 6 shelves shelves Furniture bookshelf bookshelf 2871439 n02871439 bookshelf.n.01 shelving 31
431
+ 146 frame frame 2 38 7 otherstructure Objects misc 40
432
+ 130 cups cup 2 40 7 cup otherprop Objects cup cup or mug 3797390 n03797390 mug.n.04 objects 39
433
+ 372 exercise ball exercise ball 2 40 7 ball otherprop Objects n04285146 sports_equipment.n.01 gym_equipment 33
434
+ 289 easel easel 2 39 6 stand otherfurniture Furniture n03262809 easel.n.01 furniture 36
435
+ 440 garbage bag garbage bag 2 37 7 bag bag Objects suitcase 2773838 n02773838 bag.n.06 objects 39
436
+ 321 roomba roomba 2 40 7 otherprop Objects objects 39
437
+ 976 garage door garage door 2 38 7 garage door otherstructure Objects door door 4
438
+ 1256 luggage rack luggage stand 2 39 6 stand otherfurniture Furniture n04038440 shelving 31
439
+ 1284 bike lock bike lock 2 40 7 otherprop Objects objects 39
440
+ 1285 briefcase briefcase 2 40 7 otherprop Objects n02900705 briefcase.n.01 objects 39
441
+ 357 hand towel hand towel 2 27 7 towel towel Objects n03490006 hand_towel.n.01 towel 20
442
+ 1286 bath products bath product 2 40 7 otherprop Objects objects 39
443
+ 1287 star star 2 40 7 otherprop Objects n09444783 star.n.03 misc 40
444
+ 365 map map 2 40 7 map otherprop Objects n03720163 map.n.01 misc 40
445
+ 1288 coffee bean bag coffee bean bag 2 37 7 bag bag Objects suitcase 2773838 n02773838 bag.n.06 objects 39
446
+ 81 headboard headboard 2 39 6 headboard otherfurniture Furniture n03502200 headboard.n.01 bed 11
447
+ 1289 ipad ipad 2 40 7 otherprop Objects objects 39
448
+ 1290 display rack display rack 2 39 6 stand otherfurniture Furniture n04038440 rack.n.05 shelving 31
449
+ 948 traffic cone traffic cone 2 40 7 cone otherprop Objects cone objects 39
450
+ 174 toiletry toiletry 2 40 7 otherprop Objects n04447443 toiletry.n.01 objects 39
451
+ 1028 canopy canopy 2 40 7 otherprop Objects misc 40
452
+ 1291 massage chair massage chair 2 5 4 chair chair Chair chair chair chair 3001627 n03001627 chair.n.01 chair 3
453
+ 1292 paper organizer paper organizer 2 40 7 otherprop Objects objects 39
454
+ 1005 barricade barricade 2 40 7 otherprop Objects misc 40
455
+ 235 platform platform 2 38 7 otherstructure Objects misc 40
456
+ 1293 cap cap 2 40 7 hat otherprop Objects n03497657 hat.n.01 clothes 38
457
+ 1294 dumbbell plates dumbbell plates 2 40 7 otherprop Objects objects 39
458
+ 1295 elevator elevator 2 38 7 otherstructure Objects misc 40
459
+ 1296 cooking pan cooking pan 2 40 7 pan otherprop Objects n03880531 pan.n.01 objects 39
460
+ 1297 trash bag trash bag 2 37 7 bag bag Objects objects 39
461
+ 1298 santa santa 2 40 7 otherprop Objects misc 40
462
+ 1299 jewelry box jewelry box 2 29 7 box box Objects n02883344 box.n.01 objects 39
463
+ 1300 boat boat 2 40 7 otherprop Objects misc 40
464
+ 1301 sock sock 2 21 7 clothes clothes Objects n04254777 sock.n.01 clothes 38
465
+ 1051 kinect kinect 2 40 7 kinect otherprop Objects objects 39
466
+ 566 crib crib 2 39 6 crib otherfurniture Furniture furniture 36
467
+ 1302 plastic storage bin plastic storage bin 2 40 7 container otherprop Objects n03094503 container.n.01 objects 39
468
+ 1062 cooler cooler 2 24 6 refridgerator refridgerator Furniture n03102654 cooler.n.01 appliances 37
469
+ 1303 kitchen apron kitchen apron 2 21 7 clothes clothes Objects n02728440 apparel.n.01 clothes 38
470
+ 1304 dishwashing soap bottle dishwashing soap bottle 2 40 7 bottle otherprop Objects bottle bottle 2876657 n02876657 bottle.n.01 objects 39
471
+ 1305 xbox controller xbox controller 2 40 7 otherprop Objects objects 39
472
+ 1306 banana holder banana holder 2 40 7 otherprop Objects objects 39
473
+ 298 ping pong paddle ping pong paddle 2 40 7 otherprop Objects table 5
474
+ 1307 airplane airplane 2 40 7 otherprop Objects misc 40
475
+ 1308 conditioner bottle conditioner bottle 2 40 7 bottle otherprop Objects bottle bottle 2876657 n02876657 bottle.n.01 objects 39
476
+ 1309 tea kettle tea kettle 2 40 7 tea kettle otherprop Objects n04397768 teakettle.n.01 objects 39
477
+ 43 bedframe bedframe 2 39 6 otherfurniture Furniture n02822579 bedstead.n.01 bed 11
478
+ 1310 wood beam wood beam 2 38 7 otherstructure Objects beam 29
479
+ 593 toilet paper package toilet paper package 2 40 7 otherprop Objects objects 39
480
+ 1311 wall mounted coat rack wall mounted coat rack 2 40 7 otherprop Objects n03059103 coatrack.n.01 shelving 31
481
+ 1312 film light film light 2 40 7 otherprop Objects lighting 28
482
+ 749 ceiling lamp ceiling lamp 1 35 7 lamp lamp Objects lamp lamp 3636649 n03636649 lamp.n.02 lighting 28
483
+ 623 chain chain 1 40 7 otherprop Objects chair 3
484
+ 1313 sofa sofa 1 6 9 sofa sofa Sofa sofa sofa sofa 4256520 n04256520 sofa.n.01 sofa 10
485
+ 99 closet wardrobe wardrobe 1 39 6 wardrobe otherfurniture Furniture wardrobe n04550184 wardrobe.n.01 furniture 36
486
+ 265 sweater sweater 1 40 7 otherprop Objects n04370048 sweater.n.01 clothes 38
487
+ 1314 kitchen mixer kitchen mixer 1 40 7 otherprop Objects appliances 37
488
+ 99 wardrobe wardrobe 1 39 6 wardrobe otherfurniture Furniture wardrobe n04550184 wardrobe.n.01 furniture 36
489
+ 1315 water softener water softener 1 40 7 otherprop Objects misc 40
490
+ 448 banister banister 1 38 7 banister otherstructure Objects n02788148 bannister.n.02 railing 30
491
+ 257 trolley trolley 1 40 7 trolley otherprop Objects n04335435 streetcar.n.01 misc 40
492
+ 1316 pantry shelf pantry shelf 1 15 6 shelves shelves Furniture bookshelf bookshelf 2871439 n02871439 bookshelf.n.01 shelving 31
493
+ 786 sofa bed sofa bed 1 4 1 bed bed Bed bed bed bed 2818832 n02818832 bed.n.01 bed 11
494
+ 801 loofa loofa 1 40 7 otherprop Objects objects 39
495
+ 972 shower faucet handle shower faucet handle 1 40 7 handle otherprop Objects shower 23
496
+ 1317 toy piano toy piano 1 40 7 toy otherprop Objects n03964744 plaything.n.01 objects 39
497
+ 1318 fish fish 1 40 7 otherprop Objects n02512053 fish.n.01 objects 39
498
+ 75 file cabinets file cabinet 1 3 6 cabinet cabinet Furniture cabinet 2933112 n03337140 file.n.03 cabinet 7
499
+ 657 cat litter box cat litter box 1 29 7 box box Objects objects 39
500
+ 561 electric panel electric panel 1 40 7 otherprop Objects misc 40
501
+ 93 suitcases suitcase 1 40 7 luggage otherprop Objects n02774630 baggage.n.01 objects 39
502
+ 513 curtain rod curtain rod 1 38 7 curtain rod otherstructure Objects curtain 12
503
+ 411 bunk bed bunk bed 1 39 6 bunk bed otherfurniture Furniture bed bed bed 2818832 n02920259 bunk_bed.n.01 bed 11
504
+ 1122 chandelier chandelier 1 38 7 chandelier otherstructure Objects n03005285 chandelier.n.01 lighting 28
505
+ 922 tape tape 1 40 7 tape otherprop Objects objects 39
506
+ 88 plates plate 1 40 7 otherprop Objects n03959485 plate.n.04 objects 39
507
+ 518 alarm alarm 1 40 7 alarm otherprop Objects clock 3046257 n02694662 alarm_clock.n.01 objects 39
508
+ 814 fire hose fire hose 1 40 7 otherprop Objects n03346004 fire_hose.n.01 misc 40
509
+ 1319 toy dinosaur toy dinosaur 1 40 7 toy otherprop Objects n03964744 plaything.n.01 objects 39
510
+ 1320 cone cone 1 40 7 otherprop Objects objects 39
511
+ 649 glass doors glass door 1 8 12 door door Wall door n03221720 door.n.01 door 4
512
+ 607 hatrack hatrack 1 40 7 otherprop Objects n03059103 coatrack.n.01 shelving 31
513
+ 819 subwoofer subwoofer 1 40 7 speaker otherprop Objects speaker 3691459 n04349401 subwoofer.n.01 objects 39
514
+ 1321 fire sprinkler fire sprinkler 1 40 7 otherprop Objects misc 40
515
+ 1322 trash cabinet trash cabinet 1 3 6 cabinet cabinet Furniture cabinet 2933112 n02933112 cabinet.n.01 cabinet 7
516
+ 1204 pantry walls pantry wall 1 1 12 wall wall Wall n04546855 wall.n.01 wall 1
517
+ 227 photo photo 1 40 7 photo otherprop Objects n03925226 photograph.n.01 picture 6
518
+ 817 barrier barrier 1 40 7 otherprop Objects n02796623 barrier.n.01 misc 40
519
+ 130 stacks of cups cup 1 40 7 otherprop Objects n03147509 cup.n.01 objects 39
520
+ 712 beachball beachball 1 40 7 ball otherprop Objects n02814224 beach_ball.n.01 objects 39
521
+ 1323 folded boxes folded boxes 1 40 7 otherprop Objects objects 39
522
+ 1324 contact lens solution bottle contact lens solution bottle 1 40 7 bottle otherprop Objects bottle bottle 2876657 n02876657 bottle.n.01 objects 39
523
+ 673 covered box covered box 1 29 7 box box Objects objects 39
524
+ 459 folder folder 1 40 7 folder otherprop Objects n03376279 folder.n.02 objects 39
525
+ 643 mail trays mail tray 1 40 7 mail tray otherprop Objects objects 39
526
+ 238 slipper slipper 1 40 7 otherprop Objects n04241394 slipper.n.01 clothes 38
527
+ 765 magazine rack magazine rack 1 39 6 stand otherfurniture Furniture n03704549 magazine_rack.n.01 shelving 31
528
+ 1008 sticker sticker 1 40 7 sticker otherprop Objects n07272545 gummed_label.n.01 objects 39
529
+ 225 lotion lotion 1 40 7 otherprop Objects n03690938 lotion.n.01 objects 39
530
+ 1083 buddha buddha 1 40 7 otherprop Objects objects 39
531
+ 813 file organizer file organizer 1 40 7 otherprop Objects objects 39
532
+ 138 paper towel rolls paper towel roll 1 40 7 paper towel otherprop Objects n03887697 paper_towel.n.01 towel 20
533
+ 1145 night lamp night lamp 1 35 7 lamp lamp Objects lamp lamp 3636649 n03636649 lamp.n.02 lighting 28
534
+ 796 fuse box fuse box 1 40 7 otherprop Objects misc 40
535
+ 1325 knife block knife block 1 40 7 otherprop Objects objects 39
536
+ 363 furnace furnace 1 39 6 furnace otherfurniture Furniture n03404449 furnace.n.01
537
+ 1174 cd cases cd case 1 40 7 otherprop Objects objects 39
538
+ 38 stools stool 1 40 7 stool otherprop Objects stool n04326896 stool.n.01 stool 19
539
+ 1326 hand sanitzer dispenser hand sanitzer dispenser 1 40 7 otherprop Objects n04254120 soap_dispenser.n.01 objects 39
540
+ 997 teapot teapot 1 40 7 tea pot otherprop Objects n04398044 teapot.n.01 objects 39
541
+ 1327 pen holder pen holder 1 40 7 otherprop Objects objects 39
542
+ 1328 tray rack tray rack 1 40 7 otherprop Objects objects 39
543
+ 1329 wig wig 1 40 7 otherprop Objects n04584207 wig.n.01 objects 39
544
+ 182 switch switch 1 40 7 otherprop Objects n04372370 switch.n.01 misc 40
545
+ 280 plastic containers plastic container 1 40 7 container otherprop Objects n03094503 container.n.01 objects 39
546
+ 1330 night light night light 1 40 7 otherprop Objects lighting 28
547
+ 1331 notepad notepad 1 40 7 otherprop Objects objects 39
548
+ 1332 mail bin mail bin 1 40 7 otherprop Objects misc 40
549
+ 1333 elevator button elevator button 1 40 7 otherprop Objects misc 40
550
+ 939 gaming wheel gaming wheel 1 40 7 otherprop Objects objects 39
551
+ 1334 drum set drum set 1 40 7 otherprop Objects objects 39
552
+ 480 cosmetic bag cosmetic bag 1 37 7 bag bag Objects objects 39
553
+ 907 coffee mug coffee mug 1 40 7 vessel otherprop Objects cup or mug 3797390 n03063599 coffee_mug.n.01 objects 39
554
+ 1335 closet shelf closet shelf 1 15 6 shelves shelves Furniture bookshelf bookshelf 2871439 n02871439 bookshelf.n.01 shelving 31
555
+ 1336 baby mobile baby mobile 1 40 7 otherprop Objects objects 39
556
+ 829 diaper bin diaper bin 1 40 7 bin otherprop Objects objects 39
557
+ 947 door wall door wall 1 1 12 wall wall Wall wall 1
558
+ 1116 stepstool stepstool 1 40 7 step stool otherprop Objects objects 39
559
+ 599 paper shredder shredder 1 40 7 otherprop Objects n04210120 shredder.n.01 objects 39
560
+ 733 dress rack dress rack 1 40 7 otherprop Objects n03238762 dress_rack.n.01 misc 40
561
+ 123 cover cover 1 40 7 blanket otherprop Objects objects 39
562
+ 506 shopping bag shopping bag 1 37 7 bag bag Objects n04204081 shopping_bag.n.01 objects 39
563
+ 569 sliding door sliding door 1 8 12 door door Wall door n04239074 sliding_door.n.01 door 4
564
+ 1337 exercise bike exercise bike 1 40 7 machine otherprop Objects n04210120 shredder.n.01 gym_equipment 33
565
+ 1338 recliner chair recliner chair 1 5 4 chair chair Chair chair chair chair 3001627 n03238762 dress_rack.n.01 chair 3
566
+ 1314 kitchenaid mixer kitchen mixer 1 40 7 otherprop Objects appliances 37
567
+ 1339 soda can soda can 1 40 7 can otherprop Objects can 2946921 n02946921 can.n.01 objects 39
568
+ 1340 stovetop stovetop 1 38 7 stove otherstructure Objects stove 4330267 n04330267 stove.n.02 appliances 37
569
+ 851 stepladder stepladder 1 39 6 ladder otherfurniture Furniture stairs n04315599 step_ladder.n.01 stairs 16
570
+ 142 tap tap 1 40 7 faucet otherprop Objects faucet 3325088 n04559451 water_faucet.n.01 objects 39
571
+ 436 cable cable 1 40 7 cables otherprop Objects objects 39
572
+ 1341 baby changing station baby changing station 1 39 6 otherfurniture Furniture furniture 36
573
+ 1342 costume costume 1 21 7 clothes clothes Objects n02728440 apparel.n.01 clothes 38
574
+ 885 rocking chair rocking chair 1 5 4 chair chair Chair chair chair chair 3001627 n04099969 rocking_chair.n.01 chair 3
575
+ 693 binder binder 1 40 7 binder otherprop Objects objects 39
576
+ 815 media center media center 1 3 6 cabinet cabinet Furniture cabinet 2933112 n02933112 cabinet.n.01 cabinet 7
577
+ 401 towel rack towel rack 1 40 7 otherprop Objects n04459773 towel_rack.n.01 misc 40
578
+ 1343 medal medal 1 40 7 otherprop Objects objects 39
579
+ 1184 stack of folded chairs folded chair 1 5 4 chair chair Chair chair chair chair 3001627 n03001627 chair.n.01 chair 3
580
+ 1344 telescope telescope 1 40 7 otherprop Objects n04403638 telescope.n.01 objects 39
581
+ 1345 closet doorframe closet doorframe 1 8 12 door door Wall door door 4
582
+ 160 glass glass 1 38 7 glass otherstructure Objects n03438257 glass.n.02 misc 40
583
+ 1126 baseball cap baseball cap 1 40 7 otherprop Objects cap 2954340 n02799323 baseball_cap.n.01 clothes 38
584
+ 1346 battery disposal jar battery disposal jar 1 40 7 jar otherprop Objects jar 3593526 n03593526 jar.n.01 objects 39
585
+ 332 mop mop 1 40 7 otherprop Objects n04367480 swab.n.02 objects 39
586
+ 397 tank tank 1 40 7 otherprop Objects objects 39
587
+ 643 mail tray mail tray 1 40 7 mail tray otherprop Objects objects 39
588
+ 551 centerpiece centerpiece 1 40 7 centerpiece otherprop Objects n02994419 centerpiece.n.02 objects 39
589
+ 1163 stick stick 1 40 7 stick otherprop Objects objects 39
590
+ 1347 closet floor closet floor 1 2 5 floor floor Floor n03365592 floor.n.01 floor 2
591
+ 1348 dryer sheets dryer sheets 1 40 7 otherprop Objects objects 39
592
+ 803 bycicle bycicle 1 40 7 otherprop Objects misc 40
593
+ 484 flower stand flower stand 1 39 6 stand otherfurniture Furniture furniture 36
594
+ 1349 air mattress air mattress 1 4 1 bed bed Bed bed bed bed 2818832 n02690809 air_mattress.n.01 bed 11
595
+ 1350 clip clip 1 40 7 otherprop Objects objects 39
596
+ 222 side table side table 1 7 10 table table Table table table table 4379243 n04379243 table.n.02 table 5
597
+ 1253 pizza boxes pizza box 1 29 7 box box Objects n02883344 box.n.01 objects 39
598
+ 1351 display display 1 39 7 otherfurniture Furniture n03211117 display.n.06 misc 40
599
+ 1352 postcard postcard 1 40 7 otherprop Objects objects 39
600
+ 828 display sign display sign 1 40 7 sign otherprop Objects misc 40
601
+ 1353 paper towel paper towel 1 40 7 paper towel otherprop Objects n03887697 paper_towel.n.01 towel 20
602
+ 612 boots boot 1 40 7 shoe otherprop Objects n04199027 shoe.n.01 clothes 38
603
+ 1354 tennis racket bag tennis racket bag 1 40 7 otherprop Objects objects 39
604
+ 1355 air hockey table air hockey table 1 7 10 table table Table table table table 4379243 n04379243 table.n.02 table 5
605
+ 1301 socks sock 1 21 7 clothes clothes Objects n04254777 sock.n.01 clothes 38
606
+ 1356 food bag food bag 1 37 7 bag bag Objects objects 39
607
+ 1199 clothes hangers clothes hanger 1 40 7 otherprop Objects n03057920 coat_hanger.n.01 misc 40
608
+ 1357 starbucks cup starbucks cup 1 40 7 cup otherprop Objects cup cup or mug 3797390 n03797390 mug.n.04 objects 39
assets/meta/scannetv2_raw_categories.json ADDED
@@ -0,0 +1,609 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ "wall",
3
+ "chair",
4
+ "books",
5
+ "floor",
6
+ "door",
7
+ "object",
8
+ "window",
9
+ "table",
10
+ "trash can",
11
+ "pillow",
12
+ "picture",
13
+ "ceiling",
14
+ "box",
15
+ "doorframe",
16
+ "monitor",
17
+ "cabinet",
18
+ "desk",
19
+ "shelf",
20
+ "office chair",
21
+ "towel",
22
+ "couch",
23
+ "sink",
24
+ "backpack",
25
+ "lamp",
26
+ "bed",
27
+ "bookshelf",
28
+ "mirror",
29
+ "curtain",
30
+ "plant",
31
+ "whiteboard",
32
+ "radiator",
33
+ "book",
34
+ "kitchen cabinet",
35
+ "toilet paper",
36
+ "kitchen cabinets",
37
+ "armchair",
38
+ "shoes",
39
+ "coffee table",
40
+ "toilet",
41
+ "bag",
42
+ "clothes",
43
+ "keyboard",
44
+ "bottle",
45
+ "recycling bin",
46
+ "nightstand",
47
+ "stool",
48
+ "tv",
49
+ "file cabinet",
50
+ "dresser",
51
+ "computer tower",
52
+ "clothing",
53
+ "telephone",
54
+ "cup",
55
+ "refrigerator",
56
+ "end table",
57
+ "jacket",
58
+ "shower curtain",
59
+ "bathtub",
60
+ "microwave",
61
+ "kitchen counter",
62
+ "sofa chair",
63
+ "paper towel dispenser",
64
+ "bathroom vanity",
65
+ "suitcase",
66
+ "laptop",
67
+ "ottoman",
68
+ "shower walls",
69
+ "printer",
70
+ "counter",
71
+ "board",
72
+ "soap dispenser",
73
+ "stove",
74
+ "light",
75
+ "closet wall",
76
+ "mini fridge",
77
+ "cabinets",
78
+ "doors",
79
+ "fan",
80
+ "tissue box",
81
+ "blanket",
82
+ "bathroom stall",
83
+ "copier",
84
+ "bench",
85
+ "bar",
86
+ "soap dish",
87
+ "laundry hamper",
88
+ "storage bin",
89
+ "bathroom stall door",
90
+ "light switch",
91
+ "coffee maker",
92
+ "tv stand",
93
+ "decoration",
94
+ "ceiling light",
95
+ "range hood",
96
+ "blackboard",
97
+ "clock",
98
+ "wardrobe closet",
99
+ "rail",
100
+ "bulletin board",
101
+ "mat",
102
+ "trash bin",
103
+ "ledge",
104
+ "seat",
105
+ "mouse",
106
+ "basket",
107
+ "shower",
108
+ "dumbbell",
109
+ "paper",
110
+ "person",
111
+ "windowsill",
112
+ "closet",
113
+ "bucket",
114
+ "sign",
115
+ "speaker",
116
+ "dishwasher",
117
+ "container",
118
+ "stair rail",
119
+ "shower curtain rod",
120
+ "tube",
121
+ "bathroom cabinet",
122
+ "papers",
123
+ "storage container",
124
+ "paper bag",
125
+ "paper towel roll",
126
+ "ball",
127
+ "closet doors",
128
+ "laundry basket",
129
+ "cart",
130
+ "closet door",
131
+ "dish rack",
132
+ "stairs",
133
+ "blinds",
134
+ "stack of chairs",
135
+ "purse",
136
+ "bicycle",
137
+ "tray",
138
+ "plunger",
139
+ "paper cutter",
140
+ "toilet paper dispenser",
141
+ "boxes",
142
+ "bin",
143
+ "toilet seat cover dispenser",
144
+ "guitar",
145
+ "mailboxes",
146
+ "handicap bar",
147
+ "fire extinguisher",
148
+ "ladder",
149
+ "column",
150
+ "pipe",
151
+ "vacuum cleaner",
152
+ "plate",
153
+ "piano",
154
+ "water cooler",
155
+ "cd case",
156
+ "bowl",
157
+ "closet rod",
158
+ "bathroom counter",
159
+ "oven",
160
+ "stand",
161
+ "scale",
162
+ "washing machine",
163
+ "broom",
164
+ "hat",
165
+ "shower wall",
166
+ "guitar case",
167
+ "rack",
168
+ "water pitcher",
169
+ "laundry detergent",
170
+ "hair dryer",
171
+ "pillar",
172
+ "divider",
173
+ "power outlet",
174
+ "dining table",
175
+ "shower floor",
176
+ "washing machines",
177
+ "shower door",
178
+ "coffee kettle",
179
+ "wardrobe cabinet",
180
+ "structure",
181
+ "bookshelves",
182
+ "clothes dryer",
183
+ "toaster",
184
+ "shoe",
185
+ "ironing board",
186
+ "alarm clock",
187
+ "shower head",
188
+ "lamp base",
189
+ "water bottle",
190
+ "keyboard piano",
191
+ "projector screen",
192
+ "case of water bottles",
193
+ "toaster oven",
194
+ "music stand",
195
+ "staircase",
196
+ "coat rack",
197
+ "storage organizer",
198
+ "machine",
199
+ "folded chair",
200
+ "fire alarm",
201
+ "fireplace",
202
+ "vent",
203
+ "furniture",
204
+ "power strip",
205
+ "calendar",
206
+ "poster",
207
+ "toilet paper holder",
208
+ "potted plant",
209
+ "stuffed animal",
210
+ "luggage",
211
+ "curtains",
212
+ "headphones",
213
+ "crate",
214
+ "candle",
215
+ "projector",
216
+ "clothes dryers",
217
+ "mattress",
218
+ "dustpan",
219
+ "drawer",
220
+ "rod",
221
+ "globe",
222
+ "footrest",
223
+ "piano bench",
224
+ "breakfast bar",
225
+ "step stool",
226
+ "hand rail",
227
+ "vending machine",
228
+ "ceiling fan",
229
+ "swiffer",
230
+ "foosball table",
231
+ "jar",
232
+ "footstool",
233
+ "folded table",
234
+ "round table",
235
+ "hamper",
236
+ "poster tube",
237
+ "case",
238
+ "carpet",
239
+ "thermostat",
240
+ "coat",
241
+ "water fountain",
242
+ "smoke detector",
243
+ "pillows",
244
+ "flip flops",
245
+ "cloth",
246
+ "banner",
247
+ "clothes hanger",
248
+ "whiteboard eraser",
249
+ "iron",
250
+ "instrument case",
251
+ "toilet paper rolls",
252
+ "soap",
253
+ "block",
254
+ "wall hanging",
255
+ "kitchen island",
256
+ "pipes",
257
+ "toothbrush",
258
+ "shirt",
259
+ "cutting board",
260
+ "vase",
261
+ "shower control valve",
262
+ "exercise machine",
263
+ "compost bin",
264
+ "shorts",
265
+ "tire",
266
+ "teddy bear",
267
+ "bathrobe",
268
+ "handrail",
269
+ "faucet",
270
+ "pantry wall",
271
+ "thermos",
272
+ "rug",
273
+ "couch cushions",
274
+ "tripod",
275
+ "mailbox",
276
+ "tupperware",
277
+ "shoe rack",
278
+ "towels",
279
+ "beer bottles",
280
+ "treadmill",
281
+ "salt",
282
+ "chest",
283
+ "dispenser",
284
+ "mirror doors",
285
+ "remote",
286
+ "folded ladder",
287
+ "cushion",
288
+ "carton",
289
+ "step",
290
+ "drying rack",
291
+ "slippers",
292
+ "pool table",
293
+ "soda stream",
294
+ "toilet brush",
295
+ "loft bed",
296
+ "cooking pot",
297
+ "heater",
298
+ "messenger bag",
299
+ "stapler",
300
+ "closet walls",
301
+ "scanner",
302
+ "elliptical machine",
303
+ "kettle",
304
+ "metronome",
305
+ "dumbell",
306
+ "music book",
307
+ "rice cooker",
308
+ "dart board",
309
+ "sewing machine",
310
+ "grab bar",
311
+ "flowerpot",
312
+ "painting",
313
+ "railing",
314
+ "stair",
315
+ "toolbox",
316
+ "nerf gun",
317
+ "binders",
318
+ "desk lamp",
319
+ "quadcopter",
320
+ "pitcher",
321
+ "hanging",
322
+ "mail",
323
+ "closet ceiling",
324
+ "hoverboard",
325
+ "beanbag chair",
326
+ "water heater",
327
+ "spray bottle",
328
+ "rope",
329
+ "plastic container",
330
+ "soap bottle",
331
+ "ikea bag",
332
+ "sleeping bag",
333
+ "duffel bag",
334
+ "frying pan",
335
+ "oven mitt",
336
+ "pot",
337
+ "hand dryer",
338
+ "dollhouse",
339
+ "shampoo bottle",
340
+ "hair brush",
341
+ "tennis racket",
342
+ "display case",
343
+ "ping pong table",
344
+ "boiler",
345
+ "bag of coffee beans",
346
+ "bananas",
347
+ "carseat",
348
+ "helmet",
349
+ "umbrella",
350
+ "coffee box",
351
+ "envelope",
352
+ "wet floor sign",
353
+ "clothing rack",
354
+ "controller",
355
+ "bath walls",
356
+ "podium",
357
+ "storage box",
358
+ "dolly",
359
+ "shampoo",
360
+ "paper tray",
361
+ "cabinet door",
362
+ "changing station",
363
+ "poster printer",
364
+ "screen",
365
+ "soap bar",
366
+ "crutches",
367
+ "studio light",
368
+ "stack of cups",
369
+ "toilet flush button",
370
+ "trunk",
371
+ "grocery bag",
372
+ "plastic bin",
373
+ "pizza box",
374
+ "cabinet doors",
375
+ "legs",
376
+ "car",
377
+ "shaving cream",
378
+ "luggage stand",
379
+ "shredder",
380
+ "statue",
381
+ "urinal",
382
+ "hose",
383
+ "bike pump",
384
+ "coatrack",
385
+ "bear",
386
+ "wall lamp",
387
+ "humidifier",
388
+ "toothpaste",
389
+ "mouthwash bottle",
390
+ "poster cutter",
391
+ "golf bag",
392
+ "food container",
393
+ "camera",
394
+ "table lamp",
395
+ "yoga mat",
396
+ "card",
397
+ "mug",
398
+ "shower doors",
399
+ "cardboard",
400
+ "rack stand",
401
+ "boxes of paper",
402
+ "flag",
403
+ "futon",
404
+ "magazine",
405
+ "exit sign",
406
+ "rolled poster",
407
+ "wheel",
408
+ "pictures",
409
+ "blackboard eraser",
410
+ "organizer",
411
+ "doll",
412
+ "book rack",
413
+ "laundry bag",
414
+ "sponge",
415
+ "seating",
416
+ "folded chairs",
417
+ "lotion bottle",
418
+ "can",
419
+ "lunch box",
420
+ "food display",
421
+ "storage shelf",
422
+ "sliding wood door",
423
+ "pants",
424
+ "wood",
425
+ "boards",
426
+ "bottles",
427
+ "washcloth",
428
+ "workbench",
429
+ "open kitchen cabinet",
430
+ "organizer shelf",
431
+ "frame",
432
+ "cups",
433
+ "exercise ball",
434
+ "easel",
435
+ "garbage bag",
436
+ "roomba",
437
+ "garage door",
438
+ "luggage rack",
439
+ "bike lock",
440
+ "briefcase",
441
+ "hand towel",
442
+ "bath products",
443
+ "star",
444
+ "map",
445
+ "coffee bean bag",
446
+ "headboard",
447
+ "ipad",
448
+ "display rack",
449
+ "traffic cone",
450
+ "toiletry",
451
+ "canopy",
452
+ "massage chair",
453
+ "paper organizer",
454
+ "barricade",
455
+ "platform",
456
+ "cap",
457
+ "dumbbell plates",
458
+ "elevator",
459
+ "cooking pan",
460
+ "trash bag",
461
+ "santa",
462
+ "jewelry box",
463
+ "boat",
464
+ "sock",
465
+ "kinect",
466
+ "crib",
467
+ "plastic storage bin",
468
+ "cooler",
469
+ "kitchen apron",
470
+ "dishwashing soap bottle",
471
+ "xbox controller",
472
+ "banana holder",
473
+ "ping pong paddle",
474
+ "airplane",
475
+ "conditioner bottle",
476
+ "tea kettle",
477
+ "bedframe",
478
+ "wood beam",
479
+ "toilet paper package",
480
+ "wall mounted coat rack",
481
+ "film light",
482
+ "ceiling lamp",
483
+ "chain",
484
+ "sofa",
485
+ "closet wardrobe",
486
+ "sweater",
487
+ "kitchen mixer",
488
+ "wardrobe",
489
+ "water softener",
490
+ "banister",
491
+ "trolley",
492
+ "pantry shelf",
493
+ "sofa bed",
494
+ "loofa",
495
+ "shower faucet handle",
496
+ "toy piano",
497
+ "fish",
498
+ "file cabinets",
499
+ "cat litter box",
500
+ "electric panel",
501
+ "suitcases",
502
+ "curtain rod",
503
+ "bunk bed",
504
+ "chandelier",
505
+ "tape",
506
+ "plates",
507
+ "alarm",
508
+ "fire hose",
509
+ "toy dinosaur",
510
+ "cone",
511
+ "glass doors",
512
+ "hatrack",
513
+ "subwoofer",
514
+ "fire sprinkler",
515
+ "trash cabinet",
516
+ "pantry walls",
517
+ "photo",
518
+ "barrier",
519
+ "stacks of cups",
520
+ "beachball",
521
+ "folded boxes",
522
+ "contact lens solution bottle",
523
+ "covered box",
524
+ "folder",
525
+ "mail trays",
526
+ "slipper",
527
+ "magazine rack",
528
+ "sticker",
529
+ "lotion",
530
+ "buddha",
531
+ "file organizer",
532
+ "paper towel rolls",
533
+ "night lamp",
534
+ "fuse box",
535
+ "knife block",
536
+ "furnace",
537
+ "cd cases",
538
+ "stools",
539
+ "hand sanitzer dispenser",
540
+ "teapot",
541
+ "pen holder",
542
+ "tray rack",
543
+ "wig",
544
+ "switch",
545
+ "plastic containers",
546
+ "night light",
547
+ "notepad",
548
+ "mail bin",
549
+ "elevator button",
550
+ "gaming wheel",
551
+ "drum set",
552
+ "cosmetic bag",
553
+ "coffee mug",
554
+ "closet shelf",
555
+ "baby mobile",
556
+ "diaper bin",
557
+ "door wall",
558
+ "stepstool",
559
+ "paper shredder",
560
+ "dress rack",
561
+ "cover",
562
+ "shopping bag",
563
+ "sliding door",
564
+ "exercise bike",
565
+ "recliner chair",
566
+ "kitchenaid mixer",
567
+ "soda can",
568
+ "stovetop",
569
+ "stepladder",
570
+ "tap",
571
+ "cable",
572
+ "baby changing station",
573
+ "costume",
574
+ "rocking chair",
575
+ "binder",
576
+ "media center",
577
+ "towel rack",
578
+ "medal",
579
+ "stack of folded chairs",
580
+ "telescope",
581
+ "closet doorframe",
582
+ "glass",
583
+ "baseball cap",
584
+ "battery disposal jar",
585
+ "mop",
586
+ "tank",
587
+ "mail tray",
588
+ "centerpiece",
589
+ "stick",
590
+ "closet floor",
591
+ "dryer sheets",
592
+ "bycicle",
593
+ "flower stand",
594
+ "air mattress",
595
+ "clip",
596
+ "side table",
597
+ "pizza boxes",
598
+ "display",
599
+ "postcard",
600
+ "display sign",
601
+ "paper towel",
602
+ "boots",
603
+ "tennis racket bag",
604
+ "air hockey table",
605
+ "socks",
606
+ "food bag",
607
+ "clothes hangers",
608
+ "starbucks cup"
609
+ ]
pq3d/inference.py ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import os
3
+ import torch
4
+
5
+ import numpy as np
6
+
7
+
8
+ from pq3d.model import Query3DUnified
9
+ from pq3d.utils import LabelConverter, convert_pc_to_box, obj_processing_post, pad_sequence
10
+ from torch.utils.data import default_collate
11
+ from transformers import AutoTokenizer
12
+
13
+ ASSET_DIR = os.path.join(os.getcwd(), 'assets')
14
+ CKPT_DIR = os.path.join(os.getcwd(), 'checkpoint')
15
+ int2cat = json.load(open(os.path.join(ASSET_DIR, "meta/scannetv2_raw_categories.json"), 'r', encoding="utf-8"))
16
+ cat2int = {w: i for i, w in enumerate(int2cat)}
17
+ label_converter = LabelConverter(os.path.join(ASSET_DIR, "meta/scannetv2-labels.combined.tsv"))
18
+
19
+ def load_data(scan_id):
20
+ one_scan = {}
21
+ # load scan
22
+ pcd_data = torch.load(os.path.join(ASSET_DIR, f'inputs/{scan_id}', f'{scan_id}_pcd.pth'))
23
+ inst_to_label = torch.load(os.path.join(ASSET_DIR, f'inputs/{scan_id}', f'{scan_id}_inst.pth'))
24
+ points, colors, instance_labels = pcd_data[0], pcd_data[1], pcd_data[-1]
25
+ colors = colors / 127.5 - 1
26
+ pcds = np.concatenate([points, colors], 1)
27
+ one_scan['pcds'] = pcds
28
+ one_scan['instance_labels'] = instance_labels
29
+ one_scan['inst_to_label'] = inst_to_label
30
+ # convert to gt object
31
+ obj_pcds = []
32
+ inst_ids = []
33
+ inst_labels = []
34
+ bg_indices = np.full((points.shape[0], ), 1, dtype=np.bool_)
35
+ for inst_id in inst_to_label.keys():
36
+ if inst_to_label[inst_id] in cat2int.keys():
37
+ mask = instance_labels == inst_id
38
+ if np.sum(mask) == 0:
39
+ continue
40
+ obj_pcds.append(pcds[mask])
41
+ inst_ids.append(inst_id)
42
+ inst_labels.append(cat2int[inst_to_label[inst_id]])
43
+ if inst_to_label[inst_id] not in ['wall', 'floor', 'ceiling']:
44
+ bg_indices[mask] = False
45
+ one_scan['obj_pcds'] = obj_pcds
46
+ one_scan['inst_labels'] = inst_labels
47
+ one_scan['inst_ids'] = inst_ids
48
+ one_scan['bg_pcds'] = pcds[bg_indices]
49
+ # calculate box for matching
50
+ obj_center = []
51
+ obj_box_size = []
52
+ for obj_pcd in obj_pcds:
53
+ _c, _b = convert_pc_to_box(obj_pcd)
54
+ obj_center.append(_c)
55
+ obj_box_size.append(_b)
56
+ one_scan['obj_loc'] = obj_center
57
+ one_scan['obj_box'] = obj_box_size
58
+ # load image feat
59
+ feat_pth = os.path.join(ASSET_DIR, f'inputs/{scan_id}', f'{scan_id}_img_gt.pth')
60
+ feat_dict = torch.load(feat_pth)
61
+ feat_dim = next(iter(feat_dict.values())).shape[0]
62
+ n_obj = len(one_scan['inst_ids']) # the last one is for missing objects.
63
+ feat = torch.zeros((n_obj, feat_dim), dtype=torch.float32)
64
+ for i, cid in enumerate(one_scan['inst_ids']):
65
+ if cid in feat_dict.keys():
66
+ feat[i] = feat_dict[cid]
67
+ one_scan['image_obj_feat_gt'] = feat
68
+ # load voxel feat
69
+ feat_pth = os.path.join(ASSET_DIR, f'inputs/{scan_id}', f'{scan_id}_voxel_gt.pth')
70
+ feat_dict = torch.load(feat_pth)
71
+ feat_dim = next(iter(feat_dict.values())).shape[0]
72
+ n_obj = len(one_scan['inst_ids']) # the last one is for missing objects.
73
+ feat = torch.zeros((n_obj, feat_dim), dtype=torch.float32)
74
+ for i, cid in enumerate(one_scan['inst_ids']):
75
+ if cid in feat_dict.keys():
76
+ feat[i] = feat_dict[cid]
77
+ one_scan['voxel_obj_feat_gt'] = feat
78
+ # load point feat
79
+ feat_pth = os.path.join(ASSET_DIR, f'inputs/{scan_id}', f'{scan_id}_point_gt.pth')
80
+ feat_dict = torch.load(feat_pth)
81
+ feat_dim = next(iter(feat_dict.values())).shape[0]
82
+ n_obj = len(one_scan['inst_ids']) # the last one is for missing objects.
83
+ feat = torch.zeros((n_obj, feat_dim), dtype=torch.float32)
84
+ for i, cid in enumerate(one_scan['inst_ids']):
85
+ if cid in feat_dict.keys():
86
+ feat[i] = feat_dict[cid]
87
+ one_scan['pc_obj_feat_gt'] = feat
88
+ # convert to pq3d input
89
+ obj_labels = one_scan['inst_labels'] # N
90
+ obj_pcds = one_scan['obj_pcds']
91
+ obj_ids = one_scan['inst_ids']
92
+ # object filter
93
+ excluded_labels = ['wall', 'floor', 'ceiling']
94
+ def keep_obj(i, obj_label):
95
+ category = int2cat[obj_label]
96
+ # filter out background
97
+ if category in excluded_labels:
98
+ return False
99
+ # filter out objects not mentioned in the sentence
100
+ return True
101
+ selected_obj_idxs = [i for i, obj_label in enumerate(obj_labels) if keep_obj(i, obj_label)]
102
+ obj_labels = [obj_labels[i] for i in selected_obj_idxs]
103
+ obj_pcds = [obj_pcds[i] for i in selected_obj_idxs]
104
+ # subsample points
105
+ obj_pcds = np.array([obj_pcd[np.random.choice(len(obj_pcd), size=1024,
106
+ replace=len(obj_pcd) < 1024)] for obj_pcd in obj_pcds])
107
+ obj_fts, obj_locs, obj_boxes, rot_matrix = obj_processing_post(obj_pcds, rot_aug=False)
108
+ data_dict = {
109
+ "scan_id": scan_id,
110
+ "obj_fts": obj_fts.float(),
111
+ "obj_locs": obj_locs.float(),
112
+ "obj_labels": torch.LongTensor(obj_labels),
113
+ "obj_boxes": obj_boxes,
114
+ "obj_pad_masks": torch.ones((len(obj_locs)), dtype=torch.bool), # used for padding in collate
115
+ "obj_ids": [obj_ids[i] for i in selected_obj_idxs]
116
+ }
117
+ # convert image feature
118
+ feats = one_scan['image_obj_feat_' + 'gt']
119
+ valid = selected_obj_idxs
120
+ data_dict['mv_seg_fts'] = feats[valid]
121
+ data_dict['mv_seg_pad_masks'] = torch.ones(len(data_dict['mv_seg_fts']), dtype=torch.bool)
122
+ # convert voxel feature
123
+ feats = one_scan['voxel_obj_feat_' + 'gt']
124
+ valid = selected_obj_idxs
125
+ data_dict['voxel_seg_fts'] = feats[valid]
126
+ data_dict['voxel_seg_pad_masks'] = torch.ones(len(data_dict['voxel_seg_fts']), dtype=torch.bool)
127
+ # convert point feature
128
+ feats = one_scan['pc_obj_feat_' + 'gt']
129
+ valid = selected_obj_idxs
130
+ data_dict['pc_seg_fts'] = feats[valid]
131
+ data_dict['pc_seg_pad_masks'] = torch.ones(len(data_dict['pc_seg_fts']), dtype=torch.bool)
132
+ # build other
133
+ data_dict['query_locs'] = data_dict['obj_locs'].clone()
134
+ data_dict['query_pad_masks'] = data_dict['obj_pad_masks'].clone()
135
+ data_dict['seg_center'] = obj_locs.float()
136
+ data_dict['seg_pad_masks'] = data_dict['obj_pad_masks']
137
+ return data_dict
138
+
139
+ def form_batch(data_dict):
140
+ batch = [data_dict]
141
+ new_batch = {}
142
+ # merge list keys
143
+ list_keys = [k for k, v in batch[0].items() if isinstance(v, list)]
144
+ for k in list_keys:
145
+ new_batch[k] = [sample.pop(k) for sample in batch]
146
+ # merge tensor
147
+ padding_keys = [k for k, v in batch[0].items() if isinstance(v, torch.Tensor) and v.ndim > 0]
148
+ for k in padding_keys:
149
+ tensors = [sample.pop(k) for sample in batch]
150
+ padding_value = -100 if k == 'obj_labels' else 0
151
+ padded_tensor = pad_sequence(tensors, pad=padding_value)
152
+ new_batch[k] = padded_tensor
153
+ # others
154
+ new_batch.update(default_collate(batch))
155
+ return new_batch
156
+
157
+ def tokenize_txt(text):
158
+ tokenizer_name = 'openai/clip-vit-large-patch14'
159
+ tokenizer = AutoTokenizer.from_pretrained(tokenizer_name)
160
+ encoded_input = tokenizer([text], add_special_tokens=True, truncation=True)
161
+ data_dict = {}
162
+ data_dict['prompt'] = torch.FloatTensor(encoded_input.input_ids[0])
163
+ data_dict['prompt_pad_masks'] = torch.ones((len(data_dict['prompt']))).bool()
164
+ data_dict['prompt_type'] = 1 # txt
165
+ return data_dict
166
+
167
+ def inference(scan_id, text):
168
+ data_dict = load_data(scan_id)
169
+ data_dict.update(tokenize_txt(text))
170
+ data_dict = form_batch(data_dict)
171
+ model = Query3DUnified()
172
+ load_msg = model.load_state_dict(torch.load(os.path.join(CKPT_DIR, 'pytorch_model.bin')), strict=False)
173
+ data_dict = model(data_dict)
174
+ result_id = data_dict['obj_ids'][0][torch.argmax(data_dict['og3d_logits'][0]).item()]
175
+ print(f"finish infernece result id is {result_id}")
176
+ return result_id
177
+
178
+ if __name__ == '__main__':
179
+ inference("scene0050_00", "chair")
180
+
pq3d/model.py ADDED
@@ -0,0 +1,909 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from enum import IntEnum
2
+ from functools import partial
3
+ import einops
4
+ import numpy as np
5
+ import torch
6
+
7
+ from contextlib import nullcontext
8
+ import torch
9
+ import torch.nn as nn
10
+ from transformers import CLIPTextModelWithProjection
11
+ import copy
12
+ from transformers import T5ForConditionalGeneration
13
+ from transformers.modeling_outputs import BaseModelOutput
14
+ import torch.nn.functional as F
15
+
16
+ def get_mlp_head(input_size, hidden_size, output_size, dropout=0):
17
+ return nn.Sequential(*[
18
+ nn.Linear(input_size, hidden_size),
19
+ nn.ReLU(),
20
+ nn.LayerNorm(hidden_size, eps=1e-12),
21
+ nn.Dropout(dropout),
22
+ nn.Linear(hidden_size, output_size)
23
+ ])
24
+
25
+ def layer_repeat(module, N, share_layer=False):
26
+ if share_layer:
27
+ return nn.ModuleList([module] * N)
28
+ else:
29
+ return nn.ModuleList([copy.deepcopy(module) for _ in range(N - 1)] + [module])
30
+
31
+ class CLIPLanguageEncoder(nn.Module):
32
+ def __init__(self, weights="openai/clip-vit-large-patch14", output_dim=768, freeze_backbone=True, use_projection=False, projection_type='mlp', num_projection_layers=1, dropout=0.1):
33
+ super().__init__()
34
+ self.context = torch.no_grad if freeze_backbone else nullcontext
35
+ self.model = CLIPTextModelWithProjection.from_pretrained(weights)
36
+ self.use_projection = use_projection
37
+ self.projection_type = projection_type
38
+ if use_projection:
39
+ if projection_type == 'mlp':
40
+ self.projection = get_mlp_head(self.model.config.hidden_size, output_dim, output_dim, dropout=dropout)
41
+ else:
42
+ raise NotImplementedError
43
+ #self.attention = nn.MultiheadAttention(embed_dim=768, num_heads=12, batch_first=True)
44
+
45
+ def forward(self, txt_ids, txt_masks):
46
+ with self.context():
47
+ txt = self.model(txt_ids, txt_masks).last_hidden_state
48
+ txt = self.model.text_projection(txt)
49
+ txt = torch.nn.functional.normalize(txt, p=2, dim=2)
50
+ #txt = self.attention(txt, txt, txt, key_padding_mask=txt_masks.logical_not())[0]
51
+ if self.use_projection:
52
+ if self.projection_type == 'mlp':
53
+ txt = self.projection(txt)
54
+ elif self.projection_type == 'attention':
55
+ for attention_layer in self.projection:
56
+ txt = attention_layer(txt, tgt_key_padding_mask = txt_masks.logical_not())
57
+ else:
58
+ raise NotImplementedError
59
+ return txt
60
+
61
+ def _init_weights_bert(module, std=0.02):
62
+ """
63
+ Huggingface transformer weight initialization,
64
+ most commonly for bert initialization
65
+ """
66
+ if isinstance(module, nn.Linear):
67
+ # Slightly different from the TF version which uses truncated_normal for initialization
68
+ # cf https://github.com/pytorch/pytorch/pull/5617
69
+ module.weight.data.normal_(mean=0.0, std=std)
70
+ if module.bias is not None:
71
+ module.bias.data.zero_()
72
+ elif isinstance(module, nn.Embedding):
73
+ module.weight.data.normal_(mean=0.0, std=std)
74
+ if module.padding_idx is not None:
75
+ module.weight.data[module.padding_idx].zero_()
76
+ elif isinstance(module, nn.LayerNorm):
77
+ module.bias.data.zero_()
78
+ module.weight.data.fill_(1.0)
79
+
80
+
81
+ def break_up_pc(pc):
82
+ """
83
+ Split the pointcloud into xyz positions and features tensors.
84
+ This method is taken from VoteNet codebase (https://github.com/facebookresearch/votenet)
85
+
86
+ @param pc: pointcloud [N, 3 + C]
87
+ :return: the xyz tensor and the feature tensor
88
+ """
89
+ xyz = pc[..., 0:3].contiguous()
90
+ features = (
91
+ pc[..., 3:].transpose(1, 2).contiguous()
92
+ if pc.size(-1) > 3 else None
93
+ )
94
+ return xyz, features
95
+
96
+ class ObjectEncoder(nn.Module):
97
+ def __init__(self, backbone='none', input_feat_size=768, hidden_size=768, freeze_backbone=False, use_projection=False,
98
+ tgt_cls_num=607, pretrained=None, dropout=0.1, use_cls_head=True):
99
+ super().__init__()
100
+ self.freeze_backbone = freeze_backbone
101
+ self.context = torch.no_grad if freeze_backbone else nullcontext
102
+ # if backbone == 'pointnet++':
103
+ # self.backbone = PointNetPP(
104
+ # sa_n_points=[32, 16, None],
105
+ # sa_n_samples=[32, 32, None],
106
+ # sa_radii=[0.2, 0.4, None],
107
+ # sa_mlps=[[3, 64, 64, 128], [128, 128, 128, 256], [256, 256, 512, 768]],
108
+ # )
109
+ if use_cls_head:
110
+ self.cls_head = get_mlp_head(input_feat_size, input_feat_size // 2, tgt_cls_num, dropout=0.3)
111
+
112
+ self.use_projection = use_projection
113
+ if use_projection:
114
+ self.input_feat_proj = nn.Sequential(nn.Linear(input_feat_size, hidden_size), nn.LayerNorm(hidden_size))
115
+ else:
116
+ assert input_feat_size == hidden_size, "input_feat_size should be equal to hidden_size!"
117
+ if dropout > 0:
118
+ self.dropout = nn.Dropout(dropout)
119
+
120
+ # load weights
121
+ self.apply(_init_weights_bert)
122
+ if pretrained:
123
+ print("load pretrained weights from {}".format(pretrained))
124
+ pre_state_dict = torch.load(pretrained)
125
+ state_dict = {}
126
+ for k, v in pre_state_dict.items():
127
+ if k[0] in ['0', '2', '4']: # key mapping for voxel
128
+ k = 'cls_head.' + k
129
+ k = k.replace('vision_encoder.vis_cls_head.', 'cls_head.') # key mapping for mv
130
+ k = k.replace('point_cls_head.', 'cls_head.') # key mapping for pc
131
+ k = k.replace('point_feature_extractor.', 'backbone.')
132
+ state_dict[k] = v
133
+ warning = self.load_state_dict(state_dict, strict=False)
134
+ print(warning)
135
+
136
+ def freeze_bn(self, m):
137
+ for layer in m.modules():
138
+ if isinstance(layer, nn.BatchNorm2d):
139
+ layer.eval()
140
+
141
+ def forward(self, obj_feats, **kwargs):
142
+ if self.freeze_backbone and hasattr(self, 'backbone'):
143
+ self.freeze_bn(self.backbone)
144
+
145
+ batch_size, num_objs = obj_feats.shape[:2]
146
+ with self.context():
147
+ if hasattr(self, 'backbone'):
148
+ obj_feats = self.backbone(einops.rearrange(obj_feats, 'b o p d -> (b o) p d'))
149
+ obj_feats = einops.rearrange(obj_feats, '(b o) d -> b o d', b=batch_size)
150
+
151
+ obj_embeds = self.input_feat_proj(obj_feats) if self.use_projection else obj_feats
152
+ if hasattr(self, 'dropout'):
153
+ obj_embeds = self.dropout(obj_embeds)
154
+
155
+ if hasattr(self, 'cls_head'):
156
+ obj_cls_logits = self.cls_head(obj_feats)
157
+ return obj_embeds, obj_cls_logits
158
+ else:
159
+ return obj_embeds
160
+
161
+ class SelfAttentionLayer(nn.Module):
162
+ def __init__(
163
+ self,
164
+ d_model,
165
+ nhead,
166
+ dropout=0.0,
167
+ activation="relu",
168
+ normalize_before=False,
169
+ batch_first=False,
170
+ ):
171
+ super().__init__()
172
+ self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout, batch_first=batch_first)
173
+
174
+ self.norm = nn.LayerNorm(d_model)
175
+ self.dropout = nn.Dropout(dropout)
176
+
177
+ self.activation = get_activation_fn(activation)
178
+ self.normalize_before = normalize_before
179
+
180
+ self._reset_parameters()
181
+
182
+ def _reset_parameters(self):
183
+ for p in self.parameters():
184
+ if p.dim() > 1:
185
+ nn.init.xavier_uniform_(p)
186
+
187
+ def with_pos_embed(self, tensor, pos):
188
+ return tensor if pos is None else tensor + pos
189
+
190
+ def forward_post(
191
+ self, tgt, attn_mask=None, tgt_key_padding_mask=None, query_pos=None
192
+ ):
193
+ q = k = self.with_pos_embed(tgt, query_pos)
194
+ tgt2 = self.self_attn(
195
+ q,
196
+ k,
197
+ value=tgt,
198
+ attn_mask=attn_mask,
199
+ key_padding_mask=tgt_key_padding_mask,
200
+ )[0]
201
+ tgt = tgt + self.dropout(tgt2)
202
+ tgt = self.norm(tgt)
203
+
204
+ return tgt
205
+
206
+ def forward_pre(
207
+ self, tgt, attn_mask=None, tgt_key_padding_mask=None, query_pos=None
208
+ ):
209
+ tgt2 = self.norm(tgt)
210
+ q = k = self.with_pos_embed(tgt2, query_pos)
211
+ tgt2 = self.self_attn(
212
+ q,
213
+ k,
214
+ value=tgt2,
215
+ attn_mask=attn_mask,
216
+ key_padding_mask=tgt_key_padding_mask,
217
+ )[0]
218
+ tgt = tgt + self.dropout(tgt2)
219
+
220
+ return tgt
221
+
222
+ def forward(
223
+ self, tgt, attn_mask=None, tgt_key_padding_mask=None, query_pos=None
224
+ ):
225
+ if self.normalize_before:
226
+ return self.forward_pre(
227
+ tgt, attn_mask, tgt_key_padding_mask, query_pos
228
+ )
229
+ return self.forward_post(
230
+ tgt, attn_mask, tgt_key_padding_mask, query_pos
231
+ )
232
+
233
+
234
+ class CrossAttentionLayer(nn.Module):
235
+ def __init__(
236
+ self,
237
+ d_model,
238
+ nhead,
239
+ dropout=0.0,
240
+ activation="relu",
241
+ normalize_before=False,
242
+ batch_first=False,
243
+ ):
244
+ super().__init__()
245
+ self.multihead_attn = nn.MultiheadAttention(
246
+ d_model, nhead, dropout=dropout, batch_first=batch_first, add_zero_attn=True
247
+ )
248
+
249
+ self.norm = nn.LayerNorm(d_model)
250
+ self.dropout = nn.Dropout(dropout)
251
+
252
+ self.activation = get_activation_fn(activation)
253
+ self.normalize_before = normalize_before
254
+
255
+ self._reset_parameters()
256
+
257
+ def _reset_parameters(self):
258
+ for p in self.parameters():
259
+ if p.dim() > 1:
260
+ nn.init.xavier_uniform_(p)
261
+
262
+ def with_pos_embed(self, tensor, pos):
263
+ return tensor if pos is None else tensor + pos
264
+
265
+ def forward_post(
266
+ self,
267
+ tgt,
268
+ memory,
269
+ attn_mask=None,
270
+ memory_key_padding_mask=None,
271
+ pos=None,
272
+ query_pos=None,
273
+ ):
274
+ tgt2 = self.multihead_attn(
275
+ query=self.with_pos_embed(tgt, query_pos),
276
+ key=self.with_pos_embed(memory, pos),
277
+ value=memory,
278
+ attn_mask=attn_mask,
279
+ key_padding_mask=memory_key_padding_mask,
280
+ )[0]
281
+ tgt = tgt + self.dropout(tgt2)
282
+ tgt = self.norm(tgt)
283
+
284
+ return tgt
285
+
286
+ def forward_pre(
287
+ self,
288
+ tgt,
289
+ memory,
290
+ attn_mask=None,
291
+ memory_key_padding_mask=None,
292
+ pos=None,
293
+ query_pos=None,
294
+ ):
295
+ tgt2 = self.norm(tgt)
296
+
297
+ tgt2 = self.multihead_attn(
298
+ query=self.with_pos_embed(tgt2, query_pos),
299
+ key=self.with_pos_embed(memory, pos),
300
+ value=memory,
301
+ attn_mask=attn_mask,
302
+ key_padding_mask=memory_key_padding_mask,
303
+ )[0]
304
+ tgt = tgt + self.dropout(tgt2)
305
+
306
+ return tgt
307
+
308
+ def forward(
309
+ self,
310
+ tgt,
311
+ memory,
312
+ attn_mask=None,
313
+ memory_key_padding_mask=None,
314
+ pos=None,
315
+ query_pos=None,
316
+ ):
317
+ if self.normalize_before:
318
+ return self.forward_pre(
319
+ tgt,
320
+ memory,
321
+ attn_mask,
322
+ memory_key_padding_mask,
323
+ pos,
324
+ query_pos,
325
+ )
326
+ return self.forward_post(
327
+ tgt, memory, attn_mask, memory_key_padding_mask, pos, query_pos
328
+ )
329
+
330
+
331
+ class FFNLayer(nn.Module):
332
+ def __init__(
333
+ self,
334
+ d_model,
335
+ dim_feedforward=2048,
336
+ dropout=0.0,
337
+ activation="relu",
338
+ normalize_before=False,
339
+ ):
340
+ super().__init__()
341
+ # Implementation of Feedforward model
342
+ self.linear1 = nn.Linear(d_model, dim_feedforward)
343
+ self.dropout = nn.Dropout(dropout)
344
+ self.linear2 = nn.Linear(dim_feedforward, d_model)
345
+
346
+ self.norm = nn.LayerNorm(d_model)
347
+
348
+ self.activation = get_activation_fn(activation)
349
+ self.normalize_before = normalize_before
350
+
351
+ self._reset_parameters()
352
+
353
+ def _reset_parameters(self):
354
+ for p in self.parameters():
355
+ if p.dim() > 1:
356
+ nn.init.xavier_uniform_(p)
357
+
358
+ def with_pos_embed(self, tensor, pos):
359
+ return tensor if pos is None else tensor + pos
360
+
361
+ def forward_post(self, tgt):
362
+ tgt2 = self.linear2(self.dropout(self.activation(self.linear1(tgt))))
363
+ tgt = tgt + self.dropout(tgt2)
364
+ tgt = self.norm(tgt)
365
+ return tgt
366
+
367
+ def forward_pre(self, tgt):
368
+ tgt2 = self.norm(tgt)
369
+ tgt2 = self.linear2(self.dropout(self.activation(self.linear1(tgt2))))
370
+ tgt = tgt + self.dropout(tgt2)
371
+ return tgt
372
+
373
+ def forward(self, tgt):
374
+ if self.normalize_before:
375
+ return self.forward_pre(tgt)
376
+ return self.forward_post(tgt)
377
+
378
+ def get_activation_fn(activation_type):
379
+ if activation_type not in ["relu", "gelu", "glu"]:
380
+ raise RuntimeError(f"activation function currently support relu/gelu, not {activation_type}")
381
+ return getattr(F, activation_type)
382
+
383
+ class MultiHeadAttentionSpatial(nn.Module):
384
+ def __init__(
385
+ self, d_model, n_head, dropout=0.1, spatial_multihead=True, spatial_dim=5,
386
+ spatial_attn_fusion='mul',
387
+ ):
388
+ super().__init__()
389
+ assert d_model % n_head == 0, 'd_model: %d, n_head: %d' % (d_model, n_head)
390
+
391
+ self.n_head = n_head
392
+ self.d_model = d_model
393
+ self.d_per_head = d_model // n_head
394
+ self.spatial_multihead = spatial_multihead
395
+ self.spatial_dim = spatial_dim
396
+ self.spatial_attn_fusion = spatial_attn_fusion
397
+
398
+ self.w_qs = nn.Linear(d_model, d_model)
399
+ self.w_ks = nn.Linear(d_model, d_model)
400
+ self.w_vs = nn.Linear(d_model, d_model)
401
+
402
+ self.fc = nn.Linear(d_model, d_model)
403
+
404
+ self.spatial_n_head = n_head if spatial_multihead else 1
405
+ if self.spatial_attn_fusion in ['mul', 'bias', 'add']:
406
+ self.pairwise_loc_fc = nn.Linear(spatial_dim, self.spatial_n_head)
407
+ elif self.spatial_attn_fusion == 'ctx':
408
+ self.pairwise_loc_fc = nn.Linear(spatial_dim, d_model)
409
+ elif self.spatial_attn_fusion == 'cond':
410
+ self.lang_cond_fc = nn.Linear(d_model, self.spatial_n_head * (spatial_dim + 1))
411
+ else:
412
+ raise NotImplementedError('unsupported spatial_attn_fusion %s' % (self.spatial_attn_fusion))
413
+
414
+ def forward(self, q, k, v, pairwise_locs, key_padding_mask=None, txt_embeds=None):
415
+ residual = q
416
+ q = einops.rearrange(self.w_qs(q), 'b l (head k) -> head b l k', head=self.n_head)
417
+ k = einops.rearrange(self.w_ks(k), 'b t (head k) -> head b t k', head=self.n_head)
418
+ v = einops.rearrange(self.w_vs(v), 'b t (head v) -> head b t v', head=self.n_head)
419
+ attn = torch.einsum('hblk,hbtk->hblt', q, k) / np.sqrt(q.shape[-1])
420
+
421
+ if self.spatial_attn_fusion in ['mul', 'bias', 'add']:
422
+ loc_attn = self.pairwise_loc_fc(pairwise_locs)
423
+ loc_attn = einops.rearrange(loc_attn, 'b l t h -> h b l t')
424
+ if self.spatial_attn_fusion == 'mul':
425
+ loc_attn = F.relu(loc_attn)
426
+ if not self.spatial_multihead:
427
+ loc_attn = einops.repeat(loc_attn, 'h b l t -> (h nh) b l t', nh=self.n_head)
428
+ elif self.spatial_attn_fusion == 'ctx':
429
+ loc_attn = self.pairwise_loc_fc(pairwise_locs)
430
+ loc_attn = einops.rearrange(loc_attn, 'b l t (h k) -> h b l t k', h=self.n_head)
431
+ loc_attn = torch.einsum('hblk,hbltk->hblt', q, loc_attn) / np.sqrt(q.shape[-1])
432
+ elif self.spatial_attn_fusion == 'cond':
433
+ spatial_weights = self.lang_cond_fc(residual)
434
+ spatial_weights = einops.rearrange(spatial_weights, 'b l (h d) -> h b l d', h=self.spatial_n_head,
435
+ d=self.spatial_dim + 1)
436
+ if self.spatial_n_head == 1:
437
+ spatial_weights = einops.repeat(spatial_weights, '1 b l d -> h b l d', h=self.n_head)
438
+ spatial_bias = spatial_weights[..., :1]
439
+ spatial_weights = spatial_weights[..., 1:]
440
+ loc_attn = torch.einsum('hbld,bltd->hblt', spatial_weights, pairwise_locs) + spatial_bias
441
+ loc_attn = torch.sigmoid(loc_attn)
442
+
443
+ if key_padding_mask is not None:
444
+ mask = einops.repeat(key_padding_mask, 'b t -> h b l t', h=self.n_head, l=q.size(2))
445
+ attn = attn.masked_fill(mask, -np.inf)
446
+ if self.spatial_attn_fusion in ['mul', 'cond']:
447
+ loc_attn = loc_attn.masked_fill(mask, 0)
448
+ else:
449
+ loc_attn = loc_attn.masked_fill(mask, -np.inf)
450
+
451
+ if self.spatial_attn_fusion == 'add':
452
+ fused_attn = (torch.softmax(attn, 3) + torch.softmax(loc_attn, 3)) / 2
453
+ else:
454
+ if self.spatial_attn_fusion in ['mul', 'cond']:
455
+ fused_attn = torch.log(torch.clamp(loc_attn, min=1e-6)) + attn
456
+ else:
457
+ fused_attn = loc_attn + attn
458
+ fused_attn = torch.softmax(fused_attn, 3)
459
+
460
+ assert torch.sum(torch.isnan(fused_attn) == 0), print(fused_attn)
461
+
462
+ output = torch.einsum('hblt,hbtv->hblv', fused_attn, v)
463
+ output = einops.rearrange(output, 'head b l v -> b l (head v)')
464
+ output = self.fc(output)
465
+ return output, fused_attn
466
+
467
+ class SpatialSelfAttentionLayer(nn.Module):
468
+ def __init__(
469
+ self,
470
+ d_model,
471
+ nhead,
472
+ dropout=0.0,
473
+ activation="relu",
474
+ normalize_before=False,
475
+ batch_first=False,
476
+ spatial_multihead=True, spatial_dim=5, spatial_attn_fusion='mul'
477
+ ):
478
+ super().__init__()
479
+ self.self_attn = MultiHeadAttentionSpatial(
480
+ d_model, nhead, dropout=dropout,
481
+ spatial_multihead=spatial_multihead,
482
+ spatial_dim=spatial_dim,
483
+ spatial_attn_fusion=spatial_attn_fusion,
484
+ )
485
+
486
+ self.norm = nn.LayerNorm(d_model)
487
+ self.dropout = nn.Dropout(dropout)
488
+
489
+ self.activation = get_activation_fn(activation)
490
+ self.normalize_before = normalize_before
491
+
492
+ self._reset_parameters()
493
+
494
+ def _reset_parameters(self):
495
+ for p in self.parameters():
496
+ if p.dim() > 1:
497
+ nn.init.xavier_uniform_(p)
498
+
499
+ def with_pos_embed(self, tensor, pos):
500
+ return tensor if pos is None else tensor + pos
501
+
502
+ def forward_post(
503
+ self, tgt, attn_mask=None, tgt_key_padding_mask=None, query_pos=None,
504
+ pairwise_locs=None
505
+ ):
506
+ q = k = self.with_pos_embed(tgt, query_pos)
507
+ tgt2 = self.self_attn(
508
+ q,
509
+ k,
510
+ tgt,
511
+ key_padding_mask=tgt_key_padding_mask,
512
+ pairwise_locs=pairwise_locs,
513
+ )[0]
514
+ tgt = tgt + self.dropout(tgt2)
515
+ tgt = self.norm(tgt)
516
+
517
+ return tgt
518
+
519
+ def forward_pre(
520
+ self, tgt, attn_mask=None, tgt_key_padding_mask=None, query_pos=None,
521
+ pairwise_locs=None
522
+ ):
523
+ tgt2 = self.norm(tgt)
524
+ q = k = self.with_pos_embed(tgt2, query_pos)
525
+ tgt2 = self.self_attn(
526
+ q,
527
+ k,
528
+ tgt,
529
+ key_padding_mask=tgt_key_padding_mask,
530
+ pairwise_locs=pairwise_locs,
531
+ )[0]
532
+ tgt = tgt + self.dropout(tgt2)
533
+
534
+ return tgt
535
+
536
+ def forward(
537
+ self, tgt, attn_mask=None, tgt_key_padding_mask=None, query_pos=None,
538
+ pairwise_locs=None
539
+ ):
540
+ if self.normalize_before:
541
+ return self.forward_pre(
542
+ tgt, attn_mask, tgt_key_padding_mask, query_pos,
543
+ pairwise_locs
544
+ )
545
+ return self.forward_post(
546
+ tgt, attn_mask, tgt_key_padding_mask, query_pos,
547
+ pairwise_locs
548
+ )
549
+
550
+ class QueryEncoderLayer(nn.Module):
551
+ def __init__(self, d_model, nhead, memories, dim_feedforward=2048, dropout=0.1, activation="relu", prenorm=False, spatial_selfattn=False, structure='mixed', memory_dropout=0, drop_memories_test=[]):
552
+ super().__init__()
553
+ if spatial_selfattn:
554
+ self.self_attn = SpatialSelfAttentionLayer(d_model, nhead, dropout=dropout, activation=activation, normalize_before=prenorm, batch_first=True)
555
+ else:
556
+ self.self_attn = SelfAttentionLayer(d_model, nhead, dropout=dropout, activation=activation, normalize_before=prenorm, batch_first=True)
557
+ cross_attn_layer = CrossAttentionLayer(d_model, nhead, dropout=dropout, activation=activation, normalize_before=prenorm, batch_first=True)
558
+ self.cross_attn_list = layer_repeat(cross_attn_layer, len(memories))
559
+ self.memory2ca = {memory:ca for memory, ca in zip(memories, self.cross_attn_list)}
560
+ self.ffn = FFNLayer(d_model, dim_feedforward, dropout=dropout, activation=activation, normalize_before=prenorm)
561
+ self.structure = structure
562
+ self.memories = memories
563
+ self.memory_dropout = memory_dropout
564
+ self.drop_memories_test = drop_memories_test
565
+ if structure == 'gate':
566
+ self.gate_proj = nn.Linear(d_model, d_model)
567
+
568
+ def forward(self, query, input_dict, pairwise_locs=None):
569
+ _, query_masks, query_pos = input_dict['query']
570
+
571
+ def sequential_ca(query, memories):
572
+ for memory in memories:
573
+ cross_attn = self.memory2ca[memory]
574
+ feat, mask, pos = input_dict[memory]
575
+ if mask.ndim == 2:
576
+ memory_key_padding_mask = mask
577
+ attn_mask = None
578
+ else:
579
+ memory_key_padding_mask = None
580
+ attn_mask = mask
581
+ query = cross_attn(tgt=query, memory=feat, attn_mask=attn_mask, memory_key_padding_mask = memory_key_padding_mask, query_pos = query_pos, pos = pos)
582
+ return query
583
+
584
+ def parallel_ca(query, memories):
585
+ assert 'prompt' not in memories
586
+ query_list = []
587
+ for memory in memories:
588
+ cross_attn = self.memory2ca[memory]
589
+ feat, mask, pos = input_dict[memory]
590
+ if mask.ndim == 2:
591
+ memory_key_padding_mask = mask
592
+ attn_mask = None
593
+ else:
594
+ memory_key_padding_mask = None
595
+ attn_mask = mask
596
+ update = cross_attn(tgt=query, memory=feat, attn_mask=attn_mask, memory_key_padding_mask = memory_key_padding_mask, query_pos = query_pos, pos = pos)
597
+ query_list.append(update)
598
+ # training time memory dropout
599
+ if self.training and self.memory_dropout > 0.0:
600
+ dropout_mask = torch.rand(query.shape[0], len(memories), device=query.device) > self.memory_dropout
601
+ num_remained_memories = dropout_mask.sum(dim=1)
602
+ dropout_mask = torch.logical_or(dropout_mask, num_remained_memories.unsqueeze(-1) == 0)
603
+ num_remained_memories = dropout_mask.sum(dim=1)
604
+ query_tensor = torch.stack(query_list, dim=1)
605
+ query = (query_tensor * dropout_mask.unsqueeze(-1).unsqueeze(-1)).sum(dim=1) / num_remained_memories.unsqueeze(-1).unsqueeze(-1).float()
606
+ else:
607
+ query = torch.stack(query_list, dim=1).mean(dim=1)
608
+ return query
609
+
610
+ memories = self.memories if self.training else [m for m in self.memories if m not in self.drop_memories_test]
611
+
612
+ if self.structure == 'sequential':
613
+ query = sequential_ca(query, memories)
614
+ elif self.structure == 'parallel':
615
+ query = parallel_ca(query, memories)
616
+ elif self.structure == 'mixed':
617
+ # [mv,pc,vx] + prompt
618
+ query = parallel_ca(query, [m for m in memories if m != 'prompt'])
619
+ query = sequential_ca(query, ['prompt'])
620
+ elif self.structure == 'gate':
621
+ prompt = sequential_ca(query, ['prompt'])
622
+ gate = torch.sigmoid(self.gate_proj(prompt))
623
+ update = parallel_ca(query, [m for m in self.memories if m != 'prompt'])
624
+ query = (1. - gate) * query + gate * update
625
+ else:
626
+ raise NotImplementedError(f"Unknow structure type: {self.structure}")
627
+
628
+ if isinstance(self.self_attn, SpatialSelfAttentionLayer):
629
+ query = self.self_attn(query, tgt_key_padding_mask = query_masks, query_pos = query_pos,
630
+ pairwise_locs = pairwise_locs)
631
+ else:
632
+ query = self.self_attn(query, tgt_key_padding_mask = query_masks, query_pos = query_pos)
633
+ query = self.ffn(query)
634
+
635
+ return query
636
+
637
+ class QueryMaskEncoder(nn.Module):
638
+ def __init__(self, memories=[], memory_dropout=0.0, hidden_size=768, num_attention_heads=12, num_layers=4,
639
+ share_layer=False, spatial_selfattn=False, structure='sequential', drop_memories_test=[], use_self_mask=False, num_blocks=1):
640
+ super().__init__()
641
+
642
+ self.spatial_selfattn = spatial_selfattn
643
+ query_encoder_layer = QueryEncoderLayer(hidden_size, num_attention_heads, memories, spatial_selfattn=spatial_selfattn, structure=structure, memory_dropout=memory_dropout, drop_memories_test=drop_memories_test)
644
+ self.unified_encoder = layer_repeat(query_encoder_layer, num_layers, share_layer)
645
+
646
+ self.apply(_init_weights_bert)
647
+ self.memory_dropout = memory_dropout
648
+ self.scene_meomories = [x for x in memories if x != 'prompt']
649
+ self.drop_memories_test = drop_memories_test
650
+ self.use_self_mask = use_self_mask
651
+ self.num_heads = num_attention_heads
652
+ self.num_blocks = num_blocks
653
+
654
+ def forward(self, input_dict, pairwise_locs, mask_head=None):
655
+
656
+ predictions_class, predictions_mask = [], []
657
+
658
+ query = input_dict['query'][0]
659
+ voxel_feat = input_dict['voxel'][0] if 'voxel' in input_dict.keys() else None
660
+
661
+ for block_counter in range(self.num_blocks):
662
+ for i, layer in enumerate(self.unified_encoder):
663
+ if mask_head is not None:
664
+ output_class, outputs_mask, attn_mask = mask_head(query)
665
+ predictions_class.append(output_class)
666
+ predictions_mask.append(outputs_mask)
667
+ if self.use_self_mask:
668
+ attn_mask[attn_mask.all(-1)] = False # prevent query to attend to no point
669
+ attn_mask = attn_mask.repeat_interleave(self.num_heads, 0)
670
+ for memory in input_dict.keys():
671
+ if memory in ['query', 'prompt']:
672
+ continue
673
+ input_dict[memory][1] = attn_mask
674
+
675
+ if isinstance(voxel_feat, list):
676
+ input_dict['voxel'][0] = voxel_feat[i] # select voxel features from multi-scale
677
+ query = layer(query, input_dict, pairwise_locs)
678
+
679
+ return query, predictions_class, predictions_mask
680
+
681
+ class PromptType(IntEnum):
682
+ TXT = 1
683
+ IMAGE = 2
684
+ LOC = 3
685
+
686
+ class GroundHead(nn.Module):
687
+ def __init__(self, input_size=768, hidden_size=768, dropout=0.3):
688
+ super().__init__()
689
+ self.og3d_head = get_mlp_head(
690
+ input_size, hidden_size,
691
+ 1, dropout=dropout
692
+ )
693
+
694
+ def forward(self, obj_embeds, obj_masks=None, **kwargs):
695
+ og3d_logits = self.og3d_head(obj_embeds).squeeze(2)
696
+ if obj_masks is not None:
697
+ og3d_logits = og3d_logits.masked_fill_(obj_masks.logical_not(), -float('inf'))
698
+ return og3d_logits
699
+
700
+ class T5(nn.Module):
701
+ def __init__(self, variant='t5-small', input_size=768, use_projection=True, **kwargs):
702
+ super().__init__()
703
+ self.model = T5ForConditionalGeneration.from_pretrained(variant)
704
+ self.model.config.update(kwargs)
705
+ hidden_size = self.model.config.d_model
706
+ self.use_projection = use_projection
707
+ if use_projection:
708
+ self.input_proj = nn.Sequential(nn.Linear(input_size, hidden_size), nn.LayerNorm(hidden_size))
709
+ else:
710
+ assert input_size == hidden_size, "input_feat_size should be equal to hidden_size!"
711
+
712
+ def forward(self, query_embeds, attention_masks, labels=None):
713
+ if self.use_projection:
714
+ query_embeds = self.input_proj(query_embeds)
715
+
716
+ if labels is not None:
717
+ outputs = self.model(encoder_outputs=[query_embeds], attention_mask=attention_masks, labels=labels)
718
+ outputs = outputs.logits
719
+ else:
720
+ outputs = self.model.generate(encoder_outputs=BaseModelOutput(last_hidden_state=query_embeds), attention_mask=attention_masks, do_sample=False)
721
+ outputs = outputs[:, 1:] # remove the decoder start token for T5 generation output.
722
+ return outputs
723
+
724
+ def calc_pairwise_locs(obj_centers, obj_whls, eps=1e-10, pairwise_rel_type='center', spatial_dist_norm=True,
725
+ spatial_dim=5):
726
+ if pairwise_rel_type == 'mlp':
727
+ obj_locs = torch.cat([obj_centers, obj_whls], 2)
728
+ pairwise_locs = torch.cat(
729
+ [einops.repeat(obj_locs, 'b l d -> b l x d', x=obj_locs.size(1)),
730
+ einops.repeat(obj_locs, 'b l d -> b x l d', x=obj_locs.size(1))],
731
+ dim=3
732
+ )
733
+ return pairwise_locs
734
+
735
+ pairwise_locs = einops.repeat(obj_centers, 'b l d -> b l 1 d') \
736
+ - einops.repeat(obj_centers, 'b l d -> b 1 l d')
737
+ pairwise_dists = torch.sqrt(torch.sum(pairwise_locs ** 2, 3) + eps) # (b, l, l)
738
+ if spatial_dist_norm:
739
+ max_dists = torch.max(pairwise_dists.view(pairwise_dists.size(0), -1), dim=1)[0]
740
+ norm_pairwise_dists = pairwise_dists / einops.repeat(max_dists, 'b -> b 1 1')
741
+ else:
742
+ norm_pairwise_dists = pairwise_dists
743
+
744
+ if spatial_dim == 1:
745
+ return norm_pairwise_dists.unsqueeze(3)
746
+
747
+ pairwise_dists_2d = torch.sqrt(torch.sum(pairwise_locs[..., :2] ** 2, 3) + eps)
748
+ if pairwise_rel_type == 'center':
749
+ pairwise_locs = torch.stack(
750
+ [norm_pairwise_dists, pairwise_locs[..., 2] / pairwise_dists,
751
+ pairwise_dists_2d / pairwise_dists, pairwise_locs[..., 1] / pairwise_dists_2d,
752
+ pairwise_locs[..., 0] / pairwise_dists_2d],
753
+ dim=3
754
+ )
755
+ elif pairwise_rel_type == 'vertical_bottom':
756
+ bottom_centers = torch.clone(obj_centers)
757
+ bottom_centers[:, :, 2] -= obj_whls[:, :, 2]
758
+ bottom_pairwise_locs = einops.repeat(bottom_centers, 'b l d -> b l 1 d') \
759
+ - einops.repeat(bottom_centers, 'b l d -> b 1 l d')
760
+ bottom_pairwise_dists = torch.sqrt(torch.sum(bottom_pairwise_locs ** 2, 3) + eps) # (b, l, l)
761
+ bottom_pairwise_dists_2d = torch.sqrt(torch.sum(bottom_pairwise_locs[..., :2] ** 2, 3) + eps)
762
+ pairwise_locs = torch.stack(
763
+ [norm_pairwise_dists,
764
+ bottom_pairwise_locs[..., 2] / bottom_pairwise_dists,
765
+ bottom_pairwise_dists_2d / bottom_pairwise_dists,
766
+ pairwise_locs[..., 1] / pairwise_dists_2d,
767
+ pairwise_locs[..., 0] / pairwise_dists_2d],
768
+ dim=3
769
+ )
770
+
771
+ if spatial_dim == 4:
772
+ pairwise_locs = pairwise_locs[..., 1:]
773
+ return pairwise_locs
774
+
775
+ class Query3DUnified(torch.nn.Module):
776
+ def __init__(self):
777
+ super().__init__()
778
+ # record parameters
779
+ self.memories = ['mv', 'pc', 'voxel', 'prompt']
780
+ self.heads = ['ground', 'generation']
781
+ self.use_offline_voxel_fts = True
782
+ self.use_offline_attn_mask = False
783
+ self.inputs = self.memories[:]
784
+ self.pairwise_rel_type = 'center'
785
+ self.spatial_dim = 5
786
+ self.num_heads = 12
787
+ self.skip_query_encoder_mask_pred = True
788
+ # build prompt type
789
+ self.prompt_types = ['txt', 'loc']
790
+ # build feature encoder
791
+ self.txt_encoder = CLIPLanguageEncoder(use_projection=True, projection_type='mlp', num_projection_layers=1)
792
+ self.mv_encoder = ObjectEncoder(input_feat_size=768, hidden_size=768, use_projection=True, dropout=0.1, use_cls_head=False)
793
+ self.voxel_encoder = ObjectEncoder(input_feat_size=128,hidden_size=768, use_projection=True, dropout=0.1, use_cls_head=False)
794
+ self.pc_encoder = ObjectEncoder(input_feat_size=768, hidden_size=768, dropout=0.1,use_cls_head=False)
795
+ # build location encoder
796
+ dim_loc = 6
797
+ hidden_size = 768
798
+ self.dim_loc = dim_loc
799
+ self.hidden_size = hidden_size
800
+ self.coord_encoder = nn.Sequential(
801
+ nn.Linear(3, hidden_size),
802
+ nn.LayerNorm(hidden_size),
803
+ )
804
+ self.box_encoder = nn.Sequential(
805
+ nn.Linear(3, hidden_size),
806
+ nn.LayerNorm(hidden_size),
807
+ )
808
+ # build unified encoder
809
+ self.unified_encoder = QueryMaskEncoder(hidden_size=768, num_attention_heads=12, num_layers=4, spatial_selfattn=True, memories=self.memories, drop_memories_test=[], memory_dropout=0.6, structure='mixed', use_self_mask=False, num_blocks=1)
810
+ # build task head
811
+ self.ground_head = GroundHead(hidden_size=384, input_size=768, dropout=0.3)
812
+ self.generation_head = T5(variant='t5-small', input_size=768, use_projection=True, max_new_tokens=50)
813
+
814
+ def prompt_encoder(self, data_dict):
815
+ prompt = data_dict['prompt']
816
+ prompt_pad_masks = data_dict['prompt_pad_masks']
817
+ prompt_type = data_dict['prompt_type']
818
+ prompt_feat = torch.zeros(prompt.shape + (self.hidden_size,), device=prompt.device)
819
+ for type in self.prompt_types:
820
+ # get idx
821
+ idx = prompt_type == getattr(PromptType, type.upper())
822
+ if idx.sum() == 0:
823
+ continue
824
+ input = prompt[idx]
825
+ mask = prompt_pad_masks[idx]
826
+ # encode
827
+ if type == 'txt':
828
+ encoder = self.txt_encoder
829
+ feat = encoder(input.long(), mask)
830
+ elif type == 'loc':
831
+ loc_prompts = input[:, :self.dim_loc]
832
+ if self.dim_loc > 3:
833
+ feat = self.coord_encoder(loc_prompts[:, :3]).unsqueeze(1) + self.box_encoder(loc_prompts[:, 3:6]).unsqueeze(1)
834
+ mask[:, 1:] = False
835
+ else:
836
+ raise NotImplementedError(f'{type} is not implemented')
837
+ # put back to orignal prompt
838
+ prompt_feat[idx] = feat
839
+ prompt_pad_masks[idx] = mask
840
+ return prompt_feat, prompt_pad_masks.logical_not()
841
+
842
+ def forward(self, data_dict):
843
+ input_dict = {}
844
+ # build query
845
+ mask = data_dict['query_pad_masks'].logical_not()
846
+ query_locs = data_dict['query_locs'][:, :, :self.dim_loc]
847
+ if self.dim_loc > 3:
848
+ query_pos = self.coord_encoder(query_locs[:, :, :3]) + self.box_encoder(query_locs[:, :, 3:6])
849
+ feat = torch.zeros_like(query_pos)
850
+ pos = query_pos
851
+ input_dict['query'] = (feat, mask, pos)
852
+ # encode fts including point, voxel, image, and prompt
853
+ # the semantics of the attention mask in pytorch (True as masked) is the opposite as Huggingface Transformers (False as masked)
854
+ fts_locs = data_dict['seg_center']
855
+ if self.dim_loc > 3:
856
+ fts_pos = self.coord_encoder(fts_locs[:, :, :3]) + self.box_encoder(fts_locs[:, :, 3:6])
857
+ if self.dim_loc > 3:
858
+ fts_pos += self.box_encoder(fts_locs[:, :, 3:6])
859
+ for input in self.inputs:
860
+ feat, mask, pos = None, None, None
861
+ if input == 'prompt':
862
+ feat, mask = self.prompt_encoder(data_dict)
863
+ elif input == 'mv':
864
+ feat = self.mv_encoder(obj_feats = data_dict['mv_seg_fts'])
865
+ mask = data_dict['mv_seg_pad_masks'].logical_not()
866
+ pos = fts_pos
867
+ elif input == 'pc':
868
+ feat = self.pc_encoder(obj_feats = data_dict['pc_seg_fts'])
869
+ mask = data_dict['pc_seg_pad_masks'].logical_not()
870
+ pos = fts_pos
871
+ elif input == 'voxel':
872
+ feat = self.voxel_encoder(data_dict['voxel_seg_fts'])
873
+ mask = data_dict['voxel_seg_pad_masks'].logical_not()
874
+ pos = fts_pos
875
+ else:
876
+ raise NotImplementedError(f"Unknow input type: {input}")
877
+ input_dict[input] = [feat, mask, pos]
878
+ # build offline attention mask for guided mask training
879
+ if self.use_offline_attn_mask:
880
+ offline_attn_masks = data_dict['offline_attn_mask']
881
+ else:
882
+ offline_attn_masks = None
883
+ mask_head_partial = None
884
+ # generate features for spatial attention
885
+ if self.unified_encoder.spatial_selfattn:
886
+ pairwise_locs = calc_pairwise_locs(query_locs[:, :, :3], None,
887
+ pairwise_rel_type=self.pairwise_rel_type, spatial_dist_norm=True,
888
+ spatial_dim=self.spatial_dim)
889
+ else:
890
+ pairwise_locs = None
891
+
892
+ # unified encoding
893
+ query, predictions_class, predictions_mask = self.unified_encoder(input_dict, pairwise_locs, mask_head_partial)
894
+
895
+ # task head
896
+ for head in self.heads:
897
+ if head == 'ground':
898
+ inputs = [query, data_dict['query_pad_masks']]
899
+ logits = getattr(self, head + '_head')(*inputs)
900
+ data_dict[head + '_logits'] = logits
901
+ data_dict['og3d_logits'] = logits
902
+ elif head == 'generation':
903
+ inputs = [query, data_dict['query_pad_masks']] + [None]
904
+ logits = getattr(self, head + '_head')(*inputs)
905
+ data_dict[head + '_logits'] = logits
906
+ else:
907
+ raise NotImplementedError(f"Unknow head type: {head}")
908
+
909
+ return data_dict
pq3d/utils.py ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import csv
2
+ import numpy as np
3
+ import torch
4
+
5
+
6
+ def convert_pc_to_box(obj_pc):
7
+ xmin = np.min(obj_pc[:,0])
8
+ ymin = np.min(obj_pc[:,1])
9
+ zmin = np.min(obj_pc[:,2])
10
+ xmax = np.max(obj_pc[:,0])
11
+ ymax = np.max(obj_pc[:,1])
12
+ zmax = np.max(obj_pc[:,2])
13
+ center = [(xmin+xmax)/2, (ymin+ymax)/2, (zmin+zmax)/2]
14
+ box_size = [xmax-xmin, ymax-ymin, zmax-zmin]
15
+ return center, box_size
16
+
17
+ class LabelConverter(object):
18
+ def __init__(self, file_path):
19
+ self.raw_name_to_id = {}
20
+ self.nyu40id_to_id = {}
21
+ self.nyu40_name_to_id = {}
22
+ self.scannet_name_to_scannet_id = {'cabinet':0, 'bed':1, 'chair':2, 'sofa':3, 'table':4,
23
+ 'door':5, 'window':6,'bookshelf':7,'picture':8, 'counter':9, 'desk':10, 'curtain':11,
24
+ 'refrigerator':12, 'shower curtain':13, 'toilet':14, 'sink':15, 'bathtub':16, 'others':17}
25
+ self.id_to_scannetid = {}
26
+ self.scannet_raw_id_to_raw_name = {}
27
+ self.raw_name_to_scannet_raw_id = {}
28
+
29
+ with open(file_path, encoding='utf-8') as fd:
30
+ rd = list(csv.reader(fd, delimiter="\t", quotechar='"'))
31
+ for i in range(1, len(rd)):
32
+ raw_id = i - 1
33
+ scannet_raw_id = int(rd[i][0])
34
+ raw_name = rd[i][1]
35
+ nyu40_id = int(rd[i][4])
36
+ nyu40_name = rd[i][7]
37
+ self.raw_name_to_id[raw_name] = raw_id
38
+ self.scannet_raw_id_to_raw_name[scannet_raw_id] = raw_name
39
+ self.raw_name_to_scannet_raw_id[raw_name] = scannet_raw_id
40
+ self.nyu40id_to_id[nyu40_id] = raw_id
41
+ self.nyu40_name_to_id[nyu40_name] = raw_id
42
+ if nyu40_name not in self.scannet_name_to_scannet_id:
43
+ self.id_to_scannetid[raw_id] = self.scannet_name_to_scannet_id['others']
44
+ else:
45
+ self.id_to_scannetid[raw_id] = self.scannet_name_to_scannet_id[nyu40_name]
46
+
47
+ def build_rotate_mat(split, rot_aug=True, rand_angle='axis'):
48
+ if rand_angle == 'random':
49
+ theta = np.random.rand() * np.pi * 2
50
+ else:
51
+ ROTATE_ANGLES = [0, np.pi/2, np.pi, np.pi*3/2]
52
+ theta_idx = np.random.randint(len(ROTATE_ANGLES))
53
+ theta = ROTATE_ANGLES[theta_idx]
54
+ if (theta is not None) and (theta != 0) and (split == 'train') and rot_aug:
55
+ rot_matrix = np.array([
56
+ [np.cos(theta), -np.sin(theta), 0],
57
+ [np.sin(theta), np.cos(theta), 0],
58
+ [0, 0, 1]
59
+ ], dtype=np.float32)
60
+ else:
61
+ rot_matrix = None
62
+ return rot_matrix
63
+
64
+ def obj_processing_post(obj_pcds, rot_aug=True):
65
+ obj_pcds = torch.from_numpy(obj_pcds)
66
+ rot_matrix = build_rotate_mat('val', rot_aug)
67
+ if rot_matrix is not None:
68
+ rot_matrix = torch.from_numpy(rot_matrix.transpose())
69
+ obj_pcds[:, :, :3] @= rot_matrix
70
+
71
+ xyz = obj_pcds[:, :, :3]
72
+ center = xyz.mean(1)
73
+ xyz_min = xyz.min(1).values
74
+ xyz_max = xyz.max(1).values
75
+ box_center = (xyz_min + xyz_max) / 2
76
+ size = xyz_max - xyz_min
77
+ obj_locs = torch.cat([center, size], dim=1)
78
+ obj_boxes = torch.cat([box_center, size], dim=1)
79
+
80
+ # centering
81
+ obj_pcds[:, :, :3].sub_(obj_pcds[:, :, :3].mean(1, keepdim=True))
82
+
83
+ # normalization
84
+ max_dist = (obj_pcds[:, :, :3]**2).sum(2).sqrt().max(1).values
85
+ max_dist.clamp_(min=1e-6)
86
+ obj_pcds[:, :, :3].div_(max_dist[:, None, None])
87
+
88
+ return obj_pcds, obj_locs, obj_boxes, rot_matrix
89
+
90
+
91
+ def pad_sequence(sequence_list, max_len=None, pad=0, return_mask=False):
92
+ lens = [x.shape[0] for x in sequence_list]
93
+ if max_len is None:
94
+ max_len = max(lens)
95
+
96
+ shape = list(sequence_list[0].shape)
97
+ shape[0] = max_len
98
+ shape = [len(sequence_list)] + shape
99
+ dtype = sequence_list[0].dtype
100
+ device = sequence_list[0].device
101
+ padded_sequence = torch.ones(shape, dtype=dtype, device=device) * pad
102
+ for i, tensor in enumerate(sequence_list):
103
+ padded_sequence[i, :tensor.shape[0]] = tensor
104
+ padded_sequence = padded_sequence.to(dtype)
105
+
106
+ if return_mask:
107
+ mask = torch.arange(max_len).to(device)[None, :] >= torch.LongTensor(lens).to(device)[:, None] # True as masked.
108
+ return padded_sequence, mask
109
+ else:
110
+ return padded_sequence
requirements.txt ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ aiofiles==23.2.1
2
+ altair==5.3.0
3
+ annotated-types==0.7.0
4
+ anyio==4.4.0
5
+ attrs==23.2.0
6
+ Brotli @ file:///croot/brotli-split_1714483155106/work
7
+ certifi @ file:///croot/certifi_1720453481653/work/certifi
8
+ chamfer==2.0.0
9
+ chardet @ file:///tmp/build/80754af9/chardet_1607706775000/work
10
+ charset-normalizer @ file:///tmp/build/80754af9/charset-normalizer_1630003229654/work
11
+ click==8.1.7
12
+ contourpy==1.2.1
13
+ cycler==0.12.1
14
+ dnspython==2.6.1
15
+ einops==0.8.0
16
+ email_validator==2.2.0
17
+ exceptiongroup==1.2.1
18
+ fastapi==0.111.0
19
+ fastapi-cli==0.0.4
20
+ ffmpy==0.3.2
21
+ filelock @ file:///croot/filelock_1700591183607/work
22
+ fonttools==4.53.1
23
+ fsspec==2024.6.1
24
+ gmpy2 @ file:///tmp/build/80754af9/gmpy2_1645438755360/work
25
+ gradio==4.37.2
26
+ gradio_client==1.0.2
27
+ h11==0.14.0
28
+ httpcore==1.0.5
29
+ httptools==0.6.1
30
+ httpx==0.27.0
31
+ huggingface-hub==0.23.4
32
+ idna @ file:///croot/idna_1714398848350/work
33
+ importlib_resources==6.4.0
34
+ Jinja2 @ file:///croot/jinja2_1716993405101/work
35
+ jsonschema==4.23.0
36
+ jsonschema-specifications==2023.12.1
37
+ kiwisolver==1.4.5
38
+ markdown-it-py==3.0.0
39
+ MarkupSafe @ file:///croot/markupsafe_1704205993651/work
40
+ matplotlib==3.9.1
41
+ mdurl==0.1.2
42
+ mkl-fft @ file:///croot/mkl_fft_1695058164594/work
43
+ mkl-random @ file:///croot/mkl_random_1695059800811/work
44
+ mkl-service==2.4.0
45
+ mpmath @ file:///croot/mpmath_1690848262763/work
46
+ networkx @ file:///croot/networkx_1717597493534/work
47
+ numpy @ file:///croot/numpy_and_numpy_base_1708638617955/work/dist/numpy-1.26.4-cp39-cp39-linux_x86_64.whl#sha256=6094eeedd869502faa0fd0a8c5ad3a70c5779be06ddd1feb7627e5c212fac420
48
+ nvidia-cublas-cu12==12.1.3.1
49
+ nvidia-cuda-cupti-cu12==12.1.105
50
+ nvidia-cuda-nvrtc-cu12==12.1.105
51
+ nvidia-cuda-runtime-cu12==12.1.105
52
+ nvidia-cudnn-cu12==8.9.2.26
53
+ nvidia-cufft-cu12==11.0.2.54
54
+ nvidia-curand-cu12==10.3.2.106
55
+ nvidia-cusolver-cu12==11.4.5.107
56
+ nvidia-cusparse-cu12==12.1.0.106
57
+ nvidia-nccl-cu12==2.20.5
58
+ nvidia-nvjitlink-cu12==12.5.82
59
+ nvidia-nvtx-cu12==12.1.105
60
+ orjson==3.10.6
61
+ packaging==24.1
62
+ pandas==2.2.2
63
+ pillow @ file:///croot/pillow_1714398848491/work
64
+ pydantic==2.8.2
65
+ pydantic_core==2.20.1
66
+ pydub==0.25.1
67
+ Pygments==2.18.0
68
+ pyparsing==3.1.2
69
+ PySocks @ file:///tmp/build/80754af9/pysocks_1605305812635/work
70
+ python-dateutil==2.9.0.post0
71
+ python-dotenv==1.0.1
72
+ python-multipart==0.0.9
73
+ pytz==2024.1
74
+ PyYAML==6.0.1
75
+ referencing==0.35.1
76
+ regex==2024.5.15
77
+ requests==2.32.3
78
+ rich==13.7.1
79
+ rpds-py==0.19.0
80
+ ruff==0.5.1
81
+ safetensors==0.4.3
82
+ semantic-version==2.10.0
83
+ shellingham==1.5.4
84
+ six==1.16.0
85
+ sniffio==1.3.1
86
+ starlette==0.37.2
87
+ sympy @ file:///croot/sympy_1701397643339/work
88
+ tokenizers==0.19.1
89
+ tomlkit==0.12.0
90
+ toolz==0.12.1
91
+ torch==2.0.0
92
+ torchaudio==2.0.0
93
+ torchvision==0.15.0
94
+ tqdm==4.66.4
95
+ transformers==4.42.3
96
+ triton==2.0.0
97
+ typer==0.12.3
98
+ typing_extensions @ file:///croot/typing_extensions_1715268824938/work
99
+ tzdata==2024.1
100
+ ujson==5.10.0
101
+ urllib3 @ file:///croot/urllib3_1718912636303/work
102
+ uvicorn==0.30.1
103
+ uvloop==0.19.0
104
+ watchfiles==0.22.0
105
+ websockets==11.0.3
106
+ zipp==3.19.2