目标检测Faster rcnn及Pascal voc数据集

目标检测Faster rcnn及Pascal voc数据集_第1张图片

1、PASCAL VOC2012数据集讲解与制作自己的数据集

Pascal VOC

Pascal VOC 2012数据集下载-把镜像网址复制到迅雷中进行下载,能达到10M/s
pascal_voc的标签是xml文件 coco的标签是json文件,网上可以找到相互转换的代码
labelimg-可以生成xml或者json标注文件
labelme-json文件
目标检测Faster rcnn及Pascal voc数据集_第2张图片
目标检测Faster rcnn及Pascal voc数据集_第3张图片
在这里插入图片描述

train.txt和val.txt是互斥的,trainval.txt是用来训练最终网络的,可以用voc2007test数据集去做验证。
目标.txt-(1表示有该目标物,-1表示无该目标物,0表示检测起来difficult),对每一个目标都有train\val\trainval.txt
目标检测Faster rcnn及Pascal voc数据集_第4张图片

对图像数据标注,得到标签信息:

安装labelimg: cmd->pip install labelImg

使用labelimg
方法一:
cmd->
labelImg或者
labelImg [IMAGE_PATH] [PRE-DEFINED CLASS FILE](图像路径、类别名txt文件)
方法二:
image文件夹里存放的是你的图像数据,classes.txt存放的是你的目标类别信息。
目标检测Faster rcnn及Pascal voc数据集_第5张图片
在data_wide文件夹下按住shift,单击右键,在当前目录下进入powershell窗口。输入labelImg [IMAGE_PATH] [PRE-DEFINED CLASS FILE](图像路径、类别名txt文件)
目标检测Faster rcnn及Pascal voc数据集_第6张图片
目标检测Faster rcnn及Pascal voc数据集_第7张图片
目标检测Faster rcnn及Pascal voc数据集_第8张图片

目标检测Faster rcnn及Pascal voc数据集_第9张图片

这样你的所有标注数据就存储在annotation文件夹下了

标注后建立自定义的VOC格式数据集,利用开源代码训练:

方法一:使用pascal VOC数据集的加载方法
自己的数据集要和VOC数据集有相同的文件格式:
需要写一个程序split.py划分训练集和验证集。
目标检测Faster rcnn及Pascal voc数据集_第10张图片

方法二:保持自己标注好的数据集格式不变,添加自己的路径
目标检测Faster rcnn及Pascal voc数据集_第11张图片

注:也可以进行源码编译,根据自己的需求,更改labelImag源码

划分训练集和验证集

1、用简单粗暴的方法将数据集按比例划分成训练集和验证集。
可以利用faster_rcnn文件夹中的split_data.py脚本。
2、十字交叉验证。
批量读取文件名和批量改写文件名-在目标文件夹内新建各文件

2、目标检测mAP计算以及coco评价标准

coco evalution result返回的是mAP,而不是AP
IOU-IoU 的全称为交并比(Intersection over Union),IoU 计算的是 “预测的边框” 和 “真实的边框” 的交集和并集的比值。

3、目标检测

one-stage(基于anchors直接进行分类以及调整边界框)
two-stage(分成两步,先生成候选框RPN,基于anchors寻找前景以及调整边界框;然后基于生成的候选框进行分类,然后对边界框调整)
目标检测Faster rcnn及Pascal voc数据集_第12张图片
pytorch官方教程-object detection
发展趋势:R-CNN->Faster R-CNN逐渐融合成端对端的网络

R-CNN:

Q1:selective search生成候选区域的方法(图像分割)?
Q2:如何利用非极大值抑制(nms)剔除重叠候选框?
Q3:每一类的SVM分类器如何设计?
Q4:如何对经过nms后的候选框进行进一步筛选(用回归器修正之前)?根据和groundtruth是否有交集等规则
Q4:边界框回归器的作用?(作用:最后由得到的回归参数对ROI进行调整(4个公式),得到最终预测的目标框。)
Q5:边界框回归器的结构和损失函数是什么样的?原论文中也没有详细讲解,边框回归(Bounding Box Regression)详解
目标检测Faster rcnn及Pascal voc数据集_第13张图片
用SS算法得到2k个候选框,缩放到同一尺寸后输入到backbone中提取特征,然后展平
再通过SVM对2k个候选框分类,再对每一类候选框分别进行nms剔除每一类的重叠候选框,再对剩下的候选框进行筛选,
对于最终留下的每一类候选框分别用边界框回归器进行fine-tunning。

1、Selective Search->
目标检测Faster rcnn及Pascal voc数据集_第14张图片

2、提取特征(分类网络展平后去掉全连接层)->
目标检测Faster rcnn及Pascal voc数据集_第15张图片

3、SVM分类(2分类,每一类有一个SVM分类器,非极大值抑制剔除重叠建议框)->
目标检测Faster rcnn及Pascal voc数据集_第16张图片
目标检测Faster rcnn及Pascal voc数据集_第17张图片
对于每个类别寻找得分最高的目标,分别进行极大值抑制,也即对SVM输出的每一列进行非极大值抑制,剔除部分重叠框。
目标检测Faster rcnn及Pascal voc数据集_第18张图片

4、使用回归器修正候选框(回归器的训练-候选框对照ground Truth得到四个参数:中心点的x y方向偏移量、H W的尺寸缩放比例,然后进行修正)
目标检测Faster rcnn及Pascal voc数据集_第19张图片
回归器的损失函数:目标检测Faster rcnn及Pascal voc数据集_第20张图片

目标检测Faster rcnn及Pascal voc数据集_第21张图片
存在的问题:
SS算法慢,特征提取操作冗余(每个proposal都要进行一次前向传播),卷积网络、SVM、回归器都要单独进行训练,过程繁琐。
目标检测Faster rcnn及Pascal voc数据集_第22张图片

Fast R-CNN:

Q1:如何得到特征图?直接将图片送入backbone
Q2:训练时的样本如何从所有候选框中选择?
Q3:为什么分正负样本,正负样本的划分标准,且训练时正负样本的比例?
正样本-目标,负样本-背景。 分正负样本是为了避免目标过多,而致使分类器把背景归类成目标。(目前的理解)
Q4:ROI pooling层将特征矩阵缩放到同一尺寸所用的采样方式?
Q5:边界框回归器的结构和训练过程(损失函数)?分类器和回归器分别都是一个全连接层吗?(等到讲代码的时候看结构)
Q6:如何利用边界框回归预测值得到真实的边界框回归参数?
Q7:为什么选择用smoothL1 loss作为边框回归器的损失函数?

目标检测Faster rcnn及Pascal voc数据集_第23张图片
Fast RCNN的算法流程:
目标检测Faster rcnn及Pascal voc数据集_第24张图片
步骤:
首先,和RCNN相同,先得到2k个候选框。
然后将图片输入backbone,得到一张该图片的特征图,
然后对SS得到的候选区域按照特定规则进行采样,得到一些训练样本(分为正负样本,且有一定的比例),
然后得到这些训练样本(候选区域)在特征图上的映射(特征矩阵),
经过ROIpooling层后(7x7),进行展平操作,
设计分类器(N+1个节点的全连接层 + softmax层),
设计边界框回归器(4x(N+1)个节点的全连接层),
设计Multi task Loss(classifier-CrossEntropy 、regressor-SmoothL1 loss),对分类器和边界框回归器同时进行训练。

特征图以及候选框对应的特征矩阵:
目标检测Faster rcnn及Pascal voc数据集_第25张图片
训练样本(候选框)的选取,以及正负样本的划分标准(和faster r-cnn有区别,后者在前者的基础上有所改进):

把不同尺寸的ROI(候选框对应的特征矩阵)通过池化操作,缩放到7*7,之后展平:
目标检测Faster rcnn及Pascal voc数据集_第26张图片
分类器:(原文中有20类目标,输出结果为该候选框为背景和各类目标的概率,这是由损失函数决定的)
目标检测Faster rcnn及Pascal voc数据集_第27张图片
边界框回归器:(输出结果为该候选框的回归参数(即为对候选框位置和尺寸的调整参数),这也是由损失函数决定的)
目标检测Faster rcnn及Pascal voc数据集_第28张图片
如何利用回归参数对候选框位置和尺寸进行调整,得到最终预测的边界框?-下图的四个公式
目标检测Faster rcnn及Pascal voc数据集_第29张图片
如何定义网络的损失函数?-把分类器和回归器的损失按一定比例进行加和
目标检测Faster rcnn及Pascal voc数据集_第30张图片
分类器的损失函数-交叉熵:
目标检测Faster rcnn及Pascal voc数据集_第31张图片
边界框回归器的损失函数:回归损失函数1:L1 loss, L2 loss以及Smooth L1 Loss的对比、损失函数之SmoothL1Loss、smooth L1 loss
1、L2-MSE的函数曲线光滑、连续,处处可导,便于使用梯度下降算法。对于较大的误差(>1)给予较大的惩罚,较小的误差(<1)给予较小的惩罚。对离群点比较敏感,受其影响较大。
2、L1-MAE曲线连续,但是在y−f(x)=0处不可导。而且 MAE 大部分情况下梯度都是相等的,这意味着即使对于小的损失值,其梯度也是大的。对于任意大小的差值,其惩罚都是固定的。对于离群点不那么敏感。
3、Smooth L1-该函数实际上就是一个分段函数,在[-1,1]之间实际上就是L2损失,这样解决了L1的不光滑问题,在[-1,1]区间外,实际上就是L1损失。完美的避开了L1和L2作为损失函数的缺陷。这样就解决了L2离群点梯度爆炸的问题。
目标检测Faster rcnn及Pascal voc数据集_第32张图片
当候选框是背景时,u取0,因为此候选框没有真实边界框,无法得到真实回归参数,所以无法对其求smoothL1 loss。
目标检测Faster rcnn及Pascal voc数据集_第33张图片
标签中已知的groundtruth是G(目标框的真实位置),如何根据输入的候选框位置(ROI)得到对应的候选框回归参数V(相当于预测的回归参数U的groundtruth)?
目标检测Faster rcnn及Pascal voc数据集_第34张图片
总结:目标检测Faster rcnn及Pascal voc数据集_第35张图片

Faster RCNN

Q1:RPN的作用、结构?
作用是为Fast RCNN网络提供候选框(对归类为前景的anchor进行回归参数调整后,就成了FastRCNN网络的候选框)。
结构是一个卷积层,并联两个全连接层,一个用于分类(对每个anchor为背景和前景的概率进行预测),另一个用于回归参数预测(预测每个anchor的回归参数)
Q2:如何从一张训练图片的特征图上得到所有的anchor boxes?
先从特征图上的每个s滑动窗口根据一定的规则(尺寸、比例),得到k个anchor boxes。然后遍历整张特征图,得到所有滑动窗口对应的anchor boxes。
Q3:尺寸大于滑动窗口(3x3)的感受野(171)的anchor box(例如256)能否用来作为候选框?
直观上是可以的,因为往往根据一部分信息也能推出整个物体。
Q4:RPN网络训练时划分正样本、负样本的标准?
Q5:RPN网络的训练方式和损失函数?
Q6:整个目标检测网络的训练方式?

目标检测Faster rcnn及Pascal voc数据集_第36张图片
和FastRCNN不同的是,该算法用RPN结构生成候选框。
目标检测Faster rcnn及Pascal voc数据集_第37张图片

RPN的结构和训练(训练样本选取、损失函数定义):
1、RPN结构:
目标检测Faster rcnn及Pascal voc数据集_第38张图片
2、如何从特征图上的一个3x3滑动窗口得到k个anchor boxes?
先找滑动窗口中心对应的原图上的中心点坐标,以该点为中心,选择不同的尺度和比例进行组合缩放,得到一组anchor boxes
目标检测Faster rcnn及Pascal voc数据集_第39张图片
目标检测Faster rcnn及Pascal voc数据集_第40张图片
3、RPN网络的训练样本选择:
目标检测Faster rcnn及Pascal voc数据集_第41张图片
RPN训练时训练样本中正负样本比例的划分:目标检测Faster rcnn及Pascal voc数据集_第42张图片
正负样本的定义:(舍去正负样本以外的样本)目标检测Faster rcnn及Pascal voc数据集_第43张图片
4、RPN网络的损失函数:目标检测Faster rcnn及Pascal voc数据集_第44张图片
分类损失:
(1)看做是多分类CrossEntropy(虽然只有两类,仍然用多分类的公式):每个anchor box输出两个概率(背景、前景)。
目标检测Faster rcnn及Pascal voc数据集_第45张图片
(2)看做是二分类CrossEntropy(用二分类问题对应的公式):每个anchor box输出一个概率(如果是背景则输出0、如果是前景则输出1)。目标检测Faster rcnn及Pascal voc数据集_第46张图片
两个Loss求出的结果一样,但是对应的网络结构不同(输出维度不同,对应的classes groundturth不同)
边界框回归损失:(和Fast RCNN相同)
目标检测Faster rcnn及Pascal voc数据集_第47张图片

Fast RCNN的损失函数:
目标检测Faster rcnn及Pascal voc数据集_第48张图片

Faster RCNN网络的训练:
目标检测Faster rcnn及Pascal voc数据集_第49张图片
目前都是采用联合训练方法,将两个网络的LOSS相加,再进行反向传播。

FPN详解
FPN(特征图金字塔网络)理论基础与具体实现

你可能感兴趣的:(计算机视觉,计算机视觉,深度学习,pytorch)