网站绑定ftp,深圳东门老街在哪个区,免费制作链接,梵克雅宝官网报价文章目录 摘要Abstract1.目标检测任务描述1.1 目标检测分类算法1.2 目标定位的简单实现思路1.2.1 回归位置 2.R-CNN2.1 目标检测-Overfeat模型2.1.1 滑动窗口 2.2 目标检测-RCNN模型2.2.1 非极大抑制#xff08;NMS#xff09; 2.3 目标检测评价指标 3.SPPNet3.1 spatial pyr… 文章目录 摘要Abstract1.目标检测任务描述1.1 目标检测分类算法1.2 目标定位的简单实现思路1.2.1 回归位置 2.R-CNN2.1 目标检测-Overfeat模型2.1.1 滑动窗口 2.2 目标检测-RCNN模型2.2.1 非极大抑制NMS 2.3 目标检测评价指标 3.SPPNet3.1 spatial pyramid pooling 4.总结5.参考文献 摘要
目标检测是计算机视觉领域的重要任务旨在精确识别图像中的物体及其位置。传统方法如滑动窗口和Overfeat通过暴力穷举实现目标检测但计算资源需求较高且准确率有限。RCNN创新性地引入候选区域方法通过Selective Search生成候选区域并结合CNN特征提取、SVM分类和边界框回归实现更高的检测精度。然而RCNN存在多阶段训练复杂、计算效率低等问题。SPPNet对RCNN进行了改进提出空间金字塔池化SPP层减少了特征冗余并共享CNN计算结果大幅提升了训练速度。尽管SPPNet提高了效率但其分阶段训练的缺陷仍限制了实用性。本周学习了目标检测算法的发展过程包括目标定位、候选区域生成、分类及评价指标分析了RCNN和SPPNet的核心技术及其优势与不足。
Abstract
Object detection is an important task in the field of computer vision, which aims to accurately identify objects and their positions in images. Traditional methods such as sliding window and Overfeat achieve object detection through brute force exhaustion, but the computational resources are high and the accuracy is limited. RCNN innovatively introduces candidate region method, generates candidate region by Selective Search, and combines CNN feature extraction, SVM classification and boundary box regression to achieve higher detection accuracy. However, RCNN has the problems of complex multi-stage training and low computational efficiency. SPPNet improves RCNN by proposing a space pyramid pool (SPP) layer, which reduces feature redundancy and shares CNN calculation results, greatly improving the training speed. Although SPPNet improves efficiency, its phased training limitations limit its usefulness. This week, we learned the development process of target detection algorithm, including target location, candidate region generation, classification and evaluation index, and analyzed the core technologies of RCNN and SPPNet and their advantages and disadvantages.
1.目标检测任务描述
1.1 目标检测分类算法
两步走的目标检测 1. 先找出一些候选区域 2. 对区域进行调整、分类 端到端的目标检测 1. 采用一个网络一步到位 2. 输入图片输出又哪些物体物体在什么位置 物体位置 1. x,y,w,h[bounding box]:(x,y)为物体的中心位置以及中心点距离物体两边的长宽 2. xmin、ymin、xmax、ymax :物体位置的左上角、右下角坐标
1.2 目标定位的简单实现思路
在分类直接输出各个类别的概率如果在加上定位可以考虑在网络的最后输出加上位置信息。
1.2.1 回归位置
增加一个全连接层FC1、FC2 FC1:作为类别的输出 FC2:作为这个物体位置数值的输出 右上角的全连接层是对物体进行分类衡量整个网路的损失可以使用交叉熵损失函数进行训练右下角为位置输出与真实标签进行对比衡量网络可以使用均方误差损失
2.R-CNN
对于多个目标的情况不能使用固定个数输出物体的位置。
2.1 目标检测-Overfeat模型
2.1.1 滑动窗口
首先定义k个大小窗口每个窗口滑动提取m个总共提取k*m张图片通常会直接将图片变形转换为固定大小的图片变形图像块被输入cnn分类器中提取特征后使用一些分类器识别类别和该边界框的另一个线性回归器。 Overfeat总结这种方法类似一种暴力穷举的方式会消耗大量的计算资源窗口大小的设置可能会造成不准确。但是提供了一种解决目标检测问题的思路。
2.2 目标检测-RCNN模型
不使用暴力方法使用候选区域方法创建目标检测的区域为图像领域实现物体检测模型提供了思路。 RCNN在物体检测中的步骤
使用SelectiveSearch在一张图片上提取2000个候选区域长宽不固定对2000个候选区域做候选区变换输入cnn网络中得到特征向量[2000,4096]经过20个类被的SVM分类器对2000个候选区域做判断得到[2000,20]得分矩阵对2000个候选区域做非极大值抑制剩下一些得分高结果好的框修正候选框对bbox做回归微调
下面是R-CNN选用SVM进行二分类。假设检测20个类别那么会提供20个不同类别的SVM分类器每个分类器都会对2000个候选区域的特征向量分别判断一次这样就能的出2000*20的得分矩阵 ss方法代码实现
def selective_search(im_orig, scale1.0, sigma0.8, min_size50):选择性搜索生成候选区域:param im_orig: 输入3通道图像:param scale: 分割参数, 数值越小, 分割越精细:param sigma: 分割图像前对图像进行高斯平滑的参数:param min_size: 分割的最小单元, 一般设置10-100间:return: img-带有区域标签的图像(r, g, b, region), regions-字典{”rect“:(left, top, width, height), labels:[...]}assert im_orig.shape[2] 3, 3ch image is expected# 加载图像获取最小分割区域# 区域标签存储在每个像素的第四个通道 [r, g, b, region]img _generate_segments(im_orig, scale, sigma, min_size)if img is None:return None, {}imsize img.shape[0] * img.shape[1]R _extract_regions(img)# 获取相邻区域对neighbours _extract_neighbours(R)# 计算初始相似度S {}for (ai, ar), (bi, br) in neighbours:S[(ai, bi)] _calc_sim(ar, br, imsize)# 进行层次搜索, 直到没有新的相似度可以计算while S ! {}:# 获取两最大相似度区域的下标(i, j)i, j sorted(list(S.items()), keylambda a: a[1])[-1][0]# 将最大相似度区域合并为一个新的区域rtt max(R.keys()) 1.0R[t] _merge_regions(R[i], R[j])# 标记相似度集合中与(i, j)相关的区域, 并将其移除key_to_delete []for k, v in S.items():if (i in k) or (j in k):key_to_delete.append(k)# 移除相关区域for k in key_to_delete:del S[k]# 计算与新区域rt与相邻区域的相似度并添加到集合S中for k in filter(lambda a: a ! (i, j), key_to_delete):n k[1] if k[0] in (i, j) else k[0]S[(t, n)] _calc_sim(R[t], R[n], imsize)regions []for k, r in R.items():regions.append({rect: (r[min_x], r[min_y], r[max_x] - r[min_x], r[max_y] - r[min_y]),size: r[size],labels: r[labels]})return img, regionsss方法生成的推荐区域示例
2.2.1 非极大抑制NMS
对于2000个候选框对于上面提到的20个物体值保留一个最优的框同时抑制哪些冗余的候选框。RCNN预测2000个候选框得到k个假设有k个ground truth比较准确的候选框。 迭代过程 对于2000个候选区域得分进行概率筛选小于0.5的全部丢弃。 对于剩余的框假设图片真实物体个数为2n筛选之后候选框为5p,计算n中每个物体位置与所有p的交并比IoU,得到p中每个候选框对应IoU最高的一个。如下图AC候选框对应左边车辆B,D,E对应右边车辆。 NMS实现
import numpy as np
import torchdef nms_cpu(dets, thresh):#detsdetections就是矩形目标框候选大概有一两万个thresh0.7阈值dets dets.numpy()x1 dets[:, 0]y1 dets[:, 1]x2 dets[:, 2]y2 dets[:, 3]#取出矩形左上角和右下角的坐标scores dets[:, 4]#第五个维度存放每个矩形的分值areas (x2 - x1 1) * (y2 - y1 1)#每个矩形的面积order scores.argsort()[::-1]#降序排列分值高的在前面。#argsort排序得到的是下标并没有把原数据排序keep []#保存需要留下来的目标框的下标while order.size 0:i order.item(0)#取x第一个下标keep.append(i)#第一个下标总归会保留下来xx1 np.maximum(x1[i], x1[order[1:]])yy1 np.maximum(y1[i], y1[order[1:]])xx2 np.minimum(x2[i], x2[order[1:]])yy2 np.minimum(y2[i], y2[order[1:]])w np.maximum(0.0, xx2 - xx1 1)h np.maximum(0.0, yy2 - yy1 1)inter w * hovr inter / (areas[i] areas[order[1:]] - inter)#计算第一个候选框与后面所有候选框的IOUinds np.where(ovr thresh)[0]#小于阈值的order的下标-1两个注意点第一order的下标不是dets的下标第二比order的下标少1#把大于阈值的候选框过滤出去小于或等于阈值的留下来#inds 是下标order的下标即order存的是dets的下标#np.where返回的是一个tuple因此需要加[0]取出第一个元素该元素就是一个下标数组#比如order[0,10,12,33,965,7000,900],len(order)7#比如inds[1,2,5],因为len(order[1:])6,所以inds的值最多是5order的下标最多是6order order[inds 1]#把下标少1加回来并取出下一轮的order值#inds1[2,3,6]#因为计算IOU时x1[order[1:]]即不计算自己与自己的IOU#所以下标与order对应的下标刚好少1即len(inds)len(order)-1,因此需要inds1才刚好从order中取出下标#此时order[12,33,900]进入下一个循环return torch.IntTensor(keep)为了使候选框更加准确需要去修正原来的位置R-CNN提供了一个方法建立bbox regressor回归用于修正筛选后的候选区域使其回归ground-truth,默认认为这两个框之间为线性关系因为在最后筛选出来的候选区域和ground-truth很接近了。 上述也就是去训练学习参数的过程。
2.3 目标检测评价指标
IoU交并比两个区域的重叠程度overlap,候选区域和标定区域的IoU值 通常类别正确且IoU0.5,IoU越接近1则表示候选框越精确。 平均精确率 对于IoU只是知道重叠程度并不知道分类的性能情况。引入平均精确率多个分类任务的AP的平均值 对于每个类别计算AP(AUC)的值 1.对于猫类别候选框预测是猫类别的概率做一个排序大于0.7表示为正样本否则表示为负样本得到候选框排序列表 2.对于猫当中候选框排序列表进行计算AUC值 3.最终得到k(20)个类别20个AP相加
总结表现在VOC2007数据集上的平均精度map达到66%。 缺点 1.训练阶段多步骤繁琐微调网络训练SVM训练边框回归器 2.训练耗时占用磁盘空间大VOC数据集的检测结果由于SVM的存在 3.处理速度慢使用GPU,VGG模型处理一张图片需要47s 4.图片形状变化候选区域经过crop/warp进行固定大小无法保证图片不变形
3.SPPNet
相对于RCNN主要存在两点改进的地方提出了SPP层。
图片输入到网络先得到一个feature map原图中通过选择搜索得到的候选区域直接映射feature map中对应位置映射过来额候选区域的特征经过SPP层输出固定大小的特征向量。
3.1 spatial pyramid pooling
通过spp层将特征图转换成固定大小的特征向量 示例 假设原图输入时224*224,对于conv出来后的输出为13 * 13 * 256其中某个映射的候选区域假设为12 * 10 * 256
spp层将每一个候选区域分为1 * 12 * 2 4 * 4 三张子图对每个子图的每个区域做max pooling,得出特征在连接到一起1641 * 2565376接着给全连接层做进一步处理Spatial bins(空间盒个数)21 总结
优点SPPNet在R-CNN的基础上提出了改进通过候选区域和feature map的映射配合SPP层的使用从而达到了CNN层的共享计算减少了运算时间后面的Fast R-CNN受SPPNet的启发缺点训练仍然很慢效率低特征需要写入磁盘SVM的存在 分阶段训练网络选取候选区域训练CNN,训练SVM,训练bbox回归器SPPNet反向传播效率低
4.总结
目标检测算法从早期的暴力穷举逐步发展到基于深度学习的高效框架如RCNN和SPPNet。RCNN通过候选区域和CNN结合大幅提高了检测精度但其多阶段训练过程复杂耗时且占用大量磁盘空间。SPPNet的出现利用SPP层实现CNN层共享显著提升了训练效率启发了后续的Fast R-CNN等方法。然而SPPNet仍需多阶段训练效率提升有限。
5.参考文献
[1] R. Girshick, J. Donahue, T. Darrell, and J. Malik, “Rich feature hierarchies for accurate object detection and semantic segmentation,” 2014 IEEE Conference on Computer Vision and Pattern Recognition, Columbus, OH, USA, 2014, pp. 580-587, doi: 10.1109/CVPR.2014.81 [2] K. He, X. Zhang, S. Ren, and J. Sun, “Spatial pyramid pooling in deep convolutional networks for visual recognition,” IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 37, no. 9, pp. 1904-1916, Sep. 2015, doi: 10.1109/TPAMI.2015.2389824