激活函数:
很多层里面有 activation 这一项,这是激活函数,我看到的配置文件里面最常用的就3个:
LINEAR:啥都不干
RELU :值 > 0时保持不变,小于0时置0
LEAKY :值 > 0时保持不变,小于0时值 * 0.1 (类似于caffe的prelu层)
卷积层:
[convolutional]
filters=96 # 输出blob通道数
size=11 # 卷积核尺寸 (长宽相同),等价于caffe里面的kernel_w, kernel_h
stride=4 # 移动步长
pad=0 # 是否在边缘补 0 最终的padding为size/2(当pad = 1)
activation=relu # Relu 激活函数
shortcut 层:
类似于caffe 的 eltwise 层(add),也就是把两个c h w都相同的两个层相加成一个相同c h w的层。
[shortcut]from=-3 #和往前数第三个层相加
activation=linear
类似于resnet,用以加深网络深度.上述配置的含义是shortcut layer的输出是前一层和前三层的输出的叠加.
resnet skip connection解释详细见https://zhuanlan.zhihu.com/p/28124810
route 层:
route layer层主要是把对应的层连接在一起,在darknet 网络结构中,要求输入层对应的width、height必须相等,如果不相等,则把route layer层的输出w,h,c都设置为0。例如输入层1:2626256 输入层2:2626128 则route layer输出为:2626(256+128) 它具有可以具有一个或两个值的属性层。当属性只有一个值时,它会输出由该值索引的网络层的特征图。类似于caffe的concat层。
[route]
layers = -1, 61
[route]
layers = -4
以上述配置为例:
当layers只有一个值,代表route layer输出的是router layer - 4那一层layer的feature map.
当layers有2个值时,代表route layer的输出为route layer -1和第61 layer的feature map在深度方向连接起来.(比如说33100,33200add起来变成33300)
upsample 层:
上采样,功能类似最邻近差值缩放算法
通过双线性插值法将NN的feature map变为(strideN) * (stride*N)的feature map.模仿特征金字塔,生成多尺度feature map.加强小目标检测效果。
[upsample]
stride=2
yolo层(YOLOV3新增的层):
[yolo]
mask = 0,1,2 #当前属于第几个预选框
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 #预选框, 将样本通过k-means算法计算出来的值
classes=80 #网络需要识别的物体种类数
num=9 #预选框的个数,即anchors总数
jitter=.3 #通过抖动增加噪声来抑制过拟合
ignore_thresh = .7
truth_thresh = 1
random=1 #设置为0,表示关闭多尺度训练(显存小可以设置0)
yolo层负责预测. anchors是9个anchor,事先聚类得到,表示最有可能的anchor形状.
mask表示哪几组anchor被使用.比如mask=0,1,2代表使用10,13 16,30 30,61这几组anchor. 在原理篇里说过了,每个cell预测3个boudingbox. 三种尺度,总计9种.