code: https://pjreddie.com/yolo/
Backbone: DarkNet-53,输出三种不同尺度的预测结果,每个网格对应3个先验框。N X N X [3 * (4 + 1 + 80)]对应4个bounding box offsets,1个objectness prediction和80个类别预测。
具体来说,在79层得到32倍下采样的结果(13 * 13);之后通过上采样,并与61层特征进行concat,再经过一定卷积操作后得到16倍下采样结果(26 * 26);再之后通过上采样,并与36层特征进行concat,再进过一定卷积操作后得到8倍下采样结果(52 * 52)。concat是张量拼接,扩充张量维度。
anchors:用k-means聚类得到先验框尺寸,总共聚类得到9中尺寸的先眼眶,每种下采样尺寸对应3种先验框。例如:再COCO数据集上9个先验框是 (10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。分配上:
- 在最小的13*13特征图上(有最大的感受野)应用较大的先验框(116x90),(156x198),(373x326),适合检测较大的对象。中等的26*26
- 特征图上(中等感受野)应用中等的先验框(30x61),(62x45),(59x119),适合检测中等大小的对象。较大的52*52特征图上(较小的感受野)应用
- 较小的先验框(10x13),(16x30),(33x23),适合检测较小的对象。
聚类过程:对训练集,取出GT bbox的width和height(相对于整张图片的比例),然后用K-means聚9类。得到的结果要转换为相对于栅格边长的比例(w = anchor_w * input_width / downsamples)。
Lable Assignment: YOLOv3只会对1个prior进行计算。通过logistic regression,会使得和GT有最大重叠的box prior的objectness score为1。如果和GT的重叠超过0.5,则会忽略这个预测。
参考: