计算机视觉算法整理(一):Faster RCNN,bounding box regression,IOU,GIOU-程序员宅基地

技术标签: 深度学习 Deep Learning  算法  

专门收录一下一些有趣的,计算机视觉中我想记录一下的算法,重点关注的是loss function,顺便说下相关算法。因为是收录,只为日后查看之需,有一些会借用一些资料,我会给出引用。

1、Faster RCNN

两阶段目标检测的代表作,可以说是开创了目标检测的一番局面。现在很多公司实际在商用的目标检测算法,依然很多是基于Faster RCNN的。虽然后来各种论文都号称吊打Faster RCNN,但是实际上往往是调参下的结果(有很多,但不是全部)。如果对Faster RCNN也进行细致调参,替换更好的预训练backbone,以及进行样本均衡、难负样本挖掘(hard negtive mining)、loss优化等技术,往往可以得到不错的结果。

经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCNN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显[1]

总体结构

在这里插入图片描述
图1

Faster RCNN其实可以分为4个主要内容[1]:

  • Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
  • Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。
  • Roi Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。
  • Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。

对Faster RCNN的更详细的一个结构图如下:
在这里插入图片描述图2

上图展示了python版本中的VGG16模型中的faster_rcnn_test.pt的网络结构,可以清晰的看到该网络对于一副任意大小PxQ的图像,首先缩放至固定大小MxN,然后将MxN图像送入网络;而Conv layers中包含了13个conv层+13个relu层+4个pooling层;RPN网络首先经过3x3卷积,再分别生成positive anchors和对应bounding box regression偏移量,然后计算出proposals;而Roi Pooling层则利用proposals从feature maps中提取proposal feature送入后续全连接和softmax网络作classification(即分类proposal到底是什么object)[1]。

说实话,Faster RCNN整个端到端流程非常复杂,并不是一下子发明的,首先其集成了大量以往CV领域的成熟技术,比如NMS去重框,以及继承了RCNN,Fast-RCNN发展过来的思路,还有提出Anchor技术,有点集大成的感觉。这些想要细看的同学推荐去看下原论文,以及帖子:Fast R-CNN文章详细解读,以及一文读懂Faster RCNN。记得我自己16年看的时候也是费了不少劲,这里先不赘述了。

bounding box regression

我要重点记录的是 bounding box regression,以及其loss。bounding box regression主要是用来修正anchors(基准框)获得精确的proposals(预测的物体框)。字面意思,regression就是说是要预测出bounding box的位置,所以后面肯定得跟一个回归loss,下面会说。注意的是,bounding box regression在图2的流程中实际上用了两次,一次在proposal框的地方,一次在后面bbox_pred的地方。可以看做第一次是粗调,后一次是细调。

下图所示绿色框为飞机的Ground Truth(GT),红色为提取的positive anchors,即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图相当于没有正确的检测出飞机。所以我们希望采用一种方法对红色的框进行微调,使得positive anchors和GT更加接近。w
在这里插入图片描述
图3

对于窗口一般使用四维向量[x,y,w,h]表示,分别表示窗口的中心点坐标和宽高。对于图 3,红色的框A代表原始的positive Anchors,绿色的框G代表目标的GT,我们的目标是寻找一种关系,使得输入原始的anchor A经过映射得到一个跟真实窗口G更接近的回归窗口G’,即:

在这里插入图片描述
在这里插入图片描述
图4
在这里插入图片描述
所以呢,dx(A),dy(A),dw(A),dh(A)这四个值就是要求的变换值,知道后就可以直接基于A框的原始位置得到G‘的位置。怎么得到这四个值呢?用regression!

在这里插入图片描述
形式如下[2]:
在这里插入图片描述
在这里插入图片描述(这里的 x x x就是前面的 G x G_x Gx x a x_a xa就是前面的 A x A_x Ax。其他几个字母也类似。)

2、IOU,GIOU

IoU,又被称为Jaccard指数,是用于评估两个任意形状相似度的最常用指标,比如用于目标检测和图像分割中。对于如图1中的两个边界框A和B,我们计算出两者的交集I(红色部分),然后计算并集U,那么IoU就是两者的比值[3]:

在这里插入图片描述
在这里插入图片描述
图5

IoU编码的是两个边界框的形状性质,那么边界框的长,宽以及位置信息已经包含在内,所以说IoU是对物体尺度是不敏感的。而且IoU是一个归一化的指标,其值范围在[0,1]之间,当两个物体完全无交集时为0,而完全重叠时为1。所以IoU用于评价预测框和真实框的一致性是非常合适的。

而实际上主流的目标检测模型在训练时都是采用的回归损失,如L1和L2(Faster R-CNN采用smooth L1),我们来分析一下回归损失所面临的问题,边界框通常用左上和右下两个顶点来表示:(x1,y1,x2,y2)。下图给出了相同回归loss下边界框的差异性,其IoU值相差较大。

在这里插入图片描述
图6

其中绿色是真实框,而黑色是预测框,对于图6a,我们固定了两个框的左下顶点,同时固定了右上顶点的距离,此时预测框可以变化多测,但是L2损失是固定的。我们计算IoU值后发现也是变化非常大。同样的图6b可以看到L1损失存在类似的问题。这说明回归loss可能会陷入IoU指标的一个局部极值点。

(不过,也有一点牵强,比如上面写的Faster RCNN,并不是简单用顶点来回归的)

IoU loss已经被应用在图像分割中(与检测不太一样),IoU作为一种损失函数是可以进行BP的,因而可用于模型训练。但是IoU有一个致命的缺点,那就是当两个形状没有任何重叠时,IoU值为0,无法反映两个形状的具体偏差,而且梯度是0,无法对模型进行优化。图7可以展示这个问题,蓝色是真实框,图7a的黄色框和3的绿色框均与真实框没有交集,但是明显7b的预测更好,但是反映在IoU上均为0。

在这里插入图片描述
图7

由于IoU本身存在的问题,论文据此提出了一种新的指标:generalized IoU (GIoU),其计算公式如下:
在这里插入图片描述
最重要的是GIoU会克服IoU的短板,当A和B完全不重合时,GIoU依然起作用。还是前面的例子如图8所示,可以看到图8a相比图b,C的大小较大,这样图8a的GIoU值是小于图b的,这说明GIoU对这种情况是可以处理的,虽然IoU值为0,但是当预测更好时,GIoU值是增加的。论文中以YOLOv3和Faster R-CNN进行实验,发现采用GIoU作为边界框loss,效果有提升。

在这里插入图片描述
图8

在这里插入图片描述

参考资料

[1] https://zhuanlan.zhihu.com/p/31426458
[2] https://blog.csdn.net/liuxiaoheng1992/article/details/81779474
[3] 另辟蹊径!斯坦福大学提出边界框回归任务新Loss:GIoU
[4] Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression
[5] Generalized Intersection over Union(GIOU)论文核心思想解读笔记
[6] 白话mAP

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xbinworld/article/details/103339889

智能推荐

haddop安装_假设haddop安装目录为/usr/local/sec,haddop的配置文件目录是-程序员宅基地

文章浏览阅读339次。所有的配置均在: /usr/local/Cellar/hadoop/3.3.0/libexec/etc/hadoop下。控制我们的从节点在哪里 datanode nodemanager在哪些机器上。核心配置文件,主要定义了我们文件访问的格式 hdfs://配置我们的resourcemanager资源调度。主要定义我们的mapreduce相关的一些配置。指定Java环境:hadoop-env.sh。主要定义配置我们的hdfs的相关配置。主要配置我们的java路径。格式化hdfs文件系统。..._假设haddop安装目录为/usr/local/sec,haddop的配置文件目录是

Linux 用户权限_linux 授权-程序员宅基地

文章浏览阅读7.4k次,点赞12次,收藏27次。默认的ACL权限的作用是:如果个父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。这个SUID只能运行在二进制的程序上(系统中的一些命令),不能用在脚本上,同样也不能放到目录上,放上也是无效的。设置了预设型ACL的目录,其下的所有文件或者子目录就都具有了主目录的ACL权限,并且子目录也同样有预设的ACl权限。任何用户都可以执行,而sudo是认用户名的,不是任何操作都可以执行的,更加精准。读 ——》命令:cat,vim,grep,head,tail,more,less等。_linux 授权

基于java+springboot+vue实现的医院门诊信息管理系统(文末源码+Lw+ppt)23-325-程序员宅基地

文章浏览阅读866次,点赞34次,收藏14次。系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对医院门诊信息的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的思想,在医院门诊信息管理系统实现了用户信息、医生信息、医院门诊、预约订单、就诊信息、诊治信息、患者病历、药品信息等的功能性。关键词:医院门诊信息管理系统;

PCB设计敷铜时的天线效应_pcb中的线条形的底线会形成天线吗-程序员宅基地

文章浏览阅读9.6k次,点赞8次,收藏34次。关于PCB设计敷铜时的天线效应出于让PCB 焊接时尽可能不变形的目的,大部分PCB 生产厂家会要求PCB设计者在PCB 的空旷区域填充铜皮或者网格状的地线。但是我们的工程师对这个“填充”不敢轻易使用,也许是因为在PCB 调试中,曾经吃过“苦头”,也可能是专家们一直没有给出明确的结论。究竟敷铜是“利大于弊”还是“弊大于利”,本文用实测的角度来说明这个问题。下面的测量结_pcb中的线条形的底线会形成天线吗

用 nssm 把 Nginx 安装成 Windows 服务方法-程序员宅基地

文章浏览阅读295次。总之:用 nssm 比srvany.exe简便多了。1. 下载nginx windows版本:http://nginx.org/2. 下载nssm :http://nssm.cc/3. 安装Nginx下载解压到一个目录,nssm下载后解压相应版本(32/64)到一个目录。然后安装服务:nssm install N1"D:\N1\nginx.exe"即可安装成功最基本的服务,不过启动的是..._nssm nigx

H5新特性-程序员宅基地

文章浏览阅读1k次,点赞40次,收藏15次。【代码】H5新特性。

随便推点

异常转化问题: java.util.LinkedHashMap$LinkedValues cannot be cast to java.util.ArrayList-程序员宅基地

文章浏览阅读1w次,点赞5次,收藏3次。使用map中的的map.values()方法返回值,返回类型是Collection,后面在接收的时候使用List进行的强转,例如:public Collection<CartItem> getItems() { return map.values(); }List<CartItem> cartItemList = (ArrayList&..._java.util.linkedhashmap$linkedvalues cannot be cast to java.util.list

spark dataframe笔记 -- dataframe行转列_spark dataset<row> 行转列的方法-程序员宅基地

文章浏览阅读6k次。把dataframe一行内容变成多行。脚本:#!/usr/bin/python# -*- coding: utf-8 -*-"""@author:@contact:@time:"""from __future__ import print_functionfrom pyspark.sql import SparkSessionimport os, timefrom pysp..._spark dataset 行转列的方法

RaspberryPi4B 树莓派4B Linux5.4.y 内核编译_树莓派5.4内核系统镜像-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏23次。1. 下载树莓派镜像1.1 树莓派官网下载最新版本,下载速度比较慢,1.2 从国内下载,如“完整版 2020-08-20-raspios-buster-armhf-full 树莓派最新系统镜”, 版本号5.4.51-v7l+$uname r5.4.51-v7l+2. 修改国内镜像源2.1 ssh连接到树莓派,修改sources.list , 修改第一行为中科大的软件源地址, 其中buster不要写为stretch, 否则会出现解决树莓派apt升级/安装提示依赖问题$ sudo nano /e_树莓派5.4内核系统镜像

技术面试问题汇总第004篇:猎豹移动反病毒工程师part4-程序员宅基地

文章浏览阅读3k次。这次所讨论的三个问题,比如DLL以及HOOK,很容易被病毒木马所利用,因此必须要比较全面地进行了解。而异常处理机制,则往往与漏洞相关联。它们自身的概念并不难理解,只是由之引申而来的问题,在计算机安全领域则是比较高级的技术,也是需要掌握的。尽管面试的时候,往往是理论性比较强,但是实际上最重要的还是动手能力。作为一名反病毒工程师(尽管我目前还不是),不单单要掌握恶意程序的编写技术,更需要清楚知道如何对付这些病毒木马。从这里也能够看出来,反病毒工程师的技术要求是比较高的,毕竟不单单要知道如何以正常手段使用计算机技

.NET ASP.NET全局文件Global.asax用法_全局文件global.asax中怎么使用using集-程序员宅基地

文章浏览阅读705次。ASP.NET全局文件Global.asax用法一、定义Global.asax 文件(也称为 ASP.NET 应用程序文件)是一个可选的文件,该文件包含响应 ASP.NET 或HTTP模块所引发的应用程序级别和会话级别事件的代码。Global.asax 文件驻留在 ASP.NET 应用程序的根目录中。运行时,分析 Global.asax 并将其编译到一个动态生成的 .NET Framework..._全局文件global.asax中怎么使用using集

centos yum安装 Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-puias-程序员宅基地

文章浏览阅读357次。一、在yum安装或者升级的过程中可能会遇到这个问题 Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-puias参看这个网页里面的(http://linuxsysconfig.com/2013/03/running-multiple-python-versions-on-cen..._yum localinstall can not load rpm file: /tmp/pkg.1378.rpm. could not open:/t