目标检测算法

常见经典目标检测算法 目标检测(Object Dectection)的任务是图像中所有感兴趣的目标(物体),确定他们的类别和位置。除图像分类外,目标检测要解决的核心问题是: 阅读详情
AI摘要

本文详细探讨了目标检测算法的发展历程,从传统方法如Viola-Jones和HOG+SVM,到深度学习驱动的one-stage和two-stage算法,包括R-CNN系列和YOLO系列。讨论了目标检测面临的挑战,如目标多样性和尺度问题,以及深度学习算法的优势和不足。

一、目标检测算法

主流的目标检测算法大致分为one-stage与two-stage。
two-stage算法代表有R-CNN系列,one-stage算法代表有Yolo系列。自己理解,two-stage算法将步骤一与步骤二分开执行,输入图像先经过候选框生成网络(例如faster rcnn中的RPN网络),再经过分类网络,对候选框的内容进行分类;one-stage算法将步骤一与步骤二同时执行,输入图像只经过一个网络,生成的结果中同时包含位置与类别信息。two-stage与one-stage相比,精度高,但是计算量更大,所以运算较慢。
简单时间线:
在这里插入图片描述

目标检测算法分类:
在这里插入图片描述
在这里插入图片描述

二、目标检测算法存在的问题

1.目标种类与数量问题:同一幅图下要识别的物体类别和数量可能同时存在多个,在要识别的目标密度非常大时就可能出现像相互遮挡的问题。
2.目标尺度问题:同一幅图下同一类别的物体可能因为透视原理的印象,变得有大有小。尤其是有时候目标的大小可能会变得非常小。
3.外在环境干扰问题:由于光照等问题引起的图片质量问题。
4.目标检测和目标分割:目标识别、目标检测、语义划分、实例检测
在这里插入图片描述

三、目标检测算法的基本流程

候选框的选择是依靠滑动窗口来选择的。
在这里插入图片描述

四、传统的目标检测算法

1.Viola-Jones(VJ人脸检测算法)

  • Haar特征抽取(Opencv中有这个特征提取包)
    在这里插入图片描述
  • 训练人脸分类器(Adaboost算法)
    在这里插入图片描述
  • 滑动窗口选取候选框

2.HOG + SVM(行人检测,使用Opencv实现)

  • 提取HOG特征
    在这里插入图片描述
  • 训练SVM分类器
    这里的SVM是二分类分类法。(我们会使用现成的包就好,不一定需要自己去实现,最好自己手动写一下。)
    SVM又叫支持向量机,所谓支持向量正是图中所画的虚线上的点,他们对最后分类的结果影响较大。
    在这里插入图片描述
  • 利用滑动窗口提取目标区域,进行分类判断
  • NMS
  • 输出检测结果

3.DPM(物体检测)

  • DPM特征提取
    在这里插入图片描述
    在这里插入图片描述
  • HOG的扩展
  • 使用SVM训练得到物体的梯度

补充——NMS

在这里插入图片描述

五、基于深度学习的目标检测算法

1.Two-Stage算法(段到段)

在这里插入图片描述

  • 使用各种CNN卷积神经网络作为backbone主干网络,进行特征提取
  • 然后进行一步粗分类(区分前景和后景)和粗定位(anchor),也就是说在上图的“产生候选区域CNN特征”之前还应该有一个框“使用RPN网络产生候选区CNN特征”
  • 段到段的目标检测
  • 准确度高但速度较one-stage慢
    在这里插入图片描述

2.One-Stage算法(端到端)

  • 使用CNN卷积特征
  • 直接回归物体的类别概率和位置坐标值
  • 准确率低但速度快
    在这里插入图片描述

3.对比

  • 双阶段精度高但速度慢,单精度速度快但精度稍逊。
  • 双阶段目标检测器采用了两段结构采样来处理类别不均衡的问题(意思就是在同一张图片中需要进行检测的目标太少,不需要检测的背景信息太多),一阶段中:rpn使正负样本更加均衡(先粗分类,区分前后景),再粗回归,使用Anchor来拟合bbox,然后再二阶段精调。
  • One stage detector 的一个通病就是既要做定位又要做classification。最后几层1x1 conv layer的loss混在一起,并没有什么专门做detection或者专门做bbox regression的参数,那每个参数的学习难度就大一点。
  • Two stage detector 的第一个stage相当于先拿一个one stage detector来做一次前景后景的classification + detection。这个任务比 one stage detector 的直接上手N class classification + detection要简单很多。有了前景后景,就可以选择性的挑选样本使得正负样本更加均衡,然后拿着一些参数重点训练classification。训练classification的难度也比直接做混合的classification和regression 简单很多。
  • 双阶段其实就是把一个复杂的大问题拆分成更为简单的小问题。各个参数有专攻,Two Stage Detector 在这个方面是有优势的。但one stage detector 里如果用了 focal loss 和 separate detection/classification head 那效果跟 two stage detector 应该是一样的。
    在这里插入图片描述
常见经典目标检测算法!R-CNN、YOLO、计算机视觉、自动驾驶、AI芯片 目标检测是计算机视觉领域的一个重要任务,它要求算法能够准确识别图像中的物体,并为其提供边界框(Bounding Box)以及类别标签。与图像分类任务不同,目标检测不仅要识别图像中的类别,还要定位物体的位置。因此,目标检测任务通常比图像分类更具挑战性。 阅读详情

相关推荐

目标检测经典算法和API详解(笔记)

文章目录商品目标检测1. 目标检测概述1.1.项目演示介绍学习目标1.1.1 项目演示1.1.2 项目结构1.1.3 项目安排1.2 图像识别背景学习目标1.2.1 图像识别三大任务1.2.2 图像识别的发展1.3 什么是目标检测学习目标1.3.2 目标检测定义1.3.2 目标检测的技术发展史1.4 目标检测的应用场景1.5. 开发环境搭建2. 目标检测算法原理 商品目标检测 1. 目标检测概述 1.1.项目演示介绍 学习目标 了解项目的演示结果 1.1.1 项目演示 项目已经部署上线,Web端+小程序

源仔 8554

目标检测算法(R-CNN,fast R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3,yoloV4,yoloV5,yoloV6,yoloV7)

目标检测算法(R-CNN,fast R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3,yoloV4,yoloV5,yoloV6,yoloV7)

m0_46406029的博客 1万+

目标检测算法的研究现状

一阶段检测器如YOLO(You Only Look Once)和SSD(Single Shot MultiBox Detector)等,通过直接在图像上设置大量的预定义锚框(anchor boxes),并预测其类别和位置,实现快速的目标检测。Faster R-CNN的损失函数包括RPN的分类损失、RPN的边界框回归损失、Fast R-CNN的分类损失和Fast R-CNN的边界框回归损失。多模态大模型在目标检测领域的应用日益广泛,它们通过结合文本、图像等多种模态的信息,提高了目标检测的准确性和效率。

AI从业者的专栏 4059

常见目标检测算法

简介了目前为止的流行的目标检测算法,包括one-stage,two-stage,anhcor-free目标检测模型。

weixin_56764022的博客 3904

六大目标检测算法

识别图片中有哪些物体以及物体的位置(坐标位置)在python开发中,我们可能会遇到一种情况,就是当前的项目依赖的是某一个版本,但是另一个项目依赖的是另一个版本,这样就会造成依赖冲突,而virtualenv就是解决这种情况的,virtualenv通过创建一个虚拟化的python运行环境,将我们所需的依赖安装进去的,不同项目之间相互不干扰,

m0_74463516的博客 1986

39. 目标检测中的视频目标检测:FGFA算法

本技术分析聚焦于视频目标检测中的FGFA算法,从概念基础阐述其在目标检测领域的定位与发展脉络,通过理论框架深入剖析算法原理与局限性,并对架构设计、实现机制等方面进行全面探讨。旨在呈现FGFA算法从理论到实践的完整知识体系,为不同技术层次的读者提供多层次的理解框架,助力其掌握该算法在视频目标检测中的关键要点与应用潜力。视频目标检测面临诸多挑战,如目标外观变化、遮挡、快速运动等。FGFA算法旨在解决如何高效利用视频帧间冗余信息,减少重复计算,提升检测效率与精度,同时应对复杂场景下的目标检测任务。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1091

目标检测的各种算法总结

这里是引用腾讯云博客文章:一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD 文章目录一、目标检测常见算法二、传统的目标检测算法2.1 从图像识别的任务说起2.2 物体检测(Object Detection)三、候选区域/窗 + 深度学习分类3.1 R-CNN横空出世3.2 SPP Net3.3 Fast R-CNN3.4 Faster R-CNN...

librahfacebook的博客 1万+

k8s RoCE 部署: k8s-rdma-shared-dev-plugin + macvlan cni

写给自己的入门篇 文章目录前言一、创建 k8s 集群二、启用 primary network三、启用 secondary networkk8s-rdma-shared-dev-pluginMultus CNISecondary CNIMulti-Network CRD四、启用 pod五、在 pod 中启动 RoCE 流量总结 前言 写给自己的扫盲篇。后续会在原理方面持续更新 一、创建 k8s 集群 k8s 集群的创建有多种方法,可以按照官方文档的说明来.

sunshuying1010的博客 9774

YOLO目标检测算法

YOLO(You Only Look Once)是一种基于深度学习的目标检测算法,由Joseph Redmon等人于2016年提出。它的核心思想是将目标检测问题转化为一个回归问题,通过一个神经网络直接预测目标的类别和位置。YOLO算法将输入图像分成SxS个网格,每个网格负责预测该网格内是否存在目标以及目标的类别和位置信息。此外,YOLO算法还采用了多尺度特征融合的技术,使得算法能够在不同尺度下对目标进行检测。

jdjhcn的博客 1836

stm32开发3D打印机(一)——介绍(已完成)

如何运用stm32开发3D打印机

Nico_jion的博客 1万+

Stata:手动安装ivreghdfe包的完整指南与常见问题解决

本文提供了Stata中手动安装ivreghdfe包的完整指南,包括准备工作、详细安装步骤及常见问题解决方案。ivreghdfe作为处理高维固定效应模型的强大工具,依赖ftools、reghdfe和ivreg2三个核心组件,手动安装可避免版本冲突问题。文章还分享了进阶使用技巧,如并行计算加速和保存固定效应估计值,助力用户高效完成工具变量回归分析。

weixin_29251131的博客 927

SDD目标检测算法总结

@toc ​ 在这几年地发展中目标检测领域取得了较大的发展,相比较原来的目标检测算法的的提升,使得想在的优势更加的凸显,下面我们要讲的是目标检测算法的SDD算法。 一,SDD简介 ​ SDD算法的全称是Single Shot MultiBox Detector,在这个名字中开头使用了single shot就表示了这是一个ont-stage的方法,multiBOX说明了这是一个多框的预测。相比较yolo算法,SDD直接采用CNN来直接进行检测,而不像yolo在全连接层之后做检测。SDD算法有两个重大的改

qq_46102205的博客 6573

POWER(十一)charge pump原理

电荷泵是一种基于电容充放电原理的DC-DC转换电路,通过开关控制实现电压转换,包括升压、降压和负压输出。其核心是利用电荷守恒原理,通过电容存储和转移电荷来改变输出电压。典型拓扑结构包括倍压电路和多阶升压电路,具有结构简单、体积小等优势。关键参数包括转换效率、输出电流能力和开关频率,适用于芯片供电、显示屏驱动等低功耗场景。LVDS部分补充说明了自举电路在驱动电路中的应用及其自同步特性。

zhlwsh的博客 2796

目标检测算法综述

综述目标检测算法

涵涵啦啦啦的博客 3029

Latex参考文献中大写字母编译后自动变成了小写,如何保持原字母大写形式

bib文件参考文献中大写自动变为小写,如何保持原大写问题。Latex: 保持参考文献大小写,overleaf文献编译后,原大写字母自动变成了小写字母,如何保持原字母大写

我的个人博客 5804

保姆级教程:用YOLOv8/9/10搞定仪表盘指针识别,附完整数据集和Python环境配置

本文提供了一份基于YOLOv8/v9/v10的仪表盘指针检测全流程指南,涵盖环境配置、数据集构建、模型选型、训练调优和部署落地等关键步骤。通过详细的代码示例和实战经验,帮助开发者高效解决工业视觉中的仪表盘检测难题,特别适合电力巡检、智能监控等应用场景。

weixin_29031057的博客 1335

目标检测算法发展综述

自己理解,two-stage算法将步骤一与步骤二分开执行,输入图像先经过候选框生成网络(例如faster rcnn中的RPN网络),再经过分类网络,对候选框的内容进行分类;one-stage算法将步骤一与步骤二同时执行,输入图像只经过一个网络,生成的结果中同时包含位置与类别信息。1.目标种类与数量问题:同一幅图下要识别的物体类别和数量可能同时存在多个,在要识别的目标密度非常大时就可能出现像相互遮挡的问题。主流的目标检测算法大致分为one-stage与two-stage。候选框的选择是依靠滑动窗口来选择的。

实力派,无需多言! 5944

Backtrader官方中文文档:第四章Concepts基本概念

官方Concepts章节:https://backtrader.com/docu/concepts/

汇渊科技 2601

目标检测算法简介

目标检测算法是计算机视觉领域的核心问题之一,其任务是识别图像中所有感兴趣的目标,并确定它们的位置和类别。目标检测算法主要分为两大类:基于深度学习的算法和传统算法。

借雨醉东风的博客 1166

【人脸识别/轻量级模型】MobileFaceNet:适用于人脸识别的轻量级网络模型(文末附pytorch代码)

MobileFaceNet:用于人脸识别的轻量级网络模型

Roaddd的博客 6985

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

常见传统目标检测算法

一 概览 首先,我们先来看下目标检测的发展历程: 1.2001年,V-J检测器诞生,主要用于人脸的检测; 2.2006年,HOG + SVM的方法出现,主要用于行人的检测; 3.2008年,rgb大神(记住这个人,后面的R-CNN系列检测算法也是出自他之手)研究出了著名的DPM算法,在深度学习方法成熟之前的很长一段时间里,就是这个算法一直在目标检测中发挥作用; 以上算法是属于传统目标检测的算法...

凌桑的自我修养--You are the Eternity 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: RCNN算法
下一篇: Leetcode记录库数据结构篇之一:链表
LencyGe
博客等级 码龄7年 26粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值