def __getitem__(self, index): if index < 10 and self.split == 'train': self.idxs = np.random.choice(self.num_samples, self.num_samples, replace=False) img = self._load_image(index) gt_3d, pts, c, s = self._get_part_info(index) r = 0 s = np.array([s, s]) s = adjust_aspect_ratio(s, self.aspect_ratio, self.opt.fit_short_side) trans_input = get_affine_transform( c, s, r, [self.opt.input_h, self.opt.input_w]) inp = cv2.warpAffine(img, trans_input, (self.opt.input_h, self.opt.input_w), flags=cv2.INTER_LINEAR) inp = (inp.astype(np.float32) / 256. - self.mean) / self.std inp = inp.transpose(2, 0, 1) trans_output = get_affine_transform( c, s, r, [self.opt.output_h, self.opt.output_w]) out = np.zeros((self.num_joints, self.opt.output_h, self.opt.output_w), dtype=np.float32) reg_target = np.zeros((self.num_joints, 1), dtype=np.float32) reg_ind = np.zeros((self.num_joints), dtype=np.int64) reg_mask = np.zeros((self.num_joints), dtype=np.uint8) pts_crop = np.zeros((self.num_joints, 2), dtype=np.int32) for i in range(self.num_joints): pt = affine_transform(pts[i, :2], trans_output).astype(np.int32) if pt[0] >= 0 and pt[1] >=0 and pt[0] < self.opt.output_w \ and pt[1] < self.opt.output_h: pts_crop[i] = pt out[i] = draw_gaussian(out[i], pt, self.opt.hm_gauss) reg_target[i] = pts[i, 2] / s[0] # assert not fit_short reg_ind[i] = pt[1] * self.opt.output_w * self.num_joints + \ pt[0] * self.num_joints + i # note transposed reg_mask[i] = 1 meta = { 'index': self.idxs[index], 'center': c, 'scale': s, 'gt_3d': gt_3d, 'pts_crop': pts_crop } ret = { 'input': inp, 'target': out, 'meta': meta, 'reg_target': reg_target, 'reg_ind': reg_ind, 'reg_mask': reg_mask } return ret
def __getitem__(self, index): img = self._load_image(index) _, pts, c, s = self._get_part_info(index) r = 0 if self.split == 'train': sf = self.opt.scale rf = self.opt.rotate s = s * np.clip(np.random.randn() * sf + 1, 1 - sf, 1 + sf) r = np.clip(np.random.randn() * rf, -rf * 2, rf * 2) \ if np.random.random() <= 0.6 else 0 s = min(s, max(img.shape[0], img.shape[1])) * 1.0 s = np.array([s, s]) s = adjust_aspect_ratio(s, self.aspect_ratio, self.opt.fit_short_side) flipped = ( self.split == 'train' and np.random.random() < self.opt.flip) if flipped: img = img[:, ::-1, :] c[0] = img.shape[1] - 1 - c[0] pts[:, 0] = img.shape[1] - 1 - pts[:, 0] for e in self.shuffle_ref: pts[e[0]], pts[e[1]] = pts[e[1]].copy(), pts[e[0]].copy() trans_input = get_affine_transform( c, s, r, [self.opt.input_h, self.opt.input_w]) inp = cv2.warpAffine( img, trans_input, (self.opt.input_h, self.opt.input_w), flags=cv2.INTER_LINEAR) inp = (inp.astype(np.float32) / 256. - self.mean) / self.std inp = inp.transpose(2, 0, 1) trans_output = get_affine_transform( c, s, r, [self.opt.output_h, self.opt.output_w]) out = np.zeros((self.num_joints, self.opt.output_h, self.opt.output_w), dtype=np.float32) pts_crop = np.zeros((self.num_joints, 2), dtype=np.int32) for i in range(self.num_joints): if pts[i, 0] > 0 or pts[i, 1] > 0: pts_crop[i] = affine_transform(pts[i], trans_output) out[i] = draw_gaussian(out[i], pts_crop[i], self.opt.hm_gauss) meta = {'index': index, 'center': c, 'scale': s, 'pts_crop': pts_crop} return {'input': inp, 'target': out, 'meta': meta}
def __getitem__(self, index): if index == 0 and self.split == 'train': self.idxs = np.random.choice(self.num_samples, self.num_samples, replace=False) img = self._load_image(index) gt_3d, pts, c, s = self._get_part_info(index) r = 0 if self.split == 'train': sf = self.opt.scale s = s * np.clip(np.random.randn() * sf + 1, 1 - sf, 1 + sf) # rf = self.opt.rotate # r = np.clip(np.random.randn()*rf, -rf*2, rf*2) \ # if np.random.random() <= 0.6 else 0 flipped = (self.split == 'train' and np.random.random() < self.opt.flip) if flipped: img = img[:, ::-1, :] c[0] = img.shape[1] - 1 - c[0] gt_3d[:, 0] *= -1 pts[:, 0] = img.shape[1] - 1 - pts[:, 0] for e in self.shuffle_ref_3d: gt_3d[e[0]], gt_3d[e[1]] = gt_3d[e[1]].copy(), gt_3d[ e[0]].copy() for e in self.shuffle_ref: pts[e[0]], pts[e[1]] = pts[e[1]].copy(), pts[e[0]].copy() s = min(s, max(img.shape[0], img.shape[1])) * 1.0 s = np.array([s, s]) s = adjust_aspect_ratio(s, self.aspect_ratio, self.opt.fit_short_side) trans_input = get_affine_transform( c, s, r, [self.opt.input_w, self.opt.input_h]) inp = cv2.warpAffine(img, trans_input, (self.opt.input_w, self.opt.input_h), flags=cv2.INTER_LINEAR) inp = (inp.astype(np.float32) / 256. - self.mean) / self.std inp = inp.transpose(2, 0, 1) trans_output = get_affine_transform( c, s, r, [self.opt.output_w, self.opt.output_h]) out = np.zeros((self.num_joints, self.opt.output_h, self.opt.output_w), dtype=np.float32) reg_target = np.zeros((self.num_joints, 1), dtype=np.float32) reg_ind = np.zeros((self.num_joints), dtype=np.int64) reg_mask = np.zeros((self.num_joints), dtype=np.uint8) pts_crop = np.zeros((self.num_joints, 2), dtype=np.int32) for i in range(self.num_joints): pt = affine_transform(pts[i, :2], trans_output).astype(np.int32) if pt[0] >= 0 and pt[1] >=0 and pt[0] < self.opt.output_w \ and pt[1] < self.opt.output_h: pts_crop[i] = pt out[i] = draw_gaussian(out[i], pt, self.opt.hm_gauss) reg_target[i] = pts[i, 2] / s[ 0] # assert not self.opt.fit_short_side reg_ind[i] = pt[1] * self.opt.output_w * self.num_joints + \ pt[0] * self.num_joints + i # note transposed reg_mask[i] = 1 meta = { 'index': self.idxs[index], 'center': c, 'scale': s, 'gt_3d': gt_3d, 'pts_crop': pts_crop } return { 'input': inp, 'target': out, 'meta': meta, 'reg_target': reg_target, 'reg_ind': reg_ind, 'reg_mask': reg_mask }