yolo原理
1 目标分类和目标检测
目标分类一学就会,目标检测一学就废
目标检测你感觉就是目标和预测不是对应的,实际上并不是这样的,
如果让它一、一对应了,可不可以,就像上图那样,
答案是不可以的,因为目标检测不止有一个目标,一个目标的时候可以,如果是多个目标呢?
那就有很多个(x,y,w,h,class),仅仅五个数是不够的
2 改进
如何改进呢?
直接输出多个框,直接来全卷积,比如输出20个框,如果有1个目标,那其余19个都是0就可以了
比如下面输出5个通道的2×2特征图,那比如只有一个目标,
这就是yolo系列的基本思想
最根本的就是利用全连接层把各个需要的值放到对应d 通道上,加上下面yolov1的讲解,多看几遍很好理解。
https://blog.csdn.net/xiaotiig/article/details/111772945
3输入输出理解
输入就是一张图片
输出是什么呢?一个个框,那这个框怎么用数字表示呢?这些数字就可以组成一个向量。
框的表示最少有下面4种:
(1)x,y,w,h,左上角坐标+宽+高
(2)Cx,Cy,w,h, 中心点坐标+宽+高
(3)P1(x,y),P2(x,y),P3(x,y),P4(x,y),4个角的坐标8个数
(4)Cx,Cy,d1,d2,d3,d4,中心点坐标+距4个边的距离
4 检测方法
4.1 滑动窗口的方法
使用不同大小尺寸的窗口从左到右依次截取出图片做分类:
4.2 输出x,y,w,h和c的向量
和目录1中的描述一样了,这样就解决了传统方法的问题
但是一个图片只能输出1个结果,那如果有多个目标呢?
4.3 输出多个目标
经过一系列,比如有两个目标,就输出两个向量
多输出进行空间排列,每个像素负责一个区域
4.4 如何训练呢?
损失值的第一项是置信度的损失值,范围0-1,而后面的4项范围是0-416,所以后面的值太大,就把置信度给淹没了,需要给置信度的值加个放大的权重,后面4项可以加个小的权重,抑制4项后面的值。
加根号是因为:如果不加根号,公式算出来的值主要受大目标影响,小目标的影响就很小,导致最后出来的结果主要是检测大目标,小目标的检测效果很差,用加根号的方法来稍微解决一下,还有其它方法。
4.5 NMS非极大值抑制
下面这个过程必须会,就是根据置信度去除冗余框,原理就是重合度越高的框越可能检测的是同一个目标。
使用NMS必须要用置信度,而置信度是根据IOU来得到的。
4.6 总结
分类、检测、分割的区别就是最后的输出不一样,还有训练样本不一样,前面的主干网络都一样。
分类就输出one hot 类别
检测就输出坐标值+one hot 类别
分割就输出一个通道的特征图
检测的目标想多的话,就增加输出的宽和高,增加框
检测的类别想多的话,就增加通道数
参考下面视频:
原理讲的很清楚
https://www.bilibili.com/video/BV1FK4y1v7nB?from=search&seid=2530366646981018850