IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 学习TensrFlow 2 的随笔(不定时更新,互相学习)二 -> 正文阅读

[人工智能]学习TensrFlow 2 的随笔(不定时更新,互相学习)二

数据清洗

自己做的图像很容易存在坏数据(比如灰度图,比如出现CV2读不出数据,没有shape)。下面直接上代码:

import os 
import tensorflow as tf 
from PIL import Image  
import matplotlib.pyplot as plt 
import numpy as np
import cv2
import shutil
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True #硬性大图像剪切
#cwd='F:/TFdata/test'
cwd='F:/TFdata/train'
#数据清洗,洗掉cv2打不开的数据,注意清洗一次就可以
all_path = []
for root, dirs, files in os.walk(cwd):
        for file in files:
            if "jpg" in file:
                    all_path.append(os.path.join(root, file))
bad_image= []
bad_path = 'F:/TFdata/bad'
for i in range(len(all_path)):
    org = all_path[i]
    try:
        img = cv2.imread(org)
        ss = img.shape
    except:
        bad_image.append(all_path[i])
        shutil.move(all_path[i],bad_path)
        continue
print('共有%s张脏图'%(len(bad_image)))

数据增强

在深度学习中数据量很重要,但受限于实际情况很难达到几万张,几十万张。数据量不够会导致val_loss和val_accuracy基本不变但很差,基本30%-40%就不动了,所以需要进行数据增强,利用原有数据丰富输入数据。数据增强有多种,这里就只用imgaug(强大的图片数据增强的库)。它支持广泛的增强技术,允许轻松组合这些技术并以随机顺序或在多个CPU内核上执行它们,具有简单而强大的随机接口,不仅可以增强图像,还可以增强关键点/地标,边界框,热图和分割图。详细可以学习imgaug document

1.安装

pip install imgaug

2.使用

该数据增强库需要输入一个四维的图像数据组 images(N,height,weidth,channels)就是图像数量,图像高度,图像宽度,图像的通道(RGB为channels=3,grid为channels=1)。数据必须是uint8类型,大小在0到255之间。

第一种,在程序中(batch)直接使用 增强序列seq(裁剪 + 水平翻转 + 高斯模糊)用来存放要进行的所有增强操作。在脚本开始时定义一次,然后加载和扩充许多批次,然后用于训练。

“图像”应为4D numpy形状数组(N、高度、宽度、通道)或三维numpy阵列列表,每个阵列具有形状(高度、宽度、通道)。灰度图像必须具有每个形状(高度、宽度、1)。所有图像必须具有numpy的数据类型uint8,值应在范围0-255。
下面是使用imgaug自带的quokka(短尾矮袋鼠)来进行的试验

import numpy as np
import imgaug as ia
import imgaug.augmenters as iaa
import matplotlib.pyplot as plt 

ia.seed(1)#设定后续的随机种子
#打开一下袋鼠图
quo=ia.quokka(size=(224,224))#ia.quokka()是一个函数,包括图像的尺寸和后续可以复制的个数
plt.imshow(quo)
plt.axis("off")
plt.show()

出现结果,短尾袋鼠的原图:
短尾袋鼠的单个原图
再看一下把一张图做成一个batch_size=32的一个四维数组(就是一个batch)的代码和结果:

#形成(32,224,224,3)的数组
images = np.array(
    [ia.quokka(size=(224, 224)) for _ in range(32)],
    dtype=np.uint8
)
#展示一个batch所包含的图像
for index in range(32):
    plt.subplot(4, 8, index + 1)
    plt.imshow(images[index])
    plt.axis("off")
plt.show()

一个batch的原始图片,展示:在这里插入图片描述
然后,按照介绍里的添加增强序列。包含裁剪和仿射变换,水平翻转一些图像,添加一些噪点和模糊,还可以更改对比度和亮度。

seq = iaa.Sequential([
    iaa.Fliplr(0.5), # 50%水平翻转
    iaa.Crop(percent=(0, 0.1)), #随机裁剪0-0.1
    # 0-0.5之间的高斯模糊,但只模糊所有图片的50%
    iaa.Sometimes(
        0.5,
        iaa.GaussianBlur(sigma=(0, 0.5))
    ),
    #增强或减弱每个图像中的对比度。
    iaa.LinearContrast((0.75, 1.5)),
    # 50%的图像,每像素对噪声采样一次
    # 对于其他50%的图像,我们对每个像素和通道的噪声进行采样。
    #这可以改变像素的颜色(不仅仅是亮度)。
    iaa.AdditiveGaussianNoise(loc=0, scale=(0.0, 0.05*255), per_channel=0.5),
    #使一些图像更亮,一些更暗。 
    #在 20% 的情况下,我们对每个通道的乘数采样一次,这最终会改变图像的颜色。 
    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) # 以随机顺序应用增强器 
images_aug = seq(images=images)
#展示数据增强后的效果
for index in range(32):
    plt.subplot(4, 8, index + 1)
    plt.imshow(images_aug[index])
    plt.axis("off")
plt.show()

数据增强后该batch的情况,可以看到已经进行了水平翻转,裁剪,高斯模糊,对比度改变,颜色改变。剩下就是改变增强序列(seq)中的函数来增加想要的增强方式就行。更加强烈的增强可以查看imgaug的官方英文介绍
在这里插入图片描述
第二种,将增强的图片保存到本地文件然后打乱所有的文件从而利用上次(随笔一)中的方法建立新的TFRecord。上代码

import numpy as np
import cv2
from imgaug import augmenters as iaa #引入数据增强的包
import matplotlib.pyplot as plt
from PIL import Image

seq = iaa.Sequential([
    iaa.PiecewiseAffine(scale=(0.01, 0.05)),  #仿射
    iaa.CoarseDropout((0.03, 0.15), size_percent=(0.02, 0.05),per_channel=0.2),
    iaa.DirectedEdgeDetect(alpha=(0, 0.7), direction=(0.0, 1.0)),
    iaa.Emboss(alpha=(0, 1.0), strength=(0, 2.0)),
    iaa.Superpixels(p_replace=(0, 1.0),n_segments=(20, 200)),  #超像素
    iaa.Sharpen(alpha=(0, 1.0), lightness=(0.75, 1.5)),  #锐化
    iaa.Crop(px=(1, 16)),   #裁剪
    iaa.Fliplr(0.5),   #翻转
    iaa.GaussianBlur(sigma=(0, 3.0))  #高斯模糊
])
img = cv2.imread('C:/Users/Administrator/Desktop/quokka.jpg') #举例一张图片,
def augment_image(number,img,fn):
    for i in range(number):
        images_aug=seq.augment_image(image=img)
        plt.imshow(images_aug)
        plt.axis('off')
        string='image'+  str(i) + '.jpg'
        plt.savefig(fn+string)
number=64#一张变多张的数量
fn='F:/TFdata/aug'#保存路径
augment_image(number,img,fn)
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-09 11:39:17  更:2021-12-09 11:42:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 1:23:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码