【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】

【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】

🏆🏆🏆教程全知识点简介:涵盖图像识别背景、目标检测定义和应用场景。核心算法原理包括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平均损失计算。


【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】

📚📚👉👉👉本站这篇博客:   https://www.jianshu.com/p/bfebd5e79998    中查看

📚📚👉👉👉本站这篇博客:   https://www.jianshu.com/p/28ddf4042064    中查看

📚📚👉👉👉本站这篇博客:   https://www.jianshu.com/p/bfebd5e79998    中查看

✨ 本教程项目亮点

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


🎯🎯🎯全教程总章节

【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】

【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】


🚀🚀🚀本篇主要内容

数据集处理

了解常用目标检测数据集
了解数据集构成
了解数据集标记的需求
知道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使用的格式。

【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】

注:官网:https://github.com/tzutalin/labelImg

2.2.1.2 安装

官网给出了不同平台的安装教程,由于教程过于粗略。安装细节参考安装教程本地文件

【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】

  • 参考本地文件:

    【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】

NumPy 文档

2.2.2 产品数据集标记

在这里 只是体验标记的过程,那么对于标记这个费时费力的工作,一般会有专门的数据标记团队去做,也称之为打标签,标记师。特别是缺乏具体应用场景的训练数据的时候。

2.2.2.1 需求介绍

第一在确定标记之前的需求,本项目以产品数据为例,需要明确的有

  • 1、产品图片
  • 2、需要被标记物体有哪些

确定了8种类别的产品(如需更细致,可将类别产品扩大),如下图

Python 开发者指南

2.2.2.2 标记

使用lableimg进行产品数据集标记

  • 运行labelimg

python labelImg.py

【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】

打开如下结果

【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】

  • 对图片中的物体进行标记

PySimpleGUI 文档

标记原则为图片中所出现的物体与 确定的8个类别物体相匹配即可

email-validator 文档

【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】

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

【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】

其中关于(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数据集的转换

第一来看下转换的效果:

【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】

为什么要进行格式转换?

数据集的图片以及标记文件分布在不同的文件当中,并且图片与标签没有一一对应。在后续项目当中不方便处理,也不方便项目的解耦合,需要将数据集转换成一个标准、统一使用、方便赋值移动到其他模块当中。

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 转换效果显示

【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】

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 文档

【深度学习】嘿马深度学习目标检测教程第5篇:数据集处理,2.2 目标数据集标记【附代码文档】

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)))

                # 处理图片,读取的此操作
                # 处理每张图片的逻辑

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
弓长木木的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容