示例#1
0
    def evaluate_finegan(self):
        if cfg.TRAIN.NET_G == '':
            print('Error: the path for model not found!')
        else:
            # Build and load the generator
            netG = G_NET()
            netG.apply(weights_init)
            netG = torch.nn.DataParallel(netG, device_ids=self.gpus)
            model_dict = netG.state_dict()

            state_dict = \
                torch.load(cfg.TRAIN.NET_G,
                           map_location=lambda storage, loc: storage)['birds128']

            state_dict = {k: v for k, v in state_dict.items() if k in model_dict}

            model_dict.update(state_dict)
            netG.load_state_dict(model_dict)
            print('Load ', cfg.TRAIN.NET_G)

            # Uncomment this to print Generator layers
            print(netG)

            sys

            nz = cfg.GAN.Z_DIM
            noise = torch.FloatTensor(self.batch_size, nz)
            noise.data.normal_(0, 1)

            if cfg.CUDA:
                netG.cuda()
                noise = noise.cuda()

            netG.eval()

            background_class = cfg.TEST_BACKGROUND_CLASS
            parent_class = cfg.TEST_PARENT_CLASS
            child_class = cfg.TEST_CHILD_CLASS
            bg_code = torch.zeros([self.batch_size, cfg.FINE_GRAINED_CATEGORIES])
            p_code = torch.zeros([self.batch_size, cfg.SUPER_CATEGORIES])
            c_code = torch.zeros([self.batch_size, cfg.FINE_GRAINED_CATEGORIES])

            for j in range(self.batch_size):
                bg_code[j][background_class] = 1
                p_code[j][parent_class] = 1
                c_code[j][child_class] = 1

            fake_imgs, fg_imgs, mk_imgs, fgmk_imgs = netG(noise, c_code, p_code, bg_code) # Forward pass through the generator

            self.save_image(fake_imgs[0][0], self.save_dir, 'background')
            self.save_image(fake_imgs[1][0], self.save_dir, 'parent_final')
            self.save_image(fake_imgs[2][0], self.save_dir, 'child_final')
            self.save_image(fg_imgs[0][0], self.save_dir, 'parent_foreground')
            self.save_image(fg_imgs[1][0], self.save_dir, 'child_foreground')
            self.save_image(mk_imgs[0][0], self.save_dir, 'parent_mask')
            self.save_image(mk_imgs[1][0], self.save_dir, 'child_mask')
            self.save_image(fgmk_imgs[0][0], self.save_dir, 'parent_foreground_masked')
            self.save_image(fgmk_imgs[1][0], self.save_dir, 'child_foreground_masked')
示例#2
0
    def sample_images(self):
        sample_size = 24
        save_dir = '../sample_images/'
        save_final = '../sample_finals/'

        if not os.path.exists(save_dir):
            os.makedirs(save_dir)

        if not os.path.exists(save_final):
            os.makedirs(save_final)

        random.seed(datetime.now())
        depth = cfg.TEST_DEPTH
        res = 32 * 2**depth
        if cfg.TRAIN.NET_G == '':
            print('Error: the path for model not found!')
        else:
            # Build and load the generator
            netG = G_NET(depth)
            netG.apply(weights_init)
            netG = torch.nn.DataParallel(netG, device_ids=self.gpus)
            model_dict = netG.state_dict()

            state_dict = \
                torch.load(cfg.TRAIN.NET_G,
                           map_location=lambda storage, loc: storage)

            state_dict = {
                k: v
                for k, v in state_dict.items() if k in model_dict
            }

            model_dict.update(state_dict)
            netG.load_state_dict(model_dict)
            print('Load ', cfg.TRAIN.NET_G)

            # Uncomment this to print Generator layers
            # print(netG)

            nz = cfg.GAN.Z_DIM
            noise = torch.FloatTensor(1, nz)
            # noise.data.normal_(0, 1)
            # noise = noise.repeat(1, 1)

            if cfg.CUDA:
                netG.cuda()
                noise = noise.cuda()

            netG.eval()

            for i in tqdm(range(sample_size)):
                noise.data.normal_(0, 1)
                bg_code = torch.zeros([1, cfg.FINE_GRAINED_CATEGORIES]).cuda()
                p_code = torch.zeros([1, cfg.SUPER_CATEGORIES]).cuda()
                c_code = torch.zeros([1, cfg.FINE_GRAINED_CATEGORIES]).cuda()
                b = random.randint(0, cfg.FINE_GRAINED_CATEGORIES - 1)
                p = random.randint(0, cfg.SUPER_CATEGORIES - 1)
                c = random.randint(0, cfg.FINE_GRAINED_CATEGORIES - 1)
                bg_code[0][b] = 1
                p_code[0][p] = 1
                c_code[0][c] = 1

                fake_imgs, fg_imgs, mk_imgs, fgmk_imgs = netG(
                    noise, c_code, 1, p_code,
                    bg_code)  # Forward pass through the generator

                self.save_image(fake_imgs[3 * depth + 0][0], save_dir,
                                '%d_bg' % i)
                self.save_image(fake_imgs[3 * depth + 1][0], save_dir,
                                '%d_pf' % i)
                self.save_image(fake_imgs[3 * depth + 2][0], save_dir,
                                '%d_cf' % i)
                self.save_image(fake_imgs[3 * depth + 2][0], save_final,
                                '%d' % i)
                # self.save_image(fg_imgs[2 * depth + 0][0], save_dir, 'parent_foreground')
                # self.save_image(fg_imgs[2 * depth + 1][0], save_dir, 'child_foreground')
                self.save_image(mk_imgs[2 * depth + 0][0], save_dir,
                                '%d_pmk' % i)
                self.save_image(mk_imgs[2 * depth + 1][0], save_dir,
                                '%d_cmk' % i)
示例#3
0
    def evaluate_finegan(self):
        self.save_dir = os.path.join(cfg.SAVE_DIR, 'images')
        mkdir_p(self.save_dir)
        random.seed(datetime.now())
        depth = cfg.TEST_DEPTH
        res = 32 * 2**depth
        if cfg.TRAIN.NET_G == '':
            print('Error: the path for model not found!')
        else:
            # Build and load the generator
            netG = G_NET(depth)
            netG.apply(weights_init)
            netG = torch.nn.DataParallel(netG, device_ids=self.gpus)
            model_dict = netG.state_dict()

            state_dict = \
                torch.load(cfg.TRAIN.NET_G,
                           map_location=lambda storage, loc: storage)

            state_dict = {
                k: v
                for k, v in state_dict.items() if k in model_dict
            }

            model_dict.update(state_dict)
            netG.load_state_dict(model_dict)
            print('Load ', cfg.TRAIN.NET_G)

            # Uncomment this to print Generator layers
            # print(netG)

            nrow = 6
            ncol = 4
            z_std = 0.1
            p_vs_c = False
            reprod = False

            if not reprod:
                torch.manual_seed(random.randint(-9999, 9999))

            bg_li = []
            pf_li = []
            cf_li = []
            pk_li = []
            ck_li = []
            pfg_li = []
            cfg_li = []
            pfgmk_li = []
            cfgmk_li = []
            b = random.randint(0, cfg.FINE_GRAINED_CATEGORIES - 1)

            nz = cfg.GAN.Z_DIM
            noise = torch.FloatTensor(1, nz)

            noise.data.normal_(0, z_std)
            # noise = noise.repeat(self.batch_size, 1)

            if cfg.CUDA:
                netG.cuda()
                noise = noise.cuda()

            netG.eval()

            c_li = np.random.randint(0,
                                     cfg.FINE_GRAINED_CATEGORIES - 1,
                                     size=nrow)
            p_li = np.random.randint(0, cfg.SUPER_CATEGORIES - 1, size=nrow)
            for k in range(ncol):
                p = p_li[k]
                # p = random.randint(0, cfg.SUPER_CATEGORIES-1)
                for i in range(nrow):
                    bg_code = torch.zeros(
                        [self.batch_size, cfg.FINE_GRAINED_CATEGORIES])
                    p_code = torch.zeros(
                        [self.batch_size, cfg.SUPER_CATEGORIES])
                    c_code = torch.zeros(
                        [self.batch_size, cfg.FINE_GRAINED_CATEGORIES])
                    c = c_li[i]
                    for j in range(self.batch_size):
                        bg_code[j][b] = 1
                        p_code[j][p] = 1
                        c_code[j][c] = 1

                    fake_imgs, fg_imgs, mk_imgs, fgmk_imgs = netG(
                        noise, c_code, None, p_code,
                        bg_code)  # Forward pass through the generator
                    bg_li.append(fake_imgs[3 * depth][0])
                    pf_li.append(fake_imgs[3 * depth + 1][0])
                    cf_li.append(fake_imgs[3 * depth + 2][0])
                    pk_li.append(mk_imgs[2 * depth][0])
                    ck_li.append(mk_imgs[2 * depth + 1][0])
                    pfg_li.append(fg_imgs[2 * depth][0])
                    cfg_li.append(fg_imgs[2 * depth + 1][0])
                    pfgmk_li.append(fgmk_imgs[2 * depth][0])
                    cfgmk_li.append(fgmk_imgs[2 * depth + 1][0])

            save_image(bg_li, self.save_dir, 'background_pvc', nrow, res)
            save_image(pf_li, self.save_dir, 'parent_final_pvc', nrow, res)
            save_image(cf_li, self.save_dir, 'child_final_pvc', nrow, res)
            save_image(pfg_li, self.save_dir, 'parent_foreground_pvc', nrow,
                       res)
            save_image(cfg_li, self.save_dir, 'child_foreground_pvc', nrow,
                       res)
            save_image(pk_li, self.save_dir, 'parent_mask_pvc', nrow, res)
            save_image(ck_li, self.save_dir, 'child_mask_pvc', nrow, res)
            save_image(pfgmk_li, self.save_dir, 'parent_foreground_masked_pvc',
                       nrow, res)
            save_image(cfgmk_li, self.save_dir, 'child_foreground_masked_pvc',
                       nrow, res)

            bg_li = []
            pf_li = []
            cf_li = []
            pk_li = []
            ck_li = []
            pfg_li = []
            cfg_li = []
            pfgmk_li = []
            cfgmk_li = []
            for _ in range(ncol):
                noise.data.normal_(0, z_std)
                for i in range(nrow):
                    bg_code = torch.zeros(
                        [self.batch_size, cfg.FINE_GRAINED_CATEGORIES])
                    p_code = torch.zeros(
                        [self.batch_size, cfg.SUPER_CATEGORIES])
                    c_code = torch.zeros(
                        [self.batch_size, cfg.FINE_GRAINED_CATEGORIES])
                    c = c_li[i]
                    p = p_li[i]
                    for j in range(self.batch_size):
                        bg_code[j][b] = 1
                        p_code[j][p] = 1
                        c_code[j][c] = 1

                    fake_imgs, fg_imgs, mk_imgs, fgmk_imgs = netG(
                        noise, c_code, None, p_code,
                        bg_code)  # Forward pass through the generator
                    bg_li.append(fake_imgs[3 * depth][0])
                    pf_li.append(fake_imgs[3 * depth + 1][0])
                    cf_li.append(fake_imgs[3 * depth + 2][0])
                    pk_li.append(mk_imgs[2 * depth][0])
                    ck_li.append(mk_imgs[2 * depth + 1][0])
                    pfg_li.append(fg_imgs[2 * depth][0])
                    cfg_li.append(fg_imgs[2 * depth + 1][0])
                    pfgmk_li.append(fgmk_imgs[2 * depth][0])
                    cfgmk_li.append(fgmk_imgs[2 * depth + 1][0])

            save_image(bg_li, self.save_dir, 'background_zvpc', nrow, res)
            save_image(pf_li, self.save_dir, 'parent_final_zvpc', nrow, res)
            save_image(cf_li, self.save_dir, 'child_final_zvpc', nrow, res)
            save_image(pfg_li, self.save_dir, 'parent_foreground_zvpc', nrow,
                       res)
            save_image(cfg_li, self.save_dir, 'child_foreground_zvpc', nrow,
                       res)
            save_image(pk_li, self.save_dir, 'parent_mask_zvpc', nrow, res)
            save_image(ck_li, self.save_dir, 'child_mask_zvpc', nrow, res)
            save_image(pfgmk_li, self.save_dir,
                       'parent_foreground_masked_zvpc', nrow, res)
            save_image(cfgmk_li, self.save_dir, 'child_foreground_masked_zvpc',
                       nrow, res)