行人重识别(Person Re-Identification) ——Market-1501 数据集介绍、命名说明及pytorch数据类型转化

开头瞎叭叭

每日一个小知识:pycharm快速注释操作:ctrl+/

Market-1501数据集简介:


1——该数据集在清华大学校园中采集,于夏天拍摄,在 2015 年构建并公开。

2——包括由6个摄像头(其中5个高清摄像头和1个低清摄像头)拍摄到的 1501 个行人、32668 个检测到的行人矩形框。

3——每个行人至少由2个摄像头捕获到,并且在一个摄像头中可能具有多张图像。

4——训练集有 751 人,包含 12936 张图像,平均每个人有 17.2 张训练数据;测试集有 750 人,包含 19732 张图像,平均每个人有 26.3 张测试数据。

5——3368 张查询图像的行人检测矩形框是人工绘制的,而 gallery 中的行人检测矩形框则是使用DPM检测器检测得到的。

6——该数据集提供的固定数量的训练集和测试集均可以在single-shot或multi-shot测试设置下使用。
各子文件夹示例:

 显式目录结构:

Market-1501
  ├── bounding_box_test
       ├── 0000_c1s1_000151_01.jpg
       ├── 0000_c1s1_000376_03.jpg
       ├── 0000_c1s1_001051_02.jpg
  ├── bounding_box_train
       ├── 0002_c1s1_000451_03.jpg
       ├── 0002_c1s1_000551_01.jpg
       ├── 0002_c1s1_000801_01.jpg
  ├── gt_bbox
       ├── 0001_c1s1_001051_00.jpg
       ├── 0001_c1s1_009376_00.jpg
       ├── 0001_c2s1_001976_00.jpg
  ├── gt_query
       ├── 0001_c1s1_001051_00_good.mat
       ├── 0001_c1s1_001051_00_junk.mat
  ├── query
       ├── 0001_c1s1_001051_00.jpg
       ├── 0001_c2s1_000301_00.jpg
       ├── 0001_c3s1_000551_00.jpg
  └── readme.txt

目录介绍


1—— “bounding_box_test”——用于测试集的 750 人,包含 19732 张图像,前缀为 0000 表示在提取这 750 人的过程中DPM检测错的图(可能与query是同一个人),-1 表示检测出来其他人的图(不在这 750 人中)
2—— “bounding_box_train”——用于训练集的 751 人,包含 12936 张图像
3—— “gt_bbox”——手工标注的bounding box,用于判断DPM检测的bounding box是不是一个好的box
4—— “gt_query”——matlab格式,用于判断一个query的哪些图片是好的匹配(同一个人不同摄像头的图像)和不好的匹配(同一个人同一个摄像头的图像或非同一个人的图像)
5——“query”——为 750 人在每个摄像头中随机选择一张图像作为query,因此一个人的query最多有 6 个,共有 3368 张图像

命名规则

以0017_c2s1_000976_01.jpg为例
1——0017 表示每个人的标签编号,从0001到1501;
2——c2 表示第2个摄像头(camera1),共有6个摄像头;
3——s1 表示第1个录像片段(sequece1),每个摄像机都有数个录像段;
4——000976 表示 c2s1 的第000976帧图片,视频帧率25fps;
5—— 01 表示 c1s1_001976 这一帧上的第1个检测框,由于采用DPM检测器,对于每一帧上的行人可能会框出好几个bbox,若为00则表示手工标注框

下载地址

咱是实在人,直接给你处理好了(包括处理过的pytorch格式)

1——https://download.csdn.net/download/Promise11161314/36095703

2——​​​​​​​https://pan.baidu.com/s/1z7_zRP20UujcU9CJq034Ew 
提取码:3ujn

论文地址

http://www.liangzheng.org/Project/state_of_the_art_market1501.html

pytorch处理后的数据格式

在每个子目录中,例如pytorch/train/0002,将具有相同 ID 的图像排列在文件夹中。

格式处理源码

(感谢来自layumi的代码支持layumi (Zhedong Zheng) · GitHub

import os
from shutil import copyfile

download_path = './Market'

if not os.path.isdir(download_path):
    print('please change the download_path')

save_path = download_path + '/pytorch'
if not os.path.isdir(save_path):
    os.mkdir(save_path)
#-----------------------------------------
#query
query_path = download_path + '/query'
query_save_path = download_path + '/pytorch/query'
if not os.path.isdir(query_save_path):
    os.mkdir(query_save_path)

for root, dirs, files in os.walk(query_path, topdown=True):
    for name in files:
        if not name[-3:]=='jpg':
            continue
        ID  = name.split('_')
        src_path = query_path + '/' + name
        dst_path = query_save_path + '/' + ID[0] 
        if not os.path.isdir(dst_path):
            os.mkdir(dst_path)
        copyfile(src_path, dst_path + '/' + name)

#-----------------------------------------
#multi-query
query_path = download_path + '/gt_bbox'
# for dukemtmc-reid, we do not need multi-query
if os.path.isdir(query_path):
    query_save_path = download_path + '/pytorch/multi-query'
    if not os.path.isdir(query_save_path):
        os.mkdir(query_save_path)

    for root, dirs, files in os.walk(query_path, topdown=True):
        for name in files:
            if not name[-3:]=='jpg':
                continue
            ID  = name.split('_')
            src_path = query_path + '/' + name
            dst_path = query_save_path + '/' + ID[0]
            if not os.path.isdir(dst_path):
                os.mkdir(dst_path)
            copyfile(src_path, dst_path + '/' + name)

#-----------------------------------------
#gallery
gallery_path = download_path + '/bounding_box_test'
gallery_save_path = download_path + '/pytorch/gallery'
if not os.path.isdir(gallery_save_path):
    os.mkdir(gallery_save_path)

for root, dirs, files in os.walk(gallery_path, topdown=True):
    for name in files:
        if not name[-3:]=='jpg':
            continue
        ID  = name.split('_')
        src_path = gallery_path + '/' + name
        dst_path = gallery_save_path + '/' + ID[0]
        if not os.path.isdir(dst_path):
            os.mkdir(dst_path)
        copyfile(src_path, dst_path + '/' + name)

#---------------------------------------
#train_all
train_path = download_path + '/bounding_box_train'
train_save_path = download_path + '/pytorch/train_all'
if not os.path.isdir(train_save_path):
    os.mkdir(train_save_path)

for root, dirs, files in os.walk(train_path, topdown=True):
    for name in files:
        if not name[-3:]=='jpg':
            continue
        ID  = name.split('_')
        src_path = train_path + '/' + name
        dst_path = train_save_path + '/' + ID[0]
        if not os.path.isdir(dst_path):
            os.mkdir(dst_path)
        copyfile(src_path, dst_path + '/' + name)


#---------------------------------------
#train_val
train_path = download_path + '/bounding_box_train'
train_save_path = download_path + '/pytorch/train'
val_save_path = download_path + '/pytorch/val'
if not os.path.isdir(train_save_path):
    os.mkdir(train_save_path)
    os.mkdir(val_save_path)

for root, dirs, files in os.walk(train_path, topdown=True):
    for name in files:
        if not name[-3:]=='jpg':
            continue
        ID  = name.split('_')
        src_path = train_path + '/' + name
        dst_path = train_save_path + '/' + ID[0]
        if not os.path.isdir(dst_path):
            os.mkdir(dst_path)
            dst_path = val_save_path + '/' + ID[0]  #first image is used as val image
            os.mkdir(dst_path)
        copyfile(src_path, dst_path + '/' + name)

 亲,这篇文章对你有用吗?有用点个赞再走吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值