예제 #1
0
def aug_method():
    # 增强方法1: 图片变形
    # 1) 水平翻转: 最常用!! 对卷积神经网络而言, 左右互换(水平翻转)差异很大
    aug = image.HorizontalFlipAug(0.5)
    apply(img, aug)
    plt.gcf().suptitle('HorizontialFlipAug')
    plt.show()

    # 2) 随机裁剪: 卷积神经网络对位置敏感, 虽然Pool池化可以减小位置敏感, 但仍不不够
    # 2.1) 裁剪指定(width x height) 的图片
    aug = image.RandomCropAug((200, 200))
    apply(img, aug)
    plt.show()
    # 2.2) 裁剪指定'长宽比'范围大小且不小于最小值的随机图片, 并resize为指定(width x height)大小
    aug = image.RandomSizedCropAug(size=(100, 100),
                                   min_area=.1,
                                   ratio=(0.5, 2.0))
    apply(img, aug)
    plt.show()

    # 增强方法2: 颜色变化
    # 1) 亮度变化:
    aug = image.BrightnessJitterAug(
        brightness=0.5
    )  # brightness : The brightness jitter ratio range, [0, 1]
    apply(img, aug)
    plt.show()

    # 2) 色调变化:
    aug = image.HueJitterAug(hue=0.5)
    apply(img, aug)
    plt.show()
예제 #2
0
def get_augs(shape):
    train_augs = [
        image.HorizontalFlipAug(.5),
        image.RandomCropAug((shape, shape))
    ]
    valid_augs = train_augs
    tests_augs = [image.CenterCropAug((shape, shape))]
    return train_augs, valid_augs, tests_augs
예제 #3
0
def transform_train(data, label, data_shape=(3, 363, 363), resize=363):
    # data [height, width, channel]
    # im = data.astype('float32') / 255,
    ctx = data.context
    im = resize_longer(data.asnumpy(), resize, data_shape)
    im = rotate_image(im)
    im = nd.array(im, ctx=ctx)
    im = im.astype('float32') / 255

    auglist = [
        image.RandomCropAug((331, 331)),
        image.ColorJitterAug(0.3, 0.3, 0.3),
        image.RandomGrayAug(0.5),
        # image.ColorNormalizeAug(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
        image.ColorNormalizeAug(mean=(0.417, 0.402, 0.366),
                                std=(0.081, 0.079, 0.080)),
    ]

    for aug in auglist:
        im = aug(im)
    # im = im.clip(0, 1)
    im = nd.transpose(im, (2, 0, 1))
    return im, nd.array([label], ctx=ctx).asscalar()
예제 #4
0
def augment_data(imags, label):
    datas, labels = [], []
    n = imags.shape[0]
    for k in range(n):
        imag = imags[k].reshape(shape=(1, imags[k].shape[0], imags[k].shape[1],
                                       imags[k].shape[2]))
        for i in range(4):
            trans_band = transform(
                imag, image.HorizontalFlipAug(.5)).astype('float32')
            datas.append(img_norm(trans_band))
            labels.append(label[k].asscalar())

        for i in range(9):
            trans_band = transform(
                imag, image.RandomSizedCropAug((75, 75), .75,
                                               (.8, 1.2))).astype('float32')
            datas.append(img_norm(trans_band))
            labels.append(label[k].asscalar())
        # brightness augmenter
        for i in range(9):
            trans_band = transform(
                imag, image.BrightnessJitterAug(.1)).astype('float32')
            datas.append(img_norm(trans_band))
            labels.append(label[k].asscalar())
        # random crop augmenter
        for i in range(9):
            trans_band = resize(transform(imag, image.RandomCropAug((50, 50))),
                                75).astype('float32')
            datas.append(img_norm(trans_band))
            labels.append(label[k].asscalar())
        # center crop augmenter
        trans_band = resize(transform(imag, image.CenterCropAug((50, 50))),
                            75).astype('float32')
        datas.append(img_norm(trans_band))
        labels.append(label[k].asscalar())
    ds = nd.concat(*datas, dim=0)
    return ds, labels
예제 #5
0
from mxnet import nd, gluon, image

batch_size = 64
train_augs = [image.HorizontalFlipAug(.5), image.RandomCropAug((224, 224))]
test_augs = [image.CenterCropAug((224, 224))]
data_dir = '/home/zhbli/temp/dog_dataset'
train_imgs = gluon.data.vision.ImageFolderDataset(
    data_dir + '/train', transform=lambda X, y: transform(X, y, train_augs))
test_imgs = gluon.data.vision.ImageFolderDataset(
    data_dir + '/test', transform=lambda X, y: transform(X, y, test_augs))


def transform(data, label, augs):
    data = data.astype('float32')
    for aug in augs:
        data = aug(data)
    data = nd.transpose(data, (2, 0, 1))
    return data, nd.array([label]).asscalar().astype('float32')


def getDataset():
    train_data = gluon.data.DataLoader(train_imgs, batch_size, shuffle=True)
    test_data = gluon.data.DataLoader(test_imgs, batch_size)
    return train_data, test_data
예제 #6
0
    for file_name in files:
        if not file_name.endswith('.png'):
            continue
        img_dir = os.path.join(path_crocodile, file_name)
        img_arr = mx.image.imread(img_dir)
        img_arr = nd.transpose(img_arr, (2, 0, 1))
        img_arr = (img_arr.astype(np.float32) / 255)
        img_arr = nd.array(img_arr.reshape((1, ) + img_arr.shape))
        img_list.append(img_arr)
        img_list_crocodile.append(img_arr)

size = 28
train_augs = [
    image.HorizontalFlipAug(.5),
    image.ColorJitterAug(.5, .5, .5),
    image.RandomCropAug((size, size)),
]
test_augs = [image.CenterCropAug((size, size))]


def apply_aug_list(img, augs):
    for f in augs:
        img = f(img)
    return img


def try_gpu():
    try:
        ctx = mx.gpu()
        _ = nd.array([0], ctx=ctx)
    except:
예제 #7
0
from mxnet import nd
import utils


def apply(img, aug, n=3):
    X = [aug(img.astype('float32')) for _ in range(n * n)]
    Y = nd.stack(*X).clip(0, 255) / 255
    utils.show_images(Y, n, n, figsize=(256, 256))


# 水平翻转
aug = image.HorizontalFlipAug(.5)
apply(img, aug)

# 随机裁剪一个块, 256 * 256
aug = image.RandomCropAug([256, 256])
apply(img, aug)

# 颜色变化
# 随机将亮度增加或减少一个量
aug = image.BrightnessJitterAug(.5)
apply(img, aug)

# 随机色调变化
aug = image.HueJitterAug(.5)
apply(img, aug)


def apply_aug_list(img, augs):
    for aug in augs:
        img = aug(img)
예제 #8
0
def apply_aug_list(img, augs):
    for f in augs:
        img = f(img)
    return img

def train(train_augs, test_augs, learning_rate=.1):
    batch_size = 128
    num_epochs = 10
    ctx = utils.try_all_gpus()
    loss = gluon.loss.SoftmaxCrossEntropyLoss()
    train_data, test_data = get_data(
        batch_size, train_augs, test_augs)
    net = utils.resnet18(10)
    net.initialize(ctx=ctx, init=init.Xavier())
    net.hybridize()
    trainer = gluon.Trainer(net.collect_params(),
                            'sgd', {'learning_rate': learning_rate})
    utils.train(
        train_data, test_data, net, loss, trainer, ctx, num_epochs)


train_augs = [
    image.HorizontalFlipAug(.5),
    image.RandomCropAug((32,32))
]

test_augs = [
    image.CenterCropAug((32,32))
]

train(train_augs, test_augs)
예제 #9
0

"""*********************************************************************************************************************
    对CIFAR10数据集进行图片增强.
"""


def apply_aug_list(img, augs):
    """对输入图片, 按照augs列表中aug方法逐个增强"""
    for aug in augs:
        img = aug(img)
    return img


# 训练集增强方法
train_augs = [image.HorizontalFlipAug(0.5), image.RandomCropAug(size=(28, 28))]

# 测试集增强方法
test_augs = [image.CenterCropAug(size=(28, 28))]


def get_transform(augs):
    """  """
    def transform(data, label):
        """  """
        data = data.astype('float32')
        if augs is not None:
            data = apply_aug_list(data, augs)
        data = nd.transpose(data, axes=(2, 0, 1)) / 255
        return data, label.astype('float32')
예제 #10
0
파일: photo_score.py 프로젝트: WishQi/Food
from src import utils
import mxnet as mx
import base64
from mxnet import image
from mxnet import nd
from collections import namedtuple

train_augs = [
    image.HorizontalFlipAug(1.),
    image.RandomCropAug((224, 224))
]

test_augs = [
    image.CenterCropAug((224, 224))
]

def transform(data, label, augs):
    data = data.astype('float32')
    for aug in augs:
        data = aug(data)
    data = nd.transpose(data, (2, 0, 1))
    return data, nd.array([label]).asscalar().astype('float32')

net = mx.mod.Module.load('../model/food', 0, True)
net.bind(data_shapes=[('data', (64, 3, 244, 244))])
batch = namedtuple('batch', ['data'])

def score_image(image_base64_string):
    with open('target_image.jpg', 'wb') as f:
        f.write(base64.b64decode(image_base64_string))
        f.close()
예제 #11
0
import mxnet as mx
import numpy as np
import os
import Inception3_modify
from mxnet import gluon, image, nd, ndarray, init
from mxnet.gluon.model_zoo import vision as models
import sys
sys.path.append('..')
import utils

train_augs = [image.HorizontalFlipAug(.5), image.RandomCropAug((299, 299))]

test_augs = [image.CenterCropAug((299, 299))]


def transform(data, label, augs):
    data = data.astype('float32')
    for aug in augs:
        data = aug(data)
    data = nd.transpose(data, (2, 0, 1))
    return data, nd.array([label]).asscalar().astype('float32')


ctx = mx.gpu()
data_dir = './data'
batch_size = 16
epochs = 1

###################################### true train data
train_imgs = gluon.data.vision.ImageFolderDataset(
    data_dir + '/train_valid_test/Images',
예제 #12
0
            for i in range(nrows):
                for j in range(ncols):
                    figs[i][j].imshow(imgs[i * ncols + j].asnumpy())
                    figs[i][j].axes.get_xaxis().set_visible(False)
                    figs[i][j].axes.get_yaxis().set_visible(False)
            plt.show()

        self.__X = [
            aug(self.__img.astype("float32"))
            for _ in range(self.__n * self.__n)
        ]
        self.__Y = nd.stack(*self.__X).clip(0, 255) / 255
        show_images(self.__Y, self.__n, self.__n, figsize=(8, 8))


if __name__ == "__main__":
    ia = IamgeAugment(input_path="cat.jpg", n=3)
    # 变形
    # 50% 几率水平翻转图片
    ia.apply(aug=image.HorizontalFlipAug(.5))
    # 剪裁
    # 随机从原图片剪裁出 200×200 的一部分 , 可以图片先变大在剪小
    ia.apply(aug=image.RandomCropAug([200, 200]))
    # 随机从图片中剪裁一个区域要求是剪裁面积占原图片 >= 0.1 且剪裁的区域长/宽在 0.5~2 之间后将剪裁后的图片放缩到 200×200
    ia.apply(aug=image.RandomSizedCropAug((200, 200), .1, (.5, 2)))

    # 色调
    # 随机将亮度增加或者减小在 0-50% 间的一个量
    ia.apply(aug=image.BrightnessJitterAug(.5))
    # 随机色调变化
    ia.apply(aug=image.HueJitterAug(.5))
예제 #13
0
# -*- coding: utf-8 -*-
# @Time    : 18-1-30 下午1:25
# @Author  : lyyang

from mxnet.gluon.data import vision
from mxnet import image
from mxnet import nd

train_test_augs = [
    image.RandomCropAug((image_size,image_size))
]

def transform(data, label, augs=None):
    data = data.astype('float32')
    if augs:
        for aug in augs:
            data = aug(data)
    data = nd.transpose(data, (2,0,1))
    return data, nd.array([label]).asscalar().astype('float32')



 # 读取原始图像文件。flag=1说明输入图像有三个通道(彩色)。
train_ds = vision.ImageFolderDataset(input_str + 'train', flag=1,transform=lambda X, y: transform(X, y, train_test_augs))
test_ds = vision.ImageFolderDataset(input_str + 'test', flag=1,transform=lambda X, y: transform(X, y, train_test_augs))

loader = gluon.data.DataLoader
train_data = loader(train_ds, batch_size, shuffle=True, last_batch='keep')
test_data = loader(train_ds, batch_size, shuffle=True, last_batch='keep')
예제 #14
0
from mxnet import gluon
from mxnet import image
from mxnet import init
from mxnet.gluon.data import vision
from mxnet import nd
import net as net_collection
import utils
import numpy as np

input_str = '/data/datasets/cifar-10/'
batch_size = 32
image_size = 32
n_class = 10

train_test_augs = [image.RandomCropAug((image_size, image_size))]


# 设定训练数据扩充形式
def transform_train(data, label):
    im = data.astype('float32') / 255
    auglist = image.CreateAugmenter(data_shape=(3, 32, 32),
                                    resize=0,
                                    rand_crop=False,
                                    rand_resize=False,
                                    rand_mirror=True,
                                    mean=np.array([0.4914, 0.4822, 0.4465]),
                                    std=np.array([0.2023, 0.1994, 0.2010]),
                                    brightness=0,
                                    contrast=0,
                                    saturation=0,