以下链接是个人关于fast-reid(BoT行人重识别) 所有见解,如有错误欢迎大家指出,我会第一时间纠正。有兴趣的朋友可以加微信:17575010159 相互讨论技术。若是帮助到了你什么,一定要记得点赞!因为这是对我最大的鼓励。 文末附带 \color{blue}{文末附带} 文末附带 公众号 − \color{blue}{公众号 -} 公众号− 海量资源。 \color{blue}{ 海量资源}。 海量资源。 行人重识别02-00:fast-reid(BoT)-目录-史上最新无死角讲解
极度推荐的商业级项目: \color{red}{极度推荐的商业级项目:} 极度推荐的商业级项目:这是本人落地的行为分析项目,主要包含(1.行人检测,2.行人追踪,3.行为识别三大模块):行为分析(商用级别)00-目录-史上最新无死角讲解
前言 对于行人重识别来说,其类似于人脸识别。需要超级大数据集才能获得比较好的效果。但是行人重识别的数据获取难度是很大的。不像人脸的数据集,就公开的而言,都有好些大数据集。但是行人从识别的大数据集,几乎可以说是没有的。但是最近公开了一个虚拟的行人从识别数据集,虽然说是虚拟的,但是根据作者的介绍,该数据集能够大幅度增加行人重识别的准确率。相关链接如下: 论文链接:https://arxiv.org/abs/2006.12774 项目数据链接:https://github.com/VideoObjectSearch/RandPerson 请大家先下载好数据集,本人下载之后显示如下: 但是后续我们只需要其中的 images 部分,本人的分布如下:
其每个文件具体代表什么,就不在进行介绍了,因为前面给出的链接,官方有详细的介绍。大家下载好之后呢,如下所示摆放好数据:
我们分别进入 images 中的每一个文件夹,如 scene00,scene01…,然后在每个文件夹下面都执行解压指令:
for tar in ca*.tar.gz; do tar xvf $tar; done
如本人解压 scene00 之后显示如下图: 解压完所有的 cameraxx.tar.gz 之后,我们就可以进行训练了。
首先,我们需要编写一个编写一个读取数据的代码,其类似于fastreid\data\datasets\market1501.py,本人改写代码为 fastreid\data\datasets\randperson.py,内容如下(大家复制即可): 另外注意,记得: \color{red}{另外注意,记得:} 另外注意,记得:文件fastreid\data\datasets_init_.py,添加内容from .randperson import RandPerson
# encoding: utf-8
"""
@author: sherlock
@contact: sherlockliao01@gmail.com
"""
import glob
import os.path as osp
import re
import warnings
from .bases import ImageDataset
from ..datasets import DATASET_REGISTRY
@DATASET_REGISTRY.register()
class RandPerson(ImageDataset):
"""Market1501.
Reference:
Zheng et al. Scalable Person Re-identification: A Benchmark. ICCV 2015.
URL: ``_
Dataset statistics:
- identities: 1501 (+1 for background).
- images: 12936 (train) + 3368 (query) + 15913 (gallery).
"""
_junk_pids = [0, -1]
dataset_dir = 'randperson' # 数据集目录,默认为空
dataset_url = 'https://github.com/VideoObjectSearch/RandPerson' # 数据集现在地址
dataset_name = 'randperson' # 数据集名称
def __init__(self, root='datasets', **kwargs):
# self.root = osp.abspath(osp.expanduser(root))
# 数据集根目录
self.root = root
# 拼接数据集路径
self.dataset_dir = osp.join(self.root, self.dataset_dir)
# allow alternative directory structure # 允许替换目录结构
self.data_dir = self.dataset_dir
# 获得数据集目录
data_dir = osp.join(self.data_dir, 'images')
# 判断是否为一个目录。如果是则复制给self.data_dir
if osp.isdir(data_dir):
self.data_dir = data_dir
# 否则给出警告
else:
warnings.warn('The current data structure is deprecated. Please '
'put data folders such as "bounding_box_train" under '
'"Market-1501-v15.09.15".')
self.train_dir = self.data_dir
self.query_dir = self.data_dir
#“bounding_box_test”——用于测试集的 750 人,包含 19,732 张图像,前缀为 0000 表示在提取这 750 人的过程中DPM检测错的图
# (可能与query是同一个人),-1 表示检测出来其他人的图(不在这 750 人中)
self.gallery_dir = osp.join(self.data_dir, 'bounding_box_test')
# 额外画廊的数据,可以理解为为bounding_box_test添加额外的数据
self.extra_gallery_dir = osp.join(self.data_dir, 'images')
# 获取目录下的所有jpg文件
from pathlib import Path
img_paths = []
for img_path in Path(self.data_dir).glob('**/*.jpg'):
img_paths.append(img_path)
train = self.process_dir(img_paths)
# 调用父类的初始化函数
super().__init__(train, [], [], **kwargs)
def process_dir(self, img_paths, is_train=True):
# 用于正则表达式
pattern = re.compile(r'([-\d]+)_s[\d]+_c(\d+)_f')
data = []
# 对每一张图片进行处理
# 以 '007488_s03_c00_f081012.jpg' 为例
# 1) 007488 表示每个人的id编号,从0001到1501;
# 4) s03 表示第一个录像片段(sequece3),每个摄像机都有数个录像段;
# 3) c00 表示第一个摄像头(camera0),共有个摄像头;
# 4) f081012 表示 帧的数目
for img_path in img_paths:
img_name = img_path.name
# 获得图片对应的pid(身份ID)以及摄像头编号
# print('='*100)
# print(img_name)
# print(pattern.search(img_name).groups())
pid, camid = map(int, pattern.search(img_name).groups())
# -1表示身份不在1051中,则忽略不进行处理
if pid == -1:
continue # junk images are just ignored
# 检测id是否正确,不正确则报错
#assert 0
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?