首先我要感慨一下linux系统的强大,真的是windows上一堆操作到linux上就一行命令,反正就绝了。自己也真的是蠢极了,前一两天瞎摸索,走了很多的弯路,干了好多蠢事,不列举了。
还好在ZHY大佬的帮助下,顺利完成了服务器的部署训练,并且学习了一些小Tips,在此记录下来,记录并分享自己的学习步骤,也可以供给需要的同学参考~
1.安装miniconda(选择是否安装)
1.1 下载conda(如果已有conda可跳过)
1.2 添加权限
1.3 运行
1.4 编辑.bashrc文件
1.5 启动bashrc
1.6 验证
1.7 创建python3.7的虚拟环境
2.配置基础环境
2.1 解压文件
2.2 配置环境
2.3 安装torchvision和OpenCV
2.4 运行train.py
2.5 PyCharm (Professional)设置SSH远程调试服务器
3. tmux使用
3.1 Tmux 是什么
3.2 Tmux 的作用
3.3 基本用法
1)安装
2) 启动与退出
3)前缀键
3.4 会话管理
1)新建会话
2)分离会话
3)接入会话
4)杀死会话
5)切换会话
6)重命名会话
7)会话快捷键
4. 相关知识补充学习
4.1 调整batch_size测试速度
4.2 查看epoch的精度 避免过拟合
tips:putty记住用户名
本次使用的服务器已经配置了基本的python cuda cudnn,所以并不需要再次配置anaconda,minconda,如果需要下载miniconda可以参考博客:linux服务器虚拟环境部署yolov5 & 训练自己的数据集_Matilda55555的博客-CSDN博客。摘录部分自己用到的记录一下:
wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
chmod 777 Miniconda3-latest-Linux-x86_64.sh
sh Miniconda3-latest-Linux-x86_64.sh
(1)中间会有两个提示,第一个按回车,第二个接受协议输入yes
(2)出现installation finished字样之后,会有提示问你是否要初始化(Do you wish the installer to initialize Miniconda3 by running conda init?[yes | no])输入no
vim ~/.bashrc
在末尾加上export PATH="你的miniconda3路径/bin:"$PATH(没懂怎么操作这步)
source ~/.bashrc
conda
conda create -n 虚拟环境名字 python==3.7
一些关于虚拟环境的常用命令:
下次想要进入这个虚拟环境时:conda activate 虚拟环境名字
切换到其他虚拟环境:conda source activate 其他虚拟环境名字
退出(结束)虚拟环境:conda deactivate
查看都有哪些虚拟环境:conda env list
在配置基础环境之前,提前压缩自己的代码文件,并通过winscp传输给linux端,传输之后,解压该文件。解压前,先创建一个文件夹,再解压。
mkdir fire_dete(文件名)
cd fire_dete
unzip ../yolov5-fire-train.zip(解压文件)
原来配置环境不需要安装很多windows下的软件,只需要一行代码,就可以配置自己代码所需要的环境,(在requirements中已经写好的)服务器中已经包含的环境就可以避免再下载。
pip install -r requirements.txt
安装完成后如下图所示:(warning可以忽略)
linux默认环境(python cuda cudnn)都是有的,Windows默认cuda和python都没有,所以需要anaconda就创建虚拟环境。anaconda还有一个作用就是提供一个相对一致的运行环境,linux默认的环境可能不同服务器,软件版本会有一些差异,anaconda提供一个比较老,但是相对固定的版本,这样对一些对特定版本敏感度程序比较方便,但是yolov5很稳定,基本上哪个版本都可以正常运行,所以在linux上的conda对你几乎没什么作用。
pip3 install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install opencv-python
python train.py
调试代码时,想要远程使用pycharm,可以设置SSH远程调试,pycharm必须是专业版才可以,我这里是community版本,使用方法是在windows端修改保存后,通过winscp传输过去,再运行。记录远程PyCharm (Professional)设置SSH远程调试服务器步骤,参考博客:PyCharm(一)——PyCharm设置SSH远程调试 - mehome - 博客园
命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次"会话"(session) 。
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
一个典型的例子就是,SSH 登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。
为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口。
Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离。
(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
(2) 它可以让新窗口"接入"已经存在的会话。
(3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
(4)它还支持窗口任意的垂直和水平拆分。
类似的终端复用器还有 GNU Screen。Tmux 与它功能相似,但是更易用,也更强大。
先整理一下tmux中在训练中常用到的指令:
tmux 进入tmux界面
python train.py 在tmux中开始训练
ctrl+b挂起 d退出
tmux a再次进入
ctrl+c 停止训练
Tmux 一般需要自己安装。
# Ubuntu 或 Debian $ sudo apt-get install tmux # CentOS 或 Fedora $ sudo yum install tmux # Mac $ brew install tmux
安装完成后,键入tmux
命令,就进入了 Tmux 窗口
$ tmux
上面命令会启动 Tmux 窗口,底部有一个状态栏。状态栏的左侧是窗口信息(编号和名称),右侧是系统信息。
按下Ctrl+d
或者显式输入exit
命令,就可以退出 Tmux 窗口。
$ exit
Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b
,即先按下Ctrl+b
,快捷键才会生效。
举例来说,帮助命令的快捷键是Ctrl+b ?
。它的用法是,在 Tmux 窗口中,先按下Ctrl+b
,再按下?
,就会显示帮助信息。
然后,按下 ESC 键或q
键,就可以退出帮助。
第一个启动的 Tmux 窗口,编号是0
,第二个窗口的编号是1
,以此类推。这些窗口对应的会话,就是 0 号会话、1 号会话。
使用编号区分会话,不太直观,更好的方法是为会话起名。
$ tmux new -s
上面命令新建一个指定名称的会话。
在 Tmux 窗口中,按下Ctrl+b d
或者输入tmux detach
命令,就会将当前会话与窗口分离。
$ tmux detach
上面命令执行后,就会退出当前 Tmux 窗口,但是会话和里面的进程仍然在后台运行。
tmux ls
命令可以查看当前所有的 Tmux 会话。
$ tmux ls # or $ tmux list-session
tmux attach
命令用于重新接入某个已存在的会话。
# 使用会话编号 $ tmux attach -t 0 # 使用会话名称 $ tmux attach -t
tmux kill-session
命令用于杀死某个会话。
# 使用会话编号 $ tmux kill-session -t 0 # 使用会话名称 $ tmux kill-session -t
tmux switch
命令用于切换会话。
# 使用会话编号 $ tmux switch -t 0 # 使用会话名称 $ tmux switch -t
tmux rename-session
命令用于重命名会话。
$ tmux rename-session -t 0
上面命令将0号会话重命名。
下面是一些会话相关的快捷键。
Ctrl+b d
:分离当前会话。Ctrl+b s
:列出所有会话。Ctrl+b $
:重命名当前会话。
batch_size在(4 8 16 32)选一个最优的,改大batch可以提速,就翻倍继续测试,如果不能加速,就用速度最快最小的那个batch。一个epoch的用时为红框中小于号前面和后面的时间之和。
eg.14:45 14:50
eg.11:49
eg.10:07 10:00
每一个epoch中间有精度测试结果,如果精度不变就没必要继续训练下去了,会过拟合。精度如果不变了就可以暂停了,此时生成的.pt即为权重。
epoch0:P:0.737 R:0.641 map0.5:0.683 map0.5~0.95:0.365
epoch2:P:0.783 R:0.697 map0.5:0.752 map0.5~0.95:0.434
epoch4:P:0.825 R:0.753 map0.5:0.807 map0.5~0.95:0.511
epoch8:P:0.855 R:0.796 map0.5:0.848 map0.5~0.95:0.574
epoch10:P:0.851 R:0.816 map0.5:0.855 map0.5~0.95:0.588
epoch12:P:0.872 R:0.814 map0.5:0.863 map0.5~0.95:0.604
epoch14:P:0.886 R:0.802 map0.5:0.864 map0.5~0.95:0.608