DeepLung复现之路
不得不说最近在这个项目上有所懈怠,最近的事情协调的不太好。
0.配置服务器
准备工作
跟徐博说了一句,从师兄那里要来了服务器。不是很困难,但是卡在了意料之外的地方——Xshell的安装
说来很搞笑,Xshell也下载的很顺利,但是安装的时候没办法把字体文件写入Windows\Fonts
显然我觉得是管理员权限的问题,但是事情并没有意料中的那么简单。花了一下午的时间,没能解决这个问题,只好作罢。最后找了一个解压即用的破解版,算是使上了。
Xshell的设置,或者说服务器的使用,比想象的简单不少。CSDN照葫芦画瓢,很快就可以用了。
基本运行环境
装anaconda 1903时出现WARNING: The conda.compat module is deprecated and will be removed in a future release.
更新conda后问题不再出现。一直担心cuda的版本会在后期引起问题,不过实在不想弄明白了,先用着吧。
装pytorch 没换源,感觉速度好像还行的样子。两遍成功
accident: pycharm 到期了,重新激活很麻烦。完了服务器还坏了两天,hhh
服务器修好了还没过pycharm审核,于是乎转战VSCode. 重配环境,
配置vsc连服务器
感谢CSDN上的前辈们!
遵循「VS Code」如何通过跳板机连接服务器进行远程开发,大致没有问题。
S3.3
中的config不能正确的运行。最开始出问题是我一直不点“continue”[尴尬],后来还是没解决,换了这里的代码,可以连跳板机了,但是在连上跳板机后,连服务器时报错“posix_spawn: No such file or directory”
, 再次CSDN解决。
VSCode一直提醒我git版本过低,最开始以为是本机,也确实不是最新的,但是奇怪的是一直更新不了,挂上tz后直接没反应。后来意识到是服务器的git版本太低,遵循Centos下升级git版本完成了绝大多数操作,版本换成了最新版。问题出在服务器上,最后写入环境变量时一直提示没有权限,要用su才可以。
最终结果:vscode可以直接连服务器,还未测试代码功能,但是已经感觉会比Xshell香了!
代码及数据集准备
这时候遇到了传文件的问题。lrzsz不能传大文件,sftp不太会玩,有跳板机也不好配置,最后用Xftp很轻易的解决了。
记录服务器上的各个库版本备查:
1 |
|
1.预处理与训练
预处理,修改config_training.py的路径后成功运行。因为这里只是想测试,所以只用一个数据集做训练,验证等等。
服务器突然崩了…刷英语去
服务器弄好了,下一步,走detection.
运行代码的时候犯了低级错误,sys.path.append
忘了改,难怪一直nt出不来。
改完之后直接运行,报错缺库,pynvml. 在服务器上直接装上之后,意识到装python 3.68上了,conda里没有。直接conda install
找不到对应的包,通过anaconda search -t conda
解决问题。
继续运行,报错No module named 'base'
。之前一直没解决,现在想来可能是代码里没定义好训练参数导致。最后是用终端直接输入了GitHub里的代码python main.py --model dpn3d26 -b 8 --save-dir dpn3d26/retrft96X/ --epochs 1000 --config config_training
相比起之前学习MNIST,这可以算是自己第一次炼丹了hhh,虽然还是糊里糊涂。
截图留念
2.测试
今天过来跑test。
直接运行readme的代码,报错,内存溢出。RuntimeError: CUDA out of memory.
冥思苦想了很久,改来改去,没什么实际变化。中间学习了一下with no_grad,没改善。
在zyh的提醒下想到去看issue,的确有人提出过这个问题。目前看来是margin和side_len太大,导致图像过大没法儿被处理。在原作者的眼里应该是预处理做的不够好,不过我看大家的意思,可能test部分的代码的确有问题hhh。
修改sidelen = 96
后爆内存问题解决。新问题出现:
splitlist.append(len(data)) AttributeError: 'range' object has no attribute 'append'
类和列表的关系有点没搞明白,暂时没解决。
在class里定义了类型转换,似乎解决了问题。
splitlist = list(range(0,len(data)+1,n_per_run))
elapsed time is 154.83 seconds
下一步测试后处理,改了半天文件路径,遇到的第一个代码上的小问题应该是open csv一直路径错误。琢磨了半天,应该是open指令只能创建文件,不能直接创建文件夹,手动解决。
新问题:Data is not binary and pos_label is not specified
一开始以为是因为进去的list都是float,研究了半天,左改右改,发现是exclusion里面全都是True!
有点迷惑,怀疑是不是前面哪里出问题了,联想到测试的时间和文件夹大小结果有点对不上,或许前面还有问题吧。暂时不想管了,休息一下后面再考虑。
和徐博聊了下,自己也意识到了,可能是训练集和验证集重复的原因,今天跳板机出了点问题,明天来研究。
用subset8做验证集,仍然报错。这时候用代码里训练好的模型跑了一遍,发现npy文件显著的小了(这可能证明我的模型也有一点小问题,随后再来检查)。但是此时上述问题仍然没解决。思来想去,把前面我改的一系列类型转换都改回去,发现这个错误解决了!真·写bug
此时运行出现新问题:IndexError: range object index out of range
换环境暂时没解决
修改eps的范围得到了结果,运行noduleCADEvaluationLUNA16compare时报错ValueError: 'seriesuid' is not in list
检查发现,是生成的dpn26bs32.csv写入没写好,所有数据和标签都写到一栏里面了…
同时发现问题,并不需要跑这个代码,不过这个文件似乎还是得用?有点没理解,累了不想弄了。
跑了下他的csv,可以得图,但是用他的模型训出来的predanno作图出来是空白的,可能是annotations的问题?用自己的模型训出来的predanno更离谱,仍然报not binary的错误,我看了下csv,不知道是不是因为probability全部都是同一个小于0.5的值引起的。至于为什么会这样我仍然不清楚。今天先到此为止
重新训一个resnet的,早上过来发现断掉了,不过有480个eps应该也能用了。跑了一下test,又遇到了内存爆炸的问题,这次是在dataLoader
里面把num_works
改成0. 跑出来测试集,还是有很大的pbb.npy,害。
更大的问题随之而来了: 运行frocwrtdetpepchluna16.py
的时候(连续两次)服务器宕机,怀疑有什么内存问题…不太敢跑了。
用自带模型跑,不报错,0结果。换zyh的试了试,确实能复现他自己的结果。但是把我的csv放到他这里也不行…我有点不明白了。怀疑是annotations的问题,今天改一下试试。
用zyh的代码把annotations文件改完,终于有图了!谢天谢地。不过图特别矮(歪),还要再琢磨下。
记录FROC sensitivity 评价体系
白老师 曲线
r-cnn