YOLOv3
1. YOLOv3效果
1.1 COCO AP
YOLOv3速度最快,但准确率不是很高
COCO数据集的一些指标含义
其中 AP指,IoU从0.5开始,以0.05为步距,直到0.95的所有AP IoU的均值
1.2 COCO AP IOU=0.5
1.3 YOLOv3的BackBone为DarkNet-53(53个卷积层)
1.3.1 取消Max Pooling层,通过卷积层的步距设计实现下采样,这样做可能是提升准确率的原因。
1.3.2 DarkNet-53相比于ResNet的卷积核个数少,训练参数少,所以训练速度更快。
1.3.3 Convolutional层包括ConvLayer -> BN -> LeakyReLU
因为BN的1存在,卷积层中无偏置参数
1.3.4 上图每个方块都是一个残差结构(有何作用?)
2. YOLOv3结构
2.1 使用k-means聚类来确定bounding box,YOLOv3预测三个不同尺度的boxes,使用特征金字塔网络来提取这些对于尺度boxes的特征。
在COCO数据集上,对于每个尺度预测三个boxes,张量为N * N * [ 3 * ( 4 + 1 + 80 ) ]
80为类的个数,4为位置信息,1为confidence,N * N指对提取到的特征的每个像素都要预测
2.2 结构
三个预测输出分别对应不同尺度的检测目标,预测输出1用来预测相对较大的目标,预测输出2用来预测中等大小的目标,预测输出3用来预测小目标,其中2和3之所以有预测较小目标的能力,一个是因为进行了上采样(How?),二是因为结构中融合了先前的特征,通道数增多,或者说上采样的目的就是为了融合之前的像素较高的特征,2中为26 *26,3中为52 * 52。
3. 目标边界框的预测
锚框参数为c~x~,c~y~,p~w~,p~h~网络预测四个边界参数t~x~,t~y~,t~w~,t~h~,从一个cell的左上角来偏移,cell左上角的的坐标为(c~x~,c~y~),初始预测框长宽为p~w~,p~h~,那么预测值如下:
σ函数即sigmoid函数,将预测的值压缩至0-1之间,一个cell的长宽就是1,保证在偏移时候选框的左上角点不会离开当前cell
Q:长宽的更新为什么要选指数函数?
4. 正负样本匹配
如果一个bounding box的IoU不是最高的但大于阈值(0.5),则将该bounding box 丢掉。
如果一个bounding box没有被分配给任何一个GT(ground truth),则此bounding box只有confidence损失,没有候选框损失和分类损失。
5. 损失计算
5.1 confidence损失
使用二值交叉熵,但在计算时o~i~的取值是0-1
5.2 class 损失
使用二值交叉熵时,每个类别的概率相互独立,所有类别的概率之和并不等于一,这与交叉熵损失不同。
6. 丢丢代码
numpy.round(x)
//返回浮点数x的四舍五入值
torch detach()
//当反向传播经过这个node时,梯度就不会从这个node往前面传播
torch.tensor(data, dtype=None, device=None, requires_grad=False)
//可以将numpy数组转换为tensor,torch.tensor()可以从data中的数据做拷贝而不是直接引用
7. 定位损失
注:g^i^~x~为GT的x坐标,c^i^~x~为cell左上角的x坐标,相减得到GT相对于cell左上角坐标的偏移量。这里定位损失计算的预测偏移量与真实偏移量间的损失。
是由 反推出来的,