0 序言

作为一个论文学习的小白,第一次去跑一篇论文代码可谓是下了老大功夫。从一开始的陌生,到现在逐渐熟练,对于如何正确跑通论文代码也有了较为清晰的方法步骤。这段时间跟着学长学习研究论文SNE-RoadSeg,所以接下来我将围绕此篇论文记录第一次跑代码的过程。

一、服务器使用

此前对于服务器概念较为模糊,这次算是正式接触服务器的使用。其实可以把服务器看作远程操作一台可以容纳很多用户的电脑,那么要操作该电脑(比如创建文件、删除文件、跑代码之类的)需要使用终端命令,在之后的学习过程中部分命令需要熟练掌握,不会的可以“面向CSDN”、“面向百度”,以下链接为我学习终端命令时找到的一篇博客,感觉还不错。当然我自己也整理了一些最近常用到的终端命令。

(39条消息) linux常用命令_超级大洋葱的博客-CSDN博客_linux常用命令https://tangxing.blog.csdn.net/article/details/110275929

#注意:conda命令前提是安装了Anaconda

创建环境  conda create -n environment_name python=版本号(如3.7)
删除环境  conda env remove -n environment_name
激活环境  source activate environment_name  /conda activate environment_name
退出环境  conda deactivate
 
安装包                 conda install package
查看已安装包      conda list
更新包                 conda update package
移除包                 conda remove package

看所有的用户                      cat /etc/passwd 或 top
创建用户                             useradd -m -s /bin/bash username 或 sudo useradd -r username
设置密码                             passwd name
删除用户                             userdel name
查看当前已登录用户            w

查看GPU                            nvidia-smi
查看用户文件清单               ls

当然,除了终端可以操作服务器中的文件,也可以使用服务器管理工具,如WinSCP(学长推荐我使用的),可以自行百度并下载安装,安装过程so easy。

那么要如何在服务器上创建普通用户呢?请看下文:

1、登录服务器(可以理解为登录非普通用户的账号),当然服务器的账号密码可能不是谁都知道,要问负责人(就像我问的是实验室会长)。

2、登录成功后,输入创建用户的命令

useradd -m -s /bin/bash username 或 sudo useradd -r username

备注1:最后的“username”根据个人所需来命名,不可以是中文,好像也不能用英文大写(还没研究过这个问题所以不太确定,但是学长是这么跟我说的)

备注2:注意第一种创建命令中的/bin/bash,这部分千万不要在bash后面再加一个/或者其他什么字符,这会导致之后即使用户创建成功输入密码也无法登录,创建完之后可能也会报如下图的警告。

并且当用查看所有用户命令cat /etc/passwd时显示的用户列表中你的用户“与众不同”。

上述为血泪经验!!!

3、创建用户成功后设置用户密码,输入如下命令

passwd username

至此,创建普通用户过程结束。可以使用命令cat /etc/passwd查看你所使用的服务器存在的全部用户,顺便可以借此确认是否创建用户成功。

另外再介绍大家如何用VSCode的终端连接服务器。

1、在VSCode中下载安装插件Remote-SSH

2、下载安装完了之后VSCode界面的左下角会出现蓝色框(如下图所示),点击它;

此时上方会出现如下对话框,选择第二个

然后又会跳出新的对话框,在这个对话框中输入 用户名@服务器ID

之后输入用户密码并按下Eenter键

 下方选择打开文件或文件夹或其他操作,此时就会跳出对话框让你选择你的用户文件夹下的文件夹或文件

选择上方的终端->新建终端

之后就可以像在cmd中一样操作你的服务器啦,而且还可以在VSCode上改完代码后再在下方的终端输入命令跑代码,不需要在终端改代码简直太方便了(在终端改代码超级麻烦,需要用指令进入.py文件,然后再用指令进行编辑,balbala一大堆操作)。

二、环境搭建

要想跑通论文代码需要阅读作者发布在github上的环境要求和操作步骤,即README.md。像我所跑的这篇论文代码要求的环境是Python 3.7, CUDA 10.0, cuDNN 7 和 PyTorch 1.1。

1、安装NVIDA驱动(这个步骤不一定每个人都需要,如果之前有人给所使用的服务器安装过了就不需要再安装,就像我就直接略过这个步骤)。

2、下载并安装CUDA和cuDNN(一定一定一定要注意版本!!!)

【下载】CUDA10.0官网(需要其他版本的自行百度哦)

CUDA Toolkit 10.0 Archive | NVIDIA Developer

【下载】cuDNN 官网(注意下载前需要注册登录cuDNN的版本根据需要进行选择)

cuDNN Archive | NVIDIA Developer

由于版本较多,所以可以用快捷键Ctrl+f搜索关键词找到自己需要的版本定位,像我需要的是cuDNN 7所以我的关键字就搜索7,然后选择for CUDA10.0的版本。

下载之后将它们从Windows系统中将文件移到自己在服务器创建的账号下,可以使用命令行来转移文件(这个方法速度快,操作如下连接);也可以使用WinSCP(前面内容介绍过这是啥)自带的复制粘贴。为什么这么做,是因为我们要在自己的服务器账号上搭建环境,而不是在本机上搭建环境,所以下载的东西必须放在服务器上。

命令行远程复制文件连接
(42条消息) 用scp命令从windows上传文件到linux服务器_小涛大仙的博客-CSDN博客_scp 上传到linuxhttps://blog.csdn.net/weixin_43728814/article/details/120914202?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164225300416780261982893%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164225300416780261982893&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-7-120914202.pc_search_insert_ulrmf&utm_term=windows%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%88%B0%E6%9C%8D%E5%8A%A1%E5%99%A8&spm=1018.2226.3001.4187        文件放好后就可以使用命令来安装CUDA和cuDNN啦!

PS:安装过程部分图片和内容摘自其他博主博客,稍后会附上链接。

【安装】CUDA10.0

mkdir -p local/cuda10.0

# 创建我们cuda10.0解压的文件夹,local是自建文件夹名,可自行更改

./cuda_10.0.130_410.48_linux.run

#斜杠/后面这一串是从官网下载来的CUDA文件名,注意更改

驱动选择no,toolkit选择yes,其他都选择no。路径输入我们刚才的路径,应该要输入绝对路径,/home/username/local/cuda10.0。

过程顺利的话CUDA10.0就安装好啦!如下图所示:

接下里可以用命令进入到它的bin文件夹查看版本号

cd local/cuda9.0/bin/
./nvcc -V

注意到此时查看版本用了./,是因为nvcc这个已经编译好的程序只存在于“local/cuda10.0/bin/”这个当前目录下,并不是全局目录下,如果我们要让我们的程序能够在全局调用得到我们的cuda,我们需要将cuda加入到环境变量里面。所以需要编辑.bashrc这个文件,然后将cuda的目录信息加入到里面,刷新环境变量,这时候我们的cuda就变成全局了。操作如下:

vim ~/.bashrc # ~/是指我们的默认目录,就是我们的home目录

然后按i进入insert模式,到最下面一行,添加配置信息。

# cuda10.0
export PATH=/home/username/local/cuda10.0/bin:$PATH
export LD_LIBRARY_PATH=/home/username/local/cuda10.0/lib64:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/home/username/local/cuda10.0/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/home/username/local/cuda10.0/include:$CPLUS_INCLUDE_PATH

编辑完按:wq保存并退出

之后再在终端输入如下命令行:

source ~/.bashrc #刷新环境变量
nvcc -V # 这时候输入这个就可以查看cuda版本信息了,而不需要加入./

【安装】cuDNN7

终端输入如下命令行:

tar zxvf cudnn-9.0-linux-x64-v7.tgz # 解压,生产的文件夹叫cuda,最后cp(拷贝)完后这个文件夹就可以删掉了;命令的最后一串是从官网下载下的cuDNN的文件名,注意更换
cp cuda/include/cudnn.h local/cuda10.0/include/
cp -a cuda/lib64/* local/cuda10.0/lib64/

我在安装CUDA10.0时遇到的三个问题(这三个问题并不是所有人都会遇到):

问题1:安装CUDA时没有可执行的权限

解决: 需要登入服务器主用户账号,用命令chmod  777 filename

问题2:在安装过程中会出现 白底色+More0% 这样的字符串,并一直停留在这行
解决:按Ctrl+c即可

问题3:安装过程中回答完如下问题后就报错了

解决:出现这个问题的原因是gcc版本不匹配。由于实验室的服务器的操作系统是Ubuntu20.04,儿Ubuntu20.04自带的gcc版本为9.7.0,需要添加gcc7才可安装CUDA10.0。因此需要输入命令为gcc降级,具体操作如下(为其他博主博客内容的摘抄,稍后附上链接),注意下面的命令需要进入服务器的主用户账号,而不是自己的普通用户。

降级过程截图:

至此,CUDA10.0和cuDNN 7都配置成功啦!再次提醒大家配置环境一定要根据自己的需求下载版本,不可盲目照抄所述步骤,并注意命令行中涉及到的文件名和用户名也是需要根据自己的命名来修改,而不是简单的copy就完事了哦!安装CUDA和cuDNN以及降级gcc的参考博客如下:

(39条消息) 深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)_Zebiao Wu Blog-CSDN博客https://blog.csdn.net/Wuzebiao2016/article/details/87886356(39条消息) Ubuntu20.04安装cuda10.1_wwlswj的博客-CSDN博客_ubuntu20安装cuda10https://blog.csdn.net/wwlswj/article/details/106364094

3、下载并安装Anaconda3

【下载】Anaconda下载网站(根据自己需要选择)

Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

【安装】输入如下命令

sh Anaconda3-5.0.0-Linux-x86_64.sh #后面是下载来的Anaconda3文件名,自行修改

安装过程中回答问题都输入yes,安装成功后,在终端输入python或python3验证安装是否成功(注意Anaconda会自带Python版本),如果显示Anaconda相关信息以及Python版本号就说明安装成功,如下图所示。

4、安装Python3.7和Pytorch1.1

由于不同的论文代码使用的Python版本、Pytorch版本、Tensorflow版本或者包都会有所不同,所以最好建立虚拟环境,不要在base环境下跑代码,这样一来方面管理,二来跑不同的代码不会造成环境干扰。建立完虚拟环境后,都需要激活才能使用虚拟环境,否则都是在base环境下。

①建立Python3.7的虚拟环境

conda create -n environment_name python=3.7

#environment_name自定义,即可以为自己的虚拟环境命名

②激活虚拟环境

source activate environment_name  或 conda activate environment_name

③虚拟环境下安装Pytorch1.1

Pytorch下载官网

Previous PyTorch Versions | PyTorch

根据自己的需要下载对应版本

把框起来的那句copy到终端即可,可以把后面的-c pytorch删除

conda install pytorch==1.1.0 torchvision==0.3.0 cudatoolkit=10.0

至此,我所需要的跑代码的环境(CUDA10.0,cuDNN 7,Python3.7,Pytorch1.1)全部配置完。

三、数据集下载

根据作者发布在github上的操作步骤下载对应的数据集,并将数据集放在正确的路径之下。

路径(即文件的放置顺序和情况):

SNE-RoadSeg
 |-- checkpoints
 |  |-- kitti
 |  |  |-- kitti_net_RoadSeg.pth
 |-- data
 |-- datasets
 |  |-- kitti
 |  |  |-- training
 |  |  |  |-- calib
 |  |  |  |-- depth_u16
 |  |  |  |-- gt_image_2
 |  |  |  |-- image_2
 |  |  |-- validation
 |  |  |  |-- calib
 |  |  |  |-- depth_u16
 |  |  |  |-- gt_image_2
 |  |  |  |-- image_2
 |  |  |-- testing
 |  |  |  |-- calib
 |  |  |  |-- depth_u16
 |  |  |  |-- image_2
 |-- examples
 ...

数据集下载说明:

四、跑代码

1、跑脚本run_example.sh

bash ./scripts/run_example.sh

跑成功的话,有三种图片normal.png,pred.png和prob_map.png会出现在examples文件夹中。

此外,终端也会显示跑代码的过程。

2、跑脚本test.sh

bash ./scripts/test.sh

跑成功的话,会有新的文件夹testresults出现。

此外,终端也会显示跑代码的过程。

3、跑脚本train.sh

bash ./scripts/train.sh

跑成功的话,会有新的runs文件夹同时checkpoints文件夹会有新的权重文件。

我在跑train.sh这个脚本时候出现了两个问题:

1、显存不够

解决: ①将options文件夹里的base_options.py中的batchsize把2改为1。

②重开ssh或者重启电脑再开ssh,我也不知道为啥这样可以。

参考博客:(41条消息) 解决:RuntimeError: CUDA out of memory. Tried to allocate 128.00 MiB (GPU 0; 2.00 GiB total capacity; 1_地中海の养成记-CSDN博客https://blog.csdn.net/weixin_43760844/article/details/113462431

①改代码:不计算梯度/调整batch size

②更换更高性能更高显存的显卡

2、AttributeError:'NoneTypr' object has no attribute 'astype'

可能是图片路径不对(我认为这个问题最难解决,主要是我不知道从哪里下手解决)

kitti_dataset.py中的第112行表示读取图片并将其转换为float32,但是却报错了没有astype。这个问题说明图片没有读取成功,既然没有读取成功也就没有astype,没有astype也就无法转换。所以关键是为什么图片没有读取成功,而没有读取成功的原因可能就是前面说的图片路径不对。如果真的是路径不对的问题,那么我想知道为什么会有图片路径不对的问题出现。

可以注意到报错内容的最上面几行有WARN,说can't open/read file:check file path/integrity,并根据前面提示的路径去找图片,发现根本找不到。因为datasets的depth_u16文件中的图片都放在testing和training文件中,而报错的信息提示这些图片要直接在depth_16文件中,即把testing或training中的图片都复制在depth_u16文件中,重新跑一遍代码,成功!虽然WARN只提示了3张图片,但提示中还给出了警告的代码,即train.py的第101行,这是一个循环,说明是通过循环读取了所有图片,不只是提示的000000.png、000001.png、000002.png。

其实我很早就发现了这个问题所在,但是问了学长,学长说不是,而是通过加一行代码解决,我就懵圈了。后来学长帮我看了之后,他让我加了一行代码(应该就是他之前说的那行代码),打印出图片路径,找到了问题所在,也就是我之前就注意到的问题。好家伙,所以学长加的代码只是一个辅助的,并不是我理解的通过加一行代码直接解决,哈哈哈哈。

历经千辛万苦终于跑通了!

但由于跑通这个脚本需要两三天,如果这期间电脑关机了或者网络断开了任务就会被终止,前面代码就白跑了,所以需要将代码挂载到screen跑,这样即使电脑关机了代码还会在服务器跑,自己就可以开开心心去玩耍啦!下面附上screen的介绍和使用方法:
(40条消息) screen 远程服务器 关掉本地也可以跑代码_白雪-CSDN博客https://blog.csdn.net/qq_36654309/article/details/112219194

1、ssh连接到服务器

2、输入命令创建新窗口:screen -S 窗口名  #窗口名自定义

3、cd切换路径到需要跑代码的文件,例 cd /home/wendy/SNE-RoadSeg-Master

4、激活之前为了跑代码创建的虚拟环境

5、命令行运行代码

6、Ctrl+a+d退出screen,这样即使关掉cmd窗口/关机代码还会继续在服务器中跑

//后面操作为查看操作哦

7、命令查看自己所有screen:screen -ls

8、查看后会看到(Detached)或(Attached);Detached意思是当前screen没有被打开,相对的是Attached表示当前screen正处在打开状态

9、重新打开创建好的窗口可以看到程序运行状态:screen -r 窗口名

10、命令删除窗口:screen -X -S 窗口名

【注意】重新打开screen窗口的时候可能会报错There is no screen to be resumed matching,解决方法:首先使用screen -d *****(id),先退出,然后再使用 screen -r *****(id)重新连接

参考博客:

(40条消息) 使用screen恢复会话时出现There is no screen to be resumed matching错误解决办法_wavehaha的博客-CSDN博客https://blog.csdn.net/wavehaha/article/details/114969535

跑完train.sh最终结果

五、总结

第一次跑论文代码可谓是辛酸史,一共用了两台服务器才跑成功:好不容易花了一天时间在第一台服务器中搭建好环境,结果第二题跑了一天代码、解决了一天bug才发现这台服务器不好跑这个代码,于是学长让我换一台服务器。在另外一台服务器中又要重新建立用户,与用第一台服务器由实验室同学帮我建立用户不同的是,这次我得亲自动手建立用户,还得顺便帮学长也建立一个。新建用户过程也不顺利,由于我输入错创建命令,多了一个/,导致始终无法登录用户,在删除这个错误的用户过程中花了很多时间,奇葩的是意识到问题出在哪里后学长的账户分分钟创建好,拿自己先开刀属于是,笑cry。建立完了之后又得重新搭建环境,好在有了第一次的经验,第二次搭建环境就顺利多了,速度也快了很多。第二次搭建完环境后,终于又到了跑代码环节,论文中的前两个脚本跑得很顺利,超级开心,没出bug,结果到了第三个train.sh脚本又出现了我现在不太能解决的问题,困扰了很久。

怎么说呢,这次跑代码得到了很多锻炼,比如服务器新建用户还有在服务器搭环境,也知道了跑一篇论文代码的过程,不像以前听起来那么抽象了。

希望自己继续冲冲冲!!!

【论文学习之SNE-RoadSeg】跑通SNE-RoadSeg代码相关推荐

  1. colab跑通YOLOV3SPP(代码来自霹雳巴拉WZ)

    记录以下,方便日后学习 1)下载码源 !git clone https://github.com/WZMIAOMIAO/deep-learning-for-image-processing.git 2 ...

  2. YOLO学习01(跑通yolov5尝试)

    目录 一.前期理论学习 二.使用YOLO(复现yolov5) 1.环境搭建 2.认识YOLO代码中的文件并简单运行(detect.py) 3.模型训练(train.py) 一.前期理论学习 绘制思维导 ...

  3. 13个月才跑通GitHub模型,机器学习科研入门太难了吧

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI & ...

  4. 本科生搞AI在线崩溃:3个月才跑通GitHub模型,机器学习科研入门太难了吧

    金磊 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI "机器学习,太难了!" "3个月才跑通GitHub模型代码,要崩溃了!" "还要跟博 ...

  5. win10 安装并跑通 mmdetection

    前言:实际项目中还是建议用服务器以及好的显卡.这里我是在自己电脑上(Windows10)一些简单调的实验,之前一直在Linux上跑,也不是第一次了,但这次用windows跑mmdetection还是踩 ...

  6. 111个Python数据分析实战项目,代码已跑通,数据可下载

    写在前面: 这里整理了111个数据分析的案例,每一个都进行了严格的筛选,筛选标准如下: 1. 有干货:杜绝纯可视化.统计性分析,有一定比例的讲解性文字 2. 可跑通:所有代码均经过测试,(大概率)可以 ...

  7. 第一次学习计划(含用pytorch跑通mnist例子)

    1.上网查资料明确人工智能(AI).机器学习.深度学习这三个概念,以及相互包含关系. 答: (1) 概念: 人工智能:人工智能是研究.开发用于模拟.延伸和扩展人的智能的理论.方法.技术及应用系统的一门 ...

  8. 《2019-刘宏伟-单通道超材料孔径雷达成像算法研究》论文学习

    2019-刘宏伟-单通道超材料孔径雷达成像算法研究 cytosineXT 2022.7论文学习 论文主要内容 研究重点:基于超材料孔径天线的计算成像系统 体制构成:单通道收发实孔径成像系统 成像原理: ...

  9. 《深度学习之pytorch实战计算机视觉》第8章 图像风格迁移实战(代码可跑通)

    上一章<深度学习之pytorch实战计算机视觉>第7章 迁移学习(代码可跑通)介绍了迁移学习.本章将完成一个有趣的应用,基于卷积神经网络实现图像风格迁移(Style Transfer).和 ...

  10. 深度学习之初识篇——小白也能跑通的深度学习万能框架【交通标识牌检测】

    目录 环境下载:点击即可 数据集下载:点击即可 深度学习环境配置 点击下载深度学习环境 数据集准备 使用自己标注的数据集 使用标注软件 数据准备 VOC标签格式转yolo格式并划分训练集和测试集 部署 ...

最新文章

  1. 离不开深度学习的自动驾驶
  2. 【Python】调用百度云API文字识别服务 OCR
  3. dockerfile构建镜像的命令_编写Dockerfile的最佳实践
  4. java控制cmd导出dmp文件_cmd的操作命令导出导入.dmp文件
  5. python基础-字典的增删改查
  6. 程序猿的骄傲,以及骄傲背后真实的原因
  7. 利用 Composer 一步一步构建自己的 PHP 框架(四)——使用 ORM
  8. MyBatis→优缺点、select延迟加载、接口式MyBatis编程、一级缓存、二级缓存、集成Redis自定义缓存、Log4j
  9. 奔着政府补贴:野蛮生长的机器人产业或跳进去一家死一家
  10. 编写一个java程序在屏幕上输出,编写一个Java程序在屏幕上输出“This is java!”。...
  11. linux信号基本概念及如何产生信号
  12. ajax获取modelandview,如何使用js获取ModelAndView值
  13. Pymol中如何显示stick+cartoon+surface
  14. 初学博科YIGO2.0学习心得--下推
  15. “卖给我一支笔”:乔布斯会如何应对这个经典问题?
  16. 【gym 101991 E】(ACPC 2018) E. Exciting Menus 题解
  17. 正交投影变换与透视投影
  18. 什么是ICP,怎么办理
  19. 拥抱人工智能,从机器学习开始
  20. MongoDB数据库批量更新

热门文章

  1. bugku——蹭网先解开密码(EWSA,hashcat破解wifi握手包)
  2. 腾讯业务架构:六大事业群
  3. 谈谈教学视频加密、防录屏的方法
  4. linux的QQ安装在哪个文件夹,linux安装QQ
  5. 2009年9月手机搜索热门关键词排行榜
  6. Rainmeter天气不能更新、win地图不能检测定位
  7. 树莓派chromium-os系统发布
  8. 常见移动端兼容性问题
  9. dpp-enrollee配网
  10. mybatis批量更新报错问题解决