Open TTTREE opened 4 years ago
或者说,某个点只有一个GT框,预测两个Bbox之后,GT的第一个gt_0是正确的GT,gt_1是用0填充吗??
如果只有一个gt,预测了两个bbox,记作bbox0和bbox1。计算bbox0对应gt、bbox1对应0的loss和bbox0对应0、bbox1对应gt的loss,取其中的小值作为最终loss进行计算。 如果是两个gt,也这样计算即可。
嗯我明白您的意思。那请问您在训练过程中有没有遇到这种问题: 由于可能训练集中绝大部分的点都只有一个gt,那么就会导致预测的两个Bbox,其中一个对应gt的置信度一直很高(>0.9),比如是Bbox0,而另一个Bbox1对应的置信度一直很低(<0.1)。 或者说大部分的数据都是只有一个gt,而另一个需要对应0的,这就导致两个预测的head网络产生记忆,多轮训练之后固定其中一个Bbox0预测的置信度很高,另一个Bbox1预测置信度很低。也就是我认为由于两个gt重叠一个anchor的情况极少,没有得到充分训练,导致网络训练的结果倾向于只预测一个高置信度的边界框,比如Bbox0(或Bbox1)即可达到损失收敛。 我表达的不是很好,不知道您是否能清楚。总之这是我现在运用您的方法预测两个box遇到的困境,谢谢您啦!
你好,我也有同样的困惑,如果我预测物体只有一个类(包裹,label=1),大多数图片只有一个gt,这个时候我用0来填充gt,但是这个填充的gt,他的label是什么呢,我认为应该是1,但是我的模型结果很差
嗯我明白您的意思。那请问您在训练过程中有没有遇到这种问题: 由于可能训练集中绝大部分的点都只有一个gt,那么就会导致预测的两个Bbox,其中一个对应gt的置信度一直很高(>0.9),比如是Bbox0,而另一个Bbox1对应的置信度一直很低(<0.1)。 或者说大部分的数据都是只有一个gt,而另一个需要对应0的,这就导致两个预测的head网络产生记忆,多轮训练之后固定其中一个Bbox0预测的置信度很高,另一个Bbox1预测置信度很低。也就是我认为由于两个gt重叠一个anchor的情况极少,没有得到充分训练,导致网络训练的结果倾向于只预测一个高置信度的边界框,比如Bbox0(或Bbox1)即可达到损失收敛。 我表达的不是很好,不知道您是否能清楚。总之这是我现在运用您的方法预测两个box遇到的困境,谢谢您啦!
你好,我也有同样的困惑,如果我预测物体只有一个类(包裹,label=1),大多数图片只有一个gt,这个时候我用0来填充gt,但是这个填充的gt,他的label是什么呢,我认为应该是-1,相当于ignore掉,但是我的模型结果很差,map很低
嗯我明白您的意思。那请问您在训练过程中有没有遇到这种问题: 由于可能训练集中绝大部分的点都只有一个gt,那么就会导致预测的两个Bbox,其中一个对应gt的置信度一直很高(>0.9),比如是Bbox0,而另一个Bbox1对应的置信度一直很低(<0.1)。 或者说大部分的数据都是只有一个gt,而另一个需要对应0的,这就导致两个预测的head网络产生记忆,多轮训练之后固定其中一个Bbox0预测的置信度很高,另一个Bbox1预测置信度很低。也就是我认为由于两个gt重叠一个anchor的情况极少,没有得到充分训练,导致网络训练的结果倾向于只预测一个高置信度的边界框,比如Bbox0(或Bbox1)即可达到损失收敛。 我表达的不是很好,不知道您是否能清楚。总之这是我现在运用您的方法预测两个box遇到的困境,谢谢您啦!
你好,我也有同样的困惑,如果我预测物体只有一个类(包裹,label=1),大多数图片只有一个gt,这个时候我用0来填充gt,但是这个填充的gt,他的label是什么呢,我认为应该是-1,相当于ignore掉,但是我的模型结果很差,map很低
应该填充0。如果填充-1,则相当于只有一个头被训练,最终可能会都输出高分预测导致大量false positive。
嗯我明白您的意思。那请问您在训练过程中有没有遇到这种问题: 由于可能训练集中绝大部分的点都只有一个gt,那么就会导致预测的两个Bbox,其中一个对应gt的置信度一直很高(>0.9),比如是Bbox0,而另一个Bbox1对应的置信度一直很低(<0.1)。 或者说大部分的数据都是只有一个gt,而另一个需要对应0的,这就导致两个预测的head网络产生记忆,多轮训练之后固定其中一个Bbox0预测的置信度很高,另一个Bbox1预测置信度很低。也就是我认为由于两个gt重叠一个anchor的情况极少,没有得到充分训练,导致网络训练的结果倾向于只预测一个高置信度的边界框,比如Bbox0(或Bbox1)即可达到损失收敛。 我表达的不是很好,不知道您是否能清楚。总之这是我现在运用您的方法预测两个box遇到的困境,谢谢您啦!
如果说大部分数据都是只有一个gt,确实会在训练早期就陷入到你所说的情况,一个非常倾向预测低置信度而另一个表现正常。这也是我们的方法在稀疏数据集中表现不会下降的原因。只有在有比较多高重叠样本的时候,我们的方法才会有显著的提升。
嗯我明白您的意思。那请问您在训练过程中有没有遇到这种问题: 由于可能训练集中绝大部分的点都只有一个gt,那么就会导致预测的两个Bbox,其中一个对应gt的置信度一直很高(>0.9),比如是Bbox0,而另一个Bbox1对应的置信度一直很低(<0.1)。 或者说大部分的数据都是只有一个gt,而另一个需要对应0的,这就导致两个预测的head网络产生记忆,多轮训练之后固定其中一个Bbox0预测的置信度很高,另一个Bbox1预测置信度很低。也就是我认为由于两个gt重叠一个anchor的情况极少,没有得到充分训练,导致网络训练的结果倾向于只预测一个高置信度的边界框,比如Bbox0(或Bbox1)即可达到损失收敛。 我表达的不是很好,不知道您是否能清楚。总之这是我现在运用您的方法预测两个box遇到的困境,谢谢您啦!
如果说大部分数据都是只有一个gt,确实会在训练早期就陷入到你所说的情况,一个非常倾向预测低置信度而另一个表现正常。这也是我们的方法在稀疏数据集中表现不会下降的原因。只有在有比较多高重叠样本的时候,我们的方法才会有显著的提升。
明白了,谢谢您的回复。
如果只有一个gt,预测了两个bbox,记作bbox0和bbox1。计算bbox0对应gt、bbox1对应0的loss和bbox0对应0、bbox1对应gt的loss,取其中的小值作为最终loss进行计算。 如果是两个gt,也这样计算即可。
localization_loss = smooth_l1_loss( pred_delta[fg_masks], targets[fg_masks], config.smooth_l1_beta) 感觉计算loss的时候并没有体现这个思想啊,不太明白bbox怎么对应0计算的loss,这里取的都是正样本进行计算,只对应一个gt的话,另一个在计算iou时其值小于阈值,就直接置为负样本,label=0,就不参与回归损失的计算,最后 loss = objectness_loss * valid_mask loss[fg_masks] = loss[fg_masks] + localization_loss。 这里loss就全是正样本的loss,这样进行优化是否合理,对于分类loss来说。 那么上面的思想主要是在哪一步实现的,bbox如何对应0计算loss的。用0填充gt是在哪里实现的呢。
如果只有一个gt,预测了两个bbox,记作bbox0和bbox1。计算bbox0对应gt、bbox1对应0的loss和bbox0对应0、bbox1对应gt的loss,取其中的小值作为最终loss进行计算。 如果是两个gt,也这样计算即可。
localization_loss = smooth_l1_loss( pred_delta[fg_masks], targets[fg_masks], config.smooth_l1_beta) 感觉计算loss的时候并没有体现这个思想啊,不太明白bbox怎么对应0计算的loss,这里取的都是正样本进行计算,只对应一个gt的话,另一个在计算iou时其值小于阈值,就直接置为负样本,label=0,就不参与回归损失的计算,最后 loss = objectness_loss * valid_mask loss[fg_masks] = loss[fg_masks] + localization_loss。 这里loss就全是正样本的loss,这样进行优化是否合理,对于分类loss来说。 那么上面的思想主要是在哪一步实现的,bbox如何对应0计算loss的。用0填充gt是在哪里实现的呢。
填充部分见fpn_roi_target.py中对labels变量的处理过程。 smoothl1是回归loss,不对负样本进行计算,分类loss是softmax_loss的部分。
你好,看了您的论文受益匪浅,我目前在尝试修改anchor-free的算法。正在参考retinanet+EMD的修改思路,但是看不太懂retina_anchor_target.py部分的代码。 想请问下你改进retinanet的思路是什么,主要改了哪些部分。 特别想问的就是,每个先验框anchor预测两组回归值,那怎么把GT与两组anchor结果对应起来计算损失呢? 比如某个点只有一个GT框,但是会预测两个Bbox,怎么对应起来呢? 谢谢!