经典的one-stage算法
You Only Look Once,名字就说明了一切,把检测问题转化为回归问题,一个CNN就搞定了,可以对视频进行实时检测,应用领域非常广泛

核心思想:预测图像中有哪些问题,下图中有一条狗和一辆自行车。要预测一条狗和一辆自行车,交给谁来预测呢?现在有一张输入图片分成网格,观察网格,在这个网格中狗落在了图像当中的一个位置,每个格子都负责预测在你这个格子上是什么物体,狗落在图像的区域中,现在只关心狗的中心点落在哪里(图中红色中心点负责预测狗)。s*s的格子,每个格子负责预测所代表的物体是什么。在当前格子中有两个黄色的框,黄色的框不是最终的结果,现在红色的格子要去预测,但是它也不知道狗长什么样子,那么就需要一些经验的东西(比如一些物体可能是比较长的,一个长方形的,一些是正方形的)。一开始现在这个位置中来两种经验值h1,w1;h2,w2,h1是长方形的,h2是正方形的,对于这个狗来说,长方形的框比较好,那么现在长方形的框比较靠谱些,但是和我实际预测的值还是不一样,把候选框(提供的经验值)做一些修正,把框做一个微调,而微调是一个回归任务,预测h和w怎么变,看h和w什么时候最合适,并且要起始位置x和y的值(bounding boxes),最终的框由经验框做怎样的偏移。V1版本产生两种候选框(指定b值),每个格子两种候选框,和真实值到底匹配如何。真实值和两个候选框算IOU的值,和我真实值的IOU,谁的IOU大,最后微调谁。在微调过程中,会计算出很多候选框,因为每个位置都会进行预测,每个预测都会得到一个结果值即置信度(confidence),这个置信度标识当前这个点所预测的结果是物体还是不是物体。对图像的格子当中每个位置做计算,计算出来各种指标,4个偏移量和一个置信度的值,对于置信度小的过滤掉。最终置信度小的过滤掉,把重复的框处理下,最后得到下图中输出的结果。
候选框做微调,不是所有的候选框做微调,对置信的高的做微调。实际做结果的为IOU比较大的,把x,y,w,h映射到原始图像中就可以算出来了。

输入大小4484483,是一个固定值,把图像resize到一个固定值,只训练4484483,v1输入图像大小被限制,后续版本可以最改变。一个卷积神经网络大小不能去边,图像大小对于卷积层没太大影响,全连接层必须固定好前面特征图的大小,输入图像大小不能变化,必须是一个4484483的。对输入数据进行特征提取,得到一个771024特征图。

第一个全连接层4096,第二个全连接层14701,reshape成7730。77表示一个77的格子,77的格子每个格子里面有30个值。每个格子产生来两种框,每中框里面包含x,y,w,h(归一化完后的值),c,相对于图片的值。剩下的20个是20分类,数据中一共20个类别,即类别的种类总数。
每个数字的含义:
10 =(X,Y,H,W,C)B(2个)
当前数据集中有20个类别
77表示最终网格大小
(SS)(B*5+C)

w,h做根号变换,损失计算时需要注重物体比较小的,数值较小比较敏感,数值较大时相对来说没有那么敏感

检测很多个框,出现重叠情况,比如同样一个人可以检测出很多人脸,在IOU满足一定值的时候,先按置信度进行排序,非极大值抑制汲取一个置信度极大值。