YOLOv3_TensorFlow icon indicating copy to clipboard operation
YOLOv3_TensorFlow copied to clipboard

训练新数据集的几个参数问题请教

Open blade2004 opened this issue 5 years ago • 9 comments

作者您好: 感谢您开放代码,现在有几个训练新数据集的参数问题向您请教一下: (1)自己制作的新数据集,新的数据集与原COCO数据集都不一样,类别也不一样,所以,我只是用COCO数据集转换来的模型做一开始的导入,类似初始化,导入后还是根据训练集继续计算的。这样的话,args.py中的restore_path还是保持'./data/darknet_weights/yolov3.ckpt'的样子,save_dir给一个存储的位置,我这里是'./checkpoint/',这样途中计算的结果就存在这里了,我这样理解对吗? (2)eval.py中的restore_path,因为是要用计算出的模型来验证,所以应该也是用'./checkpoint/',而不是之前的COCO模型路径,这样理解对吗? (3)第一次训练,输出的中间模型和最佳模型都有记录在'./checkpoint/'目录中,但是中断以后,再次清空模型目录,从头训练的时候,发现只记录最佳模型,中间模型都不输出了,不知道是哪里的问题。 (4)我的计算结果,rec: 0.938, prec: 0.018,recall很高,precision却很低,不知道原因。 ======> Epoch: 80, global_step: 228257.0, lr: 1e-05 <====== EVAL: Class 0: Recall: 0.8918, Precision: 0.0720, AP: 0.4704 EVAL: Class 1: Recall: 0.8978, Precision: 0.0507, AP: 0.4492 EVAL: Class 2: Recall: 0.8986, Precision: 0.0490, AP: 0.4428 EVAL: Class 3: Recall: 0.8914, Precision: 0.0526, AP: 0.4530 EVAL: Class 4: Recall: 0.9008, Precision: 0.0504, AP: 0.4490 EVAL: Class 5: Recall: 0.8950, Precision: 0.0649, AP: 0.4775 EVAL: Class 6: Recall: 0.8968, Precision: 0.0685, AP: 0.4888 EVAL: Class 7: Recall: 0.8883, Precision: 0.0646, AP: 0.4697 EVAL: Class 8: Recall: 0.8965, Precision: 0.0639, AP: 0.4677 EVAL: Class 9: Recall: 0.9104, Precision: 0.0556, AP: 0.5322 EVAL: Recall: 0.8967, Precison: 0.0582, mAP: 0.4700 EVAL: loss: total: 124.30, xy: 1.68, wh: 0.21, conf: 18.47, class: 103.94

以上是我的问题,感谢您的关注。 谢谢!

blade2004 avatar Aug 22 '19 10:08 blade2004

还有,解决这个问题你要看下你的样本应该是极度不平衡的,负样本太多了。

我的是十分类的样本,各类别样本数量是均衡的。我感觉我肯定是哪里参数没设置好。我关于模型的参数是这样的:

args.py restore_path = './checkpoint/'
save_dir = './checkpoint/'

eval.py parser.add_argument("--restore_path", type=str, default="./checkpoint/", help="The path of the weights to restore.")

blade2004 avatar Aug 23 '19 02:08 blade2004

我是不知你所云为何物,你所谓的十分类和我讲的负样本是两码事,你的十分类都是正样本,而我说的是负样本。你的参数我也不知所云,yolo系列属于dense detector,密集抽样,负样本占多数,不管你几分类。可能你需要补一补机器学习的知识,比如先从opencv实现svm十分类,再来看yolov3这种深度学习网络。你提出的问题太基础了,我的回答你都看不懂的。

好的,谢谢指点

blade2004 avatar Aug 23 '19 02:08 blade2004

我是不知你所云为何物,你所谓的十分类和我讲的负样本是两码事,你的十分类都是正样本,而我说的是负样本。你的参数我也不知所云,yolo系列属于dense detector,密集抽样,负样本占多数,不管你几分类。可能你需要补一补机器学习的知识,比如先从opencv实现svm十分类,再来看yolov3这种深度学习网络。你提出的问题太基础了,我的回答你都看不懂的。

另外,和您请教一下,我们在训练集里标注的,应该都是正样本吧,负样本如何体现呢?

blade2004 avatar Aug 23 '19 02:08 blade2004

负样本是dense detector机制决定的,举个例子,v1中,特征图77,492,一共98个boundingbox,你手动框的物体,它的中心点占据一个正样本,十个物体就有十个所谓正样本,以此类推,但是98个box都是存在的,其他的88个就在网络训练中当成都是背景了,负样本就是这样的机制,这个是one stage特有的,没有rpn的,yolov3一样的意思,而且负样本剧增,你不要太在乎prec,你训练的map体现你的最终效果,除非你的任务对prec有要求,这涉及到虚警率和漏警率的问题,需要继续进行改进,要看具体你做什么,当然不是拿来主义就能判定的。 ---原始邮件--- 发件人: "blade_2004"[email protected] 发送时间: 2019年8月23日(星期五) 上午10:49 收件人: "wizyoung/YOLOv3_TensorFlow"[email protected]; 抄送: "Comment"[email protected];"dailiwei"[email protected]; 主题: Re: [wizyoung/YOLOv3_TensorFlow] 训练新数据集的几个参数问题请教 (#141) 我是不知你所云为何物,你所谓的十分类和我讲的负样本是两码事,你的十分类都是正样本,而我说的是负样本。你的参数我也不知所云,yolo系列属于dense detector,密集抽样,负样本占多数,不管你几分类。可能你需要补一补机器学习的知识,比如先从opencv实现svm十分类,再来看yolov3这种深度学习网络。你提出的问题太基础了,我的回答你都看不懂的。 另外,和您请教一下,我们在训练集里标注的,应该都是正样本吧,负样本如何体现呢? — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

非常感谢!我继续消化。

blade2004 avatar Aug 23 '19 03:08 blade2004

我用的是只有一个类别的分类,也是同样的问题precision很低,迫于代码注视和结构有点乱,没法直接看出出什么问题了。 这批数据用pjreddie/darknet repo下的方案跑起来正常的啊。

shm007g avatar Aug 28 '19 10:08 shm007g

我用的是只有一个类别的分类,也是同样的问题precision很低,迫于代码注视和结构有点乱,没法直接看出出什么问题了。 这批数据用pjreddie/darknet repo下的方案跑起来正常的啊。

请问你的问题解决了吗? 我这里也是precission很低。map很高。 看到希望您回复一下,谢谢

Byronnar avatar Sep 18 '19 11:09 Byronnar

我用的是只有一个类别的分类,也是同样的问题precision很低,迫于代码注视和结构有点乱,没法直接看出出什么问题了。 这批数据用pjreddie/darknet repo下的方案跑起来正常的啊。

请问你的问题解决了吗? 我这里也是precission很低。map很高。 看到希望您回复一下,谢谢

出现了同样的问题,望指教

mahaweilu avatar Nov 25 '19 05:11 mahaweilu

I want to use yolov3 to predict the number of real-time person from the rtsp stream with suited interval,anyone has the right python file?

bujianyiwang avatar Jan 16 '20 06:01 bujianyiwang

博主的数据颜色处理环节是不是有问题哈,代码如下: def random_hue(img_hsv, hue_vari, p=0.5): if np.random.uniform(0, 1) > p: hue_delta = np.random.randint(-hue_vari, hue_vari) img_hsv[:, :, 0] = (img_hsv[:, :, 0] + hue_delta) % 180 return img_hsv 这个地方的180有点诡异,opencv读取的数据范围在[0 255]之间,他这里全部归一化到[0 180] 我感觉有点不对。

poppy007 avatar May 15 '20 10:05 poppy007