当前位置:   article > 正文

Python TensorFlow Keras深度学习模型RetinaNet进行目标检测分析车牌数据

Python TensorFlow Keras深度学习模型RetinaNet进行目标检测分析车牌数据

全文链接:https://tecdat.cn/?p=36968

目标检测作为计算机视觉领域的关键任务之一,在交通管理、智能安防、自动驾驶等众多应用场景中具有重要意义。车牌作为车辆的重要标识,其准确检测对于车辆识别、交通监控等系统的性能提升至关重要点击文末“阅读原文”获取完整代码数据)。

传统的目标检测方法在面对复杂场景和多样化的车牌样式时,往往存在精度不高、鲁棒性不足等问题。随着深度学习技术的迅速发展,特别是 TensorFlow Keras 框架下的深度学习模型,为解决这些问题提供了强大的工具。

RetinaNet 作为一种先进的深度学习目标检测模型,以其独特的结构和出色的性能,在多个领域取得了显著的成果。本研究将 RetinaNet 模型应用于车牌数据的目标检测,旨在探索其在该特定领域的有效性和潜力。

通过利用大规模的车牌数据集进行训练和优化,期望能够实现对车牌的高精度、快速检测,为相关实际应用提供可靠的技术支持。同时,对模型的性能进行深入分析和评估,为进一步改进和完善车牌检测技术提供有价值的参考。

15721fd77dcbe18b76ff375436d98042.png

869871d43bb540a00064854d2f2cc42e.png

13b90c1af3f86dc821c8ca6fb5cfb332.png

环境配置与库导入

为了开展本研究,我们首先需要配置Python环境并导入必要的库。这些库涵盖了数据处理、模型构建、可视化以及深度学习框架等多个方面。

我们利用pandas库来处理和分析数据集,numpy库用于高效的数值计算。可视化方面,我们引入了matplotlibseaborn库来绘制图表,以便直观地展示数据特征和模型结果。此外,通过%matplotlib inline%config InlineBackend.figure_format='retina'的设置,我们确保了在Jupyter Notebook环境中图表的高质量显示。

为了构建和训练深度学习模型,我们采用了TensorFlow框架及其高级API Keras。特别地,针对目标检测任务,我们集成了keras_retinanet库,该库提供了基于RetinaNet架构的预训练模型和工具。

数据集准备与预处理

首先,我们使用pandas库从indian_number_plates.json文件中读取车牌数据。该JSON文件以行格式存储,每行代表一个包含车牌图像URL及其标注信息的记录。通过调用pd.read_json函数,并设置lines=True参数,我们成功地将这些数据加载到DataFrame对象plates_df中。

接下来,为了确保存储下载图像的目录存在,我们使用os.makedirs函数创建了一个名为number_plates的目录。如果该目录已存在,则通过设置exist_ok=True参数避免抛出错误。

为了构建可用于模型训练的数据集,我们初始化了一个空字典dataset,其中包含用于存储图像名称、边界框坐标(x_miny_minx_maxy_max)和类别名称(class_name)的列表。然后,我们遍历plates_df中的每一行,对每条记录执行以下操作:

  1. 使用urllib.request.urlopen函数根据记录中的content字段(即图像URL)下载车牌图像。

  2. 将下载的图像对象转换为PIL图像,并转换为RGB颜色模式以匹配常见的图像处理需求。

  3. 将处理后的图像保存到number_plates目录下,文件名格式为licensed_car_{counter}.jpeg,其中counter用于追踪已下载图像的数量。

  4. 将图像的存储路径添加到dataset["image_name"]列表中。

  5. 解析记录中的annotation字段,提取车牌边界框的坐标信息。根据图像的实际宽度和高度,将标注中的相对坐标转换为绝对像素坐标,并存储到相应的列表中。

  6. 将车牌的类别名称(在本例中为"license_plate")添加到dataset["class_name"]列表中。

完成上述遍历后,我们打印出已下载的汽车图像数量,以确认数据集的完整性和规模。

print("Downloaded {} car images.".format(counter))

通过上述步骤,我们成功地从JSON文件中提取并整理了车牌图像及其标注信息,构建了一个完整的数据集,为后续的目标检测模型训练提供了有力的支持。

da62141aef97dc7ce6cb2d43c30eaadd.png

数据预处理与初步探索

在数据处理的初步阶段,我们首先利用Pandas库将数据集加载为一个DataFrame对象,以便进行后续的分析与操作。以下是加载数据集并查看其前几行数据的代码实现:

  1. df = pd.DataFrame(dataset)
  2. df.head()

7808e883ce0c206577efc7919ba1f118.png

此步骤不仅验证了数据成功加载,还通过head()方法提供了数据集的概览,有助于初步了解数据的结构和内容。


点击标题查阅往期内容

cd909e928a0ee46790c554947ec66aba.jpeg

Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化

outside_default.png

左右滑动查看更多

outside_default.png

01

cc2a3671e168146988f07621d51f67ef.gif

02

7be851183371bb61e3db8dd2dd5b6ac6.png

03

74270ccbab4a0d866aa536da9db4d157.png

04

02fafde4270eaad2f03f71d1c4cd0a95.gif

图像对象可视化函数

为了更直观地展示数据集中的图像及其包含的特定对象(如通过边界框标记的对象),我们定义了一个名为show_image_objects的函数。该函数接收DataFrame中的一行数据作为输入,该数据行包含图像路径和对象边界框的坐标信息。

示例应用

为了演示show_image_objects函数的功能,我们可以从DataFrame中选取一行数据作为示例,并调用该函数来展示图像及其包含的边界框:

show_image_objects(df.iloc[0])

通过上述步骤,我们不仅能够展示数据集中的图像,还能直观地看到图像中特定对象的边界框:

2ce1e05b9a2efbdc5d3c2e5d1d614b19.png

2bda66f3c6be599c188589d45c999f4e.png

数据预处理

在数据准备阶段,为了有效地训练模型并评估其性能,我们首先将数据集划分为训练集和测试集。这通过train_test_split函数实现,该函数从sklearn.model_selection模块中导入,用于随机分割数据集。具体地,我们将原始数据集df按照80%训练集和20%测试集的比例进行划分,并设置随机种子RANDOM_SEED以确保结果的可重复性。

  1. train_df, test_df = train_test_split(
  2. df,
  3. test_size=0.2,
  4. random_state=RANDOM_SEED
  5. )

接下来,为了后续训练过程中的便利,我们将训练集的注释信息(即标注数据)保存至annotations.csv文件中,并去除索引和表头信息以简化文件结构。同时,我们定义了一个包含所有类别名称的集合classes,在这个例子中仅包含'license_plate'一个类别。然后,我们将这些类别名称及其对应的索引(从0开始)写入classes.csv文件,该文件用于模型训练时指定类别标签。

最后,为了验证上述步骤是否按预期执行,我们使用!head命令(通常在Jupyter Notebook或类似环境中可用)来查看classes.csvannotations.csv文件的前几行内容。这有助于快速检查文件内容是否符合预期格式,从而确保后续处理流程的顺利进行。

6d333687a55454f5ec51966fc0a4ae4d.png

训练

这段代码主要是进行了模型的下载和训练操作。

首先,定义了一个预训练模型的路径 PRETRAINED_MODEL ,并指定了一个模型的 URL URL_MODEL 。然后,使用 urllib.request.urlretrieve 函数从指定的 URL 下载模型,并保存到指定的路径。

最后,通过执行 keras_retinanet/bin/train.py 脚本来进行模型的训练。其中,--freeze-backbone 表示冻结骨干网络,--random-transform 可能是用于数据增强的随机变换,--weights {PRETRAINED_MODEL} 指定了使用刚刚下载的预训练模型的权重,--batch-size 8 设定了批处理大小为 8,--steps 500 可能是每个 epoch 中的训练步数,--epochs 10 设定了训练的轮数为 10 ,并使用 csv annotations.csv classes.csv 来指定数据的相关文件。

375332f5bc6e2aa5cdba9543f197c510.png

391905da7c3935ad31005afc38540fa2.png

加载训练模型

c8ebac1e310682f9dc2ff752b80d6aad.png

首先,确定模型的路径。然后,加载模型。

例如,如果 CLASSES_FILE 中的内容为 0,cat\n1,dog\n2,rabbit ,那么 labels_to_names 字典可能为 {0: 'cat', 1: 'dog', 2: 'rabbit'} 。这种方式能够方便地将模型预测的类别标签转换为对应的名称,从而提高模型结果的可读性和可理解性。

6ddf750484e9fdc0d9592b242398e154.png

预测

设置了分数阈值:并定义了根据检测结果在图像上绘制框和标注的函数:

还定义了展示检测到的物体的函数:

  1. plt.axis('off')
  2. plt.imshow(draw)
  3. plt.show()

最后,查看测试数据框的前 10 行:

例如,假设一张图像中有一个物体被标注为“cat”,其预测分数为 0.8 ,且超过了阈值 0.6 。那么在图像上将会绘制出一个框,并标注“cat 0.800”。又如,对于另一张图像,如果多个物体的预测分数都高于阈值,将会相应地绘制多个框和标注。

28cbb8e06cd315ee183d18b82b343dfd.png

展示检测结果

通过以下代码对测试数据集中的前三个样本进行检测结果的展示:

1dd2e425f86e764c445af39de58d15e9.png

4185dd40083e6dfa1d6f652bc0991145.png

f7b06fcb3edcf7b10c7edd8bc78ef542.png


资料获取

在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。

af9084ab652c58e3ed6b916ba679ea51.png

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《Python TensorFlow Keras深度学习模型RetinaNet进行目标检测分析车牌数据》。

点击标题查阅往期内容

PYTHON TENSORFLOW 2二维卷积神经网络CNN对图像物体识别混淆矩阵评估|数据分享

R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化

R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)

MATLAB中用BP神经网络预测人体脂肪百分比数据

Python中用PyTorch机器学习神经网络分类预测银行客户流失模型

R语言实现CNN(卷积神经网络)模型进行回归数据分析

SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型

【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析

Python使用神经网络进行简单文本分类

R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析

R语言基于递归神经网络RNN的温度时间序列预测

R语言神经网络模型预测车辆数量时间序列

R语言中的BP神经网络模型分析学生成绩

matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类

R语言实现拟合神经网络预测和结果可视化

用R语言实现神经网络预测股票实例

使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测

python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译

用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类

5b317f39e0d2dafeff99a965c64fa1d2.jpeg

fa9c70f1d948eb381b4ab98e07a608b8.png

569d72d264103b48ba1cd6abbb2be05d.png

22d14546cc4b40b8befcad0a5c71dd47.jpeg

97734013459b3232a63a697134e04250.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/825868
推荐阅读
相关标签
  

闽ICP备14008679号