网站解析不过来济南行业网站开发
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:38
当前位置: 首页 > news >正文
网站解析不过来,济南行业网站开发,网站改版建议,安装wordpress模板《使用 YOLOV8 和 KerasCV 进行高效目标检测》 作者#xff1a;Gitesh Chawda创建日期#xff1a;2023/06/26最后修改时间#xff1a;2023/06/26描述#xff1a;使用 KerasCV 训练自定义 YOLOV8 对象检测模型。 #xff08;i#xff09; 此示例使用 Keras 2 在 Colab 中…《使用 YOLOV8 和 KerasCV 进行高效目标检测》 作者Gitesh Chawda创建日期2023/06/26最后修改时间2023/06/26描述使用 KerasCV 训练自定义 YOLOV8 对象检测模型。 i 此示例使用 Keras 2 在 Colab 中查看 • GitHub 源 介绍 KerasCV 是 Keras 的扩展用于计算机视觉任务。在此示例中我们将看到 如何使用 KerasCV 训练 YOLOV8 对象检测模型。 KerasCV 包括适用于常用计算机视觉数据集的预训练模型例如 ImageNet、COCO 和 Pascal VOC可用于迁移学习。KerasCV 还 提供了一系列用于检查中间表示的可视化工具 由模型学习用于可视化对象检测和分割的结果 任务。 如果您有兴趣了解使用 KerasCV 进行对象检测我强烈建议您 看看 Lukewood 创建的指南。此资源可在使用 KerasCV 进行对象检测中获得。 全面概述了基本概念和技术 使用 KerasCV 构建对象检测模型时需要。 !pip install –upgrade githttps://github.com/keras-team/keras-cv -q[33mWARNING: 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/venv[0m[33m [0m 设置 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 visualization/opt/conda/lib/python3.10/site-packages/tensorflow_io/python/ops/init.py:98: UserWarning: unable to load libtensorflow_io_plugins.so: unable to open file: libtensorflow_io_plugins.so, from paths: [/opt/conda/lib/python3.10/site-packages/tensorflow_io/python/ops/libtensorflow_io_plugins.so] caused by: [/opt/conda/lib/python3.10/site-packages/tensorflow_io/python/ops/libtensorflow_io_plugins.so: undefined symbol: _ZN3tsl6StatusC1EN10tensorflow5error4CodeESt17basic_string_viewIcSt11char_traitsIcEENS_14SourceLocationE] warnings.warn(funable to load libtensorflow_io_plugins.so: {e}) /opt/conda/lib/python3.10/site-packages/tensorflow_io/python/ops/init.py:104: UserWarning: file system plugins are not loaded: unable to open file: libtensorflow_io.so, from paths: [/opt/conda/lib/python3.10/site-packages/tensorflow_io/python/ops/libtensorflow_io.so] caused by: [/opt/conda/lib/python3.10/site-packages/tensorflow_io/python/ops/libtensorflow_io.so: undefined symbol: _ZTVN10tensorflow13GcsFileSystemE] warnings.warn(ffile system plugins are not loaded: {e}) 加载数据 在本指南中我们将使用从 roboflow 获取的自动驾驶汽车数据集。为了 使数据集更易于管理我提取了较大数据集的子集该子集 最初由 15,000 个数据样本组成。从这个子集中我选择了 7,316 个 模型训练示例。 为了简化手头的任务并集中精力我们将与减少的 对象类的数量。具体来说我们将考虑 5 个主要类别 检测和分类汽车、行人、红绿灯、骑自行车的人和卡车。这些 类表示 自动驾驶汽车的背景。 通过将数据集缩小到这些特定类我们可以专注于构建 强大的对象检测模型可以准确识别和分类这些重要 对象。 TensorFlow Datasets 库提供了一种下载和使用各种 数据集包括对象检测数据集。对于那些人来说这可能是一个不错的选择 想要快速开始处理数据而无需手动下载和 预处理它。 您可以在此处查看各种对象检测数据集 TensorFlow 数据集 但是在此代码示例中我们将演示如何从头开始加载数据集 使用 TensorFlow 的 tf.data 流水线。这种方法提供了更大的灵活性并允许 您可以根据需要自定义预处理步骤。 加载 TensorFlow 数据集库中不可用的自定义数据集就是其中之一 使用 tf.data 管道的主要优势。此方法允许您 创建针对特定需求量身定制的自定义数据预处理管道以及 要求。 超参数 SPLIT_RATIO 0.2 BATCH_SIZE 4 LEARNING_RATE 0.001 EPOCH 5 GLOBAL_CLIPNORM 10.0创建一个字典以将每个类名映射到唯一的数字标识符。这 mapping 用于在训练和推理期间对类标签进行编码和解码 对象检测任务。 class_ids [car,pedestrian,trafficLight,biker,truck, ] class_mapping dict(zip(range(len(class_ids)), class_ids))# Path to images and annotations path_images /kaggle/input/dataset/data/images/ path_annot /kaggle/input/dataset/data/annotations/# Get all XML file paths in path_annot and sort them xml_files sorted([os.path.join(path_annot, file_name)for file_name in os.listdir(path_annot)if file_name.endswith(.xml)] )# Get all JPEG image file paths in path_images and sort them 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 文件中的每个对象以提取边界框坐标并且 class 标签。 该函数返回三个值图像路径、边界框列表每个 表示为四个浮点数的列表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)0%| | 0/7316 [00:00?, ?it/s] 在这里我们使用 tf.ragged.constant 从 和 列表创建不规则张量。参差不齐的张量是一种可以处理不同长度的 数据。这在处理具有 可变长度序列例如文本或时间序列数据。bboxclasses 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]], #image 1 has 4 objects[[52.0, 117.0, 109.0, 177.0]], #image 2 has 1 object[[88.0, 87.0, 235.0, 322.0],[113.0, 117.0, 218.0, 471.0]], #image 3 has 2 objects…]在这种情况下每个图像的 and 列表具有不同的长度 取决于图像中的对象数量和相应的边界框以及 类。为了处理这种可变性使用参差不齐的张量而不是常规张量。bboxclasses 稍后这些参差不齐的张量用于使用该方法创建 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))在训练和验证数据中拆分数据 # Determine the number of validation samples num_val int(len(xml_files) * SPLIT_RATIO)# Split the dataset into train and validation sets val_data data.take(num_val) train_data data.skip(num_val)让我们看看数据加载和边界框格式化以使事情顺利进行。边界 KerasCV 中的框具有预先确定的格式。为此您必须捆绑边界 框添加到符合下列要求的词典中 bounding_boxes {# num_boxes may be a Ragged dimensionboxes: Tensor(shape[batch, num_boxes, 4]),classes: Tensor(shape[batch, num_boxes]) }字典有两个键 和 每个键都映射到 TensorFlow RaggedTensor 或 Tensor 对象。Tensor 的形状为 其中 batch 是 batch 中的图像数num_boxes 是 任何图像中的最大边界框数。4 表示 定义边界框xmin、ymin、xmax、ymax。boxesclassesboxes[batch, num_boxes, 4] Tensor 的形状为 其中每个元素表示 Tensor 中相应边界框的类标签。num_boxes 尺寸可能参差不齐这意味着 批次。classes[batch, num_boxes]boxes 最终 dict 应该是 {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):# Read Imageimage 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 支持的边界框格式 1. CENTER_XYWH 2. XYWH 3. XYXY 4. REL_XYXY 5. REL_XYWH 6. YXYX 7. REL_YXYX 你可以在 docs 中关于 KerasCV 边界框格式的信息。 此外还可以在任意两对之间执行格式转换 boxes keras_cv.bounding_box.convert_format(bounding_box,imagesimage,sourcexyxy, # Original Formattargetxywh, # Target Format (to which we want to convert))数据增强 构建对象检测管道时最具挑战性的任务之一是数据 增大。它涉及对输入图像应用各种转换以 增加训练数据的多样性提高模型的能力 概括。但是在处理对象检测任务时它变得更加 复杂因为这些转换需要了解底层边界框和 相应地更新它们。 KerasCV 为边界框增强提供原生支持。KerasCV 提供了一个 大量专为处理边界而设计的数据增强层 盒。这些图层会根据图像的原样智能地调整边界框坐标 transformed确保边界框保持准确并与 增强图像。 通过利用 KerasCV 的功能开发人员可以方便地集成边界 将 Box 友好的数据增强到他们的对象检测管道中。通过执行 在 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),] )创建训练数据集 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)创建验证数据集 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)可视化 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 )我们需要从 preprocessing 字典中提取输入并准备好它们 馈送到模型中。 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)创建模型 YOLOv8 是一款尖端的 YOLO 模型用于各种计算机视觉任务 例如对象检测、图像分类和实例分割。Ultralytics YOLOv5 的创建者还开发了 YOLOv8其中包含许多改进和 与前代产品相比架构和开发人员体验发生了变化。YOLOv8 是 在业内受到高度评价的最新最新型号。 下表比较了 5 种不同 YOLOv8 模型的性能指标与 不同大小以像素为单位YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l 和 YOLOv8x。 这些指标包括不同 验证数据的交并比 IoU 阈值CPU 上的推理速度 ONNX 格式和 A100 TensorRT 、参数数量和浮点数 操作 FLOP分别以百万和数十亿为单位。由于 model 增加时mAP、参数和 FLOPs 通常增加而速度 减少。YOLOv8x 的 mAP、参数和 FLOP 最高但也是最慢的 推理速度而 YOLOv8n 具有最小的尺寸、最快的推理速度和最低的推理速度 mAP、参数和 FLOPs。 您可以在此 RoboFlow 博客中阅读有关 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 # We will use yolov8 small backbone with coco weights )1. yolo_v8_xs_backbone_coco 2. yolo_v8_s_backbone_coco 2. yolo_v8_m_backbone_coco 2. yolo_v8_l_backbone_coco 2. yolo_v8_xl_backbone_coco Downloading data from https://storage.googleapis.com/keras-cv/models/yolov8/coco/yolov8_s_backbone.h5 20596968⁄20596968 [] - 0s 0us/step 接下来让我们使用 构建一个 YOLOV8 模型它接受一个特征 extractor 作为参数则指定数字 of 对象类来根据列表的大小进行检测该参数通知模型 数据集最后特征金字塔网络 FPN 深度由参数指定。YOLOV8Detectorbackbonenum_classesclass_mappingbounding_box_formatfpn_depth 使用上述任何 backbone 构建 YOLOV8 都很简单这要归功于 KerasCV 的 yolo keras_cv.models.YOLOV8Detector(num_classeslen(class_mapping),bounding_box_formatxyxy,backbonebackbone,fpn_depth1, )编译模型 用于 YOLOV8 的损失 分类损失此损失函数计算预期 类概率和实际类概率。在这种情况下二进制分类问题的一个突出解决方案是 利用。我们利用了二进制交叉熵因为每个被识别的事物都是 被归类为属于或不属于某个对象类例如一个人、一个 汽车等。binary_crossentropy Box Loss是用于衡量 预测边界框和地面实况。在这种情况下完整 IoU CIoU 指标它不仅衡量预测值和真实值之间的重叠 边界框但还要考虑纵横比、中心距和 盒子大小。这些损失函数共同帮助优化对象检测模型方法是 最小化 Predicted 和 Ground Truth 类概率之间的差异以及 边界框。box_loss optimizer tf.keras.optimizers.Adam(learning_rateLEARNING_RATE,global_clipnormGLOBAL_CLIPNORM, )yolo.compile(optimizeroptimizer, classification_lossbinary_crossentropy, box_lossciou )COCO 指标回调 我们将使用 KerasCV 来评估模型并计算 MapMean Average Precision 分数、Recall 和 Precision。我们还会在 mAP 评分提高。BoxCOCOMetrics 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) # Save the model when mAP improvesreturn logs训练模型 yolo.fit(train_ds,validation_dataval_ds,epochs3,callbacks[EvaluateCOCOMetricsCallback(val_ds, model.h5)], )Epoch 1⁄3 1463⁄1463 [] - 633s 390ms/step - loss: 10.1535 - box_loss: 2.5659 - class_loss: 7.5876 - val_loss: 3.9852 - val_box_loss: 3.1973 - val_class_loss: 0.7879 - MaP: 0.0095 - MaP[IoU50]: 0.0193 - MaP[IoU75]: 0.0074 - MaP[areasmall]: 0.0021 - MaP[areamedium]: 0.0164 - MaP[arealarge]: 0.0010 - Recall[max_detections1]: 0.0096 - Recall[max_detections10]: 0.0160 - Recall[max_detections100]: 0.0160 - Recall[areasmall]: 0.0034 - Recall[areamedium]: 0.0283 - Recall[arealarge]: 0.0010 Epoch 2⁄3 1463⁄1463 [] - 554s 378ms/step - loss: 2.6961 - box_loss: 2.2861 - class_loss: 0.4100 - val_loss: 3.8292 - val_box_loss: 3.0052 - val_class_loss: 0.8240 - MaP: 0.0077 - MaP[IoU50]: 0.0197 - MaP[IoU75]: 0.0043 - MaP[areasmall]: 0.0075 - MaP[areamedium]: 0.0126 - MaP[arealarge]: 0.0050 - Recall[max_detections1]: 0.0088 - Recall[max_detections10]: 0.0154 - Recall[max_detections100]: 0.0154 - Recall[areasmall]: 0.0075 - Recall[areamedium]: 0.0191 - Recall[arealarge]: 0.0280 Epoch 3⁄3 1463⁄1463 [] - 558s 381ms/step - loss: 2.5930 - box_loss: 2.2018 - class_loss: 0.3912 - val_loss: 3.4796 - val_box_loss: 2.8472 - val_class_loss: 0.6323 - MaP: 0.0145 - MaP[IoU50]: 0.0398 - MaP[IoU75]: 0.0072 - MaP[areasmall]: 0.0077 - MaP[areamedium]: 0.0227 - MaP[arealarge]: 0.0079 - Recall[max_detections1]: 0.0120 - Recall[max_detections10]: 0.0257 - Recall[max_detections100]: 0.0258 - Recall[areasmall]: 0.0093 - Recall[areamedium]: 0.0396 - Recall[arealarge]: 0.0226 keras.callbacks.History at 0x7f3e01ca6d70 可视化预测 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)1⁄1 [] - 0s 115ms/step
- 上一篇: 网站截图怎么做网站代理工具
- 下一篇: 网站解析打不开网站建设与管理实践心得
相关文章
-
网站截图怎么做网站代理工具
网站截图怎么做网站代理工具
- 技术栈
- 2026年03月21日
-
网站结构化数据怎么做简单地网站
网站结构化数据怎么做简单地网站
- 技术栈
- 2026年03月21日
-
网站结构分析网站建设需要会什么软件有哪些内容
网站结构分析网站建设需要会什么软件有哪些内容
- 技术栈
- 2026年03月21日
-
网站解析打不开网站建设与管理实践心得
网站解析打不开网站建设与管理实践心得
- 技术栈
- 2026年03月21日
-
网站解析一般什么时候网站建设公司的选择
网站解析一般什么时候网站建设公司的选择
- 技术栈
- 2026年03月21日
-
网站界面建议wordpress 页面美化
网站界面建议wordpress 页面美化
- 技术栈
- 2026年03月21日
