目前在做实例分割相关的课题,这次介绍基于mmdetection的SOLO代码,主要是head部分的代码解读。
detectors/solo.py
这里里面定义了整体的结构,可见直接继承SingleStageInsDetector
类,从config文件可以看出,SOLO的backbone为resne,neck为FPN,head为solo head。所以重点是在solo head。
1 |
|
anchor_heads/solo_head.py
这里就是SOLO的重点介绍部分,包括head的定义,以及loss的计算。
1 |
|
定义完网络结构后,下面开始前向计算
1 |
|
下面的self.forward_single就是前向计算的主体部分,不复杂,注意的是在mask branch需要将x、y坐标信息拼接到对应level的feature map上。
1 |
|
此时模型的前向计算就结束了,框架很简洁,接下来的loss计算相对繁琐一些。
1 |
|
self.solo_target_single作用是为category和mask branch分支分配gt label
1 |
|
- ins_label_list: 保存了整个batch的mask branch的gt label
- cate_label_list: 整个batch的category branch的gt label
- ins_ind_label_list: 整个batch标识S*S通道存在object的通道
我们再返回loss函数接着看
1 |
|
最后就是实际的loss计算
1 |
|