当前位置: 首页 > news >正文

做外贸网站 用国外空间 还是 国内空间 区别premium wordpress plugins

做外贸网站 用国外空间 还是 国内空间 区别,premium wordpress plugins,昆明网站制作费用,做网站徐州1、绪论 1.1 KerasCV简介 KerasCV是一个专注于计算机视觉任务的模块化组件库#xff0c;基于Keras构建#xff0c;可与TensorFlow、JAX或PyTorch等框架配合使用。 概念与定位#xff1a; KerasCV是Keras API的水平扩展#xff0c;提供了一系列新的第一方Keras对象#x…1、绪论 1.1 KerasCV简介 KerasCV是一个专注于计算机视觉任务的模块化组件库基于Keras构建可与TensorFlow、JAX或PyTorch等框架配合使用。 概念与定位 KerasCV是Keras API的水平扩展提供了一系列新的第一方Keras对象这些对象过于专业化无法添加到核心Keras中。它获得了与核心Keras API相同级别的完善和向后兼容性保证并由Keras团队维护。 功能与应用 KerasCV的API协助执行常见的计算机视觉任务如数据增强、分类、对象检测、分割、图像生成等。它包括针对流行计算机视觉数据集的预训练模型例如ImageNet、COCO和Pascal VOC可用于迁移学习。KerasCV还提供了一系列可视化工具用于检查模型学习的中间表示以及可视化对象检测和分割任务的结果。 框架兼容性 虽然KerasCV主要支持TensorFlow框架但由于其模块化设计一些组件和功能可能也可以与其他兼容Keras的框架如JAX或某些版本的PyTorch一起使用。这些模型、层、指标、回调等基于Keras Core构建可以在任何框架中进行训练和序列化并在另一个框架中重复使用而无需进行昂贵的迁移。 应用场景 应用计算机视觉工程师可以利用KerasCV为常见的计算机视觉任务快速组装生产级、最先进的训练和推理管道。在多个领域中都有广泛应用例如自动驾驶、医学影像处理、视频监控等。 KerasCV是一个功能强大、灵活且易于使用的计算机视觉库为开发者提供了丰富的工具和资源来构建和优化各种计算机视觉模型。 1.2 YOLOV8简介 YOLOV8You Only Look Once version 8是一个深度学习框架专门用于实现实时对象检测。 算法思想 YOLOYou Only Look Once算法的核心思想是只需要浏览一次图像就可以识别出图像中物体的类别和位置。它采用了一种Region-free无区域或单阶段1-stage的方法与需要两阶段2-stage的Region-based方法不同。 性能特点 实时性能YOLOV8继承了YOLO系列的实时检测特性即使在较低的硬件配置上也能达到很高的帧率FPS。高准确度通过更深更复杂的网络结构和改进的训练技巧YOLOV8在保持高速度的同时也大幅提高了检测的准确度。多尺度预测YOLOV8引入了改进的多尺度预测技术能够更好地检测不同大小的对象。自适应锚框新版在自适应调整锚框方面做了优化可以更准确地预测对象的位置和大小。更强的特征提取器YOLOV8使用了更先进的特征提取网络有助于从图像中提取出更丰富、更有区分度的特征。 功能与应用 YOLOV8不仅是一个目标检测算法还结合了多算法实现多目标追踪、实例分割和姿态估计功能。它在计算机视觉领域具有广泛的应用前景如智能监控、自动驾驶、人机交互等领域。 创新点 YOLOV8是在Yolo系列历史版本的基础上推出的最新版本引入了新的功能和改进点如新的骨干网络、新的Ancher-Free检测头和一个新的损失函数。它的可扩展性允许它不仅仅用于Yolo系列模型还能支持非Yolo模型以及分类、分割、姿态估计等各类任务。 模型评估 在COCO Val 2017数据集上YOLOV8相比前代模型如YOLOV5在精度上有所提升但模型参数量和FLOPs浮点运算次数也相应增加。然而与YOLOV5相比大部分模型的推理速度可能会变慢。 YOLOV8是一个功能强大、性能优越的实时对象检测算法具有广泛的应用前景和强大的扩展能力。 1.3 图像目标识别概述 图像目标识别是计算机视觉领域中的一个重要任务旨在从给定的图像中自动识别和定位出其中的目标物体。 定义 图像目标识别是利用计算机对图像进行处理、分析和理解以识别各种不同模式的目标和对象的技术。 主要步骤 图像预处理对图像进行平移、旋转和缩放等几何规范使图像识别能够更快速、准确。同时图像滤波用于消除噪声保持图像特征。图像分割是实现机器视觉图像自动识别与分析的关键步骤其分割质量对后续图像的分析具有重要意义。目标检测在图像中定位出目标的位置通常使用边界框来表示目标的位置和大小。目标分类在检测到目标后对其进行分类识别出目标的类别。 技术特点 图像目标识别通过存储的信息记忆中存储的信息与当前的信息当时进入感官的信息进行比较实现对图像的识别。前提是图像描述即使用数字或符号表示图像或景物中各个目标的相关特征甚至目标之间的关系。图像识别技术对图像中个性特征进行提取时可以采用模板匹配模型等方法。 应用领域 图像识别技术已广泛应用于多个领域包括生物医学、卫星遥感、机器人视觉、货物检测、目标跟踪、自主车导航、公安、银行、交通、军事、电子商务和多媒体网络通信等。 技术发展 随着技术的发展出现了基于机器视觉的目标识别、基于深度学习的目标识别等这些方法大大提高了图像识别的准确度和识别效率。 图像目标识别是一个复杂的任务涉及多个步骤和技术方法。通过不断的研究和技术创新图像目标识别的性能正在不断提高为各个领域的应用提供了有力的支持。 2、图像物体识别过程 2.1软件安装及设置 KerasCV 是 Keras 在计算机视觉任务上的扩展。在本文中我们将看到如何使用 KerasCV 训练 YOLOv8 目标检测模型。在进行训练之前将简要介绍软件的安装和设置。 2.1.1 软件安装 !pip install --upgrade githttps://github.com/keras-team/keras-cv -qWARNING: Running pip as the root user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv2.1.2 设置 import os from tqdm.auto import tqdm import xml.etree.ElementTree as ETimport tensorflow as tf from tensorflow import kerasimport keras_cv from keras_cv import bounding_box from keras_cv import visualization2.2 数据预处理 2.2.1 数据加载 本文我们将使用从 roboflow 获取的自动驾驶汽车数据集。为了使数据集更易于管理我已经提取了较大数据集的一个子集该数据集原本包含15,000个数据样本。在此子集中我选择了7,316个样本用于模型训练。 为了简化手头的任务并集中我们的努力我们将使用减少数量的对象类别。具体来说我们将考虑五个主要类别进行检测和分类汽车、行人、交通灯、摩托车手和卡车。这些类别代表了自动驾驶汽车环境中遇到的一些最常见和最重要的对象。 通过将数据集缩小到这些特定类别我们可以集中精力构建一个能够准确识别和分类这些重要对象的强大目标检测模型。 TensorFlow 数据集库提供了一种方便的方式来下载和使用各种数据集包括目标检测数据集。对于想要快速开始使用数据而无需手动下载和预处理的人来说这是一个很好的选择。 程序员可以在这里查看各种目标检测数据集TensorFlow 数据集 然而在本文的代码示例中我们将演示如何从头开始使用 TensorFlow 的 tf.data 管道加载数据集。这种方法提供更多的灵活性并允许程序员根据需要自定义预处理步骤。 使用 tf.data 管道加载在 TensorFlow 数据集库中不可用自定义数据集是使用 tf.data 管道的一个主要优势。这种方法允许程序员创建一个定制的数据预处理管道以满足程序员对数据集的特定需求和要求。 2.2.2 设置超参数 SPLIT_RATIO 0.2 BATCH_SIZE 4 LEARNING_RATE 0.001 EPOCH 5 GLOBAL_CLIPNORM 10.02.2.3 创建数据字典 在图像目标识别任务中建立一个详细的数据字典是一个至关重要的步骤它确保了模型能够准确地将图像中的目标映射到对应的类别。数据字典通常被称为标签字典或类别字典是一个将目标类别名称与唯一标识符相关联的集合。以下是建立和使用数据字典的详细过程 首先需要明确你的数据集中包含哪些目标类别。这些类别通常是根据你的具体应用场景和需求来定义的例如在自动驾驶系统中类别可能包括“汽车”、“行人”、“交通灯”等在动物识别应用中类别可能包括“猫”、“狗”、“鸟”等。 接下来你需要列出所有的目标类别并确保每个类别名称都是唯一的没有拼写错误或混淆的可能性。这一步是为了确保在后续的数据处理和模型训练过程中每个类别都能够被正确地识别和区分。 然后为每个类别分配一个唯一的标识符。这个标识符通常是一个整数或字符串用于在数据处理和模型训练过程中代替类别名称。整数标识符在处理速度和内存使用方面通常更具优势因此在大多数图像目标识别任务中更为常用。你可以按照某种顺序如字母顺序或自定义顺序为类别分配标识符只要确保每个类别都有一个唯一的标识符即可。 现在你可以创建一个数据字典将类别名称作为键将对应的标识符作为值。在创建数据字典时可以使用编程语言如Python中的字典数据结构来实现。这个数据字典将成为你在整个项目过程中处理类别标签的参考依据。 在训练、验证和测试过程中你需要使用数据字典来编码和解码类别标签。编码是指将类别名称转换为对应的标识符以便模型能够处理这些标签。解码是指将模型输出的标识符转换回可读的类别名称以便你能够理解模型的预测结果。在编码和解码过程中你只需要查找数据字典中相应的键值对即可。 需要注意的是在整个项目过程中你需要确保始终使用相同的数据字典。不要更改字典中的映射关系除非你有充分的理由这样做。此外如果你的数据集将来需要添加新的类别你需要确保你的数据字典可以轻松地扩展以包含新的映射关系。一种常见的做法是在数据字典中预留一些额外的标识符以便将来添加新的类别时使用。 通过建立和使用一个详细的数据字典你可以确保在图像目标识别任务中准确地处理类别标签从而提高模型的识别精度和性能。 物体类别映射 class_ids [car,pedestrian,trafficLight,biker,truck, ] class_mapping dict(zip(range(len(class_ids)), class_ids))# 图像和注释的路径 path_images /kaggle/input/dataset/data/images/ path_annot /kaggle/input/dataset/data/annotations/# 获取 path_annot 中所有 XML 文件路径并排序 xml_files sorted([os.path.join(path_annot, file_name)for file_name in os.listdir(path_annot)if file_name.endswith(.xml)] )# 获取 path_images 中所有 JPEG 图像文件路径并排序 jpg_files sorted([os.path.join(path_images, file_name)for file_name in os.listdir(path_images)if file_name.endswith(.jpg)] )下面定义的函数读取 XML 文件找到图像名称和路径然后遍历 XML 文件中的每个对象提取每个对象的边界框坐标和类别标签。 该函数返回三个值图像路径、边界框列表每个边界框表示为四个浮点数的列表xmin, ymin, xmax, ymax以及与每个边界框对应的类别 ID 列表表示为整数。类别 ID 是通过使用名为 class_mapping 的字典将类别标签映射到整数值来获得的。 def parse_annotation(xml_file):tree ET.parse(xml_file)root tree.getroot()image_name root.find(filename).textimage_path os.path.join(path_images, image_name)boxes []classes []for obj in root.iter(object):cls obj.find(name).textclasses.append(cls)bbox obj.find(bndbox)xmin float(bbox.find(xmin).text)ymin float(bbox.find(ymin).text)xmax float(bbox.find(xmax).text)ymax float(bbox.find(ymax).text)boxes.append([xmin, ymin, xmax, ymax])class_ids [list(class_mapping.keys())[list(class_mapping.values()).index(cls)]for cls in classes]return image_path, boxes, class_idsimage_paths [] bbox [] classes [] for xml_file in tqdm(xml_files):image_path, boxes, class_ids parse_annotation(xml_file)image_paths.append(image_path)bbox.append(boxes)classes.append(class_ids)建立张量 这里我们使用 tf.ragged.constant 从 bbox 和 classes 列表创建不规则张量。不规则张量是一种可以处理一个或多个维度上长度不等数据的张量类型。这在处理具有可变长度序列的数据时非常有用例如文本或时间序列数据。 classes [[8, 8, 8, 8, 8], # 5 classes[12, 14, 14, 14], # 4 classes[1], # 1 class[7, 7], # 2 classes... ]bbox [[[199.0, 19.0, 390.0, 401.0],[217.0, 15.0, 270.0, 157.0],[393.0, 18.0, 432.0, 162.0],[1.0, 15.0, 226.0, 276.0],[19.0, 95.0, 458.0, 443.0]], # 第一张图有 4 个对象[[52.0, 117.0, 109.0, 177.0]], # 第二张图有 1 个对象[[88.0, 87.0, 235.0, 322.0],[113.0, 117.0, 218.0, 471.0]], # 第三张图有 2 个对象... ] 在这个例子中bbox 和 classes 列表对每个图像的长度不同这取决于图像中的对象数量以及相应的边界框和类别。为了处理这种可变性我们使用不规则张量而不是常规张量。 稍后这些不规则张量被用来创建一个 tf.data.Dataset使用 from_tensor_slices 方法。该方法通过沿第一维切分输入张量来创建数据集。通过使用不规则张量数据集可以处理每个图像长度不等的数据并为进一步处理提供灵活的输入管道。 bbox tf.ragged.constant(bbox) classes tf.ragged.constant(classes) image_paths tf.ragged.constant(image_paths)data tf.data.Dataset.from_tensor_slices((image_paths, classes, bbox))2.2.4 分割训练和验证数据 在图像目标识别任务中分割训练和验证数据是确保模型性能评估和避免过拟合的关键步骤。 首先你需要明确你的数据集包括图像的总数、每个类别的图像数量以及标签的详细程度。接着大部分数据通常70%到80%被用作训练集用于训练模型学习如何从图像中识别目标。剩余的数据20%到30%则被用作验证集它不参与训练过程但用于在训练过程中评估模型的性能以便调整超参数或提前停止训练。 在分割数据时必须确保训练集和验证集中的类别分布相似这有助于确保模型在验证集上的性能能够反映其在未见过的数据上的性能。同时要特别注意避免数据泄露即确保验证集中的图像在训练过程中是完全不可见的。任何形式的数据泄露都可能导致模型在验证集上表现出过高的性能但在实际应用中表现不佳。 为了提高模型的泛化能力可以考虑对训练集进行数据增强如旋转、缩放、翻转等操作。然而验证集应保持原始状态以便准确评估模型的性能。在多次实验或研究中为了获得更稳定的验证结果可以考虑多次随机分割数据集并计算平均验证性能。 最后务必记录你如何分割数据的信息包括分割的比例、使用的随机数种子等以便其他人能够复现你的结果或进行进一步的研究。 合理分割训练和验证数据是图像目标识别任务中不可或缺的一环它有助于确保模型能够在未见过的数据上展现出良好的性能。 数据分割 # 确定验证样本的数量 num_val int(len(xml_files) * SPLIT_RATIO)# 将数据集分割为训练集和验证集 val_data data.take(num_val) train_data data.skip(num_val)边界框格式化 让我们来谈谈数据加载和边界框格式化以启动事情。KerasCV 中的边界框有一个预定的格式。为此你必须将你的边界框捆绑成一个字典该字典符合下面列出的要求 bounding_boxes {# num_boxes 可能是一个不规则维度boxes: Tensor(shape[batch, num_boxes, 4]),classes: Tensor(shape[batch, num_boxes]) } 字典有两个键boxes 和 classes每个键都映射到一个 TensorFlow 不规则张量或张量对象。boxes 张量的形状为 [batch, num_boxes, 4]其中 batch 是批次中的图像数量num_boxes 是任何图像 中边界框的最大数量。4 表示定义边界框所需的四个值xmin, ymin, xmax, ymax。 classes 张量的形状为 [batch, num_boxes]其中的每个元素代表 boxes 张量中相应边界框的类别标签。num_boxes 维度可能是不规则的这意味着批次中图像的数量可能不同。 最终的字典应该是 {images: images, bounding_boxes: bounding_boxes}def load_image(image_path):image tf.io.read_file(image_path)image tf.image.decode_jpeg(image, channels3)return imagedef load_dataset(image_path, classes, bbox):# 读取图像image load_image(image_path)bounding_boxes {classes: tf.cast(classes, dtypetf.float32),boxes: bbox,}return {images: tf.cast(image, tf.float32), bounding_boxes: bounding_boxes}在这里我们创建一个层将图像调整为 640x640 像素同时保持原始纵横比。与图像相关联的边界框指定为 xyxy 格式。如果需要调整大小的图像将用零填充以保持原始纵横比。 KerasCV 支持的边界框格式 CENTER_XYWHXYWHXYXYREL_XYXYREL_XYWHYXYXREL_YXYX 格式转换方法 此外可以在任何两对格式之间执行格式转换 boxes keras_cv.bounding_box.convert_format(bounding_box,imagesimage,sourcexyxy, # 原始格式targetxywh, # 目标格式我们要转换的格式 )2.2.5 数据增强 构建目标检测管道时最具挑战性的任务之一是数据增强。它涉及对输入图像应用各种转换以增加训练数据的多样性并提高模型的泛化能力。然而当处理目标检测任务时情况变得更加复杂因为这些转换需要了解底层的边界框并相应地更新它们。 KerasCV 提供了对边界框增强的原生支持。KerasCV 提供了一系列专门设计用于处理边界框的数据增强层。这些层在图像转换时智能地调整边界框坐标确保边界框保持准确并与增强图像对齐。 通过利用 KerasCV 的功能开发人员可以方便地将边界框友好的数据增强集成到他们的目标检测管道中。通过在 tf.data 管道中执行即时增强该过程变得无缝高效从而实现更好的训练和更准确的目标检测结果。 augmenter keras.Sequential(layers[keras_cv.layers.RandomFlip(modehorizontal, bounding_box_formatxyxy),keras_cv.layers.RandomShear(x_factor0.2, y_factor0.2, bounding_box_formatxyxy),keras_cv.layers.JitteredResize(target_size(640, 640), scale_factor(0.75, 1.3), bounding_box_formatxyxy),] )2.2.6 创建训练数据集 在图像目标识别任务中对训练数据集进行适当的预处理和增强是至关重要的步骤。以下代码片段展示了如何使用TensorFlow的tf.data API对train_data数据集进行一系列的处理以准备用于模型训练。 首先train_data.map(load_dataset, num_parallel_callstf.data.AUTOTUNE)这行代码将load_dataset函数应用于train_data数据集中的每一个元素该函数通常负责读取图像文件、解码图像数据、进行必要的预处理如归一化、裁剪等以及加载标签等操作。通过num_parallel_callstf.data.AUTOTUNETensorFlow会自动决定并行调用load_dataset函数的最佳数量以优化性能。 接着train_ds.shuffle(BATCH_SIZE * 4)对数据集进行随机打乱以防止模型在训练过程中记住数据的特定顺序从而提高模型的泛化能力。打乱缓冲区的大小设置为BATCH_SIZE * 4这意味着TensorFlow会从数据集中随机选择BATCH_SIZE * 4个元素放入缓冲区并从该缓冲区中随机选择一个元素作为下一个输出。 然后train_ds.ragged_batch(BATCH_SIZE, drop_remainderTrue)将数据集分割成大小为BATCH_SIZE的批次。由于使用ragged_batch这个方法可以处理可能具有不同长度的元素如不同大小的图像。但是由于drop_remainderTrue如果数据集中的元素数量不能被BATCH_SIZE整除那么剩余的元素将被丢弃。 最后train_ds.map(augmenter, num_parallel_callstf.data.AUTOTUNE)这行代码将augmenter函数应用于数据集的每一个批次进行数据增强操作如随机旋转、缩放、翻转等以增加模型的泛化能力。同样num_parallel_callstf.data.AUTOTUNE允许TensorFlow自动决定并行调用augmenter函数的最佳数量。 整个处理流程的目的是生成一个适用于图像目标识别模型训练的、经过预处理和增强的数据集train_ds。 train_ds train_data.map(load_dataset, num_parallel_callstf.data.AUTOTUNE) train_ds train_ds.shuffle(BATCH_SIZE * 4) train_ds train_ds.ragged_batch(BATCH_SIZE, drop_remainderTrue) train_ds train_ds.map(augmenter, num_parallel_callstf.data.AUTOTUNE)2.2.7 创建验证数据集 在图像目标识别任务中对验证数据集val_data进行适当的预处理和增强是评估模型性能的关键步骤。以下代码片段使用keras_cv.layers.JitteredResize层和其他tf.data API方法来处理验证数据集val_data。 首先定义了一个JitteredResize层resizing用于在验证数据集中随机调整图像的大小。该层将图像的目标大小设置为640x640像素并通过scale_factor参数在0.75到1.3的范围内随机缩放图像以此作为数据增强的一种手段。这种随机缩放有助于模型学习对尺度变化的鲁棒性。此外bounding_box_formatxyxy指定了边界框的格式确保在缩放过程中边界框的位置和大小得到正确的调整。 接下来通过val_data.map(load_dataset, num_parallel_callstf.data.AUTOTUNE)load_dataset函数被应用于验证数据集的每个元素。这个函数负责加载图像文件、解码图像数据并进行必要的预处理如解码标签、归一化等。num_parallel_callstf.data.AUTOTUNE允许TensorFlow自动确定并行调用的最佳数量以提高数据加载的效率。 然后val_ds.shuffle(BATCH_SIZE * 4)对验证数据集进行随机打乱。打乱操作有助于防止模型在评估过程中受到数据顺序的影响从而得到更准确的评估结果。打乱缓冲区的大小设置为BATCH_SIZE * 4意味着TensorFlow将从数据集中随机选择BATCH_SIZE * 4个元素进行打乱。 接着val_ds.ragged_batch(BATCH_SIZE, drop_remainderTrue)将打乱后的数据集分割成大小为BATCH_SIZE的批次。由于使用了ragged_batch这个方法可以处理可能具有不同长度的元素尽管在验证集中这种情况可能较少见。drop_remainderTrue确保如果数据集中的元素数量不能被BATCH_SIZE整除则剩余的元素将被丢弃以确保每个批次的大小一致。 最后通过val_ds.map(resizing, num_parallel_callstf.data.AUTOTUNE)resizing层被应用于验证数据集的每个批次。这个步骤将前面定义的随机大小调整操作应用于验证集中的每个图像以实现数据增强。同样num_parallel_callstf.data.AUTOTUNE允许TensorFlow自动确定并行调用的最佳数量以提高处理效率。 整个处理流程的目的是生成一个经过适当预处理和增强的验证数据集val_ds以便在模型训练过程中用于评估模型的性能。 resizing keras_cv.layers.JitteredResize(target_size(640, 640),scale_factor(0.75, 1.3),bounding_box_formatxyxy, )val_ds val_data.map(load_dataset, num_parallel_callstf.data.AUTOTUNE) val_ds val_ds.shuffle(BATCH_SIZE * 4) val_ds val_ds.ragged_batch(BATCH_SIZE, drop_remainderTrue) val_ds val_ds.map(resizing, num_parallel_callstf.data.AUTOTUNE)2.2.8 可视化 以下码定义了一个名为visualize_dataset的函数该函数用于可视化数据集中的图像及其对应的边界框。随后该函数被用于可视化训练数据集train_ds和验证数据集val_ds。 在visualize_dataset函数中首先通过next(iter(inputs.take(1)))从输入的数据集inputs中取出一个批次的数据。这个批次的数据通常是一个字典包含了图像images和对应的边界框bounding_boxes。 接下来函数使用visualization.plot_bounding_box_gallery来绘制一个包含多个图像的网格或称为画廊每个图像上都标出了边界框。value_range参数定义了图像像素值的范围在此例中为0到255对应于标准的8位RGB图像而rows和cols参数定义了网格中的行数和列数。y_true参数是真实的边界框数据用于在图像上绘制边界框。scale和font_scale参数分别用于控制图像大小和字体大小。bounding_box_format参数定义了边界框的格式在这里使用xyxy格式表示边界框由左上角的(x, y)坐标和右下角的(x, y)坐标定义。class_mapping参数用于将类别索引映射到实际的类别名称但在这个函数定义中并未给出class_mapping的具体内容或传递方式我们假设它在使用该函数之前已经被定义或作为全局变量存在。 在函数定义之后visualize_dataset函数被两次调用分别用于可视化train_ds和val_ds数据集。在这两个调用中除了数据集本身外其他参数都相同边界框格式设置为xyxy像素值范围设置为0到255网格的行数和列数都设置为2。这意味着每个网格将包含2x24个图像。 代码的目的是为了直观地展示训练数据集和验证数据集中的图像及其对应的边界框以便于开发者检查数据的质量和预处理效果。 def visualize_dataset(inputs, value_range, rows, cols, bounding_box_format):inputs next(iter(inputs.take(1)))images, bounding_boxes inputs[images], inputs[bounding_boxes]visualization.plot_bounding_box_gallery(images,value_rangevalue_range,rowsrows,colscols,y_truebounding_boxes,scale5,font_scale0.7,bounding_box_formatbounding_box_format,class_mappingclass_mapping,)visualize_dataset(train_ds, bounding_box_formatxyxy, value_range(0, 255), rows2, cols2 )visualize_dataset(val_ds, bounding_box_formatxyxy, value_range(0, 255), rows2, cols2 )然后通过使用map和prefetch函数对训练数据集train_ds和验证数据集val_ds进行了优化处理。首先通过map函数将数据集中的每个字典项转换为元组形式简化了数据格式并提高了模型访问数据的效率。然后使用prefetch函数在后台异步地加载数据以便在模型需要新的数据批次时能够立即提供从而减少了数据加载的时间提高了整体的训练性能。在这个过程中tf.data.AUTOTUNE被用于自动选择最佳的预取缓冲区大小以在可用资源之间达到最佳平衡。 def dict_to_tuple(inputs):return inputs[images], inputs[bounding_boxes]train_ds train_ds.map(dict_to_tuple, num_parallel_callstf.data.AUTOTUNE) train_ds train_ds.prefetch(tf.data.AUTOTUNE)val_ds val_ds.map(dict_to_tuple, num_parallel_callstf.data.AUTOTUNE) val_ds val_ds.prefetch(tf.data.AUTOTUNE)2.3 创建模型 YOLOv8 是一种用于各种计算机视觉任务的最新 YOLO 模型如目标检测、图像分类和实例分割。UltraalyticsYOLOv5 的创建者也开发了 YOLOv8它在架构和开发者体验方面相比前身进行了多项改进和变更。YOLOv8 是业界高度评价的最新技术模型。 下面的表格比较了五种不同大小以像素为单位的 YOLOv8 模型的性能指标YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l 和 YOLOv8x。指标包括不同交并比IoU阈值下验证数据的平均精度均值mAP值、CPU 上 ONNX 格式的推理速度和 A100 TensorRT 的速度、参数数量和浮点运算次数FLOPs分别为百万和十亿。 模型大小 (像素)mAPval 50-95速度 CPU ONNX (ms)速度 A100 TensorRT (ms)参数 (M)FLOPs (B)YOLOv8n64037.380.40.993.28.7YOLOv8s64044.9128.41.2011.228.6YOLOv8m64050.2234.71.8325.978.9YOLOv8l64052.9375.22.3943.7165.2YOLOv8x64053.9479.13.5368.2257.8 2.3.1 创建backbone 实例 在图像目标识别任务中当使用KerasCV这样的框架时为YOLOV8选择一个合适的backbone并加载COCO预训练权重是构建高效模型的关键步骤。首先你需要从KerasCV中选择一个经过预训练的backbone这个backbone通常基于深度卷积神经网络CNN如ResNet、EfficientNet等并已经针对图像分类或目标检测任务进行了优化。其次确保这个backbone提供了COCO数据集的预训练权重因为这将有助于加速训练过程并提高模型的性能。 在选定backbone后你可以使用KerasCV提供的工具或API来加载这个backbone以及对应的COCO预训练权重。这个步骤将确保backbone中的权重已经被正确地初始化为经过大量数据训练得到的值从而提高了模型在目标识别任务上的泛化能力。 一旦backbone被加载并初始化你可以将其整合到YOLOV8模型中。YOLOV8是一个流行的目标检测算法它依赖于backbone来提取图像中的特征。将backbone整合到YOLOV8模型中时需要确保backbone的输出与YOLOV8的输入要求相匹配以便能够正确地处理这些特征并输出目标边界框和类别。 最后你可以使用整合了backbone的YOLOV8模型进行训练和评估。通过调整模型的参数和配置你可以进一步优化模型的性能以满足特定应用场景的需求。在整个过程中保持对backbone和YOLOV8模型的理解和熟悉将是非常重要的这将有助于你更好地利用这些工具来解决图像目标识别任务。KerasCV 中可用的 YOLOV8 Backbones 无权重 1. yolo_v8_xs_backbone 2. yolo_v8_s_backbone 3. yolo_v8_m_backbone 4. yolo_v8_l_backbone 5. yolo_v8_xl_backbone带有预训练 coco 权重 backbone keras_cv.models.YOLOV8Backbone.from_preset(yolo_v8_s_backbone_coco # 我们将使用带有 coco 权重的 yolov8 小型 backbone )Downloading data from https://storage.googleapis.com/keras-cv/models/yolov8/coco/yolov8_s_backbone.h5 20596968/20596968 [] - 0s 0us/step2.3.2 构建YOLOV8 模型 接下来让我们使用 YOLOV8Detector 构建一个 YOLOV8 模型它接受一个特征提取器作为 backbone 参数一个 num_classes 参数该参数根据 class_mapping 列表的大小指定要检测的目标类别数量一个 bounding_box_format 参数该参数告知模型数据集中边界框的格式最后特征金字塔网络FPN深度由 fpn_depth 参数指定。 在 KerasCV中使用上述任何一个 backbone 构建 YOLOV8 都非常简单。 yolo keras_cv.models.YOLOV8Detector(num_classeslen(class_mapping),bounding_box_formatxyxy,backbonebackbone,fpn_depth1, )2.4 编译模型 2.4.1YOLOV8 使用的损失函数 分类损失此损失函数计算预期类别概率和实际类别概率之间的差异。在这种情况下使用了 binary_crossentropy这是解决二元分类问题的著名解决方案。我们使用二元交叉熵因为每个被识别的对象要么被归类为某个特定类别如人、汽车等要么不是。 边界框损失box_loss 是用来衡量预测边界框和真实边界框之间差异的损失函数。在这种情况下使用了完整的 IoUCIoU指标它不仅衡量预测和真实边界框之间的重叠还考虑了纵横比、中心距离和框大小的差异。这些损失函数共同帮助优化模型的目标检测通过最小化预测和真实类别概率以及边界框之间的差异。 在以下的Python代码中配置一个用于训练YOLOv8模型的优化器并编译模型以使用特定的损失函数。 优化器配置 tf.keras.optimizers.Adam(...)这里您正在创建一个Adam优化器的实例它通常用于深度学习中参数的优化。 learning_rateLEARNING_RATE学习率决定了参数更新的步长。LEARNING_RATE应该是一个预先定义的变量表示您想要设置的学习率值。global_clipnormGLOBAL_CLIPNORM这是梯度裁剪的一个参数。它用于确保梯度的L2范数不会超过指定的阈值从而避免梯度爆炸的问题。GLOBAL_CLIPNORM应该是一个预先定义的变量表示您想要设置的梯度裁剪阈值。 模型编译 yolo.compile(...)这是Keras模型的一个方法用于配置训练过程。在编译时您需要指定损失函数和优化器以及其他可选的参数如指标。 optimizeroptimizer这里您传递了之前创建的Adam优化器实例。classification_lossbinary_crossentropy对于分类任务您使用了二元交叉熵损失binary crossentropy。这是因为YOLOv8为每个类别都使用了一个独立的sigmoid分类器因此每个类别的预测都可以被视为一个二分类问题。box_lossciou对于边界框的回归您选择了CIOUComplete Intersection over Union损失。CIOU是IOU的一个扩展它增加了宽度、高度比的损失以及预测框和目标框中心点距离的惩罚项从而提高了边界框回归的精度。 optimizer tf.keras.optimizers.Adam(learning_rateLEARNING_RATE,global_clipnormGLOBAL_CLIPNORM, )yolo.compile(optimizeroptimizer, classification_lossbinary_crossentropy, box_lossciou )2.4.2 COCO 指标回调 我们将使用 KerasCV 中的 BoxCOCOMetrics 来评估模型并计算平均精度均值Map得分、召回率和精确度。当 mAP 分数提高时我们还会保存我们的模型。 示例代码定义了一个名为 EvaluateCOCOMetricsCallback 的类它继承自 Keras 的 Callback 类用于在 Keras 模型训练过程中评估模型在 COCO 数据集上的指标并在 mAPmean Average Precision提高时保存模型。以下是对代码的详细解读 导入依赖 虽然代码中没有直接显示导入的依赖但我们可以假设已经导入了 keras 和 keras_cv.metrics.BoxCOCOMetrics。其中keras 是深度学习库 Keras而 keras_cv.metrics.BoxCOCOMetrics 可能是一个第三方库或自定义库用于计算 COCO 数据集上的目标检测指标。 类定义 EvaluateCOCOMetricsCallback(keras.callbacks.Callback)定义了一个继承自 Keras Callback 的类用于在模型训练过程中执行特定的操作。 初始化方法 __init__(self, data, save_path)初始化方法接受两个参数data 和 save_path。其中data 是用于评估的数据集而 save_path 是保存最佳模型的路径。self.metrics keras_cv.metrics.BoxCOCOMetrics(...)创建一个 BoxCOCOMetrics 对象用于计算 COCO 数据集上的指标。这里设置 bounding_box_format 为 “xyxy”表示边界框的格式是 (x1, y1, x2, y2)其中 (x1, y1) 是左上角坐标(x2, y2) 是右下角坐标。evaluate_freq1e9 表示每次更新都会计算指标但通常这个参数应该设置为一个较小的值如 1表示每个批次都计算指标但在这种情况下由于我们在 on_epoch_end 中手动处理所以这个值设置为 1e9 是合适的。self.best_map -1.0初始化最佳 mAP 值为 -1.0用于后续比较。 on_epoch_end 方法 这个方法在每个训练周期结束时被调用。self.metrics.reset_state()重置指标的状态为新的评估周期做准备。遍历 self.data 中的每个批次使用模型进行预测并使用 self.metrics.update_state(y_true, y_pred) 更新指标的状态。metrics self.metrics.result(forceTrue)计算并获取最终的指标结果。forceTrue 表示强制计算结果即使没有达到 evaluate_freq 指定的更新频率。logs.update(metrics)将计算得到的指标结果更新到 Keras 的日志中这样可以在训练过程中跟踪这些指标。检查当前的 mAP 值是否比之前保存的最佳 mAP 值高如果是则保存模型并更新最佳 mAP 值。 class EvaluateCOCOMetricsCallback(keras.callbacks.Callback):def __init__(self, data, save_path):super().__init__()self.data dataself.metrics keras_cv.metrics.BoxCOCOMetrics(bounding_box_formatxyxy,evaluate_freq1e9,)self.save_path save_pathself.best_map -1.0def on_epoch_end(self, epoch, logs):self.metrics.reset_state()for batch in self.data:images, y_true batch[0], batch[1]y_pred self.model.predict(images, verbose0)self.metrics.update_state(y_true, y_pred)metrics self.metrics.result(forceTrue)logs.update(metrics)current_map metrics[MaP]if current_map self.best_map:self.best_map current_mapself.model.save(self.save_path) # 当 mAP 提高时保存模型return logs2.5 训练模型 示例代码使用YOLO的fit方法来训练模型。 yolo.fit(train_ds,validation_dataval_ds,epochs3,callbacks[EvaluateCOCOMetricsCallback(val_ds, model.h5)], )yolo.fit(...): 这表明你正在调用一个名为yolo的对象的fit方法。这个对象很可能是一个深度学习模型如Keras的Model类或其子类。 train_ds: 这是fit方法的第一个参数代表训练数据集。train_ds很可能是一个数据加载器或数据生成器它为模型提供训练时所需的输入数据和对应的标签。 validation_dataval_ds: 这是一个关键字参数用于指定验证数据集。在训练过程中模型会使用val_ds来评估其在验证集上的性能但不会基于验证集的数据来更新权重。这有助于监控模型是否出现过拟合。 epochs3: 这指定了训练的轮数或迭代次数。在这里模型将遍历整个train_ds数据集3次。 callbacks[EvaluateCOCOMetricsCallback(val_ds, model.h5)]: callbacks是一个列表其中可以包含多个回调函数。这些回调函数在训练的不同阶段如每个epoch结束后被调用以执行某些操作如保存模型、记录日志等。在这里你定义了一个名为EvaluateCOCOMetricsCallback的回调函数并将其实例化传递了val_ds验证数据集和model.h5可能是模型权重文件的保存路径作为参数。我们可以猜测EvaluateCOCOMetricsCallback可能是一个自定义的回调函数用于在每个epoch结束后评估模型在COCO数据集上的某些指标如mAP即平均精度均值。这些指标是目标检测任务中常用的性能度量标准。 2.6 可视化预测结果 当使用深度学习模型如YOLO进行目标检测时我们通常希望可视化模型的预测结果以评估其性能。以下是一个步骤说明描述了如何执行这一过程 首先我们定义一个名为visualize_detections的函数该函数接受三个参数model训练好的模型dataset用于获取输入图像的数据集以及bounding_box_format边界框的格式如xyxy。 在函数内部我们使用next(iter(dataset.take(1)))从数据集中获取一个批次的图像和对应的真实标签。然后我们利用model.predict(images)对图像进行预测得到预测的边界框信息。 接下来我们可能需要将预测的边界框信息转换为一种可视化工具所需的格式。但请注意这一步的具体实现取决于你使用的可视化库或方法。假设这里存在一个bounding_box模块它有一个to_ragged方法可以将预测结果转换为所需的格式尽管在标准的深度学习库中并没有直接这样的方法。 一旦我们有了可视化所需的图像、真实标签和预测边界框我们就可以调用一个可视化函数如visualization.plot_bounding_box_gallery来绘制包含真实边界框和预测边界框的图像。这个函数通常接受一系列参数如图像、真实标签、预测标签、边界框格式等并生成一个可视化结果。 最后我们调用visualize_detections函数传入已训练的YOLO模型、验证数据集以及边界框格式“xyxy”。这将触发上述过程生成一个可视化结果显示模型在验证数据集上的预测效果。 def visualize_detections(model, dataset, bounding_box_format):images, y_true next(iter(dataset.take(1)))y_pred model.predict(images)y_pred bounding_box.to_ragged(y_pred)visualization.plot_bounding_box_gallery(images,value_range(0, 255),bounding_box_formatbounding_box_format,y_truey_true,y_predy_pred,scale4,rows2,cols2,showTrue,font_scale0.7,class_mappingclass_mapping,)visualize_detections(yolo, datasetval_ds, bounding_box_formatxyxy)3、总结 本文介绍了如何使用 KerasCV 库来训练 YOLOv8 目标检测模型。KerasCV 是 Keras 的扩展专为计算机视觉任务设计提供了预训练模型、可视化工具以及对迁移学习的支持。 环境设置与数据准备 首先安装了 KerasCV 库并导入了必要的 TensorFlow 和 KerasCV 模块。接着定义了超参数包括数据集分割比例、批量大小、学习率、训练周期数和全局剪切范数。为了处理 PASCAL VOC 数据集编写了解析 XML 注释文件的函数用于提取图像路径、边界框和类别 ID。 数据处理 利用 TensorFlow 的 tf.data API 加载和处理数据创建了不规则张量来处理边界框和类别标签的不同长度并划分了训练集和验证集。 数据增强 介绍了数据增强的重要性并展示了 KerasCV 提供的数据增强层这些层能够智能调整边界框坐标以适应图像变换。 模型构建 详细描述了 YOLOv8 模型的不同变体YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l 和 YOLOv8x的性能指标包括平均精度均值mAP、推理速度、参数数量和浮点运算次数。然后使用 KerasCV 的 YOLOV8Detector 类构建了 YOLOv8 模型指定了类别数量、边界框格式、backbone 和 FPN 深度。 模型编译与训练 讨论了用于 YOLOv8 的损失函数包括分类损失和边界框损失并编译了模型。使用自定义的回调函数 EvaluateCOCOMetricsCallback 训练模型并在每个周期结束时评估 mAP 分数还在 mAP 提高时保存模型。 结果可视化 提供了可视化训练和验证数据集的函数以及可视化模型预测结果的函数这有助于理解模型性能和进行故障排除。 通过本教程读者可以了解到如何从头开始使用 KerasCV 训练定制的 YOLOv8 目标检测模型包括数据准备、增强、模型构建、编译、训练和结果可视化的完整流程。
文章转载自:
http://www.morning.lhzqn.cn.gov.cn.lhzqn.cn
http://www.morning.lcqrf.cn.gov.cn.lcqrf.cn
http://www.morning.fmry.cn.gov.cn.fmry.cn
http://www.morning.ghpld.cn.gov.cn.ghpld.cn
http://www.morning.rpzth.cn.gov.cn.rpzth.cn
http://www.morning.nrgdc.cn.gov.cn.nrgdc.cn
http://www.morning.pndhh.cn.gov.cn.pndhh.cn
http://www.morning.thrcj.cn.gov.cn.thrcj.cn
http://www.morning.nbwyk.cn.gov.cn.nbwyk.cn
http://www.morning.sbczr.cn.gov.cn.sbczr.cn
http://www.morning.dgckn.cn.gov.cn.dgckn.cn
http://www.morning.cnkrd.cn.gov.cn.cnkrd.cn
http://www.morning.byrlg.cn.gov.cn.byrlg.cn
http://www.morning.pqryw.cn.gov.cn.pqryw.cn
http://www.morning.wtdhm.cn.gov.cn.wtdhm.cn
http://www.morning.tgwfn.cn.gov.cn.tgwfn.cn
http://www.morning.dmwjl.cn.gov.cn.dmwjl.cn
http://www.morning.jpwmk.cn.gov.cn.jpwmk.cn
http://www.morning.mfqmk.cn.gov.cn.mfqmk.cn
http://www.morning.rgfx.cn.gov.cn.rgfx.cn
http://www.morning.mbbgk.com.gov.cn.mbbgk.com
http://www.morning.fstdf.cn.gov.cn.fstdf.cn
http://www.morning.ljdhj.cn.gov.cn.ljdhj.cn
http://www.morning.rfdqr.cn.gov.cn.rfdqr.cn
http://www.morning.hsdhr.cn.gov.cn.hsdhr.cn
http://www.morning.clybn.cn.gov.cn.clybn.cn
http://www.morning.ndfwh.cn.gov.cn.ndfwh.cn
http://www.morning.bfhrj.cn.gov.cn.bfhrj.cn
http://www.morning.rdbj.cn.gov.cn.rdbj.cn
http://www.morning.xlbtz.cn.gov.cn.xlbtz.cn
http://www.morning.wsjnr.cn.gov.cn.wsjnr.cn
http://www.morning.tzcr.cn.gov.cn.tzcr.cn
http://www.morning.ghfmd.cn.gov.cn.ghfmd.cn
http://www.morning.zdtfr.cn.gov.cn.zdtfr.cn
http://www.morning.kjsft.cn.gov.cn.kjsft.cn
http://www.morning.kttbx.cn.gov.cn.kttbx.cn
http://www.morning.hqbnx.cn.gov.cn.hqbnx.cn
http://www.morning.ryjl.cn.gov.cn.ryjl.cn
http://www.morning.sjwzz.cn.gov.cn.sjwzz.cn
http://www.morning.npcxk.cn.gov.cn.npcxk.cn
http://www.morning.qwrb.cn.gov.cn.qwrb.cn
http://www.morning.klpwl.cn.gov.cn.klpwl.cn
http://www.morning.qdxwf.cn.gov.cn.qdxwf.cn
http://www.morning.yfstt.cn.gov.cn.yfstt.cn
http://www.morning.gwwky.cn.gov.cn.gwwky.cn
http://www.morning.nlkjq.cn.gov.cn.nlkjq.cn
http://www.morning.jzfrl.cn.gov.cn.jzfrl.cn
http://www.morning.tgydf.cn.gov.cn.tgydf.cn
http://www.morning.fxxmj.cn.gov.cn.fxxmj.cn
http://www.morning.mrgby.cn.gov.cn.mrgby.cn
http://www.morning.xhlpn.cn.gov.cn.xhlpn.cn
http://www.morning.mwzt.cn.gov.cn.mwzt.cn
http://www.morning.prmyx.cn.gov.cn.prmyx.cn
http://www.morning.fglyb.cn.gov.cn.fglyb.cn
http://www.morning.qzpsk.cn.gov.cn.qzpsk.cn
http://www.morning.cbqqz.cn.gov.cn.cbqqz.cn
http://www.morning.mxdiy.com.gov.cn.mxdiy.com
http://www.morning.dxgt.cn.gov.cn.dxgt.cn
http://www.morning.mhnrx.cn.gov.cn.mhnrx.cn
http://www.morning.ltspm.cn.gov.cn.ltspm.cn
http://www.morning.lwqst.cn.gov.cn.lwqst.cn
http://www.morning.rtzd.cn.gov.cn.rtzd.cn
http://www.morning.rlhh.cn.gov.cn.rlhh.cn
http://www.morning.grzpc.cn.gov.cn.grzpc.cn
http://www.morning.plcyq.cn.gov.cn.plcyq.cn
http://www.morning.hxxzp.cn.gov.cn.hxxzp.cn
http://www.morning.qxbsq.cn.gov.cn.qxbsq.cn
http://www.morning.knjj.cn.gov.cn.knjj.cn
http://www.morning.mlbn.cn.gov.cn.mlbn.cn
http://www.morning.ghslr.cn.gov.cn.ghslr.cn
http://www.morning.qjsxf.cn.gov.cn.qjsxf.cn
http://www.morning.mfbcs.cn.gov.cn.mfbcs.cn
http://www.morning.xgchm.cn.gov.cn.xgchm.cn
http://www.morning.jzdfc.cn.gov.cn.jzdfc.cn
http://www.morning.dmtld.cn.gov.cn.dmtld.cn
http://www.morning.kjxgc.cn.gov.cn.kjxgc.cn
http://www.morning.mlhfr.cn.gov.cn.mlhfr.cn
http://www.morning.cfybl.cn.gov.cn.cfybl.cn
http://www.morning.yaqi6.com.gov.cn.yaqi6.com
http://www.morning.phxns.cn.gov.cn.phxns.cn
http://www.tj-hxxt.cn/news/251299.html

相关文章:

  • 网站app定制聚名网合法吗
  • 沈阳网站建设开发维护传统网站网站
  • 网站怎么群发某些网站网速慢
  • 宏升温岭网站建设简述企业网站的基本功能
  • 装饰设计公司网站简述网站建设的一般流程
  • 酒店网站建设项目pc网站做app京东
  • 建立网站目录的时候海外推广渠道
  • 深圳网站建设官网怎么查网站关键词密度
  • 重庆网站建设有佳网络上海闵行建网站公司
  • 公司网站设计需要什么wordpress有名的网站
  • 深圳网站制作联系兴田德润dz建站与wordpress
  • 做付费动漫网站网站变慢的原因
  • 建设部网站企业资质公司网站开发的流程
  • 龙华新区网站制作美食网站策划书范文
  • 网站首页设计方案福建建设建设厅官方网站
  • python 做网站相关的库一般做网站什么价格
  • 免费找客户网站外汇自动跟单网站开发
  • 绵阳建设网seo优化是啥
  • 网站建设的一些名词网站内容栏由什么构成
  • 网站建设低价网站到底便宜在哪越烽建设集团有限公司网站
  • 社交网站 备案做网站怎么切psd图
  • 单仁资讯做网站怎样百度软件优化排名
  • 建筑公司网站作用汕头网站模板
  • 网站seo顾问学做美食饮品网站
  • 网站空间是虚拟机吗建网站需要买什么
  • 长沙建设教育培训网西安seo优化培训
  • 佛山个人网站建设4399老版网页
  • 东莞服务公司网站建设wordpress 文章位置
  • 深圳网站建设 设计首选公司上传wordpress后
  • 做h5的网站页面wordpress底部添加菜单