前言
之前已经介绍过分类算法了,输入一张图片,通过卷积-池化-全连接基本模块,可以对图片进行区分。但实际的生活中,并不是对一张图片进行分类就够了,或者说分类已经无法满足我们的需求了,比如收集手机拍照时,会有一个矩形的框对人体或者人脸进行识别,这就是通俗的检测了。
目标检测基本概念
分类:是什么?定位:在那里?是什么?检测:在那里?分别是什么?
1.BBox:边界框,格式(x,y,w,h),其中x和y可以是左上角的左边或者是边界框中心点的坐标,w和h分别是框的固定宽和高。
2.IOU:交并比。两个框的交集/两个框的并集,用来确定正负样本
3.NMS:非极大抑制,通过IOU计算分数最高的框,然后计算与最高分数框重合过多的框。
R-CNN系列算法的介绍
R-CNN的基本思路:
- 通过选择性搜索(selective search:感兴趣可以去了解一下)生成2k个候选框
- 将候选框resize成统一的大小输入CNN网络(这里用到的是AlexNet网络,所以resize成277*277的输入,经过5层卷积和2层全连接,输出4096长度的输出)
- 将每个候选框的输出通过SVM进行打分(通过NMS去掉高分区域中IOU大于阈值的候选框),同时候选框通过BBox regression进行调整。
- 最后输出类别和框
注意:CNN的参数是共享的,但是每一个类别的svm参数是不同的,有多少类就有多少svm分类器进行分类。
fast-R-CNN基本思路:
- 输入是224*224,经过5个卷积层和2个降采样层(这两个降采样层分别跟在第一和第二个卷积层后面)后
- 进入ROIPooling层,该层是输入是conv5层的输出和region proposal,region proposal的个数差不多2000。然后再经过两个都是output是4096的全连接层。
- 最后分别经过output个数是21和84的两个全连接层(这两个全连接层是并列的,不是前后关系),前者是分类的输出,代表每个region proposal属于每个类别(21类)的得分,后者是回归的输出,代表每个region proposal的四个坐标。
- 最后是两个损失层,分类的是softmaxWithLoss,输入是label和分类层输出的得分;回归的是SmoothL1Loss,输入是回归层的输出和target坐标及weight。(摘抄:Fast RCNN算法详解_fast rcnn详解_AI之路的博客-CSDN博客)
注意:Fast R-CNN与R-CNN在训练上的区别主要是
- 第一个卷积块输入时是整张图片
- 第二步将整张图片卷积后的结果和2k个候选框输入到ROI层中进行尺寸的调整
- 分类器不再使用SVM进行分类,通过softmax进行分类和回归
Faster R-CNN基本思路:
- 输入图像。
- 通过区域生成网络RPN生成候选区域。
- 提取特征。
- 分类器分类,回归器回归并进行位置调整。
目标检测所需要的四个步骤,即候选区域生成,特征提取,分类器分类,回归器回归,这四步全都交给深度神经网络来做。由两个模块组成:区域生成网络RPN候选框提取模块+Fast RCNN检测模块(摘抄:https://blog.csdn.net/gentelyang/article/details/80469553)
文中相应的图片来自博客:https://blog.csdn.net/weixin_41108334/article/details/82897572?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control