本文目录一览:
- [Python 制作Pascal VOC数据集](#Python 制作Pascal VOC数据集)
- [如何用python imageio制作图像数据集](#如何用python imageio制作图像数据集)
- Python实操:手把手教你用Matplotlib把数据画出来
Python 制作Pascal VOC数据集
下图是 Pascal VOC 数据集格式。
Annotations
目录是存放 xml 文件;ImageSets
目录是存放 txt 文件,主要是测试集、训练集、验证集等文件名称的集合;JPEGImages
目录是存放图片文件(jpg); 步骤如下:- 从
Annotations
目录下读取 xml 文件; - 把 xml 文件随机重置一下,这样在训练的时候,各个分类是随机读取,不会出现某一个分类聚集读取,从而影响训练效果。当然,你也可以在训练的时候选择随机重置,道理是一样的;
- 创建将要写入的 txt 文件。这里示范了训练集、验证集,其他的可自行添加;
- 读取目录文件,通过前缀判断,写入 txt 文件。 有时候不需要指定数据集,只是从一个大的原始数据集中,随机选取一部分当作训练集、一部分当作验证集、一部分当作测试集。
如何用python imageio制作图像数据集
声明在此使用的彩色图转灰度图进行的单通道的图像存储,对于多通道的图像随后进行总结。 主要流程是将图像数据读出:
- 将图像转换成 NumPy 的数组形式;
- 将图像进行行的处理编程行向量的存储;
- 之后是将数据与标签进行合并存储;
- 存储在一个 list 中;
- 将这个数据集进行数据的打乱顺序(随机化的过程); 主要的过程就是这些了。 下面是代码的示例:
# -*-coding:utf-8-*-
import numpy
import theano
from PIL import Image
from pylab import *
import os
import theano.tensor as T
import random
import pickle
def dataresize(path=r'D:\worksapce_python\20160426_cp\testing'):
# test path
path_t = r"D:\worksapce_python\20160426_cp\training"
# train path
datas = []
train_x = []
train_y = []
valid_x = []
valid_y = []
test_x = []
test_y = []
for dirs in os.listdir(path):
# print dirs
for filename in os.listdir(os.path.join(path, dirs)):
imgpath = os.path.join(os.path.join(path, dirs), filename)
img = Image.open(imgpath)
img = img.convert('L').resize((28, 28))
width, height = img.size
img = numpy.asarray(img, dtype='float64') / 256.
Python实操:手把手教你用Matplotlib把数据画出来
作者:迈克尔·贝耶勒(Michael Beyeler)
如需转载请联系华章科技。
如果已安装 Anaconda Python 版本,就已经安装好了可以使用的 Matplotlib。否则,可能要访问官网并从中获取安装说明。
正如使用 np
作为 NumPy 的缩写,我们将使用一些标准的缩写来表示 Matplotlib 的引入:
在本书中,plt
接口会被频繁使用。
让我们创建第一个绘图。
假设想要画出正弦函数 sin(x)
的线性图。得到函数在 x
坐标轴上 0 ≤ x < 10
内所有点的值。我们将使用 NumPy 中的 linspace
函数来在 x
坐标轴上创建一个从 0 到 10 的线性空间,以及 100 个采样点:
可以使用 NumPy 中的 sin
函数得到所有 x
点的值,并通过调用 plt
中的 plot
函数把结果画出来:
你亲自尝试了吗?发生了什么吗?有没有什么东西出现?
实际情况是,取决于你在哪里运行脚本,可能无法看到任何东西。有下面几种可能性:
- 从
.py
脚本中绘图 如果从一个脚本中运行 Matplotlib,需要加上下面的这行调用:
在脚本末尾调用这个函数,你的绘图就会出现!plt.show()
- 从 IPython shell 中绘图
这实际上是交互式地执行 Matplotlib 最方便的方式。为了让绘图出现,需要在启动 IPython 后使用所谓的
%matplotlib
魔法命令。 接下来,无须每次调用plt.show()
函数,所有的绘图将会自动出现。 - 从 Jupyter Notebook 中绘图
如果你是从基于浏览器的 Jupyter Notebook 中看这段代码,需要使用同样的
%matplotlib
魔法命令。然而,也可以直接在 notebook 中嵌入图形,这会有两种输出选项: 在本书中,将会使用inline
选项:
现在再次尝试一下: 上面的命令会得到下面的绘图输出结果: 如果想要把绘图保存下来留作以后使用,可以直接在 IPython 或者 Jupyter Notebook 使用下面的命令保存:%matplotlib inline
仅需要确保你使用了支持的文件后缀,比如plt.savefig('my_figure.png')
.jpg
、.png
、.tif
、.svg
、.eps
或者.pdf
。 作为本章最后一个测试,让我们对外部数据集进行可视化,比如 scikit-learn 中的数字数据集。 为此,需要三个可视化工具:
matplotlib.pyplot
numpy
sklearn.datasets
那么开始引入这些包吧: 第一步是载入实际数据:
from sklearn.datasets import load_digits
digits = load_digits()
如果没记错的话,digits
应该有两个不同的数据域:data
域包含了真正的图像数据,target
域包含了图像的标签。相对于相信我们的记忆,我们还是应该对 digits
稍加探索。输入它的名字,添加一个点号,然后按 Tab 键:digits.TAB
,这个操作将向我们展示 digits
也包含了一些其他的域,比如一个名为 images
的域。images
和 data
这两个域,似乎简单从形状上就可以区分。
两种情况中,第一维对应的都是数据集中的图像数量。然而,data
中所有像素都在一个大的向量中排列,而 images
保留了各个图像 8×8 的空间排列。
因此,如果想要绘制出一副单独的图像,使用 images
将更加合适。首先,使用 NumPy 的数组切片从数据集中获取一幅图像:
image = digits.images[0]
这里是从 1797 个元素的数组中获取了它的第一行数据,这行数据对应的是 8×8=64 个像素。下面就可以使用 plt
中的 imshow
函数来绘制这幅图像:
plt.imshow(image, cmap='gray')
上面的命令得到下面的输出:
此外,这里也使用 cmap
参数指定了一个颜色映射。默认情况下,Matplotlib 使用 MATLAB 默认的颜色映射 jet
。然而,在灰度图像的情况下,gray
颜色映射更有效。
最后,可以使用 plt
的 subplot
函数绘制全部数字的样例。subplot
函数与 MATLAB 中的函数一样,需要指定行数、列数以及当前的子绘图索引(从 1 开始计算)。我们将使用 for
循环在数据集中迭代出前十张图像,每张图像都分配到一个单独的子绘图中。
这会得到下面的输出结果:
关于作者:Michael Beyeler,华盛顿大学神经工程和数据科学专业的博士后,主攻仿生视觉计算模型,用以为盲人植入人工视网膜(仿生眼睛),改善盲人的视觉体验。他的工作属于神经科学、计算机工程、计算机视觉和机器学习的交叉领域。同时他也是多个开源项目的积极贡献者。 本文摘编自《机器学习:使用 OpenCV 和 Python 进行智能图像处理》,经出版方授权发布。