示例#1
0
def load_images(images_file_path,
                batch_size,
                resize_size=256,
                is_train=True,
                crop_size=224,
                is_cen=False,
                sampler=None,
                pseudo_labels=None):
    normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                     std=[0.229, 0.224, 0.225])
    if not is_train:
        transformer = transforms.Compose([
            transforms.Resize(resize_size),
            transforms.CenterCrop(crop_size),
            transforms.ToTensor(), normalize
        ])
        shuffle = False
        last_bacth = 'keep'
    else:
        if is_cen:
            transformer = transforms.Compose([
                transforms.Resize(resize_size),
                transforms.CenterCrop(crop_size),
                transforms.RandomFlipLeftRight(),
                transforms.ToTensor(), normalize
            ])
        else:
            transformer = transforms.Compose([
                transforms.Resize(resize_size),
                transforms.RandomResizedCrop(crop_size, scale=(0.8, 1.0)),
                transforms.RandomFlipLeftRight(),
                transforms.ToTensor(), normalize
            ])
        shuffle = False if sampler is not None else True
        last_bacth = 'keep'

    imageset = ImageFolderDataset(images_file_path,
                                  pseudo_labels=pseudo_labels)
    data_loader = DataLoader(dataset=imageset.transform_first(transformer),
                             shuffle=shuffle,
                             batch_size=batch_size,
                             last_batch=last_bacth,
                             sampler=sampler,
                             num_workers=0)

    return data_loader
示例#2
0
 def __init__(self, args):
     self.args = args
     # image transform
     input_transform = transforms.Compose([
         transforms.ToTensor(),
         transforms.Normalize([.485, .456, .406], [.229, .224, .225]),
     ])
     # dataset and dataloader
     trainset = get_segmentation_dataset(
         args.dataset, split='train', transform=input_transform)
     valset = get_segmentation_dataset(
         args.dataset, split='val', transform=input_transform)
     self.train_data = gluon.data.DataLoader(
         trainset, args.batch_size, shuffle=True, last_batch='rollover',
         num_workers=args.workers)
     self.eval_data = gluon.data.DataLoader(valset, args.test_batch_size,
         last_batch='keep', num_workers=args.workers)
     # create network
     model = get_segmentation_model(model=args.model, dataset=args.dataset,
                                    backbone=args.backbone, norm_layer=args.norm_layer,
                                    aux=args.aux, norm_kwargs=args.norm_kwargs)
     # model.hybridize(static_alloc=True, static_shape=True)
     print(model)
     self.net = DataParallelModel(model, args.ctx, args.syncbn)
     self.evaluator = DataParallelModel(SegEvalModel(model), args.ctx)
     # resume checkpoint if needed
     if args.resume is not None:
         if os.path.isfile(args.resume):
             model.load_params(args.resume, ctx=args.ctx)
         else:
             raise RuntimeError("=> no checkpoint found at '{}'" \
                 .format(args.resume))
     # create criterion
     criterion = SoftmaxCrossEntropyLossWithAux(args.aux)
     self.criterion = DataParallelCriterion(criterion, args.ctx, args.syncbn)
     # optimizer and lr scheduling
     self.lr_scheduler = LRScheduler(mode='poly', baselr=args.lr,
                                     niters=len(self.train_data), 
                                     nepochs=args.epochs)
     kv = mx.kv.create(args.kvstore)
     self.optimizer = gluon.Trainer(self.net.module.collect_params(), 'sgd',
                                    {'lr_scheduler': self.lr_scheduler,
                                     'wd':args.weight_decay,
                                     'momentum': args.momentum,
                                     'multi_precision': True},
                                     kvstore = kv)
示例#3
0
    def get_data_loader(data_dir, batch_size, num_workers):
        normalize = transforms.Normalize([0.485, 0.456, 0.406],
                                         [0.229, 0.224, 0.225])
        jitter_param = 0.4
        lighting_param = 0.1
        input_size = opt.input_size
        crop_ratio = opt.crop_ratio if opt.crop_ratio > 0 else 0.875
        resize = int(math.ceil(input_size / crop_ratio))

        def batch_fn(batch, ctx):
            data = gluon.utils.split_and_load(batch[0],
                                              ctx_list=ctx,
                                              batch_axis=0)
            label = gluon.utils.split_and_load(batch[1],
                                               ctx_list=ctx,
                                               batch_axis=0)
            return data, label

        transform_train = transforms.Compose([
            transforms.RandomResizedCrop(input_size),
            transforms.RandomFlipLeftRight(),
            transforms.RandomColorJitter(brightness=jitter_param,
                                         contrast=jitter_param,
                                         saturation=jitter_param),
            transforms.RandomLighting(lighting_param),
            transforms.ToTensor(), normalize
        ])
        transform_test = transforms.Compose([
            transforms.Resize(resize, keep_ratio=True),
            transforms.CenterCrop(input_size),
            transforms.ToTensor(), normalize
        ])

        train_data = gluon.data.DataLoader(imagenet.classification.ImageNet(
            data_dir, train=True).transform_first(transform_train),
                                           batch_size=batch_size,
                                           shuffle=True,
                                           last_batch='discard',
                                           num_workers=num_workers)
        val_data = gluon.data.DataLoader(imagenet.classification.ImageNet(
            data_dir, train=False).transform_first(transform_test),
                                         batch_size=batch_size,
                                         shuffle=False,
                                         num_workers=num_workers)

        return train_data, val_data, batch_fn
示例#4
0
def get_data_loader(data_dir, batch_size, num_workers):
    normalize = transforms.Normalize([0.485, 0.456, 0.406],
                                     [0.229, 0.224, 0.225])
    jitter_param = 0.4
    lighting_param = 0.1

    def batch_fn(batch, ctx):
        data = gluon.utils.split_and_load(batch[0], ctx_list=ctx, batch_axis=0)
        label = gluon.utils.split_and_load(batch[1],
                                           ctx_list=ctx,
                                           batch_axis=0)
        return data, label

    transform_train = transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomFlipLeftRight(),
        transforms.RandomColorJitter(brightness=jitter_param,
                                     contrast=jitter_param,
                                     saturation=jitter_param),
        transforms.RandomLighting(lighting_param),
        transforms.ToTensor(), normalize
    ])
    transform_test = transforms.Compose([
        transforms.Resize(256, keep_ratio=True),
        transforms.CenterCrop(224),
        transforms.ToTensor(), normalize
    ])

    train_data = gluon.data.DataLoader(imagenet.classification.ImageNet(
        data_dir, train=True).transform_first(transform_train),
                                       batch_size=batch_size,
                                       shuffle=True,
                                       last_batch='discard',
                                       num_workers=num_workers)
    val_data = gluon.data.DataLoader(imagenet.classification.ImageNet(
        data_dir, train=False).transform_first(transform_test),
                                     batch_size=batch_size,
                                     shuffle=False,
                                     num_workers=num_workers)

    if 'sync' in opt.kvstore:
        raise ValueError(
            "Need to resize iterator for distributed training to not hang at the end"
        )

    return train_data, val_data, batch_fn
def transform_eval(imgs,
                   resize_short=256,
                   crop_size=224,
                   mean=(0.485, 0.456, 0.406),
                   std=(0.229, 0.224, 0.225)):
    """A util function to transform all images to tensors as network input by applying
    normalizations. This function support 1 NDArray or iterable of NDArrays.

    Parameters
    ----------
    imgs : NDArray or iterable of NDArray
        Image(s) to be transformed.
    resize_short : int, default=256
        Resize image short side to this value and keep aspect ratio.
    crop_size : int, default=224
        After resize, crop the center square of size `crop_size`
    mean : iterable of float
        Mean pixel values.
    std : iterable of float
        Standard deviations of pixel values.

    Returns
    -------
    mxnet.NDArray or list of such tuple
        A (1, 3, H, W) mxnet NDArray as input to network
        If multiple image names are supplied, return a list.
    """
    if isinstance(imgs, mx.nd.NDArray):
        imgs = [imgs]
    for im in imgs:
        assert isinstance(im, mx.nd.NDArray), "Expect NDArray, got {}".format(
            type(im))

    transform_fn = transforms.Compose([
        transforms.Resize(resize_short, keep_ratio=True),
        transforms.CenterCrop(crop_size),
        transforms.ToTensor(),
        transforms.Normalize(mean, std)
    ])

    res = [transform_fn(img).expand_dims(0) for img in imgs]

    if len(res) == 1:
        return res[0]
    return res
示例#6
0
 def predict(self, X, input_size=224, plot=True):
     """ This method should be able to produce predictions regardless if:
         X = single data example (e.g. single image),
         X = task.Dataset object
     """
     """The task predict function given an input.
     Parameters
     ----------
         X : str or :func:`autogluon.task.ImageClassification.Dataset`
             path to the input image or dataset
     Example:
     >>> ind, prob = classifier.predict('example.jpg')
     """
     # model inference
     input_size = self.model.input_size if hasattr(self.model, 'input_size') else input_size
     resize = int(math.ceil(input_size / 0.875))
     transform_fn = Compose([
             Resize(resize),
             CenterCrop(input_size),
             ToTensor(),
             transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
         ])
     def predict_img(img):
         # load and display the image
         proba = self.predict_proba(img)
         ind = mx.nd.argmax(proba, axis=1).astype('int')
         idx = mx.nd.stack(mx.nd.arange(proba.shape[0], ctx=proba.context),
                           ind.astype('float32'))
         probai = mx.nd.gather_nd(proba, idx)
         return ind, probai
     if isinstance(X, str) and os.path.isfile(X):
         img = self.loader(X)
         if plot:
             plt.imshow(np.array(img))
             plt.show()
         img = transform_fn(img)
         return predict_img(img)
     if isinstance(X, AutoGluonObject):
         X = X.init()
     inds, probas = [], []
     for x in X:
         ind, proba = predict_img(x[0])
         inds.append(ind)
         probas.append(proba)
     return inds, probas
示例#7
0
def get_train_data_loader(data_dir, batch_size, num_workers, input_image_size,
                          mean_rgb, std_rgb, jitter_param, lighting_param):
    transform_train = transforms.Compose([
        transforms.RandomResizedCrop(input_image_size),
        transforms.RandomFlipLeftRight(),
        transforms.RandomColorJitter(brightness=jitter_param,
                                     contrast=jitter_param,
                                     saturation=jitter_param),
        transforms.RandomLighting(lighting_param),
        transforms.ToTensor(),
        transforms.Normalize(mean=mean_rgb, std=std_rgb)
    ])
    return gluon.data.DataLoader(dataset=ImageNet(
        root=data_dir, train=True).transform_first(fn=transform_train),
                                 batch_size=batch_size,
                                 shuffle=True,
                                 last_batch='discard',
                                 num_workers=num_workers)
示例#8
0
    def get_tl_val_data(self, batch_size):
        """
        获取TripletLoss验证数据, 一组3个, 数据扩充
        """
        transform_val = transforms.Compose([
            transforms.Resize(256),
            transforms.RandomResizedCrop(224),
            transforms.ToTensor(),
            transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))
        ])

        td = TripletDataset(data_folder=self.val_folder,
                            data_file=self.val_file,
                            transform=transform_val,
                            saved_path=True)
        val_data = DataLoader(dataset=td, batch_size=batch_size, shuffle=True)

        return val_data, len(td)
示例#9
0
    def detect_img_to_class(self, img_path):
        img = image.imread(img_path)

        transform_fn = transforms.Compose([
            transforms.Resize(224, keep_ratio=True),
            transforms.CenterCrop(224),
            transforms.ToTensor(),
            transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))
        ])

        img = transform_fn(img)
        img = nd.expand_dims(img, axis=0)

        res = self.net_cl(img.as_in_context(self.ctx))
        res = sigmoid(nd.squeeze(res)).asnumpy()
        res = np.where(res > 0.5, 1, 0)
        indexes, = np.where(res == 1)
        return indexes
示例#10
0
def preprocess(batch_size, size=(256, 256)):
    transform_train = transforms.Compose([
        transforms.Resize(size=size),
        # Transpose the image from height*width*num_channels to num_channels*height*width
        # and map values from [0, 255] to [0,1]
        transforms.ToTensor(),
        # Normalize the image with mean and standard deviation calculated across all images
        transforms.Normalize([0.4914, 0.4822, 0.4465],
                             [0.2023, 0.1994, 0.2010])
    ])

    train_data = gluon.data.DataLoader(
        gluon.data.vision.CIFAR10(train=True).transform_first(transform_train),
        batch_size=batch_size,
        shuffle=False,
        last_batch='discard')

    return train_data  # 我们需要的是 for i, batch in enumerate(train_data)中的batch[0](也就是图片数据,我们不需要标签数据)
示例#11
0
def test_transformer():
    from mxnet.gluon.data.vision import transforms

    transform = transforms.Compose([
		transforms.Resize(300),
		transforms.CenterCrop(256),
		transforms.RandomResizedCrop(224),
		transforms.RandomFlipLeftRight(),
		transforms.RandomColorJitter(0.1, 0.1, 0.1, 0.1),
		transforms.RandomBrightness(0.1),
		transforms.RandomContrast(0.1),
		transforms.RandomSaturation(0.1),
		transforms.RandomHue(0.1),
		transforms.RandomLighting(0.1),
		transforms.ToTensor(),
		transforms.Normalize([0, 0, 0], [1, 1, 1])])

    transform(mx.nd.ones((245, 480, 3), dtype='uint8')).wait_to_read()
示例#12
0
 def __init__(self,
             root,
             subset,
             input_size,
             transform,
             image_dir='imgs',
             label_dir='gt',
             image_set_dir='ImageSets',
             image_suffix='.jpg',
             label_suffix='.png',
             inference=False):
     self.input_size = input_size
     self.resize_bilinear = gluon.data.vision.transforms.Resize(size=(self.input_size, self.input_size), interpolation=1)
     self.resize_nearst = gluon.data.vision.transforms.Resize(size=(self.input_size, self.input_size), interpolation=0)
     self.transform = transform
     self.color_aug = transforms.RandomColorJitter(brightness=.3, contrast=.3, saturation=.3, hue=.3)
     self.input_transform = transforms.Compose([
         transforms.ToTensor(),
         transforms.Normalize([.485, .456, .406], [.229, .224, .225])
     ])
     self.inference = inference
     if not isinstance(root, list):
         root = [root]
         subset = [subset]
     label_name = label_dir
     self.images_path = []
     self.labels_path = []
     self.img_info = []
     for r, s in zip(root, subset):
         txt_fname = os.path.join(r, image_set_dir, s + '.txt')
         with open(txt_fname, 'r') as f:
             image_names = f.read().split()
         n = len(image_names)
         image_path, label_path, img_info = [None] * n, [None] * n, [None] * n
         for i in range(n):
             image_path[i] = os.path.join(r, image_dir, image_names[i] + image_suffix)
             label_path[i] = os.path.join(r, label_name, image_names[i] + label_suffix)
             if self.inference:
                 data = mx.image.imread(image_path[i])
                 img_info[i] = {'name': image_names[i], 'size': data.shape[0:2]}
         self.images_path += image_path
         self.labels_path += label_path
         self.img_info += img_info
         print(f"{root} {subset} has {n} images.")
示例#13
0
 def __init__(self,
              data_dir,
              strides=4,
              input_size=(640, 640),
              num_kernels=6,
              debug=False):
     super(ICDAR, self).__init__()
     self.data_dir = data_dir
     self.imglst = glob.glob1(self.data_dir, '*g')
     self.length = len(self.imglst)
     self.input_size = input_size
     self.strides = strides
     self.num_kernel = num_kernels
     self.debug = debug
     self.trans = transforms.Compose([
         # transforms.RandomColorJitter(brightness = 32.0 / 255, saturation = 0.5),
         transforms.ToTensor(),
         transforms.Normalize([.485, .456, .406], [.229, .224, .225]),
     ])
示例#14
0
def get_train_data(batch_size=8):
    """
    process train data, add transforms.
    :param batch_size: per process num of samples
    :return: train data
    """
    transform_train = transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomFlipLeftRight(),
        transforms.RandomColorJitter(brightness=0.4, contrast=0.4, saturation=0.4),
        transforms.RandomLighting(0.1),
        transforms.ToTensor(),
        transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))
    ])

    img_folder, img_file = get_data_path()
    td = MultilabelDataset(data_folder=img_folder, data_file=img_file)
    train_data = DataLoader(td.transform_first(transform_train), batch_size=batch_size, shuffle=True)
    return train_data
示例#15
0
def crop_resize_normalize(img, bbox_list, output_size):
    output_list = []
    transform_test = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ])
    for bbox in bbox_list:
        x0 = max(int(bbox[0]), 0)
        y0 = max(int(bbox[1]), 0)
        x1 = min(int(bbox[2]), int(img.shape[1]))
        y1 = min(int(bbox[3]), int(img.shape[0]))
        w = x1 - x0
        h = y1 - y0
        res_img = image.fixed_crop(nd.array(img), x0, y0, w, h,
                                   (output_size[1], output_size[0]))
        res_img = transform_test(res_img)
        output_list.append(res_img)
    output_array = nd.stack(*output_list)
    return output_array
示例#16
0
def get_input():
    labels = [x.rstrip() for x in open(label_path).readlines()]

    img = mx.image.imread(img_path)
    img = transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ])(img)
    img = img.expand_dims(axis=0).asnumpy()
    open('resnet_data/input', 'wb').write(img.tobytes())

    sess = rt.InferenceSession(model_path)
    input_name = sess.get_inputs()[0].name
    label_name = sess.get_outputs()[0].name
    pred = softmax(np.squeeze(sess.run([label_name], {input_name: img})[0]))
    for i in np.argsort(pred)[::-1][0:5]:
        print(f'id = {i}, class = {labels[i]}, prob = {pred[i]}')
示例#17
0
def train_loader(path, batch_size=32, num_workers=4):
    normalize = transforms.Normalize(mean=0.5, std=0.25)
    train_transforms = transforms.Compose([
                                 transforms.Resize((96,112)),# W x H
                                 transforms.RandomFlipLeftRight(),
                                 transforms.ToTensor(),
                                 normalize,
                             ])

    def my_train_transform(img, label):
        return train_transforms(img), label

    train_dataset = datasets.ImageFolderDataset(path, transform=my_train_transform)
    num_train = len(train_dataset)
    print("number of total examples is %d" % num_train)
    train_loader = data.DataLoader(
        train_dataset, batch_size=batch_size, shuffle=True, num_workers=num_workers)
    print("number of batches for train, valid and test is %d"%(len(train_loader)))
    return train_loader
示例#18
0
def test(args):
    # output folder
    outdir = 'outdir'
    if not os.path.exists(outdir):
        os.makedirs(outdir)
    # image transform
    input_transform = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize([.485, .456, .406], [.229, .224, .225]),
    ])
    # dataset and dataloader
    testset = get_segmentation_dataset(args.dataset,
                                       split='test',
                                       transform=input_transform)
    test_data = gluon.data.DataLoader(testset,
                                      args.test_batch_size,
                                      last_batch='keep',
                                      batchify_fn=test_batchify_fn,
                                      num_workers=args.workers)
    # create network
    model = get_segmentation_model(model=args.model,
                                   dataset=args.dataset,
                                   backbone=args.backbone,
                                   norm_layer=args.norm_layer)
    print(model)
    evaluator = MultiEvalModel(model, testset.num_class, ctx_list=args.ctx)
    # load pretrained weight
    assert (args.resume is not None)
    if os.path.isfile(args.resume):
        model.load_params(args.resume, ctx=args.ctx)
    else:
        raise RuntimeError("=> no checkpoint found at '{}'" \
            .format(args.resume))

    tbar = tqdm(test_data)
    for i, (data, im_paths) in enumerate(tbar):
        predicts = evaluator.parallel_forward(data)
        for predict, impath in zip(predicts, im_paths):
            predict = mx.nd.squeeze(mx.nd.argmax(predict, 1)).asnumpy()
            mask = get_color_pallete(predict, args.dataset)
            outname = os.path.splitext(impath)[0] + '.png'
            mask.save(os.path.join(outdir, outname))
示例#19
0
def get_val_data(rec_val, batch_size, data_nthreads, input_size, crop_ratio):
    def val_batch_fn(batch, ctx):
        data = batch[0].as_in_context(ctx)
        label = batch[1].as_in_context(ctx)
        return data, label

    normalize = transforms.Normalize([0.485, 0.456, 0.406],
                                     [0.229, 0.224, 0.225])
    crop_ratio = crop_ratio if crop_ratio > 0 else 0.875
    resize = int(math.ceil(input_size / crop_ratio))

    from gluoncv.utils.transforms import EfficientNetCenterCrop
    from autogluon.utils import pil_transforms

    if input_size >= 320:
        transform_test = transforms.Compose([
            pil_transforms.ToPIL(),
            EfficientNetCenterCrop(input_size),
            pil_transforms.Resize((input_size, input_size),
                                  interpolation=Image.BICUBIC),
            pil_transforms.ToNDArray(),
            transforms.ToTensor(), normalize
        ])
    else:
        transform_test = transforms.Compose([
            transforms.Resize(resize, keep_ratio=True),
            transforms.CenterCrop(input_size),
            transforms.ToTensor(), normalize
        ])

    val_set = mx.gluon.data.vision.ImageRecordDataset(rec_val).transform_first(
        transform_test)

    val_sampler = SplitSampler(len(val_set),
                               num_parts=num_workers,
                               part_index=rank)
    val_data = gluon.data.DataLoader(val_set,
                                     batch_size=batch_size,
                                     num_workers=data_nthreads,
                                     sampler=val_sampler)

    return val_data, val_batch_fn
示例#20
0
    def __init__(self,
                 modelname='deeplab_resnet152_voc',
                 palletename='pascal_voc'):
        self.ctx = mx.gpu(0)
        self.model = gluoncv.model_zoo.get_model(modelname,
                                                 pretrained=True,
                                                 root='.mxnet/models',
                                                 ctx=self.ctx)

        self.transform_fn = transforms.Compose([
            transforms.ToTensor(),
            transforms.Normalize([.485, .456, .406], [.229, .224, .225])
        ])
        if '_voc' in modelname:
            self.palletename = 'pascal_voc'
        elif '_ade' in modelname:
            self.palletename = 'ade20k'
        else:
            print("invalid model name")
            exit(0)
示例#21
0
 def _preprocessBeforeConversionToNumpy(self, image):
     if isinstance(image, PIL.Image.Image):
         image = np.array(image).astype(np.float32)
         if len(image.shape) > 2:
             image = image[:, :, 0:3]
         else:
             image = np.stack((image, ) * 3, axis=-1)
         arr = mx.nd.array(image)
         transform_fn = transforms.Compose([
             transforms.Resize(256),
             transforms.CenterCrop(224),
             transforms.ToTensor(),
             transforms.Normalize([0.485, 0.456, 0.406],
                                  [0.229, 0.224, 0.225])
         ])
         arr = transform_fn(arr)
         arr = arr.expand_dims(axis=0)
         return arr.asnumpy()
     else:
         raise IOError("Image Type not supported for preprocessing.")
示例#22
0
def get_data_iters(batch_size):
    train_set = [(name.split()[0], int(name.split()[1]))
                 for name in open(opt.train_data).readlines()]
    val_set = [(name.split()[0], int(name.split()[1]))
               for name in open(opt.val_data).readlines()]

    normalizer = transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                      std=[0.229, 0.224, 0.225])

    transform_train = transforms.Compose([
        transforms.Resize(size=(opt.img_width, opt.img_height),
                          interpolation=1),
        transforms.RandomFlipLeftRight(),
        transforms.ToTensor(), normalizer
    ])

    transform_test = transforms.Compose([
        transforms.Resize(size=(opt.img_width, opt.img_height),
                          interpolation=1),
        transforms.ToTensor(), normalizer
    ])

    train_imgs = ImageTxtDataset(opt.data_dir,
                                 train_set,
                                 transform=transform_train)
    val_imgs = ImageTxtDataset(opt.data_dir, val_set, transform=transform_test)

    train_data = gluon.data.DataLoader(train_imgs,
                                       batch_size,
                                       sampler=RandomIdentitySampler(
                                           train_set, 4),
                                       last_batch='discard',
                                       num_workers=opt.num_workers)
    val_data = gluon.data.DataLoader(val_imgs,
                                     batch_size,
                                     sampler=RandomIdentitySampler(
                                         val_imgs, 4),
                                     last_batch='discard',
                                     num_workers=opt.num_workers)

    return train_data, val_data
    def _evaluate(self, val_data, metric_name=None):
        """Test on validation dataset."""

        if not isinstance(val_data, (gluon.data.DataLoader, mx.io.MXDataIter)):
            if hasattr(val_data, 'to_mxnet'):
                val_data = val_data.to_mxnet()
            resize = int(math.ceil(self.input_size / self._cfg.train.crop_ratio))
            normalize = transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
            transform_test = transforms.Compose([
                transforms.Resize(resize, keep_ratio=True),
                transforms.CenterCrop(self.input_size),
                transforms.ToTensor(),
                normalize
            ])
            val_data = gluon.data.DataLoader(
                val_data.transform_first(transform_test),
                batch_size=self._cfg.valid.batch_size, shuffle=False, last_batch='keep',
                num_workers=self._cfg.valid.num_workers)

        if metric_name == 'rmse':
            rmse_metric = mx.metric.RMSE()
            for _, batch in enumerate(val_data):
                data, label = self.batch_fn(batch, self.ctx)
                outputs = [self.net(X.astype(self._cfg.train.dtype, copy=False)) for X in data]
                rmse_metric.update(label, outputs)

            _, val_score = rmse_metric.get()
            return val_score

        else: # accuracy by default
            acc_top1 = mx.metric.Accuracy()
            acc_top5 = mx.metric.TopKAccuracy(min(5, self.num_class))
            for _, batch in enumerate(val_data):
                data, label = self.batch_fn(batch, self.ctx)
                outputs = [self.net(X.astype(self._cfg.train.dtype, copy=False)) for X in data]
                acc_top1.update(label, outputs)
                acc_top5.update(label, outputs)

            _, top1 = acc_top1.get()
            _, top5 = acc_top5.get()
            return top1, top5
示例#24
0
    def create_loader(self,
                      train_data,
                      test_data,
                      batch_size=4,
                      transformer=None):
        if transformer:

            train_data, test_data = self.transform(train_data, test_data,
                                                   transformer)
            workers = multiprocessing.cpu_count()
            train_data = gluon.data.DataLoader(train_data,
                                               batch_size=batch_size,
                                               shuffle=True,
                                               num_workers=workers)

            test_data = gluon.data.DataLoader(test_data,
                                              batch_size=batch_size,
                                              shuffle=True,
                                              num_workers=workers)

        else:

            transformer = transforms.Compose(
                [transforms.ToTensor(),
                 transforms.Normalize(0.13, 0.31)])

            train_data, test_data = self.transform(train_data, test_data,
                                                   transformer)

            workers = multiprocessing.cpu_count()
            train_data = gluon.data.DataLoader(train_data,
                                               batch_size=batch_size,
                                               shuffle=True,
                                               num_workers=workers)

            test_data = gluon.data.DataLoader(test_data,
                                              batch_size=batch_size,
                                              shuffle=True,
                                              num_workers=workers)

        return train_data, test_data
示例#25
0
def get_triplet_train_data(batch_size=8):
    """
    triplet loss
    :param batch_size: 批次大小
    :return:
    """
    transform_train = transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomFlipLeftRight(),
        transforms.RandomColorJitter(brightness=0.4, contrast=0.4, saturation=0.4),
        transforms.RandomLighting(0.1),
        transforms.ToTensor(),
        transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))
    ])

    img_folder, img_file = get_data_path()
    img_saved = os.path.join(img_file + ".tp.npz")
    td = TripletDataset(data_folder=img_folder, data_file=img_file,
                        saved_path=img_saved, transform=transform_train)
    train_data = DataLoader(td, batch_size=batch_size, shuffle=True)
    return train_data
示例#26
0
def preprocess_img_imagenet(img_path):
    """Preprocessing required for ImageNet classification.
    Reference:
      https://github.com/onnx/models/tree/master/vision/classification/vgg
    """
    import mxnet
    from mxnet.gluon.data.vision import transforms
    from PIL import Image

    img = Image.open(img_path)
    img = mxnet.ndarray.array(img)

    transform_fn = transforms.Compose([
        transforms.Resize(224),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),
    ])
    img = transform_fn(img)
    img = img.expand_dims(axis=0)  # Batchify.
    return img.asnumpy()
示例#27
0
def get_val_data_source(dataset_name, dataset_dir, batch_size, num_workers):
    mean_rgb = (0.4914, 0.4822, 0.4465)
    std_rgb = (0.2023, 0.1994, 0.2010)

    transform_val = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize(mean=mean_rgb, std=std_rgb)
    ])

    if dataset_name == "CIFAR10":
        dataset_class = gluon.data.vision.CIFAR10
    elif dataset_name == "CIFAR100":
        dataset_class = CIFAR100Fine
    else:
        raise Exception('Unrecognized dataset: {}'.format(dataset_name))

    return gluon.data.DataLoader(dataset=dataset_class(
        root=dataset_dir, train=False).transform_first(fn=transform_val),
                                 batch_size=batch_size,
                                 shuffle=False,
                                 num_workers=num_workers)
def get_mnist_data(batch=128):
    """
    Should construct a dataloader with the MNIST Dataset with the necessary transforms applied.
    
    :param batch: batch size for the DataLoader.
    :type batch: int
    
    :return: a tuple of the training and validation DataLoaders
    :rtype: (gluon.data.DataLoader, gluon.data.DataLoader)
    """
        
    # YOUR CODE HERE
    #raise NotImplementedError()
    
    t = gluon.data.vision.datasets.MNIST(train=True, root=M5_IMAGES)
    v = gluon.data.vision.datasets.MNIST(train=False, root=M5_IMAGES)
    
    transformer = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize(0.13, 0.31)
    ])
    
    mnist_train = t.transform_first(transformer)
    mnist_validation = v.transform_first(transformer)
    
    train_dataloader = gluon.data.DataLoader(
        mnist_train,
        batch_size=batch,
        shuffle=True,
        num_workers=4
    )
    
    validation_dataloader = gluon.data.DataLoader(
        mnist_validation,
        batch_size=batch,
        shuffle=False,
        num_workers=4
    )
    
    return train_dataloader, validation_dataloader
示例#29
0
def GluonTransformation(data: mx.nd.array):
    """
    data: mx.nd.array h,w,c

    retrun data: mx.nd.array
    """

    data = mx.nd.array(data)
    transform = transforms.Compose([
        transforms.RandomResizedCrop(200, (0.8, 1.0)),
        transforms.CenterCrop((300, 300)),
        transforms.RandomFlipLeftRight(),
        transforms.RandomFlipTopBottom(),
        transforms.RandomLighting(0.3),
        transforms.RandomColorJitter(brightness=0.1,
                                     contrast=0.1,
                                     saturation=0.1,
                                     hue=0.2),
        transforms.Resize(384),
        transforms.ToTensor(),  # h,w,c -> c, h, w
        transforms.Normalize(0, 1)
    ])
    data = transform(data)
    return data


# if __name__=='__main__':

#     img=cv2.imread('1.jpg')
#     img_out=ImageRotate(img,30)

#     # img_out=transformation(img)
#     cv2.imshow('ori',img)
#     cv2.imshow('rotate',img_out)
#     cv2.waitKey(0)
#     # cv2.imshow('img',mx.nd.clip(img_out,0,255).asnumpy().astype(np.uint8))
#     # cv2.imshow('img',img_out.asnumpy().astype(np.uint8))

#     # cv2.waitKey(0)
#     print('done!')
示例#30
0
def get_data_iters(batch_size):
    train_set, val_set = LabelList(ratio=opt.ratio,
                                   root=opt.dataset_root,
                                   name=opt.dataset)

    normalizer = transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                      std=[0.229, 0.224, 0.225])

    transform_train = transforms.Compose([
        transforms.Resize(size=(opt.img_width, opt.img_height),
                          interpolation=1),
        transforms.RandomFlipLeftRight(),
        RandomCrop(size=(opt.img_width, opt.img_height), pad=opt.pad),
        transforms.ToTensor(), normalizer
    ])

    train_imgs = ImageTxtDataset(train_set, transform=transform_train)
    train_data = gluon.data.DataLoader(train_imgs,
                                       batch_size,
                                       shuffle=True,
                                       last_batch='discard',
                                       num_workers=opt.num_workers)

    if opt.ratio < 1:
        transform_test = transforms.Compose([
            transforms.Resize(size=(opt.img_width, opt.img_height),
                              interpolation=1),
            transforms.ToTensor(), normalizer
        ])

        val_imgs = ImageTxtDataset(val_set, transform=transform_test)
        val_data = gluon.data.DataLoader(val_imgs,
                                         batch_size,
                                         shuffle=True,
                                         last_batch='discard',
                                         num_workers=opt.num_workers)
    else:
        val_data = None

    return train_data, val_data