
文章目录
在过去的十年中,深度学习技术的发展引起了极大的关注,并成为人工智能领域中不可或缺的技术之一。深度学习在计算机视觉领域的应用越来越广泛,其中目标检测是备受关注的领域之一。目标检测是指在图像或视频中检测出目标的位置和边界框,然后对目标进行分类或识别。目标检测在计算机视觉领域中具有非常重要的应用,如目标跟踪、目标检索、视频监控、图像字幕、图像分割、医学影像等等。除了这些应用场景外,目标检测还可以应用于自动驾驶、机器人视觉、智能安防等领域。

目标检测、分类和分割是计算机视觉领域中的三个重要任务,它们在输入和输出上有所不同,具体区别如下:
目标检测的目标是在图像或视频中检测出目标的位置和边界框,然后对目标进行分类或识别。这个任务需要同时完成目标的位置定位和分类任务。目标检测输出的结果包括目标的位置和类别。
分类的目标是将输入图像或视频中的物体或场景分为不同的类别。分类任务只需要对整张图像或视频进行分析,输出结果是物体或场景所属的类别。
分割的目标是将输入图像或视频中的每个像素分配到不同的语义类别,形成一个像素级别的标注结果。分割任务需要对整张图像或视频进行像素级别的分析,输出结果是一个标注图像,每个像素都被分配了一个类别。
可以看出,目标检测是分类和分割的进一步扩展,需要同时完成物体位置的定位和分类任务。分类和分割通常只需要对整张图像或视频进行分析,而目标检测需要在图像中识别出物体的位置和边界框。在实际应用中,这三种任务通常会同时使用,以实现更精确和全面的图像分析和理解。
目标检测方法通常可以分为基于机器学习和基于深度学习两类方法。
基于机器学习的目标检测方法通常使用传统的机器学习算法,例如支持向量机、AdaBoost和随机森林等。这些方法的基本思想是提取图像特征并使用分类器对特征进行分类,然后使用对象检测器检测目标。这些算法需要手动选择和提取图像特征,因此需要领域专家的知识和经验。

基于深度学习的目标检测方法通常使用深度神经网络来自动学习特征并进行目标检测。目前比较流行的深度学习目标检测方法包括两类:基于区域提取的方法(两阶段检测方法)和单阶段检测方法。其中,基于区域提取的方法包括R-CNN、Fast R-CNN、Faster R-CNN和Mask R-CNN等,它们主要通过候选区域提取器生成目标候选区域,并使用CNN网络对每个候选区域进行特征提取和分类。而单阶段检测方法则直接从图像中提取目标位置和类别信息,例如YOLO和SSD等,它们可以实现更快速的检测速度。

基于深度学习的目标检测主要包括训练和测试两个部分。训练的主要目的是利用训练数据集进行检测网络的参数学习。测试的主要目的是在经过训练后,评估检测网络的性能表现。
AlexNet、VGGNet、ResNet和DenseNet等。近期,基于Transformer的网络,如ViT、Swin和PVT等也开始被用于目标检测。在训练开始时,通常将在大规模图像分类数据库ImageNet上训练的预训练权重作为检测器骨干网络的初始权重。(IoU)准则、距离准则、似然估计准则和二分匹配等。基于标签分类的结果,采用损失函数计算分类和回归等任务的损失,并利用反向传播算法更新检测网络的权重。常用的分类损失函数有交叉熵损失函数、聚焦损失函数等,而回归损失函数有L1损失函数、平滑L1损失函数、交并比IoU损失函数、GIoU(generalized IoU)损失函数和CIoU(complete-IoU)损失函数等。(NMS)技术,将多个重叠的检测结果进行筛选,只保留最有可能代表物体的检测结果。NMS的基本思想是通过比较检测结果的置信度得分,去除重叠框中得分较低的框,只保留得分最高的框。(Precision)、召回率(Recall)、F1值、平均精度(Average Precision,AP)、均值召回率(Mean Average Precision,mAP)等。其中,AP是一种常用的评估指标,用于衡量检测器在不同置信度阈值下的性能表现。而mAP是AP的平均值,通常作为衡量整个检测算法性能的指标。
在测试阶段,首先需要输入一张待检测的图像。这张图像会被送入训练好的检测网络中进行处理,这个过程叫做前向传播(forward propagation)。在检测网络中,图像会被分类,确定图像中存在哪些物体,并输出每个物体的位置信息。这些位置信息通常表示为边界框(bounding box),也可以表示为像素级的分割掩模(segmentation mask),它们描述了物体在图像中的位置和大小。
然而,在检测网络输出结果之后,可能会出现多个边界框或分割掩模与同一物体相关联的情况。这可能是因为图像中的物体形状、大小、角度等方面的变化,或者是因为图像的不同区域可能包含相同的物体。因此,需要对这些检测结果进行后处理,以便确定每个物体的最终边界框或分割掩模。
这个后处理过程的目标是为每个物体保留一个检测结果,并去除其他冗余的检测结果。这个过程被称为非极大值抑制(non-maximum suppression,NMS)。它的基本思想是通过比较检测结果的分类得分和位置信息,为每个物体保留一个得分最高的检测结果。在执行 NMS 之后,每个物体将仅对应一个边界框或分割掩模,这是最终的检测结果。


论文地址:https://arxiv.org/pdf/1506.02640v5.pdf

YOLO(You Only Look Once)是一种目标检测算法,它在单个神经网络中同时完成对象检测和分类的任务。相比传统的对象检测方法,YOLO算法的速度更快,因为它只需要运行一次神经网络,而不是多次。
YOLO的卷积神经网络架构是来自GoogleLeNet模型,YOLO的网络有24层卷积和2层全连接,与GoogLeNe不同的地方在于作者在某些3×3的卷积层前用了1×1的卷积降维, 整体结构图如下图所示:

YOLO算法的核心思想是将目标检测问题转化为回归问题。它将图像划分为一个固定数量的网格(比如7×7),每个网格预测固定数量的边界框和它们的置信度和类别概率。边界框指的是目标在图像中的位置和大小,置信度表示边界框中是否存在目标,类别概率表示目标属于哪个类别。
具体来说,YOLO算法将输入图像经过卷积神经网络提取特征后,得到一个S×S×(B×5+C)的张量。其中,S表示网格数量,B表示每个网格预测的边界框数量,C表示类别数量。张量中每个元素都表示一个边界框的信息,包括边界框的中心坐标、宽度、高度、置信度和类别概率。YOLO算法通过对张量进行解码,得到图像中所有目标的位置和类别。
YOLO算法的训练过程是基于交叉熵损失函数的反向传播。对于每个边界框,损失函数包括位置误差、置信度误差和类别误差。YOLO算法通过反向传播更新神经网络的参数,提高目标检测的准确率。

我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
我想知道我的代码是否在rspec下运行。这可能吗?原因是我正在加载一些错误记录器,这些记录器在测试期间会被故意错误(expect{x}.toraise_error)弄得乱七八糟。我查看了我的ENV变量,没有(明显的)测试环境变量的迹象。 最佳答案 在spec_helper.rb的开头添加:ENV['RACK_ENV']='test'现在您可以在代码中检查RACK_ENV是否经过测试。 关于ruby-检测由RSpec、Ruby运行的代码,我们在StackOverflow上找到一个类似的问题
我正在开发一个Rails应用程序,我需要在其中找到给定特定偏移量或时区的夏令时开始和结束日期。我基本上在我的数据库中保存了从用户浏览器接收到的时区偏移量(“+3”,“-5”),我想在它出现时修改它由于夏令时的变化。我知道Time实例变量有dst?和isdst方法,如果存储在它们中的日期在夏令时与否。>Time.new.isdst=>true但是使用它来查找夏令时的开始和结束日期会占用太多资源,而且我还必须为我拥有的每个时区偏移量执行此操作。我想知道更好的方法。 最佳答案 好的,基于你所说的和@dhouty'sanswer:您希望能够
我正在使用rubydaemongem。想知道如何向停止操作添加一些额外的步骤?希望我能检测到停止被调用,并向其添加一些额外的代码。任何人都知道我如何才能做到这一点? 最佳答案 查看守护程序gem代码,它似乎没有用于此目的的明显扩展点。但是,我想知道(在守护进程中)您是否可以捕获守护进程在发生“停止”时发送的KILL/TERM信号...?trap("TERM")do#executeyourextracodehereend或者你可以安装一个at_exit钩子(Hook):-at_exitdo#executeyourextracodehe