def __getitem__(self, index): # data basename base_name, _ = self.data_list[index].split('.') # read image file img = Image.open( os.path.join(self.data_dir, "bg_imgs/" + base_name + ".jpg")) img = img.convert(self.image_mode) # get face bounding box pt2d = get_label_from_txt( os.path.join(self.data_dir, "bbox/" + base_name + ".txt")) x_min, y_min, x_max, y_max = pt2d # crop face loosely:k=0to 0.2 k = np.random.random_sample() * 0.1 x_min -= 0.6 * k * abs(x_max - x_min) y_min -= k * abs(y_max - y_min) x_max += 0.6 * k * abs(x_max - x_min) y_max += 0.6 * k * abs(y_max - y_min) img = img.crop((int(x_min), int(y_min), int(x_max), int(y_max))) # Augmentation:Blur? if np.random.random_sample() < 0.05: img = img.filter(ImageFilter.BLUR) # Augmentation:Gray? if np.random.random_sample() < 0.5 and base_name.find('ID') < 0: img = img.convert('L').convert("RGB") # transform if self.transform: img = self.transform(img) # RGB2BGR img = img[np.array([2, 1, 0]), :, :] # get pose quat quat = get_label_from_txt( os.path.join(self.data_dir, "info/" + base_name + '.txt')) # face orientation vector vector_label = get_attention_vector(quat) vector_label = torch.FloatTensor(vector_label) # classification label classify_label = torch.LongTensor(np.digitize(vector_label, self.bins)) classify_label = np.where(classify_label > self.num_classes, self.num_classes, classify_label) classify_label = np.where(classify_label < 1, 1, classify_label) # soft label soft_label_x = get_soft_label(classify_label[0], self.num_classes) soft_label_y = get_soft_label(classify_label[1], self.num_classes) soft_label_z = get_soft_label(classify_label[2], self.num_classes) soft_label = torch.stack([soft_label_x, soft_label_y, soft_label_z]) return img, soft_label, vector_label, os.path.join( self.data_dir, "bg_imgs/" + base_name + ".jpg")
def __getitem__(self, index): base_name = self.data_list[index][:-4] img = Image.open( os.path.join(self.data_dir, 'bg_imgs/' + base_name + '.jpg')) img = img.convert(self.image_mode) # get face bbox bbox_path = os.path.join(self.data_dir, 'bbox/' + base_name + '.txt') pt2d = get_label_from_txt(bbox_path) x_min = pt2d[0] y_min = pt2d[1] x_max = pt2d[2] y_max = pt2d[3] # Crop the face loosely k = 0.1 x_min -= k * abs(x_max - x_min) y_min -= k * abs(y_max - y_min) x_max += k * abs(x_max - x_min) y_max += 0.3 * k * abs(y_max - y_min) img = img.crop((int(x_min), int(y_min), int(x_max), int(y_max))) # get pose angle pitch,yaw,roll(degrees) angle_path = os.path.join(self.data_dir, 'angles/' + base_name + '.txt') angle = get_label_from_txt(angle_path) angle = torch.FloatTensor(angle) # get pose quat quat_path = os.path.join(self.data_dir, 'info/' + base_name + '.txt') quat = get_label_from_txt(quat_path) # Attention vector attention_vector = get_attention_vector(quat) vector_label = torch.FloatTensor(attention_vector) # classification label bins = np.array(range(-99, 100, self.bin_size)) / 99 classify_label = torch.LongTensor(np.digitize(attention_vector, bins)) # 1-num_classes classify_label = np.where(classify_label > self.num_classes, self.num_classes, classify_label) classify_label = np.where(classify_label < 1, 1, classify_label) # soft label soft_label_x = get_soft_label(classify_label[0], self.num_classes) soft_label_y = get_soft_label(classify_label[1], self.num_classes) soft_label_z = get_soft_label(classify_label[2], self.num_classes) soft_label = torch.stack([soft_label_x, soft_label_y, soft_label_z]) if self.transform is not None: img = self.transform(img) # RGB2BGR img = img[np.array([2, 1, 0]), :, :] return img, soft_label, vector_label, angle, torch.FloatTensor( pt2d), os.path.join(self.data_dir, 'bg_imgs/' + base_name + '.jpg')
def __getitem__(self, index, crop=False): # data basename base_name, _ = self.data_list[index].split('.') # read image file img = Image.open( os.path.join(self.data_dir, "dataset/bg_imgs/" + base_name + ".jpg")) img = img.convert(self.image_mode) if crop: # get face bounding box pt2d = get_label_from_txt( os.path.join(self.data_dir, "bbox/" + base_name + ".txt")) x_min, y_min, x_max, y_max = pt2d # crop face loosely:k=0to 0.2 k = np.random.random_sample() * 0.1 x_min -= 0.6 * k * abs(x_max - x_min) y_min -= k * abs(y_max - y_min) x_max += 0.6 * k * abs(x_max - x_min) y_max += 0.6 * k * abs(y_max - y_min) img = img.crop((int(x_min), int(y_min), int(x_max), int(y_max))) # Augmentation:Blur? if np.random.random_sample() < 0.05: img = img.filter(ImageFilter.BLUR) # Augmentation:Gray? if np.random.random_sample() < 0.5 and base_name.find('ID') < 0: img = img.convert('L').convert("RGB") # transform if self.transform: img = self.transform(img) # RGB2BGR img = img[np.array([2, 1, 0]), :, :] # get pose quat #quat = get_label_from_txt(os.path.join(self.data_dir, "info/" + base_name + '.txt')) info = get_info_from_txt( os.path.join(self.data_dir, "info_all/" + base_name + '.txt')) # face orientation vector #vector_label = get_attention_vector(quat) #get one front vector #vector_label = angle2vector(os.path.join(self.data_dir, "info/" + base_name + '.txt')) #vector_label = torch.FloatTensor(vector_label) #get front vector and right vector front_vector, right_vector, up_vector = get_vectors(info) #print(np.dot(np.array(front_vector),np.array(right_vector))) #print(np.dot(np.array(front_vector),np.array(up_vector))) #print(np.dot(np.array(right_vector),np.array(up_vector))) vector_label_f = torch.FloatTensor(front_vector) vector_label_r = torch.FloatTensor(right_vector) vector_label_u = torch.FloatTensor(up_vector) #----------------front vector------------------------- # classification label classify_label = torch.LongTensor(np.digitize( front_vector, self.bins)) # return the index classify_label = np.where(classify_label > self.num_classes, self.num_classes, classify_label) classify_label = np.where(classify_label < 1, 1, classify_label) # soft label soft_label_x = get_soft_label(classify_label[0], self.num_classes) soft_label_y = get_soft_label(classify_label[1], self.num_classes) soft_label_z = get_soft_label(classify_label[2], self.num_classes) soft_label_f = torch.stack([soft_label_x, soft_label_y, soft_label_z]) #-------------------right vector-------------- classify_label = torch.LongTensor(np.digitize( right_vector, self.bins)) # return the index classify_label = np.where(classify_label > self.num_classes, self.num_classes, classify_label) classify_label = np.where(classify_label < 1, 1, classify_label) # soft label soft_label_x = get_soft_label(classify_label[0], self.num_classes) soft_label_y = get_soft_label(classify_label[1], self.num_classes) soft_label_z = get_soft_label(classify_label[2], self.num_classes) soft_label_r = torch.stack([soft_label_x, soft_label_y, soft_label_z]) #------------------up vector------------------- classify_label = torch.LongTensor(np.digitize( up_vector, self.bins)) # return the index classify_label = np.where(classify_label > self.num_classes, self.num_classes, classify_label) classify_label = np.where(classify_label < 1, 1, classify_label) # soft label soft_label_x = get_soft_label(classify_label[0], self.num_classes) soft_label_y = get_soft_label(classify_label[1], self.num_classes) soft_label_z = get_soft_label(classify_label[2], self.num_classes) soft_label_u = torch.stack([soft_label_x, soft_label_y, soft_label_z]) return img, soft_label_f, soft_label_r, soft_label_u, vector_label_f, vector_label_r, vector_label_u, os.path.join( self.data_dir, "dataset/bg_imgs/" + base_name + ".jpg")
def __getitem__(self, index, crop=False): base_name, _ = self.data_list[index].split('.') img = Image.open( os.path.join(self.data_dir, 'dataset/bg_imgs/' + base_name + '.jpg')) img = img.convert(self.image_mode) if crop: # get face bbox bbox_path = os.path.join(self.data_dir, 'bbox/' + base_name + '.txt') pt2d = get_label_from_txt(bbox_path) x_min = pt2d[0] y_min = pt2d[1] x_max = pt2d[2] y_max = pt2d[3] # Crop the face loosely k = 0.1 x_min -= k * abs(x_max - x_min) y_min -= k * abs(y_max - y_min) x_max += k * abs(x_max - x_min) y_max += 0.3 * k * abs(y_max - y_min) img = img.crop((int(x_min), int(y_min), int(x_max), int(y_max))) # get pose angle pitch,yaw,roll(degrees) ANGLES NO NEEDED!!! #angle_path = os.path.join(self.data_dir, 'angles/' + base_name + '.txt') #angle = get_label_from_txt(angle_path) #angle = torch.FloatTensor(angle) if self.transform is not None: img = self.transform(img) # RGB2BGR img = img[np.array([2, 1, 0]), :, :] # get pose quat #quat = get_label_from_txt(os.path.join(self.data_dir, "info/" + base_name + '.txt')) info = get_info_from_txt( os.path.join(self.data_dir, "info_all/" + base_name + '.txt')) # face orientation vector #vector_label = get_attention_vector(quat) #get one front vector #vector_label = angle2vector(os.path.join(self.data_dir, "info/" + base_name + '.txt')) #vector_label = torch.FloatTensor(vector_label) #get front vector and right vector front_vector, right_vector, up_vector = get_vectors(info) #print(np.dot(np.array(front_vector),np.array(right_vector))) #print(np.dot(np.array(front_vector),np.array(up_vector))) #print(np.dot(np.array(right_vector),np.array(up_vector))) vector_label_f = torch.FloatTensor(front_vector) vector_label_r = torch.FloatTensor(right_vector) vector_label_u = torch.FloatTensor(up_vector) bins = np.array(range(-99, 100, self.bin_size)) / 99 #----------------front vector------------------------- # classification label classify_label = torch.LongTensor(np.digitize( front_vector, bins)) # return the index classify_label = np.where(classify_label > self.num_classes, self.num_classes, classify_label) classify_label = np.where(classify_label < 1, 1, classify_label) # soft label soft_label_x = get_soft_label(classify_label[0], self.num_classes) soft_label_y = get_soft_label(classify_label[1], self.num_classes) soft_label_z = get_soft_label(classify_label[2], self.num_classes) soft_label_f = torch.stack([soft_label_x, soft_label_y, soft_label_z]) #-------------------right vector-------------- classify_label = torch.LongTensor(np.digitize( right_vector, bins)) # return the index classify_label = np.where(classify_label > self.num_classes, self.num_classes, classify_label) classify_label = np.where(classify_label < 1, 1, classify_label) # soft label soft_label_x = get_soft_label(classify_label[0], self.num_classes) soft_label_y = get_soft_label(classify_label[1], self.num_classes) soft_label_z = get_soft_label(classify_label[2], self.num_classes) soft_label_r = torch.stack([soft_label_x, soft_label_y, soft_label_z]) #------------------up vector------------------- classify_label = torch.LongTensor(np.digitize( up_vector, bins)) # return the index classify_label = np.where(classify_label > self.num_classes, self.num_classes, classify_label) classify_label = np.where(classify_label < 1, 1, classify_label) # soft label soft_label_x = get_soft_label(classify_label[0], self.num_classes) soft_label_y = get_soft_label(classify_label[1], self.num_classes) soft_label_z = get_soft_label(classify_label[2], self.num_classes) soft_label_u = torch.stack([soft_label_x, soft_label_y, soft_label_z]) return img, soft_label_f, soft_label_r, soft_label_u, vector_label_f, vector_label_r, vector_label_u, os.path.join( self.data_dir, "dataset/bg_imgs/" + base_name + ".jpg")