训练的时候损失值降到1.6,predict的时候啥也检测不出来是怎么回事?
Bigwode opened this issue · comments
其实输出是14×14大小的,但是注释给的都是7×7的。
eval_voc的时候更加离奇,
---start evaluate---
---class aeroplane ap 0.0---
---class bicycle ap -1---
---map -0.5---
是否用了ImageNet预训练权重?
不确定具体原因,我之后会Gitclone下来验证一下
@xiongzihua 默认是使用ImageNet预训练权重的吧。改成VGG_net作为backbone的话,有点效果了,五张图片可以检测出一个物品来吧_~_
@xiongzihua 老哥,我又有两个问题不太明白来请教你了,因为我看代码的过程中发现一个cell中的两个box对应的target都是一样的,对应的target_confidence也是一样的,那么这分开两个box训练的意义或者说两个box之间有什么关联?
第二个问题是,预测的cxcy是对应的pred_box的中心位置还是和cell的左上角的偏差呀?在求loss 的过程中是
box1_xyxy[:,:2] = box1[:,:2]/14. -0.5box1[:,2:4]
box1_xyxy[:,2:4] = box1[:,:2]/14. +0.5box1[:,2:4]
推测应该是中心位置,因为这里没有加上grid_cell的左上角的坐标,但是在predict.py中是加上了grid_cell的左上角的坐标的,两处感觉有点矛盾。
1.一个cell只预测一个目标,只有一个box是负责的,不好解决多余一个目标的情况。赋值一样训练时会根据iou决定哪一个负责,另一个当做负类。
2.cxcy是预测和cell左上角的偏差,在计算iou时,统一不加上cell坐标是因为不知道他是哪一个cell的,但是不影响中心点之间的距离,也不会影响iou计算
@xiongzihua
"正确的处理方式:在yoloLoss.py中,对每一个框的中心点,cxcy/14.使框与框之间距离回到原始距离,计算出的IOU为正确IOU,同时增加contain_loss的权重为2,更注重正类这部分的损失."
对这句话,能不能这么理解:
网络输出时,box的cxcy(中心点坐标)
是相对于匹配到的grid的,box的weight和height
是相对于整幅图片的,坐标含义不同.所以此时对cxcy除以14,使其坐标也相对整幅图,这样计算IOU才有意义.