【持续更新】一些Trick

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 [email protected] ;然后在本地的浏览器上输入:http://127.0.0.1:16006/
  • 在ssh上连接命令是:ssh -L 16666:127.0.0.1:8000 [email protected],kittiviewer的本地网址:http://127.0.0.1:16666/;需要在服务器上运行backened.py和server;
  • scp -r C:/study/3D-detection/data/kitti/ [email protected]:/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 -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

【持续更新】一些Trick_第1张图片

  • 服务器打开google:google-chrome
  • 平时没有上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版本
  • 有些时候我们会遇到这样的情形:人不在学校的网段内,然后由于一些原因(疫情等),我们无法在开机实验室的电脑,但是可以使用实验室的服务器,这时候采用不同网段连接远程服务器的方式,我们可以采用如下的方式。【持续更新】一些Trick_第2张图片

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是不是有问题。如果存在没有用的层就容易出问题

你可能感兴趣的:(【持续更新】一些Trick)