关于VeRi-776(车辆重识别)数据集

1.VeRi dataset

简介

数据集简介:GitHub
论文:(PDF) A Deep Learning-Based Approach to Progressive Vehicle Re-identification for Urban Surveillance(需注册才能下载)
简要翻译理解:A Deep Learning-Based Approach to Progressive Vehicle Re-identification for Urban Surveillance

为了促进车辆重识别(Re-Id)的研究,我们在现实世界城市监控场景中建立了一个名为VeRi的车辆重识别的大规模基准数据集。 VeRi的特点包括:

  • 20台摄像机在1KM^2的城市区域内24小时拍摄而来,包含776辆车的超过50,000张图像。
  • 图像是在真实世界的无约束监视场景中捕获的,并标注不同的属性,例如: BBox,类型,颜色和品牌。
  • 每辆车在不同的视点,照明,分辨率和遮挡下由2~18台摄像机拍摄。
  • 还标注了足够的车牌和时空信息,例如板块的BBox,车牌号,拍摄的时间戳以及相邻相机之间的距离。
关于VeRi-776(车辆重识别)数据集关于VeRi-776(车辆重识别)数据集

下载

数据集获取:邮件发送姓名和所属机构至[email protected]申请(亲测邮件回复的相当及时)。

2.数据集分析

下载了数据集之后,来看看数据集长什么样,解压数据集VeRi之后,文件结构如下:
关于VeRi-776(车辆重识别)数据集

首先肯定是打开ReadMe.txt初步了解数据集:
文件目录内容:

  • 1、image_query/: 包含1678张查询图像
  • 2、image_test/: 包含11579张测试图像
  • 3、image_train/: 包含37778张训练图像
  • 4、name_query.txt: 查询图像的名称列表
  • 5、name_test.txt: 测试图像的名称列表
  • 6、name_train.txt: 训练图像的名称列表
  • 7、test_track.txt: 全部测试track,每个track大约包含6张同一相机拍摄的同一车辆图像
  • 8、gt_index.txt: 每一行列出了相应查询图像的真实匹配图像索引
  • 9、jk_index.txt: 每一行列出了相应查询图像的junk图像索引,junk图像指的是和查询图像具有相同相机ID的的图像
  • 10、train_label.xml: 训练图像的标签:车辆ID,相机ID,颜色,类型
  • 11、test_label.xml: 测试图像的标签:车辆ID,相机ID,颜色,类型
  • 12、list_color.txt: 标签中数字对应的颜色类别
  • 13、list_type.txt: 标签中数字对应的车型类别
  • 14、camera_ID.txt: 20个相机的ID
  • 15、camera_Dist.txt: 任意相机对之间的距离矩阵
  • 16、YongtaiPoint_Google.jpg: 标注相机位置的地图

其实看完ReadMe.txt之后,还是一脸懵逼,junk image是什么?track又是啥意思。。。额,这个数据集构成确实比较复杂,下面尝试一个一个分析(没有按照先前的顺序)。

首先来看这张图:
关于VeRi-776(车辆重识别)数据集
YongtaiPoint_Google.jpg长得很像,只是多出了一些图像示例。可以看到,地图中标识了20个相机的位置,每个相机针对特定的方位进行拍摄,拍摄的同时会记录相应的时间戳信息,VeRi数据集就是这么拍摄而来的。

那么,同一车辆会在多个摄像机视角内出现,相应的拍摄角度也可能不同,拍摄图像也可以是多张(比如Cam 11就可以逮目标车辆一顿猛拍),当然数据集里张数分布还是比较均匀的,大概每个相机会对目标拍摄6次左右。比如在image_train/文件夹开头是这样的:
关于VeRi-776(车辆重识别)数据集
可以看到,第一列每张图像名字均以0001_c001作为前缀,其中0001代表车辆ID(车辆共776),c001代表相机ID,那第一列就代表相机1对车辆1进行了6次拍摄,同理第二列代表相机2也对车辆1进行了6次拍摄,第三列、第四列…均是如此,一直往下就可以看到,相机1、2、12、13、14、15、16、17和19均对车辆1进行了拍摄,并且训练集里面选取了各自拍摄的6张图像,对比上面的地图,可以发现车辆1的行驶路径就是图中右方黄色的道路。
文件夹image_test/(200车辆)和image_train/(576车辆)中的图像均按上述方式维护。

image_query/(1678张图像)文件夹下的维护方式则不同,如图:
关于VeRi-776(车辆重识别)数据集
例如,图中前两列均对应车辆2,但是每张图像的相机ID都不同,一共有相机2、3、4、5、6、7、8、9、10和11分别对车辆2拍摄的各一张图像,这样维护的原因是什么呢?其实image_query/中的图像是和image_test/中的图像相对应的,下面是image_test/文件夹的图像分布(没有截全):
关于VeRi-776(车辆重识别)数据集
可以看到,image_test/的维护方式和image_train/一样:每个相机对车辆拍摄约6张图像。对比image_query/image_test/,可以发现,image_query/的维护方式如下:对于image_test/中的所有图像,可以将其视为(车辆–相机)映射这样的图像集合,例如:

   (车辆2–相机2) 6张
   (车辆2–相机3) 6张
   (车辆2–相机4) 6张
   (车辆2–相机5) 6张
   (车辆2–相机6) 6张
    …
   (车辆2–相机8) 5张
   (车辆2–相机9) 6张
    …
   (车辆5–相机2) 6张
    …

这样的映射关系(track)一共有2021种,而image_query/中的1678张图,也就是在每个映射关系的约6张(有的映射关系仅有一张或者少量图像,所以query image只有1678)图像里取出一张来构成的。

说到这儿,就需要提一下VeRi数据集的image-to-track的重识别方式:

首先,行人重识别领域有一种image-to-image的重识别方式,简单理解就是用probe(探针)图像或者检索图像是一张图像,检索出来的结果也是一张图像。
image-to-track的重识别方式,检索图像是一张图像,检索结果是多张图像,这样的多张图像称为一个track。这样的方式其实也是更加符合实际的,毕竟相机逮着目标车辆一顿拍就可以得到一个track,没有技术难度。

那么,知道了image-to-track,我们就可以来看看文件test_track.txt到底是什么,如下,取出文本的第一行(其余的类似):

0002_c002_t0175 0002_c002_00030600_0.jpg 0002_c002_00030605_1.jpg 0002_c002_00030615_1.jpg 0002_c002_00030625_1.jpg 0002_c002_00030640_0.jpg 0002_c002_00030670_0.jpg

文本以空格为分隔符,第一项0002_c002_t0175代表该track是对应映射 (车辆2–相机2) 的,后面6项均为0002_c002_xxxx.jpg,代表的是(车辆2–相机2)映射所对应的图像名称。可以发现这个track的6张图像其实就是image_test/文件夹中的前6张图像,同一相机对同一车辆拍摄的多幅图像就构成了该(车辆–相机)映射对应的track

name_query.txtname_test.txtname_train.txt三个文件分别对应相应的图像名称,这点容易理解。

对于gt_index.txt,一共有1678行,刚好对应image_query/中的1678张查询图像。在每一行列出了相应查询图像的真实匹配图像索引(就是该图像在image_test/中的排序(文件名排序)序号),列出前三行来看一下:

7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
1 2 3 4 5 6 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
1 2 3 4 5 6 7 8 9 10 11 12 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

例如,对于车辆2,image_test/中一共有来自相机2、3、4、5、6、7、8、9、10和11拍摄的共59张图像。image_query/中的第一张查询图像是相机2拍摄的车辆2(车辆2–相机2),它对应得真实匹配在gt_index.txt中第一行:分析第一行中的编号容易发现真实匹配的定义就是除去拍摄该图像的相机之外的其他所有相机拍摄的该车辆的图像,有点拗口,其实就是(车辆2–相机XX(X!=2X != 2))。

那么,jk_index.txt也好理解了,一共1678行,对应关系和gt_index.txt类似,直接看第一行:

1 2 3 4 5 6

image_query/中的第一张查询图像是相机2拍摄的车辆2(车辆2–相机2)的图像,而这一行的编号就是和该查询图像具有相同车辆ID和相机ID(车辆2–相机2)的图像对应的序号。

剩下的:
camera_Dist.txt,是202020*20的矩阵,代表相机之间的距离:
关于VeRi-776(车辆重识别)数据集

camera_ID.txt: 20个相机的ID:

7 5 8 4 9 3 10 6 11 2 1 13 12 18 17 19 20 15 14 16

list_color.txt: 标签中数字对应的颜色类别:

1 yellow
2 orange
3 green
4 gray
5 red
6 blue
7 white
8 golden
9 brown
10 black

list_type.txt: 标签中数字对应的车型类别:

1 sedan
2 suv
3 van
4 hatchback
5 mpv
6 pickup
7 bus
8 truck
9 estate

train_label.xmltest_label.xml分别代表训练和测试图像的标签:车辆ID,相机ID,颜色,类型:

Item imageName=“0002_c002_00030600_0.jpg” vehicleID=“0002” cameraID=“c002” colorID=“1” typeID=“4”
Item imageName=“0002_c002_00030605_1.jpg” vehicleID=“0002” cameraID=“c002” colorID=“1” typeID=“4”

就没了。。。