Safemotion Lib
Loading...
Searching...
No Matches
common.py
Go to the documentation of this file.
1# encoding: utf-8
2"""
3@author: liaoxingyu
4@contact: sherlockliao01@gmail.com
5"""
6
7import numpy as np
8import cv2, lmdb
9from PIL import Image
10from torch.utils.data import Dataset
11
12from .data_utils import read_image
13
14
15class CommDataset(Dataset):
16 """Image Person ReID Dataset"""
17
18 def __init__(self, img_items, transform=None, relabel=True):
19 self.img_items = img_items
20 self.transform = transform
21 self.relabel = relabel
22
23 pid_set = set()
24 cam_set = set()
25 for i in img_items:
26 pid_set.add(i[1])
27 cam_set.add(i[2])
28
29 self.pids = sorted(list(pid_set))
30 self.cams = sorted(list(cam_set))
31 if relabel:
32 self.pid_dict = dict([(p, i) for i, p in enumerate(self.pids)])
33 self.cam_dict = dict([(p, i) for i, p in enumerate(self.cams)])
34
35 def __len__(self):
36 return len(self.img_items)
37
38 def __getitem__(self, index):
39 img_path, pid, camid = self.img_items[index]
40 img = read_image(img_path)
41 if self.transform is not None: img = self.transform(img)
42 if self.relabel:
43 pid = self.pid_dict[pid]
44 camid = self.cam_dict[camid]
45 return {
46 "images": img,
47 "targets": pid,
48 "camids": camid,
49 "img_paths": img_path,
50 }
51
52 @property
53 def num_classes(self):
54 return len(self.pids)
55
56 @property
57 def num_cameras(self):
58 return len(self.cams)
59
60class KidDataset(Dataset):
61 """Image Person ReID Dataset"""
62
63 def __init__(self, img_items, transform=None, relabel=True):
64 self.img_items = img_items
65 self.transform = transform
66 self.relabel = relabel
67
68 pid_set = set()
69 cam_set = set()
70 for i in img_items:
71 pid_set.add(i[1])
72 cam_set.add(i[2])
73
74 self.pids = sorted(list(pid_set))
75 self.cams = sorted(list(cam_set))
76 if relabel:
77 self.pid_dict = dict([(p, i) for i, p in enumerate(self.pids)])
78 self.cam_dict = dict([(p, i) for i, p in enumerate(self.cams)])
79
80 def __len__(self):
81 return len(self.img_items)
82
83 def __getitem__(self, index):
84 img, pid, camid = self.img_items[index]
85 if self.transform is not None: img = self.transform(img)
86 if self.relabel:
87 pid = self.pid_dict[pid]
88 camid = self.cam_dict[camid]
89 return {
90 "images": img,
91 "targets": pid,
92 "camids": camid,
93 }
94
95 @property
96 def num_classes(self):
97 return len(self.pids)
98
99 @property
100 def num_cameras(self):
101 return len(self.cams)
102
103
104class LMDBDataset(Dataset):
105 """ Person dataset in LMDB format """
106 def __init__(self, dataset, transform=None, relabel=False):
107 self.dataset = dataset
108 self.transform = transform
109 self.relabel = relabel
110
111 self.img_items = dataset.train
112 self.pids = dataset.pids
113
114 self._num_classes = len(self.pids)
116
117 self.lmdb_path = dataset.lmdb_path
118 self.env = None
119
120 def _init_lmdb(self):
121 self.env = lmdb.open(self.lmdb_path, readonly=True, lock=False,
122 readahead=False, meminit=False)
123
124 def __len__(self):
125 return len(self.img_items)
126
127 def __getitem__(self, index):
128 if self.env is None:
129 self._init_lmdb()
130 img_key, pid, camid = self.img_items[index]
131
132 with self.env.begin(write=False) as txn:
133 buf = txn.get(img_key.encode('ascii'))
134
135 img_flat = np.frombuffer(buf, dtype=np.uint8)
136 # im is in BGR order
137 im = cv2.imdecode(img_flat, cv2.IMREAD_COLOR)
138 im = Image.fromarray(im[:, :, ::-1])
139
140 if self.transform is not None:
141 im = self.transform(im)
142
143 return {'images': im, 'targets': pid,
144 'camids': 0, 'img_paths': img_key}
145
146 @property
147 def num_classes(self):
148 return self._num_classes
149
150 @property
151 def num_cameras(self):
152 return self._num_cameras
153
__init__(self, img_items, transform=None, relabel=True)
Definition common.py:18
__init__(self, img_items, transform=None, relabel=True)
Definition common.py:63
__init__(self, dataset, transform=None, relabel=False)
Definition common.py:106