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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 利用keras-ImageDataGenerator实现图像增强与批量生成 -> 正文阅读

[人工智能]利用keras-ImageDataGenerator实现图像增强与批量生成

背景

最近在做一个图像题,初始样本图给的特别少(每类只有几张图),因此想通过keras-ImageDataGenerator去做数据增强,但是这样的数据带入模型训练泛化性也是很差的,只是先做着,等数据全部公布后再做.在此之前,先将数据增强函数写好,到时候方便使用,以下为具体代码:

import torch
import pandas as pd
import cv2
import os
from PIL import Image
import matplotlib.pyplot as plt
import pandas as pd
import copy
import numpy as np
from keras.preprocessing import image
from keras.preprocessing.image  import ImageDataGenerator 

class picture_increating:
    """
    利用keras中的ImageDataGenerator做图像增强;
    代入各类所在文件夹的父文件夹路径,即可在与该父文件同级路径下创建各类文件夹,并生成经过处理(旋转\剪切\缩放等)的图片.
    """
    def __init__(self,path):
#         self.data_path = os.path.join(os.getcwd(),'data_increase')
        self.data_path = path
        self.datagen =ImageDataGenerator(
            rotation_range = 40,
            width_shift_range=0.2,

            height_shift_range=0.2,
            shear_range =0.2,
            zoom_range=0.2,
        #     horizontal_flip=True,
            fill_mode='reflect'#nearest;reflect;constant;wrap
        )
    #取各图像路径
    def get_pic_path(self):
        """
        代入各类文件夹的父文件夹路径,返回各子类图片路径构成的list
        """
        pic_path=[]
        pic_d =[]
        for i in os.listdir(self.data_path):
            for j in os.listdir(os.path.join(self.data_path,i)):
                pic_path.append(os.path.join(self.data_path,i,j))
            pic_d.append(pic_path)
            pic_path=[]
        return pic_d
    
    def new_package(self,path):
        isExists=os.path.exists(path)
        if not isExists:
            # 如果不存在则创建目录
             # 创建目录操作函数
            os.makedirs(path) 
            print(path+' 创建成功')
        else:
            # 如果目录存在则不创建,并提示目录已存在
            print (path+' 目录已存在')
    
    def increate_pic(self):
        ppath = self.get_pic_path()
        for i in ppath:
            for j in i:
                img = image.load_img(j,target_size=(150,150))
        #         print(type(img))
                x = image.img_to_array(img)
        #         print(x.shape)
                x = x.reshape((1,)+x.shape)#数据扩维度

                ii= 0
                for batch in datagen.flow(x,batch_size=2):
                    #保存的文件名编写
                    lei =j.split('\\')[-2]
                    pic_name = j.split('\\')[-1].split('_')[-1]
                    pic_num = j.split('\\')[-1].split('_')[1]
                    name=lei+pic_num+'_'+str(ii)+'_'+pic_name
                    # 创建新文件夹
                    self.new_package(os.path.join(os.getcwd(),'dataset',lei))
                    
                    
                    #写入图片保存
                    pict = image.array_to_img(batch[0])
#                     pict.save(os.path.join(data_path,lei,name))
                    pict.save(os.path.join(os.getcwd(),'dataset',lei,name))

    
#                     展示
#                     plt.figure(i)
#                     imgplot=plt.imshow(pict)
#                     print(batch.shape,batch[0].shape)
#                     print(type(batch),type(image.array_to_img(batch[0])))
#                     cv2.imwrite(str(i)+'c.jpg',batch[0])

                    # 迭代停止条件
                    ii+=1
                    if ii %20==0:
                        break
                        
if __name__ =='__main__':
    path=os.path.join(os.getcwd(),'data_increase')
    p = picture_increating(path)
    p.increate_pic()

代码解释

代码目的:使用者只代入各类所在文件夹的父文件夹路径,即可在与该父文件同级路径下创建各类文件夹,并生成经过处理(旋转\剪切\缩放等)的图片.
  1. 初始定义self.data_path和ImageDataGenerator类对象self.datagen
  2. get_pic_path:用于取各类图片的路径,并存为list返回
  3. new_package:用于创建父文件同级的新文件dataset
  4. increate_pic(核心):即为数据迭代生成函数.上面的函数都在该函数内使用.要理解该函数核心是理解ImageDataGenerator.flow(),之后可通过更改参数变换图像,此处不赘诉.

图片演示

初始图片有8类,每类1~6张
在这里插入图片描述
在这里插入图片描述
带入路径:C:\Users\6\Desktop\taidi_cup\code\data_increase
生成文件夹dataset并给每类创建新文件夹在新文件夹中生成图片.
图片个数为20*原类所含图片个数
在这里插入图片描述

总结:

ImageDataGenerator对象不仅有.flow还有.flow_from_directory.flow_DataFrame等,区别在于带入路径参数与返回值不一样,.flow_from_directory也能实现批量生成,但是生成路径不好自定义,因此便自己利用.flow写了该类.欢迎讨论。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:02:47  更:2022-03-06 13:04:19 
 
开发: 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/26 17:53:18-

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