RelTR训练自己的数据集
- 省流量省时间版本
- 框的标注
- 关系的标注
- 总的
- 前言
- Open Images V6的标注格式
- RelTR中使用的Open Images V6的数据标注格式
- 具体步骤
- 框的标注生成格式
- 关系三元组的生成格式
- 结束语
- 参考链接
省流量省时间版本
框的标注
共需要创建4个json标注文件
train.json, test.json, val.json为目标检测训练、测试、验证的标注,标注格式为COCO数据集的标注格式,包含图片的名字,检测框, 类别id.
关系的标注
rel.json:表示一张图片中的关系三元组
。
rel.json文件中有4个字段,tran,val,test分别为训练、验证、测试集的关系三元组,rel_categories表示关系类别。
详解:
train字段中,‘10000’:[0, 4. 30]表示图片的id号为10000,该图中有n个目标,也就是有n个框,框的id从0到n - 1,0表示第一个框,4表示第五个框,30是关系id。
总的
也就是说,把数据集中,每张图片的框标注单独放一个文件,然后所有的关系三元组放在一个文件。特别的,关系三元组标注中,每张图片的框的数目不一样,把属于一张图片的关系三元组放在 以图片id为 key,关系三元组为val的字典
中。
就像上面这两张图一样,id为131691的图片有6个框,框的id从0到5
前言
最近在做关于视觉关系检测的任务,找文章的过程中发现了一篇使用transformer进行视觉关系检测(场景图生成)的文章——RelTR,于是想用这篇文章的模型来跑一下自己的数据集。因为当前用的数据集不是最终版本的数据集,所以先写个文章记录一下模型使用数据集的格式
,方便后面处理数据集,避免大量重复的工作,所以就有了这篇文章。
Open Images V6的标注格式
在开始之前,先来看一下数据集的原始标注格式,这里我只展示Open Image V6的标注格式,这个数据集的官网上可以下载图片和标注。这里只下载关系部分的标注,如下图所示。
打开之后如下所示,第一行为标题,具体含义可以参考Open Images Dataset V6 简介,简单的一话总结就是:一个框的物体是什么类别,另一个框的物体是什么类别,这来两个框的关系是什么
:
这里简单的提一句,因为论文中使用的是类似于COCO数据集的检测方式,所以图片的名字以及物体的类别都是用数据表示的,所以在RelTR的代码中有提供将这些字符串转为数字的代码。
RelTR中使用的Open Images V6的数据标注格式
接着,将RelTR上提供的已经处理好的Open Images V6的标注下载下来,总共标注文件有4个,如下所示:
其中train.json, test.json, val.json为目标检测训练、测试、验证的标注,标注格式为COCO数据集的标注格式,包含图片的名字,检测框, 类别id如下:
图片名字:
框的标注:
类别id:
所以这三个json标注文件的准备就按照COCO数据集的标注格式准备就行。
场景图生成,或者是说视觉关系检测,最重要的是目标之间的关系,使用python将rel.json加载显示出来,片段如下:
这个json文件中有4个字段,分别是:train、test、val、rel_categories
,具体意思是,训练、测试和验证集
中图片中的关系三元组
以及关系的类别
。之前第一眼看到这个文件里面的数据有点懵,不知道什么意思,然后去翻作者提供的process.py文件,发现也没有说,去论文里面找也没有说,所以我猜测这个文章使用经过处理的数据集是参考别人的,所以还要去找其他论文的工作才行。
找了挺久之后,发现在RelTR的GitHub网站中的数据集准备部分找到了来源,具体如下:
打开之后找到一个跳转链接:
然后可以下载一个文件,里面有处理数据的源码,主要部分的代码如下:
可以看到三元组是从这里添加的,b1_id为三元组里面的第一个框,它属于这张图片中所有标注物体的某一个框,框的id为b1_id,同理,b2_id也为其中的一个框,框的id为b2_id。举个例子,一张图片中有个5个物体,那就有5个框,框的id从0到4,然后id为2和id为4之间有一个关系为on,这个on的关系id为关系类别中的id,比如第10类,那么这个三元组为[2, 4, 10]。记住,这个框的id是相对于一张图片中的所有框来说的。
到这里,基本能理解RelTR中的json文件中的标注是什么意思了。
具体步骤
框的标注生成格式
COCO数据集的标注格式就很好找了,下面给出mmdetection中的自定义数据集准备的一个图:
关系三元组的生成格式
关系三元组的生成有两个原则:
- 每张图片有一个字典,图片的id为字典的key,里面存放着这张图片的全部关系三元组,即字典的val,是一个列表。
- 关系三元组里面的框的id是相对于这张图片而言。
就像上面这两张图一样,id为131691的图片有6个框,框的id从0到5
最后,把所有的标注按照训练、测试、验证划分,得到如下的标注:
需要注意的是,一定要确保图片中的框的id对应起来要正确,这样得到的关系三元组才是正常的。比如,给框编号时,一定要准确。
另外提一句,RelTR是将所有的图片放在一个文件中的。
结束语
本人的水平有限,如有不当之处敬请指出。写文章的目的在于记录和分享,希望不喜勿喷。
参考链接
Open Images V6官网
Open Images V6数据集简介
mmdetection自定义数据集准备