mmdet中anchor_head为预测分支的基类,包含了_inti_layers, init_weights, forward_single,forward, get_anchors, loss,get_bboxes这些功能,囊括了训练用到的loss计算以及预测用到的get_bboxes方法。
1、forward_single and forward
单尺度预测,得出分类,边框预测
def forward_single(self, x):
cls_score = self.conv_cls(x)
bbox_pred = self.conv_reg(x)
return cls_score, bbox_pred
包含FPN结构涉及到多尺度预测,作者设计一个多输入处理方法multi_apply,该方法核心就是针对输入list每个元素依据func处理得出结果,得出的结果是[(cls,bbox),(cls,bbox)]这样的格式,最后再通过zip做一下同种类别预测的合并操作,输出([cls1,cls2],[bbox1,bbox2])
def multi_apply(func, *args, **kwargs):
pfunc = partial(func, **kwargs) if kwargs else func
map_results = map(pfunc, *args)
return tuple(map(list, zip(*map_results)))
2、 loss
算loss,涉及到anchor的生成,以及anchor target的生成,损失函数
前两部分代码如下
anchor_list, valid_flag_list = self.get_anchors

本文深入解析MMDet框架中的Anchor Head模块,涵盖初始化、权重设置、前向传播、多尺度预测、损失计算及边界框预测等功能。通过具体代码示例,详细解读了FPN结构下的多输入处理方法multi_apply,以及loss计算中涉及的anchor生成、目标分配和采样策略。同时,介绍了get_bboxes函数如何将网络输出转化为最终的边界框和标签。
最低0.47元/天 解锁文章
729

被折叠的 条评论
为什么被折叠?



