晚上睡前一定要注册好QE,注册完写在这一句的后面。
一、color the grountruth
虽然anaconda安装不好,但是我直接把代码放在linux上面跑,没有报错需要安装包之类的。
cc2的给groundtruth上色的代码在119和131行报错了。报错原因均是和二维转化成三维相关的。我直接把第三维删掉了,这样三维数组就变成了二维的了。
跑代码的时候注意事项记录如下:
(1)crop这个文件夹存储png格式的原图,注意命名:z0001,z0002之类的;
(2)添加颜色的txt文件放在主文件夹下;
(3)然后结果是tif格式的文件,存储在color_coded_out文件夹内;
(4)运行函数CC2(x,y,z)这里的x,y,z分别填图像的维度。比如我是1024*1024*1.
(5)我其实是一张一张跑的,比如放z00001,然后出一张结果;再覆盖掉,换成新的z0001,再出一张结果。
顺利完成(yeah~)
其实睡饱了还是很重要的,感觉比周六调试了一整天的效率都高。
二、把python downgrade 到3.6版本
参考网站:
http://chris35wills.github.io/conda_python_version/
步骤记录如下:
1、在terminal的命令行里输入: conda search python
查看目前服务器里已经安装了的python版本;
2、比如我要安装python 3.6.7,我需要在服务器里输入:
conda install python=3.6.7
中间要回来点一下yes or no的yes.
然后python就变成了3.6.7的版本了。
三、跑xxcyclegan的代码
带nohup的命令行如下:
CUDA_VISIBLE_DEVICES=0 nohup python train.py --dataroot ./datasets/cell3 --name cell3_spcyclegan --model cycle_lo_seg --no_dropout --which_model_netG resnet_9blocks --display_id 2 --display_port 8889 --input_nc 1 --output_nc 1 --phase train --identity 0 >log_file/biospy.out &
我先跑不带nohup的命令行:
CUDA_VISIBLE_DEVICES=0 python train.py --dataroot ./datasets/cell3 --name cell3_spcyclegan --model cycle_lo_seg --no_dropout --which_model_netG resnet_9blocks --display_id 2 --display_port 8889 --input_nc 1 --output_nc 1 --phase train --identity 0 >log_file/biospy.out
我感觉要安装一些包。你看缺啥包,就安装啥包吧。
然后注意数据的多样性,之前放的数据其实可能不大行的。
遇到问题1:缺dominate包
pip install dominate
遇到问题2:CUDA driver version is insufficient for CUDA runtime version
所以还是需要把包放到学长跑代码的服务器下面去跑。
我先在学长的服务器上安装anaconda,然后再找着上面的方法downgrade。
这个服务器是蓝色的服务器。
参考自己之前的文章:(1-3)Windows系统连接Linux远程服务器并把Python程序传到远程服务器上运行
继续在新的服务器上跑命令行:
CUDA_VISIBLE_DEVICES=0 python train.py --dataroot ./datasets/cell3 --name cell3_spcyclegan --model cycle_lo_seg --no_dropout --which_model_netG resnet_9blocks --display_id 2 --display_port 8889 --input_nc 1 --output_nc 1 --phase train --identity 0 >log_file/biospy.out
发现pytorch也没有在新的机器上安装。
依旧是参考1月3号的方法:conda install pytorch torchvision -c pytorch
遇到问题3:
报错如下: <urllib3.connection.HTTPConnection object at 0x7fa44ca31c50>: Failed to establish a new connection: [Errno 111] Connection refused
有人遇到过类似的问题的。
询问学长之后,记录如下:
(1)因为我的命令行的原因,所以日志文件是存在bioscpy.out里的,即使没有nohup,在terminal显示的也不是原始文件。
(2)学长能在服务器上直接编辑python文件,我都是在外面编辑好,然后通过winscp扔进来。学习学长的这种方法
(3)学长看到了这一行:ERROR:visdom:[Errno 111] Connection refused
所以他让我查visdom的相关内容,问题就会变得很好解决了。
(4)这个命令行里有display的内容,需要在文件夹里建立public_html,这样才可能在外部display.
参考网站:
https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix/issues/24
当我输入:
python -m visdom.server
屏幕上跳出来:
Checking for scripts.
It's Alive!
INFO:root:Application Started
You can navigate to http://localhost:8097
跳出来这一段的时候我可激动了
所以这里我也要把端口号改掉咯~~
CUDA_VISIBLE_DEVICES=0 python train.py --dataroot ./datasets/cell3 --name cell3_spcyclegan --model cycle_lo_seg --no_dropout --which_model_netG resnet_9blocks --display_id 2 --display_port 8097 --input_nc 1 --output_nc 1 --phase train --identity 0 >log_file/biospy.out
然后我需要查visdom的内容,visdom是pytorch的可视化神器,类似tensorflow的tensorboard那样。
具体介绍参考这里:
https://zhuanlan.zhihu.com/p/32025746
遇到问题4:我输入visdom的启动命令行之后,就卡在那里了。
此外,端口号是在linux上面,肯定不能在window上打开去看。那么如何打开那个可视化页面呢?
刚刚问了hans,需要查的内容是:ssh visdom
其次需要查screen代码。他说需要再开一个窗口,才能输入新的命令行。
解决办法4-1:
远程连接visdom的问题
参考连接:https://blog.csdn.net/RhineYu/article/details/79947745
描述:“在服务器上开启jupyter notebook,或者TensorBoard,或者visdom服务时,会给出一个IP地址和端口号,可以在浏览器中运行。但是我在本地浏览器中输入这个地址并不能连接服务。”
“通过Google及Stack Overflow,找到解决方案,原因在于本地访问服务器应用需要建立SSH通道,SSH端口转发需要SSH连接,而SSH连接是有方向的,从SSH Client到SSH Server。而我们所要访问的应用也是有方向的,应用连接的方向也是从应用的Client端连接到应用的Server端。比如我们要访问服务器上的Web站点时,HTTP应用的方向就是我们这台主机(Client)到服务器(Server)。
我们这个问题中,开启jupyter notebook,TensorBoard,或是visdom,都属于本地转发(Local Forward),即SSH连接和应用的连接这两个连接的方向一致。具体解决方法是在本地终端建立SSH通道”

vis = visdom.Visdom(env='model_1')
截图里的代码不对的,少了一个d。
输入前三行代码之后报错:“address already in use”
原因是hans帮我放到后台跑的吧。我查一下后台的程序。
查看后台运行进程的代码是:jobs -l,但是后台没有正在跑的进程呀。
我现在在自己的电脑上输入127.0.0.1:8097,出现了visdom的界面了。(开心)
解决办法4-2
screen这个命令具体理解:
参考网址:http://www.runoob.com/linux/linux-comm-screen.html
另一个参考网址:https://www.ibm.com/developerworks/cn/linux/l-cn-screen/index.html
我觉得第二个网址更加详细。
总体操作方法:
1、输入 ssh -L 端口名称 登录的用户名
2、其实我发现直接可以在浏览器中打开这个端口了,可能这个原因,当我输入:
python3 -m visdom.server的时候,才会报错:“address already in use”
地址被占用的解决办法:
参考网址:https://gauravsohoni.wordpress.com/2015/09/17/address-already-in-use-errors-find-and-kill-process/
先在命令行中输入:lsof -i tcp:8097,其中8097是端口号。
This should list pids for applications using port 3000. Once you have the pid you can kill the process with kill command
用以下命令结束这个pid:
kill -9 <PID> #where <PID> is the process id returned by lsof
这时候再输入:lsof -i tcp:8097,就没有内容返回了。同时网页也打不开了。
这时候再输入:python3 -m visdom.server,就没有报错:端口被占用了。
3、对sreen的尝试:
先输入screen,再activate可视化窗口,再sreen回去(ctrl+a+d)
这个方法可以!
在screen回去的界面运行命令行,没有报错visdom相关的错误了。
遇到问题5:
报错IndexError: invalid index of a 0-dim tensor. Use tensor.item() to convert a 0-dim tensor to a Python number
解决办法:https://github.com/NVIDIA/flownet2-pytorch/issues/113
至少不是代码内部的错误,是版本的错误,所以我需要自己改代码的版本。
我先把旧版本back up一下,取名为。。。。——backup,然后再改新的代码。
解决办法:
That's because in PyTorch>=0.5, the index of 0-dim tensor is invalid. The master branch is designed for PyTorch 0.4.1, `loss_val.data[0]` works well.
Try to change
total_loss += loss_val.data[0]
loss_values = [v.data[0] for v in losses]
to
total_loss += loss_val.data
loss_values = [v.data for v in losses]
might fix the problem.
需要改的代码位于:cycle_lo_seg_model.py的self.backward_G()这个函数里。
我删掉了代码第150行和151行的【0】,也删掉了194~199行的【0】
也删掉了代码126和131行的【0】
解决了这个报错。
遇到问题6:报错:TypeError: Object of type 'Tensor' is not JSON serializable
还是pythorch版本的问题:
https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix/issues/258
这里建议是安装版本pytorch0.3.1
参考这篇文章:所以我需要安装pytoch0.3.0,并且把问题5改过来的地方改回去。就是还是用back up的代码跑。
尝试解决办法:
卸载掉当前的pytorch,然后安装0.3.0版本的pytorch
参考网址:https://ptorch.com/news/37.html
这篇文章讲的很详细,怎么卸载,怎么安装特定版本的pytorch,怎么查看当前pytorch版本。都写得很详细。
具体做法:
1、输入 pip uninstall torch
然后这时候python,再输入 import torch,就显示:找不到模块了。
这样说明卸载成功
2、尝试这个命令行:pip install pytorch==0.3.10
但是安装失败。
我谷歌如下关键词:“downgrade pytorch to 0.3”
有不少人问一样的问题呢,哈哈
我在这个网站上找到了合适的解决办法:https://discuss.pytorch.org/t/how-to-switch-to-older-version-of-pytorch/19656
命令行如下:conda install -c pytorch pytorch=0.3.1
用conda而不是用pip安装
趁它在安装的时候,我把遇到问题5改过的代码改回去(就是把原来的程序丢进来。)
其实它安装的时候我心惊胆战的,生怕什么时候又报错了。
应该不会的,反正万一报错了,实验室里也有人可以问。
安装成功。
3、测试pytorch版本
输入代码如下:

成功解决。
然后我继续跑代码吧。
遇到问题7:找不到no-blocking这个参数
哦哦这时候同步异步那里要改回来了。就是2月18号改的那些地方要改回来
就改第85和86行就可以了,在notepad上改完丢进服务器。
好像可以顺利跑起来了。在log_file文件夹里,从最下面可以看到,日志的行数是不断增加的,说明跑起来了。
终于开始跑了
呜呜呜好激动,过了这么多天,终于跑起来了。
摘自log_file:
(epoch: 2, iters: 72, time: 0.800) D_A: 0.139 G_A: 0.280 Cyc_A: 0.253 D_B: 0.294 G_B: 0.348 Cyc_B: 0.862 location: 0.137 total: 1.880
End of epoch 2 / 200 Time Taken: 77 sec
learning rate = 0.0002000
总结:
1、用到的命令行如下:
CUDA_VISIBLE_DEVICES=0 python train.py --dataroot ./datasets/cell3 --name cell3_spcyclegan --model cycle_lo_seg --no_dropout --which_model_netG resnet_9blocks --display_id 2 --display_port 8097 --input_nc 1 --output_nc 1 --phase train --identity 0 >log_file/cell3.out
2、版本:
python3.6.7
pytorch 0.3.1(通过conda安装)
这个事例深刻地显示了运行环境的重要性!
四、改数据集,增加数据集的多样性
先观察自己的数据集差在哪里,然后找解决办法。
1是照片不够多;
2是照片几乎来自同几张图片。
我需要做的事情是:回到数据扩增部分,拿编号1-13张原图进行数据扩增,然后拿编号14-15张原图进行测试。
我放256张图吧。如果不够我再增加图。我感觉像原来那样放128张图应该是不够的。
这时候学校的网络不行了。
我直接开始画groundtruth吧
五、画10张individual图的groundtruth
中午遇到的问题是:注意这里的overall label capacity,最好调成50,如果调得更低一点,label的颜色就显示不出来了。

网友评论