Files
2026-07-09 18:16:06 +09:00

174 lines
5.8 KiB
Python

import os
from .import_Market1501 import *
from .reiddataset_downloader import *
import scipy.io
def import_Market1501Attribute(dataset_dir):
dataset_name = 'Market-1501/attribute'
train,query,test = import_Market1501(dataset_dir)
if not os.path.exists(os.path.join(dataset_dir,dataset_name)):
print('Please Download the Market1501Attribute Dataset')
train_label=['age',
'backpack',
'bag',
'handbag',
'downblack',
'downblue',
'downbrown',
'downgray',
'downgreen',
'downpink',
'downpurple',
'downwhite',
'downyellow',
'upblack',
'upblue',
'upgreen',
'upgray',
'uppurple',
'upred',
'upwhite',
'upyellow',
'clothes',
'down',
'up',
'hair',
'hat',
'gender']
test_label=['age',
'backpack',
'bag',
'handbag',
'clothes',
'down',
'up',
'hair',
'hat',
'gender',
'upblack',
'upwhite',
'upred',
'uppurple',
'upyellow',
'upgray',
'upblue',
'upgreen',
'downblack',
'downwhite',
'downpink',
'downpurple',
'downyellow',
'downgray',
'downblue',
'downgreen',
'downbrown'
]
train_person_id = []
for personid in train:
train_person_id.append(personid)
train_person_id.sort(key=int)
test_person_id = []
for personid in test:
test_person_id.append(personid)
test_person_id.sort(key=int)
test_person_id.remove('-1')
test_person_id.remove('0000')
f = scipy.io.loadmat(os.path.join(dataset_dir,dataset_name,'market_attribute.mat'))
test_attribute = {}
train_attribute = {}
for test_train in range(len(f['market_attribute'][0][0])):
if test_train == 0:
id_list_name = 'test_person_id'
group_name = 'test_attribute'
else:
id_list_name = 'train_person_id'
group_name = 'train_attribute'
for attribute_id in range(len(f['market_attribute'][0][0][test_train][0][0])):
if isinstance(f['market_attribute'][0][0][test_train][0][0][attribute_id][0][0], np.ndarray):
continue
for person_id in range(len(f['market_attribute'][0][0][test_train][0][0][attribute_id][0])):
id = locals()[id_list_name][person_id]
if id not in locals()[group_name]:
locals()[group_name][id]=[]
locals()[group_name][id].append(f['market_attribute'][0][0][test_train][0][0][attribute_id][0][person_id])
unified_train_atr = {}
for k,v in train_attribute.items():
temp_atr = [0]*len(test_label)
for i in range(len(test_label)):
temp_atr[i]=v[train_label.index(test_label[i])]
unified_train_atr[k] = temp_atr
return unified_train_atr, test_attribute, test_label
def import_Market1501Attribute_binary(dataset_dir):
train_market_attr, test_market_attr, label = import_Market1501Attribute(dataset_dir)
for id in train_market_attr:
train_market_attr[id][:] = [x - 1 for x in train_market_attr[id]]
if train_market_attr[id][0] == 0:
train_market_attr[id].pop(0)
train_market_attr[id].insert(0, 1)
train_market_attr[id].insert(1, 0)
train_market_attr[id].insert(2, 0)
train_market_attr[id].insert(3, 0)
elif train_market_attr[id][0] == 1:
train_market_attr[id].pop(0)
train_market_attr[id].insert(0, 0)
train_market_attr[id].insert(1, 1)
train_market_attr[id].insert(2, 0)
train_market_attr[id].insert(3, 0)
elif train_market_attr[id][0] == 2:
train_market_attr[id].pop(0)
train_market_attr[id].insert(0, 0)
train_market_attr[id].insert(1, 0)
train_market_attr[id].insert(2, 1)
train_market_attr[id].insert(3, 0)
elif train_market_attr[id][0] == 3:
train_market_attr[id].pop(0)
train_market_attr[id].insert(0, 0)
train_market_attr[id].insert(1, 0)
train_market_attr[id].insert(2, 0)
train_market_attr[id].insert(3, 1)
for id in test_market_attr:
test_market_attr[id][:] = [x - 1 for x in test_market_attr[id]]
if test_market_attr[id][0] == 0:
test_market_attr[id].pop(0)
test_market_attr[id].insert(0, 1)
test_market_attr[id].insert(1, 0)
test_market_attr[id].insert(2, 0)
test_market_attr[id].insert(3, 0)
elif test_market_attr[id][0] == 1:
test_market_attr[id].pop(0)
test_market_attr[id].insert(0, 0)
test_market_attr[id].insert(1, 1)
test_market_attr[id].insert(2, 0)
test_market_attr[id].insert(3, 0)
elif test_market_attr[id][0] == 2:
test_market_attr[id].pop(0)
test_market_attr[id].insert(0, 0)
test_market_attr[id].insert(1, 0)
test_market_attr[id].insert(2, 1)
test_market_attr[id].insert(3, 0)
elif test_market_attr[id][0] == 3:
test_market_attr[id].pop(0)
test_market_attr[id].insert(0, 0)
test_market_attr[id].insert(1, 0)
test_market_attr[id].insert(2, 0)
test_market_attr[id].insert(3, 1)
label.pop(0)
label.insert(0,'young')
label.insert(1,'teenager')
label.insert(2,'adult')
label.insert(3,'old')
return train_market_attr, test_market_attr, label