yjh0410 / PyTorch_YOLOF

A PyTorch version of You Only Look at One-level Feature object detector
36 stars 9 forks source link

标签生成函数写得有问题 #4

Open Mr-Z-NewStar opened 2 years ago

Mr-Z-NewStar commented 2 years ago

源码中的标签生成逻辑是: 1.利用预测框与gt的l1距离筛选出topk个锚点,再利用锚点与gt的l1距离筛选出topk个锚点,将之作为预选正例锚点。 2.将预选正例锚点依据iou与gt匹配,滤除与锚点iou小于0.15的预选正例锚点 3.将gt与预测框iou<=0.7的预测框对应锚点设置为负例锚点 (而您只用了锚点,没有预选,也没用预测框)

Mr-Z-NewStar commented 2 years ago

还有两个小问题,与源码不一致,一是输入图片尺寸,二是最后一个卷积层源码是3x3。问题不大。

yjh0410 commented 2 years ago

@Mr-Z-NewStar 非常开心收到您的建议!您的建议有可能会改善这个YOLOF项目

仔细看了您的指正,有些点可能理解得和我不太一样,我下面针对您的问题做出解释:

一、我的label assignment代码的生成逻辑如下: 1.计算gt与所有anchor box(共HxWxKA个anchor box)的iou和l1距离; 2.根据l1距离,保留topk个anchor box(即,保留与gt框最近的k个anchor box); 3.根据预设的iou阈值(默认0.15),筛选这topk的anchor box。通常,这k个结果都会通过IoU筛选,因为0.15是个很小的值; 4.对于那些与gt的IoU大于0.7的anchor box,视为忽略样本,即不参与任何loss计算; 5.余下的就全是负样本了。

在训练过程中,官方还会去计算预测和gt之间的IoU,滤除掉那些IoU大于0.7的负样本预测。这一点我暂时没采用。

二、对于输入图片尺寸问题 我采用了和RetinaNet一致的做法,即最短边resize到800,最长边不超过1333。(如果最长边resize后超过1333,那么就把最长边设置为1333,最短边根据比例做相应调整),YOLOF也是这么做的,所以我们的输入尺寸是一致的。您认为不一致可能是在训练过程中看到了我的size输出都是(1333,1333)。这是因为这种resize方法不能保证长边都一样,所以为了方便组成一批batch,我就把所有图片都pad成1333,1333的,并会输出一个mask,mask中为1的地方对应原图的位置,mask中为0的地方对于原图之外的padding的区域,这些区域是完全不参与loss计算的。

三、对于最后一程卷积是3x3的问题 这里我调过,1x1和3x3没有明显差别,就暂时先没改了。

Mr-Z-NewStar commented 2 years ago

yolof的官方实现中采样方法是每批次只采样长度大于宽度或者宽度大于长度的图片,然后把图片全部缩放和补全成(800,1333)或(1333,800),这样有利于减少padding,只有一边有padding。我感觉还是略有差别的,虽然可能不影响精度,但影响计算速度。

yjh0410 commented 2 years ago

@yjh0410 是的, 对于训练阶段,我的做法肯定是要慢的,而且会占得显存多一些,但在推理阶段是不影响的,因为推理阶段不会有padding,每张图片就是短边=800,长边不超过1333。

Mr-Z-NewStar commented 2 years ago
截屏2022-03-14 13 21 20

改了您的标签分配逻辑,采用2张3090,32张图片一个批次,还没训练完,这是第10个epoch之后的结果,明显提升,11个epoch之后还会有一个学习率下降。

yjh0410 commented 2 years ago

@Mr-Z-NewStar 喔!这个结果看起来非常好,请问您做了哪些修改?

Mr-Z-NewStar commented 2 years ago

能加个好友吗,将代码发给您,github还不太会上传。

yjh0410 commented 2 years ago

@Mr-Z-NewStar 我微信比较私人化,所以很少会会用微信,您可以加我QQ:1394571815

hdjghjb commented 1 year ago

能加个好友吗,将代码发给您,github还不太会上传。

你好,请问是否方便将代码发给我参考一下呢?563014577@qq.com

hdjghjb commented 1 year ago

@Mr-Z-NewStar 喔!这个结果看起来非常好,请问您做了哪些修改?

请问大佬是否将这位朋友修改的部分同步到代码中了?如果可以能否将代码发送一份给我参考一下?563014577@qq.com

yjh0410 commented 1 year ago

@hdjghjb pull这份代码就ok,项目已经更新,性能请看README