imgaug: загрузить и сохранить изображения - PullRequest
0 голосов
/ 24 мая 2018

Я использую Python + Tensorflow для обучения CNN на высокопроизводительном вычислительном кластере.Я тренирую сверточную нейронную сеть, но у меня относительно небольшой набор данных.Поэтому я внедряю методы, чтобы увеличить его.Сейчас я впервые работаю над основной проблемой компьютерного зрения, поэтому я относительно новичок в этом.

В качестве увеличения количества изображений для обучения используется пакет imgaug (https://github.com/aleju/imgaug), для которого требуется cv2кажется идеальным и простым решением для умножения количества изображений. Я установил opencv2 с использованием Python 2.7, все необходимые пакеты Python работают локально (здесь не используются env / Anaconda / Docker).

Практически, яя пытаюсь запустить этот код из здесь :

import os
import imgaug as ia
from imgaug import augmenters as iaa
import scipy
import cv2
import numpy as np
# optional check my hint import scipy.misc import imwrite
# optional check my hint import scipy.misc import imsave

ia.seed(1)

# Example batch of images.
# The array has shape (32, 64, 64, 3) and dtype uint8.
images = np.array(
    [ia.quokka(size=(64, 64)) for _ in range(32)],
    dtype=np.uint8
)

seq = iaa.Sequential([
    iaa.Fliplr(0.5), # horizontal flips
    iaa.Crop(percent=(0, 0.1)), # random crops
    # Small gaussian blur with random sigma between 0 and 0.5.
    # But we only blur about 50% of all images.
    iaa.Sometimes(0.5,
        iaa.GaussianBlur(sigma=(0, 0.5))
    ),
    # Strengthen or weaken the contrast in each image.
    iaa.ContrastNormalization((0.75, 1.5)),
    # Add gaussian noise.
    # For 50% of all images, we sample the noise once per pixel.
    # For the other 50% of all images, we sample the noise per pixel AND
    # channel. This can change the color (not only brightness) of the
    # pixels.
    iaa.AdditiveGaussianNoise(loc=0, scale=(0.0, 0.05*255), per_channel=0.5),
    # Make some images brighter and some darker.
    # In 20% of all cases, we sample the multiplier once per channel,
    # which can end up changing the color of the images.
    iaa.Multiply((0.8, 1.2), per_channel=0.2),
    # Apply affine transformations to each image.
    # Scale/zoom them, translate/move them, rotate them and shear them.
    iaa.Affine(
        scale={"x": (0.8, 1.2), "y": (0.8, 1.2)},
        translate_percent={"x": (-0.2, 0.2), "y": (-0.2, 0.2)},
        rotate=(-25, 25),
        shear=(-8, 8)
    )
], random_order=True) # apply augmenters in random order

images_aug = seq.augment_images(images)

После создания файла .py с этим кодом я скопировал этот файл в папку из 50 изображений (.jpg)Сам код работает отлично (без ошибок), но кажется, что файл .jpg не загружается в файл .py, даже если я задаю путь к папке, он не будет загружать изображения. Кроме того, никаких новых файлов не было.Написано.

Вопрос 1: Думаю, я должен загрузить изображения в виде массива в .py или в cv2, но я не могу найти ни одного примера, как загрузить и записать их, как я никогда не делалsчто-то вроде этого.Любая помощь?

Вопрос 2: Какой интерфейс лучше всего использовать в этом контексте?Все изображения хранятся в папках или файлах .xlsx.

(Подсказка: может, к сожалению, этот вариант основан на Keras ( Link )? Или я нашел эти 2 варианта, но я не могу их использовать scipy.ndimage.imread и scipy.misc.imsave )

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018
from imgaug import augmenters as iaa

import cv2

seq = iaa.Sequential([
    iaa.Crop(px=(0, 16)),
    iaa.Fliplr(0.5),
    iaa.GaussianBlur(sigma=(0, 3.0))
])

imglist = []

img = cv2.imread('test.jpg')

imglist.append(img)

images_aug = seq.augment_images(imglist)

cv2.imwrite('new.jpg', images_aug[0])
0 голосов
/ 03 сентября 2018

Я прочитал исходный код imgaug, метод ' ia.quokka ' return (H, W, 3) ndarray (массив изображений dtype uint8.), Так что вы можете изменить пример для чтения и сохранения изображений.

Это мое использование:

import imgaug as ia
from imgaug import augmenters as iaa
import numpy as np
import imageio

ia.seed(1)

img = imageio.imread("test.jpg") #read you image
images = np.array(
    [img for _ in range(32)], dtype=np.uint8)  # 32 means creat 32 enhanced images using following methods.

seq = iaa.Sequential(
    [
        iaa.Fliplr(0.5),  
        iaa.Crop(percent=(0, 0.1)),            
        iaa.Sometimes(0.5, iaa.GaussianBlur(sigma=(0, 0.5))),        
        iaa.ContrastNormalization((0.75, 1.5)),         
        iaa.AdditiveGaussianNoise(
            loc=0, scale=(0.0, 0.05 * 255), per_channel=0.5),    
        iaa.Multiply((0.8, 1.2), per_channel=0.2),
        iaa.Affine(
            scale={
                "x": (0.8, 1.2),
                "y": (0.8, 1.2)
            },
            translate_percent={
                "x": (-0.2, 0.2),
                "y": (-0.2, 0.2)
            },
            rotate=(-25, 25),
            shear=(-8, 8))
    ],
    random_order=True)  # apply augmenters in random order

images_aug = seq.augment_images(images)

for i in range(32):
    imageio.imwrite(str(i)+'new.jpg', images_aug[i])  #write all changed images
0 голосов
/ 25 мая 2018

images_aug = seq.augment_images (images)

ваш код аргументирует "изображения", а не ваши файлы.Итак, вы сначала прочитали содержимое ваших файлов.У автора также есть эти строки в README.

for batch_idx in range(1000):
    # 'images' should be either a 4D numpy array of shape (N, height, width, channels)
    # or a list of 3D numpy arrays, each having shape (height, width, channels).
    # Grayscale images must have shape (height, width, 1) each.
    # All images must have numpy's dtype uint8. Values are expected to be in
    # range 0-255.

Вопрос 1: Я думаю, я должен загрузить изображения в виде массива в .py или в cv2, но я не могу найтилюбой пример, как загрузить и написать их, так как я никогда не делал что-то подобное.Любая помощь?

Просто создайте 4d массив с размером (N, высота, ширина, каналы).Затем прочитайте каждое изображение и вставьте его в этот массив.Например,

import numpy as np
import cv2
images = np.zeros(N, height, width, channels)
for idx, img_path in enumerate(img_paths):
    img = cv2.imread(img_path, 1)
    images[idx, :, :, :] = img

Вопрос 2: Какой интерфейс лучше всего использовать в этом контексте?Все изображения хранятся в папках или файлах .xlsx.

Аргументация данных используется для повышения надежности обучающих данных.Если ваш «интерфейс» означает среду глубокого обучения, то любая среда, которая имеет интерфейс Python, должна хорошо работать.

Надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...