为什么选择CORe50?
人工智能的最大目标之一是构建一个人工持续学习代理,它可以通过适应的,以目标为导向和增量发展更复杂的技能和知识。然而,持续/终身学习(CL)高维数据流是一个极具挑战性的研究问题,远未得到解决。事实上,由于计算和存储问题,每次新数据可用时,完全重新训练模型是不可行的,而幼稚的持续学习策略则受到灾难性遗忘此外,即使在现实世界中的物体识别应用程序(如机器人)中,持续学习至关重要,也很少有数据集和基准可用于评估和比较新兴技术。在本页中,我们提供了一个新的数据集和基准核心50,专门用于评估C类连续学习技巧在中O(运行)对象重新认知语境,以及三种不同持续学习情景的一些基线方法。此外,我们最近扩展了CORe50以支持目标检测和分段.如果您计划使用此数据集或本页中的其他资源,请引用相关论文:
文森佐·洛莫纳科(Vincenzo Lomonaco)、大卫·马尔托尼(Davide Maltoni)和洛伦佐·佩莱格里尼(Lorenzo Pellegrini)。“精细持续学习”。Arxiv Pre-print Arxiv:1907.037992019年。
目录
1.数据集
2.基准
2.1与其他通用CL基准的差异
3.下载
3.1数据集
3.2目标检测
3.3对象分割
3.4配置文件
3.5结果
3.6代码和数据加载器
4.联系人
数据集
核心50,专门为(C类)连续的(O(运行))对象(重新)认知,是一个由50件家用物品组成的集合,分为10类:插头适配器、手机、剪刀、灯泡、罐头、眼镜、球、马克笔、杯子和遥控器。分类可以在对象级别(50个类)或在类别级别(10个类)执行。第一项任务(默认任务)更具挑战性,因为在某些姿势下很难区分同一类别的对象。
数据集已在中收集11个不同的会议(8个室内,3个室外)具有不同背景和照明的特点。对于每个会话和每个对象,使用Kinect 2.0传感器记录了15秒的视频(每秒20帧),该传感器提供300个RGB-D帧。
操作员和摄像机手持物体视点是操作员的眼睛。操作员需要伸展手臂,平稳地移动/旋转摄像机前面的物体。物体在抓取距离处的主观视角非常适合许多机器人应用。抓取的手(左或右)在整个过程中都会发生变化,相关的对象遮挡通常是由手本身产生的。
图1 CORe50中50个对象的示例图像。每列表示10个类别中的一个。
以下人员的在场时间相干会话(即对象在摄像机前轻轻移动的视频)是另一个关键功能,因为时间平滑可以用于简化对象检测、提高分类精度和解决半监督的(或无监督的)场景。
在图1您可以在CORe50中看到50个对象的一些图像示例,其中每列表示10个类别中的一个,每行表示不同的对象。整个数据集由164866个128×128 RGB-D图像组成:11个会话×50个对象×(约300)帧/会话。十一节课中的三节(#3、#7和#10)已被选中进行测试,其余8节课用于培训。我们尽量平衡训练和测试的难度:室内/室外,握住手(左或右)和背景的复杂性。有关数据集的更多信息,请参阅“核心50“在中纸张.
基准
流行的数据集,如ImageNet公司和帕斯卡VOC,为分类和检测方法提供了一个非常好的平台。然而,它们的设计考虑到了“静态”评估协议;整个数据集只分为两部分:一个训练集用于(一次性)学习,另一个测试集用于准确性评估。将培训集拆分为多个批次至关重要培训和测试持续学习方法是当前备受关注的热门研究课题。不幸的是,大多数现有的数据集都不太适合这一目的,因为它们缺乏一个基本要素:在不同的会话(不同的背景、照明、姿势、遮挡等)中拍摄的相同对象的多个(不受约束的)视图的存在。围绕对象识别,我们考虑了三种持续学习场景:
- 新实例(NI):同一类的新训练模式在后续批次中可用,具有新的姿势和环境条件(照明、背景、遮挡等)。一个好的模型应该逐步巩固它对已知类的知识,而不会影响它以前学到的东西。
- 新类(NC):属于不同类别的新培训模式在后续批次中可用。在这种情况下,模型应该能够处理新类,而不会损失以前类的准确性。
- 新实例和类(NIC):属于已知类和新类的新训练模式在后续训练批次中可用。一个好的模型应该巩固它对已知类的知识,并学习新类。
许多研究人员认为,在复杂的现实世界场景中,天真的方法无法避免灾难性的遗忘,例如数控和网络接口卡.在我们的工作中,我们设计了简单基线这种策略的表现明显优于单纯的策略,但仍有很大的改进空间(参见图2). 查看我们的完整结果纸张或者在下面的部分中以tsv或python dicts的形式下载它们!与其他通用CL基准的差异
正如您可能从上述描述中注意到的,我们的基准与持续学习文献中使用的常见基准有所不同,其中重点主要是学习一系列(短)任务:
- 排列的MNIST
- MNIST拆分
- CIFAR10/100剥离
- Atari游戏公司
如果您想了解更多关于这一区别的信息,可以访问我们的“持续学习基准”我们在其中跟踪CL中所有最常见基准及其主要差异的网页(我们还跟踪最流行的基准“持续学习策略”以及他们被评估的基准在这里).请注意,为了简单起见,我们决定保持测试集固定所有批次(检查纸张有关此选择的进一步讨论)。
下载
为了方便基准的使用,我们免费发布了数据集、用于重现基准的代码以及所有可能有助于加速创建新的持续学习CORe50战略。
数据集
数据集目录树与您所期望的没有太大区别。对于每个会话(s1、s2。。。,第11节)我们有50个目录(氧气、氧气。。。,50度)表示数据集中包含的50个对象。下面您可以看到每个对象实例id对应的类:
[o1,…,o5]->插头适配器[o6,…,o10]->手机[o11,…,o15]->剪刀[o16,…,o20]->灯泡【o21,…,o25】->罐【o26,…,o30】->眼镜[o31,…,o35]->球[o36,…,o40]->标记[o41,…,o45]->罩杯[o46,…,o50]->遥控器
核心50_类名称.txt.CORe50类名的有序列表。
在每个对象目录中,时间相干帧的特征是具有以下格式的唯一文件名“C_[session_num]_[obj_num]_[frame_seq_id].png”:
核心50/||---第1页/||------第1页/|||----C_01_01_XXX.png| | |---- ...| |||------氧气/| |------ ...||------50岁/||---s2秒/|---第3节/|---。。。|---第11节/
由于我们提供了350 x 350的原始图像及其裁剪版本(128 x 128),因此我们认为释放与原始图像大小相关的边界框也很有用。
每个图像的bbox坐标都是基于一种非常简单的跟踪技术自动提取的,在纸张。在bbox.zip邮箱你可以在下面下载,你会发现每个对象和会话都有一个不同的txt文件。每个文件都遵循以下格式:
颜色000:142 160 269 287颜色001:143 160 270 287颜色002:145 160 272 287颜色003:149 160 276 287颜色004:149 159 276 286...
因此,对于每个图像颜色ID,我们有通用格式的bbox[最小x,最小y,最大x,最大y]的图像坐标系.
全尺寸_350x350_images.zip.350 x 350张图像,然后以png格式进行跟踪。
裁剪_128x128_images.zip.128 x 128个图像用于png格式的CORe50基准测试。
bbox.zip邮箱.txt格式的全尺寸版本的边界框。
如果您是Python用户,也可以从我们的npz版本的数据集中受益核心50_imgs.npz伴随着路径.pkl包含每个图像对应的路径的文件。
#加载npz和拾取的文件
>>>进口笨蛋作为净现值
>>>进口泡菜作为pkl公司
>>>pkl文件=打开('路径.pkl',“rb”)
>>>路径=pkl.load(pkl文件)
>>>国际货币基金组织=np.载荷('核心50_imgs.npz')['x']
#文件尺寸
>>>打印imgs.形状
(164866, 128, 128, 3)
>>>打印len(路径)
164866
核心50_imgs.npz.整个Cropped_128x128版本数据集的Np.uint8 PIL图像。
路径.pkl.包含core50_imgs.npz文件中每个图像对应补丁的字符串的Python列表。
为了更好地跟踪运动对象或进一步提高对象识别精度,我们还发布了深度图以我们之前看到的彩色图像的相同格式:
CORe50型/||---第1页/||------第1页/|||---D_01_01_XXX.png| | |---- ...| |||------氧气/| |------ ...||------50岁/||---s2秒/|---第3节/|--- ...|---第11节/
正如您从中看到的图3,深度图并不完美(可以执行进一步增强的预处理步骤),但也可以在分割图使用移动阈值。
图3 具有复杂背景的对象33的深度贴图示例(深色为远)。深度信息缺失的棋盘图案。
全尺寸_350x350_depth.zip.png格式的全尺寸版本的深度贴图(灰度,当深度信息缺失时是透明的)。
裁剪_128x128_depth.zip.png格式的裁剪版本的深度贴图(灰度,当深度信息缺失时是透明的)。
最后,为了确保一切就绪,您可以检查要为每个对象和会话查找的(颜色+深度)图像的准确数量:
目标检测
CORe50甚至可以用于对象检测。在这种情况下,我们已经提供了Tensorflow设置培训管道的记录:
鉴于这3个文件,可以根据Tensorflow对象检测API。一些视觉结果如所示图4:
但是,如果您希望使用另一个框架,可以使用逗号分隔的文件(.csv),其中包含每个图像的标签、id和边界框。
我们使用预先训练的SSD_移动网络_v1COCO数据集和微调CORe50上的最后一层。性能稳定在20k和30k迭代左右,精确度高达70%最大允许偏差。有关此的详细信息,请参阅储存库.
核心50_集群检测.zip.用于杂波检测的附加测试集。
我们还提供杂波中检测的附加测试集使用CORe50训练集中使用的相同对象以及相同类的额外样本外对象(见图5)。
对象分割
可以利用深度信息来近似分割CORe50对象。首先,我们创建了一个算法,在给定图像的情况下,丢弃属于背景的所有像素。然后,我们训练一个SVM分类器来识别手持像素。通过删除背景和手,我们得到的是对原始对象的分割。这些步骤如图6所示。
对象分割代码可用于此储存库。近似对象分割已经在许多论文中成功显示,如“通过观察物体移动来学习特征”,2016年.
配置文件
您想使用不同的DL框架或编程语言,但仍然能够将结果与我们的基准进行比较吗?这很容易!只是下载每个实验的批处理文件列表纯文本格式!文件列表目录树如下所示:
文件列表/||---NI_抄送/||------运行0/||---------列车_批次_文件列表.txt||---------列车_批次01_文件列表.txt| | |------ ...||------测试文件列表.txt| |||------运行1/| |------ ...||------运行9/||---无累积(_C)/|---NC _抄送/|---NC_总计/|---NIC _抄送/|---NIC(_C)/
因此,对于每个场景(NI、NC、NIC),我们都有两个不同的文件列表文件夹,这取决于主要策略,累积或增量_立方米或_公司后缀。然后,对于每个文件夹,都会报告10次不同运行的配置文件。对于每个运行“train_batch_XX_filelist.txt”与一起提供“test_filelist.txt”。每个文件都在caffe文件列表格式.
请注意即:
- 订单可能会产生很大影响持续学习场景中的准确性!这就是为什么需要多运行配置;
- 对于NC场景,每个运行的映射“对象->标签”不同这是因为一些CL策略倾向于每个增量批的标签都是连续的(即,如果我们有3个对象,我们希望标签正好是0、1和2)!
从文件列表恢复映射很简单,但有点繁琐,因此我们已经为您准备了一个Python dict(下面的下载链接),以便您轻松访问映射:
#加载拾取的文件
>>>进口泡菜作为pkl公司
>>>pkl文件=打开('标签2names.pkl',“rb”)
>>>标签2名称=pkl.load(pkl文件)
#使用类似dict的labels2names[scenario][run]
>>>打印经验[“ni”][0]
{0:“plug_adapter1”,1:“plag_adapter 2”,…}
标签2names.pkl.每个场景都有“label->object”映射的Python dict.
批处理文件列表.zip.每个实验和运行的纯文本文件列表.
批处理文件列表_NICv2.zip.第二篇论文“细粒度连续学习”中介绍的NICv2场景每次运行的纯文本文件列表.
测试文件列表摘要.txt.第二篇论文“细粒度连续学习”中引入的简化固定测试集,用于加速实验.
结果
如果您想将您的策略与我们的基准进行比较,或者只需仔细查看表格结果,我们将提供制表符分隔值(.tsv)每个实验的文件!您可以在excel中轻松导入或使用您最喜欢的编程语言进行解析;-)文本文件的格式如下:####################################场景:NI#净:中咖啡因#策略:天真###################################RunID Batch0 Batch1 Batch2 Batch3 Batch4 Batch5 Batch6 Batch70 44,30% 35,50% 55,26% 55,86% 54,39% 48,90% 47,77% 60,71%1 47,56%48,94%51,83%53,64%51,26%43,39%58,98%55,61%2 40,06% 53,04% 46,65% 45,19% 44,09% 50,92% 54,42% 57,01%3 46,29% 48,66% 54,64% 52,48% 44,36% 51,55% 50,64% 44,26%4 28,40% 43,77% 43,27% 51,00% 58,26% 56,89% 52,08% 61,94%5 34,65% 34,36% 50,14% 56,89% 59,67% 56,66% 56,16% 52,66%6 40,80% 51,92% 51,44% 53,12% 58,19% 49,72% 50,33% 48,14%7 30,96% 51,54% 46,28% 51,69% 56,88% 55,44% 55,72% 49,98%8 34,32% 32,19% 40,55% 52,06% 57,86% 57,41% 57,80% 61,86%9 46,06%47,62%51,80%46,92%42,30%57,70%59,98%50,01%平均38,59%44,44%48,90%52,44%53,88%52,32%53,77%54,69%dev.std 6,87%7,88%4,84%3,59%6,75%4,74%4,06%6,18%....
为了方便起见,我们针对三种不同的场景将.tsv分为三个主文件,但如果需要,可以使用此格式将它们轻松连接到单个文件中。为了进行更简单的分析,我们已经为您准备了一个Python pickled OrderedDict您可以简单地加载并使用它来访问/绘制结果:
#加载拾取的文件
>>>进口泡菜作为pkl公司
>>>pkl文件=打开('结果.pkl',“rb”)
>>>经验=pkl.load(pkl_file)
#使用类似dict的exps[scenario][net][strategy][run][batch]
>>>打印经验[“NI”][“中层咖啡”][“天真”]['平均值'].values()
[38.59, 44.44, 48.90, 52.44, 53.88, 52.32, 53.77, 54.69]
>>>打印经验[“NI”][“中层咖啡”][“天真”]['平均值']['批次0']
38.59
类似的方法可以用于序贯实验属于图5在论文中。您可以在中找到有关提取结果数据的更多代码示例自述.txt的Github回购。否则,您可以在此处直接下载tsv和python dict:
tsv_results.zip文件.每个场景的制表符分隔值结果.
tsv_nicv2_re结果.zip.NICv2方案的制表符分隔值结果.
结果.pkl.预加载Python dict(已腌制).
序列.tsv.连续实验的Tab-parated值结果.
序列_结果.pkl.序列实验的预加载Python dict(pickled).
代码和数据加载器
复制论文中实验的Python代码已经在这个github存储库!正如您可能已经注意到的那样,在CORe50上评估您自己的CL策略并不像加载npz文件那么简单,因为您必须处理大量的运行和配置。这也是我们提供超快的和灵活的 Python数据加载器这可以帮你处理。例如:
#导入CORe50
>>>进口数据加载程序
>>>列车组=数据加载程序。CORE50(根='/home/admin/core50_128x128',cumul=错误,运行=0)
#使用数据加载器
>>>对于批处理在里面列车组:
…#这是训练批次,不是迷你背带
…x,y=批处理
看看Python类在这里了解更多详细信息。正如你所见,我们考虑了两种方式。第一个用于小型RAM设备,我们在其中加载批处理img在空中当它们需要时,第二个方法是预加载整个数据集,并使用查找表格找出我们需要的数据子集。如果您是PyTorch用户,我们刚刚实现了Pytorch数据加载器(待定Pull请求),您可以下载在这里但到目前为止,它只有“动态加载”(即使是多线程)模式。如果你想贡献,或者你发现了一个bug,请进行公关或者简单地打开问题(欢迎提问)!我们保证至少在48小时内得到答复!:-)
标签.pkl.每个运行的标签的预加载Python dict(pickled).
核心50-master.zip.使用/复制基准测试所需的所有代码、材料和脚本。
联络
博洛尼亚大学在不同人员的努力下开发了该数据集和基准:
如需进一步咨询,请随时联系文森佐·洛莫纳科通过他的电子邮件:vincenzo.lomonaco@unibo.it