MaybeShewill-CV / lanenet-lane-detection

Unofficial implemention of lanenet model for real time lane detection
Apache License 2.0
2.35k stars 885 forks source link

训练过程还是出现nan #116

Closed fayechou closed 2 years ago

fayechou commented 5 years ago

你的做法和我的一樣,我也是把學習率降低之後就可以訓練了,但是當epoch跑到一定次數之後,仍會有nan的情形出現. 而且accuracy只有在0.5~0.6之間,請問你有這樣的情形嗎? 謝謝!!

你好,我遇到的问题和你的一模一样,请问你解决了吗?是怎么解决的啊?

_Originally posted by @fayechou in https://github.com/MaybeShewill-CV/lanenet-lane-detection/issue_comments#issuecomment-445708580_

cardwing commented 5 years ago

@fayechou , you can try my repo and check if it can yield better accuracy. Besides, this implementation does not encounter NAN problems.

MaybeShewill-CV commented 5 years ago

@fayechou 你可以再贴一些细节在这里:)

fayechou commented 5 years ago

@MaybeShewill-CV 我也不知道问题出在哪里,还在找,希望能给我指导下。我按原来的learning rate训练会出先NAN,然后减小learning rate接着可以训练,但是accuracy到0.5左右的时候还是会出现NAN(试了几次),learning rate调大调小都没用。我确认了数据集的标签制作没有问题,binary的是0,255; instance的是20,70,120,170,220,而且没有negative的数据。 谢谢! 这是中间出来的图: image binary: binary_seg_img embedding: embedding

fayechou commented 5 years ago

@MaybeShewill-CV 按出现NAN时候的Weight, test一组数据出来的效果也给你看看: 1 12

MaybeShewill-CV commented 5 years ago

@fayechou 你使用的tensorflow版本是什么?

fayechou commented 5 years ago

@MaybeShewill-CV

zh@zh-H81M-DS2:~$ source activate tensorflow1.1 (tensorflow1.1) zh@zh-H81M-DS2:~$ python -c 'import tensorflow as tf; print(tf.version)' 1.10.0 (tensorflow1.1) zh@zh-H81M-DS2:~$

MaybeShewill-CV commented 5 years ago

@fayechou 使用的是tusimple的数据集?

fayechou commented 5 years ago

@MaybeShewill-CV 是的, train:val = 4:1

MaybeShewill-CV commented 5 years ago

@fayechou 这个问题在我本地得不到复现,我使用这个参数训练过很多次模型都没有出现nan的情况.如果在你的环境中每次都必复现这个问题,首先要排查环境不一致的问题,我的实验环境可以在README上查看,然后你可以调整学习率重新训练看看.由于这个模型训练时使用的batch size并不是很大,所以之后我会使用GN代替原来的BN,这样也有助于模型的快速准确收敛.你也可以再尝试新版本:)

fayechou commented 5 years ago

@MaybeShewill-CV 我查了下我本地环境的tensorflow版本是1.12,0, 刚才是miniconda里面的版本,因为我一直在miniconda里面跑。 这个会有影响吗? screenshot from 2018-12-12 11-51-40

MaybeShewill-CV commented 5 years ago

@fayechou 你可以尝试下在1.10上是不是会出现这个问题.因为不同版本的bn个optimizer都会有微小差异来影响这个训练过程.之前tensorflow 1.3版本上使用原始论文的adam optimizer就经常会遇到nan的问题经常需要手动调参然后finetune,升级tensorflow到1.10之后使用SGD代替adam之后就没有遇到过这个问题了:)

fayechou commented 5 years ago

@MaybeShewill-CV, 好的,多谢,我试下!

MaybeShewill-CV commented 5 years ago

@fayechou I will leave this issue open:)

BDMLLang commented 5 years ago

@MaybeShewill-CV 我也不知道问题出在哪里,还在找,希望能给我指导下。我按原来的learning rate训练会出先NAN,然后减小learning rate接着可以训练,但是accuracy到0.5左右的时候还是会出现NAN(试了几次),learning rate调大调小都没用。我确认了数据集的标签制作没有问题,binary的是0,255; instance的是20,70,120,170,220,而且没有negative的数据。 谢谢! 这是中间出来的图: image binary: binary_seg_img embedding: embedding

请问您方便提供一下,将json文件转换成.png图片的脚本吗?非常感谢

MaybeShewill-CV commented 5 years ago

@BDMLLang 你可以试试这个 https://blog.csdn.net/derteanoo/article/details/82501337 (Ps 我没有验证过哈) 这个json文件的组织形式你可以查看tusimple的README文件

BDMLLang commented 5 years ago

@BDMLLang 你可以试试这个 https://blog.csdn.net/derteanoo/article/details/82501337 (Ps 我没有验证过哈) 这个json文件的组织形式你可以查看tusimple的README文件

感谢您及时回复!

MaybeShewill-CV commented 5 years ago

@BDMLLang 不客气:)

MaybeShewill-CV commented 5 years ago

@fayechou 关于nan的问题你也可以看看 #124 这个issue 尝试一下他提供的解决方案 虽然我训练很多次都没有遇到过这个情况,但是你可以尝试一下:)

fayechou commented 5 years ago

@MaybeShewill-CV 我把本地的环境也改成tensorflow1.10.0了,已经训练了快17个小时,training accuracy 第一次突破了0.7, learning rate没变,也许真是tensorflow 版本的问题,我继续观察。 screenshot from 2018-12-13 11-17-58

MaybeShewill-CV commented 5 years ago

@fayechou 好的,有什么问题可以及时沟通。还有你上次出问题的tensorflow版本是1.12吗:)

fayechou commented 5 years ago

@MaybeShewill-CV 好的,多谢! 我之前都是在conda virtual environment里面跑的,tf 版本是 1.10.0。本地环境安装tf-gpu的时候没有指定版本,自动安装版本1.12.0。 我现在是把本地环境tf 改成了1.10.0, 并且在本地环境上跑,目前来看,没有出现NAN。

MaybeShewill-CV commented 5 years ago

@BDMLLang 我已经上传了生成tusimple训练数据的工具 你可以更新下代码 看看readme生成你需要的tusimple训练数据:)

sc1234qwer commented 5 years ago

@BDMLLang 我已经上传了生成tusimple训练数据的工具 你可以更新下代码 看看readme生成你需要的tusimple训练数据:)

我已经训练了快一天了,才4000多Epoch,1060,6g显卡,batch size=4,LEARNING_RATE = 0.0005,accuracy 0.5左右 这正常吗,还是我没有用上gpu?

BDMLLang commented 5 years ago

@BDMLLang 我已经上传了生成tusimple训练数据的工具 你可以更新下代码 看看readme生成你需要的tusimple训练数据:)

非常感谢您的帮助,我使用您提供的权重去eval模型,使用图森提供的评价准则,我在预测特征图上使用各种曲线去拟合车道线,最后menACC比论文低了10几个点。您是只用了图森去Train的模型吗?我猜测这样的结果,原因在于:1.没有h-net,2.模型往往预测的特征车道线会比label的车道线短一段,或者遮挡时效果较差,不知道使用culane数据或者更大的数据集去train您的模型,会不会得到提升,我准备试一下。

MaybeShewill-CV commented 5 years ago

@sc1234qwer cpu跑的太慢了 多等等吧:)

sc1234qwer commented 5 years ago

@sc1234qwer cpu跑的太慢了 多等等吧:)

我看你用的是GTX-1070,你提供的模型大概训练了多久?

MaybeShewill-CV commented 5 years ago

@BDMLLang 只使用了tusimple的数据集进行训练 这个mean acc的计算受很多因素的影响,比如车道线的宽度,这个宽度受标注的影响,标注的时候这个宽度又是人工设定的。所以我更多关注的是模型能不能完成描述车道线的问题 比如你说的很远的地方车道线会缺失一段其实在实际使用的时候并没有影响 因为相机是连续拍摄的其实只需要在相机附近的车道线可以准确描述就可以了。至于hnet你可以看看前面的issue,这个模型还是不如使用相机姿态生成ipm靠谱(我的个人意见):)

MaybeShewill-CV commented 5 years ago

@sc1234qwer 这个具体时间记不太清楚了

BDMLLang commented 5 years ago

@BDMLLang 只使用了tusimple的数据集进行训练 这个mean acc的计算受很多因素的影响,比如车道线的宽度,这个宽度受标注的影响,标注的时候这个宽度又是人工设定的。所以我更多关注的是模型能不能完成描述车道线的问题 比如你说的很远的地方车道线会缺失一段其实在实际使用的时候并没有影响 因为相机是连续拍摄的其实只需要在相机附近的车道线可以准确描述就可以了。至于hnet你可以看看前面的issue,这个模型还是不如使用相机姿态生成ipm靠谱(我的个人意见):)

谢谢您的建议,您说的‘’这个模型还是不如使用相机姿态生成ipm靠谱(我的个人意见):)‘’是其他的车道线检测方法吗?有没有什么好的paper可以分享一下吗?真的很感激哦。

MaybeShewill-CV commented 5 years ago

@BDMLLang 不是车道线检测 是俯视图变换 这个具体你可以google ipm生成模型的相关文章:)

BDMLLang commented 5 years ago

@BDMLLang 不是车道线检测 是俯视图变换 这个具体你可以google ipm生成模型的相关文章:)

好的,再次感谢!

BDMLLang commented 5 years ago

@BDMLLang 不客气:)

您提供的处理数据生成png的脚本中没有生成val.txt的部分,我准备自己修改一下,一般来说验证集应该占train的百分之多少呢?根据您的经验。谢谢

MaybeShewill-CV commented 5 years ago

@BDMLLang 说明里面写了只会生成train.txt,如果要生成val.txt文件你需要自己从train.txt文件中剪切某几行到val.txt文件。至于比例,你可以自行设置:)

fayechou commented 5 years ago

@MaybeShewill-CV 改成tf 1.10.0后,我现在在Tusimple上没再出现NAN问题了。 不过在自己的dataset上还是有NAN,而且收loss曲线震荡剧烈。请问把L2改成L1有用吗? screenshot from 2018-12-19 13-40-40

MaybeShewill-CV commented 5 years ago

@fayechou 还没有时间实验 你也可以试验下 告诉下大家你的结果哈:)

Ruoqianqian commented 5 years ago

@BDMLLang 只使用了tusimple的数据集进行训练 这个mean acc的计算受很多因素的影响,比如车道线的宽度,这个宽度受标注的影响,标注的时候这个宽度又是人工设定的。所以我更多关注的是模型能不能完成描述车道线的问题 比如你说的很远的地方车道线会缺失一段其实在实际使用的时候并没有影响 因为相机是连续拍摄的其实只需要在相机附近的车道线可以准确描述就可以了。至于hnet你可以看看前面的issue,这个模型还是不如使用相机姿态生成ipm靠谱(我的个人意见):)

您好,请问IPM不是需要知道相机安装高度及角度等信息吗,那么在实际应用场景中是否就不如H-Net这样具有普适性呢?

zhangyuelong commented 5 years ago

您好,请您确认一下现在代码中训练和预测是不是都没有使用lanenet_hnet_model,直接聚类完使用cv2.polylines连线的?

MaybeShewill-CV commented 5 years ago

@zhangyuelong 没有使用hnet

zihao0821 commented 5 years ago

@BDMLLang 只使用了tusimple的数据集进行训练 这个mean acc的计算受很多因素的影响,比如车道线的宽度,这个宽度受标注的影响,标注的时候这个宽度又是人工设定的。所以我更多关注的是模型能不能完成描述车道线的问题 比如你说的很远的地方车道线会缺失一段其实在实际使用的时候并没有影响 因为相机是连续拍摄的其实只需要在相机附近的车道线可以准确描述就可以了。至于hnet你可以看看前面的issue,这个模型还是不如使用相机姿态生成ipm靠谱(我的个人意见):)

看了论文,感觉hnet模型主要是用来处理道路坡度变化(比如本车在一段平路上,但是前面的路是上坡之类),这种情况下ipm是不能完成逆透视变换的。

MaybeShewill-CV commented 5 years ago

@zihao0821 如果你有实时的相机姿态你就可以做逆透视变换啊我觉得:)

zihao0821 commented 5 years ago

@zihao0821 如果你有实时的相机姿态你就可以做逆透视变换啊我觉得:)

不不不,我的意思是,姿态角仅仅是对于车辆(摄像头)位置而言的,但是前面的路倾角可以有变化。 比如从平地变成上坡,就会导致直接透视变换后,两条车道不是平行的。如果我没有理解错的话,hnet训练后可以应对这种情况。 当然对于没有坡度变化的路,还是透视变换更好一点。

MaybeShewill-CV commented 5 years ago

@zihao0821 我说的相机姿态就是相对于大地坐标系的姿态:)

1215363009 commented 5 years ago

2019-06-03 19-36-08屏幕截图 请问这是什么意思,一直没有解决这个问题

MaybeShewill-CV commented 5 years ago

@1215363009 python没有找到对应的包 你可以把整个工程目录添加进PYTHONPATH 具体操作可以自己百度一下:)

1215363009 commented 5 years ago

@MaybeShewill-CV 您好,请问现在这种情况是怎么回事,好像也是路径出了问题。 2019-06-04 00-41-56屏幕截图

MaybeShewill-CV commented 5 years ago

@1215363009 自己仔细看下readme吧:)

LionelLeee commented 5 years ago

@MaybeShewill-CV ValueError: The passed save_path is not a valid checkpoint: ..\model\tusimple_lanenet_vgg\tusimple_lanenet_vgg.ckpt 请问checkpoint里面需要改成什么吗?

MaybeShewill-CV commented 5 years ago

@LionelLeee 不需要

TGLTommy commented 4 years ago

@BDMLLang 您好,大佬,请问你在跑通LaneNet后,如何计算的test数据集上的accuracy, FP, FN,非常感谢 ~ 如果由源码,可否分享一下哈?我的微信号:tommytang930

DonaldRR commented 4 years ago

你的做法和我的一樣,我也是把學習率降低之後就可以訓練了,但是當epoch跑到一定次數之後,仍會有nan的情形出現. 而且accuracy只有在0.5~0.6之間,請問你有這樣的情形嗎? 謝謝!!

你好,我遇到的问题和你的一模一样,请问你解决了吗?是怎么解决的啊?

_Originally posted by @fayechou in https://github.com/MaybeShewill-CV/lanenet-lane-detection/issue_comments#issuecomment-445708580_

我在自己的数据集上训练也出现了一样的问题,然后解决了。 原因:模型里有random crop,当crop完之后的图片没有车道线的时候,instance segmentation loss会算成nan,这是与loss的计算方法有关。 解决办法:可以认为,当图里没有车道线的时候,不进行back prop,设定loss=0。 (例:tf.cond(tf.is_nan(instance_segmentation), lambda : tf.constant(0.), instance_segmentation)