#目标检测基础
目标检测的基本步骤:1、检测窗口的选择;2、图像特征的提取;3、分类器的设计
特征提取:在选定候选区域之后,需要提取图像的特征来进行表达,传统的有监督的方法和以CNN为代表的无监督特征学习方法都有用。常见的传统特征有haar特征、LBP、HOG等。这些特征都是研究人员通过长时间的学术研究和实际项目验证得来的,虽然在比较简单的任务中可以取得很好的结果,但是设计成本很高,而且面对复杂的任务时鲁棒性远远不够。
R-CNN:
根据检测阶段的不同,可以将深度学习方法分为:one-stage检测算法和two-stage检测算法。对于two-stage检测方法来说,它先生成了可能包含物体的候选区域region proposal,然后在对这个候选区域做进一步的分类和校准,以r-cnn为代表;单阶段检测算法直接给出最终的检测结果,没有经过生成候选区域的步骤,以YOLO和SSD为代表。
RPN:
# 对于目标检测中mAP的定义:
mAP: mean average precision(mAP), 各类别AP的平均值
# 对于做了标注的文件.json:
注:从结构上看,所有的数据(data)最终都可以分解成三种类型:
1)标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。
2)序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫数组(array),或列表(list),比如“北京,上海”。
3)映射(mapping),也就是一个名/值对(name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如“首都:北京”。
Json的规格:
1)并列的数据之间用逗号(“,”)分隔
2)映射用冒号(":")表示
3)并列数据的集合(数组)用方括号(“[]”)表示
4)映射的集合(对象)用大括号({})表示。
# 对于加载模型(预训练的模型),加载模型参数:
import torchvision.models as models
import torch
import torch.nn as nn
resnet50 = models.resnet50(pretrained=True) #加载预训练模型
pretrained_dict = resnet50.state_dict() #读取参数
# 对于ROI Pooling
任意的原始图像中的输入是可以映射到特征图中的,卷积只会改变空间分辨率,不改变比例和位置。
# 对于coco数据集标注格式:
iscrowd=0时,表示这是一个单独的物体,轮廓用Polygon(多边形的点)表示;iscrowd=1时候表示两个没有分开的物体,轮廓用RLE编码表示,比如说一张图片里面有三个人,一个人单独站一边,另外两个搂在一起(标注的时候距离太近分不开了),这个时候,单独的那个人的注释里面的iscrowing=0,segmentation用Polygon表示,而另外两个用放在同一个anatation的数组里面用一个segmention的RLE编码形式表示。
##bbox_inside_weights是正样本回归loss的权重,bbox_outside_weights用于平衡正负样本的权重,它们将在计算SmoothL1Loss的时候使用。