阅读本文需要5.5分钟
引
本教程使用的环境:Windows 10 Python 3.6
数据源:The Oxford-IIIT Pet Dataset
需要的第三方库:
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt %matplotlib inline from lxml import etree import glob from matplotlib.patches import Rectangle
一 单张图片定位
1 读取图片:(这里使用tensflow的方法读取)
img = tf.io.read_file(r'\xxxxxxxx.jpg')
2 解码图片:
img = tf.image.decode_jpeg(img)
3 显示下读取的图片
plt.imshow(img)
4 解析图片规格信息(这里是一个xml文件,我们使用爬虫将其图片信息爬取下来)
文件格式如图:
xml = open(r'xxxxxxx.xml').read() sel = etree.HTML(xml) width = int(sel.xpath('//size/width/text()')[0]) height = int(sel.xpath('//size/height/text()')[0]) xmin = int(sel.xpath('//bndbox/xmin/text()')[0]) ymin = int(sel.xpath('//bndbox/ymin/text()')[0]) xmax = int(sel.xpath('//bndbox/xmax/text()')[0]) ymax = int(sel.xpath('//bndbox/ymax/text()')[0])
5 定位
plt.imshow(img) rec = Rectangle((xmin, ymin), (xmax-xmin), (ymax-ymin), fill=False, color='red') ax = plt.gca() ax.axes.add_patch(rec)
输出:
二 统一规划
先给大家上一张图
所有
这是部分数据集图片,这里的图片大小不一,有的是长的有的是宽的。但是在创建data数据时,所有的图片数据应是统一的(也就是同长同高)所以我们得想个办法让其统一。
由上面的案例我们知道头部的位置由 (xmin, ymin), (xmax-xmin), (ymax-ymin)所决定,所以我们可以通过“放缩”的思想来实现目标值
1 统一图片大小(224,224):
img = tf.image.resize(img, [224,224]) img = img/255 plt.imshow(img)
2 确定相对于的目标值:
xmin = (xmin/width)*224 ymin = (ymin/height)*224 xmax = (xmax/width)*224 ymax = (ymax/height)*224
3 定位:
plt.imshow(img) rec = Rectangle((xmin, ymin), (xmax-xmin), (ymax-ymin), fill=False, color='red') ax = plt.gca() ax.axes.add_patch(rec)
输出:
这时就可以把所有数据集导入训练,建立管道,训练成模型。(建议使用GPU版本)
若需要数据集,则在后台回复【数据集】即可获取