基于 PyTorch 的目标检测(YOLO实现)

news2024/12/24 0:57:30

目标检测是一个直到最近才开始逐渐被征服的挑战。解决这个问题对于自动化和自动驾驶来说是至关重要的。对解决办法的追求导致了各种方法的发展。我想要描述一些主要的方法,在过去的21目标检测已经被使用,然后讨论 Yolov3的实现。

讨论方法

引言

虽然深度学习通常被归类为机器学习的一个分支,但是两者之间应该有明确的区别。机器学习是指在前深度学习时代发展起来的算法和方法。前深度学习时代通常被称为2011/2012年之前的时期。这些算法和方法是当时计算能力所允许的最大值。图形处理器的出现和 AlexNet 与大数据相结合的发展,使得经典的机器学习算法变得无效,使得深度学习占据主导地位。这就是为什么许多机器学习算法很少被使用的原因。它们的确有助于提供不同的方法来理解问题和进行比较的基线算法。

经典的机器学习方法

三个经典的机器学习算法是 Viola-Jones 检测框架、尺度不变特征转换分类(SIFT)和方向梯度直方图分类(HOG)。Viola-Jones 是一种非常流行和公认的用于面部检测的算法。该算法是基于 Haar 特征的高效算法,各种各样的实现都可以从网上快速获得。SIFT 是一个有趣的算法,它试图描述图像中的局部特征。这种算法在21世纪初非常流行。最快和最流行的迭代是SURF实现。HOG 是一个更复杂的算法,它试图计算图像局部区域中梯度方向的出现次数。这个算法的一个新的高级版本最近作为机器人学中的深度学习算法的验证卷土重来。

深度学习方法

三种经典的深度学习算法是 Region proposal (R-CNN)、 Single Shot Multibox Detector (SSD)、 You Only Look Once (YOLO)和 Single Shot refining Neural Network for Detection (RefineDet)。

R-CNN

该 R-CNN 算法选择了一些区域(最初是2000个) ,然后使用卷积神经网络网络(CNN)分别提取每个区域的特征。

aa306d1ebbfe2b4d46f433a582445830.png

然后,该算法继续在测试图像中搜索这些区域的混合。这种算法有时被称为双镜头算法,因为它用一个镜头生成区域建议,另一个镜头检测每个建议的对象。这个算法已经发展成为更快更简单的实现,我将在以后的文章中讨论。

SSD

SSD 是一个有趣的算法,但在社区中没有得到太多的关注。这个网络背后的主要思想是,CNN 逐渐缩小特征地图的大小,并增加深度,因为它移动到更深的层次。

5a99f14f9253a21387df12e6fcb75de1.jpeg

深层覆盖大的感受野,构建更抽象的表征,浅层覆盖小的感受野。根据这个逻辑,我们可以简单地说,浅层预测小物体,深层预测大物体。这个简单的逻辑意味着我们只需要一个镜头来检测图像中的多个物体,而 R-CNN 方法需要两个镜头。显然,这是非常有益的。

YOLO

在我看来,YOLO 算法确实是一个革命性的算法,因为它考虑到了整个图像,因此充分利用了 CNN 的能力。该算法利用单卷积网络预测 bounding boxes 和 bounding boxes 的类别概率。

ab562ca46763dab64dda288a954103b5.png

选择分类概率大于阈值的 bounding boxes,并用于定位图像中的对象。最初提出的算法是 Darknet,但是自从它被使用以来,各种不同的算法被提出。

RefineDet

Single-Shot Refinement 神经网络是一种尝试将 R-CNN 和 SSD 方法结合起来的新型目标检测。

37d82da35f09ba5d7fc06b822fffbda9.jpeg

该网络由两个相互连接的模块组成:anchor refinement 和 object detection 模块。作者公开了这个模型的代码,我将在接下来的几周内发布这个代码的一个简单实现。

YOLO 实现

环境配置

为了完成我的 YOLOv3实现,你需要一个适当的计算环境。首先,您需要在 shell 模式下运行 conda 虚拟环境。我建议您使用一个新的干净的 conda 环境,您可以手动安装必要的库。所需的主要库包括:

  • OpenCV

  • Numpy

  • PyTorch

  • CUDA

可能有1-2个未列出的次要库。在谷歌上快速搜索一下,你就会找到 一些安装命令来安装它们。

CUDA is a hardware accelerator that any modern computer should be able to utilize. I do not recommend the installation of the CUDA ToolKit manually. Instead, I recommend that you proceed to install it through Consta forge simultaneously with PyTorch  to avoid problems.

CUDA 是一个硬件加速器,任何现代计算机都应该能够利用。我不建议手动安装 CUDA 工具包。相反,我建议您通过以下网址: https://pytorch.org/get-started/locally/提供的安装方式进行安装,以避免出现问题。

在本节中,我假设您熟悉 conda 虚拟环境。

下载代码

在建立了虚拟环境之后,下一步是到我的 GitHub 下载代码。链接到我的 GitHub 的链接是:https://github.com/FranciscoReveriano/YOLOV3-Tutorial

您可以通过命令行直接下载它,也可以下载 zip 文件。当然,如果下载,记得解压缩(解压缩)文件夹。

a1e602da0161e41eaf845e4cd44639ff.png

该代码必须通过 Anaconda 命令行运行。请确保将代码放入可以通过命令行轻松访问的目录中。

下载预训练模型

下一步是确保你有预先训练好的模型。这个 Yolov3模型使用 COCO 训练的 DarkNet 模型。因此,这意味着必须在这里下载:

https://pjreddie.com/media/files/yolov3.weights

下载完成之后,你需要将它们移动到你从我的 GitHub 下载的主目录/文件夹中。此时,您的目录文件夹应该如下所示。

7f8dbaa38dda21bb80fb06fe70865b91.png

运行代码

现在,我假设您能够下载代码并将其保存在目录中。我还假设您的 conda 环境已经设置好,并且所有必需的库都已下载。

您应该继续激活 conda 环境,并前往代码所在的目录。我们将首先尝试测试经典的测试图像(dog-cycle-car.png)。你需要在命令行中输入以下命令:

python tutorialDetect.py — images dog-cycle-car.png — det det

如果一切都已成功设置,并且您的环境具有所有必要的库。你应该可以在命令提示符上看到下面的命令:

24fdcb539faecb531b88b4b71f02ba2c.png

更重要的是,如果转到主文件夹中的子目录 /det,您将看到一个新界面。

f3be34c4a25eb2852170dd91f3390a5f.png

如果你点击图片,你会看到 YOLOVv3能够成功地检测和分类所有三个对象。

c24f5066001fb50ed1bdb735c7b0961c.png

你可以继续上传任何你想要的图片,然后让 YOLOv3对它们进行分类。这个实现非常健壮,对于大多数分类应该没有什么问题。

YOLOv3 视频实现

现在的图像是伟大的,但让我们诚实地说,我们的数字媒体越来越多的视频格式。幸运的是,YOLOv3可以很容易地被用来检测视频中的对象。请注意,这是一项非常繁重的计算任务,需要一台带有图形/视频卡的计算机。

理论上,你可以用任何你想要的视频来测试这一点。只要确保你有 .avi 格式的视频就行了。为了测试我个人建议你下载以下视频:

https://www.robots.ox.ac.uk/ActiveVision/Research/Projects/2009bbenfold_headpose/Datasets/TownCentreXVID.avi

下载视频后,请将其移动到 YOLOv3主目录。您的目录应该如下所示:

32559750cfd64e2ea7acd63b7cb1806d.png

运行视频的命令类似于 image 命令。我提供的实现非常简单,并且易于使用。运行视频的命令是:

python tutorialVideo.py — video TownCentreXVID.avi

运行这个命令应该会打开一个显示视频的窗口。在视频中,您将看到 YOLOv3正在积极地检测和绘制 bounding box。

1fecaaa7021a0985755d3f78214affc3.png

这是一个结果截屏。

总结

现在,您的计算机上应该有一个正常工作的 YOLOv3模型。您可以继续将此模型合并到进一步的项目中。或者只是继续玩它,并用它来检测对象。

·  END  ·

HAPPY LIFE

38ff00708f5b8db9a8855a1e8427d9fe.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/197342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows 7 离线安装vs20219,GraalVM 打包java成可执行程序

环境准备 由于vs2022不支持windows 7 ,故用vs2019版。 如果是 win7 系统,在安装下载的依赖项前需要安装 win7 所需要的两个补丁 KB4490628和KB4474419 ,下载地址分别为(下载后直接安装即可): 参考这篇博客…

vite --- 搭建开发环境

目录 下载安装和初始化VSCode 安装Node.js yarn 使用 pnpm 安装与使用 搭建第一个Vite项目 使用 PNPM创建项目 项目目录解读 下载安装和初始化VSCode 1、访问网站 Visual Studio Code - Code Editing. Redefined 2、选择平台版本 选择符合自己操作系统的安装包下载完毕…

接口测试及接口抓包常用的测试工具有哪些?

目录 接口 接口测试的重要性 常用抓包工具 01、F12 02、Fiddler抓包工具 03、Charles抓包工具 04、Firebug抓包工具 05、httpwatch抓包工具 06、Wireshark抓包工具 07、SmartSniff抓包工具 常用接口测试工具 01、Postman 02、Jmeter 03、RESTClient 04、WireMock…

655. 汽车大甩卖2 etiger.vip 答案

题目描述 有n辆车大甩卖,第i辆车售价a[i]元。有m个人带着现金来申请购买,第i个到现场的人带的现金为b[i]元,只能买价格不超过其现金额的车子。你是大卖场总经理,希望将车和买家尽量多地进行一对一配对,请问最多卖出多…

Qt 开发环境搭建

一、Qt下载与安装 1、qt下载网站https://download.qt.io/ 其中各个目录含义如下: 目录说明snapshots/预览版,最新开发测试的Qt库和开发工具online/在线安装源official_releases/正式发布版,是与开发版相对应的稳定版Qt库和开发工具&#x…

利用哨兵简化实现难度

首先先回顾一下链表的插入和删除,如果需要在一个结点p后边插入一个结点,那么只需要下边两行代码: new_node->next p->next; p->next new_node;但是当往链表插入第一个结点时候,上边的代码就不能用了。需要进行下边的处…

【vue2】vue框架学习前置必备基础知识

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:数组 | 字符串中常用方法、对象解构语法、function |箭头函数this指向、展开运算符、原型…

为了会做题而学习期权合约

基本术语 买入期权:按照固定价格购买特定物品的期权。卖出期权:按照固定价格出售特定物品的期权。执行价格:期权合约中约定的固定价格。到期日:在其后期权不再被执行的日期。欧式期权:期权只能在到期日当日被执行。美…

python带你采集热点事件,让你第一时间掌握全发展

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 开发环境: python 3.8: 解释器 pycharm: 代码编辑器 requests: 发送请求 parsel: 解析数据 jieba pandas stylecloud 实现流程: 一. 思路分析 找到数据来源 network 记录网页数据 请求 二…

windows下djaongo项目移植至centos7系统并启动

概述:在windows下开发完成的django项目需要移植至centos系统并启动。 文章目录1,在django项目目录下生成requirements.txt文件2,下载FileZilla安装并连接Linux系统3,本地传输文件至linux系统3.1,可用vim修改settings.py的参数4,安装requirements.txt依赖包5,启动项目…

pwn小白入门 装载 笔记

所看视频奉上:5、装载与汇编_哔哩哔哩_bilibili笔记如下:1.查看文件类型:file 文件名其中:add:文件名ELF:文件格式64-bit:64位LSB:端序 lsb:小端序 msb:大端序x86-64:架构…

sqlserver2012数据库,日志文件损坏修复

背景 服务器突然断电,导致数据库日志文件损坏,数据库无法启动。 本方案也同样适用于不小心删除数据库日志文件的情况。 相关报错 master数据库日志异常,导致数据库无法启动: 无法在数据库“master”(数据库 ID 为 1)的分配单元 …

windows下生成自签证书并配置到chrome

Windows自签证书生成工具:XCA – X Certificate and Key Management 简称:XCA 下载地址: https://github.com/chris2511/xca/releases 或者 http://sourceforge.net/projects/xca/files/latest/download 界面(1.4.1版本&#xff0…

从0开始学python -19

Python3 字典 字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示: d {key1 : value1, key2 : value2, key3…

剑指Offer 第23天 数组中出现次数超过一半的数字 数组中数字出现的次数 I 数组中数字出现的次数 II(异或运算)

剑指 Offer 39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 来源:力扣&a…

Python自动化测试实战篇(2)unittest实现批量接口测试,并用HTMLTestRunner输出测试报告

代码已上传Python接口项目实战篇(2)源码 项目场景: 由于关于接口的测试用例任务越来越多,单纯靠人工手敲的方式输入和校验,速度上已经不能够满足项目的进行速度,而且都是针对登录的框框进行用例测试&…

一站式轻监控轻运维系统nezha(下篇)

本文软件由网友 114514 推荐; 命令行安装 docker安装所需要的文件都能在 https://github.com/naiba/nezha/tree/master/script 找到,config.yaml 和 docker-compose.yml 老苏都做了调整 你可以在 data 目录中新建一个空的 config.yaml 文件,…

基于“Doris”的type2拉链表的Mysql实现

基于“Doris”的type2拉链表的Mysql实现 需求说明 基于Doris实现Type2、拉链表。主要对上游系统里的面积字段进行监控,如果发现变化则跟踪记录到维度表里。 解决方案 type2相关概念见如下链接: SCD缓慢变化维拉链表 这里特别需要注意的是: 1、因为…

scrapy_redis原理分析并实现断点续爬以及分布式爬虫

scrapy_redis原理分析并实现断点续爬以及分布式爬虫 学习目标 了解 scrapy实现去重的原理了解 scrapy中请求入队的条件掌握 scrapy_redis基于url地址的增量式单机爬虫掌握 scrapy_redis分布式爬虫 1. 下载github的demo代码 clone github scrapy-redis源码文件 git clone http…

WPF TotalSummary汇总栏设置鼠标点击事件和显示格式修改

文章目录最开始的提示汇总有两种Summary Panel的设置参考这里Fixed Summary Panel的设置参考这里代码中都用到了DXBinding多个汇总项,对某一项进行控制设置鼠标点击事件整体的xaml代码如下总结最开始的提示 WPF毕竟是微软的东西,且用的人不多&#xff0…