ibox函数可以算出来吗

对于Loss函数的设计,我现在是越来越感觉到比模型搭建更难,虽然在理论上,就是几个loss函数的计算,比如交叉熵啥的,理论看起来很简单,但是对于ssd,yolo这些,真正要设计出来loss的计算,里面的细节太多也太杂了,让我很头大,但是没法,只能硬着头皮啃呗, 其实在现在这个时候,也就是我敲字的时候,我对于整个loss函数也只能说懂了百分之八十,还有一些细节,我依旧还是比较模糊,这也是写这篇文章的目的,在梳理我自己的思路的同时,也希望能帮到大家,开题先感谢一下,大家有兴趣或者看我的有些不明白,可以转向上面这个链接,我的整个思路的梳理,这个作者对我帮助很大,我也只是站在他的肩膀上写出我对整个loss的理解。

在上一篇文章中,我们知道整个网络最后搭建出来的模型最后的输出数据维度是类似[2, 38, 38, 84]这种,不是很清楚的可以看看上篇文章我们先看看整个流程图:
我们先看看第一步,第一步的原理如下:

'''对应w和h,有四种情况和六种情况长宽比的,详情看图片''' '''对每个模型输出的特征图,有两个默认的box长宽比都为1,但是计算方法不一样,详情将图片''' '''剩下的几种情况,如下'''

好了,第一步我们完成了,这一步最后输出的维度是[8732, 4],接下来我们开始进行第二步,在这一步中,我们得设计到一个解码的操作,这里得解码,是指的真实的标签框和先验框共同处理,得到一个转化的关系,原理如下图:

处理上面这个encode,我们还得设计一个函数来求解iou,所谓的Iou就是针对两个边框而言的,iou就是两个边框重合部分占总面积的比例,原理如下:

知道这两个基本函数之后,我们就可以进行接下来的处理了,对先验框和标签框进行处理。需要注意的如下:


 要注意,一个标签框可以对应多个box,但是一个box只能对应一个标签框
 
 

经过以上处理之后,我们就可以开始干第三步了,这一步,原理看图:

'''接下来先将先验框和标签框进行处理''' '''经过以上操作,我们求得了每个box对应的最佳的标签框后的x,y,w,h,以及每个box对应的最佳类别,如果这里面数值为0代表是负样本,类别为背景, 接下来我们将预测的Predic和上面操作得到的数值进行操作'''

好了,以上原理的截图,均是我在最上面给的链接的作者的,那作者写的实在是太好了,关于原理部分我实在找不到补充了,只能在代码里面尽量为大家多注释一些,多写一点我的理解,希望能帮到各位。代码有些多,需要耐心的去看,没办法,我也是搞了好久才大致的将整个过程清楚了,没有什么简单的捷径方法,光是看看原理就简单,但是真实要代码复现出来,很复杂,里面很多细节。感谢能看到最后的朋友的支持,我相信,大多数看见这么多代码,会直接退出去,正常正常,因为我也这样,不到不得已,也不愿意看其他人写的代码,更不要说一行一行代码去理解了。

numpy中argsort函数用法,有需要的朋友可以参考下。

另一种方式实现按降序排序:

我要回帖

更多关于 ibox少写了一个0 的文章

 

随机推荐