sp4.3 Object detection

目标定位:之前判断是不是一个车 现在还要在图中框出来(确定在图中的位置)可以包含多个对象
 
之前softmax是分类的 现在可以让他比如 输出四个数字 表示这个物体的位置
训练样本里就包含这四个数字
标签Y的定义 第一个数PC表示是否有物体 然后是四个坐标 最后三个参数表示属于哪一个物体onehot
当pc=0 表示没物体 后面参数都没意义了
左上角 0,0 右下角1,1
bx by分别是中心点的坐标
bh bw分别是整个物体的高和宽 占整个图片的比例
 
 
代价函数:
loss函数 pc=1所有数都要算 当pc=0 只算第一个参数 只需关注pc的准确度 后面的不用管了
这里简化了 一般是对pc用逻辑回归的loss 边界框坐标用平方误差 c123用softmax
 
 
特征点检测:比如检测人眼睛位置 用坐标表示 可以有很多特征点在脸上
以前是猫 狗 当做标签 现在是特征点的坐标 与对应的特征点
 
对象检测:首先用一些整张图片都是车的图片利于学习,进行训练 二分类
训练完后对测试样本进行滑动检测遍历 每轮调整步子和检测块大小
计算成本很大而且慢
 
 
改进:
卷积的滑动检测:全连接层--转为卷积层 用卷积代替FC
假设14*14*3图片 不断的卷积池化等 全连接 然后预测是什么东西 比如车 人
用和前面阵一样的5*5*16的过滤器 400个 这样就变成一维400层了
再用一个1*1的过滤器 再用一个softmax
 
训练集是14*14图片 测试是16*16的
用14*14的当滑块在16*16的滑动 这里就进行四次 二分类 输出四个标签
但是会发现每次移动中间很多面积是重叠的
最终输出2*2*4 就是这四块的预测
缺点就是边界框位置可能不准
 
 
改进:YOLO可以准确输出边界
上面的算法:可能没框全 框住了车的一部分 也许车所在块是个长方形
假设图片100*100
首先图片切割3*3或者更精细的
依次对每快进行预测 用之前向量表示
对象的中心点所在哪个格子 这个对象就算这个格子的
每个格子一个输出,最终输出尺寸3*3*8 (坐标+3个类别)
也是卷积实现 跑一次 不是跑3*3次 运行很快
 
 
这里的bx by bh bw位置值 是针对于所在的小方格来确定的
bh bw可以大于1 因为这个车本身可能大于这个小方格
 
 
5 个anchor boxes,19*19的划分,图片608*608*3, 80个类,yc bx by bh bw +80维
img (m, 608, 608, 3) -> DEEP CNN -> ENCODING (m, 19, 19, 5, 85).
相当于分为19*19的小块 每个小块 又是5个anchor box 每个box是 85维的
这里5*85可以合为一列
 
对于一个box 算出是哪个物体的概率最大
 
Note that this visualization isn't a core part of the YOLO algorithm itself for making predictions; it's just a nice way of visualizing an intermediate result of the algorithm.
Another way to visualize YOLO's output is to plot the bounding boxes that it outputs.
 
 
 
 
 
 
交并比iou衡量是否检测的好 :用算出的和实际的框先并起来啊 求交集所占并集的比例
Union(A,B) = A + B - Inter(A,B) 。。。别忘了 一般大于0.5就行了 越高越好
 
非最大值抑制:保证算法对对象只检测了一次
一个车占了好几个格子 每个格子都认为自己检测到
 
先用上面的方法 设最低值比如概率大于0.5 0.6
小于这个值先丢掉
选出概率最高的框 如果有其他框和他的重叠比较大
那么那几个就被抑制了
 
这只是对于检测一个物体 对于多种物体要独立进行非最大值抑制对于输出值
 
 
 
上面是针对单个对象的 要是同时检测三个东西 就要对每个单独做个抑制
 
 
 
答案是5。
首先丢掉那个0.26的汽车
然后MOTO和人都保留
中间的汽车交并比大于0.5丢掉一个
树 因为交并比小于0.5 所以两个都保留
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
如何让一个格子检测多个物体:
Anchor Boxes 多个检测物体重叠到一起了
以前的一维向量输出就不行了
现在预先定义两个box 让这两个预测联结到这两个box 看好了完全就是几个向量堆在一列
 
同时分配给方格 和 box 同时属于多个box 那就按照交并比来看 归哪个box
一般人工设定的 加上k-means算法
原本3*3(9个格子)*8维 现在是3*3*2(每个都有俩box)*16
 
 
 
整合在一起组YOLO:
构造训练集 三个对象 行人 汽车 摩托车 假设两个anchor box
Y就是3*3(格子) * 2*8(2个box 每个坐标+3类)这里出来9个这样的向量
 
给个图片 最后输出3*3*2*8的 然后 和标签Y 进行对比 然后再运行一遍非极大抑制
 
运行非极大抑制:丢掉概率低的 对每个类型对象运行一次
 
 
 
RCNN网络:egion proposals候选区域 不常用
运行图像分割算法 先找出块块在图像上 对块进行检测 不过速度慢
在少数的区域运算 找出可能存在对象的区域 来运行算法 比如把图片处理一下
只在那些色块上跑一下
 
更快的

猜你喜欢

转载自www.cnblogs.com/hellodantong/p/9965255.html