Peterisfar / YOLOV3

yolov3 by pytorch
MIT License
195 stars 53 forks source link

关于voc.py中的逻辑错误 #14

Closed yuanliangxie closed 4 years ago

yuanliangxie commented 4 years ago

当use_difficult_bbox=False时,其中在判断的时候有逻辑错误,生成的注解文件包含有难以分辨的标签。 if (not use_difficult_bbox) and (difficult == 1): # difficult 表示是否容易识别,0表示容易,1表示困难 continue 应该更改为 if ( use_difficult_bbox) and (difficult == 1): # difficult 表示是否容易识别,0表示容易,1表示困难 continue

yuanliangxie commented 4 years ago

非常优雅的代码!值得学习!

clw5180 commented 4 years ago

非常优雅的代码!值得学习!

不对吧........这里的逻辑应该是:不使用difficult然后如果碰到了difficult的object,就跳过

yuanliangxie commented 4 years ago

我最初以为是逻辑问题,我发现返回来的diffcult是str类型,所以需要加一个int(difficult),不然根本过滤不掉难标签

yuanliangxie commented 4 years ago

非常优雅的代码!值得学习!

不对吧........这里的逻辑应该是:不使用difficult然后如果碰到了difficult的object,就跳过

所以作者所说的在简单标签训练的结果其实包含了所有标签的!

clw5180 commented 4 years ago

我最初以为是逻辑问题,我发现返回来的diffcult是str类型,所以需要加一个int(difficult),不然根本过滤不掉难标签

也可能,还没有仔细读作者的代码,现在一直在看ultralyrics那个版本,但是在voc2007上最高也就跑到0.79了,这个据说可以到0.85以上,你现在测试过没

clw5180 commented 4 years ago

非常优雅的代码!值得学习!

不对吧........这里的逻辑应该是:不使用difficult然后如果碰到了difficult的object,就跳过

所以作者所说的在简单标签训练的结果其实包含了所有标签的!

那0.85有点过分了吧,加入difficult可以掉很多mAP

yuanliangxie commented 4 years ago

非常优雅的代码!值得学习!

不对吧........这里的逻辑应该是:不使用difficult然后如果碰到了difficult的object,就跳过

所以作者所说的在简单标签训练的结果其实包含了所有标签的!

那0.85有点过分了吧,加入difficult可以掉很多mAP

我最初以为是逻辑问题,我发现返回来的diffcult是str类型,所以需要加一个int(difficult),不然根本过滤不掉难标签

也可能,还没有仔细读作者的代码,现在一直在看ultralyrics那个版本,但是在voc2007上最高也就跑到0.79了,这个据说可以到0.85以上,你现在测试过没

ultralyrics的那个版本真的写的太乱了。。。

clw5180 commented 4 years ago

非常优雅的代码!值得学习!

不对吧........这里的逻辑应该是:不使用difficult然后如果碰到了difficult的object,就跳过

所以作者所说的在简单标签训练的结果其实包含了所有标签的!

那0.85有点过分了吧,加入difficult可以掉很多mAP

我最初以为是逻辑问题,我发现返回来的diffcult是str类型,所以需要加一个int(difficult),不然根本过滤不掉难标签

也可能,还没有仔细读作者的代码,现在一直在看ultralyrics那个版本,但是在voc2007上最高也就跑到0.79了,这个据说可以到0.85以上,你现在测试过没

ultralyrics的那个版本真的写的太乱了。。。

你现在在做什么项目?天池有个瑕疵品检测的比赛感兴趣不

yuanliangxie commented 4 years ago

非常优雅的代码!值得学习!

不对吧........这里的逻辑应该是:不使用difficult然后如果碰到了difficult的object,就跳过

所以作者所说的在简单标签训练的结果其实包含了所有标签的!

那0.85有点过分了吧,加入difficult可以掉很多mAP

加入diffcult不应该增点嘛,检测器的检测性能还是比较强的

yuanliangxie commented 4 years ago

我做的是多源信息融合,视觉只是一部分

非常优雅的代码!值得学习!

不对吧........这里的逻辑应该是:不使用difficult然后如果碰到了difficult的object,就跳过

所以作者所说的在简单标签训练的结果其实包含了所有标签的!

那0.85有点过分了吧,加入difficult可以掉很多mAP

我最初以为是逻辑问题,我发现返回来的diffcult是str类型,所以需要加一个int(difficult),不然根本过滤不掉难标签

也可能,还没有仔细读作者的代码,现在一直在看ultralyrics那个版本,但是在voc2007上最高也就跑到0.79了,这个据说可以到0.85以上,你现在测试过没

ultralyrics的那个版本真的写的太乱了。。。

你现在在做什么项目?天池有个瑕疵品检测的比赛感兴趣不

我做的是多源信息融合,视觉只是一部分,这是来自大佬的邀请吗?

yuanliangxie commented 4 years ago

非常优雅的代码!值得学习!

不对吧........这里的逻辑应该是:不使用difficult然后如果碰到了difficult的object,就跳过

所以作者所说的在简单标签训练的结果其实包含了所有标签的!

那0.85有点过分了吧,加入difficult可以掉很多mAP

我最初以为是逻辑问题,我发现返回来的diffcult是str类型,所以需要加一个int(difficult),不然根本过滤不掉难标签

也可能,还没有仔细读作者的代码,现在一直在看ultralyrics那个版本,但是在voc2007上最高也就跑到0.79了,这个据说可以到0.85以上,你现在测试过没

ultralyrics的那个版本真的写的太乱了。。。

你现在在做什么项目?天池有个瑕疵品检测的比赛感兴趣不

比赛那种不是各种cascade faster rcnn吗?

clw5180 commented 4 years ago

我做的是多源信息融合,视觉只是一部分

非常优雅的代码!值得学习!

不对吧........这里的逻辑应该是:不使用difficult然后如果碰到了difficult的object,就跳过

所以作者所说的在简单标签训练的结果其实包含了所有标签的!

那0.85有点过分了吧,加入difficult可以掉很多mAP

我最初以为是逻辑问题,我发现返回来的diffcult是str类型,所以需要加一个int(difficult),不然根本过滤不掉难标签

也可能,还没有仔细读作者的代码,现在一直在看ultralyrics那个版本,但是在voc2007上最高也就跑到0.79了,这个据说可以到0.85以上,你现在测试过没

ultralyrics的那个版本真的写的太乱了。。。

你现在在做什么项目?天池有个瑕疵品检测的比赛感兴趣不

我做的是多源信息融合,视觉只是一部分,这是来自大佬的邀请吗?

之前都是,但是这次复赛有时间惩罚系数,而且我现在也在做yolov3的项目,要不加个企鹅吧,623497281

yuanliangxie commented 4 years ago

我最初以为是逻辑问题,我发现返回来的diffcult是str类型,所以需要加一个int(difficult),不然根本过滤不掉难标签

也可能,还没有仔细读作者的代码,现在一直在看ultralyrics那个版本,但是在voc2007上最高也就跑到0.79了,这个据说可以到0.85以上,你现在测试过没

这个代码,我跑50epoch,没有对测试集做翻转和多尺度的map在82.多左右

yuanliangxie commented 4 years ago

我做的是多源信息融合,视觉只是一部分

非常优雅的代码!值得学习!

不对吧........这里的逻辑应该是:不使用difficult然后如果碰到了difficult的object,就跳过

所以作者所说的在简单标签训练的结果其实包含了所有标签的!

那0.85有点过分了吧,加入difficult可以掉很多mAP

我最初以为是逻辑问题,我发现返回来的diffcult是str类型,所以需要加一个int(difficult),不然根本过滤不掉难标签

也可能,还没有仔细读作者的代码,现在一直在看ultralyrics那个版本,但是在voc2007上最高也就跑到0.79了,这个据说可以到0.85以上,你现在测试过没

ultralyrics的那个版本真的写的太乱了。。。

你现在在做什么项目?天池有个瑕疵品检测的比赛感兴趣不

我做的是多源信息融合,视觉只是一部分,这是来自大佬的邀请吗?

之前都是,但是这次复赛有时间惩罚系数,而且我现在也在做yolov3的项目,要不加个企鹅吧,623497281

OKOK!

Peterisfar commented 4 years ago

我最初以为是逻辑问题,我发现返回来的diffcult是str类型,所以需要加一个int(difficult),不然根本过滤不掉难标签

你是对的,这里有个bug

Peterisfar commented 4 years ago

修复了voc.py的bug,用新生成的训练数据(不包含difficult)重新训练了一下,模型的版本是master分支下的不用多尺度测试与反转测试的版本(即83.2),训练效果mAP可以到84.0。如下图: image

yuanliangxie commented 4 years ago

so nice work!!!

---原始邮件--- 发件人: "leon"<notifications@github.com> 发送时间: 2019年12月26日(星期四) 中午11:22 收件人: "Peterisfar/YOLOV3"<YOLOV3@noreply.github.com>; 抄送: "yuanliangxie"<214510890@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [Peterisfar/YOLOV3] 关于voc.py中的逻辑错误 (#14)

修复了voc.py的bug,用新生成的训练数据(不包含difficult)重新训练了一下,模型的版本是master分支下的不用多尺度测试与反转测试的版本(即83.2),训练效果mAP可以到84.0。如下图:

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

Peterisfar commented 4 years ago

我已经找到了,在yolo_head.py第39行: grid_xy = grid_xy.unsqueeze(0).unsqueeze(3).repeat(batch_size, 1, 1, 3, 1).float().to(device)改成 grid_xy = grid_xy.unsqueeze(0).unsqueeze(3).repeat(batch_size, 1, 1, 每层真实的anchor个数, 1).float().to(device) 感觉就可以了,不知是否正确? @Peterisfar

这里3需要改过来,你可以调试一下看看

yuanliangxie commented 4 years ago

不止要改这里,因为除了网络生成参数,还要有对应的GT标签才能训练啊,所以还要在dataset那里改动,因为这个代码,在训练之前就把gt分配好了。

---原始邮件--- 发件人: "Henry"<notifications@github.com> 发送时间: 2019年12月26日(星期四) 下午4:18 收件人: "Peterisfar/YOLOV3"<YOLOV3@noreply.github.com>; 抄送: "yuanliangxie"<214510890@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [Peterisfar/YOLOV3] 关于voc.py中的逻辑错误 (#14)

我已经找到了,在yolo_head.py第39行: grid_xy = grid_xy.unsqueeze(0).unsqueeze(3).repeat(batch_size, 1, 1, 3, 1).float().to(device)改成 grid_xy = grid_xy.unsqueeze(0).unsqueeze(3).repeat(batch_size, 1, 1, 每层真实的anchor个数, 1).float().to(device) 就可以了

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.