13.7.1 模型

P433

这里锚框一共有\(hwa\)个,是因为我们不会对每一个通道的每一个像素都生成\(a\)个锚框,对于一个位置\((h,w)\),我们只生成\(a\)个锚框,而不是生成\(ac\)个锚框

P434

这里将通道维移到最后一维是为了方便之后的交叉熵和\(L_1\)损失进行计算

P436

def blk_forward中的参数X不是最开始的输入图像,而是上一层的特征图;从这个函数也可以看出来为什么d2l.multibox_prior的返回的锚框的第一维大小一定是1了,因为同一批次中不同的图像宽和高都是一样的,所以得到的各个特征图的大小也是一样的,于是我们只用为一个图像的所有特征图生成锚框,其他图像的锚框仍然是一样的(注意这里说的锚框指的是其在哪一层的特征图上的哪一个像素,以及宽和高);也就不难理解cls_predsbbox_preds为什么要有batch_size这一维度:因为这两个张量是跟输入图像相关的

size[i]表示的是第i层的锚框的缩放比,较大值之所以使用几何平均数确定,是为了得到更平滑的变化

TinySSDdef forward中,anchors本身是一个四维的张量,经过torch.cat之后变成了三维1, num_anchors, 4(这里的num_anchors指一个图像的锚框数,所以不要乘以batch_size),从这里也可以看出来为什么d2l.multibox_prior里面的锚框要用百分比衡量了:因为我们要将不同的特征图的锚框连接在一起

TinySSDdef forward中,cls_preds本身是一个五维的张量,经过concat_preds之后变成了两维batch_size, -1,再经过.reshape之后就变成了batch_size, num_anchors, num_classes + 1

TinySSDdef forward中,bbox_preds本身是一个五维的张量,经过concat_preds之后变成了两维batch_size, num_anchors * 4

posted @ 2025-08-02 14:17  最爱丁珰  阅读(5)  评论(0)    收藏  举报