windows编译tensorflow tensorflow单机多卡程序的框架 tensorflow的操作 tensorflow的变量初始化和scope 人体姿态检测 segmentation标注工具 tensorflow模型恢复与inference的模型简化 利用多线程读取数据加快网络训练 tensorflow使用LSTM pytorch examples 利用tensorboard调参 深度学习中的loss函数汇总 纯C++代码实现的faster rcnn tensorflow使用记录 windows下配置caffe_ssd use ubuntu caffe as libs use windows caffe like opencv windows caffe implement caffe model convert to keras model flappyBird DQN Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Neural Networks Fast-style-transfer tensorflow安装 tensorflow DQN Fully Convolutional Models for Semantic Segmentation Transposed Convolution, Fractionally Strided Convolution or Deconvolution 基于tensorflow的分布式部署 用python实现mlp bp算法 用tensorflow和tflearn搭建经典网络结构 Data Augmentation Tensorflow examples Training Faster RCNN with Online Hard Example Mining 使用Tensorflow做Prisma图像风格迁移 RNN(循环神经网络)推导 深度学习中的稀疏编码思想 利用caffe与lmdb读写图像数据 分析voc2007检测数据 用python写caffe网络配置 ssd开发 将KITTI的数据格式转换为VOC Pascal的xml格式 Faster RCNN 源码分析 在Caffe中建立Python layer 在Caffe中建立C++ layer 为什么CNN反向传播计算梯度时需要将权重旋转180度 Caffe使用教程(下) Caffe使用教程(上) CNN反向传播 Softmax回归 Caffe Ubuntu下环境配置

使用记录

2017年02月07日

服务器免密码登陆

首先本地和服务器端安装ssh ssh-keygen在本地./ssh生成私钥和公钥 ssh-copy-id -i name.pub usr@ip将本地公钥拷贝到服务器端的.ssh里生成authorized_keys 至此实现了本地连服务器的免密码登陆

ubuntu 截图 ctrl+alt+a

打开系统设置/键盘/Shortcuts/ 添加“截图” command gnome-screenshot -a 然后选中截图 按下ctrl+alt+a

清理ubuntu中孤立无用的软件包

安装Deborphan sudo apt-get install deborphan 运行 deborphan 列出无用可删除的软件包 sudo orphaner

ubuntu设代理

在bashrc或者profile中添加

export http_proxy="http://admin:admin@10.110.157.140:8080/"
export https_proxy="https://admin:admin@10.110.157.140:8080/"
export HTTP_PROXY="http://admin:admin@10.110.157.140:8080/"
export HTTPS_PROXY="https://admin:admin@10.110.157.140:8080/"

/etc/apt/apt.conf添加

Acquire::http::proxy "http://admin:admin@10.110.157.140:8080/";
Acquire::https::proxy "https://admin:admin@10.110.157.140:8080/";
Acquire::ftp::proxy "ftp://admin:admin@10.110.157.140:8080/";
Acquire::socks::proxy "socks://admin:admin@10.110.157.140:8080/";

ubuntu下cuda7.5升级为cuda8

由于原来版本显卡驱动不支持cuda8需要先卸载原有显卡驱动

关闭桌面显示 sudo service lightdm stop 卸载显卡驱动 sudo apt-get remove –purge nvidia-* 安装cuda8包括里面的显卡驱动 开启桌面显示 sudo service lightdm start

ubuntu远程拷贝文件和文件夹示例

scp myusername@university_computer:/home/myusername/file.odt homeusername@Felix:Desktop/file.odt
sudo scp -r /home/dlg/ssd_caffe bsl@172.25.85.12:/home/bsl

防止远程Linux主机自动断开SSH连接

我在使用ssh连接远程Linux主机时,如果长时间不操作,ssh会自动断开,只能重新登陆。

原因是:由于ssh的安全机制,如果10分钟没有任何操作,本次SSH会话会自动关闭。

怎么防止远程Linux自动断开SSH连接

下面的操作是在本地ssh客户端上,不是远程主机。

编辑SSH配置文件:

vim ~/.ssh/config    # 当前登陆用户生效

添加:

Host *
 ServerAliveInterval 30

*号代表所有主机,你可以指定某个主机,如:

Host server1
 ServerAliveInterval 30

ServerAliveInterval 30表示ssh客户端每隔30秒给远程主机发送一个no-op包,no-op是无任何操作的意思,这样远程主机就不会关闭这个SSH会话。

为了使所有用户生效,你可以在/etc/ssh/ssh_config全局配置文件添加如下一行:

ServerAliveInterval 30

还可以在连接时使用选项:

ssh -o ServerAliveInterval=30 user@remote-ssh-server-ip

出现的新笔记本安装ubuntu后无法搜索到wifi问题

很可能是网卡驱动的问题,首先查看网卡型号,然后确定内核是否支持当前无线网卡。然后安装对应的驱动。

jupyter notebook如何使用

首先把ipython升级到版本4.0以后,切换到存储了ipynb的目录下,运行jupyter notebook就会在浏览器窗口列出ipynb文件和内容

ubuntu下 vi输入方向键会变成ABCD

ubuntu下 vi输入方向键会变成ABCD,这是ubuntu预装的是vim tiny版本,安装vim full版本即可解决。

先卸载vim-tiny:

sudo apt-get remove vim-common

再安装vim full:

sudo apt-get install vim

ubuntu操作系统”Failed to fetch”错误

W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/precise-updates/main/binary-i386/Packages  Something wicked happened resolving 'archive.ubuntu.com:http' (-5 - No address associated with hostname)
  
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/precise-updates/restricted/binary-i386/Packages  Something wicked happened resolving 'archive.ubuntu.com:http' (-5 - No address associated with hostname)

解决这个问题十分简单,只要设置妥当DNS服务

sudo vi /etc/resolv.conf

比如

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
domain abc.com
search abc.com
nameserver 10.96.1.18
nameserver 10.96.1.19

为了防止每次重启都需要添加,可以修改 resolvconf服务的配置文件: /etc/resolvconf/resolv.conf.d/base ,这样在机器重启或 resolvconf 服务重启 都可以保证配置会写到/etc/resolv.conf 里面

安装NVIDIA显卡后无法进入tty模式

编辑/etc/default/grub

修改GRUB_CMDLINE_LINUX_DEFAULT的值为nomodeset

更新grub:sudo update-grub

重启

Ubuntu永久挂载硬盘分区

先查看所有硬盘

fdisk -l |grep '/dev'

然后挂载一个

sudo mount /dev/sdb  /data

但这种方法有个不好的地方是机器重启后又得手工重新挂载.

首先我们得到/dev/sdb这个分区的UUID,使用以下命令:

sudo blkid /dev/sdb

然后,我们按照/etc/fstab文件中的格式添加一行如下内容:

UUID=904C23B64C23964E /data ntfs defaults 0 2

其中第一列为UUID, 第二列为挂载目录(该目录必须为空目录),第三列为文件系统类型,第四列为参数,第五列0表示不备份,最后一列必须为2或0(除非引导分区为1)

matplotlib后台设置画图出错

backend: agg in ~/.config/matplotlib’/matplotlibrc

‘/etc/matplotlibrc’ Then modify the backend in that file to backend : Agg.

ubuntu关闭端口

sudo lsof -i:6006
kill PID

ubuntu查看文件夹大小

du -sh * | sort -nr | head 

ubuntu 查看当前文件夹内的文件数

ls | wc -l

多GPU下设定程序可见设备

在终端执行前添加下面语句

CUDA_VISIBLE_DEVICES=0

或者在代码中添加如下语句

import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"]="0"

linux下快速删除大量的文件

先安装rsync

yum install rsync

新建一个空文件夹bk,清空target文件夹

rsync --delete-before -d bk/ target/

linux安装HDF5, boost

#CentOS
yum -y install hdf5-devel

yum install boost boost-devel

#Ubuntu
sudo apt-get install libhdf5-dev

sudo apt-get install libboost-all-dev

Linux下释放gpu显存

tensorflow有时候会由于某种原因,在关闭程序后,GPU的显存仍处于被占用的状态,而用nvidia-smi查不到对应的进程pid。这时释放显存的方法:

sudo fuser /dev/nvidia*

该命令会显示所有占用nvidia设备的进程pid,将这些pid逐个kill掉:

kill -9 pid

发现显存已经被释放。不过,造成这种显存不能被释放现象的原因尚不清楚。

vim全文查找替换确认

:1,$s/str1/str2/gc

常见解压压缩命令

tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!)

.gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName .tar.gz 和 .tgz 解压:tar zxvf FileName.tar.gz 压缩:tar zcvf FileName.tar.gz DirName

.bz2 解压1:bzip2 -d FileName.bz2 解压2:bunzip2 FileName.bz2 压缩: bzip2 -z FileName

.tar.bz2 解压:tar jxvf FileName.tar.bz2 压缩:tar jcvf FileName.tar.bz2 DirName

.bz 解压1:bzip2 -d FileName.bz 解压2:bunzip2 FileName.bz 压缩:未知 .tar.bz 解压:tar jxvf FileName.tar.bz 压缩:未知

.Z 解压:uncompress FileName.Z 压缩:compress FileName .tar.Z 解压:tar Zxvf FileName.tar.Z 压缩:tar Zcvf FileName.tar.Z DirName .zip 解压:unzip FileName.zip 压缩:zip FileName.zip DirName

.rar 解压:rar x FileName.rar 压缩:rar a FileName.rar DirName

zstd 压缩解压缩

使用 Zstandard 压缩来压缩 / 解压文件. 更多信息:https://github.com/facebook/zstd.

将一个文件压缩到一个 .zst 后缀的压缩文件中: zstd

解压缩一个文件: zstd -d .zst

将文件解压缩到标准输出 (stdout): zstd -dc .zst

使用指定的压缩等级来压缩一个文件.0 = 最差,19 = 最好 (默认等级是 3): zstd -

使用更多内存 (解压或压缩时) 来得到更高的压缩比: zstd –ultra -

#创建python虚拟环境

1.安装virtualenv

pip install virtualenv
pip3 install virtualenv

2.创建虚拟环境

virtualenv envA

如果你当前的Python3/Scripts的查找路径在Python2/Scripts的前面,那么将会使用python3作为这个虚拟环境的解释器。如果python2/Scripts在python3/Scripts前面,那么将会使用Python2来作为这个虚拟环境的解释器。

3.进入环境

source envA/bin/activate

4.退出环境

deactivate

github 设置代理

git config --global http.proxy 'socks5://127.0.0.1:1080'

git config --global https.proxy 'socks5://127.0.0.1:1080'

linux解压大于4G的zip文件

unzip可能无法解压太大的zip文件,可以使用7za

https://sourceforge.net/projects/p7zip/files/p7zip/ 下载p7zip_16.02_src_all.tar.bz2

tar -xjpf   p7zip_16.02_src_all.tar.bz2
cd p7zip_16.02
make && make install
7za x XXX.zip

gitlab权限问题

ssh-keygen -t rsa -C "zoujy2"

vi /root/.ssh/id_rsa.pub

将公钥添加到gitlab的SSH Keys里

远程拷贝忽略软连接的数据

rsync -avzPl

ip摄像头解决获取帧延迟问题

需要设置摄像头缓存为1,避免读到缓存很多帧之前的数据

video_source = "rtsp://admin:leface2019@192.168.1.116:554"
gst_str = ('rtspsrc location={} latency=100 ! rtph265depay ! h265parse ! omxh265dec ! nvvidconv ! video/x-raw, width=(int)1920, height=(int)1080, format=(string)BGRx ! videoconvert !appsink max-buffers=1 drop=true').format(video_source)
vid = cv2.VideoCapture(gst_str,cv2.CAP_GSTREAMER)

pip改国内源

pip install tensorflow -i https://pypi.douban.com/simple

opencv读取实时帧

import queue,threading
import cv2

class VideoCapture:
    def __init__(self, name):
        self.cap = cv2.VideoCapture(name)
        self.q = queue.Queue()
        t = threading.Thread(target=self._reader)
        t.daemon = True
        t.start()

        # read frames as soon as they are available, keeping only most recent one
    def _reader(self):
        while True:
            ret, frame = self.cap.read()
            if not self.q.empty():
                try:
                    self.q.get_nowait()   # discard previous (unprocessed) frame
                except queue.Empty:
                    pass
            self.q.put([ret,frame])

    def read(self):
        return self.q.get()

    def release(self):
        self.cap.release()
		
cap = VideoCapture(name)
return_value, frame = cap.read()

opencv mat存储顺序和内存排序

opencv按照C,W,H的顺序存储,在mat.data获取数据内存块的时候,也就是先存一个像素点的B,G,R值然后再按行依次存储每个像素点,最后按列存储像素点。

所以对于模型输入,当模型输入是NHWC时候,mat.data能直接作为指针地址拷贝给模型接口;当模型输入是NCHW时候需要先将mat分离通道然后再用mat的push_back放入一个新的mat来获取mat.data按W,H,C顺序存储像素点

docker 快速使用命令

#从一个运行中的docker 创建新镜像
docker commit 7f09530c0738 tensorrt:master

#启动一个容器,不会exit就退出
nvidia-docker run -t -i -d tensorrt:master /bin/bash

#进入正在运行的docker
docker exec -it newdecode /bin/bash

# 拷贝
docker cp test.jpg newdecode:/root/TR/

#导出镜像
docker save -o tensorrt.tar tensorrt:master

#加载镜像
docker load -i tensorrt.tar

# docker访问出现Permission denied

临时关闭selinux:

setenforce 0

# export导出image
docker export -o trt8_export.tar 容器id
docker import trt8_export.tar test_trt8_export:v1
docker run -tid --gpus all --name trt8_export_test ffc91ac17602 /bin/bash
# 只能用上述方式起export的image否则会出现gpu失效问题

#查看和启动nvidia-docker
systemctl status nvidia-docker
systemctl start nvidia-docker
nvidia-docker run -t -i -d --shm-size=512g -v /dfsdata2/jinyi_data:/jinyi_data torch1.5.1-cuda10.1-cudnn7-devel:ddp /bin/bash

编译GPU版本得opencv

opencv4.0.0安装
cmake -D CMAKE_BUILD_TYPE=RELEAS -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_CUDA=ON -D BUILD_opencv_cudacodec=OFF -D BUILD_opencv_xfeatures2d=OFF -D OPENCV_PC_FILE_NAME=opencv.pc -D OPENCV_GENERATE_PKGCONFIG=YES -D WITH_V4L=ON -D WITH_GSTREAMER=ON -D OPENCV_EXTRA_MODULES_PATH=/home/lenovo/TR/opencv_contrib-4.0.0/modules -D PYTHON_EXECUTABLE=$(which python3) -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D CUDA_ARCH_BIN=7.5 ..

vim删除不包含指定内容的行

g!/4107907252/d

linux查找某个lib

find /usr -name "libnvcuvid*"
ldconfig -p | grep "libnvcuvid*"

关于opencv填边

cv::copyMakeBorder(resized_image, padding_image, _dh_a, _dh_b, _dw_a, _dw_b, cv::BORDER_CONSTANT, cv::Scalar(128,128,128));
cv::copyMakeBorder(resized_image, padding_image, _dh_a, _dh_b, _dw_a, _dw_b, cv::BORDER_CONSTANT, cv::Scalar(128));

注意这两种方式填边不一样,第一种方式为全部数值为128,第二种不是

批量结束进程

#结束所有包含main_jo的进程
ps -ef |grep main_jo |awk '{print $2}'|xargs kill -9

统计所有文件数量包括子文件夹内的

ls -lR| grep "^-" | wc -l

免密钥登录

#待登录机器生成密钥
ssh-keygen -t  rsa
#拷贝到另一台机器
ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.110.129.105
实现待登录机器免密登录

python opencv完全安装支持cuda

pip install --upgrade pip
pip install opencv-python -i https://pypi.douban.com/simple
pip install opencv-contrib-python -i https://pypi.douban.com/simple
pip install opencv-python-headless

conda创建环境

conda create -n py36 python=3.6
activate env_name
deactivate env_name
#下载慢
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes

onnx转trt

trtexec --onnx=DLA60xc_nhwc.onnx --fp16 --saveEngine=DLA60xc_nhwc.trt --explicitBatch --workspace=512

#动态batchsize
trtexec --explicitBatch --onnx=Yolov5s_nhwc_dynamic.onnx --minShapes=input:1x320x576x3 --optShapes=input:16x320x576x3 --maxShapes=input:32x320x576x3 --saveEngine=Yolov5s_nhwc_dynamic.trt --fp16 --workspace=1024

onnx2trt DLA60xc.onnx -o DLA60xc.trt -b 1 -d 16 -q

linux创建用户

adduser jinyi
passwd jinyi
usermod -g root jinyi
chmod -v u+w  /etc/sudoers
添加
jinyi   ALL=(ALL)       NOPASSWD:ALL
chmod -v u-w  /etc/sudoers

sudo -i
root下sudo chmod 666 /var/run/docker.sock

vim拷贝缩进问题

1. 在拷贝前输入:set paste (这样的话,vim就不会启动自动缩进,而只是纯拷贝粘贴)
2. 拷贝完成之后,输入:set nopaste (关闭paste)

快速拷贝大量小文件

#远程往本地pull
rsync --archive --partial --progress --compress root@10.110.110.112:/dfsdata/DATASET ./

#同步远程
rsync --archive --partial --progress --compress --delete SDv3 jinyi@10.110.157.140:/data/jinyi

改变数据用户权限

chown -R jinyi:jinyi DATASET/

查找文件内容

#当前目录下查找包含hello,world!的文件
grep -rn "hello,world!" *

当前目录拷贝前20个数据

ls | head -n 20 |xargs -i cp -r {} /dfs/data/

终端配置文件传输工具 sz,rz

yum install lrzsz
apt-get install lrzsz

将frame中连续帧图片压缩成视频

ffmpeg -f image2 -i frame/%05d.jpg -b 5000k -c:v mpeg4 result.mp4

-bash: /bin/tar: Argument list too long

find ./baidu20w_encrypt/ -name "*" > file_list.txt
tar -cvz -T file_list.txt -f baidu20w_encrypt.tar

删除大量指定小文件,rm失败Argument list too long

进入文件夹目录
ls>file_list.txt

import os, shutil
f = open("file_list.txt",'r')
lines = f.readlines()
lines = [v.strip() for v in lines]

names = os.listdir("./")
for name in names:
    if name not in lines:
        print(name)
        shutil.rmtree(name)

随机多嵌套文件夹下拷贝少量数据

from shutil import copyfile
from os import walk
import random,os

soc_cover_path = '2022_2_23' #源文件路径

dst_cover_path = 'test'#目标文件路径

paths = []
for (dirpath, dirnames, filenames) in walk(soc_cover_path):
    for filename in filenames:
        paths.append(os.path.join(dirpath,filename))
random.shuffle(paths)
for path in paths[:20]:
    copyfile(path, os.path.join(dst_cover_path, path.split('/')[-1]))

pytorch计算模型参数量

total_params = sum(param.numel() for param in model.parameters())

L2归一化

#numpy
a = a / np.linalg.norm(a, axis=1, keepdims=True)
#pytorch
a = a / a.norm(dim=1, keepdim=True)

选视频与快速抽帧

#将视频放到文件夹下,可视化一帧选场景

import os
import cv2
names = os.listdir('videos')
ind=0
for name in names:
    cap=cv2.VideoCapture(os.path.join('videos',name))
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fps = cap.get(cv2.CAP_PROP_FPS)
    ret, frame = cap.read()
    print(width,height,fps)
    cv2.imwrite('{}.jpg'.format(ind),frame)
    ind+=1

#使用ffmpeg快速查看一帧	

ffmpeg -i D01_merge.mp4 -ss 1 -f image2 1.jpg

#使用ffmpeg每秒抽一帧高质量图像,将videos下视频抽帧保存至frame

import os
if not os.path.exists('frame'):
    os.makedirs('frame')
names = os.listdir('videos')
ind=0
for name in names:
    command = "ffmpeg -i {} -vf fps=1/1 -qscale:v 2 frame/frame_{}_%d.jpg".format(os.path.join("videos",name),ind)
    os.system(command)
    ind+=1

conda

#创建指定conda python环境到指定目标
conda create -p /dfs/data/llm_env python=3.10

#显示所有conda环境
conda env list
conda activate /dfs/data/llm_env
conda install --prefix=/dfs/data/llm_env

vim多行缩进

按Esc进去命令行模式

光标移动到开头,按shift+v,然后按上下方向键选择多行

按shift + < 向前移,按shift + > 向后移

python管理子进程

import subprocess

#非阻塞形式,可以控制杀死
status = subprocess.Popen(["python3", "-m", "vllm.entrypoints.api_server", "--model", eval_model_path,\
                                      "--tensor-parallel-size", "1",\
                                      "--trust-remote-code",
                                      "--port", "8097"], shell=False)
status.kill()

#阻塞形式,必须等待完成
status = subprocess.call(["python3", "evalue.py", "--modelname", "Qwen2", \
                                                  "--temp", "0.8", \
                                                  "--noise_rate", "1.0", \
                                                  "--plm", eval_model_path, \
                                                  "--passage_num", "3", \
                                                  "--datasets", "en_refine", "zh_refine"], shell=False)																  

自动检测gpu空闲启动程序

import os
import time
GPU_ID=2


while True:
    gpu_free_ls = os.popen('nvidia-smi --query-gpu=memory.free --format=csv').readlines()[1:]
    print(gpu_free_ls)
    gpu_free = int(gpu_free_ls[GPU_ID].strip().split()[0])
    print('gpu_free:', gpu_free)
    
    if gpu_free > 20000:
        os.system(f'''python generate.py --temp 0.9''')
        ...  
        break
        
    # 暂停5分钟再进行下一次扫描
    time.sleep(60*5)
    print('sleeping...')

检测CUDA、cuDNN、Pytorch是否可用

import torch
print('CUDA版本:',torch.version.cuda)
print('Pytorch版本:',torch.__version__)
print('显卡是否可用:','可用' if(torch.cuda.is_available()) else '不可用')
print('显卡数量:',torch.cuda.device_count())
print('是否支持BF16数字格式:','支持' if (torch.cuda.is_bf16_supported()) else '不支持')
print('当前显卡型号:',torch.cuda.get_device_name())
print('当前显卡的CUDA算力:',torch.cuda.get_device_capability())
print('当前显卡的总显存:',torch.cuda.get_device_properties(0).total_memory/1024/1024/1024,'GB')
print('是否支持TensorCore:','支持' if (torch.cuda.get_device_properties(0).major >= 7) else '不支持')
print('当前显卡的显存使用率:',torch.cuda.memory_allocated(0)/torch.cuda.get_device_properties(0).total_memory*100,'%')

blog comments powered by Disqus