以前打算分析caffe源码的,可是因为工做较忙就耽误了。可是但愿从此仍是能坚持写博客,对知识进行总结梳理,锻炼本身的表达能力。算法
最近一段时间在研究yolo算法,发现这个算法很是的优美,而且做者更新到了第三版。经过对该算法的学习,能够学习到如何进行算法的优化与实现。可是正如吴恩达在深度学习课程里面所说的,yolo的论文很是的难读,做者写文章的时候着重在写模型的测试部分,而对于模型的训练讲解的很是的少。这让一开始阅读yolo的论文时,有种不知因此然的感受。还好yolo的做者提供的源代码,使得不懂的地方能够经过阅读来进行增强理解。在这里很是佩服yolo的做者,不只科研能力强,工程能力也很是的棒,竟然本身用C语言撸了一个深度学习框架,佩服。是我学习的榜样!!网络
好了,废话很少说了,开始咱们的正题吧。框架
对于一个新的深度学习算法,我常常从输入输出着手。咱们来看一下YOLO的输入出是什么?
首先yolo的输入是一张448x448大小的图片,而后通过网络以后输出为30个值。那么这30个值是什么呢?咱们来进行一一的分析。ide
知道了网络的输出数据,咱们就能够知道训练数据的标签长怎么样了。训练数据的标签一定也有:类别数、confidence和(xywh)组成。那图片的标签具体是怎么打的呢?咱们接着分析。学习
在上面的图中,第一个网络因为没有咱们要识别的物体,因此标签的类别数、confidence和xywh都为0,接着第二个网格也是如此。。。直到红色框的网格处,咱们发现有一只狗,这是标签为狗的类别数,confidence为1,xywh为包含狗的物体框的中心坐标和宽高。那红色框的上面那个框的标签数据是什么呢?它也包含了狗啊。在yolo中只用物体框中心点所在的网格进行预测,所以红色框周围的网格的标签数据也全都是0。
通过这样计算,咱们能够获得,一张图片最终的标签数为[20(类别)+2(confidence)+8(xywh)]xSxS测试