def _get_bm_rec_and_gt_bm_gt_rec(self, epoch, dis_img): ### pred flow part flow_pre = np.load( self.npz_epoch_flow_read_paths[epoch] )["arr_0"] ### see資料夾 內的flow 該epoch產生的flow 讀出來,npz的讀法要["arr_0"],因為我存npz的時候沒給key_value,預設就 arr_0 囉! flow = Value_Range_Postprocess_to_01( flow_pre, self.result_obj.exp_obj_use_gt_range) bm, rec = check_flow_quality_then_I_w_F_to_R(dis_img, flow) ### gt flow part gt_flow = np.load(self.flow_gt_npz_path)[ "arr_0"] ### npz的讀法要["arr_0"],因為我存npz的時候沒給key_value,預設就 arr_0 囉! if ( "real" in self.see_name ): ### 因為 see-real 沒有gt_flow, 本來全黑沒問題, 不過我後來有玩 fake_see 不是全黑就會出問題, 所以乾脆 see-real 就不要處理 h, w = gt_flow.shape[:2] gt_bm = np.zeros(shape=(h, w, 2)) gt_rec = np.zeros(shape=(h, w, 3)) else: gt_bm, gt_rec = check_flow_quality_then_I_w_F_to_R(dis_img, flow) return bm, rec, gt_bm, gt_rec
def I_w_Mgt_Gen_Cx_Cy_to_C_with_Mgt_to_F_see(model_G, phase, index, in_img, in_img_pre, _3, gt_mask_coord_pre, rec_hope=None, exp_obj=None, training=True, see_reset_init=True, postprocess=False, add_loss=False, bgr2rgb=True): current_ep = exp_obj.current_ep current_time = exp_obj.current_time if (phase == "see"): used_sees = exp_obj.result_obj.sees elif (phase == "test"): used_sees = exp_obj.result_obj.tests private_write_dir = used_sees[ index].see_write_dir ### 每個 see 都有自己的資料夾 存 in/gt 之類的 輔助檔案 ,先定出位置 private_rec_write_dir = used_sees[ index].rec_visual_write_dir ### 每個 see 都有自己的資料夾 存 in/gt 之類的 輔助檔案 ,先定出位置 public_write_dir = "/".join(used_sees[index].see_write_dir.replace( "\\", "/").split("/")[:-1]) ### private 的上一層資料夾 ''' gt_mask_coord_pre[0] 為 mask (1, h, w, 1) gt_mask_coord_pre[1] 為 coord (1, h, w, 2) 先y 在x bgr2rgb: tf2 讀出來是 rgb, 但 cv2 存圖是bgr, 所以此狀況記得要轉一下ch 把 bgr2rgb設True! ''' ### 這裡是轉第1次的bgr2rgb, 轉成cv2 的 bgr in_img, I_w_M_visual, flow, flow_visual, Mgt_visual, gt_flow_visual, gt_flow, Cx_visual, Cy_visual, Cxgt_visual, Cygt_visual, rec_hope = I_w_Mgt_Gen_Cx_Cy_to_C_w_Mgt_to_F_basic_data( model_G, in_img, in_img_pre, gt_mask_coord_pre, rec_hope, exp_obj=exp_obj, training=training, bgr2rgb=bgr2rgb) if (current_ep == 0 or see_reset_init): ### 第一次執行的時候,建立資料夾 和 寫一些 進去資料夾比較好看的東西 Check_dir_exist_and_build(private_write_dir) ### 建立 放輔助檔案 的資料夾 Check_dir_exist_and_build(private_rec_write_dir) ### 建立 放輔助檔案 的資料夾 cv2.imwrite(private_write_dir + "/" + "0a_u1a0-dis_img.jpg", in_img) cv2.imwrite(private_write_dir + "/" + "0a_u1a1-gt_mask.jpg", Mgt_visual) cv2.imwrite( private_write_dir + "/" + "0a_u1a2-dis_img_w_Mgt((in_img)).jpg", I_w_M_visual) ''' 覺得 u1b 不用寫 mask, 因為 unet1 又沒有 output mask! ''' np.save(private_write_dir + "/" + "0b_u1b1-gt_b_gt_flow", gt_flow) ### 寫一張 gt圖進去,進去資料夾時比較好看,0b是為了保證自動排序會放在第二張 cv2.imwrite(private_write_dir + "/" + "0b_u1b2-gt_b_gt_flow.jpg", gt_flow_visual) ### 寫一張 gt圖進去,進去資料夾時比較好看,0b是為了保證自動排序會放在第二張 cv2.imwrite(private_write_dir + "/" + "0b_u1b3-gt_b_gt_Cx.jpg", Cxgt_visual) ### 寫一張 gt圖進去,進去資料夾時比較好看,0b是為了保證自動排序會放在第二張 cv2.imwrite(private_write_dir + "/" + "0b_u1b4-gt_b_gt_Cy.jpg", Cygt_visual) ### 寫一張 gt圖進去,進去資料夾時比較好看,0b是為了保證自動排序會放在第二張 cv2.imwrite( private_write_dir + "/" + "0c-rec_hope.jpg", rec_hope ) ### 寫一張 rec_hope圖進去,hope 我 rec可以做到這麼好ˊ口ˋ,0c是為了保證自動排序會放在第三張 np.save(private_write_dir + "/" + "epoch_%04i_u1b1_flow" % current_ep, flow) ### 我覺得不可以直接存npy,因為太大了!但最後為了省麻煩還是存了,相對就減少see的數量來讓總大小變小囉~ cv2.imwrite(private_write_dir + "/" + "epoch_%04i_u1b2_flow.jpg" % current_ep, flow_visual) ### 把 生成的 flow_visual 存進相對應的資料夾 cv2.imwrite( private_write_dir + "/" + "epoch_%04i_u1b3_Cx.jpg" % current_ep, Cx_visual) ### 我覺得不可以直接存npy,因為太大了!但最後為了省麻煩還是存了,相對就減少see的數量來讓總大小變小囉~ cv2.imwrite( private_write_dir + "/" + "epoch_%04i_u1b4_Cy.jpg" % current_ep, Cy_visual) ### 我覺得不可以直接存npy,因為太大了!但最後為了省麻煩還是存了,相對就減少see的數量來讓總大小變小囉~ if (postprocess): current_see_name = used_sees[index].see_name.replace( "/", "-" ) ### 因為 test 會有多一層 "test_db_name"/test_001, 所以把 / 改成 - ,下面 Save_fig 才不會多一層資料夾 bm, rec = check_flow_quality_then_I_w_F_to_R(dis_img=in_img, flow=flow) '''gt不能做bm_rec,因為 real_photo 沒有 C! 所以雖然用 test_blender可以跑, 但 test_real_photo 會卡住, 因為 C 全黑!''' # gt_bm, gt_rec = check_flow_quality_then_I_w_F_to_R(dis_img=in_img, flow=gt_flow) cv2.imwrite( private_rec_write_dir + "/" + "rec_epoch=%04i.jpg" % current_ep, rec) # print("private_rec_write_dir:", private_rec_write_dir + "/" + "rec_epoch=%04i.jpg" % current_ep) single_row_imgs = Matplot_single_row_imgs( imgs=[ in_img, Mgt_visual, I_w_M_visual, flow_visual, rec, rec_hope ], ### 把要顯示的每張圖包成list img_titles=[ "in_img", "gt_mask", "I_with_M", "pred_flow_v", "pred_rec", "rec_hope" ], ### 把每張圖要顯示的字包成list fig_title="%s, epoch=%04i" % (current_see_name, int(current_ep)), ### 圖上的大標題 add_loss=add_loss, bgr2rgb=bgr2rgb) ### 這裡是轉第2次的bgr2rgb, 剛好轉成plt 的 rgb single_row_imgs.Draw_img() single_row_imgs.Save_fig( dst_dir=public_write_dir, name=current_see_name) ### 如果沒有要接續畫loss,就可以存了喔! print("save to:", exp_obj.result_obj.test_write_dir)
def I_gen_M_w_I_gen_C_w_M_to_F_see(model_G, phase, index, in_img, in_img_pre, gt_mask_coord, _4, rec_hope=None, exp_obj=None, training=True, see_reset_init=True, postprocess=False, add_loss=False, bgr2rgb=True): current_ep = exp_obj.current_ep current_time = exp_obj.current_time if (phase == "see"): used_sees = exp_obj.result_obj.sees elif (phase == "test"): used_sees = exp_obj.result_obj.tests private_write_dir = used_sees[ index].see_write_dir ### 每個 see 都有自己的資料夾 存 in/gt 之類的 輔助檔案 ,先定出位置 private_rec_write_dir = used_sees[ index].rec_visual_write_dir ### 每個 see 都有自己的資料夾 存 in/gt 之類的 輔助檔案 ,先定出位置 public_write_dir = "/".join(used_sees[index].see_write_dir.replace( "\\", "/").split("/")[:-1]) ### private 的上一層資料夾 in_img, M_visual, Mgt_visual, I_with_M_visual, F, F_visual, Fgt, Fgt_visual, Cx_visual, Cy_visual, Cxgt_visual, Cygt_visual, rec_hope = I_gen_M_w_I_gen_C_w_M_to_F_basic_data( model_G, in_img, in_img_pre, gt_mask_coord, rec_hope=rec_hope, exp_obj=exp_obj, training=training, bgr2rgb=bgr2rgb) if (current_ep == 0 or see_reset_init): ### 第一次執行的時候,建立資料夾 和 寫一些 進去資料夾比較好看的東西 Check_dir_exist_and_build(private_write_dir) ### 建立 放輔助檔案 的資料夾 Check_dir_exist_and_build(private_rec_write_dir) ### 建立 放輔助檔案 的資料夾 cv2.imwrite(f"{private_write_dir}/0a_u1a0-dis_img(in_img).jpg", in_img) cv2.imwrite(f"{private_write_dir}/0b_u1b1-gt_mask.jpg", Mgt_visual) np.save(f"{private_write_dir}/0b_u2b2-gt_flow.npy", Fgt) cv2.imwrite(f"{private_write_dir}/0b_u2b3-gt_flow.jpg", Fgt_visual) cv2.imwrite(f"{private_write_dir}/0b_u2b4-gt_Cx.jpg", Cxgt_visual) cv2.imwrite(f"{private_write_dir}/0b_u2b5-gt_Cy.jpg", Cygt_visual) cv2.imwrite(f"{private_write_dir}/0c-rec_hope.jpg", rec_hope) cv2.imwrite( private_write_dir + "/" + "epoch_%04i_u1b1-mask.jpg" % current_ep, M_visual) cv2.imwrite( private_write_dir + "/" + "epoch_%04i_u2a1-I_w_M.jpg" % current_ep, I_with_M_visual) np.save(private_write_dir + "/" + "epoch_%04i_u2b2-flow.npy" % current_ep, F) cv2.imwrite( private_write_dir + "/" + "epoch_%04i_u2b3-flow.jpg" % current_ep, F_visual) cv2.imwrite( private_write_dir + "/" + "epoch_%04i_u2b4-Cx.jpg" % current_ep, Cx_visual) cv2.imwrite( private_write_dir + "/" + "epoch_%04i_u2b5-Cy.jpg" % current_ep, Cy_visual) if (postprocess): current_see_name = used_sees[index].see_name.replace( "/", "-" ) ### 因為 test 會有多一層 "test_db_name"/test_001, 所以把 / 改成 - ,下面 Save_fig 才不會多一層資料夾 bm, rec = check_flow_quality_then_I_w_F_to_R(dis_img=in_img, flow=F) '''gt不能做bm_rec,因為 real_photo 沒有 C! 所以雖然用 test_blender可以跑, 但 test_real_photo 會卡住, 因為 C 全黑!''' # gt_bm, gt_rec = check_flow_quality_then_I_w_F_to_R(dis_img=in_img, flow=gt_flow) ### 因為 real_photo 沒有 C! 所以雖然用 test_blender可以跑, 但 test_real_photo 會卡住, 因為 C 全黑! cv2.imwrite( private_rec_write_dir + "/" + "rec_epoch=%04i.jpg" % current_ep, rec) single_row_imgs = Matplot_single_row_imgs( imgs=[ in_img, M_visual, Mgt_visual, I_with_M_visual, F_visual, Fgt_visual, rec, rec_hope ], ### 把要顯示的每張圖包成list img_titles=[ "in_img", "Mask", "gt_Mask", "I_with_M", "pred_flow_v", "gt_flow_v", "pred_rec", "rec_hope" ], ### 把每張圖要顯示的字包成list fig_title="%s, current_ep=%04i" % (current_see_name, int(current_ep)), ### 圖上的大標題 add_loss=add_loss, bgr2rgb=bgr2rgb) ### 這裡會轉第2次bgr2rgb, 剛好轉成plt 的 rgb single_row_imgs.Draw_img() single_row_imgs.Save_fig( dst_dir=public_write_dir, name=current_see_name ) ### 這裡是轉第2次的bgr2rgb, 剛好轉成plt 的 rgb ### 如果沒有要接續畫loss,就可以存了喔! print("save to:", exp_obj.result_obj.test_write_dir)
def I_Generate_F_see(model_G, phase, index, in_img, in_img_pre, gt_flow, _4, rec_hope, exp_obj=None, training=True, see_reset_init=True, postprocess=False, add_loss=False, bgr2rgb=True): current_ep = exp_obj.current_ep current_time = exp_obj.current_time if (phase == "see"): used_sees = exp_obj.result_obj.sees elif (phase == "test"): used_sees = exp_obj.result_obj.tests private_write_dir = used_sees[ index].see_write_dir ### 每個 see 都有自己的資料夾 存 in/gt 之類的 輔助檔案 ,先定出位置 private_rec_write_dir = used_sees[ index].rec_visual_write_dir ### 每個 see 都有自己的資料夾 存 in/gt 之類的 輔助檔案 ,先定出位置 public_write_dir = "/".join(used_sees[index].see_write_dir.replace( "\\", "/").split("/")[:-1]) ### private 的上一層資料夾 ''' bgr2rgb: tf2 讀出來是 rgb, 但 cv2 存圖是bgr, 所以此狀況記得要轉一下ch 把 bgr2rgb設True! ''' in_img, flow, gt_flow, rec_hope, flow_visual, M_visual, Cx_visual, Cy_visual, gt_flow_visual, Mgt_visual, Cxgt_visual, Cygt_visual = I_Gen_F_basic_data( model_G, in_img, in_img_pre, gt_flow, rec_hope, exp_obj=exp_obj, training=training, bgr2rgb=bgr2rgb) if (current_ep == 0 or see_reset_init): ### 第一次執行的時候,建立資料夾 和 寫一些 進去資料夾比較好看的東西 Check_dir_exist_and_build(private_write_dir) ### 建立 see資料夾 Check_dir_exist_and_build(private_rec_write_dir) ### 建立 see資料夾 cv2.imwrite(private_write_dir + "/" + "0a_u1a0-dis_img(in_img).jpg", in_img) ### 寫一張 in圖進去,進去資料夾時比較好看,0a是為了保證自動排序會放在第一張 np.save(private_write_dir + "/" + "0b_u1b1-gt_flow", gt_flow) ### 寫一張 gt圖進去,進去資料夾時比較好看,0b是為了保證自動排序會放在第二張 cv2.imwrite(private_write_dir + "/" + "0b_u1b2-gt_flow.jpg", gt_flow_visual) ### 寫一張 gt圖進去,進去資料夾時比較好看,0b是為了保證自動排序會放在第二張 cv2.imwrite(private_write_dir + "/" + "0b_u1b3-gt_Cx.jpg", Cxgt_visual) ### 寫一張 gt圖進去,進去資料夾時比較好看,0b是為了保證自動排序會放在第二張 cv2.imwrite(private_write_dir + "/" + "0b_u1b4-gt_Cy.jpg", Cygt_visual) ### 寫一張 gt圖進去,進去資料夾時比較好看,0b是為了保證自動排序會放在第二張 cv2.imwrite( private_write_dir + "/" + "0c-rec_hope.jpg", rec_hope ) ### 寫一張 rec_hope圖進去,hope 我 rec可以做到這麼好ˊ口ˋ,0c是為了保證自動排序會放在第三張 np.save(private_write_dir + "/" + "epoch_%04i_u1b1_flow" % current_ep, flow) ### 我覺得不可以直接存npy,因為太大了!但最後為了省麻煩還是存了,相對就減少see的數量來讓總大小變小囉~ cv2.imwrite(private_write_dir + "/" + "epoch_%04i_u1b2_flow.jpg" % current_ep, flow_visual) ### 把 生成的 flow_visual 存進相對應的資料夾 cv2.imwrite( private_write_dir + "/" + "epoch_%04i_u1b3_Cx.jpg" % current_ep, Cx_visual) ### 我覺得不可以直接存npy,因為太大了!但最後為了省麻煩還是存了,相對就減少see的數量來讓總大小變小囉~ cv2.imwrite( private_write_dir + "/" + "epoch_%04i_u1b4_Cy.jpg" % current_ep, Cy_visual) ### 我覺得不可以直接存npy,因為太大了!但最後為了省麻煩還是存了,相對就減少see的數量來讓總大小變小囉~ ### matplot_visual的部分,記得因為用 matplot 所以要 bgr轉rgb,但是因為有用matplot_visual_single_row_imgs,裡面會bgr轉rgb了,所以這裡不用轉囉! ### 這部分要記得做!在 train_step3 的 exp_obj.result_obj.Draw_loss_during_train(epoch, self.epochs) 才有畫布可以畫loss! ### 目前覺得好像也不大會去看matplot_visual,所以就先把這註解掉了 # exp_obj.result_obj.sees[see_index].save_as_matplot_visual_during_train(current_ep, bgr2rgb=True) if (postprocess): current_see_name = used_sees[index].see_name.replace( "/", "-" ) ### 因為 test 會有多一層 "test_db_name"/test_001, 所以把 / 改成 - ,下面 Save_fig 才不會多一層資料夾 bm, rec = check_flow_quality_then_I_w_F_to_R(dis_img=in_img, flow=flow) '''gt不能做bm_rec,因為 real_photo 沒有 C! 所以雖然用 test_blender可以跑, 但 test_real_photo 會卡住, 因為 C 全黑!''' # gt_bm, gt_rec = check_flow_quality_then_I_w_F_to_R(dis_img=in_img, flow=gt_flow) cv2.imwrite( private_rec_write_dir + "/" + "rec_epoch=%04i.jpg" % current_ep, rec) single_row_imgs = Matplot_single_row_imgs( imgs=[in_img, flow_visual, rec, rec_hope], ### 把要顯示的每張圖包成list img_titles=["in_img", "pred_flow_v", "pred_rec", "rec_hope"], ### 把每張圖要顯示的字包成list fig_title="%s, current_ep=%04i" % (current_see_name, int(current_ep)), ### 圖上的大標題 add_loss=add_loss, bgr2rgb=bgr2rgb) ### 這裡會轉第2次bgr2rgb, 剛好轉成plt 的 rgb single_row_imgs.Draw_img() single_row_imgs.Save_fig( dst_dir=public_write_dir, name=current_see_name ) ### 這裡是轉第2次的bgr2rgb, 剛好轉成plt 的 rgb ### 如果沒有要接續畫loss,就可以存了喔! print("save to:", exp_obj.result_obj.test_write_dir)
def I_w_Mgt_Gen_Cx_Cy_focus_to_C_with_Mgt_to_F_see(model_G, phase, index, dis_img, dis_img_pre, _3, Mgt_C_pre, rec_hope=None, exp_obj=None, training=True, see_reset_init=True, postprocess=False, add_loss=False, bgr2rgb=True): current_ep = exp_obj.current_ep current_time = exp_obj.current_time if (phase == "see"): used_sees = exp_obj.result_obj.sees elif(phase == "test"): used_sees = exp_obj.result_obj.tests private_write_dir = used_sees[index].see_write_dir ### 每個 see 都有自己的資料夾 存 in/gt 之類的 輔助檔案 ,先定出位置 private_rec_write_dir = used_sees[index].rec_visual_write_dir ### 每個 see 都有自己的資料夾 存 in/gt 之類的 輔助檔案 ,先定出位置 public_write_dir = "/".join(used_sees[index].see_write_dir.replace("\\", "/").split("/")[:-1]) ### private 的上一層資料夾 ''' Mgt_C_pre[0] 為 mask (1, h, w, 1) Mgt_C_pre[1] 為 C (1, h, w, 2) 先y 在x bgr2rgb: tf2 讀出來是 rgb, 但 cv2 存圖是bgr, 所以此狀況記得要轉一下ch 把 bgr2rgb設True! ''' ''' bgr2rgb: tf2 讀出來是 rgb, 但 cv2 存圖是bgr, 所以此狀況記得要轉一下ch 把 bgr2rgb設True! 但 plt 存圖是rgb, 所以存圖不用轉ch, 把 bgr2rgb設False喔! ''' dis_img = dis_img[0].numpy() C_raw, I_w_M_visual, Mgt_pre = use_model(model_G, None, dis_img_pre, None, Mgt_C_pre, exp_obj.use_gt_range, training=training) Mgt = Mgt_C_pre[0, ..., 0:1].numpy() Cgt = Mgt_C_pre[0, ..., 1:3].numpy() Mgt_visual = (Mgt * 255).astype(np.uint8) F_raw, F_raw_visual, Cx_raw_visual, Cy_raw_visual, F_w_Mgt, F_w_Mgt_visual, Cx_w_Mgt_visual, Cy_w_Mgt_visual = C_and_C_w_M_to_F_and_visualize(C_raw, Mgt) Fgt, Fgt_visual, Cxgt_visual, Cygt_visual, _, _, _, _ = C_and_C_w_M_to_F_and_visualize(Cgt, Mgt) ### 這裡是轉第1次的bgr2rgb, 轉成cv2 的 bgr F_raw_visual = F_raw_visual [:, :, ::-1] ### cv2 處理完 是 bgr, 但這裡都是用 tf2 rgb的角度來處理, 所以就模擬一下 轉乘 tf2 的rgb囉! F_w_Mgt_visual = F_w_Mgt_visual[:, :, ::-1] ### cv2 處理完 是 bgr, 但這裡都是用 tf2 rgb的角度來處理, 所以就模擬一下 轉乘 tf2 的rgb囉! Fgt_visual = Fgt_visual [:, :, ::-1] ### cv2 處理完 是 bgr, 但這裡都是用 tf2 rgb的角度來處理, 所以就模擬一下 轉乘 tf2 的rgb囉! rec_hope = rec_hope[0].numpy() if(bgr2rgb): dis_img = dis_img [:, :, ::-1] ### tf2 讀出來是 rgb, 但cv2存圖是bgr, 所以記得要轉一下ch I_w_M_visual = I_w_M_visual [:, :, ::-1] rec_hope = rec_hope [:, :, ::-1] ### tf2 讀出來是 rgb, 但cv2存圖是bgr, 所以記得要轉一下ch F_raw_visual = F_raw_visual [:, :, ::-1] ### tf2 讀出來是 rgb, 但cv2存圖是bgr, 所以記得要轉一下ch F_w_Mgt_visual = F_w_Mgt_visual[:, :, ::-1] ### tf2 讀出來是 rgb, 但cv2存圖是bgr, 所以記得要轉一下ch Fgt_visual = Fgt_visual [:, :, ::-1] ### tf2 讀出來是 rgb, 但cv2存圖是bgr, 所以記得要轉一下ch if(current_ep == 0 or see_reset_init): ### 第一次執行的時候,建立資料夾 和 寫一些 進去資料夾比較好看的東西 Check_dir_exist_and_build(private_write_dir) ### 建立 放輔助檔案 的資料夾 Check_dir_exist_and_build(private_rec_write_dir) ### 建立 放輔助檔案 的資料夾 cv2.imwrite(private_write_dir + "/" + "0a_u1a0-dis_img.jpg", dis_img) cv2.imwrite(private_write_dir + "/" + "0a_u1a1-Mgt.jpg", Mgt_visual) cv2.imwrite(private_write_dir + "/" + "0a_u1a2-dis_img_w_Mgt(dis_img).jpg", I_w_M_visual) ''' 覺得 u1b 不用寫 mask, 因為 unet1 又沒有 output mask! ''' np.save (private_write_dir + "/" + "0b_u1b1-gt_b_Fgt", Fgt) ### 寫一張 gt圖進去,進去資料夾時比較好看,0b是為了保證自動排序會放在第二張 cv2.imwrite(private_write_dir + "/" + "0b_u1b2-gt_b_Fgt.jpg", Fgt_visual) ### 寫一張 gt圖進去,進去資料夾時比較好看,0b是為了保證自動排序會放在第二張 cv2.imwrite(private_write_dir + "/" + "0b_u1b3-gt_b_Cgtx.jpg", Cxgt_visual) ### 寫一張 gt圖進去,進去資料夾時比較好看,0b是為了保證自動排序會放在第二張 cv2.imwrite(private_write_dir + "/" + "0b_u1b4-gt_b_Cgty.jpg", Cygt_visual) ### 寫一張 gt圖進去,進去資料夾時比較好看,0b是為了保證自動排序會放在第二張 cv2.imwrite(private_write_dir + "/" + "0c-rec_hope.jpg", rec_hope) ### 寫一張 rec_hope圖進去,hope 我 rec可以做到這麼好ˊ口ˋ,0c是為了保證自動排序會放在第三張 np.save( private_write_dir + "/" + "epoch_%04i_u1b1_F_w_Mgt" % current_ep, F_w_Mgt) ### 我覺得不可以直接存npy,因為太大了!但最後為了省麻煩還是存了,相對就減少see的數量來讓總大小變小囉~ cv2.imwrite(private_write_dir + "/" + "epoch_%04i_u1b2_F_raw.jpg" % current_ep, F_raw_visual) ### 把 生成的 F_visual 存進相對應的資料夾 cv2.imwrite(private_write_dir + "/" + "epoch_%04i_u1b3_F_w_Mgt.jpg" % current_ep, F_w_Mgt_visual) ### 把 生成的 F_visual 存進相對應的資料夾 cv2.imwrite(private_write_dir + "/" + "epoch_%04i_u1b4_Cx_raw.jpg" % current_ep, Cx_raw_visual) ### 我覺得不可以直接存npy,因為太大了!但最後為了省麻煩還是存了,相對就減少see的數量來讓總大小變小囉~ cv2.imwrite(private_write_dir + "/" + "epoch_%04i_u1b5_Cx_w_Mgt.jpg" % current_ep, Cx_w_Mgt_visual) ### 我覺得不可以直接存npy,因為太大了!但最後為了省麻煩還是存了,相對就減少see的數量來讓總大小變小囉~ cv2.imwrite(private_write_dir + "/" + "epoch_%04i_u1b6_Cy_raw.jpg" % current_ep, Cy_raw_visual) ### 我覺得不可以直接存npy,因為太大了!但最後為了省麻煩還是存了,相對就減少see的數量來讓總大小變小囉~ cv2.imwrite(private_write_dir + "/" + "epoch_%04i_u1b7_Cy_w_Mgt.jpg" % current_ep, Cy_w_Mgt_visual) ### 我覺得不可以直接存npy,因為太大了!但最後為了省麻煩還是存了,相對就減少see的數量來讓總大小變小囉~ if(postprocess): current_see_name = used_sees[index].see_name.replace("/", "-") ### 因為 test 會有多一層 "test_db_name"/test_001, 所以把 / 改成 - ,下面 Save_fig 才不會多一層資料夾 bm, rec = check_flow_quality_then_I_w_F_to_R(dis_img=dis_img, F=F) '''gt不能做bm_rec,因為 real_photo 沒有 C! 所以雖然用 test_blender可以跑, 但 test_real_photo 會卡住, 因為 C 全黑!''' # gt_bm, gt_rec = check_F_quality_then_I_w_F_to_R(dis_img=dis_img, F=Fgt) cv2.imwrite(private_rec_write_dir + "/" + "rec_epoch=%04i.jpg" % current_ep, rec) # print("private_rec_write_dir:", private_rec_write_dir + "/" + "rec_epoch=%04i.jpg" % current_ep) single_row_imgs = Matplot_single_row_imgs( imgs =[ dis_img , Mgt_visual, I_w_M_visual, F_raw_visual, F_w_Mgt_visual, rec, rec_hope], ### 把要顯示的每張圖包成list img_titles=["dis_img", "Mgt", "I_with_M", "F_raw", "F_w_Mgt", "pred_rec", "rec_hope"], ### 把每張圖要顯示的字包成list fig_title ="%s, epoch=%04i" % (current_see_name, int(current_ep)), ### 圖上的大標題 add_loss =add_loss, bgr2rgb = bgr2rgb) ### 這裡是轉第2次的bgr2rgb, 剛好轉成plt 的 rgb single_row_imgs.Draw_img() single_row_imgs.Save_fig(dst_dir=public_write_dir, name=current_see_name) ### 如果沒有要接續畫loss,就可以存了喔! print("save to:", exp_obj.result_obj.test_write_dir)
def W_w_M_Gen_Cx_Cy_see(model_G, phase, index, in_WM, in_WM_pre, Fgt, Fgt_pre, rec_hope=None, exp_obj=None, training=True, see_reset_init=True, postprocess=False, add_loss=False, bgr2rgb=True): current_ep = exp_obj.current_ep current_time = exp_obj.current_time if (phase == "see"): used_sees = exp_obj.result_obj.sees elif(phase == "test"): used_sees = exp_obj.result_obj.tests private_write_dir = used_sees[index].see_write_dir ### 每個 see 都有自己的資料夾 存 in/gt 之類的 輔助檔案 ,先定出位置 private_rec_write_dir = used_sees[index].rec_visual_write_dir ### 每個 see 都有自己的資料夾 存 in/gt 之類的 輔助檔案 ,先定出位置 public_write_dir = "/".join(used_sees[index].see_write_dir.replace("\\", "/").split("/")[:-1]) ### private 的上一層資料夾 # print("private_rec_write_dir:", private_rec_write_dir) ''' in_WM_pre[..., 3:4] 為 M (1, h, w, 1) in_WM_pre[..., 0:3] 為 W (1, h, w, 3) 先z 再y 再x bgr2rgb: tf2 讀出來是 rgb, 但 cv2 存圖是bgr, 所以此狀況記得要轉一下ch 把 bgr2rgb設True! ''' # plt.imshow(in_img[0]) # plt.show() rec_hope = rec_hope[0].numpy() W_pre, Mgt_pre, W_pre_W_M_pre, Cx_pre, Cy_pre = use_model(model_G, in_WM_pre, training) ### visualize W_pre W_01 = Value_Range_Postprocess_to_01(W_pre) W_01 = W_01[0].numpy() W_visual, Wx_visual, Wy_visual, Wz_visual = W_01_visual_op(W_01) ### visualize Mgt_pre Mgt_visual = (Mgt_pre[0].numpy() * 255).astype(np.uint8) ### visualize W_pre_W_M_pre W_w_M_01 = Value_Range_Postprocess_to_01(W_pre_W_M_pre) W_w_M_01 = W_w_M_01[0].numpy() W_w_M_visual, Wx_w_M_visual, Wy_w_M_visual, Wz_w_M_visual = W_01_visual_op(W_w_M_01) ### Cx_pre, Cy_pre postprocess and visualize ### postprocess C_pre = np.concatenate([Cy_pre, Cx_pre], axis=-1) ### tensor 會自動轉 numpy C = Value_Range_Postprocess_to_01(C_pre, exp_obj.use_gt_range) C = C[0] Cgt = Fgt[0, ..., 1:3].numpy() Mgt = Fgt[0, ..., 0:1].numpy() F, F_visual, Cx_visual, Cy_visual = C_concat_with_M_to_F_and_get_F_visual(C, Mgt) Fgt, Fgt_visual, Cxgt_visual, Cygt_visual = C_concat_with_M_to_F_and_get_F_visual(Cgt, Mgt) F_visual = F_visual [:, :, ::-1] ### cv2 處理完 是 bgr, 但這裡都是用 tf2 rgb的角度來處理, 所以就模擬一下 轉乘 tf2 的rgb囉! Fgt_visual = Fgt_visual[:, :, ::-1] ### cv2 處理完 是 bgr, 但這裡都是用 tf2 rgb的角度來處理, 所以就模擬一下 轉乘 tf2 的rgb囉! ### 這個是給後處理用的 dis_img dis_img = in_WM[1][0].numpy() ### [0]第一個是 取 wc, [1] 是取 dis_img, 第二個[0]是取 batch ### 這裡是轉第1次的bgr2rgb, 轉成cv2 的 bgr if(bgr2rgb): rec_hope = rec_hope [:, :, ::-1] ### tf2 讀出來是 rgb, 但cv2存圖是bgr, 所以記得要轉一下ch F_visual = F_visual [:, :, ::-1] ### tf2 讀出來是 rgb, 但cv2存圖是bgr, 所以記得要轉一下ch Fgt_visual = Fgt_visual[:, :, ::-1] ### tf2 讀出來是 rgb, 但cv2存圖是bgr, 所以記得要轉一下ch dis_img = dis_img [:, :, ::-1] ### tf2 讀出來是 rgb, 但cv2存圖是bgr, 所以記得要轉一下ch if(current_ep == 0 or see_reset_init): ### 第一次執行的時候,建立資料夾 和 寫一些 進去資料夾比較好看的東西 Check_dir_exist_and_build(private_write_dir) ### 建立 放輔助檔案 的資料夾 cv2.imwrite(private_write_dir + "/" + "0a_u1a0-dis_img.jpg", dis_img) cv2.imwrite(private_write_dir + "/" + "0a_u1a1-ord_W_01.jpg", W_visual) cv2.imwrite(private_write_dir + "/" + "0a_u1a1-ord_Wx_01.jpg", Wx_visual) cv2.imwrite(private_write_dir + "/" + "0a_u1a1-ord_Wy_01.jpg", Wy_visual) cv2.imwrite(private_write_dir + "/" + "0a_u1a1-ord_Wz_01.jpg", Wz_visual) cv2.imwrite(private_write_dir + "/" + "0a_u1a2-gt_mask.jpg", Mgt_visual) cv2.imwrite(private_write_dir + "/" + "0a_u1a3-W_w_Mgt(in_img).jpg", W_w_M_visual) cv2.imwrite(private_write_dir + "/" + "0a_u1a3-Wx_w_Mgt.jpg", Wx_w_M_visual) cv2.imwrite(private_write_dir + "/" + "0a_u1a3-Wy_w_Mgt.jpg", Wy_w_M_visual) cv2.imwrite(private_write_dir + "/" + "0a_u1a3-Wz_w_Mgt.jpg", Wz_w_M_visual) np.save (private_write_dir + "/" + "0b_u1b1-gt_b_gt_flow", Fgt) cv2.imwrite(private_write_dir + "/" + "0b_u1b2-gt_b_gt_flow.jpg", Fgt_visual) cv2.imwrite(private_write_dir + "/" + "0b_u1b3-gt_b_gt_Cx.jpg", Cxgt_visual) cv2.imwrite(private_write_dir + "/" + "0b_u1b4-gt_b_gt_Cy.jpg", Cygt_visual) cv2.imwrite(private_write_dir + "/" + "0c-rec_hope.jpg", rec_hope) np.save( private_write_dir + "/" + "epoch_%04i_u1b1_flow" % current_ep, F) cv2.imwrite(private_write_dir + "/" + "epoch_%04i_u1b2_flow.jpg" % current_ep, F_visual) cv2.imwrite(private_write_dir + "/" + "epoch_%04i_u1b3_Cx.jpg" % current_ep, Cx_visual) cv2.imwrite(private_write_dir + "/" + "epoch_%04i_u1b4_Cy.jpg" % current_ep, Cy_visual) if(postprocess): current_see_name = used_sees[index].see_name.replace("/", "-") ### 因為 test 會有多一層 "test_db_name"/test_001, 所以把 / 改成 - ,下面 Save_fig 才不會多一層資料夾 bm, rec = check_flow_quality_then_I_w_F_to_R(dis_img=dis_img, flow=F) '''gt不能做bm_rec,因為 real_photo 沒有 C! 所以雖然用 test_blender可以跑, 但 test_real_photo 會卡住, 因為 C 全黑!''' cv2.imwrite(private_rec_write_dir + "/" + "rec_epoch=%04i.jpg" % current_ep, rec) single_row_imgs = Matplot_single_row_imgs( imgs =[ W_visual , Mgt_visual , W_w_M_visual, F_visual , rec, rec_hope], ### 把要顯示的每張圖包成list img_titles=["W_01", "Mgt", "W_w_M", "pred_F", "pred_rec", "rec_hope"], ### 把每張圖要顯示的字包成list fig_title ="%s, current_ep=%04i" % (current_see_name, int(current_ep)), ### 圖上的大標題 add_loss =add_loss, bgr2rgb =bgr2rgb) ### 這裡會轉第2次bgr2rgb, 剛好轉成plt 的 rgb single_row_imgs.Draw_img() single_row_imgs.Save_fig(dst_dir=public_write_dir, name=current_see_name) ### 這裡是轉第2次的bgr2rgb, 剛好轉成plt 的 rgb ### 如果沒有要接續畫loss,就可以存了喔! print("save to:", exp_obj.result_obj.test_write_dir)