在深度学习中,图像分类已然是一种初级任务。在计算机视觉领域,使用深度学习对图像进行高维特征提取,实现对图像的分类已经非常成熟。常见的深度学习模型,如lenet-5、AlexNet、VGG、Inception、Resnet等系列模型都可以实现图像分类任务。

一般我们使用Tensorflow或者Pytorch构建深度学习模型,并使用cifar10、cifar100、Imagenet等数据集即可进行一个图像分类模型的训练。要解决实际问题,实现算法落地,就需要根据应用场景对我们需要分类的数据进行数据收集并构建数据集,以完成针对特定分类任务的模型训练和测试。

例如,我们对几种小鸟(斑鸠、麻雀、白鹭)进行分类。首先需要收集这几种鸟类的图片,然后人为的对这些图像进分类,可以使用不同的文件名对图像进区分,最简单的办法就是将不同类别归入不同文件夹,例如建立一个麻雀文件夹存入所有麻雀相关图片。这样一个小鸟分类的数据就是如下形式:

麻雀数据集:

白鹭数据集:

斑鸠数据集:

对数据集划分训练集和验证集,可以用相同目录结构来划分,也可以在训练时通过随机读取方式将一部分图像作为训练集一部分作为验证集。另外数据集的制作对后期训练结果也会产生影响,首先保证不同类别的数据集图片数量尽量一致,为了保证训练数据覆盖足够多特征和场景,也需要确保每个分类图像数量在一百张以上。

完成数据的收集和整理后,需要对数据集进行预处理。由于图像数据集一般比较大,训练时采用batch方式对图像进行加载,即从成千上万张照片中抽取一部分加载进内存进行训练。另外,还需要对不同分类进行编码也就是制作标签,比如'斑鸠': 0, '白鹭': 1, '麻雀': 2。这需要提前将不同数据生成对应的读取路径和对应编码,存入一个表格文件以方便训练时加载。

这里使用python对数据集进行读取和预处理。

预处理脚本:

import os, glob
import random, csvdef load_csv(root, filename, name2label):# root:数据集根目录# filename:csv文件名# name2label:类别名编码表if not os.path.exists(os.path.join(root, filename)):images = []for name in name2label.keys():images += glob.glob(os.path.join(root, name, '*.png'))images += glob.glob(os.path.join(root, name, '*.jpg'))images += glob.glob(os.path.join(root, name, '*.jpeg'))print(len(images), images)random.shuffle(images)with open(os.path.join(root, filename), mode='w', newline='') as f:writer = csv.writer(f)for img in images:name = img.split(os.sep)[-2]label = name2label[name]writer.writerow([img, label])print('written into csv file:', filename)# read from csv fileimages, labels = [], []with open(os.path.join(root, filename)) as f:reader = csv.reader(f)for row in reader:img, label = rowlabel = int(label)images.append(img)labels.append(label)assert len(images) == len(labels)return images, labelsdef load_birds(root, mode='train'):# 创建数字编码表name2label = {}  # "sq...":0for name in sorted(os.listdir(os.path.join(root))):if not os.path.isdir(os.path.join(root, name)):continue# 给每个类别编码一个数字name2label[name] = len(name2label.keys())# 读取Label信息# [file1,file2,], [3,1]images, labels = load_csv(root, 'images.csv', name2label)if mode == 'train':  # 60%images = images[:int(0.6 * len(images))]labels = labels[:int(0.6 * len(labels))]elif mode == 'val':  # 20% = 60%->80%images = images[int(0.6 * len(images)):int(0.8 * len(images))]labels = labels[int(0.6 * len(labels)):int(0.8 * len(labels))]else:  # 20% = 80%->100%images = images[int(0.8 * len(images)):]labels = labels[int(0.8 * len(labels)):]return images, labels, name2labeldef main():import timeimages, labels, table = load_birds('datasets', 'train')print('images', len(images), images)print('labels', len(labels), labels)print(table)if __name__ == '__main__':main()

生成数据集表格:

深度学习图像分类数据集制作相关推荐

  1. camvid数据集介绍_深度学习图像数据集介绍(MSCOCO)

    深度学习图像数据集介绍(MSCOCO) MSCOCO数据集是微软开发维护的大型图像数据集,次数聚集的任务包括识别(recognition),分割(segementation),及检测(detectio ...

  2. PyTorch深度学习图像分类--猫狗大战

    PyTorch深度学习图像分类--猫狗大战 1.背景介绍 2.环境配置 2.1软硬件清单 2.1.1配置PyPorch 2.1.2开发软件 2.1.3 显卡 2.2 数据准备 3 基础理论 3.1Py ...

  3. 【视频课】一课彻底掌握深度学习图像分类各种问题,学习CV你值得拥有

    课程介绍 对于刚接触深度学习计算机视觉的初学者来说,图像分类问题是最常见的问题,如何最好图像分类任务,关系到大家能否正确顺利地入门.读了许多论文,可能仍然不懂代码如何实现.跑了代码,仍旧不懂如何运用图 ...

  4. 【AI-1000问】为什么深度学习图像分类的输入多是224*224

    文章首发于微信公众号<有三AI> [AI-1000问]为什么深度学习图像分类的输入多是224*224 写在前边的通知 大家好,今天这又是一个新专栏了,名叫<有三AI 1000问> ...

  5. 深度学习 图像分类_深度学习时代您应该阅读的10篇文章了解图像分类

    深度学习 图像分类 前言 (Foreword) Computer vision is a subject to convert images and videos into machine-under ...

  6. 国内外深度学习开放数据集下载集合(值得收藏,不断更新)

    国内外深度学习开放数据集下载集合(值得收藏,不断更新) 一.Image processing data set 1.MNIST ,是最流行的深度学习数据集之一.这是一个手写数字数据集,包含一个有着 6 ...

  7. 深度学习 大数据集处理_大规模深度学习数据集管理系统

    深度学习 大数据集处理 Machine learning is data-driven. Most artificial intelligence (AI) practitioners would a ...

  8. 图像处理 语音识别 深度学习 开放数据集

    从图像处理到语音识别,25款数据科学家必知的深度学习开放数据集 本文介绍了 25 个深度学习开放数据集,包括图像处理.自然语言处理.语音识别和实际问题数据集. 介绍 深度学习(或生活中大部分领域)的关 ...

  9. 从图像处理到语音识别,25款数据科学家必知的深度学习开放数据集

    选自Analytics Vidhya,作者:Pranav Dar,机器之心编译. 本文介绍了 25 个深度学习开放数据集,包括图像处理.自然语言处理.语音识别和实际问题数据集. 介绍 深度学习(或生活 ...

  10. 快速构建深度学习图像数据集,微软Bing和Google哪个更好用?

    译者 | Serene 编辑 | 明明 出品 | AI 科技大本营(公众号ID:rgznai100) [AI 科技大本营导读]在本文中,作者将利用微软的 Bing Image Search API 来 ...

最新文章

  1. php 清除之前echo_PHP入门读书笔记(三): 常量和变量
  2. “jQuery风暴” 推荐及配套代码下载
  3. Java连接HBASE数据库,创建一个表,删除一张表,修改表,输出插入,修改,数据删除,数据获取,显示表信息,过滤查询,分页查询,地理hash
  4. 使用POI读取excel文件内容
  5. python类属性的调用方法_问一个关于PYTHON类属性调用方法的问题
  6. Ubuntu 12.04 root用户登录设置
  7. 华为不做黑寡妇,开源编译器,与友商共建安卓性能
  8. JavaScript逻辑运算符
  9. android登录操作代码,Android Studio实现第三方QQ登录操作代码
  10. 【优化算法】粒子群算法和混沌搜索协同优化算法【含Matlab源码 1299期】
  11. SpringBoot整合sigar实现服务端监控
  12. java对接微信公众号
  13. 软件工程中英对照术语表
  14. polyval matlab 怎么用,matlab 中polyval的用法 最好能举个例子
  15. 随机抽样C语言,R语言中实现简单随机抽样
  16. 对日软件工程师的几种招聘要求
  17. python需要cpu还是显卡问题_买新电脑是cpu重要还是显卡重要?该怎么选择?
  18. Foundry教程:ERC-20代币智能合约从编写到部署全流程开发
  19. 你不能错过的高效率工具:第1期
  20. 前端一键自动部署工具

热门文章

  1. mysql分组后查询条数_MySQL分组后,如何统计记录条数
  2. UI自动化测试潮流代表工具—testsigma 快速入门
  3. Hadoop FS 常用命令详解
  4. 软件设计实验一 UML建模实验
  5. java ad域 单点登录_系统集成-SSO微软ADSF单点认证-AD域认证
  6. 制造企业年终仓库盘点有哪些好的方法
  7. Thinkpad T470 内置电池问题
  8. 利用文本挖掘技术来找出《天龙八部》中的“小鲜词”
  9. Cordova入门教程
  10. 教学向|比较难的人体构造建模,用zbrush构建脸部与肌肉形状