如何制作自己的图片数据集-基于tensorflow

写在开始

自己最开始接触python的时候,第一个学会使用的库就是tensorflow,在经历了everyone 都会经历的mnist数据集训练后,就开始想自己做一个图片分类的深度学习,期间也是一波三折,看了很多csdn上的博客,摸索出了自己的数据集制作习惯,用以简单的分类。

数据集下载

数据集的话,一是通过自己下载收集,也可以去很多赛题里下分类好的资源,像阿里的天池大数据比赛,我用的数据集来自天池大数据数据集

数据集制作

tensorflow只能读取二进制数据,以tfrecord格式保存图片,所以我们必须先把矩阵型的图片数据转化。

import os
import tensorflow as tf 
from PIL import Image
import numpy as np
data_path= 'data\\guangdong_round1_train2_20180916'#也可以输入你自己的test路径
writer=tf.python_io.TFRecordWriter('data\\train_data.tfrecord')
classes=['正常',
        '不导电',
        '擦花',
        '横条压凹',
        '桔皮',
        '漏底',
        '碰伤',
        '起坑',
        '凸粉',
        '涂层开裂',
        '脏点',
        '其他'
        ]#也可以输入你自己的分类,这是比赛时要求的分类
class_path=[]
for index,name in enumerate(classes):
    if name=='正常':
        class_path.append(os.path.join(data_path,'无瑕疵样本'))
    else:
        if name=='其他':
            new_path=os.path.join(data_path,'瑕疵样本','其他')
            for newpath in os.listdir(new_path):
                class_path.append(os.path.join(data_path,'瑕疵样本',name,newpath)) 
        else:
            class_path.append(os.path.join(data_path,'瑕疵样本',name))
  #上面的过程是为每个类别的图片建一个收索路径,使每一张图片进入进入这个搜索路径,方便下文遍历搜索
  #下一个遍历是让每张图片转换为tfrecord格式
for path in class_path:
    for image_path in os.listdir(path):
        image_path=os.path.join(path,image_path)
        image= Image.open(image_path)
        image=image.resize((256,256)) #图片太大,根据你的需求缩小尺寸
        image_raw=image.tobytes()
        example=tf.train.Example(features=tf.train.Features(feature={
    'lable':tf.train.Feature(int64_list=tf.train.Int64List(value=[index])) ,
    'image_raw':tf.train.Feature(byt
  • 5
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
花卉识别是计算机视觉中的一个重要应用,可以通过图像识别技术自动识别图像中的花卉种类。下面是一个基于TensorFlow 2.3实现的花卉识别程序示例。 首先,我们需要准备好训练数据和测试数据。可以使用公开的花卉数据集,例如Oxford 102花卉数据集。这个数据集包含了102种不同的花卉,每种花卉有大约80张图片。可以通过以下链接下载数据集: http://www.robots.ox.ac.uk/~vgg/data/flowers/102/index.html 下载完成后,我们需要将数据集进行处理,将其转换为模型可以处理的形式。可以使用Python中的PIL库进行图片处理,并使用TensorFlow中的ImageDataGenerator类来进行数据增强和批量处理。 ```python import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator # 定义数据增强和预处理函数 train_datagen = ImageDataGenerator( rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) test_datagen = ImageDataGenerator(rescale=1./255) # 加载训练数据和测试数据 train_data = train_datagen.flow_from_directory( 'flower_dataset/train', target_size=(224, 224), batch_size=32, class_mode='categorical') test_data = test_datagen.flow_from_directory( 'flower_dataset/test', target_size=(224, 224), batch_size=32, class_mode='categorical') ``` 接下来,我们可以定义一个卷积神经网络模型来训练我们的数据。可以使用TensorFlow中的Keras API来定义模型。 ```python from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout # 定义一个卷积神经网络模型 model = Sequential() model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3))) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(128, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(128, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Flatten()) model.add(Dense(512, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(102, activation='softmax')) # 编译模型 model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) ``` 定义好模型后,我们可以使用fit()方法来训练模型。可以指定训练数据和测试数据,以及一些训练参数,例如批量大小、迭代次数等。 ```python # 训练模型 history = model.fit( train_data, steps_per_epoch=100, epochs=30, validation_data=test_data, validation_steps=50) ``` 训练完成后,我们可以使用模型来进行预测。可以使用predict()方法来对单个图片进行识别,或者使用evaluate()方法来对测试集进行整体评估。 ```python # 对单个图片进行预测 import numpy as np from tensorflow.keras.preprocessing import image img_path = 'flower_dataset/test/daisy/5547758_eea9edfd54_n.jpg' img = image.load_img(img_path, target_size=(224, 224)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x /= 255. preds = model.predict(x) print(preds) # 对测试集进行评估 test_loss, test_acc = model.evaluate(test_data, steps=50) print('Test accuracy:', test_acc) ``` 以上就是一个基于TensorFlow 2.3的花卉识别程序示例。需要注意的是,这个程序只是一个简单的示例,实际应用中可能需要进行更多的调参和优化。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值