yolo v3算法简单解析
前言
来了老弟,今天我们来整yolo v3,《YOLO v3:YOLOv3: An Incremental Improvement》,老规矩我们不管其他前辈咋样,我们力求简单,干练,用最简单的内容讲出几乎所有的主要框架。这里参考了一个前辈的博文,https://blog.csdn.net/leviopku/article/details/82660381图片也来源于这,以为前辈点赞。
算法初识
1》算法能干什么?
答:可以高效检测图片中物体所在位置以及物品类别。
2》算法有什么优点?
答:这就涉及yolo v3的网络结构了,yolo v3是一阶段网络,端到端的,首先他快!因为网络结构的简单性所以快。其次,他灵活,yolo v3真的可以成为工程性算法,这个算法既可以高精度又可以高速度,对于前期提取特征的网络我们有两个方案:darknet-53和tiny-darknet,前者网络复杂速度较慢但是运算精度高,后者网络简单精度略低但速度很快,这种灵活性为我们带来了很多方便。
算法框架
这里我们先解释一下基础模块:
DBL:这是对传统算法的优化,相当于传统的卷积+relu,自从这一模块(卷积+BN+Leaky relu)提出广泛得到应用,那么他有啥好处呢,首先说BN,在一定程度上代替了标准化和归一化、L1、L2以及Dropout。它在某种程度上,打乱了原有的特征分布,形成新的统一的分布态,其他不说但是解决过拟合功能还是不错的,至于leaky_relu是他配套的一种**函数,不同于传统的低于阈值就归0的思想,它采用了类似“温水煮青蛙”的思想,某些情况下她更适合做**函数。
resn:n代表res unit重复次数,res unit我喜欢称他为残差快,借鉴了ResNet的残差结构的思想。res unit能更好的收集特征信息。
concat:可以理解为特征信息融合,类似于EAST算法思想,将较小的特征图放大与较大融合,能更好的获得不同感受野的特征信息。
backbone:darknet-53
darknet-53:虽说yolo v3有darknet-53和tiny-darknet两种选择,但是我们只做darknet-53的解析。这里我要说几点:首先传统为了缩小特征图,获得大感受野,通常使用POOLing来将特征图缩小。但是毫无疑问它会带来梯度负面效果,于是darknet-53利用卷积层来改变尺度,如何实现?很简单,改变padding和stride就行了。其次,大量使用残差的跳层连接是网络对各个尺度的信息都有很好的鲁棒性。整个darknet-53,历经五次缩小,每次缩小1/2,最后尺度为原尺度的1/32,输入为416x416,则输出为13x13(416/32=13)。
Output
yolo v3采用特征融合思想,会将较小尺度图尺度翻倍然后与较大尺度的特征图融合,无论是这种操作还是残差快,都是为了更好的融合不同感受野的信息。而·这里的三个输出尺度则是为了能够预测不同size的目标,但是值得一说的是虽然有三个尺度输出,但是预测框却有9种,每个尺度三种预测框。在讲预测框之前,我们先讲一下输出255,对于模型最终输出我们都知道,不可能有一个通道是没有用的,那么他们都代表什么呢?首先3*(5 + 80) = 255,其中三自然是每种尺度有三个预测框,5代表预测结果(x, y, w, h, confidence)中心坐标和置信度(是否含有目标),至于80则是代表分类数。
看到上面两张图大家可能有点懵逼,这是利用预测的预测的t(x,y,w,h,o)来计算最后用来训练的参数。这里有一个prior概念prior有9个分别对应t(h,w)。
10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
那么(x, y, w, h, confidence)分别代表什么呢,这就是我们要说的另外一个思想了,也可以说是他的另外一个核心思想。网格划分,(x, y, w, h, confidence)不是相对于整个网格的位置,而是相对于划分以后的网格的x,y是相对于每个网格左上角坐标的偏移值,而w,h则是相对于整个特征图的大小比例所以四个参数都是小于0的。这里有两点:1、每个网格都会有三个预测框,2、同样不是每个框都被应用,低于置信度和超出边界的要被剔除。最后的框的效果图是这样的,我认为类似于Faster RCNN的anchor的穷举法。
这里还有一点虽然其实每个位置相对来说有9个预测框但是我们只取其中分数最高那个。
损失函数
最后说一下损失函数,老规矩略讲。
损失函数只有一个,采用了logistic regression结构如下:
这里我们要说一下单一损失函数的优点,他贯穿了整个算法,也就是说一次就将整个算法训练完成。不必像Faster RCNN多次训练,更加快捷节省资源。
最后
yolo v3算法我们简单解析完了,细节部分没有详述,但是主要原理亮点都有提到,相比于其他前辈的文章,我还是更倾向于讲给小白,因为本人也是个小白,更能理解小白的痛苦,好了就说这些了。在此向各位前辈致以诚挚敬意。