0、rcnn
思想、每一部分的作用,如何工作、不足
1、fast rcnn
2、faster rcnn
2.1解决了问题
2.2锚框
2.3RPN
2.4RPN到底学什么
2.5RPNloss
2.6roi pooling
2.7roi pooling不足
2.8Bbox head
1、基本概念
0、rcnn
思想:
对每张图片选取多个区域,然后每个区域作为一个样本进入到卷积网络中提取特征。当时是视为分类问题处理的
选择搜索使用纹理颜色等相似性这种特征进行特征提取特
SVM分类器可以训练出来去判断这个是不是属于某一类
比如2000个候选区域,就要进行2000次卷积,其实相当于一张图片使用一个网络去提取特征
1、fast rcnn
不是端到端,因为他需要在原图上滑动窗口去找一些感兴趣区域。
图片进入CNN提取特征得到特征图
使用roi pooling将其变为大小相同的小块而不是直接变,避免特征损失
2、faster rcnn
2.1解决了问题
faster rcnn解决了滑动窗口提取特征的问题,在特征提取完后的特征图上进行滑动窗口,节约了时间和算力
整个过程分两阶段,先进入RPN提取候选区域,再送入一个网络中进行分类与回归。
2.2锚框
2.3RPN
经过RPN会产生大量认为可能的候选框,经过分类网络与回归网络进行预测。进入分类网络,通过classification loss得到一个二分类结果,是背景或者是前景(数据集上对应的某一类,具体是哪一类,这里先做一个粗略判断),一般设置阈值为0.5,输出大于该阈值的为前景,否则为背景。这些前景又称为感兴趣的区域(Region of Interests,ROI)。进入回归网络,同时,RPN也会在输入的特征图上框定这些ROI的大致位置,即输出Bounding-box。还引入了锚框(anchor),锚框是一组预先在特征图上进行滑动窗口,提前设定好的一组候选框集合,特征图上每个点可能提取到多个锚框。在RPN中通过这些锚框来回归出一些候选区域。锚框其实是来辅助RPN位置回归的。该组候选框的特点是不同面积,不同长宽比。
1、backbone的输出结果得到(512*60*40)进行3*3卷积(得到256*60*40),再用1*1卷积分成2个分支,2维是分类,4维是回归
2、再与anchor结合得到最终的候选框proposal(到这里候选框才生成)
2.4RPN到底学什么:
学anchor是否包含物体
学anchor到真实框的偏移量
2.5RPNloss
有了RPN网络输出,有了这些输出的标签信息就可以计算loss,分类损失与回归损失,回归损失只包含正样本的回归损失
解码:偏移量应用到anchor形成预测框
编码:真实框与anchor生成偏移量
clip:限制预测框在图片内
面积小,分数低过滤
NMS,去掉接近的框
去掉分数低的
生成proposals
2.6roi pooling
2.7roi pooling不足
2.8Bbox head
81,类别数
423,类别数乘4
roi与真实框共同参与采样
1、基本概念
bounding box:Bbox边界框,只要是框就可以这么称
用四个浮点数表示
一些注意事项:
1、张量&PIL一些细节
张量有shape---tensor.shape
PIL有size--img.size
2、目标检测评价指标
precision = 实际就是正样本,划分对了/所有被模型预测为正样本的数据的数量
recall = 实际就是正样本,划分对了/所有真实类别为正样本的数据的数量
3、PR曲线
P和R一般是矛盾的,但是一个模型好坏是需要两者都尽可能的好
最好的方法是找PR曲线围成的面积AUC
4、IOU指标
5、目标检测中的PR
6、mAP
7、非极大值抑制
8、SPP&RCNN&fast RCNN
9、测试环境是否可以使用cuda
>>> import torch
>>> torch.cuda.device_count()
1
>>> torch.cuda.is_available()
True
>>>
10、在jupyter中,使用!开头说明这个是在命令行运行,不带!说明在Python中运行
os.chdir("")# 进入项目
!Is# 查看当前文件夹下的文件
11、在faster RCNN中先进行RPN得到候选框,然后再进行nms删选候选框
12、问:alexnet_model.classifier._modules["6"] 这里面6为什么加引号呢
答:列表中输入的index是string类型
13、保存pycharm图片到本地
plt.savefig('D:\test.png')
plt.show()
14、np.astype类型