
🏆🏆🏆教程全知识点简介:涵盖图像识别背景、目标检测定义和应用场景。核心算法原理包括R-CNN系列算法(R-CNN、SPPNet、Faster R-CNN、RPN原理)、YOLO算法(单次检测、候选框机制、单元格概念)以及SSD算法(单次多框检测器、多个Detector & classifier、训练与测试流程)。数据处理模块包含目标数据集标记、数据集格式转换(TFRecords文件、VOC2007数据集)、slim库和API使用。项目实现涉及项目结构设计、数据模块接口、预处理和数据增强技术。模型训练包括预训练模型、SSD模型定义、default boxes、模型加载、变量初始化、交互式会话。模型推理涵盖predictions筛选、bbox处理、scores排序、NMS算法。部署方案包括Web Server、TensorFlow Serving Client、环境安装、DeploymentConfig配置。训练主函数包含设备选择、全局步长变量、网络参数获取、批处理数据队列、多GPU/CPU平均损失计算。

📚📚👉👉👉本站这篇博客: https://www.jianshu.com/p/bfebd5e79998 中查看
📚📚👉👉👉本站这篇博客: https://www.jianshu.com/p/28ddf4042064 中查看
📚📚👉👉👉本站这篇博客: https://www.jianshu.com/p/bfebd5e79998 中查看
✨ 本教程项目亮点
🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考
🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容
数据集处理
了解常用目标检测数据集
了解数据集构成
了解数据集标记的需求
知道labelimg的标记使用
应用TensorFlow完成pascalvoc2007数据集的转换
了解TensorFlow slim库
了解TFRecords文件的作用
了解slim读取数据流程
应用TF-slim的data模块完成VOC2007TFRecord文件的读取
2.2 目标数据集标记
学习目标
-
目标
-
了解数据集标记的需求
-
知道labelimg的标记使用
-
-
应用
- 应用labelimg完成产品数据集的标记
为什么要进行数据集标记呢?
1、提供给训练的数据样本,图片和目标真是实结果
2、特定的场景都会缺少标记图片
2.2.1 数据集标记工具介绍
2.2.1.1 介绍
LabelImg是一个图形图像注释工具。它是用Python编写的,并使用Qt作为其图形界面。注释以PASCAL VOC格式保存为XML文件,这是ImageNet使用的格式。

注:官网:https://github.com/tzutalin/labelImg
2.2.1.2 安装
官网给出了不同平台的安装教程,由于教程过于粗略。安装细节参考安装教程本地文件

-
参考本地文件:

NumPy 文档
2.2.2 产品数据集标记
在这里 只是体验标记的过程,那么对于标记这个费时费力的工作,一般会有专门的数据标记团队去做,也称之为打标签,标记师。特别是缺乏具体应用场景的训练数据的时候。
2.2.2.1 需求介绍
第一在确定标记之前的需求,本项目以产品数据为例,需要明确的有
- 1、产品图片
- 2、需要被标记物体有哪些
确定了8种类别的产品(如需更细致,可将类别产品扩大),如下图
Python 开发者指南
2.2.2.2 标记
使用lableimg进行产品数据集标记
- 运行labelimg
python labelImg.py

打开如下结果

- 对图片中的物体进行标记
PySimpleGUI 文档
标记原则为图片中所出现的物体与 确定的8个类别物体相匹配即可
email-validator 文档

- 按下ctrl+s键保存,软件将会保存为默认XML文件格式(XML文件名与图片文件名保持一致方便后续处理)

其中关于(xmin,ymin,xmax,ymax) 已经解释过,可通过软件标记的时候观察是否一致
2.2.3 总结
- 掌握labelimg的标注使用
LightGBM 文档
2.2.4 问题
通过这样标记数据,假设你想做一个潮流产品品牌(Nike、H&M等)或者其他具体某个子领域的大部分产品的识别模型,你的数据集怎么准备?
数据集处理
了解常用目标检测数据集
了解数据集构成
了解数据集标记的需求
知道labelimg的标记使用
应用TensorFlow完成pascalvoc2007数据集的转换
了解TensorFlow slim库
了解TFRecords文件的作用
了解slim读取数据流程
应用TF-slim的data模块完成VOC2007TFRecord文件的读取
2.3 数据集格式转换
学习目标
-
目标
- 了解TFRecords文件的作用
-
应用
- 应用TensorFlow完成pascalvoc2007数据集的转换
第一来看下转换的效果:

为什么要进行格式转换?
数据集的图片以及标记文件分布在不同的文件当中,并且图片与标签没有一一对应。在后续项目当中不方便处理,也不方便项目的解耦合,需要将数据集转换成一个标准、统一使用、方便赋值移动到其他模块当中。
2.3.2 TFRecords文件
cryptography 文档
TensorFlow提供了TFRecord的格式来统一存储数据,TFRecord格式是一种将图像数据和各种标签放在一起的二进制文件,在tensorflow中快速的复制、移动、读取、存储。特点:
-
文件格式:.tfrecord or.tfrecords
-
写入文件内容:使用Example将数据封装成protobuffer协议格式
- 体积小:消息大小只需要xml的1/10~1/3
- 解析速度快:解析速度比xml快20~100倍
-
每个example对应一张图片,其中包括图片的各种信息
2.3.3 案例:VOC2007数据集转换
2.3.3.1 转换效果显示

2.3.3.2 TensorFlow API
gfile读取模块
-
tf.gfile.MakeDirs(dirname):
- 以递归方式建立父目录及其子目录,如果目录已存在且是可覆盖则会创建成功,否则报错,无返回
-
tf.gfile.Exists(filename):
- 判断目录或文件是否存在,filename可为目录路径或带文件名的路径,有该目录则返回True,否则False
-
tf.gfile.FastGFile(filename, mode):
- 该函数与tf.gfile.GFile的差别仅仅在于“无阻塞”,即该函数会无阻赛以较快的方式获取文本操作句柄
建立TFRecord存储器
-
tf.python_io.TFRecordWriter(path)
-
写入tfrecords文件
-
path: TFRecords文件的路径
-
return:写文件
-
method
- write(record):向文件中写入一个example
- close():关闭文件写入器
注:字符串为一个序列化的Example,Example.SerializeToString()
-
构造每个样本的Example协议块
-
tf.train.Example(features=None)
- 写入tfrecords文件
- features:tf.train.Features类型的特征实例
- return:example格式协议块
-
tf.train.Features(feature=None)
- 构建每个样本的信息键值对
- feature:字典数据,key为要保存的名字,value为tf.train.Feature实例
- return:Features类型
-
tf.train.Feature(**options)
- **options:例如
- bytes_list=tf.train. BytesList(value=[Bytes])
- int64_list=tf.train. Int64List(value=[Value])
处理XML库
-
import xml.etree.ElementTree as ET
- tree = et.parse(filename):形成树状结构
- tree.getroot():获取树结构的根部分
- root.find与findall()进行查询XML每个标签的内容.text
2.3.3.2 转换步骤
- 1、存入多个tfrecord文件,每个文件固定N个样本
- 2、读取每张图片内容以及XML文件
- 3、将每次读取内容写入tfrecord文件
2.3.3.3 代码
第一导入需要用到的库以及相关设置
import os
import tensorflow as tf
import xml.etree.ElementTree as ET
from datasets.utils.dataset_utils import int64_feature, float_feature, bytes_feature
from datasets.dataset_config import DIRECTORY_ANNOTATIONS, SAMPLES_PER_FILES, DIRECTORY_IMAGES, VOC_LABELS
SQLAlchemy 文档
代码结构按照如下目录结构
pytz 文档

dataset_utils当中存放常用代码,dataset_config存放一些配置,先看配置
# 原始图片的XML和JPG的文件名
DIRECTORY_ANNOTATIONS = "Annotations/"
DIRECTORY_IMAGES = "JPEGImages/"
# 每个TFRecords文件的example个数
SAMPLES_PER_FILES = 200
- 1、存入多个tfrecord文件,每个文件固定N个样本
logging 文档
def run(dataset_dir, output_dir, name="data"):
"""
存入多个tfrecords文件,每个文件一般会固定样本的数量
:param dataset_dir: 数据集目录
:param output_dir: tfrecord输出目录
:param name: 数据集名字
:return:
"""
# 1、判断数据集的路径是否存在,如果不存在新建一个文件夹
if tf.gfile.Exists(dataset_dir):
tf.gfile.MakeDirs(dataset_dir)
# 2、去Annotations读取所有的文件名字列表,与JPEGImages一样的数据量
# 构造文件的完整路径
path = os.path.join(dataset_dir, DIRECTORY_ANNOTATIONS)
# 排序操作,由于会打乱文件名的前后顺序
filenames = sorted(os.listdir(path))
# 3、循环列表中的每个文件
# 建立一个tf.python_io.TFRecordWriter(path)存储器
# 标记每个TFRecords存储200个图片和相关XML信息
# 所有的样本标号
i = 0
# 记录存储的文件标号
fidx = 0
while i < len(filenames):
# 新建一个tfrecords文件
# 构造一个文件名字
tf_filename = _get_output_filename(output_dir, name, fidx)
with tf.python_io.TFRecordWriter(tf_filename) as tfrecord_writer:
j = 0
# 处理200个图片文件和XML
while i < len(filenames) and j < SAMPLES_PER_FILES:
print("转换图片进度 %d/%d" % (i+1, len(filenames)))
# 处理图片,读取的此操作
# 处理每张图片的逻辑

















暂无评论内容