MCPcopy Create free account
hub / github.com/SooLab/CGFormer / RefDataset

Class RefDataset

utils/dataset_open.py:98–196  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

96
97
98class RefDataset(Dataset):
99 def __init__(self, lmdb_dir, mask_dir, dataset, split, mode, input_size,
100 word_length):
101 super(RefDataset, self).__init__()
102 self.lmdb_dir = lmdb_dir
103 self.mask_dir = mask_dir
104 self.dataset = dataset
105 self.split = split
106 self.mode = mode
107 self.input_size = (input_size, input_size)
108 #self.mask_size = [13, 26, 52]
109 self.word_length = word_length
110 self.mean = torch.tensor([0.485, 0.456, 0.406]).reshape(3, 1, 1)
111 self.std = torch.tensor([0.229, 0.224, 0.225]).reshape(3, 1, 1)
112 self.length = info[dataset][split]
113 self.env = None
114 def _init_db(self):
115 self.env = lmdb.open(self.lmdb_dir,
116 subdir=os.path.isdir(self.lmdb_dir),
117 readonly=True,
118 lock=False,
119 readahead=False,
120 meminit=False)
121 with self.env.begin(write=False) as txn:
122 self.length = loads_pyarrow(txn.get(b'__len__'))
123 self.keys = loads_pyarrow(txn.get(b'__keys__'))
124
125 def __len__(self):
126 return self.length
127
128 def __getitem__(self, index):
129 # Delay loading LMDB data until after initialization: https://github.com/chainer/chainermn/issues/129
130 if self.env is None:
131 self._init_db()
132 env = self.env
133 with env.begin(write=False) as txn:
134 byteflow = txn.get(self.keys[index])
135 ref = loads_pyarrow(byteflow)
136 # img
137 ori_img = cv2.imdecode(np.frombuffer(ref['img'], np.uint8),
138 cv2.IMREAD_COLOR)
139 img = cv2.cvtColor(ori_img, cv2.COLOR_BGR2RGB)
140 img_size = img.shape[:2]
141 # mask
142 seg_id = ref['seg_id']
143 mask_dir = os.path.join(self.mask_dir, str(seg_id) + '.png')
144 # sentences
145 idx = np.random.choice(ref['num_sents'])
146 sents = ref['sents']
147 # transform
148 # mask transform
149 mask = cv2.imdecode(np.frombuffer(ref['mask'], np.uint8),
150 cv2.IMREAD_GRAYSCALE)
151 mask = mask / 255.
152 if self.mode == 'train':
153 sent = sents[idx]
154 # sentence -> vector
155 img, mask, sent = self.convert(img, mask, sent, inference=False)

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected