由于不知道如何发布代码,复制粘贴不太好看(起码我不喜欢看,哈哈),所以笔者再次便采取截图的形式。
---------------------------------------------------------------------------------------------------------------------------
首先进行各种包的导入,这里也不能忽视,得稍微看一眼。
-----------------------------------------------------------------------------------------------------------------------
随后进行head头的注册,不了解注册机制的去看看mmdetection官网哈!在初始化阶段进行各种形参的设置。
---------------------------------------------------------------------------------------------------------------------------
这里注意下_init_layers()函数,在这里便进行调用,进行一些卷积的初始化。
---------------------------------------------------------------------------------------------------------------------
卷积初始化便是构造各种卷积,这种写法大家可以进行模仿。
------------------------------------------------------------------------------------------------------------------------
然后便是前向传播阶段,其实前向传播很简单,就是分类、回归分支,用前面构造好的卷积,一次性进行计算就好了。对了,multi_apply机制也是mmdetection很常用的,大家可以自行百度一下。
---------------------------------------------------------------------------------------------------------------------------
最复杂的loss终于来了!这里featmap_size能得到 (H W),后面会用到。-2表示最后两个。
--------------------------------------------------------------------------------------------------------------------------
因为时anchor free,所以这里不会调用get_anchor,转而调用get_points了,为的就是得到featmap上的每一个点,其实原理和anchor base一样,这里得到了很多个点。
------------------------------------------------------------------------------------------------------------------
这里我把get_points的函数拿出来,最终返回的是每个点的坐标。
-------------------------------------------------------------------------------------------------------------------------
随后进行fcos_target得到gt_bbox的标签(这里的标签也都加了索引,代表正负样本)和bbox_targets(这个表示中心点到四条边的距离)!其实这里是文中的创新点,大家一定要仔细看。
------------------------------------------------------这里单独拿出来, 主要算法在self.fcos_target_single。
-------------------------------------------------------------------------------------------------------------
返回的是前面提到过的label和targets!这里可能注释的不是很仔细,以后有时间我再搞搞啦,哈哈哈哈哈哈。大家有问题也可以评论。
-------------------------------------------------------------------------------------------------------------------
最难的地方已经过去了,接下来就是要计算损失了。计算损失,需要把预测的和gt均permute到相同的维度(要计算的部分维度一定要相同)
---------------------------------------------------------------------------------------------------------------
把前面的量处理好了之后,这里就是进行损失计算 。没什么好说的。
--------------------------------------------------------------------------------------------------------------------
以上,讲的主要是训练部分的代码,有空我再完善一下!大家有什么疑惑可以评论,反正是一起学习!