文章目录
安装服务器pytorch
查看服务器环境CUDA版本
# 查看Linux系统信息
uname -a
# 查看Linux当前运行的内核版本
cat /proc/version
# 查看Linux发行版本(下面两行命令任选其一)
cat /etc/issue
lsb_release -a
# 查看Linux系统安装的CUDA版本(下面两行命令任选其一)
cat /usr/local/cuda/version.txt
nvcc -V
安装pytorch
# 安装pytorch版本1.2.0,torchvision版本0.4.0,上文查看CUDA版本为10.0
conda install pytorch==1.2.0 torchvision==0.4.0 cudatoolkit=10.0 -c pytorch
【注
】运行源码前,需要从源码下载网站/源码附带说明文件“ReadMe.txt”中,获取代码运行环境要求及版本号说明等信息,防止实验中途出现版本不兼容等系统性问题。
运行源码
运行demo代码
安装所缺模块包:matplotlib
、scipy
、sklearn
,
然后运行代码:python Run.py
,
出现报错。
【报错】:FileNotFoundError: [Errno 2] No such file or directory: ‘/home/jgao/Recent/OTB100’
运行另一个demo代码
安装所缺模块包:trax
,
然后运行代码:python python_RLS_RTMDNet.py
,
出现报错。
【报错】AttributeError: module ‘trax’ has no attribute ‘Region’
DEBUG:
(1)检查xxx.py文件间是否有import xxx冲突(即相互import): ——检查无冲突
(2)查找“trax”安装路径:pip show trax
(3)查询“trax”所含函数包(确认trax版本已最新): ——没有trax.Region函数
python
>>> help() # 进入python帮助页面
help> modules
help> mudules trax
# 或者
python
>>> import trax
>>> help(trax.Region)
Debug无果,猜测是trax版本过新,函数名有更改。
确定源码中各个.py
文件的作用:
train_mrcnn.py
:用于训练
python_RLS_RTMDNet.py
:用于测试VOT数据集
Run.py
:用于测试LSOTB数据集
运行源代码需要修改大部分路径变量,本实验主要训练LSOTB数据集,需要修改初始默认参数等。
运行训练代码
修改错误代码 & 修改默认数据集LSOTB & 修改默认训练数据集路径,
然后运行代码:python train_mecnn.py
出现报错。
【报错】AttributeError: module ‘dict’ has no attribute ‘iteritems’
DEBUG:Python3.5以上版本需要将iteritems
改为items
【报错】FileNotFoundError: [Errno 2] No such file or directory: ‘./models/imagenet-vgg-m.mat’
DEBUG:
init_model_path
:初始化模型文件,不存在,
model_path
:训练后模型参数保存路径,存在,
可以将init_model_path
设置为model_path
,作者的数据集训练后的模型参数可以直接拿来做本实验数据集的模型初始化参数,不影响训练过程及结果。
【报错】UserWarning: Legacy autograd function with non-static forward method is deprecated and will be removed in 1.3. Please use new-style autograd function with static forward method. (Example:https://pytorch.org/docs/stable/autograd.html#torch.autograd.Function)
DEBUG:警告信息,不影响程序运行。
(1)在运行过程中强行终止命令:在终端界面Ctrl+C
(2)修改代码,关闭警告提示:
import warning
warning.filterwarnings("ignore")
MobaXterm后台运行
1. nohup 法
(1)执行后代码放在服务器后台运行,终端不显示输出结果,所有运行结果会打印在nohup.out文件中
nohup python -u xxx.py
【报错】nohup: 忽略输入并把输出追加到’nohup.out’
DEBUG:修改命令,指定输出日志文件名称(详情点击这里)
nohup python -u xxx.py >> yyy_log.txt 2>&1 &
(2)若想在终端打印日志文件,以便实时查看最近输出:(nohup、&、tail的详情点击这里)
tail -f yyy_log.txt
(3)nohup任务后台挂起冲突问题:第二个nohup执行后会自动kill前一个: 【服务器内存分区】【nohup线程相关】
【原因】:在mobaXterm终端分别前往两个项目工作列表,再分别nohup,则会出现工作列表不一致的冲突,同样会在开启第二个挂起任务时自动kill前一个。
【解决】:在pycharm软件内开启两个项目窗口,在各自的terminal窗口执行nohup命令,即可解决工作列表不一致的问题。且不能频繁查看nvidia-smi,否则也会使对应工作列表下的任务kill。可以到mobaXterm上的终端进行查看nvidia-smi。
2. screen 法
(1)screen -S xxx
:创建新窗口,且命名为$screen -S xxx,执行上述命令后自动跳转到xxx窗口,快捷键Ctrl+A+D断开新窗口,回到连接会话界面,显示:
[detached from xxxid.xxx]user@ubuntu-Super-Server:~/code$
这个断开只表示不显示新窗口,该窗口对应的任务还在后台运行。
其中的xxxid
表示该运行程序在显卡上的ID序号。
(2)screen -S ls
:查看已创建的所有窗口,显示:
user@ubuntu-Super-Server:~/code$ screen -ls
There are screens on: 28475.ssd (2017年11月27日 20时07分41秒) (Detached) 28113.yolo (2017年11月27日 19时57分26秒) (Detached)
(3)screen -r xxx
:重新连接到xxx窗口,并显示其运行过程
(4)kill xxxid
:终止xxx窗口对应任务的运行,同时杀死该窗口
有关显卡
-
nvidia-smi
:查看显卡信息:
其中,PID
表示运行的任务标号,程序代码在首次被执行时终端输出显示:
-
top -p PID
:查看特定运行程序的详细信息:
-
CUDA_VISIBLE_DEVICES=显卡id
:指定程序运行的显卡号(在代码内添加)
同步&实验
vscode连接服务器
pytorch安装及使用
- 创建独立的pytorch盒子,假设命名为
pytorch_3.7
:(规定pytorch环境内默认python版本为3.7 )
conda create -n pytorch_3.7 python=3.7
- 在该环境下安装模块包:(进入环境后pip install xxx等操作)
conda activate pytorch_3.7
- pytorch中文官方文档 :【链接】
- pytorch常用函数讲解:【链接】
nn.Sequnential()
:一个有序的容器,神经网络模块将按照在传入构造器的顺序依次被添加到计算图中执行,同时以神经网络模块为元素的有序字典也可以作为传入参数。【链接】nn.module()
:模块常用命令&模型 :【链接】【自定义网络层】BatchNorm1d
,BatchNorm2d
,BatchNorm3d
:【链接】- 如何设置
cudnn.benchmark
=True
orFalse
:总的来说,大部分情况下,设置这个 flag 可以让内置的 cuDNN 的 auto-tuner 自动寻找最适合当前配置的高效算法,来达到优化运行效率的问题。一般来讲,应该遵循以下准则:【链接】
(1)如果网络的输入数据维度或类型上变化不大,设置为True
可以增加运行效率;
(2)如果网络的输入数据在每次 iteration 都变化的话,会导致 cnDNN 每次都会去寻找一遍最优配置,这样反而会降低运行效率。 torch.optim.SGD()
各参数解释:【链接】torch.autograd.Variable()
:用于选择是否保存反向传播所用梯度数据,与参数的维度尺寸相同【链接】torch.optim.lr_scheduler
:学习率更新策略,其中CosineAnnealingLR
:余弦退火调整学习率:【链接】tensor
张量解释:本质为高维数组:【链接】
(1)查看tensor的维度:xxx.shape
或者xxx.size()
(2)tensor张量的拆分与拼接:【链接】tensor.mean(axis=k, keepdim=True)
:
(1)axis=k:对第k维取平均值,将该维度改为1,维度从0开始标度
(2)keepdim=True:是否保留该值为1的维度
例如:
tensor.shape = (7,3,5,5)
tensor.mean(2,keepdim=True).shape = (7,3,1,5)- 绘图工具
tensorboardX
:【安装】及【使用教程1】 【使用教程2】:在终端命令行输入:tensorboard --logdir path
,此处的path
为log文件夹的完整路径(绝对路径),pycharm远程连接服务器时,需要同步log文件到本地或者直接将路径索引到服务器对应位置 ,终端执行后会出现网页地址链接,打开浏览器即时查看即可
pycharm安装及使用
-
第一次打开项目,右上角运行标志是灰色——代码界面右键单击,运行一次即可
-
有些非注释代码语句也是灰色的——表示该命令未被引用,为冗余语句
-
界面右上角
运行
== 界面下边栏终端窗口(Terminal)输入命令:python xxx.py -
界面右下角选择运行环境:
python3.7(pytorch_3.7)
,表示python版本(运行环境名)
-
设置界面无法弹出:更换汉化包
-
调整界面背景颜色等:
ctrl
+·
(该键位于键盘左上角,与~
同一位置,英文状态下与Ctrl
同时键入可调出下面弹窗)【链接】
-
连接远程服务器 :【链接】
-
设置本地文件与服务器映射文件自动同步:
-
调出远程服务器文件列表:
-
取消自动更新:
python基础学习
-
基础神经网络代码:Cifar10【GitHub代码链接】
-
带有下划线前后缀的5种命名方式含义:【链接】
-
python图像库PIL(Python Image Library):python第三方图像处理库【链接】
-
批量逐行注释:选中后
ctrl
+/
-
隐藏 / 显示结构体内容:
ctrl
+-
/+
-
用python代码复制文件的几种方法:【链接】
-
super().__init__()
的用法 :【链接】 -
def __iter__
的用法:【链接】 -
def __call__(self, xxx, yyy)
:重载(),当实例传入参数与__call__()
所需参数一致时,实例.__call__()
=实例()
:【链接】 -
print
错误写法:print('K='+K)
,正确写法:print('K='+str(K))
,否则程序无法运行完成此条命令,且不报错,这样就会卡在这句话不动,既不终止也不继续。 -
np.random
:【链接】
(1)np.random.rand()
:0-1之间随机取值,即0-1均匀分布
(2)np.random.randn()
:标准正态分布取值,均值为0,方差为1
(3)np.random.randint(low, high)
:生成在范围内的随机整数
(4)np.random.permutation()
:打乱顺序,不改变原有数据,返回新的数组/list:输入参数为k
:对于0:(k-1)的数组随机排序;输入参数为list
:对list内的元素随机排序 【链接】 -
np.reshape(xxx, (new_shape[0], new_shape[1], new_shape[2], new_shape[3]))
:【链接】 -
np.array(a)
与np.asarray(a)
:【链接】
(1)相同点:将a转化为多维矩阵形式
(2)不同点:array是copy到新的变量,占新的内存;asarray是映射,不占新内存,且改a的同时输出也变 -
np.tile()
:
(1)np.tile(a,(2)):将a矩阵,延x轴(第一维)拓展到2倍
(2)np.tile(a,(2,3)):将a矩阵,延y轴(第二维)拓展到2倍,延x轴(第一维)拓展到3倍 -
np.clip(a, a_min, a_max)
:将a矩阵所有元素的值控制在a_min和a_max之间,大的设为a_max,小的设为a_min -
np.concatenate(array_a, array_b)
:数组拼接【链接】 -
str1.startswith(str2)
:判断str1是否由str2字符开头,返回bool值【链接】 -
xxx.transpose(3,1,0,2)
:调换维度顺序
MATLAB
- 数据预处理:代码修改说明:
(1)将训练得到的.mat
文件添加后缀(jupyter批量修改文件名),整体添加到./results/results_OPE_all
文件夹里面
(2)修改configTrackers.m
文件曲线信息;修改run_evaluation.m
中的figpath
路径,将新生成的图片保存进去
(3)运行run_evaluation.m
得到曲线图
(4)运行run_speed.m
得到帧率 - 批量注释:选中后,
(1)Ctrl
+R
:批量注释
(2)Ctrl
+T
:批量取消注释 - 网络不好可能导致plt.show()无法显示图片输出
实验笔记
- mobaXterm无法连接服务器问题:(cmd可以ping通10.112.249.1,重启电脑没变化,防火墙没问题,新版本试过了,pycharm同样连不上,部分电脑可连接)——发现局域网内可连,局域网外不可连——解决:修改端口号(由服务器数据中心选定)
- 服务器终端强制删除文件:
(1)sudo rm -f path:删除文件/文件夹,不提示
(2)sudo rm -r path:删除文件/文件夹,强制删除
(3)sudo rm -rf path:删除文件/文件夹,强制且不提示 - 训练集、验证集、测试集的数据分布不同时,才能判断模型真实的拟合程度:【链接】
- bounding box regression:边界框回归
- 周报汇报:
(1)红外图像,与RGB图像转换成的亮度图像,是不完全一样的。红外图像基于红外光的热量高低,而不是可见光的亮度高低。需要深度挖掘红外图像与可见光图像的区别,以此为出发点寻找创新点。
(2)结合当前用于可见光的相关算法,引用至红外领域,做些修改,使其可以凸显红外独有的特点,或解决红外特有的缺点。 - 《红外图像目标追踪算法研究,Research on Target Tracking Algorithm For Infrared Image》论文选读:
(1)参考文献[36]:利用RGB图像数据生成TIR图像数据(正文P5)
(2)基于自适应分数阶微分的红外目标检测增强(正文3.2节):- 自适应参数融合:提取红外目标局部特征信息,突显边缘细节
- 分数阶微分增强:有利于突出目标边界细节,增强高频,保留中低频
- 自适应分数阶微分:通过自适应参数融合,有效防止分数阶微分过量增强高频,过少保留中低频