_set_aux_loss(outputs_class, outputs_coord) return out self.class_embed是 nn.Linear; self.bbox_embed是MLP。因为用了中间监督,所以中间层的decoder输出也保留用来训练时候计算loss,测试时候以最后一层的结果为准(其实也可以加权平均等等)。Inference的时候只看decoder最后一层的输出,100个query中只要挑出分类...
out ={'pred_logits': outputs_class[-1],'pred_boxes': outputs_coord[-1]} 中的[-1]是取掉 M 这个维度。另外,如果self.aux_loss是True,就表示我们在Decoder的每一个中间输出上都去做预测,然后把它们存到out中的'aux_outputs'中。后续在计算loss的时候,会先计算最后一层的类别和坐标预测的loss。然后...
pred_boxes:300个特征向量产生的Anchor aux_outputs,每个Decoder层的结果,因为Decoder中有3层,因此其采用 list 形式存储,每个list中的结果如下: dn_aux_outputs为每层Decoder加噪查询向量输出结果 此外,还有加噪向量 最终完成了Decoder的计算,接下来便是通过匈牙利匹配方法来匹配预测结果与目标了,同时进行损失计算。 ...
hs=self.transformer(self.input_proj(src),mask,self.query_embed.weight,pos[-1])[0]outputs_class=self.class_embed(hs)outputs_coord=self.bbox_embed(hs).sigmoid()# 都只使用最后一层decoder输出的结果 out={'pred_logits':outputs_class[-1],'pred_boxes':outputs_coord[-1]}ifself.aux_loss:out...
out ={'pred_logits': outputs_class[-1],'pred_boxes': outputs_coord[-1]} 中的[-1]是取掉M这个维度。另外,如果self.aux_loss是True,就表示我们在Decoder的每一个中间输出上都去做预测,然后把它们存到out中的'aux_outputs'中 。后续在计算loss的时候,会先计算最后一层的类别和坐标预测的loss。然后再...
if self.aux_loss: out['aux_outputs'] = [{'pred_logits': a, 'pred_boxes': b} for a, b in zip(outputs_class[:-1], outputs_coord[:-1])] return out 1. 2. 3. 4. 得到输出结果,输出out包含三个内容: pred_boxes:torch.Size([2, 100, 4]) pred_logits:torch.Size([2, 100, 7...
(src),mask,self.query_embed.weight,pos[-1])[0]outputs_class=self.class_embed(hs)outputs_coord=self.bbox_embed(hs).sigmoid()out={'pred_logits':outputs_class[-1],'pred_boxes':outputs_coord[-1]}ifself.aux_loss:out['aux_outputs']=self._set_aux_loss(outputs_class,outputs_coord)...
_set_aux_loss(outputs_class, outputs_coord) if self.two_stage: # 如果两阶段的话,同时对encoder的预测进行约束 enc_outputs_coord = enc_outputs_coord_unact.sigmoid() out['enc_outputs'] = {'pred_logits': enc_outputs_class, 'pred_boxes': enc_outputs_coord} return out 需要注意的点: ...
to(device)) probs = outputs['pred_logits'].softmax(-1)[0, :, :-1] # 可修改阈值,只输出概率大于0.7的物体 keep = probs.max(-1).values > 0.7 # print(probs[keep]) bboxes_scaled = rescale_bboxes(outputs['pred_boxes'][0, keep], im.size) ori_img = np.array(im) plot_...
( backbone, transformer, num_classes=num_classes, num_queries=args.num_queries, aux_loss=args.aux_loss, ) if args.masks: model = DETRsegm(model) matcher = build_matcher(args) weight_dict = {'loss_ce': 1, 'loss_bbox': args.bbox_loss_coef} weight_dict['loss_giou'] = args.giou...