AI2-THOR (The House Of inteRactions) 是一种用于AI智能体的逼真的可交互框架。AI2-THOR由室内场景组成,其中AI智能体可以在场景中导航并与物体交互以执行任务。 AI2-THOR的目的是促进视觉智能模型的开发,并推动该领域的研究。
详细信息可以浏览AI2-THOR GitHub和AI2-THOR视频介绍。
1. 安装
AI2-THOR对系统的配置要求如下:
- OS: Mac OS X 10.9+, Ubuntu 14.04+
- Graphics Card: DX9 (shader model
3.0) or DX11 with feature level 9.3 capabilities - CPU: SSE2 instruction set support
- Python 2.7 or Python 3.5+
- Linux users: X server with GLX module enabled
你可以使用pip
安装AI2-THOR的最新版本,本博客撰写时当前的最新版本为2.3.4。 创建一个Python 2或者Python 3虚拟环境,并运行:
$ pip install ai2thor
AI2-THOR发展到现在具有多个版本,每个版本差异明显。你可以参见AI2-THOR历史版本对其他版本进行安装。
在运行以下代码之前,请确保具有OpenGL的X服务器正在运行,并且已为图形卡安装了OpenGL扩展。
import ai2thor.controller
controller = ai2thor.controller.Controller()
首次初始化Controller时,包含3D场景的游戏环境将下载到$ HOME/.ai2thor
。 二进制文件的大小约为500MB。
2. 简介
AI2-THOR
现在分为 iTHOR 和 RoboTHOR。
iTHOR 的特性如下:
- 120个房间。房间类型包括厨房,卧室,浴室和客厅,每种房间类型包括30个不同的房间。
- 2000种可用于AI智能体与之交互的不同物体
- 基于Unity 3D,可对物体和场景进行物理模拟
- 包括具有视觉状态可更改的物体,包括打开/关闭(open/close),打开/关闭(on/off),热/冷 (hot/cold)
- 支持多种智能体类型,例如人形机器人和无人机
- 在单个场景中支持多个智能体
RoboTHOR 的特性如下:
- 75套带有600多个物体的公寓,供AI智能体在其中导航
- 14套公寓的物理和模拟对口
- 将Locobot机器人与Kinect相机配合使用
- 从资产库中以模块化方式构建公寓
- 实体公寓可轻松重新配置
- 所有人均可访问的仿真和真实环境
iTHOR | RoboTHOR |
---|---|
概念 | |
场景 | |
物体 | |
动作 | |
元数据 |
3. iTHOR
iTHOR是AI2-THOR框架内的环境,其中包括一组交互式对象和场景,并提供了精确的世界物理建模。
iTHOR建立在Unity物理引擎之上,并为物体和场景的物理属性建模:质量,摩擦,弹跳等。
iTHOR提供了物体操作:拾取物体,放置物体,推动物体等。
iTHOR可以更改物体的状态,例如打开/关闭微波炉,烹饪食物,打开/关闭灯。
iTHOR支持使用不同类型的多个智能体执行任务。
3.1 概念
AI2-THOR中的常见的概念及其描述如下:
概念 | 描述 |
---|---|
Agent | 智能体是一个实体,可以在场景中导航并与物体进行交互。 |
Scene | AI2-THOR中的场景表示智能体可以导航并与其交互的虚拟房间。 有4个场景类别,每个类别中有30个独特的场景:厨房,客厅,卧室,浴室。 |
Action | 动作是智能体在场景中执行的离散命令(例如MoveAhead,RotateRight,PickupObject) |
Sim Object | sim物体是智能体可以与之交互的物体。 根据物体类型定义的不同,物体具有很广泛地交互类型。 |
Object Visibility | 满足以下三个条件的物体将被视为“可见”:该物体必须在相机的视野内,并且必须在距智能体中心的距离阈值之内(默认值:1.5米),并且相机发出的光线必须先击中物体,而不能先击中其他障碍物。 请注意,在图像中渲染的物体并不总是对智能体可见。 例如,在图像中可以看到超出1.5米阈值的物体,但该对象将被报告为对物体不可见。 |
Object Interactability | 如果一个物体被标记为可见并且不受任何其他物体的阻碍,则该物体被称为是可交互的。 大多数物体都是可交互的,只要它们也是可见的,但是某些物体具有透明性,这会导致通过它们将物体报告为可见的。 一个示例是玻璃淋浴门,其后有海绵物体。 玻璃门将被标记为“可见且可交互”,但海绵仅是可见的。 尝试与海绵互动将引发错误,因为只能通过玻璃门才能看到它。 |
Receptacle | 一种可以包含另一个物体的物体。 容器的一些示例包括:桌面,杯子,沙发,床,桌子,碗等。某些容器不能在场景中移动,而且大多是大型物体,移动起来没有意义(厨房台面、水槽等)。 某些容器也可以打开和关闭(微波炉,橱柜,抽屉等),而一些其他容器也可以由智能体拿起并移动(盘子,碗,盒子等)。 |
3.2 场景
iTHOR环境中共有120个场景,涵盖四种不同的房间类别:厨房,客厅,卧室和浴室。 每个房间都有一组可以在其中找到的物体。 注意,某些物体类型可以在给定类别的所有场景中找到,而某些物体类型有时仅在特定类别的场景中可以找到。
在场景初始化期间,可以将物体放置在不同的容器上,因此我们可以为单个场景获得许多不同的配置。 因此,配置数量远大于120。
场景类别 | 描述 |
---|---|
厨房 | 30 scenes, FloorPlan1 - FloorPlan30 |
客厅 | 30 scenes, FloorPlan201 - FloorPlan230 |
卧室 | 30 scenes, FloorPlan301 - FloorPlan330 |
浴室 | 30 scenes, FloorPlan401 - FloorPlan430 |
3.3 物体
在iTHOR中,与物体的交互取决于物体的物理属性。
3.3.1 物体类型
AI2-THOR中有115种物体类型。 每种物体类型都具有与之相关的可操作属性、材质属性和物体位置(在场景类别内)。 此外,某些物体与其他物体或环境的某些部分具有上下文交互作用,这可能导致物体状态动态变化。
物体类型表格如下:
# | 物体类型 | 中文名称 |
---|---|---|
1 | AlarmClock | |
2 | Apple | |
3 | AppleSliced | |
4 | ArmChair | |
5 | BaseballBat | |
6 | BasketBall | |
7 | Bathtub | |
8 | BathtubBasin | |
9 | Bed | |
10 | Blinds | |
11 | Book | |
12 | Boots | |
13 | Bottle | |
14 | Bowl | |
15 | Box | |
16 | Bread | |
17 | BreadSliced | |
18 | ButterKnife | |
19 | Cabinet | |
20 | Candle | |
21 | Cart | |
22 | CD | |
23 | CellPhone | |
24 | Chair | |
25 | Cloth | |
26 | CoffeeMachine | |
27 | CoffeeTable | |
28 | CounterTop | |
29 | CreditCard | |
30 | Cup | |
31 | Curtains | |
32 | Desk | |
33 | DeskLamp | |
34 | DiningTable | |
35 | DishSponge | |
36 | Drawer | |
37 | Dresser | |
38 | Egg | |
39 | EggCracked | |
40 | Faucet | |
41 | FloorLamp | |
42 | Footstool | |
43 | Fork | |
44 | Fridge | |
45 | GarbageCan | |
46 | HandTowel | |
47 | HandTowelHolder | |
48 | HousePlant | |
49 | Kettle | |
50 | KeyChain | |
51 | Knife | |
52 | Ladle | |
53 | Laptop | |
54 | LaundryHamper | |
55 | LaundryHamperLid | |
56 | Lettuce | |
57 | LettuceSliced | |
58 | LightSwitch | |
59 | Microwave | |
60 | Mirror | |
61 | Mug | |
62 | Newspaper | |
63 | Ottoman | |
64 | Painting | |
65 | Pan | |
66 | PaperTowel | |
67 | Pen | |
68 | Pencil | |
69 | PepperShaker | |
70 | Pillow | |
71 | Plate | |
72 | Plunger | |
73 | Poster | |
74 | Pot | |
75 | Potato | |
76 | PotatoSliced | |
77 | RemoteControl | |
78 | Safe | |
79 | SaltShaker | |
80 | ScrubBrush | |
81 | Shelf | |
82 | ShowerCurtain | |
83 | ShowerDoor | |
84 | ShowerGlass | |
85 | ShowerHead | |
86 | SideTable | |
87 | Sink | |
88 | SinkBasin | |
89 | SoapBar | |
90 | SoapBottle | |
91 | Sofa | |
92 | Spatula | |
93 | Spoon | |
94 | SprayBottle | |
95 | Statue | |
96 | StoveBurner | |
97 | StoveKnob | |
98 | TeddyBear | |
99 | Television | |
100 | TennisRacket | |
101 | TissueBox | |
102 | Toaster | |
103 | Toilet | |
104 | ToiletPaper | |
105 | ToiletPaperHanger | |
106 | Tomato | |
107 | TomatoSliced | |
108 | Towel | |
109 | TowelHolder | |
110 | TVStand | |
111 | Vase | |
112 | Watch | |
113 | WateringCan | |
114 | Window | |
115 | WineBottle |
3.3.2 可操作属性
该框架中的物体可以具有许多与物体类型关联的可操作属性。 可操作属性是具有与之关联的操作的特定属性。 例如,一个Openable物体意味着可以使用OpenObject和CloseObject操作与该对象进行交互。 以下是所有可操作属性及其详细说明的列表。
3.3.2.1 Openable
可以使用OpenObject和CloseObject操作打开或关闭这些物体。 可打开的容器允许将物体放置在其中。
3.3.2.2 Pickupable
智能体可以使用PickupObject和PutObject操作将这些对象拾取或放到Receptacles物体中。 也可以使用DropHandObject放置拾取的物体,该物体无需使用目标容器即可从Agent的手中移走该物体。 Throw是放下物体的扩展,其中添加了附加的力以使物体围绕场景投掷。 也可以使用Push和Pull动作将可拾取的物体推到周围。 一些Receptacles物体也可以拾取。 放置在可拾取容器中的所有物体都可以立即移动,因此可以执行复杂的序列,例如(将苹果放在板上->移动苹果和板到水槽)。
3.3.2.3 On/Off
使用ToggleObjectOn和ToggleObjectOff操作与这些物体进行交互。 当打开或关闭所有打开/关闭物体时都会发生可见状态更改(即,笔记本电脑的屏幕将打开并显示图像,关闭时将显示空白)。
3.3.2.4 Receptacle
这些物体被分类为Receptacles,这意味着如果其他物体在物理上可以适合容器,则可以将其他物体放置在它们之上或之中。 某些容器是受限制的特定物体(例如,ToiletPaper是唯一可以放在ToiletPaperHanger上的类型)。 请注意,任何也可以拾取的容器都可以与它们活动包含的任何Sim物体一起在场景中移动(即:拾取装有苹果的板,以同时在场景中移动板和苹果)。
3.3.2.5 Fillable
使用FillObjectWithLiquid操作可以将各种液体填充到这些物体中。 可填充物体可以用水、咖啡或酒填充。 如果某个物体填充有一种液体类型,并且从全局向上轴旋转了90度以上,则该物体将自动清空自身,因为液体已经“溢出”。 另外,一些填充交互是上下文相关的。 例如,将空杯子放在打开的咖啡壶物体中将自动在杯子中装满咖啡。 同样,将空杯子移到正在运行的水龙头下会自动将杯子装满水。