심도 있는 학습의 대량 이미지 데이터 강화
4573 단어 인공지능
배경: 프로젝트에서 수집한 것은 그레이스케일로 원 데이터가 20장도 안 되는 그림이기 때문에 데이터 강화 방법을 선택하고 서로 다른 변환 방법의 조합을 통해 데이터가 100장 이상 증가해야 깊이 있는 학습 모델에 넣고 훈련(이동학 학습을 이용)할 수 있다.
말은 많이 하지 않고 코드에 직접 올라가서 코드에 사용된 변환 조작을 설명한다.
#!usr/bin/python
# -*- coding: utf-8 -*-
import cv2
from imgaug import augmenters as iaa
import os
# Sometimes(0.5, ...) applies the given augmenter in 50% of all cases,
# e.g. Sometimes(0.5, GaussianBlur(0.3)) would blur roughly every second image.
sometimes = lambda aug: iaa.Sometimes(0.5, aug)
# .
seq = iaa.Sequential([
# 0 5
iaa.SomeOf((0, 5),
[
iaa.Fliplr(0.5), # 50%
iaa.Flipud(0.5), # 50%
# Convert some images into their superpixel representation,
# sample between 20 and 200 superpixels per image, but do
# not replace all superpixels with their average, only
# some of them (p_replace).
sometimes(
iaa.Superpixels(
p_replace=(0, 1.0),
n_segments=(20, 200)
)
),
# Blur each image with varying strength using
# gaussian blur (sigma between 0 and 3.0),
# average/uniform blur (kernel size between 2x2 and 7x7)
# median blur (kernel size between 3x3 and 11x11).
iaa.OneOf([
iaa.GaussianBlur((0, 3.0)),
iaa.AverageBlur(k=(2, 7)),
iaa.MedianBlur(k=(3, 11)),
]),
# Sharpen each image, overlay the result with the original
# image using an alpha between 0 (no sharpening) and 1
# (full sharpening effect).
iaa.Sharpen(alpha=(0, 1.0), lightness=(0.75, 1.5)),
# Same as sharpen, but for an embossing effect.
iaa.Emboss(alpha=(0, 1.0), strength=(0, 2.0)),
# Add gaussian noise to some images.
# In 50% of these cases, the noise is randomly sampled per
# channel and pixel.
# In the other 50% of all cases it is sampled once per
# pixel (i.e. brightness change).
iaa.AdditiveGaussianNoise(
loc=0, scale=(0.0, 0.05*255)
),
# Invert each image's chanell with 5% probability.
# This sets each pixel value v to 255-v.
iaa.Invert(0.05, per_channel=True), # invert color channels
# Add a value of -10 to 10 to each pixel.
iaa.Add((-10, 10), per_channel=0.5),
# Add random values between -40 and 40 to images, with each value being sampled per pixel:
iaa.AddElementwise((-40, 40)),
# Change brightness of images (50-150% of original value).
iaa.Multiply((0.5, 1.5)),
# Multiply each pixel with a random value between 0.5 and 1.5.
iaa.MultiplyElementwise((0.5, 1.5)),
# Improve or worsen the contrast of images.
iaa.ContrastNormalization((0.5, 2.0)),
],
# do all of the above augmentations in random order
random_order=True
)
],random_order=True) #apply augmenters in random order
#
path = 'yingdaqi0/'
savedpath = 'yingdaqi_aug/'
imglist=[]
filelist = os.listdir(path)
# , imglist
for item in filelist:
img = cv2.imread(path + item)
#print('item is ',item)
#print('img is ',img)
#images = load_batch(batch_idx)
imglist.append(img)
#print('imglist is ' ,imglist)
print('all the picture have been appent to imglist')
# , 100
for count in range(100):
images_aug = seq.augment_images(imglist)
for index in range(len(images_aug)):
filename = str(count) + str(index) +'.jpg'
#
cv2.imwrite(savedpath + filename,images_aug[index])
print('image of count%s index%s has been writen'%(count,index))
상기 코드의 조작을 통해 목표 폴더의 원시 그림을 무작위로 변화시킬 수 있다. 변화 방법 그룹의 0에서 5가지 조작을 선택할 수 있다. 물론 방법 그룹에 다른 필요한 조작을 추가할 수도 있다. 나의 원도는 그레이스케일이기 때문에 색의 공간 변화와 관련이 없다. 만약에 컬러 그림이라면 상응하는 변화를 증가시켜 더욱 전면적일 수 있다.
100번의 순환을 거치면 한 장의 그림에 100번의 무작위 변화를 하는 것과 같다. 매번 변화는 여러 가지 방법과 관련될 수 있다. 이렇게 조작이 끝난 후에 원시 데이터는 100배로 확대되었고 중복된 데이터가 안에 있지 않아 데이터 강화 효과를 얻을 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SPRESENSE x Neural Network Console을 만져 보자 제1회 ~SPRESENS의 소개와 전체의 구성~이 기사는 20일째 기사입니다. 전회는 Katsuaki Takagi씨의 「 」이었습니다. Sony가 발매한 보드 「SPRESENSE」와 「Neural Network Console」을 맞추어 사용해 봅니다. 연재 기사...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.