图像分类之花卉图像分类(二)数据预处理代码

2023-11-04

经过上一节数据增强,我们来说说数据预处理吧。首先我们要知道图片进入网络训练都是要统一大小格式的,所以我们需要对训练集和验证集的图片进行裁剪,让他们大小统一,注意测试集不用裁剪!!!我选择裁剪成了64*64的,没改源码的裁剪大小,其实图片大些识别率听说会高些,因为裁剪中会丢失一些信息。但是我没有试过,大家可以试试128*128的看看。下面是统一大小的代码:
记得修改成你自己的路径

# 将原始图片转换成需要的大小,并将其保存
# ========================================================================================
import os
import tensorflow as tf
from PIL import Image
import warnings
warnings.filterwarnings('ignore')
# 原始图片的存储位置
orig_picture = 'D:/flower_photos/train'

# 生成图片的存储位置
gen_picture = 'D:/flower_photos/input_data/train'

# 需要的识别类型
classes = { 'roses','tulips','dandelion','sunflowers','daisy'}

# 生成图片数目(训练集7000)验证集是500
num_samples = 7000


# 制作TFRecords数据
def create_record():
    writer = tf.python_io.TFRecordWriter("flower_train.tfrecords")
    for index, name in enumerate(classes):
        class_path = orig_picture + "/" + name + "/"
        for img_name in os.listdir(class_path):
            img_path = class_path + img_name
            img = Image.open(img_path)
            img = img.resize((64, 64))  # 设置需要转换的图片大小
            img_raw = img.tobytes()  # 将图片转化为原生bytes
            print(index, img_raw)
            example = tf.train.Example(
                features=tf.train.Features(feature={
                    "label": tf.train.Feature(int64_list=tf.train.Int64List(value=[index])),
                    'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))
                }))
            writer.write(example.SerializeToString())
    writer.close()


# =======================================================================================
def read_and_decode(filename):
    # 创建文件队列,不限读取的数量
    filename_queue = tf.train.string_input_producer([filename])
    # create a reader from file queue
    reader = tf.TFRecordReader()
    # reader从文件队列中读入一个序列化的样本
    _, serialized_example = reader.read(filename_queue)
    # get feature from serialized example
    # 解析符号化的样本
    features = tf.parse_single_example(
        serialized_example,
        features={
            'label': tf.FixedLenFeature([], tf.int64),
            'img_raw': tf.FixedLenFeature([], tf.string)
        })
    label = features['label']
    img = features['img_raw']
    img = tf.decode_raw(img, tf.uint8)
    img = tf.reshape(img, [64, 64, 3])
    # img = tf.cast(img, tf.float32) * (1. / 255) - 0.5
    label = tf.cast(label, tf.int32)
    return img, label


# =======================================================================================
if __name__ == '__main__':
    create_record()
    batch = read_and_decode('flower_train.tfrecords')
    init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())

    with tf.Session() as sess:  # 开始一个会话
        sess.run(init_op)
        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(coord=coord)

        for i in range(num_samples):
            example, lab = sess.run(batch)  # 在会话中取出image和label
            img = Image.fromarray(example, 'RGB')  # 这里Image是之前提到的
            img.save(gen_picture + '/' + str(i) + 'samples' + str(lab) + '.jpg')  # 存下图片;注意cwd后边加上‘/’
            print(example, lab)
        coord.request_stop()
        coord.join(threads)
        sess.close()

裁剪后的图像识放在同一个文件夹里的,所以需要自己手动分类,就把它们放到他们类别的文件夹就行,其实也很简单,因为我这里是每个类别500张,每个类别的图片都是在一起的,或者你看图片名samples后面的编号就能看出。这个代码要运行两次,一次裁剪训练集,一次裁剪验证集。裁剪完后,我们可以看到,大小都是一样的。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图像分类之花卉图像分类(二)数据预处理代码 的相关文章

  • Presto 与 Hive 语法学习

    Presto 与 Hive 语法学习 文章目录 Presto 与 Hive 语法学习 1 Presto语法 1 1 数据类型 布尔值 整数 浮点 固定精度 字符串 日期和时间 结构 网络地址 UUID HyperLogLog KHyperL

随机推荐

  • muduo1——编程风格:面向对象的编程和基于对象的编程(上)

    muduo库其实不是面向对象的编程 而是基于对象的编程 那么在进入正式的muduo源码分析之前 先来看看这两种编程风格 一 面向对象编程风格 通过对一个线程类的封装来进行讲解 Thread是一个抽象类不能实例化对象 TestThread是派
  • Hp DL380服务器瘫痪如何恢复服务器数据(多图)

    服务器数据恢复故障简介 需要进行数据恢复的是一台HP DL380服务器 三块300GSAS硬盘组成raid阵列 磁盘故障导致整个RAID组瘫痪 其中一块硬盘状态灯为红色 数据库存储在D分区 备份存储在E分区 存储故障 造成D分区不可识别 E
  • Python 关键字global全局变量详解

    变量作用域 一般在函数体外定义的变量成为全局变量 在函数内部定义的变量称为局部变量 全局变量所有作用域都可用 局部变量只能在本函数可用 变量的使用顺序是 局部变量 gt 全局变量 也就是说 优先使用局部变量 那么问题来了 如果想在函数内使用
  • LabVIEW心率监测装置

    LabVIEW大作业 LabVIEW心率采集装置 本设计为我的LabVIEW课程大作业 利用proteus实验仿真软件设计一个了基于stc12c5a单片机的心率采集系统 并在PC机上的Windows环境下利用LabVIEW软件实现心率数据的
  • 开开心心带你学习MySQL数据库之节尾篇下

    真的勇士 那就是看清生活的真相之后 依然热爱生活 罗曼 罗兰 JDBC编程的基本工作 准备工作 1 下载 mysql驱动包 maven 中央仓库 2 导入到项目中复制到项目目录下 标志为 library 编写代码 1 创建数据源 描述数据库
  • (.htaccess文件和.user.ini文件)[SUCTF 2019]CheckIn1

    打开靶机 提交一个一句话木马文件 图片马 显示上传成功 但是使用蚁剑连接返回为空 再使用 htaccess文件绕过 参考博主原文链接 https blog csdn net m0 64444909 article details 12489
  • 设置ImageButton的点击效果

    我要设置一个ImageButton的点击效果 普通状态背景透明 按下状态有一个背景图 src是一个图片 如下所示
  • 解决.net中使用gmail.com邮箱进行Smtp发送信件时失败的问题

    我经常使用免费的gmail com邮箱 因为它容量较大 但我们在使用 net编程实现邮件发送时 常会出现我们意想不到的错误 最常见的就是 1 The operation has timed out 2 出现类似提示 The SMTP ser
  • QT编写的数字键盘

    https download csdn net download qq 20189555 88001237
  • MySQL数据同步到 Redis 缓存的几种方法

    本文主要介绍了浅谈MySQL数据同步到 Redis 缓存的几种方法 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着微点阅读小编来一起学习学习吧 1 Mysql查完数据 再同步写入到Redis
  • 网络安全这玩意儿真不建议一般人学...

    前言 作为一名5年网安工程师老菜鸟来说 我实在想不通 开发岗位那么多 为什么要来学网安 在这里怕是要给准备入坑的同学泼盆冷水了 网络安全这东西真不建议一般人学 基础确实很简单 是个人稍微认点真都能懂 这就是好多人说的网络安全简单 易懂 好学
  • iostat命令详解&指标分析

    Iostat iostat命令用于监视系统CPU和I O设备负载 常用方法 iostat x 1 12 检测系统的io状态 每一秒刷新一次 一共刷新12次 x该选项显示和io相关的扩展数据 还可以使用 k或者 m选项以按照kb或MB显示单位
  • FastDFS单机版环境搭建

    1 搭建环境 ubuntu 2 gcc g 编译器 ubuntu平台在线安装指令 1 apt get install gcc 2 apt get install g 3 apt get install build essential 4 a
  • 1.阅读《疯狂Java讲义》

    从2000年至今 Java语言一直是应用最广的开发语言 并拥有最广泛的开发人群 如今 java已经不再简单地是一门语言 它更像一个完整的体系 一个系统的开发平台 更甚至 它被延伸成一种开源精神 如何学习java 程序的作用是 解决问题 如果
  • C/C++命名规范-C语言基础

    这一篇文章想要介绍的是编写代码的时候业界比较常用的一些命名规范 以及个人平时的一些命名规范 涉及 驼峰命名法 下划线命名法 帕斯卡命名法 匈牙利命名法 的介绍和见解 属于C语言基础篇 持续更新 刚刚开始学习编程的时候 我的第一个老师便强调过
  • APP UI结构-首页功能点大集锦,很干很详细

    APP UI结构的系列的文章有一段时间没有更新了 因为最近在学一些新东西和看一些新书籍 适当的给自己充电也是为了更好的输出 言归正传 今天想跟大家聊的是和首页相关的一些内容 可能有些内容最近有的小伙伴已经更新过了 相信大家也看见了 比如导航
  • fisco bcos应用开发(一) springboot报错 Error reading resource

    问题描述 解决办法 原因 因为导出的项目没有sm这个文件夹 他去找去了 肯定找不到啊 这个问题当时卡了我一天 希望兄弟们能快速的解决 解决了来给我点赞 没解决算求了
  • 数字图象处理之二维码图像提取算法(六)

    整体的框图如下所示 Hough 变换是图像空间和参数空间之间的一种变换 利用点与线的对偶性 将原始图像空间的给定曲线变为参数空间的一个点 这样直线的检测就变为参数空间中峰值的检测 接下来来了解一下霍夫变换 可以证明 直角坐标系p 0中的一条
  • 简单排序--冒泡排序(一)

    冒泡排序算法运行起来非常缓慢 但在概念上它是排序算法中最简单的 因此冒泡排序算法在刚开始研究排序技术时是一个非常好的算法 使用冒泡排序对无序数据进行排序 如下图冒泡排序的执行过程如下 从数组的最左边开始 比较0号位置和1号位置的数字 如果左
  • 图像分类之花卉图像分类(二)数据预处理代码

    经过上一节数据增强 我们来说说数据预处理吧 首先我们要知道图片进入网络训练都是要统一大小格式的 所以我们需要对训练集和验证集的图片进行裁剪 让他们大小统一 注意测试集不用裁剪 我选择裁剪成了64 64的 没改源码的裁剪大小 其实图片大些识别