market1501 data_manager.py
創(chuàng)建類market1501
類內(nèi)公共屬性: dataset_dir = ‘market1501’
類的初始化:data = Market1501(root = ‘G:\data’)
內(nèi)類屬性:market1501地址,訓(xùn)練集,測試集,gallary地址
def __init__(self,root = 'data', **kwargs):self.dataset_dir = osp.join(root, self.dataset_dir)self.train_dir = osp.join(self.dataset_dir, 'bounding_box_train')self.query_dir = osp.join(self.dataset_dir, 'query')self.gallery_dir = osp.join(self.dataset_dir, 'bounding_box_test')
實例化之后查看一下相應(yīng)的train,test,gallary是否存在,如果不存在則提示
self._check_before_run()
重點是類方法_process_dir,傳入裝著圖片的文件夾地址,和一個標(biāo)志位relabel,為什么需要這個標(biāo)志位呢。(就相當(dāng)于一個開關(guān),如果我們使用訓(xùn)練集數(shù)據(jù)時,則打開這個開關(guān)讓算出來label,如果測試)
首先讀取全部的問價路徑并且存儲到img_paths列表,使用一個set()容器用來裝.這樣做的好處是利用集合這種數(shù)據(jù)結(jié)構(gòu)完成元素的自動去重,自動化得到有多個類別。
下一步循環(huán)完成提取,最后得到一個有著所有種類標(biāo)簽的集合比如(cat,dog,frog,…)
下一步,種類名稱和他所對應(yīng)的標(biāo)簽
pid2label = {pid:label for label, pid in enumerate(pid_container)}
得到一個字典pidlabel,鍵為類別名稱(cat…),對應(yīng)的鍵值為(他的標(biāo)簽)
然后我們創(chuàng)建dataset列表
# -*- encoding: utf-8 -*-
"""
@File : data_manager.py
@Time : 2021-05-07 11:25
@Author : XD
@Email : gudianpai@qq.com
@Software: PyCharm
"""
import os
import os.path as osp
import refrom utils import mkdir_if_missing, write_json , read_jsonfrom IPython import embedimport globclass Market1501(object):"""Market1501Reference:Zheng et al. Scalable Person Re-identification: A Benchmark. ICCV 2015.URL: http://www.liangzheng.org/Project/project_reid.htmlDataset statistics:# identities: 1501 (+1 for background)# images: 12936 (train) + 3368 (query) + 15913 (gallery)"""dataset_dir = 'market1501'def __init__(self,root = 'data', **kwargs):self.dataset_dir = osp.join(root, self.dataset_dir)self.train_dir = osp.join(self.dataset_dir, 'bounding_box_train')self.query_dir = osp.join(self.dataset_dir, 'query')self.gallery_dir = osp.join(self.dataset_dir, 'bounding_box_test')self._check_before_run()#data_dir, ID, CAMID ,NUMtrain, num_train_pids, num_train_imgs = self._process_dir(self.train_dir)query, num_query_pids, num_query_imgs = self._process_dir(self.query_dir, relabel=False)gallery, num_gallery_pids, num_gallery_imgs = self._process_dir(self.gallery_dir, relabel=False)num_total_pids = num_train_pids + num_query_pidsnum_total_imgs = num_train_imgs + num_query_imgs + num_gallery_imgsprint("=> Market1501 loaded")print("Dataset statistics:")print(" ------------------------------")print(" subset | # ids | # images")print(" ------------------------------")print(" train | {:5d} | {:8d}".format(num_train_pids, num_train_imgs))print(" query | {:5d} | {:8d}".format(num_query_pids, num_query_imgs))print(" gallery | {:5d} | {:8d}".format(num_gallery_pids, num_gallery_imgs))print(" ------------------------------")print(" total | {:5d} | {:8d}".format(num_total_pids, num_total_imgs))print(" ------------------------------")self.train = trainself.query = queryself.gallery = galleryself.num_train_pids = num_train_pidsself.num_query_pids = num_query_pidsself.num_gallery_pids = num_gallery_pidsdef _check_before_run(self):"""Check if all files are available before going deeper"""if not osp.exists(self.dataset_dir):raise RuntimeError("{} is not available".format(self.dataset_dir))if not osp.exists(self.train_dir):raise RuntimeError("{} is not available".format(self.train_dir))if not osp.exists(self.query_dir):raise RuntimeError("{} is not available".format(self.query_dir))if not osp.exists(self.gallery_dir):raise RuntimeError("{} is not available".format(self.gallery_dir))def _process_dir(self, dir_path, relabel = False):img_paths = glob.glob(osp.join(dir_path, '*.jpg'))pattern = re.compile(r'([-\d]+)_c(\d)')pid_container = set()for img_path in img_paths:pid, _ = map(int, pattern.search(img_path).groups())if pid == -1: continuepid_container.add(pid)pid2label = {pid:label for label, pid in enumerate(pid_container)}dataset = []for img_path in img_paths:pid, camid = map(int, pattern.search(img_path).groups())if pid == -1: continueassert 0 <= pid <= 1501assert 1 <= camid <= 6camid += -1if relabel:pid = pid2label[pid]dataset.append((img_path, pid ,camid))num_pids = len(pid_container)num_imgs = len(img_paths)return dataset, num_pids ,num_imgsif __name__ == '__main__':data = Market1501(root = 'G:\data')
D:\ANACONDA\envs\pytorch_gpu\python.exe G:/圖像檢索文章/深度哈希/度量學(xué)習(xí)/proj_Reid/util/data_manager.py
=> Market1501 loaded
Dataset statistics:------------------------------subset | # ids | # images------------------------------train | 751 | 12936query | 750 | 3368gallery | 751 | 19732------------------------------total | 1501 | 36036------------------------------Process finished with exit code 0
總結(jié)
以上是生活随笔為你收集整理的market1501 data_manager.py的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国结的来历和含义是什么呢 中国结的来历
- 下一篇: 图像滤镜原理