YOLO系列论文阅读(v1--v3)

搞目标检测,绕不开的一个框架就是yolo,而且更糟糕的是,随着yolo的发展迭代,yolo网络可以做的事越来越多,语义分割,关键点检测,3D目标检测。。。这几天决定把YOLO系列彻底梳理一下,在进入大模型时代前,我们欣赏一下这个CNN时代最具影响力的作品。

前YOLO时代

在YOLO出现之前,目标检测已经大部迈向了CNN时代。从RCNN到FastRCNN, 再到FasterRCNN。可以看到,模型的速度越来越快,网络结构越来越简洁,启发式的方法论在一步步被抛弃。

但是,基于RCNN的方法需要预先通过region proposal network选择锚框,在保证了精度的同时,也大大耽误了速度。显然,目标检测的发展遇到了瓶颈。此时,YOLO,SSD等one stage方法孕育而生。

而经过多年的发展,YOLO系列在保持自己原来的快速的特点的基础上,在性能上也逐步提升,成为了目标检测在工业上落地的最优选择。

YOLO论文 

YOLO1

论文题目:You Only Look Once: Unified, Real-Time Object Detection

会议: CVPR2016

链接: https://arxiv.org/pdf/1506.02640.pdf

作者: Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi

YOLO v1实现了从原始图像到检测框的单一网络端到端设计。 将图片分割为SxS个方块,每个方块包含2个Bbox的预测。

这里的潜在问题是:如果一个区域包含2个以上的小物体,该怎么办呢?

网络结构

网络包含24个卷积层和2个全连接层(全链接层明显开销会比较大)。此外,作者还提到了精简版的FastYOLO,包含9个卷积层,模型的输出是 7 x 7 x 30 的预测。

训练

模型训练首先采用imagenet数据进行前20个卷积层的训练(作为分类任务),随后,通过4个卷积层和2个全链接层进行检测任务的训练。

局限性

YOLO的局限性在于每一个grid最多只能输出两个物体和一种物体类别。

YOLO2 

发表于: CVPR2017

论文标题:YOLO9000: Better, Faster, Stronger

论文链接:https://arxiv.org/pdf/1612.08242.pdf

作者: Joseph Redmon, Ali Farhadi

 

YOLOv2的网络架构优化

其实,在YOLOv1种就已经提到,YOLO对于多物体的检测能力有限,尤其是当一个grid出现多个物体时。此外,作者还提到,锚框的位置不够准确,recall较低 。面对这些问题,在YOLOv2中,作者给出了解决方式,包括,1. 引入batch normalization,2. 采用高分辨率的图像训练分类器(感觉这个创新点很一般)3. 引入锚框,

这其中,比较值得一说的就是锚框,在YOLO1中通过全连接层进行猫框的预测,但是,在v2中,作者放弃这一设计,转而借鉴Faster-RCNN中提出的先验猫框的概念,通过anchor box的引入,支持的猫框数量大大增加,mAP略微下降,但是recall大大增加,总之,替换的利大于弊。

既然使用锚框,就要提供锚框先验的维度信息,作者没有使用人工选择的方式,而是选择使用K-means的方式,基于数据集找到了5个最优的大小。

此外,YOLO对于检测框位置预测的不精准,主要由于对于物体x,y位置估计的不准确,因此,我们选择预测物体位置与对应网格的相对距离。对于每个特征图的每个网格,我们会获取5个检测框的预测,基于这样的修改,我们可以保证检测框的精度进一步提升。

此外,通过passthrough layer,作者还提高了特征图的分辨率,来保证物体检测的精度(这一步其实没有太明白)。。

YOLOV2的训练策略优化

为了保证网络具有多尺度检测的能力,作者在训练的过程中,还将不同分辨率的图片,作为输入。对于低分辨率的图像,采用更轻量的检测器,可以大大提高帧率。

为了保证backbone的效率,作者认为采用vgg-16.可以,但没必要,因此选择参考googlenet。

为了让训练更高效,作者还利用目标检测数据集和分类数据集,微调网络结构,分别进行训练。

此外,还有其他技巧,这里没有全部展示。

总结

YOLOV2中,作者对于网络结构,和训练策略都做了调整和改进。对于网络架构的修改,有效的弥补了YOLO的短板,而关于训练策略的优化,作者展示了统一目标检测和分类这两类任务的雄心。此外,也提到了在物体分割领域的应用可能。

此外,作者的笔风也逐渐飘逸,说实话better,stonger,faster作为小标题,并不利用读者梳理论文的框架。

YOLOv3

标题: YOLOv3: An Incremental Improvement

作者: Joseph Redmon, Ali Farhadi

发表于:CVPR2018

YOLOV3的论文基本是以技术报告的形式展现。

这里整理一下我认为比较重要的几个创新点

1. Backbone的改进

在V2中,作者提到backbone的设计借鉴了googleNet,而在V3中,作者则借鉴了resnet的残差设计,网络层数也大大加深,从YOLOv2 的Darknet-19 变为了Darknet-53。

2。 引入多尺度信息

YOLOv3在三个尺度进行特征提取。然后通过上采样的方式进行特征融合,通过类似v2中K-means的方法获得了9个先验的尺度信息,然后分布在3个特征提取层中。

总结

Yolov3的创新点给人一种重剑无锋的感觉,没有太多冗余的更新,但是backbone优化,和多尺度信息引入又大大的改进了YOLOv2的效果。而作者开源的YOLOv3 c++推理代码也为YOLO的黄金时代画下了一个完美的句号。

多尺度预测,残差网络的运用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++的STL常用算法->常用遍历算法、常用查找算法、常用排序算法、常用拷贝和替换算法、常用算术生成算法、常用集合算法

#include<iostream> using namespace std; #include <algorithm> #include <vector> //常用遍历算法 for_each //普通函数 void print01(int val) { cout << val << " "; } //仿函数 //函数对象 class print02 { public: v…

Wireshark TS | Linux 系统对时问题

问题描述 节前业务运维同事提交了一个 case &#xff0c;说是部署在新业务区域的 Linux 服务器和老业务区域的 Linux 服务器无法对时&#xff0c;脚本里使用的是 clockdiff 命令&#xff0c;无法正常返回结果&#xff0c;而在老业务区域两台服务器之间执行命令就正常&#xff…

Java基于微信小程序的校园二手物品交易系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

公厕智慧化_智慧化的公厕

公厕智慧化是现代城市建设中的重要一环。通过信息化、数字化和智慧化技术手段&#xff0c;实现对公共厕所的高效管理和服务&#xff0c;不仅提升了城市环境质量&#xff0c;还改善了居民生活品质。智慧公厕的智慧化包括监测、管理、服务和设备的智慧化&#xff0c;利用先进科技…

Unity中URP实现水体效果(水的深度)

文章目录 前言一、搭建预备场景1、新建一个面片&#xff0c;使其倾斜一个角度&#xff0c;来模拟水底和岸边的效果2、随便创建几个物体&#xff0c;作为与水面接触的物体3、再新建一个面片&#xff0c;作为水面 二、开始编写水体的Shader效果1、新建一个URP基础Shader2、把水体…

汇编语言movs指令学习

字符串传送指令(Move String Instruction) movs 该指令是把指针DS:SI所指向的字节、字或双字传送给指针ES:DI所指向内存单元&#xff0c;并根据标志位DF对寄存器DI和SI作相应增减。该指令的执行不影响任何标志位。 记不清这指令是8086就有的&#xff0c;还是386以后新加的&…

【Redis】常见的5种数据类型(上)

文章目录 1 :peach:前言:peach:2 :peach:Redis 基本的全局命令:peach:2.1 :apple:keys:apple:2.2 :apple:exists:apple:2.3 :apple:del:apple:2.4 :apple:expire:apple:2.5 :apple:ttl:apple:2.6 :apple:type:apple: 3 :peach:单线程架构:peach:4 :peach:Redis 的 5 种常见数据…

Qt_纯虚函数的信号和槽

简介 在C中&#xff0c;纯虚函数是一个在基类中声明但没有实现的虚函数。纯虚函数的声明以 “ 0” 结尾。纯虚函数的目的是为了提供一个接口&#xff0c;但是不提供实现。派生类必须实现纯虚函数&#xff0c;否则它也会成为一个抽象类。纯虚函数可以在基类中定义&#xff0c;也…

MySQL--索引结构

索引-索引结构 1. 概述2. 二叉树3. B-Tree4. BTree5. Hash 1. 概述 MySQL的索引是在存储引擎层实现的&#xff0c;不同的存储引擎有不同的索引结构&#xff0c;主要包含以下几种&#xff1a; 上述是MySQL中所支持的所有的索引结构&#xff0c;下面展示不同的存储引擎对于索引…

力扣382.链表随机节点

Problem: 382. 链表随机节点 文章目录 题目描述思路复杂度Code 题目描述 思路 由水塘抽样易得&#xff0c;当遇到i个元素&#xff0c;有 1 / i 1/i 1/i的概率选择该元素&#xff1b;则在实际操作中我们定义一个下标i从1开始遍历每次判断rand() % i 0&#xff08;该操作就是判断…

Chrome插件(二)—Hello World!

本小节将指导你从头到尾创建一个基本的Chrome插件&#xff0c;你可以认为是chrome插件开发的“hello world”&#xff01; 以下详细描述了各个步骤&#xff1a; 第一步&#xff1a;设置开发环境 确保你拥有以下工具&#xff1a; 文本编辑器&#xff1a;如Visual Studio Cod…

2278. 企鹅游行(最大流,拆点)

活动 - AcWing 在南极附近的某个地方&#xff0c;一些企鹅正站在一些浮冰上。 作为群居动物&#xff0c;企鹅们喜欢聚在一起&#xff0c;因此&#xff0c;它们想在同一块浮冰上会合。 企鹅们不想淋湿自己&#xff0c;所以它们只能利用自己有限的跳跃能力&#xff0c;在一块块…

容器_Docker ( 06 )

容器_Docker ( 05 ) Kubernetes 资源对象管理 资源对象文件 模板与帮助信息 资源对象文件优势 命令无法实现高级复杂的功能某些资源对象使用命令无法创建方便管理 , 保存 , 追溯历史 资源对象文件太长 , 记不住怎么办 使用命令创建模板查询帮助信息查询官方手册 生成资源…

区块链游戏解说:什么是 Ultimate Champions

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;Ultimate Champions Dashboard 什么是 Ultimate Champions Ultimate Champions 是一款免费的奇幻足球和篮球游戏&#xff0c;拥有官方授权的数字卡牌作为区块链上的 NFT…

go interface{} 和string的转换问题

1.遇到的问题 问题来源于,我sql模版拼接遇到的问题。 首先&#xff0c;这样是没有问题的。 var qhx interface{} "qhx"s : qhx.(string)fmt.Println(s) 但是当我在这段代码里用:1.类型断言 var sqlStr "select * from tx_user where username %s" join…

SpringBoot -【SmartInitializingSingleton】基础使用及应用场景

SmartInitializingSingleton 在继续深入探讨 SmartInitializingSingleton接口之前&#xff0c;让我们先了解一下 Spring Framework 的基本概念和背景。Spring Framework 是一个开源的 JavaEE&#xff08;Java Enterprise Edition&#xff09;全栈&#xff08;full-stack&#x…

C++面试题精选与解析

C面试题精选与解析 一、基础与语法 请问C中的指针和引用有什么区别&#xff1f; 指针是一个变量&#xff0c;存储的是另一个变量的内存地址。指针可以被重新赋值以指向另一个不同的对象。而引用是某个变量的别名&#xff0c;一旦引用被初始化为一个变量&#xff0c;就不能改变…

高级统计方法 第4次作业

作业评阅&#xff1a; 概念 2.问题 KNN分类和KNN回归都是KNN算法在不同类型数据上的应用&#xff0c;但它们之间存在明显的区别。 解决的问题类型不同&#xff1a;KNN分类适用于解决分类问题&#xff0c;而KNN回归则适用于解决回归问题。当响应变量是连续的&#xff0c;根据…

windows安装 RabbitMQ

首先打开 RabbitMQ 官网&#xff0c;点击 Get Started(开始) 点击 Download Installation(下载安装)。 这里提供了两种方式进行安装&#xff0c;我们使用第二种方法。 使用 chocolatey以管理用户身份使用官方安装程序 往下滑&#xff0c;第二种方法需要 Erlang 的依赖&#x…

UE蓝图 函数调用(CallFunction)节点和源码

系列文章目录 UE蓝图 Get节点和源码 UE蓝图 Set节点和源码 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 UE蓝图 入口(FunctionEntry)节点和源码 UE蓝图 返回结果(FunctionResult)节点和源码 UE蓝图 函数调用(CallFunction)节点和源码 文章目录 系列文章目录一、Call…