1.yolov4对于yolov3有哪些改进?
数据增强:mosaic,adversial training
mish激活函数
2. mosaic 增强的想法是怎么产生的?什么intuitive?
比如coco数据集上,小目标很多但是ap,很小,所以想到把大目标缩小,变成小目标来检测。
如何评价新出的YOLO v4 ? - 康康的回答 - 知乎 https://www.zhihu.com/question/390191723/answer/1185984775
2.darknet的新作者是谁?
来自俄罗斯的alexey
3.什么是Mish激活函数?图像上看,β=1时的swish和mish差不多啊?为什么mish比swish会好不少呢?https://zhuanlan.zhihu.com/p/139696588
output = x*tanh(ln(1+e^x)) tanh部分,取值范围[0,1), 相当于是对不激活的一个变化
4.什么是sat, Self-adversarial-training?
每个batch图片,先forward/backward, 然后改变图片,使得网络以为图中没有目标,此时图中目标xywh,并没有改变;然后再次forward/back,检测图中目标。
参考https://github.com/AlexeyAB/darknet/issues/5117
5.什么是CBM, 什么是CBL?
conv+bn+mish; conv+bn+leakyRelu
6.yolov4中,所有的激活函数都是mish吗?
只有主干使用mish,neck和head使用leaky
7.yolov4中,如何使用spp? deeplabv3里面aspp有什么区别?
spp:spatial pyramid pooling. 类似于对输入图片做多尺度的金字塔concat, 而是对输入特征,使用多种尺寸的卷积核,计算卷积,最后concat.
aspp: atrous spatial pyramid pooling, 空洞空间金字塔池化,卷积核大小是一样的,但是卷积的rate不一样
两者的感受野是类似的。
8.csp结构的作用是什么?
作用是用来降低计算量。因为输入层的featuremap , 分为两部分,来forward
9.什么是drop block?
是cutout, dropout的结合,把神经网络的一部分去掉
10. PAN和efficientdet里面的BiFPN的区别?
PAN:path aggregate network, 相当于fpn反过来,
bifpn:是更普遍的版本,可以fpn+pan, 来回搞任意次,同时去掉只有一个输入的节点
11.loss方面有什么创新
GIOU(Generalized IoU): GIOU = IOU - (闭包-iou/闭包)
使用了DIOU loss(distane IOU), 考虑了面积,距离,长宽比: IOU - 中心点距离/对角线距离
CIOU(complete iou): IOU - (中心点距离)/对角线距离 - 宽高比度量。 最后项是,宽高比的反正切
yolov4, 主要使用CIOIU; yolov5默认是GIOU,可以开启CIOU
12. ultralytics使用pytorch实现的yolov3, yolov5里面的detect层,与darknet原版有什么区别?
darknet 里面detect层,根据最后面的3个卷积层上的特征点,使用公式,
box get_yolo_box(float *x, float *biases, int n, int index, int i, int j, int lw, int lh, int w, int h, int stride)
{
box b;
b.x = (i + x[index + 0*stride]) / lw;
b.y = (j + x[index + 1*stride]) / lh;
b.w = exp(x[index + 2*stride]) * biases[2*n] / w;
b.h = exp(x[index + 3*stride]) * biases[2*n+1] / h;
return b;
}
而 ultralystics里面的实现如下,先使用激活函数,sigmoid,把特征约束到0~1之间, 然后如下激活.作者认为darknet里面使用exp, 是没有边界的,会导致训练发散
y = x[i].sigmoid()
y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i].to(x[i].device)) * self.stride[i] # xy
y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] # wh
https://github.com/ultralytics/yolov5/blob/master/models/yolo.py#L52
关于两者区别讨论,见yolov5的issue, https://github.com/ultralytics/yolov5/issues/471