Brief
这一篇用于记录一些学习中收获的trick,持续更新。
Linux 指令
- 查看GPU状态 :
watch -n1 gpustat
- 查看CPU进程 :
top
- ssh远程连接服务器:
ssh -p22 username@ip
- 关闭ssh
crtl+D
或则log out
- ssh连接中断但是继续运行程序:
nohup +指令
,这一条可能会出现权限上的错误:nohup: ignoring input and appending output to 'nohup.out'
。解决办法:chmod +x [hello].py ;nohup python [hello].py >/dev/null 2>&1 &
- 杀死在运行的GPU程序:
kill -9 PID
这里的PID值采用nvidia-smi
查看 - pip install 后面使用清华源速度会很快即:
pip install [] -i https://pypi.tuna.tsinghua.edu.cn/simple
- 由于我们在服务器上执行我们的程序,很多时候可能没有权限去安装某些东西,比如anaconda,这时候可以去官网下载器.sh的安装文件再传到服务器上进行命令行安装。
- nautilus 指令在mobaXter中可以得到服务器对应的图形界面。
- 查看当前文件夹下的大文件:
find . -type f -size +800M -print0 | xargs -0 du -h
- 远程使用
tensorboard
:ssh -L 16006:127.0.0.1:6006 jty@192.168.190.212
;然后在本地的浏览器上输入:http://127.0.0.1:16006/
- 在ssh上连接命令是:
ssh -L 16666:127.0.0.1:8000 jty@192.168.190.212
,kittiviewer的本地网址:http://127.0.0.1:16666/
;需要在服务器上运行backened.py和server; scp -r C:/study/3D-detection/data/kitti/ sn@192.168.190.211:/home/sn/GSPN-master/data/kitti/
- vim全文替换
:%s/from/to/g
- 解压文件夹下特定文件:
find . -name "V510*.zip" | xargs -n1 unzip
fuser -v /dev/nvidia0
查看自己的进程tmux
本地不断的进程服务- g++ test.cpp -o test
- 生成proto.py:
protoc ./second/protos/*.proto --python_out=.
- scp远程文件传输:
scp -P <port> -r jty@Ip:path local_path
- 和
pip install -r requirement.txt
一样的conda命令:conda install --yes --file requirements.txt
- 一个奇怪的记录:在conda的虚拟环境中使用pip3会安装不到现在的虚拟环境中,但是使用pip是可以的(在conda无法安装的情形下)
- 报错如果是关于cuda路径的问题,可以重新设置一下cuda路径:
export CUDA_HOME=/usr/local/cuda-10.0
- 批量杀死关键字为
python
进程:ps -ef | grep python | grep -v grep | cut -c 9-15 | xargs kill -s 9
- 查看文件夹下的文件数量:
ls |wc -w
- zip压缩文件
zip dst.zip src
,unzip解压文件:unzip src.zip -d dst
conda info -e
可以查看当前所有的环境- 自己环境中出现
cuda-9.0/nvcc
的错误时换成cuda10
就可以了,安装spconv时,也是10.0,同时rm -rf build文件
`
Idea
- kaggle 的语义分割时常采用lovaze_loss。直接对IOU进行优化。
- 各向异性探索核和voxelnrt结合再到2DCNN
- 线段的特征不变性加入到特征大杂烩中去
网站
- google很好用,百度引擎广告很多,不过可以在搜索后面加
-()
去除广告,例如:上海迪士尼 -()
- 批改网可黏贴操作:
$('#contents').unbind();
- 一个查看网页下载链接的方法,方便用
wget
- 服务器打开google:
google-chrome
- 平时没有vpn上arxiv会特别慢,可以采用镜像的方法下载:
中科院有arxiv的镜像地址:cn.arxiv.org,备用地址:xxx.itp.ac.cn。我们可以将arxiv.org/pdf/2002.02256.pdf都转换成cn.arxiv.org/pdf/2002.02256.pdf或xxx.itp.ac.cn/pdf/2002.02256.pdf。第一种我试的时候不行,选择第二个地址。
mmd模型下载带amazon的可以采用阿里云镜像,在mmd的Modelzoo的readme文件中
操作
- 选中一个文件连续点击两下crtl,再拉动文件为复制到目标文件夹,而不是移动。
- pytorch设置 gpu的方式还有:
torch.cuda.set_device(int(6))
- 使用修饰函数
@
的时候,需要在__init__.py文件中加进去,比如:from . import voxelnet_jty
简易工具
- 模型结构可视化神器——
Netron
(支持tf, caffe, keras,mxnet等多种框架) - VScode 很好用,可以取代pycharm,但是能远程链接的需要使用insider版本
- 有些时候我们会遇到这样的情形:人不在学校的网段内,然后由于一些原因(疫情等),我们无法在开机实验室的电脑,但是可以使用实验室的服务器,这时候采用不同网段连接远程服务器的方式,我们可以采用如下的方式。
Python
- pyplot 支持markdowm公式对曲线进行标注,假如markdown的公式中存在‘\’转义字符,需要在"$ " 之 前 添 加 字 符 " r " : 例 如 : ‘ p l t . p l o t ( x , y , r " "之前添加字符"r":例如:`plt.plot(x, y,r" "之前添加字符"r":例如:‘plt.plot(x,y,r"\int_a^b f(x)\mathrm{d}x$",horizontalalignment=‘center’, fontsize=20)`这的r就是很重要的。
- plt.show() 该函数会将之前的所有“积累的”plt.plot()给画出来,同时清空缓存中需要画的语句。也就是说假如在plt.show()之后紧跟着一句plt.savefig()那么这就是会导致所保存了一张空图。而plt.savefig()该函数是不会清空需要画的数据,也就是假如先savfig()再进行show()那么这样是可以的,二者都有figure.
- os命令:os.path.join(a,b) 是将路径a和文件夹b的名字结合起来,假设a="./dir_a",b=“dir_b”;那么结合之后的路劲为:
"./dir_a/dir_b"
。它是默认在dir_a的后面存在符号’/'的。但是如果a="./dir_a/";那么输出的结果也是一样的为./dir_a/dir_b
。但是如果a="./dir_a",b="/dir_b",就会画蛇添足了,输出的结果为"/dir_b"
。也就是说在前面的文件夹(a)可以加"/"。 '%s.txt' % 'aa'
的含义和C语言一样,用后面的“aa”代替前面的"%s";中间的**%**号要注意。- str1.splitlines()函数将字符串用‘\n’分成一个list包含,List的每一元素就是每一行的数据。str1.splitlines(True)内容同前,但是返回的list的每一个元素包含有换行符"\n".而前面的那个是没有的。
- np.linspace(a,b,c)从a到b以间隔c进行采样。
- XX, YY = np.meshgrid(x, y);对集合数组和数组y的元素根据坐标需求划分为坐标网上对应的点。生成坐标点。XX的大小均为 x . s h a p e [ 0 ] × y . s h a p e [ 0 ] x.shape[0]\times y.shape[0] x.shape[0]×y.shape[0]。 ( X X [ a ] [ b ] , Y Y [ a ] [ b ] ) (XX[a][b],YY[a][b]) (XX[a][b],YY[a][b])则是对应网格带点。
- np.newaxis。的作用就是在这一位置增加一个一维,这一位置指的是np.newaxis所在的位置,例如:cx[…, np.newaxis]在cx的最底层添加一维。
...
的意思是不管前面的内容,这里也就是表最后一维,例如:r[…, 0] = 0,所表示的含义就是对r中最里层的维度的所有的第一个元素设为0。 - np.tile(a,para).将矩阵a复制扩充para个。np.tile(a,(1,3)):将a横向扩充为3个a,也就是:a a a。np.tile(a,(3,1)).竖着扩充3个a。
- np.stack([array_a,array_b],axis) :沿着axis轴连接array+a和array_b。axis=-1表示的是最后一个维度。
- torch.nn.init.xavier_uniform(nn.Conv2d.weight.data) 初始化权重参数使得每一层的方差符合一个分布,这样数据比较好流动。用于权重初始化
- nn.Conv2d.bias.data.zero_():偏置参数置为0.用于偏置初始化
- **np.pad(array, pad_width, mode, kwargs) ; 数据填充。pad_width=(befor_num,after_num);就是在array指定维度的元素前面添加befor_num个值,后面添加after_num个值,mode为填充的方式, **kwargs是对应的数值。 例如:
np.pad(sample[1], ((0, 0), (1, 0)),mode='constant', constant_values=i))
表示在sample[1]的第二维的坐标加上一个参数i. - torch.cat() 张量拼接,需要再补充。
- numpy.unravel_index()函数的作用是获取一个/组int类型的索引值在一个多维数组中的位置。
- pathlib——面向对象的文件系统路径.
eval_checkpoint_dir = model_dir / 'eval_checkpoints'
中间的/
是直接把两个路劲连起来。 - np.around 返回四舍五入后的值,可指定精度。
- fire.Fire()—自动生成命令行
-
在pointpillars中读取pkl文件,with open(info_path, 'rb') as f: kitti_infos = pickle.load(f)
- pytoch 设置卡
torch.cuda.set_device(6)
- python高阶函数:partial 函数的功能就是:把一个函数的某些参数给固定住,返回一个新的函数。
- torch.topk(dim,k):返回沿着dim的维度上的前k个最大值
- np.einsum()
- numpy.fromfile和to.file都是二进制储存和读取的,因此数据读取的时候一定要和储存时的类型一致
nn.CrossEntropyLoss()
交叉熵损失函数的label不能是-1
知识积累
- 人脸识别的时候为了区分被检测的是个人还是个照片是会做“活体检测”的,就是可以检测出真人和照片的细节的不同。
- "NAS"方法是为了搜索到比较适应数据集的神经网络结构,降低结构冗余。可以采用强化学习进行结构搜索。
- 强化学习机制的反馈和GAN网络的反馈机制不同,GAN是全网路反馈,强化学习则是直接对输入的产生一个回馈。
- SAR成像是采用微波的主动成像方式。结构光成像也是自己发出再接收的,自然光则是被动的、拍摄的。
- 猜测:GPU上的内存无法释放掉的原因:可能在模型加载进去后,出现了bug,例如非法空间访问,导致了强制退出,因此不能继续使用。
BUG
Expected to have finished reduction in the prior iteration before starting a new one. This error indicates that your module has parameters that were not used in producing loss.
看一下loss是不是有问题。如果存在没有用的层就容易出问题