def test_random_horizontal_flip(self): random_state = random.getstate() random.seed(42) img = transform.ToPILImage()(jt.random((3, 10, 10))) himg = img.transpose(Image.FLIP_LEFT_RIGHT) num_samples = 250 num_horizontal = 0 for _ in range(num_samples): out = transform.RandomHorizontalFlip()(img) if out == himg: num_horizontal += 1 p_value = stats.binom_test(num_horizontal, num_samples, p=0.5) random.setstate(random_state) self.assertGreater(p_value, 0.0001) num_samples = 250 num_horizontal = 0 for _ in range(num_samples): out = transform.RandomHorizontalFlip(p=0.7)(img) if out == himg: num_horizontal += 1 p_value = stats.binom_test(num_horizontal, num_samples, p=0.7) random.setstate(random_state) self.assertGreater(p_value, 0.0001)
def transforms_imagenet_train( img_size=224, scale=None, ratio=None, hflip=0.5, vflip=0., interpolation='random', mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225), ): """ If separate==True, the transforms are returned as a tuple of 3 separate transforms for use in a mixing dataset that passes * all data through the first (primary) transform, called the 'clean' data * a portion of the data through the secondary transform * normalizes and converts the branches above with the third, final transform """ scale = tuple(scale or (0.08, 1.0)) # default imagenet scale range ratio = tuple(ratio or (3. / 4., 4. / 3.)) # default imagenet ratio range primary_tfl = [ RandomResizedCropAndInterpolation(img_size, scale=scale, ratio=ratio, interpolation=interpolation) ] if hflip > 0.: primary_tfl += [transforms.RandomHorizontalFlip(p=hflip)] if vflip > 0.: primary_tfl += [transforms.RandomVerticalFlip(p=vflip)] final_tfl = [ transforms.ToTensor(), transforms.ImageNormalize(mean=mean, std=std) ] return transforms.Compose(primary_tfl + final_tfl)
def test_imagenet(self): train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=256, shuffle=False) random.seed(0) tc_data = [] for i, data in enumerate(train_loader): tc_data.append(data) print("get", data[0].shape) if i == check_num_batch: break from jittor.dataset.dataset import ImageFolder import jittor.transform as transform dataset = ImageFolder(traindir).set_attrs(batch_size=256, shuffle=False) dataset.set_attrs(transform=transform.Compose([ transform.RandomCropAndResize(224), transform.RandomHorizontalFlip(), transform.ImageNormalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ])) random.seed(0) for i, (images, labels) in enumerate(dataset): print("compare", i) assert np.allclose(images.numpy(), tc_data[i][0].numpy()) assert np.allclose(labels.numpy(), tc_data[i][1].numpy()) if i == check_num_batch: break
def main(): parser = argparse.ArgumentParser() parser.add_argument('--batch_size', type=int, default=32) parser.add_argument('--epochs', type=int, default=50) parser.add_argument('--num_classes', type=int, default=130) parser.add_argument('--lr', type=float, default=2e-3) parser.add_argument('--weight_decay', type=float, default=1e-5) parser.add_argument('--resume', type=bool, default=False) parser.add_argument('--eval', type=bool, default=False) parser.add_argument('--dataroot', type=str, default='/content/drive/MyDrive/dogflg/data2/') parser.add_argument('--model_path', type=str, default='./best_model.bin') parser.add_argument('--sampleratio', type=float, default=0.8) args = parser.parse_args() transform_train = transform.Compose([ transform.Resize((256, 256)), transform.CenterCrop(224), transform.RandomHorizontalFlip(), transform.ToTensor(), transform.ImageNormalize(0.485, 0.229), # transform.ImageNormalize(0.485, 0.456, 0.406], [0.229, 0.224, 0.225]), ]) root_dir = args.dataroot train_loader = TsinghuaDog(root_dir, batch_size=args.batch_size, train=True, part='train', shuffle=True, transform=transform_train, sample_rate=args.sampleratio) transform_test = transform.Compose([ transform.Resize((256, 256)), transform.CenterCrop(224), transform.ToTensor(), transform.ImageNormalize(0.485, 0.229), # transform.ImageNormalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]), ]) val_loader = TsinghuaDog(root_dir, batch_size=args.batch_size, train=False, part='val', shuffle=False, transform=transform_test, sample_rate=args.sampleratio) epochs = args.epochs model = Net(num_classes=args.num_classes) lr = args.lr weight_decay = args.weight_decay optimizer = SGD(model.parameters(), lr=lr, momentum=0.99) if args.resume: model.load(args.model_path) print('model loaded', args.model_path) #random save for test #model.save(args.model_path) if args.eval: evaluate(model, val_loader, save_path=args.model_path) return for epoch in range(epochs): train(model, train_loader, optimizer, epoch) evaluate(model, val_loader, epoch, save_path=args.model_path)
def get_transform(new_size=None): """ obtain the image transforms required for the input data :param new_size: size of the resized images :return: image_transform => transform object from TorchVision """ # from torchvision.transforms import ToTensor, Normalize, Compose, Resize, RandomHorizontalFlip if new_size is not None: image_transform = transform.Compose([ transform.RandomHorizontalFlip(), transform.Resize(new_size), transform.ToTensor(), transform.ImageNormalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)) ]) else: image_transform = transform.Compose([ transform.RandomHorizontalFlip(), transform.ToTensor(), transform.ImageNormalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)) ]) return image_transform
def main(): parser = argparse.ArgumentParser() parser.add_argument('--batch_size', type=int, default=8) parser.add_argument('--epochs', type=int, default=50) parser.add_argument('--num_classes', type=int, default=130) parser.add_argument('--lr', type=float, default=2e-3) parser.add_argument('--weight_decay', type=float, default=1e-5) parser.add_argument('--resume', type=bool, default=False) parser.add_argument('--eval', type=bool, default=False) parser.add_argument('--dataroot', type=str, default='/home/gmh/dataset/TsinghuaDog/') parser.add_argument('--model_path', type=str, default='./best_model.pkl') args = parser.parse_args() transform_train = transform.Compose([ transform.Resize((512, 512)), transform.RandomCrop(448), transform.RandomHorizontalFlip(), transform.ToTensor(), transform.ImageNormalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]), ]) root_dir = args.dataroot train_loader = TsinghuaDog(root_dir, batch_size=16, train=True, part='train', shuffle=True, transform=transform_train) transform_test = transform.Compose([ transform.Resize((512, 512)), transform.CenterCrop(448), transform.ToTensor(), transform.ImageNormalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]), ]) val_loader = TsinghuaDog(root_dir, batch_size=16, train=False, part='val', shuffle=False, transform=transform_test) epochs = args.epochs model = Net(num_classes=args.num_classes) lr = args.lr weight_decay = args.weight_decay optimizer = SGD(model.parameters(), lr=lr, momentum=0.9) if args.resume: model.load(args.model_path) if args.eval: evaluate(model, val_loader) return for epoch in range(epochs): train(model, train_loader, optimizer, epoch) evaluate(model, val_loader, epoch)
def test_random_apply(self): random_state = random.getstate() random.seed(42) random_apply_transform = transform.RandomApply([ transform.RandomHorizontalFlip(), transform.RandomVerticalFlip(), ], p=0.4) img = transform.ToPILImage()(jt.random((3, 10, 10))) num_samples = 250 num_applies = 0 for _ in range(num_samples): out = random_apply_transform(img) if out != img: num_applies += 1 p_value = stats.binom_test(num_applies, num_samples, p=0.3) random.setstate(random_state) self.assertGreater(p_value, 0.0001)
def im_detect_bbox_hflip(model, images, target_scale, target_max_size): """ Performs bbox detection on the horizontally flipped image. Function signature is the same as for im_detect_bbox. """ transform = TT.Compose([ T.Resize(target_scale, target_max_size), TT.RandomHorizontalFlip(1.0), TT.ToTensor(), T.Normalize(mean=cfg.INPUT.PIXEL_MEAN, std=cfg.INPUT.PIXEL_STD, to_bgr255=cfg.INPUT.TO_BGR255) ]) images = [transform(image) for image in images] images = to_image_list(images, cfg.DATALOADER.SIZE_DIVISIBILITY) boxlists = model(images) # Invert the detections computed on the flipped image boxlists_inv = [boxlist.transpose(0) for boxlist in boxlists] return boxlists_inv
lambda_4 = 100 # Cycle pixel-wise # Optimizers optimizer_G = nn.Adam( E1.parameters() + E2.parameters() + G1.parameters() + G2.parameters(), lr=opt.lr, betas=(opt.b1, opt.b2), ) optimizer_D1 = nn.Adam(D1.parameters(), lr=opt.lr, betas=(opt.b1, opt.b2)) optimizer_D2 = nn.Adam(D2.parameters(), lr=opt.lr, betas=(opt.b1, opt.b2)) # Image transformations transform_ = [ transform.Resize(int(opt.img_height * 1.12), Image.BICUBIC), transform.RandomCrop((opt.img_height, opt.img_width)), transform.RandomHorizontalFlip(), transform.ImageNormalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]), ] dataloader = ImageDataset("../../data/%s" % opt.dataset_name, transforms_=transform_, unaligned=True).set_attrs(batch_size=opt.batch_size, shuffle=True, num_workers=opt.n_cpu) val_dataloader = ImageDataset("../../data/%s" % opt.dataset_name, transforms_=transform_, unaligned=True, mode="test").set_attrs(batch_size=5, shuffle=True, num_workers=1)