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