用卷积代替maxpool下采样,因为maxpool会丢失很多信息
w[4095,0:45]*X[0:45]=y0, 类似于卷积的点乘操作,实际y0拥有了原始特征图所有的信息(因为是X[0:45]),卷积是对应位置的局部特征点乘,而全连接层是全局特征信息点乘
三个head的输出,如何定位为障碍物,把18通道拆分成3(3个anchor)*6
然后与真值去对比,然后定义Loss,然后进行反向传播
主要介绍了3-7同样的内容,就是anchors如何定位到真值的obj,然后联系到真值进行Loss的计算,然后反向传播
Decode部分如何得到物体的
b x , b y , b w , b h , o b j , c l s b_x,b_y,b_w,b_h,obj,cls bx,by,bw,bh,obj,cls
在CSPDarknet.py里面
backbone_neck的构造(3-11~3-14:P3 P4 P5)在yolo4.py里面
在文件yolo_layer.py
2021-03-02理解decoder部分
又多了一些见解,发现这部分讲的真好,明天继续看
backbone与neck与灰色盒子,整体整合(见inference.py)
包括加载预训练权重、有目标的anchor、非极大值抑制、然后可视化
通过解析yolo4_car_det_1cls.cfg配置文件,把里面每一层都解析出来,构建网络(面向过程的方式)
weights文件夹里面多了一个权重文件:哟lov_citycar_6000_2cls.weights,是在darkNet框架下训练好的一个模型(一个在中国的道路车辆检测的模型:一个是车辆一个是车的logo)
基于darknet前向推理的方式的讲解,使得可以利用已经训练好的权重直接加载:
基于darkNet导入它的权值,解析它的config去构造它的网络来做一个前向推理的一部分,为什么基于darkNet方式去构造模型:这样会有一个很好的通用性,可以直接把darkNet的权重拷贝过来去做推断或者直接在这个权重上面去做预训练比在COCO上做预训练要好很多,我们自己训练好的权重也可以导入到darknet里面去做推断,这样就实现了darknet和我们的一个互通,这样就使我们最终的代码变得灵活
完整的训练代码工程在work_dir文件夹里面
在文件yolo_loss.py里面
train.py是基于yolo_body构建的训练代码
train_dark.py是基于darknet构建的训练代码