深度学习小白——物体定位和检测
来源:互联网 发布:战地4优化补丁 编辑:程序博客网 时间:2024/06/06 02:37
此篇是看CS231n的课后笔记,方便以后查阅,因为刚开始接触,如果有错误,欢迎指正~
一、 Classification+Localization定位
定位一般是指一张图有一个类别,有单个物体需要去定位
常用数据库:ImageNet localization数据库
对于分类任务:
- 目标:分出类别
- 输入:图像
- 输出:图像类别
- 评价指标:准确度
对于定位任务:
- 目标:标出该图中类别物体的位置(矩形框)
- 输入:图像
- 输出:bounding box (x,y,w,h) 4个数
- 评价指标:与所给框的交叉重叠部分
- 训练一个分类网络(AlexNet,VGG...)
- 在一个特定位置(conv后或者FC后)重新连接一个Regression head,用于训练框的位置
- 训练回归网络,用SGD+L2 Loss,分两种回归:不定类回归(1个box)/ 特定类回归(C个box)
- 测试时,把两种heads都加上得到分类标签+定位框
主要思想:
- 用一个滑动窗口在高分辨率的图片上不同位置滑动
- 将全连接层转换为1*1卷积层,节省计算资源
- 在不同尺度上将分类器和回归器的预测结果融合,从而得到最终预测结果
mAP是个0-100的数,越大越好
【R-CNN】 ——Region based CNN
Girschick et al, “Rich feature hierarchies for accurate object detection and semantic segmentation”, CVPR 2014
Training步骤:
- 训练或下载一个分类网络(如AlexNet)
- fine-tune model for detection,比如训练时是1000类,然而要检测的只有20类+一个背景类,所以共21类,所以我们要微调网络
- Extract features,对每张图用Region proposals选出很多候选区域,然后对所有候选区域进行crop和warp使之符合CNN输入size,送入CNN网络到pool5,保存下该层的feature maps
- 对每一类执行二分SVM对所选区域内的图像做分类
- bounding box regression对于每一类,训练一个线性回归模型,去掉一些不好的候选框以及对框做一些微调与修正,比如中间的这个框就有点偏左,所以dx为正值,意味着朝着向右的方向为正确方向。
- 测试时太慢了,因为它要将每个region proposal都送入CNN跑一遍,而推荐的region大约有几千个。
- SVMs和回归都是离线训练,使得CNN特征并没有依据SVM/回归的结果作更新
- 复杂的training pipeline
不再像R-CNN里先训卷积,在做分类和回归,这里是一个端到端的完整的训练过程,使得CNN提取到的特征也能随着SVM/Regression一起更新。解决了问题2
对于问题1,Fast R-CNN里先将整幅图通过CNN,然后在得到的高分辨率的feature map上进行ROI pooling,直接从feature map上提取感兴趣区域。通过共享不同目标框的卷积特征的计算大大降低运算量。
测试模型:
【ROI Pooling】
对输入的高分辨率图像,先用region proposal得到候选框,然后整幅图卷积后得到一个高分辨率的feature map,而全连接层希望得到的是低分辨率的特征值。所以我们将在原图上给出的目标框(region proposals)直接映射到feature map上,然后把对应区域的feature map切成小网格状,对每一小格作max pooling,就得到了感兴趣区域的卷积特征。
一个直观的理解就是:与R-CNN不同,R-CNN是先对在原图上的推荐区域做变形crop到CNN合适大小再分别作CNN,而fast R-CNN是先作卷积,然后再在所得的共享feature map上提取推荐区域做变形crop(pooling)成ROI region.由于卷积只是一个特征提取过程,这与图像的区域位置没有关系,所以不需要把每个候选框分别传入CNN,而是可以先把整幅图送入CNN,然后再挑选对应区域的特征进行分类检测。
这种方法我们也知道相应的BP怎么做,所以运算起来很方便
-->
【Fast R-CNN的结果】
可以看出Fast R-CNN在训练速度和测试速度都有很明显的提升,在mAP上也有微小的进步。
但要注意,这里的测试时间是不包括Selective Search 的,如果算上Selective Search那么速度提升就不那么明显了
所以之后又有人提出了 Faster R-CNN!
【Faster R-CNN】——Compute region proposals within the network
Ren et al, “Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks”, NIPS 2015
相比于Fast R-CNN,Faster的最大亮点就是提出了Region Proposal Network(RPN网络),这个网络训练用于产生推荐区域,所以不再需要额外的region proposals!这样会大大加快运行速度
【Region Proposal Network】
- 一个滑动窗口在feature map上滑动
- 建立一个小网络用于:判断该窗口内存不存在要分类的物体(n scores),以及对bounding box位置进行回归(4n coordinates)
- 对于滑动窗口所在的每一个位置,采用N个anchor boxes,论文中默认使用3中不同尺度,3种不同宽高比,共9中anchors在每一个滑动位置。这些anchor boxes具有平移不变性,在每个位置都是同样大小,回归过程就给出了这些anchor boxes的偏差,分类过程给出已回归过的anchor存在要分类物体的可能性。
- 训练过程中,不同于Fast R-CNN,对于K个bounding-box,都是从同样的3*3的feature map得到,只是不同的anchors。为了保证尺度多样性,有k个回归器,负责回归不同scale和不同宽高比的bounding-boxes,所以每个回归器采用不同的参数,它们彼此之间不共享参数。
- RPN的损失函数:对每一个anchor赋予一个二分的class label(positive or negative)。赋予规则:对于那些(1)与ground truth 有最大Intersection-over-Union重叠的anchor(2)有与ground truth高于0.7 IoU 重叠的anchors赋予positive标签,给非positive且IoU低于0.3的anchors赋予negative标签。对于其中既不是positive也不是negative的anchors就不作为训练目标了。Loss function 如下:
- RPN regression (anchor -> proposal)
- Fast R-CNN classification (over classes)
- Fast R-CNN regression (proposal -> box)
【Faster R-CNN结果】
可以看到它相较于Fast R-CNN又加快了10倍,但效果却差不多
之后课程又提到了YOLO-You Only Look Once 网络,它比Faster还快,但是效果没有Faster好,这块先不记录了
- 深度学习小白——物体定位和检测
- 深度学习物体检测(一)——RCNN
- 深度学习物体检测(二)——SPPnet
- 深度学习物体检测(三)——FAST-RCNN
- 深度学习物体检测(四)——Faster-RCNN
- 深度学习物体检测——常用资源简述
- 深度学习物体检测(六)——YOLO
- 深度学习物体检测(七)——SSD
- 深度学习物体检测(八)——YOLO2
- 深度学习物体检测(五)——对象检测RCNN系列总结
- 深度学习物体检测(九)——对象检测YOLO系列总结
- 深度学习之目标检测——基于R-CNN的物体检测
- 深度学习之物体检测——YOLO(一)_介绍
- 深度学习之物体检测——YOLO(三)_PyTorch实现
- 深度学习之物体检测——Fast R-CNN(Ross Girshick)
- 深度学习之物体检测——YOLO(二)_用作者提供的YOLO实现进行检测
- 物体定位与检测
- 深度学习在 iOS 上的实践 —— 通过 YOLO 在 iOS 上实现实时物体检测
- jdk官方下载+检验是否安装成功
- Java IO流分析整理
- 设计模式六大原则之四:接口隔离原则
- JSON格式String转Map
- js延时执行方法
- 深度学习小白——物体定位和检测
- 集合
- java使用jxl导出excel并单元格自适应
- 让menu同时显示图标和文字
- Java反射实例(实战方能理解jdk的各种方法)
- 流量控制策略(汇总)
- Android 开发 Tip 14 -- Singleton
- [ElasticSearch2.x]Filter之Cache
- MVVM模式的简单案例