前言:YOLOV3学习笔记,记录对卷积层,池化层,yolo层的理解,阐述深度学习中卷积核,通道数相关名词的含义。
yolov3-tiny网络如下:
卷积层
0层为卷积层,其中filters=16,表示的卷积核的个数,即所做的卷积的次数。size=3*3/1,表示每个卷积核的尺寸为3*3,卷积移动的步长为1,意味着输出的图像尺寸与输入的大小一致。如果步长为2,则输出的图像尺寸将是输入的一半。
输入为416*416*3,即将样本图像重采样为416*416*3的RGB三通道图像,输出怎么是416*416*16了呢?
卷积核的通道数一般在cfg文件中不直接写明,因为他是由输入图像的通道数决定的,如果是RGB图像,则卷积核的通道数即为3。对于0层卷积层,一个卷积核的操作是使用3*3*3的卷积核对图像的三个通道分别进行卷积操作后平均加权输出,输出为416*416*1,16个卷积核即为416*416*16。
备注:最后一列指明了该卷积操作的计算量为1.5亿次浮点型操作。
池化层
池化层即为重采样,深度学习中基本有两种池化方式,最大池化和平均池化。下面举例说明:
yolov3-tiny中1层为池化层,池化的尺寸大小为2*2,步长为2,最大池化是将红框中四个数取最大的作为输出,平均池化是将四个数的平均值作为输出。步长为2指下一个池化操作为当前位置向后移动两个位置,即对3,4,7,8四个数做最大池化。
很明显当步长为2时,池化操作后,输出尺寸将是输入的一半,所以1层的输出为208*208*16。在yolo层以前,基本是每一层的输出作为下一层的输入。
池化操作是基本不耗时的,深度学习的耗时主要是在卷积层。
yolo层
route=13表示取前面13层的输出,route=19,8表示取第19层和第8层的输出。
在yolov3-tiny中有两个yolo层输出,下图示例中的yolo3-tiny一个输出大小为13*13*24,另一个为26*26*24,两个yolo层的输出为两个不同的尺度,在yolov3中则有三种尺度。在yolov3-tiny中,13*13*24中13*13是固定的,24数值取决于你检测目标的类别数目,我检测的是3类,所以是24,那24是怎么来的呢?
24=(4+1+class)*3,其中4代表着目标物的位置信息,1为置信度信息,class为类别数目,3代表anchor的数目。