目标检测算法基础知识(一)

1.多目标检测算法常用的算法有rcnn,fast-rcnn,yolo,ssd,yolo-v2等,最近出来了yolo-v3

2.FPS:FPS是FramePerSecond的缩写,中文意思是每秒帧数,即帧速。

3. 作为标准数据集,voc-2007 是衡量图像分类识别能力的基准。
faster-rcnn,yolo -v1, yolo-v2都以此数据集为最为演示样例.
VOC数据集共包含:训练集(5011幅),测试集(4952幅),共计9963幅图,共包含20个种类。数据集的组成如下:
Annotations —目标真值区域
ImageSets —-类别标签
JPEGImages —–图像
SegmentationClass
SegmentationObjec
具体信息如下:
具体结构如下:
Annotation

xml

ImageSets

Action 
	*_train.txt
	*_trainval.txt
	*_val.txt

Layout

train.txt
trainval.txt
val.txt

Main

*_train.txt
*_trainval.txt
*_val.txt

Segmentation

train.txt
trainval.txt
val.txt

JPEGImages

*.jpg

SegmentationClass

*.png

SegmentationObject

*.png

Action下存放的是人的动作(例如running、jumping等等,这也是VOC challenge的一部分)Layout下存放的是具有人体部位的数据(人的head、hand、feet等等,这也是VOC challenge的一部分)Main下存放的是图像物体识别的数据,总共分为20类。Segmentation下存放的是可用于分割的数据。
分类识别只关注【Main】,它内部存储20个分类类别标签,-1表示负样本,+1为正样本
*_train.txt 训练样本集
*_val.txt 评估样本集
*_trainval.txt 训练与评估样本汇总

4.什么是正样本和负样本

(1)在分类问题中,这个问题相对好理解一点,比如人脸识别中的例子,正样本很好理解,就是人脸的图片,负样本的选取就与问题场景相关,具体而言,如果你要进行教室中学生的人脸识别,那么负样本就是教室的窗子、墙等等,也就是说,不能是与你要研究的问题毫不相关的乱七八糟的场景图片,这样的负样本并没有意义;
(2)在检测问题中,检测问题中的正负样本并非人工标注的那些框框,而是程序中(网络)生成出来的框框,也就是faster rcnn中的anchor boxes以及SSD中在不同分辨率的feature map中的默认框,这些框中的一部分被选为正样本,一部分被选为负样本,另外一部分被当作背景或者不参与运算。不同的框架有不同的策略,大致都是根据IOU的值,选取个阈值范围进行判定,在训练的过程中还需要注意均衡正负样本之间的比例。

5.图像标注的格式

000002.jpg car 44 28 132 121
000003.jpg car 54 19 243 178
000004.jpg car 168 6 298 164
类似于上面的格式,需要有图片名称,物体名称,物体位置

6.目标检测数据集
coco,kitty,vocdevkit

7.一些超参数的含义

image_size 是图片大小,ssd中没有全连接层,可以适应各种大小的图片。置顶图片大小是为了方便成batch训练
num_classes 是待检测物体类别数量,一般还需要加上背景类,也就是说要多加1类
no_annotation_label
暂时没有考虑
feat_layers 特征层,使用哪几层来预测bbox
feat_shapes 特征层的shape
anchor_size_bounds 每个特性层的anchor大小不一样,越靠近输入的层其anchor越小。确定第一个与最后一个feature层的anchor大小以后, 处于中间的层的anchor大小则通过线性插值计算而来。例如,假如anchor_size_bounds = [0.2, 0.7], 有6个feature layer,则每个layer对应的default anchor大小为:[0.2, 0.3, 0.4, 0.5, 0.6, 0.7].
anchor_sizes 不是超参数,是论文中的,除了21与315,其余都是通过anchor_size_bounds算出来的。
anchor_offset 用于计算anchor中心点的偏移
anchor_steps 由网络结构和feat_layers决定,例如,在conv4_3上移动一个像素相当于在原图上移动8个像素。
normalizations 正则化参数。大于0则将对应的feature map L2 norm一下,然后再预测bbox。
prior_scaling 应该是用于调节x,y回归与w,h回归在loss中占的比例

8.IoU和mAP

loU(交并比)是模型所预测的检测框和真实(ground truth)的检测框的交集和并集之间的比例。这个数据也被称为Jaccard指数。为了得到交集和并集值,我们首先将预测框叠加在ground truth实际框上面.现在对于每个类,预测框和真实框重叠的区域就是交集区域,预测框和真实框的总面积区域就是并集框。

9.正确识别的检测和计算精度

我们使用loU看检测是否正确需要设定一个阈值,最常用的阈值是0.5,即如果loU>0.5,则认为是真实的检测(true detection),否则认为是错误的检测(false detection)。我们现在计算模型得到的每个检测框(置信度阈值后)的loU值。用计算出的loU值与设定的loU阈值(例如0.5)比较,就可以计算出每个图像中每个类的正确检测次数(A)。对于每个图像,我们都有ground truth的数据(即知道每个图像的真实目标信息),因此也知道了该图像中给定类别的实际目标(B)的数量。我们也计算了正确预测的数量(A)(True possitive)。因此我们可以使用这个公式来计算该类模型的精度(A/B)

即给定一张图像的类别C的Precision=图像正确预测(True Positives)的数量除以在图像张这一类的总的目标数量。
假如现在有一个给定的类,验证集中有100个图像,并且我们知道每个图像都有其中的所有类(基于ground truth)。所以我们可以得到100个精度值,计算这100个精度值的平均值,得到的就是该类的平均精度。

即一个C类的平均精度=在验证集上所有的图像对于类C的精度值的和/有类C这个目标的所有图像的数量。
现在加入我们整个集合中有20个类,对于每个类别,我们都先计算loU,接下来计算精度,然后计算平均精度。所有我们现在有20个不同的平均精度值。使用这些平均精度值,我们可以轻松的判断任何给定类别的模型的性能。
但是问题是使用20个不同的平均精度使我们难以度量整个模型,所以我们可以选用一个单一的数字来表示一个模型的表现(一个度量来统一它们),我们可以取所有类的平均精度值的平均值,即MAP(均值平均精度)。

MAP=所有类别的平均精度求和除以所有类别
即数据集中所有类的平均精度的平均值。
使用MAP值时我们需要满足一下条件:
(1) MAP总是在固定的数据集上计算
(2)它不是量化模型输出的绝对度量,但是是一个比较好的相对度量。当我们在流行的公共数据集上计算这个度量时,这个度量可以很容易的用来比较不同目标检测方法
(3)根据训练中类的分布情况,平均精度值可能会因为某些类别(具有良好的训练数据)非常高(对于具有较少或较差数据的类别)而言非常低。所以我们需要MAP可能是适中的,但是模型可能对于某些类非常好,对于某些类非常不好。因此建议在分析模型结果的同时查看个各类的平均精度,这些值也可以作为我们是不是需要添加更多训练样本的一个依据。

10.卷积神经网络中feature map的含义
在每个卷积层,数据都是以三维形式存在的。你可以把它看成许多个二维图片叠在一起,其中每一个称为一个feature map。在输入层,如果是灰度图片,那就只有一个feature map;如果是彩色图片,一般就是3个feature map(红绿蓝)。层与层之间会有若干个卷积核(kernel),上一层和每个feature map跟每个卷积核做卷积,都会产生下一层的一个feature map。

你可能感兴趣的:(人工智能,目标检测算法,SSD,VOC2007,mAP,IoU)