def _load_batch_pair_pose(self, dataset): data_provider = slim.dataset_data_provider.DatasetDataProvider(dataset, common_queue_capacity=32, common_queue_min=8) image_raw_0, image_raw_1, label, pose_0, pose_1, mask_0, mask_1 = data_provider.get([ 'image_raw_0', 'image_raw_1', 'label', 'pose_sparse_r4_0', 'pose_sparse_r4_1', 'pose_mask_r4_0', 'pose_mask_r4_1']) print("trainer--_load_batch_pair_pose:") print(pose_0) pose_0 = sparse_ops.sparse_tensor_to_dense(pose_0, default_value=0, validate_indices=False) pose_1 = sparse_ops.sparse_tensor_to_dense(pose_1, default_value=0, validate_indices=False) image_raw_0 = tf.reshape(image_raw_0, [128, 64, 3]) image_raw_1 = tf.reshape(image_raw_1, [128, 64, 3]) pose_0 = tf.cast(tf.reshape(pose_0, [128, 64, self.keypoint_num]), tf.float32) # 数据类型转换 pose_1 = tf.cast(tf.reshape(pose_1, [128, 64, self.keypoint_num]), tf.float32) # mask_0 = tf.cast(tf.reshape(mask_0, [128, 64, 1]), tf.float32) mask_1 = tf.cast(tf.reshape(mask_1, [128, 64, 1]), tf.float32) images_0, images_1, poses_0, poses_1, masks_0, masks_1 = tf.train.batch([image_raw_0, image_raw_1, pose_0, pose_1, mask_0, mask_1], batch_size=self.batch_size, num_threads=self.num_threads, capacity=self.capacityCoff * self.batch_size) images_0 = utils_wgan.process_image(tf.to_float(images_0), 127.5, 127.5) images_1 = utils_wgan.process_image(tf.to_float(images_1), 127.5, 127.5) poses_0 = poses_0*2-1 poses_1 = poses_1*2-1 return images_0, images_1, poses_0, poses_1, masks_0, masks_1
def test(self): print("测试") test_result_dir = os.path.join(self.model_dir, 'test_result') test_result_dir_x = os.path.join(test_result_dir, 'x') test_result_dir_x_target = os.path.join(test_result_dir, 'x_target') test_result_dir_G = os.path.join(test_result_dir, 'G') test_result_dir_pose = os.path.join(test_result_dir, 'pose') test_result_dir_pose_target = os.path.join(test_result_dir, 'pose_target') test_result_dir_mask = os.path.join(test_result_dir, 'mask') test_result_dir_mask_target = os.path.join(test_result_dir, 'mask_target') if not os.path.exists(test_result_dir): os.makedirs(test_result_dir) if not os.path.exists(test_result_dir_x): os.makedirs(test_result_dir_x) if not os.path.exists(test_result_dir_x_target): os.makedirs(test_result_dir_x_target) if not os.path.exists(test_result_dir_G): os.makedirs(test_result_dir_G) if not os.path.exists(test_result_dir_pose): os.makedirs(test_result_dir_pose) if not os.path.exists(test_result_dir_pose_target): os.makedirs(test_result_dir_pose_target) if not os.path.exists(test_result_dir_mask): os.makedirs(test_result_dir_mask) if not os.path.exists(test_result_dir_mask_target): os.makedirs(test_result_dir_mask_target) for i in xrange(400): x_fixed, x_target_fixed, pose_fixed, pose_target_fixed, mask_fixed, mask_target_fixed = self.get_image_from_loader() x = utils_wgan.process_image(x_fixed, 127.5, 127.5) x_target = utils_wgan.process_image(x_target_fixed, 127.5, 127.5) if 0==i: x_fake = self.generate(x, x_target, pose_target_fixed, test_result_dir, idx=self.start_step, save=True) else: x_fake = self.generate(x, x_target, pose_target_fixed, test_result_dir, idx=self.start_step, save=False) p = (np.amax(pose_fixed, axis=-1, keepdims=False)+1.0)*127.5 pt = (np.amax(pose_target_fixed, axis=-1, keepdims=False)+1.0)*127.5 for j in xrange(self.batch_size): idx = i*self.batch_size+j im = Image.fromarray(x_fixed[j,:].astype(np.uint8)) im.save('%s/%05d.png'%(test_result_dir_x, idx)) im = Image.fromarray(x_target_fixed[j,:].astype(np.uint8)) im.save('%s/%05d.png'%(test_result_dir_x_target, idx)) im = Image.fromarray(x_fake[j,:].astype(np.uint8)) im.save('%s/%05d.png'%(test_result_dir_G, idx)) im = Image.fromarray(p[j,:].astype(np.uint8)) im.save('%s/%05d.png'%(test_result_dir_pose, idx)) im = Image.fromarray(pt[j,:].astype(np.uint8)) im.save('%s/%05d.png'%(test_result_dir_pose_target, idx)) im = Image.fromarray(mask_fixed[j,:].squeeze().astype(np.uint8)) im.save('%s/%05d.png'%(test_result_dir_mask, idx)) im = Image.fromarray(mask_target_fixed[j,:].squeeze().astype(np.uint8)) im.save('%s/%05d.png'%(test_result_dir_mask_target, idx)) if 0==i: save_image(x_fixed, '{}/x_fixed.png'.format(test_result_dir)) save_image(x_target_fixed, '{}/x_target_fixed.png'.format(test_result_dir)) save_image(mask_fixed, '{}/mask_fixed.png'.format(test_result_dir)) save_image(mask_target_fixed, '{}/mask_target_fixed.png'.format(test_result_dir)) save_image((np.amax(pose_fixed, axis=-1, keepdims=True)+1.0)*127.5, '{}/pose_fixed.png'.format(test_result_dir)) save_image((np.amax(pose_target_fixed, axis=-1, keepdims=True)+1.0)*127.5, '{}/pose_target_fixed.png'.format(test_result_dir))
def test(self): test_result_dir = os.path.join(self.model_dir, 'test_result') test_result_dir_x = os.path.join(test_result_dir, 'x') test_result_dir_x_target = os.path.join(test_result_dir, 'x_target') test_result_dir_G = os.path.join(test_result_dir, 'G') test_result_dir_pose = os.path.join(test_result_dir, 'pose') test_result_dir_pose_target = os.path.join(test_result_dir, 'pose_target') test_result_dir_mask = os.path.join(test_result_dir, 'mask') test_result_dir_mask_target = os.path.join(test_result_dir, 'mask_target') if not os.path.exists(test_result_dir): os.makedirs(test_result_dir) if not os.path.exists(test_result_dir_x): os.makedirs(test_result_dir_x) if not os.path.exists(test_result_dir_x_target): os.makedirs(test_result_dir_x_target) if not os.path.exists(test_result_dir_G): os.makedirs(test_result_dir_G) if not os.path.exists(test_result_dir_pose): os.makedirs(test_result_dir_pose) if not os.path.exists(test_result_dir_pose_target): os.makedirs(test_result_dir_pose_target) if not os.path.exists(test_result_dir_mask): os.makedirs(test_result_dir_mask) if not os.path.exists(test_result_dir_mask_target): os.makedirs(test_result_dir_mask_target) for i in xrange(400): x_fixed, x_target_fixed, pose_fixed, pose_target_fixed, mask_fixed, mask_target_fixed = self.get_image_from_loader() x = utils_wgan.process_image(x_fixed, 127.5, 127.5) x_target = utils_wgan.process_image(x_target_fixed, 127.5, 127.5) if 0==i: x_fake = self.generate(x, x_target, pose_target_fixed, test_result_dir, idx=self.start_step, save=True) else: x_fake = self.generate(x, x_target, pose_target_fixed, test_result_dir, idx=self.start_step, save=False) p = (np.amax(pose_fixed, axis=-1, keepdims=False)+1.0)*127.5 pt = (np.amax(pose_target_fixed, axis=-1, keepdims=False)+1.0)*127.5 for j in xrange(self.batch_size): idx = i*self.batch_size+j im = Image.fromarray(x_fixed[j,:].astype(np.uint8)) im.save('%s/%05d.png'%(test_result_dir_x, idx)) im = Image.fromarray(x_target_fixed[j,:].astype(np.uint8)) im.save('%s/%05d.png'%(test_result_dir_x_target, idx)) im = Image.fromarray(x_fake[j,:].astype(np.uint8)) im.save('%s/%05d.png'%(test_result_dir_G, idx)) im = Image.fromarray(p[j,:].astype(np.uint8)) im.save('%s/%05d.png'%(test_result_dir_pose, idx)) im = Image.fromarray(pt[j,:].astype(np.uint8)) im.save('%s/%05d.png'%(test_result_dir_pose_target, idx)) im = Image.fromarray(mask_fixed[j,:].squeeze().astype(np.uint8)) im.save('%s/%05d.png'%(test_result_dir_mask, idx)) im = Image.fromarray(mask_target_fixed[j,:].squeeze().astype(np.uint8)) im.save('%s/%05d.png'%(test_result_dir_mask_target, idx)) if 0==i: save_image(x_fixed, '{}/x_fixed.png'.format(test_result_dir)) save_image(x_target_fixed, '{}/x_target_fixed.png'.format(test_result_dir)) save_image(mask_fixed, '{}/mask_fixed.png'.format(test_result_dir)) save_image(mask_target_fixed, '{}/mask_target_fixed.png'.format(test_result_dir)) save_image((np.amax(pose_fixed, axis=-1, keepdims=True)+1.0)*127.5, '{}/pose_fixed.png'.format(test_result_dir)) save_image((np.amax(pose_target_fixed, axis=-1, keepdims=True)+1.0)*127.5, '{}/pose_target_fixed.png'.format(test_result_dir))
def train(self): x_fixed, x_target_fixed, pose_fixed, pose_target_fixed, mask_fixed, mask_target_fixed = self.get_image_from_loader() save_image(x_fixed, '{}/x_fixed.png'.format(self.model_dir)) save_image(x_target_fixed, '{}/x_target_fixed.png'.format(self.model_dir)) save_image((np.amax(pose_fixed, axis=-1, keepdims=True)+1.0)*127.5, '{}/pose_fixed.png'.format(self.model_dir)) save_image((np.amax(pose_target_fixed, axis=-1, keepdims=True)+1.0)*127.5, '{}/pose_target_fixed.png'.format(self.model_dir)) save_image(mask_fixed, '{}/mask_fixed.png'.format(self.model_dir)) save_image(mask_target_fixed, '{}/mask_target_fixed.png'.format(self.model_dir)) for step in trange(self.start_step, self.max_step): if step < 22000: self.sess.run(self.g_optim1) else: # Train generator if step > 0: self.sess.run(self.g_optim2) # Train critic if (self.wgan_gp.MODE == 'dcgan') or (self.wgan_gp.MODE == 'lsgan'): disc_ITERS = 1 else: disc_ITERS = self.wgan_gp.CRITIC_ITERS for i in range(disc_ITERS): self.sess.run(self.d_optim) if self.wgan_gp.MODE == 'wgan': self.sess.run(self.clip_disc_weights) fetch_dict = {} if step % self.log_step == self.log_step-1: fetch_dict.update({ "summary": self.summary_op }) # "k_t": self.k_t, result = self.sess.run(fetch_dict) if step % self.log_step == self.log_step-1: self.summary_writer.add_summary(result['summary'], step) self.summary_writer.flush() if step % (self.log_step * 3) == (self.log_step * 3)-1: # if self.data_format == 'NCHW': # x = x_fixed.transpose([0, 3, 1, 2]) # else: # x = x_fixed x = utils_wgan.process_image(x_fixed, 127.5, 127.5) x_target = utils_wgan.process_image(x_target_fixed, 127.5, 127.5) self.generate(x, x_target, pose_target_fixed, self.model_dir, idx=step) if step % self.lr_update_step == self.lr_update_step - 1: self.sess.run([self.g_lr_update, self.d_lr_update]) if step % (self.log_step * 30) == (self.log_step * 30)-1: self.saver.save(self.sess, os.path.join(self.model_dir, 'model.ckpt'), global_step=step)
def _load_batch_pair_pose(self, dataset): data_provider = slim.dataset_data_provider.DatasetDataProvider( dataset, common_queue_capacity=32, common_queue_min=8) image_raw_0, image_raw_1, label, pose_0, pose_1, mask_0, mask_1 = data_provider.get( [ 'image_raw_0', 'image_raw_1', 'label', 'pose_sparse_r4_0', 'pose_sparse_r4_1', 'pose_mask_r4_0', 'pose_mask_r4_1' ]) print("trainer--_load_batch_pair_pose:") print(pose_0) pose_0 = sparse_ops.sparse_tensor_to_dense(pose_0, default_value=0, validate_indices=False) pose_1 = sparse_ops.sparse_tensor_to_dense(pose_1, default_value=0, validate_indices=False) image_raw_0 = tf.reshape(image_raw_0, [128, 64, 3]) image_raw_1 = tf.reshape(image_raw_1, [128, 64, 3]) pose_0 = tf.cast(tf.reshape(pose_0, [128, 64, self.keypoint_num]), tf.float32) # 数据类型转换 pose_1 = tf.cast(tf.reshape(pose_1, [128, 64, self.keypoint_num]), tf.float32) # mask_0 = tf.cast(tf.reshape(mask_0, [128, 64, 1]), tf.float32) mask_1 = tf.cast(tf.reshape(mask_1, [128, 64, 1]), tf.float32) images_0, images_1, poses_0, poses_1, masks_0, masks_1 = tf.train.batch( [image_raw_0, image_raw_1, pose_0, pose_1, mask_0, mask_1], batch_size=self.batch_size, num_threads=self.num_threads, capacity=self.capacityCoff * self.batch_size) images_0 = utils_wgan.process_image(tf.to_float(images_0), 127.5, 127.5) images_1 = utils_wgan.process_image(tf.to_float(images_1), 127.5, 127.5) poses_0 = poses_0 * 2 - 1 poses_1 = poses_1 * 2 - 1 return images_0, images_1, poses_0, poses_1, masks_0, masks_1
def generate_hunter(self, x_input, pose_input, path=None, save=True): #x_input_ = cv2.resize(x_input, (64, 128)) x_input_ = cv2.resize(x_input, (256, 256)) x_input_ = np.expand_dims(x_input_, axis=0) #pdb.set_trace() #pose_input_ = np.transpose(pose_input, axes=(1, 2, 0)) #pose_input_ = cv2.resize(pose_input_, (64, 128)) #p_save = pose_input_.sum(axis=2) #p_save = Image.fromarray(p_save.astype(np.uint8)) #p_save.save('hhh.png') pose_target_fixed = np.expand_dims(pose_input, axis=0) x_fixed = utils_wgan.process_image(x_input_, 127.5, 127.5) G = self.sess.run(self.G, { self.x: x_fixed, self.pose_target: pose_target_fixed }) #pdb.set_trace() if path is None and save: current_path = '/media/cheng/marvel/Pose-Guided-Person-Image-Generation/test/' path = os.path.join(current_path, 'test.png') im = Image.fromarray(G[0, :].astype(np.uint8)) im.save(path) print("fake image generated.") return G
def test(self): test_result_dir = os.path.join(self.model_dir, 'test_result') test_result_dir_x = os.path.join(test_result_dir, 'x') test_result_dir_x_target = os.path.join(test_result_dir, 'x_target') test_result_dir_G = os.path.join(test_result_dir, 'G') test_result_dir_pose = os.path.join(test_result_dir, 'pose') test_result_dir_pose_target = os.path.join(test_result_dir, 'pose_target') test_result_dir_mask = os.path.join(test_result_dir, 'mask') test_result_dir_mask_target = os.path.join(test_result_dir, 'mask_target') if not os.path.exists(test_result_dir): os.makedirs(test_result_dir) if not os.path.exists(test_result_dir_x): os.makedirs(test_result_dir_x) if not os.path.exists(test_result_dir_x_target): os.makedirs(test_result_dir_x_target) if not os.path.exists(test_result_dir_G): os.makedirs(test_result_dir_G) if not os.path.exists(test_result_dir_pose): os.makedirs(test_result_dir_pose) if not os.path.exists(test_result_dir_pose_target): os.makedirs(test_result_dir_pose_target) if not os.path.exists(test_result_dir_mask): os.makedirs(test_result_dir_mask) if not os.path.exists(test_result_dir_mask_target): os.makedirs(test_result_dir_mask_target) with open("data/DF_test_data/p_pairs_test.p", 'rb') as f: p_pairs = pickle.load(f) c = 0 for i in range(400): if c == len(p_pairs): break x_fixed, x_target_fixed, pose_fixed, pose_target_fixed, mask_fixed, mask_target_fixed = self.get_image_from_loader() x = utils_wgan.process_image(x_fixed, 127.5, 127.5) x_target = utils_wgan.process_image(x_target_fixed, 127.5, 127.5) if 0==i: x_fake = self.generate(x, x_target, pose_target_fixed, test_result_dir, idx=self.start_step, save=True) else: x_fake = self.generate(x, x_target, pose_target_fixed, test_result_dir, idx=self.start_step, save=False) p = (np.amax(pose_fixed, axis=-1, keepdims=False)+1.0)*127.5 pt = (np.amax(pose_target_fixed, axis=-1, keepdims=False)+1.0)*127.5 for j in range(self.batch_size): idx = i*self.batch_size+j # fasionMENShirtsPolosid0000372503_1front.jpg_fasionMENShirtsPolosid0000372503_3back.jpg.png img_name = p_pairs[c][0] + '_' + p_pairs[c][1] im = Image.fromarray(x_fixed[j,:].astype(np.uint8)) im.save('%s/%s.png'%(test_result_dir_x, img_name)) im = Image.fromarray(x_target_fixed[j,:].astype(np.uint8)) im.save('%s/%s.png'%(test_result_dir_x_target, img_name)) im = Image.fromarray(x_fake[j,:].astype(np.uint8)) im.save('%s/%s.png'%(test_result_dir_G, img_name)) im = Image.fromarray(p[j,:].astype(np.uint8)) im.save('%s/%s.png'%(test_result_dir_pose, img_name)) im = Image.fromarray(pt[j,:].astype(np.uint8)) im.save('%s/%s.png'%(test_result_dir_pose_target, img_name)) im = Image.fromarray(mask_fixed[j,:].squeeze().astype(np.uint8)) im.save('%s/%s.png'%(test_result_dir_mask, img_name)) im = Image.fromarray(mask_target_fixed[j,:].squeeze().astype(np.uint8)) im.save('%s/%s.png'%(test_result_dir_mask_target, img_name)) c += 1 if 0==i: save_image(x_fixed, '{}/x_fixed.png'.format(test_result_dir)) save_image(x_target_fixed, '{}/x_target_fixed.png'.format(test_result_dir)) save_image(mask_fixed, '{}/mask_fixed.png'.format(test_result_dir)) save_image(mask_target_fixed, '{}/mask_target_fixed.png'.format(test_result_dir)) save_image((np.amax(pose_fixed, axis=-1, keepdims=True)+1.0)*127.5, '{}/pose_fixed.png'.format(test_result_dir)) save_image((np.amax(pose_target_fixed, axis=-1, keepdims=True)+1.0)*127.5, '{}/pose_target_fixed.png'.format(test_result_dir))
def train(self): print("训练") x_fixed, x_target_fixed, pose_fixed, pose_target_fixed, mask_fixed, mask_target_fixed = \ self.get_image_from_loader() # 以下是灰度图 # print("x_fixed:", x_fixed.shape) # print("x_target_fixed:", x_target_fixed.shape) # print("mask_fixed:", mask_fixed.shape) # print("mask_target_fixed:", mask_target_fixed.shape) # print("pose_fixed[0][40][40]:", np.array(pose_fixed[0][40][40])) # print("pose_target_fixed:", pose_target_fixed.shape) save_image(x_fixed, '{}/.png'.format(self.model_dir)) save_image(x_target_fixed, '{}/x_target_fixed.png'.format(self.model_dir)) save_image((np.amax(pose_fixed, axis=-1, keepdims=True)+1.0)*127.5, '{}/pose_fixed.png'.format(self.model_dir)) save_image((np.amax(pose_target_fixed, axis=-1, keepdims=True)+1.0)*127.5, '{}/pose_target_fixed.png'.format(self.model_dir)) save_image(mask_fixed, '{}/mask_fixed.png'.format(self.model_dir)) save_image(mask_target_fixed, '{}/mask_target_fixed.png'.format(self.model_dir)) for step in trange(self.start_step, self.max_step): if step < 22000: self.sess.run(self.g_optim1) else: # Train generator if step > 0: self.sess.run(self.g_optim2) # Train critic if (self.wgan_gp.MODE == 'dcgan') or (self.wgan_gp.MODE == 'lsgan'): disc_ITERS = 1 else: disc_ITERS = self.wgan_gp.CRITIC_ITERS for i in xrange(disc_ITERS): self.sess.run(self.d_optim) if self.wgan_gp.MODE == 'wgan': self.sess.run(self.clip_disc_weights) fetch_dict = {} if step % self.log_step == self.log_step-1: fetch_dict.update({"summary": self.summary_op}) # "k_t": self.k_t, result = self.sess.run(fetch_dict) if step % self.log_step == self.log_step-1: self.summary_writer.add_summary(result['summary'], step) self.summary_writer.flush() if step % (self.log_step * 3) == (self.log_step * 3)-1: # if self.data_format == 'NCHW': # x = x_fixed.transpose([0, 3, 1, 2]) # else: # x = x_fixed x = utils_wgan.process_image(x_fixed, 127.5, 127.5) x_target = utils_wgan.process_image(x_target_fixed, 127.5, 127.5) self.generate(x, x_target, pose_target_fixed, self.model_dir, idx=step) if step % self.lr_update_step == self.lr_update_step - 1: self.sess.run([self.g_lr_update, self.d_lr_update]) if step % (self.log_step * 30) == (self.log_step * 30)-1: self.saver.save(self.sess, os.path.join(self.model_dir, 'model.ckpt'), global_step=step)