一、模型部分
会根据所提供的9个先验框在darknet输出的三个特征层【y1,y2,y3】
(形状分别是(N,255,13,13),(N,255,26,26),(N,255,52,52)
)中的每个格点grid_cell上,预测三个框,这三个框的长宽比不是随意取的,是取自根据数据集聚类得到的9个先验框的长宽,这样三个特征层正好使用了9个先验框。
会根据数据集,该数据集是xml
格式或者其他格式,里面的主要内容就是【img,每一个目标的框信息以及所属类别】
,得出和模型输出相同形状的数据,形状分别是[(m,13,13,3,85),(m,26,26,3,85),(m,52,52,3,85)]
。因为是由真实框得来的数据,所以肯定没有那么多,比如此时的框都只有一种宽高,也即真实宽高,并不像上面每一个grid_cell
有三个框。所以为了和模型输出形状相同,在没有框的地方(对应矩阵里元素的位置)的数据其实都是零。这样就可以将y_true
和y_out
送入loss
函数计算误差,然后更新模型参数即可。
在计算loss
的时候,实际上是y_pre
和y_true
之间的对比:y_pre
就是一幅图像经过网络之后的输出,内部含有三个特征层的内容,其需要解码才能够在图上作画;y_true