one stage 的RFBNet在保证速度的前提下,也有着不错的精度,所以拿来训练kaggle上的RSNA。这边主要介绍下对RFBnet源码修改支持RSNA的训练,如果想看关于RSNA数据分析的,可以去看kaggle上的kernels。
数据集介绍
RSNA跟常见的检测数据集(COCO,VOC,BDD100K,CITYSCAPE等)不一样的一个地方就是,图片中可能不存在标注,也就是说不存在foreground,我就隐隐觉得源码可能不支持这种情况,果然写完dataloader之后报错了,然后就需要修改源码了。
源码修改
1.自己写个支持RSNA的dataloader
大家都有自己的风格,主要就是:
1.用SimpleITK读dicom
2.当前图像没有标注时,load annotation返回 np.zeros((1, 5))
2.修改multibox_loss.py
源码会根据foreground的数量,按一定比例取一些background,但是如果没有foreground,background也没有,算正负样本分类的交叉熵就会报错。
我添加了一段逻辑,如果没有foreground,就选择4个background进行计算,对应下面代码55-58。
def forward(self, predictions, priors, ta