机器学习和神经网络 - 页 40

 

使用 Opencv 和 Python 进行对象跟踪

代码: https ://pysource.com/2021/01/28/object-tracking-with-opencv-and-python/



使用 Opencv 和 Python 进行对象跟踪

使用 OpenCV 和 Python 进行对象跟踪的视频教程解释了对象检测和对象跟踪之间的区别,并展示了如何创建对象跟踪器文件以进行高效跟踪。该视频概述了所需的必要文件,例如视频和对象跟踪器文件,并展示了如何对 main.py 文件进行编码以进行实时视频显示。本教程还介绍了如何从蒙版中移除小元素并定义感兴趣区域以提取图像的一部分以聚焦在车辆上。该视频最后解释了对象跟踪的过程,并为对象添加了唯一 ID 以正确计数。然而,该教程指出该方法并不完美,但可以很好地介绍对象跟踪,建议学习更深入的 OpenCV 和深度学习课程。

  • 00:00:00 在本节中,演讲者介绍了物体检测和物体跟踪之间的区别。前者逐帧检测对象,而后者则在整个帧中跟踪对象以追溯它们的历史。对象跟踪在各种应用中都至关重要,例如人数统计、跟踪对象轨迹以及计算高速公路上通过的汽车数量。演讲者随后介绍了启动项目所需的文件,包括视频和对象跟踪器文件。接下来,演讲者开始编写 main.py 文件,首先导入 OpenCV 库并创建捕获对象以从视频中读取帧。最后,演讲者展示了如何实时显示视频并创建关闭视频的关键事件。

  • 00:05:00 在本节中,演讲者讨论了使用 OpenCV 和 Python 进行对象跟踪。他们解释说,对于这种特定方法,需要稳定的相机,这意味着背景不会随时间变化,而只有运动中的物体会发生变化。通过使用物体检测器,可以从稳定的相机中提取运动物体。检测器创建一个遮罩,遮罩的目标是让所有不需要的东西变成黑色,而需要检测的车辆是白色的。然后提取白色元素的坐标,并删除那些太小的元素。然后,利用OpenCV的find contours功能,找到白色物体的边界,并绘制在绿色的框上。

  • 00:10:00 在本节中,视频教程解释了如何通过计算轮廓的面积并删除面积小于 100 像素的任何轮廓来从蒙版中删除小元素。然后,本教程讨论了如何定义感兴趣区域 (ROI) 以提取图像的一部分以仅关注道路特定部分的车辆,从而使检测过程更加容易。本教程概述了如何通过指定包含我们要跟踪的车辆的部分的位置、高度和宽度来定义 ROI。本教程最后解释了如何将掩码应用于 ROI 以仅在该特定区域执行对象跟踪。

  • 00:15:00 在视频的这一部分中,演讲者将对象检测算法应用于 ROI 而不是整个帧,并展示了检测是如何改进的。但是,误报和检测算法仍然存在问题。为了改进对象检测,说话者调整历史的大小和 var 阈值,这会影响误报的数量。然后说话者提取检测到的每个对象周围的矩形,并将其绘制在绿色的 ROI 上。最后,说话者通过使用阈值运算符仅保留图像中的白色元素来去除图像中的阴影,从而实现更准确的对象检测。

  • 00:20:00 在本节中,视频解释了使用 OpenCV 和 Python 进行对象跟踪的过程。有必要导入“tracker.py”文件并创建一个“tracker”对象以进行高效跟踪。 “跟踪器”收集对象的边界框并将它们保存在名为“检测”的数组中。每个边界框都有其独特的一组 x、y 位置、宽度和高度值。这些框的最小值必须为 100,因此跟踪器会丢弃不相关的对象。逐帧显示一系列检测到的对象,并将检测数组传递给跟踪器对象。然后跟踪器返回每个被跟踪对象的历史和唯一 ID。对象跟踪的初始步骤是对象检测,只有在第一帧中检测到对象才有可能。

  • 00:25:00 在本节中,视频讨论了向 OpenCV 和 Python 中的对象跟踪功能添加唯一 ID。每个对象现在都有不同的 ID,防止在计算对象时出错。通过使用 ID,可以正确计数对象,并且可以绘制一条线来检测对象何时穿过它。视频最后解释说,显示的方法很简单,并不完美,但却是对对象跟踪的一个很好的介绍。如需更深入地了解对象检测和跟踪,创建者建议观看他们关于 OpenCV 和深度学习的视频课程。
Object Tracking with Opencv and Python - Pysource
Object Tracking with Opencv and Python - Pysource
  • Sergio Canu Hi there, I’m the founder of Pysource. I’m a Computer Vision Consultant, developer and Course instructor. I help Companies and Freelancers to easily and efficiently build Computer Vision Software .
  • pysource.com
In this tutorial we will learn how to use Object Tracking with Opencv and Python. First of all it must be clear that what is the difference between object detection and object tracking: Object detection is the detection on every single frame and frame after frame. Object tracking does frame-by-frame tracking but keeps the history of where the...
 

计算机视觉路线图 |如何成为一名计算机视觉工程师



计算机视觉路线图 |如何成为一名计算机视觉工程师

该视频提供了成为计算机视觉工程师的路线图,将学习过程分为四个模块:Python 和 OpenCV、机器人和低级编程、人工智能和高级主题。强调涉及机器人和 Arduinos 等物理设备的动手项目的重要性,以及对数学有基本了解的必要性。演讲者还讨论了可以帮助有抱负的计算机视觉工程师磨练技能的竞赛和项目。此外,还强调了软技能的重要性,例如 Git 和 Docker 等软件工具的文档和知识。最后,建议获得数学、数据科学、计算机科学或工程学位,尽管也可以通过项目和课程独立学习。

  • 00:00:00 在视频的这一部分,演讲者展示了计算机视觉路线图,其中涵盖了成为计算机视觉开发人员需要学习的所有内容。该路线图回答了三个主要问题:需要哪些技能,您可以从事哪些项目来获得这些技能,以及哪些大学学位可用于学习这些技能。该路线图分为四个模型,第一个模型涵盖了解决70%计算机视觉问题必不可少的Python和OpenCV。第二个模型是关于机器人和低级编程,包括使用 C++ 和电子学。第三和第四个模型分别涵盖人工智能和高级主题。演讲者为每个模型推荐了初学者项目,例如使用巡线机器人或二维码阅读器来积累知识和技能。

  • 00:05:00 在视频的这一部分,演讲者讨论了从事涉及机器人和 Arduinos 等物理设备的项目的重要性。演讲者解释说,为此类设备编程需要不同的方法,因为由于传感器噪声和照明变化等因素,相同的代码可能会产生不同的结果。演讲者提到的第三个模块侧重于人工智能和机器学习,使用流行的 Python 库 Scikit-learn,可用于图像分类和对象检测等任务。最后,演讲者还强调了对数学及其与计算机视觉的关系有基本了解的重要性。

  • 00:10:00 在本节中,演讲者解释了将环境划分为不同区域的重要性,以及如何使用它来检测车道交叉口等情况,同时演示了一个简单的图像,其中不同区域由基本几何形状分隔。他强调计算机视觉工程师需要精通数学,并建议先学习图像分类和目标检测、秘密学习和几何方面的基础知识,然后再学习机器学习、数学和电子学方面的更高级技能。他建议通过生成对抗网络和实施计算机视觉领域最先进的论文等项目来学习高级机器学习,同时从事高级 Arduino 项目或参加机器人竞赛以提高电子知识。

  • 00:15:00 在本节中,演讲者讨论了可以帮助有抱负的计算机视觉工程师磨练技能的各种竞赛和项目。这些比赛涉及构建可以执行复杂任务并与其他团队竞争的机器人和代理。演讲者强调学习计算机视觉基础知识的重要性,包括 Python 和 OpenCV,它们可以帮助解决 70% 的可用问题。提到的四个模块是:基础知识、机器人学、人工意图和高级模块。虽然高级模块很重要,但演讲者建议首先关注其他模块,因为它们涵盖了成为一名成功的计算机视觉工程师所需的基本技能。

  • 00:20:00 在本节中,演讲者讨论了计算机视觉开发人员除了具备计算机视觉、机器学习和 Python 知识外还应具备的各种软件相关技能。这些技能包括了解 Git 和 Docker 等工具的基础知识,以及 AWS 或 Google Cloud 等云提供商的基础知识。其他被认为有价值的技能包括 Web 或移动开发、JavaScript 知识以及知道如何编写适当的文档(例如 GitHub 存储库的自述文件或记录整个过程)。虽然并非所有这些技能都是必须的,但它们有助于展示开发人员的工作和解决各种问题。

  • 00:25:00 在本节中,演讲者强调了文档对计算机视觉开发人员的重要性,因为它使每个人的工作变得更简单。他们还建议每个开发人员,而不仅仅是计算机视觉开发人员,都应该掌握文档,因为它是一项至关重要的技能。演讲者随后强调了熟悉各种软件工具的重要性,并鼓励有抱负的计算机视觉工程师尽可能多地学习。对于那些有兴趣攻读大学学位的人,演讲者推荐数学、数据科学、计算机科学、电气工程或任何工程学位的学位,因为它们为解决问题和提出解决方案奠定了基础。但是,演讲者指出,完全有可能通过参加项目和课程来独立学习所有内容。
Computer vision roadmap | How to become a computer vision engineer
Computer vision roadmap | How to become a computer vision engineer
  • 2022.11.03
  • www.youtube.com
0:00 - Start0:20 - Who am I?0:46 - Video roadmap01:28 - Skills: 4 modules2:04 - Fundamentals3:46 - Robotics / low level programming7:38 - Artificial Intellig...
 

使用 Yolov8 自定义数据集进行图像分类 |计算机视觉教程

代码:https: //github.com/computervisioneng/image-classification-yolov8



使用 Yolov8 自定义数据集进行图像分类 |计算机视觉教程

在本节中,演示者解释了如何为项目选择最佳模型,并在选择训练过程中生成的最后一个模型或选择精度最高的模型之间提出建议。该决定取决于各种因素,包括数据、问题、用例和培训过程。演讲者还解释了如何通过导入 YOLO 并指定模型的绝对路径,使用本地计算机中的图像并显示结果来进行所有推理和预测新样本。结果提供了大量信息,包括概率和图像分类器训练类别的名称。

  • 00:00:00 在本节中,YouTuber 演示了如何在自定义数据集上使用 YOLOv8 构建图像分类器。他首先展示了数据集,其中包括云、雨、晴和日出的图像。他还解释了 YOLOv8 期望数据输入的文件结构。 Felipe 然后继续解释使用 YOLOv8 训练图像分类器的三种不同方法:第一种是使用 Python 脚本,第二种是使用 Google Colab Notebook,第三种是使用暗网,这是 YOLOv8 的底层框架。

  • 00:05:00 在本节中,教程介绍了使用 Yolov8 训练图像分类模型所需的依赖项以及如何使用 PyCharm 中的 Python 解释器安装它们。所需的两个主要包是 Ultralytics 和 NumPy,其中 Ultralytics 在导入必要数据以训练模型方面至关重要。然后,本教程将介绍训练模型所需的代码,并要求以正确的格式设置数据的绝对路径。还只对一个 Epoch 进行了测试运行,以确保在继续进一步培训之前一切正常。

  • 00:10:00 在本节中,演讲者展示了训练过程的结果所在的位置,并解释了 runs 文件夹中的文件夹结构。然后,他演示了如何使用特定实用程序和必要参数通过命令行使用 Yolov8 训练图像分类器。他继续通过仅训练一个时期的模型来展示这种方法的简单性,然后展示结果在标记为“trained 13”的新目录中的保存位置。最后,演讲者讨论了使用 Google Collab 训练模型的另一种方法,并简要说明了设置过程。

  • 00:15:00 在本节中,演示者展示了一个名为“train.ipymb”的用于训练 Yolov8 模型的笔记本。将数据集上传到 Google Drive 是用户从 Google Collab 访问数据的重要步骤,因为该过程需要用户执行将 Google Collab 与 Google Drive 连接起来的单元格。了解 Google Drive 中用户数据集的路径至关重要,因为用户需要将此路径输入到他们的笔记本中才能正确使用他们的数据集。最后,presenter 提供了简单的命令,用户可以执行这些命令来安装训练 Yolov8 模型所需的必要库。

  • 00:20:00 在这部分视频中,讲师演示了如何使用 YOLOv8 和自定义数据集训练图像分类器,以及如何将在 Google Colab 环境中获得的结果复制到 Google Drive。他们运行一个 epoch 的训练过程,将结果复制到 Google Drive,然后运行 20 个 epoch 的训练过程。最后,他们展示了如何分析训练过程是否产生了良好的图像分类器。讲师强调了正确设置数据目录变量的重要性,并建议将结果复制到 Google Drive 以简化下载和分析。

  • 00:25:00 在本节中,分析了使用 YOLOv8 的自定义数据集训练过程的结果。检查保存在本地计算机中的文件,包括列出训练过程中使用的所有 EPA 参数的配置文件和包含训练和验证损失以及准确性的结果文件。一个 python 文件绘制了不同时期的损失和准确性,用于确定损失是否下降以及准确性是否在整个训练过程中上升。得出的结论是,一种简单但有效的方法是检查训练损失和验证损失是否在准确性上升的同时下降。

  • 00:30:00 在本节中,演讲者解释了当我们增加 epoch 的数量时评估准确度的表现,表明准确度先增加然后稳定。可以使用不同的参数和更定制的训练来改进过程以获得更好的模型。还解释了“weights”目录,其中保存了两个不同的文件:“last.pt”和“best.pt”。 “last.pt”文件是在训练的最后一个 epoch 结束时生成的模型,而“best.pt”文件是在最佳训练 epoch 结束时生成的模型。实际上,将使用最后一个模型来获得最终结果。

  • 00:35:00 在本节中,演讲者讨论了如何为项目选择最佳模型,并在选择训练过程中生成的最后一个模型或选择精度最高的模型之间提出了建议。该决定取决于各种因素,包括数据、问题、用例和培训过程。演讲者还解释了如何通过导入 YOLO 并指定模型的绝对路径,使用本地计算机中的图像并显示结果来进行所有推理和预测新样本。结果提供了大量信息,包括概率和图像分类器训练类别的名称。

  • 00:40:00 在视频的这一部分中,演示者解释了如何使用字典来使用 YOLOv8 识别图像的分类。图像分类器的结果是对应不同类别的整数,使用字典来识别每个整数代表哪个类别。此外,还获得了给定图像的所有不同类别的概率向量,演示者演示了如何使用 numpy 识别最大概率及其对应的类别。演示者最后展示了如何使用 YOLOv8 模型对图像进行分类,并建议订阅他们的频道以获取更多计算机视觉工程项目。
GitHub - computervisioneng/image-classification-yolov8
GitHub - computervisioneng/image-classification-yolov8
  • computervisioneng
  • github.com
You can download the same dataset I use in the video here. Ajayi, Gbeminiyi (2018), “Multi-class Weather Dataset for Image Classification”, Mendeley Data, V1, doi: 10.17632/4drtyfjtfy.1
 

在自定义数据集上训练 Yolov8 对象检测 |分步指南 |计算机视觉教程

代码: https ://github.com/computervisioneng/train-yolov8-custom-dataset-step-by-step-guide



在自定义数据集上训练 Yolov8 对象检测 |分步指南 |计算机视觉教程

本视频教程提供了有关如何在计算机视觉应用程序的自定义数据集上使用 YOLOv8 训练对象检测器的分步指南。本教程涵盖数据收集、注释、格式化和训练等重要方面,以及分析损失函数图和真实示例以评估模型性能的重要性。本教程强调使用 CVAT 工具进行标注,遵守所需的 YOLOv8 数据格式,并创建配置 YAML 文件。本教程还演示了如何使用 Google Colab 和 PyCharm 来训练和测试对象检测器。

该视频演示了在羊驼数据集上训练的 YOLOv8 对象检测模型的性能。演讲者使用 Python 脚本加载视频并执行预测,在某些情况下显示几乎完美的检测,在其他情况下显示稳定的检测,在一个视频中有一些漏检。演讲者建议分析训练和验证损失函数,并在再次训练模型之前确定是否有改进的空间,以获得更强大、性能更好的模型。

  • 00:00:00 在视频的这一部分,演示者解释了在使用 YOLOv8 训练对象检测器时收集数据的重要性,以及收集数据的不同方式,例如拍摄自己的照片或使用公开可用的数据集像开放图像集。演示者使用羊驼数据集进行演示,并向观众展示数据集中包含的图像示例。此外,演示者提到他们可以为观众提供脚本,以按照教程所需的确切方式从 Open Images Set 下载和格式化数据。

  • 00:05:00 在视频的这一部分中,解说员讨论了使用 CVAT 工具进行数据标注的过程,CVAT 工具是一种标注工具,可用于对象检测和计算机视觉相关的标注任务。解说员演示了如何使用CVAT工具为自定义数据集标注一组图像,解释了如何创建新项目和任务、上传图像以及为待检测对象添加标签。尽管叙述者已经有了所用图像的注释,但它们为需要注释数据的人提供了分步指南。该视频还强调了不同注释工具的优点和缺点,同时强调了使用 CVAT 的好处。

  • 00:10:00 在本节中,视频创作者展示了如何使用 YOLOv8 算法在图像数据集上标记对象以进行对象检测。创作者使用羊驼的图像并演示了如何将物体封闭在粘合盒中,从而使算法能够检测和识别物体。他们还解释了注释您自己的数据的重要性,以便更熟悉注释期间可能出现的不同情况,并清楚地说明所检测的对象。创建者指出,虽然可以使用外部服务完成数据注释,但为了更好地理解数据,自己对一些图像进行注释至关重要。

  • 00:15:00 在本节中,以羊驼数据集为例,讨论了图像注释标准的重要性。还显示了为对象定义边界框的不同方法,包括使框紧密贴合对象或使用更宽松的边界框。注释工具 cb80 被强调为一个有用且易于使用的 Web 应用程序,用于格式化和注释数据,强调数据注释在训练对象检测算法中的重要性。

  • 00:20:00 在这部分视频中,演示者解释了 YOLOv8 训练目标检测器所需的特定数据格式。机器学习中的每个算法都有自己的数据输入要求,而 YOLO 需要非常特定格式的数据。演示者演示了如何从 CV80 导出注释数据并将其转换为 YOLO 格式。 YOLO 格式要求标注和对应的图像具有相同的名称和不同的文件扩展名,每个边界框标注包含一个类号和四个定义边界框的中心位置、宽度和高度的浮点数。需要强调的是,拥有正确格式的数据对于训练目标检测器至关重要。

  • 00:25:00 在本节中,演讲者解释了如何在自定义数据集上使用 YOLOv8 构建用于训练对象检测的数据。第一步是创建两个目录:一个用于图像,一个用于标签,具有无法更改的特定目录名称。在 images 目录中,应放置所有将用于训练的图像,为了方便起见,可以使用 train 目录。在 labels 目录中,每个图像都应该有注释文件,遵循标准格式,其中每一行指定类 ID、边界框中心的 X/Y 位置以及边界框的宽度和高度。演讲者还解释了如何将其他目录用于验证或测试数据,或用于不同版本的数据。

  • 00:30:00 在本节中,视频教程讨论了使用 Python 或命令行实用程序使用 YOLO V8 训练对象检测器的过程。 YOLO V8 官方存储库提供了使用一些 Python 指令或在终端中运行命令进行训练的选项。然后,本教程将分步指导如何在 PyCharm 项目中使用 YOLO V8 训练对象检测器,包括导入 Ultralytics 库和创建配置 YAML 文件。该教程还强调用户可以选择在本地环境或 Google Colab 中工作。

  • 00:35:00 在视频的这一部分,演讲者讨论了在自定义数据集上使用 YOLO V8 训练对象检测器的配置文件。他们解释了如何设置被检测的不同类的名称、包含图像和注释的目录的绝对路径以及图像所在位置的相对路径。演讲者还提到了两个关键字“train”和“val”,分别指代训练数据和验证数据。他们强调使用绝对路径而不是相对路径以避免任何问题的重要性。然后演讲者演示如何执行该文件并开始一个 epoch 的训练过程,强调需要等待过程完成。最后,他们展示了训练过程完成后生成的输出文件。

  • 00:40:00 在视频教程的这一部分中,演讲者展示了用于训练 YOLOv8 对象检测算法的图像批次,以及用于验证的相似图像。演讲者解释说,他们正在进行浅薄的虚拟培训,并展示了用于此目的的文件。然后,演讲者展示了如何使用终端从命令行以及 Google 协作笔记本中训练算法。该笔记本仅包含五个单元格,演讲者通过指定数据位置的相对路径来演示上传数据、安装 Google Drive 和训练算法是多么简单。

  • 00:45:00 在本节中,视频教程展示了如何使用 Google Colab 在自定义数据集上训练 YOLOv8 对象检测器。该过程涉及保存特定变量并通过感叹号命令在Google Colab环境中执行“pip install ultralytics”命令。本教程展示了如何输入在本地环境中使用的相同代码行以及如何指定 Google Drive 目录的绝对路径。上传文件并执行命令后,训练过程与本地环境中的训练过程类似。该教程指示用户等待执行完成,并记住执行将结果目录复制到 Google Colab 中所选目录的命令。

  • 00:50:00 在本节中,视频教程重点测试在自定义数据集上训练的 Yolov8 对象检测器的性能。测试模型的第一步涉及到保存有关训练过程的所有信息的目录。然后,该视频展示了可用于分析模型性能的不同输出和绘图,包括混淆矩阵、F1 置信度曲线和损失函数绘图。该视频建议关注损失图,确保所有损失都在下降,因为这是分析模型性能的简单而强大的方法。还讨论了损失函数图中的不同情况,例如平坦化损失函数,这可能表明模型已经学习了它需要学习的一切。

  • 00:55:00 在视频的这一部分中,演示者讨论了分析损失函数以深入了解对象检测模型的训练过程。如果损失函数下降,则一切顺利,但如果上升,则训练有问题。查看图表并分析这些信息更多的是研究,但是演示者提出了一种更直观的方法来评估模型的性能,即查看真实示例并查看模型如何在真实数据上执行。演示者在视频中展示了模型检测现实生活中羊驼的示例,这些是完全看不见的数据来测试模型的性能。虽然结果并不完美,但表现不错,演示者认为这种视觉评估与从事客户项目的自由职业者更相关,因为客户可能不关心图表和指标,而是想看看如何模型对真实数据执行。
  • 01:00:00 在本节中,演讲者通过加载视频并执行预测的 Python 脚本演示了在羊驼数据集上训练的 YOLOv8 对象检测模型在未见数据上的性能。这些检测似乎运行良好,在某些情况下检测几乎完美,而在其他情况下检测稳定,除了一段视频中的一些漏检。演讲者建议分析训练和验证损失函数,检查它们的下降趋势,以及是否存在改进空间,以决定是否再次训练模型,这是演讲者所做的,以获得更强大、性能更好的模型。
GitHub - computervisioneng/train-yolov8-custom-dataset-step-by-step-guide
GitHub - computervisioneng/train-yolov8-custom-dataset-step-by-step-guide
  • computervisioneng
  • github.com
In this video I show you a super comprehensive step by step tutorial on how to use yolov8 to train an object detector on your own custom dataset! dataset If you want to train yolov8 with the same dataset I use in the video, this is what you should do: Go to prepare_data directory. Execute...
 

Yolov8目标检测+深度排序目标跟踪|计算机视觉教程

代码:https: //github.com/computervisioneng/object-tracking-yolov8-deep-sort



Yolov8目标检测+深度排序目标跟踪|计算机视觉教程

本视频教程演示了如何使用 YOLOv8 和深度排序实现对象检测和跟踪系统。演示者逐步完成整个过程,从使用 YOLOv8 设置环境、加载和检测视频中的对象,到使用深度排序随时间跟踪检测到的对象。他们还解释了创建正确文件结构和安装必要依赖项的重要性。一旦从 YOLOv8 中提取了检测结果,就会应用深度排序对象跟踪来随着时间的推移跟踪检测到的对象。最后,演示者解释了如何将最终输出帧保存到视频文件中,并鼓励观众修改检测阈值以获得更高的准确性。

  • 00:00:00 在视频的这一部分,主持人介绍了使用YOLOv8进行对象检测和使用深度排序进行对象跟踪的项目。目标是创建一个跟踪算法,可以跟踪视频中移动的人,并使用不同颜色的边界框来指示被跟踪的对象。楼主展示了将要用到的YOLOv8和deep sort repository,以及要测试的视频数据。最后,宿主介绍了一个名为“tracker.py”的文件,它是深度排序的包装器,通过使用高级函数简化了对象跟踪过程。

  • 00:05:00 在视频的这一部分,演示者解释了如何通过克隆必要的存储库、下载所需的文件和导入必要的库来设置教程的环境。他们解释了创建正确的文件结构和安装正确的依赖项以确保与代码兼容的重要性。然后演示者演示如何使用 OpenCV 加载视频并从中读取帧,以及如何在窗口中显示帧。

  • 00:10:00 在本节中,演示者演示了如何使用 YOLOv8 预训练模型对视频进行检测。使用 Ultralytics,导入预训练模型并在视频帧上调用该函数。打印输出检测结果,但由于结果是自定义对象类型,因此需要使用 for 循环将它们解包并转换为列表。最终输出检测被保存到一个新对象中。成功执行代码后,结果可用作对象跟踪算法的输入数据。

  • 00:15:00 在视频教程的这一部分,演讲者演示了如何解包来自 YOLOv8 对象检测器的所有重要检测信息,并使用深度排序对象跟踪来跟踪检测到的对象。他们展示了如何为每次检测提取类 ID、置信度值和坐标等信息,以便将其传递给跟踪算法。演讲者还展示了如何使用检测和帧初始化和调用深度排序跟踪器,以便随着时间的推移跟踪检测到的对象。

  • 00:20:00 在本节中,演示者解释了深度分类对象跟踪的过程,其中涉及计算帧顶部的特征和检测到的对象。该算法裁剪帧并提取特征,并迭代所有轨道,演示者使用循环来访问边界框和轨道 ID。视频中检测到的每个人或物体都分配了一个 ID,该 ID 在所有帧中保持稳定。对于检测到的每个新 ID,演示者都会使用可视化中的随机颜色列表以不同的颜色绘制它。

  • 00:25:00 在这段视频中,演讲者解决了将所有不同帧和检测的视频保存回本地计算机的问题。创建一个新对象 CV2 video writer 以指定名称和位置保存视频。视频使用 MP4 编解码器和与原始视频相同的帧速率保存。演讲者强调一切都在正常工作,尽管由于上传了很多对象并在 CPU 上运行而无法实现实时检测。总的来说,成功解决了使用YOLOv8进行物体检测和使用Deep SORT进行物体跟踪的问题。

  • 00:30:00 在本节中,演讲者通过回顾使用 YOLOv8 和深度排序成功实施对象检测和跟踪系统所需的最后步骤来结束本教程。他们演示了如何将输出帧保存到 out.mp4 文件中并显示其成功完成。此外,演讲者提到了可能的误检测,并鼓励观众修改检测阈值,以提高系统检测鸟类等物体的准确性。总的来说,本教程可以为任何希望使用计算机视觉技术实现对象检测和跟踪系统的人提供有用的指南。
GitHub - computervisioneng/object-tracking-yolov8-deep-sort
GitHub - computervisioneng/object-tracking-yolov8-deep-sort
  • computervisioneng
  • github.com
Yolov8 object detection + deep sort object tracking ! requirements Deep Sort We are working on this fork from deep sort official implementation. You can download deep sort feature extraction model here. data You can download the same data I use in the video here.
 

使用 Yolov8 自定义数据集进行图像分割 |计算机视觉教程

代码:https: //github.com/computervisioneng/image-segmentation-yolov8

数据: https://drive.google.com/drive/folders/1JvA2IvHBy2QOnAtPtoy4JbEEmtbz5dnK



使用 Yolov8 自定义数据集进行图像分割 |计算机视觉教程

本教程涵盖了注释图像和创建用于语义分割的二进制掩码、格式化和构建数据集以使用 YoloV8 进行训练、在 Google Collab 中训练模型、分析训练结果以及使用 Python 脚本进行预测的过程。演示者强调了构建文件系统以及分析损失函数和验证指标对于为 YoloV8 自定义数据集训练良好模型的重要性。他们还讨论了有缺陷的数据对预测质量的影响,并建议使用当前模型的预测来训练新的和改进的模型。总的来说,本教程提供了使用 YoloV8 自定义数据集进行图像分割的综合指南。

  • 00:00:00 在视频的这一部分,讲师展示了将用于语义分割的数据集:一组具有相应二进制掩码的鸭子图像。二值掩码具有图像中对象的所有白色像素和其他所有内容的所有黑色像素。讲师从开放图像资产版本 7 下载此数据集,并显示网站 cvat.ai 以防需要注释自己的图像数据。然后,讲师展示了如何使用此工具在一个图像注释中为图像创建二进制掩码。

  • 00:05:00 在本教程的这一部分,演示者演示了如何注释图像和创建用于语义分割的二进制掩码。他们以鸭子图像为例,引导观众完成绘制多边形以在鸭子身体周围创建面具的过程,包括讨论是否将水下的某些部分标注为鸭子的一部分。演示者强调蒙版不必是像素完美的,但它应该足够准确以创建一个好的蒙版。最后,他们展示了如何保存和下载带注释的数据以用于创建数据集。

  • 00:10:00 在本节中,演讲者解释了如何格式化和构建数据集,以便使用 YoloV8 训练语义分割模型。第一步是使用“导出任务数据集”选项下载所需数据并选择分段掩码。下载数据后,需要将其组织到包含图像、遮罩和标签的目录结构中。从图像生成的掩码需要通过演讲者提供的 Python 脚本转换为不同的文件格式。 YoloV8 需要这种文件格式,并且包含与二进制掩码相同的信息。演讲者还强调了以特定方式构建文件系统的重要性,这样 YoloV8 才能找到并使用数据。

  • 00:15:00 在本节中,演示者解释了使用 Yolov8 自定义数据集进行图像分割所需的必要目录结构。用户需要有两个目录:一个名为“train”,其中包含语义分割模型的所有训练数据,另一个名为“ball”,包含将用于验证模型的图像。在这些目录中还有另外两个目录——“images”和“labels”——它们都有两个名为“train”和“ball”的子目录。前者包含从训练蒙版生成的所有注释。演示者在pycharm中搭建好结构,接着讲解如何使用Ultralytics预训练好的Yolov8模型训练模型,包括代码实现和配置文件编辑。
     
  • 00:20:00 在本节中,演讲者解释说,语义分割模型是在 Google Collab 中训练的,因为可以使用免费的 GPU,从而使过程更快。演讲者建议在开始该过程之前上传数据,包括目录和图像,以及 config.yaml 文件。此外,演讲者展示并解释了如何执行 Jupiter Notebook 上的每个单元格,并分享了他们的数据在 Google Drive 上的位置,鼓励用户在上传数据时也这样做。最后,演讲者提到安装 Ultralytics 以便他们可以在 Notebook 中使用 YOLOv8,并强调在检查运行时类型时确保使用带有 GPU 的 Google Collab。

  • 00:25:00 在本节教程中,演讲者对模型进行了 10 个 epoch 的训练,并将结果保存在 segment train 2 文件夹下。下一步是分析训练结果以验证一切正常。最简单的方法是将保存结果的目录中的所有内容复制到 Google 云端硬盘。一旦将结果下载到本地计算机上,演讲者建议重点分析损失函数、分割损失、训练损失和验证损失图,以确保损失函数下降。这是一个很好的迹象,表明一切正常,而不断增加的损失函数则表明存在严重问题。

  • 00:30:00 在本节中,演讲者讨论了分析损失函数和验证指标以训练 Yolov8 自定义数据集的良好模型。如果训练和验证损失下降,这是一个好兆头,表明预测质量有提高的趋势。然而,演讲者警告说,训练数据中缺少注释和其他缺陷会影响预测质量,导致损失函数图中出现意想不到的趋势。因此,演讲者建议不要疯狂地分析这些图,并包括对预测的分析以评估模型的整体性能。

  • 00:35:00 在本节中,演讲者讨论了分析在数据集上训练的模型的验证和评估结果的重要性,该模型并不完美且存在错误。这些错误可以通过使用当前模型的预测来训练新的和改进的模型来解决。演讲者展示了保存模型权重的目录,并解释说 last.pt 和 best.pt 分别代表训练过程中表现最好的模型。最后,演讲者推荐使用 less.pt,因为它比 best.pt 模型考虑了更多的信息。

  • 00:40:00 在使用 YOLOv8 自定义数据集进行图像分割的视频教程的这一部分中,演示者演示了如何使用 Python 脚本进行预测。他首先从 Ultralytics 导入 YOLO 包,然后使用结果目录中的 less.pt 定义模型。然后他指定图像路径并导入 CV2 以打开并读取此图像。 Presenter通过在图像上调用模型得到模型结果,并迭代结果得到预测的mask。他将蒙版调整为原始图像的大小并将其另存为 output.png。演示者还展示了如何在原始图像上叠加掩码以确保良好的预测。

  • 00:45:00 在本节中,演示者演示了他们使用 YOLOv8 训练的语义分割模型的结果。使用叠加图像和透明度,他们表明虽然蒙版不是 100% 完美,但考虑到数据中的错误,这是一个非常好的结果。然后,演示者总结了从注释数据、训练模型、验证模型到做出预测的整个过程。最后,他们鼓励观众订阅他们的频道并查看他们发布的其他视频。
GitHub - computervisioneng/image-segmentation-yolov8
GitHub - computervisioneng/image-segmentation-yolov8
  • computervisioneng
  • github.com
Contribute to computervisioneng/image-segmentation-yolov8 development by creating an account on GitHub.
 

使用 Python 在 5 小时内进行 Tensorflow 对象检测 |包含 3 个项目的完整课程

获取代码Tensorflow对象检测Python课程代码: https ://github.com/nicknochnack/TFODCourse

Tensorflow 对象检测 React 应用程序: https ://github.com/nicknochnack/TFODApp

Raspberry Pi 的 Tensorflow 对象检测: https ://github.com/nicknochnack/TFODRPi



使用 Python 在 5 小时内进行 Tensorflow 对象检测 |包含 3 个项目的完整课程


00:00:00 - 01:00:00  “使用 Python 在 5 小时内进行 Tensorflow 对象检测”教程向对象检测初学者教授如何成为熟练的从业者。综合课程涵盖了 TensorFlow 对象检测 API 的安装和设置、收集和标记图像、训练对象检测模型以及使用“冻结”和转换将其导出为 TensorFlow.js 和 TF Lite 等不同格式。该课程是使用 Python 和 TensorFlow 对象检测等开源工具进行的,这些工具可以重新利用代码来检测各种对象。展示的项目包括使用 USB 显微镜检测小零件的缺陷、计算通过网络摄像头的物体数量以及检测视频游戏中的物体。讲师强调了为 TensorFlow Object Detection 设置虚拟环境以及收集和标记具有不同角度、光照条件和无绿屏的良好图像的重要性。

01:00:00 - 02:00:00 这段关于 TensorFlow 对象检测的视频提供了一个分步指南,用于快速制作原型、标记和准备图像数据,并选择使用 TensorFlow 进行对象检测的模型。演示者强调了快速制作原型以建立可行性并为模型确定正确传感器的重要性。该视频介绍了标签图像包和 OpenCV 标签软件,以及创建注释文件来标记图像以进行对象检测的过程。此外,演示者还解释了用于评估模型性能的评估指标,以及如何通过考虑速度和准确性之间的权衡来为每个用例选择合适的模型架构。该视频最后演示了如何安装 TensorFlow、CUDA 和其他必要的对象检测包。 02:00:00 - 03:00:00 “Tensorflow Object Detection in 5 Hours with Python | Full Course with 3 Projects”循序渐进地涵盖了目标检测的整个过程。它首先安装 Nvidia cuDNN、TensorFlow 和预训练模型动物园,然后创建标签映射并生成 tf 记录。随后设置用于训练的配置文件、排除错误、使用 TensorFlow 对象检测库评估模型并运行评估脚本以生成性能指标。 TensorBoard 用于在训练和评估期间查看和跟踪指标。最后,从检查点加载训练好的模型并对图像进行对象检测,然后转换模型以用于各种平台。讨论了性能调整,并演示了如何通过为低性能类收集更多相关的训练图像来提高性能。

03:00:00
- 04:00:00  “使用 Python 在 5 小时内完成 Tensorflow 对象检测”视频提供了有关在 TensorFlow 中构建对象检测模型的综合教程。讲师演示如何实时标记图像、配置管道、训练和调整模型以及测试模型。演示了三个项目,包括使用显微镜进行对象检测、构建 TensorFlow.js 网络应用程序以及执行 Raspberry Pi 情绪检测。该视频强调了图像质量的重要性和调整权衡以提高目标检测性能。鼓励观众在评论部分或 Discord 服务器中要求澄清或提供反馈。

04:00:00
- 05:00:00 本视频教程涵盖了 Tensorflow 对象检测的各个方面,包括如何设置和重置标签、为模型中使用的标签图像、更新标签图、训练模型、评估和改进它的准确性,将其导出并转换为 tensorflow.js,然后在 Raspberry Pi 上运行。讲师还提供有关调试应用程序和操作结果数组的指导。在整个教程中,讲师强调了区分大小写的重要性,并展示了如何组织和移动图像目录、创建自定义模型以及标记收集的图像。本教程最后鼓励观众分享他们在不同设备上运行多个模型的想法。

05:00:00 - 05:25:00 在这个关于使用 Python 进行 TensorFlow 对象检测的完整课程中,讲师讨论了在 GPU 机器上训练模型应用程序(如情感分析)时的常见错误和解决方案。该课程涵盖使用 TensorFlow 对象检测构建和安装 Raspberry Pi 检测模型、安装必要的依赖项(如 OpenCV Python、TensorFlow Lite 运行时)以及通过调整阈值来检测自定义对象并通过添加更多图像和训练来提高模型性能更长时间。该课程最后强调了性能调整的力量,并鼓励观众在需要时寻求帮助。


第1部分

  • 00:00:00 在本节中,讲师介绍了目标检测课程,旨在将目标检测的完全初学者提升为从业者的熟练水平。该课程很全面,涵盖了 TensorFlow 对象检测 API 的安装和设置、图像的收集和标记、模型的训练、将检测模型导出为不同的格式,以及在各种用例上测试模型。该课程全部使用开源工具完成,主要是 Python 和 TensorFlow 对象检测,可以轻松地重新利用代码来检测各种对象。讲师还解释了使用 TensorFlow 对象检测 API 的好处,由于它提供的各种附加功能,它可以加快构建对象检测模型的过程。

  • 00:05:00 在本节中,讲师解释了传统编程和机器学习之间的区别,机器学习不是定义明确的规则来检测对象,而是使用数据和答案来训练对象检测模型来学习规则。该模型可以检测静态图像和实时视频源中的对象,并且可以使用冻结和转换导出并转换为不同的格式,如 tensorflow.js 和 tf lite。性能调整对于提高模型的准确性至关重要,讲师在第六步中介绍了这个主题。最后,讲师演示了三个项目,包括使用 USB 显微镜检测小零件的缺陷、检测视频游戏中的物体以及计算通过网络摄像头的物体数量。

  • 00:10:00 在本节中,讲师介绍了教程中将涵盖的三个项目,其中涉及训练对象检测模型以识别印刷电路板中的缺陷、检测手势并将模型集成到 Web 应用程序中,并使用 Raspberry Pi 进行实时对象检测。讲师在Github上为每个项目提供了三组代码,用于逐步构建模型。第一步是克隆代码并创建一个虚拟环境,这被解释为就像房子里的一个单独房间。本节还包括学习本教程的有用提示,例如在继续之前查看每个步骤、做笔记以及在需要时通过提供的 Discord 服务器寻求帮助。

  • 00:15:00 在视频的这一部分,讲师解释了在使用 TensorFlow 对象检测模型时使用虚拟环境的重要性。他将其描述为在房屋中创建一个新房间,其中安装了所有对象检测依赖项,以确保它们不会与之前安装的库发生冲突。然后讲师介绍了使用 TensorFlow 所需的依赖项,包括 Visual C++ 构建工具,以及用于基于 GPU 的加速的 CUDA 和 CUDNN。他解释说,这些库对于更快地训练对象检测模型至关重要,并展示了如何下载和安装它们。总的来说,本节提供了必要的基础知识来设置用于创建 TensorFlow 对象检测模型的开发环境。

  • 00:20:00 在视频教程的这一部分中,讲师讨论了安装TensorFlow Object Detection 的必要要求,包括需要的Python、GCC 编译器、Bazel、CUDA 和cuDNN 的特定版本。讲师强调,匹配 TensorFlow、CUDA 和 cuDNN 的版本对于在训练期间使用 GPU 至关重要。他们提供了 Windows 和 Linux/macOS 安装指南的链接,并建议观众检查他们的 TensorFlow 版本并获取适当的 CUDA 和 cuDNN 版本。此外,讲师提到他们已经为安装过程中或运行对象检测笔记本时出现的常见问题创建了错误指南。该指南包括针对不同错误的解决方案,可以在提供的 GitHub 存储库链接中找到。

  • 00:25:00 在本节中,讲师展示了如何使用 Python 为 TensorFlow 对象检测设置虚拟环境。他指出了创建环境要遵循的步骤,其中包括克隆具有必要代码和依赖项的存储库、使用 Python 的 venv 包创建虚拟环境以及激活环境。创建虚拟环境类似于在房子里创建一个新房间,在这里可以隔离库和依赖项,以便在隔离环境中处理 TensorFlow 对象检测项目。

  • 00:30:00 在本节中,视频创作者讨论了为 TensorFlow 对象检测 (TFOD) 创建虚拟环境以使训练、应用程序和 Raspberry Pi 代码分开的过程。视频创建者完成激活虚拟环境的步骤,包括在 Windows 机器上运行命令以激活环境。有更新 pip 安装程序然后安装 TensorFlow 的演示。这些更新的好处是能够在站点包文件夹中查看实时安装。需要注意的是,有时安装 TensorFlow 需要多次尝试,视频创作者有一个验证脚本来确保一切都正确安装。

  • 00:35:00 在本节中,演讲者解释了如何使用 iPy Kernel 安装必要的软件包并使用 Jupyter Notebook 设置虚拟环境。他们还为新手提供安装 Anaconda Python 和 Jupyter Notebooks 的说明。然后他们解释了如何安装 iPy 内核并将其与 Jupyter Notebook 相关联以实现更高效的数据科学工作负载。最后,演讲者展示了如何验证虚拟环境并开始收集和标记图像,作为下一步构建 TensorFlow 对象检测模型的一部分。

  • 00:40:00 在本节中,讲师强调了在训练目标检测模型时收集和标记好的图像的重要性。为了演示这一点,他使用 Jupyter notebook 从网络摄像头收集图像,并使用 LabelImg 库来标记图像。讲师分享了在标记时要牢记的最佳做法,例如使标签尽可能紧密,并包括不同角度和不同光照条件下的物体图片。另一个重要的最佳实践是从每个班级的 10 到 20 张图片开始,但讲师从更少的图片开始,并展示了如果性能不理想时如何添加额外的图片以重新训练模型。最后,讲师解释说,为模型提供对象背后没有绿屏的各种图像将使其更通用,并且能够更好地检测对象。

  • 00:45:00 在本节中,讲师将引导观众完成 TensorFlow 对象检测教程的图像采集组件。本教程首先安装 OpenCV,这是一个流行的计算机视觉库,用于访问网络摄像头和收集图像。讲师强调了确保在虚拟环境中安装依赖项以保持控制并确保平稳运行的重要性。然后代码导入必要的依赖项,包括 UUID、OS 和时间,这些依赖项将用于确保符合不同的文件路径和捕获不同角度的图像。然后,本教程定义了要收集的不同标签,并解释了可以根据要检测的所需对象更改标签。标签存储在列表中,教师解释说,为每个标签收集的图像数量由变量“图像数量”定义。

  • 00:50:00 在本节中,讲师讨论了为对象检测设置文件夹结构、开始时拥有大量图像的重要性,以及如何使用网络摄像头或其他捕捉设备捕捉图像。文件夹结构是使用整个教程中应遵循的特定文件路径创建的。代码循环遍历所有标签,连接到网络摄像头,并为每个标签捕获图像。讲师强调了正确指定网络摄像头的视频捕获设备编号的重要性,因为如果不正确,可能会出现错误。

  • 00:55:00 在本节中,讲师解释了用于对象检测的图像采集代码。代码循环遍历标签并使用网络摄像头捕获帧。它创建一个新图像并将其放置在具有唯一标识符名称的相应标签文件夹中。 cv2.iamwrite 命令用于将图像写入文件并显示在屏幕上。该代码还允许用户随时按 q 键退出,并在完成后关闭所有内容。讲师强调,捕捉不同位置的图像对于构建广义模型至关重要。

第2部分

  • 01:00:00 在本节中,演讲者强调了尽快为科学项目制作原型以确定项目的可行性和可能性的重要性。为了说明这一点,演讲者举了一个检测弯曲 LED 的示例,这需要超精确模型或传感器(例如显微镜)。使用移动网络模型和网络摄像头快速制作原型可能会表现不佳,这表明需要不同的技术或传感器。快速制作原型有助于建立改进基线,演讲者继续使用收集的图像训练模型以进行竖起大拇指检测,同时强调删除低质量图像并捕获更多高质量图像以进行更好检测的重要性。

  • 01:05:00 在本节中,讲师介绍了将用于标记图像的 Label Image 包。用户可以去Github仓库查看包。之后,讲师展示了如何安装所需的依赖项,pi qt5 和 lxml,并创建一个名为 tensorflow 和 label image 的新文件夹来保存包。然后,讲师演示如何通过运行特定命令克隆Github存储库并安装标签图像包。最后,教师打开标签图像应用程序并准备对图像进行标签。

  • 01:10:00 在本节中,讲师演示了使用 OpenCV 标记软件为对象检测标记图像的过程。该过程包括打开软件中的特定目录并选择要标记的图像。讲师建议检测标签尽可能精确,并确保标签名称与注释和训练步骤中的名称相匹配。此外,讲师鼓励观众思考物体检测的不同应用,并使用相同的定义标签、收集图像和标记它们的过程来尝试它们。还强调了确保每个图像都存在相应注释的重要性。

  • 01:15:00 在本节中,讲师解释了如何通过创建注释文件来标记图像。注释文件是一个 xml 文件,描述对象在图像中的位置。讲师展示了如何用多个对象标记图像,并解释了如何正确保存注释。可以通过外包或使用更新的工具来扩大标记图像的过程,这些工具使用轻量级对象检测模型自动执行标记过程。

  • 01:20:00 在本节中,视频讲师展示了如何使用标签图像标记图像,以及如何制作原型以确保您在使用数千张图像构建大型对象检测模型之前使用正确的技术。他建议从标记 10-25 张图像开始,以保持超快速度,并使用正确的传感器获取正确级别的数据。讲师还解释了将图像拆分为训练和测试分区的重要性,以便在一段图像上训练模型并在一组从未见过的图像上对其进行测试。他在 images 文件夹中创建了两个名为 train 和 test 的新文件夹,用于存储训练和测试图像以及注释。

  • 01:25:00 在本节中,我们将学习如何准备我们收集和标记的图像数据以训练我们的目标检测模型。我们创建了两个文件夹,training 和 testing,用于存储我们的图像和注释,确保为每个类都抓取图像和注释文件。然后,我们将解释如何将这些转换为 TensorFlow 记录以用于训练。我们还介绍了一些命名和组织数据的最佳实践。最后,我们介绍了训练 TensorFlow 对象检测模型所需的依赖项以及如何使用评估指标评估我们的模型。

  • 01:30:00 在本节中,演讲者讨论了您在训练对象检测模型后获得的评估指标。这些指标包括精度和平均精度 (MAP),它计算正确检测的比例。它们是根据真阳性、假阳性、真阴性和假阴性的数量计算的。演讲者解释说,在评估模型的性能时,准确率和召回率非常重要。此外,演讲者提到 TensorFlow model zoo 的选择会影响模型的准确性和速度。不同的模型具有不同的架构,导致不同级别的准确性和速度,从业者需要为他们的用例选择合适的模型。

  • 01:35:00 在本节中,文字记录讨论了在为 TensorFlow 对象检测选择模型架构时模型速度和准确性之间的权衡。该视频展示了不同的模型选项及其相应的帧速度和平均平均精度分数。演示者指出,某些架构可以快速且高度准确,而其他架构可能较慢但更精确。还提到了使用 TensorFlow 更新检测模型 API 的好处,例如使用预处理和后处理技术以及图像增强。本节最后讨论了如何根据需要使用云实例来训练模型。

  • 01:40:00 在本节中,讲师解释了 TensorFlow 对象检测模型的设置,其中包括设置预训练模型名称和 URL,以及生成 tf 记录脚本和标签映射名称等变量。还显示了模型的文件夹结构,工作区包含注释、图像、模型和检查点的文件夹。下一步是从 TensorFlow model zoo 下载 TensorFlow models 并安装 TensorFlow Object Detection package,讲师一步步指导以确保安装成功。该过程涉及克隆 TensorFlow 对象检测存储库和安装必要的依赖项。

  • 01:45:00 在本节中,演示者解释了如何克隆和安装 TensorFlow 对象检测模型 API。模型API可以从TensorFlow模型园下载,里面有很多文档和开源教程。然后演示者演示如何导航到研究文件夹,其中包含使用 TensorFlow 对象检测模型 API 所需的所有文件。克隆研究文件夹后,演示者继续解释如何安装 protoc 和成功安装 TensorFlow 对象检测模型 API 所需的其他必要组件。最后,演示者展示了如何通过运行验证脚本来检查 TensorFlow Object Detection API 是否已成功安装来验证安装。

  • 01:50:00 在本节中,讲师将完成验证和安装用于对象检测的 Tensorflow 的过程。他解释说,验证脚本用于确保正确安装 Tensorflow,并且可以运行它来检查是否有任何错误。该脚本是标准的Tensorflow对象检测脚本,运行时提示是否安装了Tensorflow。如果 Tensorflow 未正确安装,讲师会提供有关如何配置它的指导,包括安装其他软件包,例如 matplotlib 和 yaml。讲师向观众保证,如果遇到错误,他们可以用谷歌搜索,因为这些错误很常见并且很容易解决。最后,他表示,成功到达验证脚本底部的“okay”标志意味着 Tensorflow 已正确安装。

  • 01:55:00 在本节中,视频介绍了 TensorFlow 的安装过程以及对象检测所需的包。讲师展示了如何安装 TensorFlow、Matplotlib、Protobuf、Pillow 和 Pymel。讲师建议检查安装过程,因为它可能因您的环境而异。该视频还介绍了安装 CUDA 和 CuDNN 的步骤,如果您想使用 GPU 进行训练,则需要这些步骤。讲师解释了如何找到正确版本的 CUDA 和 CuDNN,并完成了安装过程。最后,讲师演示了如何通过重启内核将Object Detection API成功导入notebook。

第 3 部分

  • 02:00:00 在本节中,讲师将介绍下载和安装 Nvidia cuDNN 的过程,如果您在 GPU 上进行训练,这是必需的。首先,你需要注册一个免费的Nvidia Developer账号,然后选择下载cuDNN并登录。有两个版本,你需要下载与你的TensorFlow版本兼容的版本。讲师解释了如何解压缩压缩文件并将 cuDNN 文件复制到 CUDA 安装位置内各自的文件夹中。复制文件后,最后一步是确保将 CUDA 文件夹添加到 Windows 机器上的路径中。

  • 02:05:00 在视频的这一部分,讲师解释了TensorFlow的安装过程以及如何测试它是否正常运行。然后视频转到从 TensorFlow 模型动物园下载预训练对象检测模型的过程,该模型将用于迁移学习以检测自定义对象。讲师演示了如何下载模型并解释了下载文件的不同组件。最后,创建一个标签图来表示自定义对象检测的不同标签。

  • 02:10:00 本节讲师讲解label map的创建和tf records的生成。他强调了正确标记的重要性,因为随后将在整个培训过程中使用标签映射文件。该视频指导生成训练和测试记录,以及如何更新模型的路径组件,特别是微调检查点、标签映射路径和输入路径。最后,他强调了管道配置文件的相关性,它决定了模型的架构,应该针对特定模型进行定制。

  • 02:15:00 在视频的这一部分中,讲师解释了如何设置用于训练模型的配置文件。管道文件是从预训练模型文件夹中复制的,然后通过设置所有不同的文件路径以及类的数量并设置微调检查点、标签映射路径、输入路径等,通过代码完成配置. 设置完成后,可以通过运行带有必要参数(如 pipeline.config 文件路径、管道配置和训练步骤数)的模型训练脚本来训练模型。建议在notebook外单独的命令提示符下运行命令,查看模型训练进度。

  • 02:20:00 本节讲师排查物体检测训练过程中出现的错误。他解释说,大多数错误都可以通过安装正确的库或在线搜索解决方案来解决。他还指出,如果用户想要使用 GPU,他们应该确保他们安装了正确版本的 TensorFlow GPU。然后,讲师指导观众完成卸载和重新安装库的过程以解决特定错误,并强调此过程可能需要一些时间,但对于成功运行对象检测训练是必要的。最后,他向观众展示了如何检查他们是否安装了正确的库以及如何监控训练运行的进度。

  • 02:25:00 在本节中,讲师讨论了训练模型和评估其性能指标的过程。训练开始后,损失指标每 100 步出现一次,表明模型训练正确。生成了2000步训练模型的输出,说明模型训练成功,最终loss为0.188。然后,讲师解释如何使用 TensorFlow 对象检测库评估模型并运行评估脚本,该脚本会为经过训练的模型生成性能指标。然后可以使用 TensorBoard(一种用于 TensorFlow 的交互式监控工具)查看平均精度和召回率指标。

  • 02:30:00 在本节中,讲师将指导观众使用 Tensorboard 在训练和评估期间查看和跟踪指标。通过导航到 train 文件夹,他们可以查看随时间变化的损失指标,通过转到 eval 文件夹,他们可以看到评估指标,例如平均精度、精度和召回率。观看者还可以通过查看图片了解模型的实时表现,是否正确分类,并学习如何将图形冻结后导出。

  • 02:35:00 在本节中,从检查点加载经过训练的模型并对图像执行对象检测。最新的检查点可以在自定义模型文件夹中找到,其中包含管道和所有检查点。导入最新的检查点后,可以选择图像并使用检测功能执行对象检测。检测功能还用于从网络摄像头进行实时对象检测。尽管只训练了 2000 步且图像不多,但该模型在检测不同的手势方面表现良好。

  • 02:40:00 在这一节中,讲师演示了物体检测模型在不同手势上的表现,例如竖起大拇指、竖起大拇指、向下竖起大拇指、长寿和双手。该模型的性能因手势和与相机的距离而异,但可以通过向训练集中添加更多图像来对其进行微调。然后,该部分通过创建冻结图并将其导出到 TensorFlow.js 和 TFLite 来冻结和转换模型。转换后的模型可用于 Web 应用程序或 Raspberry Pi 项目。自定义模型的最终输出类似于预训练模型,具有检查点、保存的模型资产、变量和管道配置。

  • 02:45:00 在本节中,演讲者讨论了需要完成的最后一个转换,即转换为 tf 光。这分两部分完成:首先,将图形导出到 tf lite 图形,然后使用 tf lite 转换器运行它以输出利用它所需的确切输出。演讲者指出,这是端到端模型,他们已经冻结了图形,将其导出到 tfjs 和 tf lite,从而完成了使用 tensorflow 对象检测 API 的完整演练。演讲者还继续讨论了性能调整,并指出了可以提高模型性能的三个关键事项:将更多低性能类别的图像添加到训练数据集中、训练模型更长时间以及更改模型架构。

  • 02:50:00 在视频的这一部分中,演示者演示了如何通过添加更多相关训练图像来提高目标检测模型中表现不佳的类别的性能。演示者没有收集每个班级的图像,而是收集了更多竖起大拇指和不竖起大拇指的图像,这些图像在不同的手上表现不佳。演示者导入 OpenCV 并在仅收集赞成和反对的图像之前更新标签图。收集的图像存储在 Tensorflow 工作区内,演示者在其中对其进行评估并删除质量较差的图像。最后,演示者添加了一些用不同的手表示拇指朝下的图像,以提高模型的性能。

  • 02:55:00 在视频的这一部分中,讲师运行代码来捕获更多拇指向上和拇指向下手势的图像。捕获图像后,教师检查图像的质量并决定保留所有拇指朝上的图像并删除屏幕外的一些拇指朝下的图像。然后教师打开 LabelImg 工具并再次标记新图像,注意标签名称的大小写敏感性。讲师提到标记图像的这一步骤是反复试验,可以评估并查看使模型表现更好的因素。讲师建议研究自动标记工具以提高效率,但建议注意它们的性能以避免任何手动调整的需要。

第 4 部分

  • 03:00:00 在本节中,讲师演示了如何快速标记图像以改进 TensorFlow 对象检测模型的训练。他解释说,重要的是将标记图像复制到训练和测试文件夹中,以便评估模型的准确性。接下来,他展示了如何通过更改训练和检测笔记本中的自定义模型名称来创建新文件夹来训练“调优”模型。然后他讨论了如何将预训练的管道配置复制到新的调优模型中并在管道配置中进行更新。最后,他使用提供的代码配置所有必要的路径,以创建训练所需的新 tf 记录文件。

  • 03:05:00 在本节中,讲师更新了管道配置,该配置定义了使用标准配置进行训练的所有标签映射路径。更新管道是必不可少的步骤,因为它为运行训练脚本铺平了道路。训练步数从之前的配置更新为3000,运行命令创建训练好的模型。完成训练步骤后,通过运行第 7 步下的代码,对该模型进行评估并与之前的模型进行比较。评估指标显示平均精度从 0.7 提高到 0.834,检测速度更快、更准确。通过添加更多图像、附加标签和不同位置,讲师演示如何改进模型并生成更好的对象检测模型。最后加载新模型,运行代码进行实时检测,检测物体非常快速准确。

  • 03:10:00 在本节中,讲师讨论了通过更改模型架构来提高 Tensorflow 对象检测模型性能的方法。为此,用户需要在检测笔记本中更新他们想要使用的预训练模型的链接。通过复制并粘贴新的链接和名称,用户可以将新的预训练模型下载到他们的预训练模型文件夹中。但是,导师强调,通过提高图像质量可以达到更好的效果,例如使用不同风格的图像、不同角度的图像以及更长时间的训练。讲师还展示了如何在 Google Colab 中训练模型,方法是在将图像导入 Colab 上的训练和检测笔记本之前压缩图像并存档。

  • 03:15:00 在本节中,讲师将指导观众完成上传图像以用于 TensorFlow 对象检测程序的过程,以及克隆 TensorFlow 模型存储库和安装 TensorFlow 对象检测软件。引入预训练模型并创建标签图。然后,讲师在训练模型之前在 models/my_ssd_mobnet 文件夹中建立自定义配置。观众会被警告实时物体检测无法通过使用 Colab 的网络摄像头完成,但可以通过图像完成。随着观众逐步完成该过程,他们可以评估他们的模型以查看平均准确率和平均召回率。

  • 03:20:00 在视频的这一部分中,讲师演示了如何使用经过训练的模型检测图像中的对象。加载最新的checkpoint,指定镜像名称运行检测脚本。讲师强调图像必须有效并且位于图像文件夹中。运行单元后,经过训练的对象检测模型会识别图像中的对象。讲师进一步解释了如何压缩和导出文件,并强调在本地运行代码时需要安装对象检测 API。本部分最后预览了接下来将介绍的三个项目,包括使用显微镜进行对象检测、构建 TensorFlow.js Web 应用程序以及执行 Raspberry Pi 情绪检测。

  • 03:25:00 在本节中,讲师首先解释第一个项目,该项目涉及使用 USB 显微镜检测小型 LED 中的缺陷。显微镜像任何其他相机一样处理,视频源是使用 OpenCV 库获取的。讲师演示如何使用 Python 代码定位和缩放显微镜并显示视频源。然后使用视频馈送来收集用于对象检测的训练图像。该项目的目标是训练一个模型来检测 LED 中的缺陷并将它们分类为弯曲或未弯曲。

  • 03:30:00 在包含三个项目的 TensorFlow 对象检测完整课程的这一部分中,讲师展示了如何使用 OpenCV 从网络摄像头或显微镜源中捕获图像。他回顾了释放捕获设备和销毁任何 OpenCV 窗口的最佳实践,包括在关闭任何 cv2 网络捕获后运行“cap.release”。然后,他演示了如何调整显微镜的位置和焦点以捕获 LED 引脚的图像,以及如何创建两个新文件夹来存储有缺陷和无缺陷引脚的图像。最后,他测试了用于图像捕获的网络摄像头馈送,以确保一切都按预期工作。

  • 03:35:00 在视频的这一部分中,讲师演示了如何收集有缺陷的引脚和无缺陷引脚的图像以进行对象检测。他们定位引脚并调整图像捕获之间的休眠时间,然后使用休眠功能在捕获之间暂停。讲师还解释了如何使用标签线和文件夹位置来标记图像。他们鼓励观众在评论部分或 Discord 服务器中要求澄清或提供反馈。

  • 03:40:00 在这部分视频中,讲师介绍了使用 TensorFlow 标记图像以训练自定义对象检测模型的过程。讲师使用显微镜捕捉有缺陷和无缺陷引脚的图像,并相应地标记它们。然后,他们在设置训练管道之前将图像复制到训练和测试文件夹中。讲师解释了他们将如何为他们的自定义对象检测模型创建一个新文件夹并更新标签映射以包含新标签。本节中使用的代码库非常通用,允许进行大量自定义,并且讲师提供了有关性能调整的提示。

  • 03:45:00 在教程的这一部分,重点是创建 TensorFlow 记录,这允许模型的训练。讨论了下载预训练模型和创建标签映射的必要单元,但重点是创建 TensorFLow 记录,这将允许训练模型。创建 TensorFlow 记录后,模型将使用新类进行更新,并保存更新后的配置。该模型训练了 2000 步,并测试了新模型以检测有缺陷和无缺陷的引脚。笔记本被勾勒出来,用户被引导到允许这个模型开发的特定单元格。

  • 03:50:00 在本节中,讲师更新图像以检测有缺陷的引脚和无缺陷的引脚。系统以高置信度成功检测到两个引脚。但是,讲师注意到系统在特定位置的有缺陷的引脚上表现不佳,突出了调整权衡。讲师展示了检测框架具有可以修改的参数,以确定检测精度的级别。通过降低最小分数阈值,系统可以相当好地检测到有缺陷的引脚,但代价是将许多其他东西检测为有缺陷。讲师使用不同颜色的引脚测试系统,包括未受过训练的引脚,并以一定角度测试系统,以显示系统的稳健性。

  • 03:55:00 在本节中,讲师演示了第一个项目的结果,同时使用显微镜作为物体检测方法。他指出检测到的引脚以及如何通过改变引脚的角度和位置将它们分类为有缺陷或无缺陷。他总结了第一个项目的过程,包括捕获和标记图像、设置显微镜文件夹以及训练模型。下一个项目的重点是构建一个用于检测物体方向的网络应用程序。这涉及将 TensorFlow 对象检测课程中的代码与 TensorFlow 对象检测应用程序 Github 存储库相结合。目标是检测可以在未来部署为网站的上下左右移动。

第 5 部分

  • 04:00:00 在视频的这一部分中,讲师解释了如何设置和重置 Tensorflow 对象检测的标签。他们没有定义标签,例如竖起大拇指或竖起大拇指,或者有缺陷和无缺陷的引脚,而是演示了如何定义方向运动,例如左、右、上和下。然后,他们展示了如何为不同的方向创建文件夹并收集图像以用于训练。讲师还解释了如何使用 LabelImg 标记图像,注意图像案例,并在结果不佳的情况下建议性能调整。最后,他们继续演示如何为正确的方向标记图像。

  • 04:05:00 在这部分视频中,讲师演示了如何标记图像以用于对象检测模型。每个对象/类别仅使用五张图像,但用户可以根据需要调整数量。指导老师提示,这是一个迭代的过程,用不同数量的图像进行实验是可以的。一旦图像被标记,它们就会被分类到训练和测试文件夹中,每个图像/类按 80/20 的比例分配。设置文件夹后,教师更改文件夹的名称并创建一个名为“directions”的新文件路径。最后,讲师指出虚拟环境已经设置好,不需要执行任何额外的步骤。

  • 04:10:00 在本节中,标签地图更新为“左”、“右”、“上”和“下”的新标签,并为每个标签分配了唯一标识符。然后运行注释以更新标签映射并生成所需的训练和测试 tfrecord 文件。然后使用生成训练脚本的命令对模型进行训练,计算出损失为 0.299。恢复检查点 3 以导入实时检测的依赖项,并将最低分数阈值设置为 90。最后,激活网络摄像头为对象检测模型生成实时检测。

  • 04:15:00 在本节中,讲师将展示如何通过添加更多表现不佳的特定类别的图像来评估模型并提高其准确性。他通过指向来证明这一点
    用双手向不同方向移动并查看模型的性能。然后他继续冻结图形,将其导出并将其转换为 tensorflow.js。他还解释了如何将模型上传到 IBM Cloud Object Store 并演练 github 存储库中可用的步骤。然后,讲师继续克隆存储库,打开一个新的命令提示符,并展示如何导航到正确的文件夹。

  • 04:20:00 在视频的这一部分中,讲师正在逐步演练如何准备使用 TensorFlow 对象检测进行图像识别的开发环境。讲师首先展示如何导航到必要的文件夹并克隆 TensorFlow 对象检测存储库。然后,讲师展示了如何安装 Node.js 和存储库的依赖项。最后,讲师演示了如何在 IBM Cloud 上创建一个新的云对象存储桶以及如何命名它。在视频的后面部分中使用基于 Web 的用户界面需要此过程。

  • 04:25:00 在本节中,讲师继续教程中的第五步,即在 IBM Cloud Object Storage 中创建一个存储桶并将 model.json 和 .bin 文件上传到其中。接下来,他启用了公共访问策略,允许从任何位置访问模型,并展示了如何获取 model.json 文件的 URL 以供以后在应用程序中使用。然后,他通过在安装 IBM Cloud Object Storage CLI 后运行 CLI 命令来完成启用跨源资源共享 (CORS) 的过程。

  • 04:30:00 在本节中,视频演示了如何通过命令行界面安装 IBM Cloud CLI 和 IBM Cloud Object Storage CLI,从而启用跨源资源共享 (CORS),从而允许 Web 应用程序访问 URL从别的地方。该命令还会安装 IBM Cloud Storage Client 并使用配置文件对其进行配置。该视频展示了如何将用户存储桶的名称替换为将原因策略放入存储桶根文件夹的命令。最后,视频解释了原因策略包含在云配置文件中并且是克隆存储库的一部分,这意味着不需要创建文件。

  • 04:35:00 在本节中,讲师解释了如何更新运行 TensorFlow.js 网络应用程序所需的文件。这些步骤包括设置 Google Cloud Storage 凭据、更新 app.js 中的模型 URL、更新 utilities.js 中的标签映射以及使用 npm start 启动应用程序。讲师还解释了如何调试应用程序(如果它不工作),包括更改置信度指标和检查检测结果数组中对象的顺序。总的来说,这些步骤允许用户根据他们的特定用例自定义 Web 应用程序并确保它正常运行。

  • 04:40:00 在本节中,视频展示了如何计算出对象的位置以及如何操作结果数组。通过检查代码,用户可以确定结果数组包含五个值,并且每个数组都有不同的类可用于特定的应用程序。该视频进一步指导用户如何正确使用每个对象数组,例如对象三,这是由非常低的数字表示的非后处理框类。然后,该视频展示了如何更改置信度指标和得分值以及调整框值,用户可以通过更改框数组的值快速完成这些操作。

  • 04:45:00 在本节中,视频结束了第二个项目,然后转到第三个项目,该项目涉及在 Raspberry Pi 上运行对象检测模型。演讲者指出,由于没有 GPU,在树莓派上运行物体检测模型与前两个项目不同,因此他们会专门将模型转换为 Tensorflow lite 格式。他们将收集快乐和悲伤面孔的图像,并使用与以前相同的过程来训练他们的模型。但是,他们将在该项目中使用 Raspberry Pi,并将通过远程桌面进入其中进行检测。视频最后提到了在不同设备上运行多个不同模型的可能性,并鼓励观众分享他们对这个话题的想法。

  • 04:50:00 在视频的这一部分,讲师演示了如何为识别快乐和悲伤面孔的情绪检测器收集和标记图像。该过程包括删除现有图像、为新图像创建路径、收集每种情绪的五张图像、标记图像以及保存每个对象。讲师提醒观众区分大小写对于标注至关重要,并且本练习不需要绿屏。此外,讲师指出,用户始终可以返回图像目录来更新图像标签。

  • 04:55:00 在本节中,讲师展示了如何将收集的图像和注释组织和移动到训练和测试文件夹中。他们演示了如何创建新的自定义模型并通过更新标签图将收集到的图像标记为快乐和悲伤。然后他们创建 tf 记录并将预训练模型配置复制到自定义模型文件夹。更新配置后,他们使用生成的命令训练模型,该命令在虚拟环境中运行,并等待过程完成。

第 6 部分

  • 05:00:00 在本节中,讲师将讨论在 GPU 机器上运行情感模型时可能出现的常见错误。错误信息表明GPU被完全消耗,导致系统运行不正常。为了解决这个问题,用户需要在任何时间点停止任何可能使用 GPU 的东西,然后重新开始训练运行。训练完成后,用户可以导入操作系统和这些路径,并检查最新的检查点。讲师还实时演示了情感模型的使用,一旦系统设置完成,这是一个快速简单的过程。

  • 05:05:00 在本节中,讲师解释了使用 TensorFlow 对象检测构建 Raspberry Pi 检测模型所需的步骤。第一步是通过学习 TensorFlow 对象检测课程来创建 TfLite 文件。接下来,用户应该克隆 Raspberry Pi 检测存储库,将其下载到他们的 PC,或从 Raspberry Pi 克隆它。一旦完成,用户应该安装所需的依赖项,复制他们转换后的模型,并使用现有的 detect.tf lite 模型运行它。讲师还演示了如何使用 xrdp 将远程桌面连接到 Raspberry Pi,从而使该过程更加简单。

  • 05:10:00 在本节中,讲师将逐步介绍在 Raspberry Pi 上安装使用 TensorFlow 的对象检测 API 所需的所有依赖项的过程。讲师演示了如何安装 OpenCV Python,以及 OpenCV 在 Raspberry Pi 上工作所需的其他几个依赖项。之后,讲师安装 TensorFlow Lite 运行时,这是在 Raspberry Pi 上运行 TensorFlow Lite 模型所必需的。安装完所有依赖项后,他们将在 Raspberry Pi 上运行示例对象检测模型以展示其工作原理。最后,讲师解释了如何向系统添加自定义模型和标签。
     
  • 05:15:00 在本节中,讲师讨论了自定义对象检测以及如何调整检测阈值以获得更好的结果。自定义对象检测包括两个标签;快乐和悲伤。教师将标签的顺序调整为快乐作为第一个对象,悲伤作为第二个对象。通过运行自定义模型,它没有检测到任何对象,教师决定将检测阈值降低到 20%。重新运行命令后,模型检测到对象;一个大的悲伤和一个快乐的对象。讲师强调需要用更多图像训练模型以获得更好的性能结果。讲师通过添加更多表演课程的图像和更长时间地训练模型来执行额外的性能调整。

  • 05:20:00 在本节中,演讲者解释了他如何改进情绪分析模型的性能。首先,他添加了自己不同角度的额外图像,这增加了模型泛化良好的机会。其次,他将自己的模型训练了 5600 多步,让他有了一个具有更大索引检查点的全新模型。然后,他将这个新模型转换成一个冻结的 tf-lite 图表,并将其导入 Raspberry Pi,他用它来检测他是快乐还是悲伤。演讲者证明,绿色屏幕向上或向下不会影响他的模型的性能,并且能够正确检测到他何时高兴或悲伤。演讲者强调了性能调优的力量以及如何使用它来提高模型的准确性。

  • 05:25:00 最后的摘录总结了使用 Python 进行 5 小时 Tensorflow 对象检测课程,讲师提醒观众如果需要进一步的帮助,请在评论中或通过 Discord 频道联系我们。该课程对想要了解对象检测并希望深入了解 Tensorflow 的观众很有帮助,因为它涵盖了课程本身的三个项目。
GitHub - nicknochnack/TFODCourse
GitHub - nicknochnack/TFODCourse
  • nicknochnack
  • github.com
This set of Notebooks provides a complete set of code to be able to train and leverage your own custom object detection model using the Tensorflow Object Detection API. This accompanies the Tensorflow Object Detection course on my YouTube channel. Steps Step 1. Clone this repository: https://github.com/nicknochnack/TFODCourse Step 2. Create a...
 

使用 Tensorflow 和 EasyOCR 自动车牌识别 2 小时全程 | Python

最终笔记本:https: //github.com/nicknochnack/RealTimeAutomaticNumberPlateRecognition

基线代码:https: //github.com/nicknochnack/TFODCourse



使用 Tensorflow 和 EasyOCR 自动车牌识别 2 小时全程 | Python

名为“使用 Tensorflow 和 EasyOCR 自动车牌识别 2 小时完整课程 | Python”的 YouTube 视频提供了使用 Tensorflow 和 EasyOCR 构建准确高效的自动车牌识别 (ANPR) 系统的综合指南。 ANPR 系统采用两部分系统,TensorFlow 用于检测感兴趣的车牌区域,而 EasyOCR 从检测到的区域中提取文本。该视频涵盖了一系列主题,从设置虚拟环境和安装必要的依赖项,到准备训练数据和解决训练过程中可能出现的错误。总体而言,观众可以详细了解如何构建具有实时或标准图像检测功能的生产级 ANPR 系统。

关于使用 TensorFlow 和 EasyOCR 进行自动车牌识别 (ANPR) 的 YouTube 教程涵盖了如何使用对象检测准确检测车牌以及如何使用 OCR 提取车牌号。讲师讨论如何根据大小和坐标过滤文本以仅从盘子中提取相关信息。他们演示了如何为 TensorFlow 分配 GPU 资源和限制内存消耗,提取通过检测阈值的图像分数、类和框,以及使用 EasyOCR 应用 OCR。此外,该视频还介绍了如何将输出结果保存到 CSV 文件和文件夹路径以获取实时和图像结果。演讲者强调代码可供观众使用,并鼓励他们寻求帮助并分享他们的反馈。

  • 00:00:00 系统是 OCR 或光学字符识别。此步骤涉及使用名为 EasyOCR 的库从检测到的车牌提要中提取文本,使我们能够实时或在标准图像上读取和分析车牌中的文本。此外,该课程还包括构建一个更高级的系统,该系统通过保存和记录先前检测到的板及其感兴趣区域来模拟生产级预构建 AMPR 系统。总体而言,该课程提供了使用 Tensorflow 和 EasyOCR 构建准确高效的自动车牌识别系统的综合指南。

  • 00:05:00 这部分,主持人解释了用于自动车牌识别的两部分系统。第一部分使用 TensorFlow 对象检测模型来检测感兴趣区域,即车牌。第二部分使用 EasyOCR 从检测到的区域中提取文本。演示者演示了如何安装必要的组件,包括 TensorFlow 和 EasyOCR,并提供了指向包含所需文件的 GitHub 存储库的链接。演示者解释了如何克隆存储库并显示了由此创建的文件夹的内容。该文件夹包含一个笔记本文件,用于训练和检测车牌。

  • 00:10:00 在视频的这一部分,演示者完成了设置虚拟环境和安装必要的依赖项以使用 TensorFlow 和 EasyOCR 运行自动车牌识别 (ANPR) 的步骤。演示者首先克隆 ANPR 存储库并使用 Python 创建虚拟环境。然后他激活虚拟环境并安装重要的依赖项,例如ipi内核并升级pip。通过这些步骤,他演示了如何将虚拟环境关联到 Jupyter notebook 以充分利用 ANPR 的全部功能。

  • 00:15:00 在本节中,讲师以“ampr sys”环境为例,引导观众完成将虚拟环境关联到 Jupyter Notebook 的过程。讲师指出这很重要,因为通常,使用虚拟环境的人会将所有东西安装到他们的环境中,但是当他们进入他们的 Jupyter Notebook 时,它仍然说它不在那里。一旦虚拟环境与 Jupyter Notebook 相关联,讲师就会指导观众完成安装 TensorFlow 对象检测 API 和设置文件夹结构的过程,以便能够使用 TensorFlow 执行对象检测。

  • 00:20:00 在本节中,讲师首先解释迁移学习的概念,即可以针对特定用例(例如检测车牌)对现有的最先进模型进行微调。然后,讲师继续从 TensorFlow Model Zoo 下载预训练模型,并通过运行多个代码单元来安装 TensorFlow 对象检测 API。将 API 及其组件(例如对象检测文件夹)克隆到 TensorFlow 模型园存储库中,并启动 TensorFlow 对象检测模型的安装。安装涉及几个依赖项和 protoc,protocol buffers 系统,可能需要一些时间才能完成。

  • 00:25:00 在本节中,讲师将逐步安装 TensorFlow 及其 GPU 版本。他们安装了仅与 Nvidia GPU 兼容的 TensorFlow 2.4.1 和 TensorFlow GPU 2.4.1。他们展示了如何通过运行验证脚本来验证安装是否成功,最后应该输出“Ok”。讲师还演示了如何解决安装过程中可能出现的任何“找不到模块”错误,例如使用pip 安装Matplotlib 和Pillow 库。验证脚本确保在继续下一节之前安装所有必要的依赖项。

  • 00:30:00 在视频的这一部分,演示者介绍了构建对象检测模型所需的各种模块的安装过程,特别是车牌识别。他们在安装过程中遇到了几个错误,但他们介绍了如何解决这些错误。一旦安装了所有必要的模块,包括 TensorFlow 对象检测和 EasyOCR,演示者将继续下一步,处理数据,并引入一个包含汽车图像和牌照注释的 Kaggle 数据集。他们演示了如何下载和准备用于模型的数据集。

  • 00:35:00 在本节中,讲师讨论如何下载自动车牌识别 (ANPR) 所需的数据,并将其组织到用于对象检测的训练和测试集中。包含注释和相应图像的数据从 Kaggle 下载并解压缩到 ANPR 文件夹中。在 images 文件夹中新建两个文件夹,一个用于训练,一个用于测试,将下载的图像复制到 train 文件夹中。注释也分为训练集和测试集,训练注释与相应的图像一起放在训练文件夹中。这些单独的集合的目的是在一组数据上训练对象检测模型,并在独立的集合上对其进行测试以评估其性能。

  • 00:40:00 在本节中,视频讨论了为训练车牌检测模型准备数据的过程。演示者解释说,他们从 Kaggle 下载车牌图像,并将相应的注释复制到 TensorFlow 工作区内的两个新文件夹“train”和“test”中。下一步是训练对象检测模型,包括更新标签、创建 tf 记录、准备配置,最后训练模型。演示者使用“标签映射”来识别他们将使用的一个标签“许可”,然后创建一个 tf 记录,这是对象检测模型所需的格式。该过程被描述为简单明了,并提供了生成 tf 记录的脚本。

  • 00:45:00 在本节中,视频介绍了如何使用 TensorFlow 和 EasyOCR 准备训练数据。这里讨论的脚本将原始数据(包括图像和注释)转换为 tf 记录格式,但由于 Kaggle 数据集中的注释格式略有不同,因此需要更新。该视频展示了如何修复由于这种差异而产生的错误,包括安装缺失的模块、更改索引以获取正确的边界框指标,以及将预训练模型配置复制到训练文件夹。

  • 00:50:00 在本节中,演讲者详细介绍了预训练模型管道,其中包含需要在训练模型之前更新的不同配置行。演讲者演示了如何复制更新的配置文件以确保更新参数并运行训练命令来训练模型。他们还提到了在外部运行命令以正确查看进度的重要性,以及如何激活虚拟环境来运行命令。最后,他们解释了如何解决安装模型时可能出现的标准错误。

  • 00:55:00 在课程的这一部分,讲师解决培训期间可能出现的错误。他演示了如何解决特定问题,例如与 numpy dot nd 数组大小更改相关的值错误、cv2 的模块未找到错误、tensorflow 附加组件的模块未找到错误以及 gin 的模块未找到错误。讲师解释说,这些错误并不少见,必须安装所需的库来解决这些错误。训练模型后,讲师将展示如何读取损失指标以及如何找到最近训练的模型检查点。

  • 01:00:00 在使用 Tensorflow 和 EasyOCR 进行自动车牌识别的视频教程的这一部分中,讲师介绍了如何使用同一模型从图像中或实时检测车牌。通过更改图像文件名,模型可以准确检测和分类不同类型的板材。发现这种方法通过物体检测比利用传统的计算机视觉技术表现得更好,因为印版的格式可能会有所不同。该模型还可以从实时视频流中检测车牌,或者通过在汽车车牌前举起手机来检测车牌。讲师强调该方法非常高效,是构建车牌检测器的良好开端,下一步是应用 OCR 组件从图像中提取有意义的数据。

  • 01:05:00 在本节中,视频教程讨论了如何使用开源库 EasyOCR 从图像中检测和提取文本以识别车牌号。该教程指出,虽然有更准确的 OCR 模型可用,但在 PyTorch 上运行时使用 EasyOCR,需要为 GPU 留出一些空间才能与 TensorFlow 一起运行,而不会消耗所有 GPU 内存。本教程展示了如何为 TensorFlow 分配 GPU 资源并限制内存消耗,以便让 EasyOCR 顺利运行。

  • 01:10:00 在本节中,演讲者解释了如何使用 TensorFlow 和 EasyOCR 加载自动车牌识别 (ANPR) 所需的文件路径和标签,以及如何安装具有 CUDA 加速功能的 EasyOCR 和 PyTorch。他们演示了在加载示例图像并执行 ANPR 后,车牌号和检测分数存储在名为“检测”的变量中,然后用于使用 EasyOCR 应用 OCR。检测阈值设置为 0.7,只允许进一步处理分数高于 0.7 的检测。

  • 01:15:00 在本节中,讲师解释了如何使用几行代码来提取通过检测阈值的图像分数、类和框。他们演示了如何遍历检测分数数组中的每个值,并且只返回超过阈值的分数。他们还将过滤器应用于框和类,以确保它们的大小和格式适合网络摄像头。最后,他们获取图像的宽度和高度以重新计算框坐标并对图像应用过滤以确定感兴趣区域。

  • 01:20:00 在本节中,视频演示了如何从图像中提取感兴趣区域并应用光学字符识别 (OCR) 提取车牌结果。首先通过image.shape获取图片的宽高参数。要提取 ROI,循环遍历代表检测坐标的 boxes 变量中的每个框,并过滤出感兴趣的区域。最后,使用 EasyOCR 将 OCR 应用于 ROI,并将结果打印到控制台。该视频向观众展示了设置 EasyOCR 阅读器、传递语言参数以及解析图像以提取车牌结果的过程。

  • 01:25:00 在本节中,演示者讨论了如何使用 OCR(光学字符识别)有效地从印版中提取印刷版或文本。他们展示了一个示例图像,其中除了车牌号外还有额外的文本,这可能会使 OCR 阅读器感到困惑。为了解决这个问题,演示者建议根据大小和坐标过滤结果。他们演示了如何编写一个函数来执行此过滤并将其应用于图像以获取适当的文本。结果表明,OCR 阅读器可以准确提取车牌号,尽管 OCR 模型仍有改进的空间。

  • 01:30:00 在本节中,演讲者介绍了一个名为“过滤文本”的新功能。此函数采用三个参数:区域、OCR 结果和区域阈值。区域代表图像,OCR结果代表从EasyOCR中提取的文本,区域阈值是检测车牌区域的大小阈值。该函数循环遍历 OCR 结果,提取每个结果的长度和宽度,将它们相乘,然后将它们与区域阈值进行比较。如果它通过了这个过滤器,它就被认为是文本,它的区域被存储在一个叫做“plate”的变量中。演讲者还解释了一些计算区域大小的代码部分,并说明了过滤器的工作原理。

  • 01:35:00 在本节中,作者展示了如何使用 OCR 引擎有效地过滤掉图像中的文本。 filterText 算法将允许用户为区域指定一个阈值,它将只过滤掉满足或超过该阈值的文本块。他们使用此功能来提取所需的组件,而不是从盘子中检索所有内容。他们还创建了一个 OCR_it 函数,它结合了 OCR 过滤器和 OCR 组件,并且可以在通过相应阈值的图像和检测后将其应用于任何图像。

  • 01:40:00 在本节中,讲师通过将图像传递给具有指定检测和区域阈值的“ocr_it”函数来测试他们的光学字符识别 (OCR) 方法。该方法能够准确提取图像中的车牌及其区域。然后,他们演示了实时应用 OCR 方法来检测车牌,使用 try-except 块和为每次有效检测调用 OCR 函数的新代码。讲师在他们的手机上测试了实时检测,并表明它可以准确地检测和提取车牌文本,但结果并不完美,还可以进行一些调整。

  • 01:45:00 在这一段视频中,导师讲解了如何保存自己开发的OCR系统的输出结果。他们创建了一个名为“save_results”的新函数,它将文本、区域、文件名和文件夹作为输入参数。然后他们使用 uuid 库生成唯一的文件名,并使用 csv 库将输出结果保存到 csv 文件中。他们还使用 cv2 库将图像写入所选文件夹。最后,他们将代码打包并进行测试。

  • 01:50:00 在视频的这一部分中,讲师演示了如何设置 CSV 文件和文件夹路径以写出所有图像结果或区域。他们创建了一个名为 detection_images 的新文件夹,其中将写入所有图像结果。讲师演示如何通过CSV文件名和文件夹路径,然后测试代码保存结果。他们设置了一个保存结果的方法,将结果写入创建的文件夹,其中包括图像名称和车牌号。然后,讲师演示如何实时运行代码以在检测发生时保存结果。最后,他们测试了代码,结果是在实时保存结果的同时准确输出图像。

  • 01:55:00 在本节中,演讲者告知观众,他们可以使用实时构建的OCR功能和应用的过滤算法。他鼓励观众在遇到任何困难时寻求帮助,并提到代码将在 GitHub 上提供,供他们使用。最后,他感谢观众收看,请他们点赞、订阅和评论,然后退出。
GitHub - nicknochnack/RealTimeAutomaticNumberPlateRecognition
GitHub - nicknochnack/RealTimeAutomaticNumberPlateRecognition
  • nicknochnack
  • github.com
Contribute to nicknochnack/RealTimeAutomaticNumberPlateRecognition development by creating an account on GitHub.
 

3 小时强化学习 |使用 Python 的完整课程

代码:https: //github.com/nicknochnack/ReinforcementLearningCourse



3 小时强化学习 |使用 Python 的完整课程

00:00:00 - 01:00:00  “3 小时强化学习”视频课程涵盖强化学习的一系列主题,包括实际实施和弥补理论与实践之间的差距。该课程涵盖从设置 RL 环境到构建自定义环境的所有内容,重点是训练强化学习代理并使用不同的算法和架构对其进行评估。讨论了机器人和游戏等流行的 RL 应用,以及 RL 的局限性,例如环境是马尔可夫的假设和不稳定训练的可能性。该课程使用开源 RL 库 Stable Baselines 和 OpenAI Gym 来构建模拟环境。讲师解释了用于表示代理在环境中可以采取的行动和价值的不同类型的空间,以及不同的 RL 算法,例如 A2C 和 PPO。强调在实施算法之前了解环境的重要性,并指导用户建立强化学习的计算平台、选择合适的 RL 算法以及训练和测试模型。

01:00:00
- 02:00:00 这个 YouTube 视频提供了一个关于使用 Python 进行强化学习的三小时课程。讲师解释了强化学习的核心组成部分,包括代理、环境、行动和奖励。本节讨论如何定义环境、使用强化学习训练模型以及使用 TensorBoard 查看训练日志以监控训练过程。讲师还涵盖了其他主题,例如保存和重新加载经过训练的模型、测试和改进模型性能、为神经网络中的自定义参与者和价值函数定义网络架构,以及使用强化学习玩 Atari 游戏 Breakout。此外,该课程还包括学习者将使用强化学习技术构建的三个项目,包括 Atari 中的 Breakout 游戏、构建自动驾驶赛车以及使用 OpenAI Gym 空间创建自定义环境。

02:00:00 - 03:00:00 这段名为“3 小时强化学习 | 使用 Python 的完整课程”的 YouTube 视频涵盖了与强化学习相关的各种主题。讲师演示了如何使用赛车环境为 Atari 游戏和自动驾驶训练强化学习代理。他们还介绍了各种 OpenAI gym 依赖项、助手和稳定基线,以及用于强化学习的不同类型的空间。此外,该视频还介绍了如何为强化学习创建自定义环境、定义环境状态、观察和操作空间、测试和训练模型以及在学习后保存训练好的模型。讲师还讨论了长时间训练模型以获得更好性能的重要性,并鼓励观众在遇到任何困难时伸出援手。

  • 00:00:00 在视频的这一部分中,演示者介绍了强化学习课程并概述了整个课程中将涵盖的不同主题。他解释说,该课程旨在弥合理论与实际实施之间的差距,涵盖从设置 RL 环境到构建自定义环境的所有内容。演示者对强化学习、其应用及其一些局限性进行了高级概述。该课程将提供培训强化学习代理以及使用不同算法和架构测试和评估它们的实践经验,并涵盖三个不同的项目,重点是突破环境、自动驾驶环境和自定义环境。

  • 00:05:00 在“3 小时强化学习”视频的这一部分中,讲师解释了强化学习的基本概念。强化学习代理根据它通过采取不同的行动从环境中获得的奖励来学习。代理观察环境以通过做出某些决定来随着时间的推移最大化其奖励。讲师还讨论了强化学习的一些实际应用,例如自动驾驶、证券交易和神经网络架构搜索。

  • 00:10:00 在本节中,视频讨论了强化学习的一些流行应用,包括机器人技术,其中模拟环境可用于训练机器人执行特定任务。该视频还提到游戏是另一种流行的应用程序,每次奖励功能都可能不同,使其成为强化学习的合适环境。还讨论了强化学习的局限性,包括环境是马尔可夫的假设以及训练可能耗时且不稳定的事实。讨论了强化学习模型的设置,其中包括从 OpenAI 安装稳定的基线库并利用其有用的指南和文档。

  • 00:15:00 在本节中,讲师介绍课程并概述将涵盖的 10 个不同步骤。第一步是导入和加载必要的依赖项,包括稳定基线,一个用于强化学习的开源库。讲师解释了库中可用的不同算法,以及使用 PPO(近端策略优化)的好处。依赖项还包括用于操作系统功能的 OS 和用于构建和使用环境的 gym。总的来说,这个过程很简单,只需要几行代码就可以开始使用稳定的基线。

  • 00:20:00 在本节中,讲师讨论了强化学习所需的依赖项和环境。他们引入了 Stable Baselines,它允许通过环境矢量化和 Dummy Vec Env 包装器更快地进行机器学习。他们还解释了如何使用 OpenAI Gym 构建模拟环境,从而降低成本并加快模型生产速度。他们提供了真实环境的例子,比如机器人,以及模拟环境,比如 OpenAI Gym,它有很多文档和支持。

  • 00:25:00 在视频的这一部分中,讲师讨论了创建强化学习环境的标准,即OpenAI Gym。他解释说,OpenAI Gym 提供预建环境,包括那些基于实际机器人的环境,例如 Fetch Robot 和 Shadow Hand Robot。他进一步解释了 OpenAI Gym 支持的不同类型的空间,包括 box、discrete、tuple、dict、multi-binary 和 multi-discrete。他指出,这些空间用于表示代理人可以在环境中采取的不同类型的价值观或行动。然后,讲师介绍了经典控制环境,特别是 CartPole 问题,作为他将用来训练强化学习代理的示例。目标是通过使用两个动作将光束向左或向右移动来平衡光束。

  • 00:30:00 在本节中,讲师解释了如何使用 OpenAI Gym 加载和测试环境。他们首先使用两行代码实例化 CartPole-v0 环境。然后,他们演示了如何通过循环多个情节并使用 env.reset() 获取初始观察集来测试环境。这些观察结果稍后将传递给强化学习代理,以确定最大化奖励的最佳行动。讲师指出在实施任何算法之前了解环境的重要性。

  • 00:35:00 在本节中,讲师解释了用于在强化学习中对环境进行采样的代码。该代码为环境设置最大步数,设置得分计数器,并根据环境定义的动作空间生成随机动作。每个动作后环境返回的观察结果都附有奖励和指示事件是否完成的值。测试结果打印出来,环境关闭。讲师还解释了观察空间的概念并演示了如何对其进行采样。

  • 00:40:00 在本节中,讲师解释了环境的两个部分,即动作空间和观察空间,以及它们在 OpenAI Gym 文档中的表示方式。观察空间由四个值组成,分别代表小车位置、速度、极角和极角速度。另一方面,动作空间有两个可能的动作,零或一个,其中零将购物车推向左侧,一个将购物车推向右侧。本节还重点介绍了强化学习中不同类型的算法、基于模型的和无模型的,以及它们之间的区别。讲师专注于无模型强化学习,并深入研究了A2C和PPO算法,这些算法将在训练阶段使用。

  • 00:45:00 在视频的这一部分,讲师解释了如何根据所使用环境的动作空间选择合适的强化学习算法。他接着解释了 Stable Baselines 中可用的不同类型的算法,例如 A2C、DDPG、DQN、HER、PPO、SAC 和 TD3,以及它们最适用于哪些动作空间。讲师还讨论了训练期间应考虑的训练指标,例如评估指标、时间指标、损失指标和其他指标。他提醒用户,无论是否安装 GPU 加速,都可以安装 Stable Baselines,并提供了在需要 GPU 加速时安装 PyTorch 的说明。

  • 00:50:00 在本节中,讲师讨论了如何为强化学习设置计算平台,这对于那些想要利用 GPU 加速的人来说至关重要。 CUDA 和 cuDNN 仅在 NVIDIA GPU 上受支持,因此用户必须确保他们拥有 NVIDIA GPU 才能使用 CUDA 来利用 GPU 加速。另一方面,AMD GPU 由 RockM 支持,RockM 是一个仅在 Linux 上可用的测试包。讲师还强调,与强化学习相比,传统深度学习使用 GPU 的性能提升可能更大。最后,讲师定义日志路径并实例化算法和代理。

  • 00:55:00 在本节中,讲师演示了如何使用 lambda 函数将非矢量化环境包装在虚拟矢量化环境中。然后,他们将模型(即将要训练的代理)定义为 PPO,并通过策略、环境、详细和张量板日志路径作为参数传递。讲师继续解释可以传递给 PPO 算法的各种超参数。最后,他们演示了如何使用 model.learn 函数训练模型并传递训练它的时间步数,在本例中设置为 20,000。训练模型后,讲师对其进行测试并检查训练指标。


第2部分

  • 01:00:00 在这部分视频中,讲师展示了如何保存和重新加载经过训练的模型。使用 model.save() 函数保存模型,并定义一个路径来定位保存的模型。然后,讲师演示如何删除保存的模型并使用 `ppo.load()` 函数重新加载它。下一步是测试经过训练的模型以查看其性能。讲师解释说,推出指标取决于用于训练的算法,并表明“A2C”算法在训练期间提供这些指标,而“PPO”算法需要一个明确的命令来生成这些指标。

  • 01:05:00 在本节中,视频解释了如何使用 evaluate_policy 方法来测试模型的性能,并确定 PPO 模型在这种特殊情况下是否被视为“已解决”。 evaluate_policy 方法是一种测试模型性能的方法,如果模型的平均得分为 200 或更高,则认为该模型已解决。该方法通过模型、环境、测试多少集以及是否需要渲染。平均奖励和该奖励中的标准差是您从 evaluate_policy 中获得的值,关闭环境是使用 emv.close 完成的。最后,视频重点介绍了如何在封装函数中部署模型。

  • 01:10:00 在本节中,讲师演示了如何使用来自环境的观察结果来预测使用代理的最佳动作,以最大化奖励。该代码块显示了如何进行关键更改以使用 model.predict 而不是 env.actionspace.sample 来使用模型采取行动。指导员表明代理的表现优于随机步骤并平衡了杆子。该代码还显示传递给 model.predict 函数的观察结果,返回两个值,模型操作和下一个状态。此处使用第一个值来确定代理的最佳操作。

  • 01:15:00 在本节中,讲师解释了强化学习的核心组成部分:代理、环境、行动和奖励。他演示了如何使用强化学习定义环境和训练模型,通过保持杆子保持直立而不倒下,每次积累一个值。讲师还展示了如何使用 TensorBoard 查看训练日志以监控训练过程。

  • 01:20:00 在视频的这一部分中,讲师解释了如何在 Jupiter notebook 中使用 TensorBoard 查看强化学习模型的训练指标。他演示了如何使用魔术命令运行 TensorBoard 命令,并展示了如何指定训练日志路径。讲师还展示了如何在 TensorBoard 中查看训练指标,例如每秒帧数、熵损失、学习率和策略梯度损失。他强调,平均奖励是调整模型性能时要监控的最重要指标。最后,他邀请观众提供反馈和评论。

  • 01:25:00 在本节中,视频讨论了确定强化学习模型性能的两个关键指标 - 奖励指标和平均剧集长度。该视频还提供了三种在模型表现不佳时提高模型性能的策略,包括更长时间的训练、超参数调整和探索不同的算法。然后,该部分深入研究回调、替代算法和架构,特别讨论如何设置回调以在达到奖励阈值后停止训练,并探索不同的神经网络架构和算法。该视频还强调了对需要较长训练时间的大型模型使用回调的重要性。

  • 01:30:00 在本节中,讲师解释了如何在强化学习中使用回调来进行更灵活和高效的训练。示例中使用了两个回调:停止回调和评估回调。 stop 回调指定训练应停止的平均奖励,而 eval 回调评估最佳新模型并检查它是否已超过奖励阈值。讲师还演示了如何通过指定新的神经网络架构来更改策略。总的来说,回调提供了对强化学习模型的更大控制,允许进行更多定制和有效的训练。

  • 01:35:00 在本节中,演讲者讨论了为神经网络中的自定义参与者和价值函数指定网络架构的过程。这可以简单地通过更改单元和层数并将其传递到模型来完成。演讲者还强调可以定义自定义特征提取器,并展示如何使用 DQN 等替代算法代替 PPO,并强调了 Stable Baselines 中可用的其他算法。演讲者最后展示了经过训练的 DQN 模型。

  • 01:40:00 在本节中,讲师讨论学习者将使用强化学习技术构建的项目。他们将从 Project One 开始,这是 Atari 中的 Breakout 游戏。然后,他们还将处理项目二,他们将在该项目中使用强化学习来制造赛车来模拟自动驾驶。最后,他们将致力于项目三,其中涉及使用 OpenAI Gym 空间创建自定义环境。讲师还解释了如何为项目导入必要的库和依赖项与主课程中的类似,他们只需要根据项目使用不同的算法。

  • 01:45:00 在本节中,视频讲师解释了如何在 Python 中设置用于强化学习的 Atari 环境。由于最近的变化,用户必须从 atarimania.com 下载原始文件并将它们解压缩到一个文件夹中才能使用该环境。安装必要的包和依赖项后,用户可以使用“emv.reset”和“emv.action_space”函数测试环境。观察空间是一个表示尺寸为 210x160x3 的图像的框。讲师还演示了如何在环境中测试模型。

  • 01:50:00 在本节中,讲师展示了使用随机动作玩 Breakout 的代码,并指出训练模型可能需要很长时间。为了加快训练速度,讲师对环境进行矢量化处理,同时训练四种不同的环境。使用的环境是基于图像的环境,而不是 Breakout 的 RAM 版本,因为将使用 CNN 策略。显示了用于设置模型的代码,包括指定日志路径和使用 CNN 策略的 A2C 算法。

  • 01:55:00 本节视频讲师使用强化学习训练模型玩Atari游戏“Breakout”。该模型使用卷积神经网络 (CNN) 策略,其训练速度比多层感知器策略更快。环境是使用 OpenAI Gym 的 make_atari 函数定义的,矢量化用于加速训练过程。该模型训练了 100,000 步,保存并重新加载模型后,使用评估策略方法对其进行评估。最终模型的平均情节奖励为 6.1,标准差为 1.9,比随机代理有显着改进。讲师还提供了有关已训练 300,000 步的预训练模型以及如何加载和测试它的信息。


第 3 部分

  • 02:00:00 在本节中,讲师讨论了在使用环境(特别是 Atari)时如何处理冻结问题。如果环境死机,需要重启notebook,保存模型后重启内核。然后,讲师通过导入依赖项、安装 Atari ROM、矢量化环境以同时在四个 Atari 环境中进行训练、训练代理以及最后评估和保存模型的过程,演示如何为 breakout 训练强化学习代理。讲师还展示了长时间训练模型的效果,并将训练好的模型放在 Github 存储库中,供学习者自行尝试。

  • 02:05:00 在三小时强化学习视频的这一部分中,讲师首先展示了项目 1 的结果,该项目涉及使用强化学习训练模型来玩游戏。该模型的表现明显优于之前的模型,50 集的平均奖励为 22.22,标准差为 9.1。讲师随后介绍了项目 2,该项目涉及使用强化学习在赛车环境中进行自动驾驶。搭建环境,指导老师说明必须安装swig,还需要安装box 2d和piglet这两个新的依赖。然后,讲师完成测试环境和导入必要依赖项的过程。

  • 02:10:00 在本节中,视频讨论了用于强化学习的赛车环境的观察和动作空间。观察空间是一张 96 x 96 x 3 的图像,其值介于 0 到 255 之间,而动作空间介于负一和一之间,对应三个不同的值。奖励函数对于每一帧都是负的 0.1,对于访问的每个轨道块加上 1000 除以 n。当代理可以持续获得 900 分或更多分时,游戏被认为已经解决,这可能需要一些时间通过训练来实现。然后视频继续使用 PPO 算法训练模型,并展示了如何使用训练后的模型测试赛车环境。

  • 02:15:00 在本节中,讲师使用 OpenAI Gym 为自动驾驶汽车设置环境,并将其包装在虚拟 Vectorize Environment Wrapper 中。然后,使用 PPO 算法指定代理和模型,并训练模型 100,000 步。保存的模型在环境中加载和评估,尽管高功率汽车缺乏牵引力,但它不会向前行驶,而是旋转出去并做甜甜圈。最后,关闭环境,讲师加载经过 438,000 步训练的模型进行测试。

  • 02:20:00 本节讲师加载经过438,000步训练的自动驾驶汽车模型并在赛道上进行测试。虽然速度较慢,但它遵循轨道并获得比之前训练 100,000 步的模型高得多的分数。讲师解释说,长时间训练强化学习代理可以产生更好的模型,理想情况下,该模型应该经过 1-2 百万步的训练才能发挥最佳性能。他演示了如何使用主要教程中的代码片段测试模型,该代码片段表明,即使只对图像进行训练,模型也可以成功地在轨道上导航。最终,讲师对这个模型进行了额外 200 万步的训练,提高了它的性能并达到了大约 700 次的奖励估计。

  • 02:25:00 在本节中,讲师加载并运行了一个模型,该模型的性能明显优于他之前训练的模型,尽管偶尔会在拐角处旋转。他展示了该模型的评价分数,最高达到了800分,较之前的模型有明显的提升。他指出,该模型的训练时间较长,并且标准差较高。然后讲师介绍了最后一个项目,该项目涉及在自定义环境中使用稳定的基线进行强化学习。他引入了必要的依赖关系,并鼓励观众在遇到任何困难时伸出援手。

  • 02:30:00 在视频的这一部分,讲师介绍了强化学习课程中将使用的各种健身房依赖项或 OpenAI 健身房依赖项、助手和稳定基线材料。他们导入gym,这是env中的标准导入,gym环境类,以及不同类型的空间,如discrete, box, dict, tuple, multi-binary, multi-discrete。讲师将介绍如何使用这些空间中的每一个以及如何将它们用于不同的目的。讲师还介绍了导入的不同帮助程序,例如 numpy、random 和 os,以及稳定的基线内容,包括 ppo、common.vec_env、dummy_vec_nv 和 evaluate_policy 函数。

  • 02:35:00 在视频的这一部分,演示者讨论了 OpenAI Gym 中可用于强化学习的不同类型的空间。这些空间包括离散、框、元组、字典、多二进制和多离散。演示者为每个空间提供了示例和解释。然后视频继续讨论构建模拟环境以训练代理人调节淋浴温度。最终目标是达到 37 到 39 度之间的温度,但智能体并不知道这一点,必须通过反复试验来学习。

  • 02:40:00 在本节中,讲师通过实现四个关键功能来构建淋浴环境的外壳。这些函数是 init、step、render 和 reset。 init 函数通过定义动作空间、观察空间和初始状态来初始化环境。 step 函数采取一个动作并将其应用于环境。渲染函数显示环境。重置功能将环境重置为其初始状态。讲师还为环境设置了 60 秒的剧集长度。

  • 02:45:00 在本节中,讲师定义了淋浴环境的步进函数,其中包含六个代码块。第一个块应用动作对状态的影响,零、一和二是三种可能的动作。零使温度降低 1 度,1 使温度保持不变,2 使温度升高 1 度。第二块将淋浴时间减少一秒。第三个块定义了奖励,如果温度在 37 到 39 度之间,则奖励为 1;如果温度超出该范围,则奖励为 -1。第四个块检查淋浴是否完成,如果淋浴时间小于或等于零,则将 done 设置为 true。第五个块创建一个空白信息字典,最后一个块返回状态、奖励、淋浴是否完成以及字典。重置功能将初始温度重置为其默认值,并将淋浴时间重置为 60 秒。

  • 02:50:00 在本节中,讲师解释了如何使用 Python 为强化学习创建自定义环境。他演示了如何定义环境状态及其观察和行动空间。讲师还展示了如何使用定义的环境测试和训练模型,以及如何在学习后保存训练好的模型。他提到,与简单环境相比,游戏环境需要更长的训练时间,并鼓励在规划项目和向客户承诺时牢记这一点。

  • 02:55:00 本节讲师演示如何测试和保存训练好的模型。他们使用“评估策略”方法来测试模型的性能,然后使用“model.save”方法保存模型。此外,他们还提供了课程的简要总结,涵盖了一系列主题,从使用稳定基线设置环境到使用不同算法(包括 PPO、A2C 和 DQN)训练模型。他们还讨论了创建自定义环境和构建项目,例如训练模型玩 Breakout 或在赛道上赛车。

  • 03:00:00 在本节中,讲师推荐用于进一步学习的其他资源,包括 David Silva 的强化学习课程,一本名为强化学习的书:Richard Sutton 和 Andrew Bartos 的介绍,以及探索超参数调优、构建自定义环境,并实施端到端解决方案,例如构建车杆机器人并在模拟环境中对其进行训练,然后再使用 Raspberry Pi 在真实环境中实施。讲师鼓励观众提出反馈和问题,并感谢他们收看。
GitHub - nicknochnack/ReinforcementLearningCourse
GitHub - nicknochnack/ReinforcementLearningCourse
  • nicknochnack
  • github.com
Contribute to nicknochnack/ReinforcementLearningCourse development by creating an account on GitHub.
 

使用 Python 的 ACTION RECOGNITION 进行手语检测 | LSTM 深度学习模型

代码:https: //github.com/nicknochnack/ActionDetectionforSignLanguage



使用 Python 的 ACTION RECOGNITION 进行手语检测 | LSTM 深度学习模型

在这个名为“使用 Python 动作识别 | LSTM 深度学习模型进行手语检测”的 YouTube 视频中,演示者解释了如何使用动作检测和关键模型构建实时手语检测流程。演示者使用 OpenCV 和 MediaPipe Holistic 从手、脸和身体中提取关键点,然后使用 TensorFlow 和 Keras 构建 LSTM 模型,预测在一系列帧中演示的动作。演示者完成从网络摄像头访问和提取关键点的过程,设置一个循环来访问网络摄像头,并通过将地标应用于网络摄像头最后捕获的帧来简化手语检测。他们还演示了如何修改代码以处理丢失的关键点,以及如何向姿势模型和面部标志检测添加错误处理。最后,演示者解释了使用 Python 进行动作识别的手语检测关键点提取功能。

该视频详细说明了如何使用 Python 使用动作识别创建手语检测模型。为了收集数据,演示者为每个动作和序列创建文件夹,并修改 MediaPipe 循环以收集每个视频每个动作的 30 个关键点值。通过为 LSTM 深度学习模型创建标签和特征来预处理数据,并使用 TensorFlow 和 Keras 训练模型。使用多标签混淆矩阵和准确度评分函数评估经过训练的模型。最后,通过创建用于检测的新变量、连接帧和应用预测逻辑来建立实时检测,并实施阈值变量以呈现高于特定置信度指标的结果。

该视频教程展示了如何使用 Python 和 LSTM 深度学习模型通过动作识别进行手语检测。讲者把预测逻辑演练了一遍,并解释了代码,很容易理解。他们还向观众展示了如何通过使用 append 方法调整代码,提高检测阈值,并添加概率可视化,使检测具有视觉吸引力。演讲者还介绍了如何检查结果是否高于阈值、如何操纵概率以及如何通过添加额外的操作或可视化来扩展和修改项目。最后,演讲者介绍了模型的附加逻辑,可最大限度地减少错误检测并提高模型的准确性,并邀请支持视频和频道。

  • 00:00:00 在视频的这一部分,创作者解释了他们的目标,即使用动作检测和按键模型生成实时手语检测流程。他们将使用 MediaPipe Holistic 从手、脸和身体中提取关键点,然后使用 TensorFlow 和 Keras 构建一个 LSTM 模型来预测在一系列帧中演示的动作。该过程包括收集关键点数据、训练神经网络、评估准确性以及使用 OpenCV 和网络摄像头实时测试模型。创建者概述了实现此过程的 11 个步骤,并从安装和导入依赖项开始。

  • 00:05:00 在本节中,演示者讨论了项目中将使用的不同依赖项,包括 OpenCV、MediaPipe、scikit-learn、NumPy、Matplotlib 和 TensorFlow。导入这些依赖项后,演示者使用 OpenCV 和 MediaPipe Holistic 完成从网络摄像头访问和提取关键点的过程。然后演示者设置一个循环来访问网络摄像头并将多个帧呈现到屏幕上,从而允许对项目进行实时测试。此循环将在整个项目中多次使用,包括提取帧和测试项目时。项目中使用的所有代码都将在 Github 上提供,包括最终训练好的权重。

  • 00:10:00 在视频的这一部分,演示者解释了如何使用 OpenCV 访问网络摄像头并开始循环遍历所有帧。演示者使用“视频捕获”功能从网络摄像头读取提要并启动一个循环,该循环将读取、显示并等待按键跳出循环。演示者还解释了如何优雅地打破循环,以及如何解决网络摄像头未出现时的设备编号问题。最后,演示者介绍了 MediaPipe Holistic 和 MediaPipe Drawing Utilities,这两个 Python 模块用于下载和利用 Holistic 模型进行姿势检测,并在图像上绘制姿势界标。

  • 00:15:00 在这段文字记录中,演讲者设置了一个功能,使手语检测更容易。该函数接受图像和媒体管道整体模型,并经过一系列步骤,包括从 BGR 到 RGB 的颜色转换,进行检测,并将图像转换回 BGR,然后将图像和结果返回到循环 for渲染。这些步骤是对称完成的,以确保在检测之前将图像设置为不可写,然后再恢复为可写。演讲者还解释了用于转换图像颜色的 cvtColor 函数,并展示了如何在循环中调用媒体管道检测函数。

  • 00:20:00 在本节中,演示者解释了如何使用“with 语句”访问 MediaPipe 模型并设置初始置信度和跟踪置信度。他们还展示了如何访问和可视化不同类型的地标:面部、左手和右手以及姿势地标。然后演示者演示如何使用 MediaPipe Holistic 检测地标并将结果显示在框架上。最后,他们展示了如何通过编写函数将地标渲染到屏幕上。

  • 00:25:00 在本节中,YouTuber 设置了一个名为“draw_landmarks”的新函数,它将地标数据渲染到图像上,以便可视化项目中使用的媒体管道模型检测到的不同地标。该函数使用 media pipe 提供的“mp.drawing”辅助函数绘制地标,还需要图像和地标数据作为输入。该函数还允许指定连接映射和格式选项。 YouTuber 然后继续演示如何使用 matplotlib 中的“plot.imshow”函数来显示网络摄像头捕获的最后一帧。

  • 00:30:00 在这一部分中,演讲者通过“绘制地标”功能校正图像的颜色并将地标应用于图像。媒体管道检测模型的结果作为最后一帧和运行循环的结果访问。 “mp_drawing.draw_landmarks”方法适用于当前帧以渲染所有手部、姿势和面部连接。然后演讲者将“绘制地标”功能应用于实时循环,并在渲染之前使用“地标绘制规范”和“连接绘制规范”应用格式分别绘制点和连接。最后,演讲者创建了一个名为“draw style landmarks”的新函数,以根据需要自定义“draw landmarks”函数。

  • 00:35:00 在本节中,演讲者更新了绘制地标函数的格式,为 mp_drawing.drawing_spec 函数添加了两个附加参数 - 颜色和圆半径。他们演示了面部地标的变化,并解释说第一个参数为地标着色,第二个参数为连接着色。然后,演讲者复制每个姿势和手部模型的功能更改,为每个模型赋予独特的颜色。这些变化纯粹是装饰性的,不会影响性能,但它们展示了不同模型的实际效果。

  • 00:40:00 在本节中,视频教程解释了如何通过将关键点值连接到 numpy 数组并处理错误,以弹性方式从 MediaPipe 整体模型的结果变量中提取关键点值。本教程介绍了如何使用循环和列表理解为一个地标提取值并为所有地标更新它。然后将包含所有地标的最终数组展平,将所有值都放在一个数组中,而不是多组地标。

  • 00:45:00 在本节中,演示者解释了如何修改代码来处理由于手在框架外而没有关键点的情况。他们首先显示左侧地标各有 3 个值,共有 21 个地标,总共需要 63 个值。然后他们应用一个 if 语句,用一个空白的 numpy 数组替换缺失值。然后将相同的修改应用于右侧的地标,它们也有 63 个值。该代码通过将 x、y 和 z 值连接在一个大数组中来提取不同的关键点,然后将其展平为适合 LSTM 模型使用的格式。

  • 00:50:00 在本节中,演讲者讨论了如何将错误处理添加到姿势模型和人脸界标检测中,并创建了一个名为“extract_key_points”的函数来提取界标检测和动作检测所需的关键点。该函数使用 numpy 数组并循环遍历结果以提取每个地标的 x、y 和 z 值,然后将它们展平到一个数组中。演讲者还提到该代码将在视频说明中提供,并邀请观众在评论中提问。

  • 00:55:00 在这部分视频中,演讲者解释了使用 Python 进行动作识别的手语检测关键点提取功能。该函数提取姿势、面部、左手和右手的关键点,并将它们连接成一个展平的 numpy 数组。这些关键点形成了用于使用人体动作检测来检测手语的帧值。演讲者还为导出的数据路径和要检测的动作设置了变量——你好,谢谢,我爱你——每个动作使用 30 帧数据。
  • 01:00:00 在视频的这一部分,演示者解释了使用 Python 进行动作识别来检测手语的数据收集过程。他们解释说,对于他们想要检测的三个动作中的每一个,他们将收集 30 个视频的数据,每个视频的长度为 30 帧。这相当于相当多的数据,但主持人向观众保证,他们会一步一步来。他们继续为每个动作和动作序列创建文件夹,其中每个序列的每个帧的 30 个关键点将存储为一个 numpy 数组。主持人还提到,在第 11 步中,他们将向观众展示如何将单词连接在一起形成句子。

  • 01:05:00 在本节中,讲师将展示如何为手语识别模型收集数据。他首先为三种不同类别的标志创建文件夹 - 你好、谢谢和我爱你 - 以及它们相应的单独序列文件夹。然后,他修改媒体管道循环以循环遍历每个动作、视频和帧以收集数据。为了确保帧不会收集得太快,他使用逻辑语句在每个视频之间添加了一个中断。通过这样做,该模型将为每个视频收集 30 个关键点值,有效地构建一个包含三个动作的堆叠集,每个动作有 30 个视频,每个视频有 30 帧。

  • 01:10:00 在本节中,视频创作者解释了 Python 脚本中的收集逻辑,该脚本使用 OpenCV 和深度学习模型从视频中检测手语手势。该逻辑涉及将文本输出到屏幕上并每隔一帧休息一次。视频创建者还演示了使用 np.save 将帧保存为 numpy 数组,这些数组存储在 mp_data 文件夹中。然后,他们提供用于关键点提取和将帧保存到正确文件夹中的最终代码块。

  • 01:15:00 在这一部分的文字记录中,演讲者解释了循环其动作和序列(视频)、应用媒体管道检测、绘制样式地标以及提取不同关键点以保存到特定文件夹中的逻辑。他们将使用三个动作(你好,谢谢,我爱你)并为 30 个序列的每个动作收集 30 帧。在运行这段代码之前,他们仔细检查错误并调整线宽以确保字体不会被遮挡。代码运行后,弹出窗口会显示“开始收集”,他们有两秒钟的时间来就位以执行操作,他们有 30 帧的时间来执行此操作。代码应该能够无限循环和收集数据。

  • 01:20:00 在这部分视频中,演示者演示了如何使用 Python 中的 MediaPipe 和 OpenCV 库收集手语数据。演示者建议捕获不同角度的手势以获得更好的模型性能,并且还提到有 30 个序列,每个序列 30 帧往往效果很好。使用 MediaPipe 收集的关键点代替图像,使模型在各种场景下更具弹性。演示者还解释说,收集的数据存储为 numpy 数组以供将来使用。

  • 01:25:00 在本节中,视频重点介绍预处理数据以及为 LSTM 深度学习模型创建标签和特征。该视频首先导入依赖项,然后创建一个标签映射,它基本上是一个代表每个不同操作的字典。接下来,数据被读入并汇集在一起,将其结构化为一个包含 90 个数组的大数组,每个数组包含 30 帧,1662 个值代表关键点。创建两个空白数组,sequences和labels,其中sequences代表特征数据,labels代表标签数据。然后代码循环遍历每个动作和序列,为窗口创建一个空白数组以表示该特定序列的所有不同帧。最后,numpy.load 用于加载每一帧。

  • 01:30:00 在本节中,演讲者通过将数据存储在 numpy 数组中并使用“to_categorical”函数将标签转换为单一热编码表示来完成数据预处理过程。然后,他们使用“train_test_split”函数将数据划分为训练集和测试集。训练集由85个序列组成,测试集有5个序列。演讲者还导入了必要的依赖项,包括顺序模型、LSTM 层和密集层,因为他们准备使用 TensorFlow 和 Keras 训练 LSTM 神经网络。

  • 01:35:00 在本节中,演讲者讨论了构建神经网络所需的必要依赖项,包括顺序、lstm、dense 和 tensorboard。他们解释说,顺序使得向模型添加层变得容易,而 lstm 用于时间分析和动作检测。演讲者还演示了如何设置张量板回调来监控训练进度。然后他们继续构建神经网络架构,包括添加三组 lstm 层并指定激活函数和输入形状。最后,他们提到了不将序列返回到密集层的重要性,并推荐了进一步的学习资源。

  • 01:40:00 在视频的这一部分,演示者介绍了添加到 LSTM 模型的不同类型的层,指定接下来的三层都是密集层。每个密集层使用 64 和 32 个密集单元或具有 ReLU 激活值的完全连接的神经元。最后一层是动作层,它使用 softmax 的激活值提取作为三个神经网络单元返回的值。该模型预测一个动作,例如“你好”,这个输出通过 30 帧加上 1,662 个关键点,并进行预处理以提取动作。演示者通过讨论他们进行的研究和开发,解释了他们如何使用 MediaPipe 和 LSTM 层。最后,使用分类交叉熵作为损失函数编译模型,并使用 x train 和 y train 对指定的 epoch 数进行拟合和训练。

  • 01:45:00 在本节中,视频演示了使用 Python 使用动作识别训练 LSTM 深度学习模型进行手语检测的过程。该模型使用 MediaPipe Holistic 的模型,该模型不需要数据生成器,因为数据可以放入内存中。该视频展示了如何使用 TensorBoard 设置训练过程,以及如何在 TensorBoard 训练期间监控模型的准确性和损失。该视频还包括如何在达到合理的准确度水平后停止训练过程,以及如何使用 model.summary 函数检查模型的结构。

  • 01:50:00 在本节中,演讲者训练模型并使用保存的模型进行预测。该模型使用 LSTM 深度学习技术来识别手语的动作。该模型使用 softmax 函数预测检测到动作的最高概率。将预测值与实际值进行比较,以评估模型的性能。演讲者将训练好的模型保存为 action.h5 并使用编译和加载函数重新加载它。从 sklearn 导入指标,speaker 评估模型的多标签混淆矩阵的性能。

  • 01:55:00 在视频的这一部分中,演示者解释了如何使用多标签混淆矩阵和准确度评分函数来评估训练模型的性能。混淆矩阵代表真阳性和真阴性,左上角和右下角这些值的数量越多,模型的性能就越好。准确性得分函数给出了模型正确预测的百分比。然后使用测试数据评估经过训练的模型,并重新建立循环以进行实时检测,这涉及创建新的检测变量、连接帧和应用预测逻辑。还实施了阈值变量以呈现高于特定置信度指标的结果。

  • 02:00:00 在本节中,演讲者解释了他们使用 Python 和 LSTM 深度学习模型进行动作识别的手语检测预测逻辑。他们首先提取关键点并将它们附加到 30 帧的序列中。如果序列的长度等于 30,他们通过使用序列的扩展维度调用 model.predict 来运行预测。然后他们使用 np.argmax 和之前定义的动作打印预测的类。演讲者还在序列的开头插入关键点来梳理逻辑并继续在代码中添加可视化逻辑。

  • 02:05:00 在本节中,演讲者分解代码解释程序如何通过使用“mp.argmax”提取最高分结果并通过“res”来检查结果是否高于阈值。该程序的逻辑是检查最后一个单词是否与当前预测匹配。如果是,则程序不会追加到句子长度。如果不匹配,程序会将当前检测到的动作附加到我们的句子数组中。句子长度最多只能包含五个单词,这样程序就不会尝试渲染一个巨大的数组。最后,程序将在图像上放置文本和矩形以显示句子。

  • 02:10:00 在本节中,视频演示了如何使用 Python 和 LSTM 深度学习模型通过动作识别来检测手语。本教程逐步调整代码以使用 append 方法并增加检测阈值以获得更高的准确性。该视频还展示了如何使用快速函数渲染概率以创建概率可视化,使检测输出在视觉上引人注目。总的来说,本教程提供了一个使用深度学习模型通过 Python 检测手语的优秀示例,使其成为希望构建类似项目的任何人的绝佳资源。

  • 02:15:00 在视频的这一部分,演示者演示了一个概率可视化功能,让我们可以实时查看不同的动作以及它们的概率是如何计算的。该函数使用 cv2.rectangle 在输出帧上放置一个动态矩形,然后根据我们当前正在处理的操作对其进行定位和填充,然后使用 cv2.put text 方法输出文本值。演示者展示了如何将此函数带入循环以实时可视化它,我们可以看到它正在根据概率值检测和识别不同的动作,例如你好、谢谢和我爱你。演示者强调此功能有很多应用,并演示了如何使用代码检测和识别各种场景中的不同动作。

  • 02:20:00 在视频的这一部分中,主持人回顾了他们的手语检测项目的过程。他们建立收集文件夹,收集关键点,对数据进行预处理,构建LSTM神经网络,进行预测,并进行实时测试。他们能够有效地实时运行检测,包括概率可视化。他们演示了如何修复代码以获取正确的帧并通过移动冒号和添加负数将它们附加到序列中。他们还添加了一行以将他们的预测附加到新的预测数组中,以确保在预测动作时更加稳定。最后,他们提供用户可以通过添加他们认为合适的额外操作、颜色和/或可视化来扩展和修改项目。

  • 02:25:00 在本节中,演讲者演示了动作检测模型如何通过实施附加逻辑变得更加稳定和有弹性。该模型现在能够最大限度地减少错误检测并将检测保持更长时间,从而提高其准确性。演讲者还提到,模型的训练权重将在 GitHub 存储库中提供,供用户使用。视频最后邀请您为视频点赞并订阅该频道。
GitHub - nicknochnack/ActionDetectionforSignLanguage: A practical implementation of sign language estimation using an LSTM NN built on TF Keras.
GitHub - nicknochnack/ActionDetectionforSignLanguage: A practical implementation of sign language estimation using an LSTM NN built on TF Keras.
  • nicknochnack
  • github.com
A practical implementation of sign language estimation using an LSTM NN built on TF Keras. - GitHub - nicknochnack/ActionDetectionforSignLanguage: A practical implementation of sign language estim...
原因: