用服务器在ImageNet上进行DL训练分析(一)
SSH服务器配置
用cmd连接服务器使用
直接在cmd中输入
ssh yuhao@10.130.147.227
然后输入密码即可进入服务器使用
用VSCode连接远程服务器使用
可以使用前端图形化界面直接查找操作文件,也可以使用终端进行控制
参考https://zhuanlan.zhihu.com/p/89662757
使用VNC联网(校园网)
在服务器输入vncserver根据提示创建并配置一个服务器
在本地下载VNC Viewer,输入10.130.147.227:6(6为创建时的序号)
但打开后出现灰屏鼠标为x标记情况
查询资料后将/yuhao/.vnc/xstartup文件使用vim修改如下(若使用VSCode则可直接打开修改)
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
# exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[-r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
#gnome-session &
x-session-manager & xfdesktop & xfce4-panel &
xfce4-menu-plugin &
xfsettingsd &
xfconfd &
xfwm4 &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession
之后先后使用vncserver -kill :6
(注意kill和冒号中间有一个空格)和vncserver :6
重启VNC服务器。就可以正常看到图形化界面并连接网络使用了。
Python环境配置
连接网络后就可以使用wget指令进行下载
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
之后先使用nvcc -V
查询具体平台的CUDA Toolkit版本,本客户端查询为10.2
使用conda create -n pyt-gpu python=3.6 pytorch torchvision cudatoolkit=10.2 -c pytorch
创新新的虚拟环境(名为pyt-gpu可替换,cudatoolkit=10.2处改为查询到的版本)
注:若报错‘conda:未找到命令’
只需按以下方式配置环境变量即可:
#(1)修改环境变量
vim ~/.bashrc
#(2)在最后一行加上
export PATH='/your_miniconda3_path/bin':$PATH
#保存退出
#(3)重新激活环境变量
source ~/.bashrc
之后就可通过source activate pyt-gpu
和conda deactivate
来激活和退出虚拟环境
ImageNet2012数据集使用
数据集文件下载介绍
训练集及验证集(val):
可自行寻找网盘资源下载
ILSVRC2012_img_train.tar及ILSVRC2012_img_val.tar
下载后需要进一步处理,训练集内部压缩包未解压,验证集未分类
验证集标签(label)所需数据:
https://download.csdn.net/download/Bixiwen_liu/15813514?spm=1001.2101.3001.5697
原始数据集处理
训练集(train):
解压后重命名文件夹为train
在train文件夹下创建shell文件如下
# 创建 shell 文件: unzip.sh; shell 文件运行 bash unzip.sh
dir=./
for x in `ls *.tar`
do
filename=`basename $x .tar`
mkdir $filename
tar -xvf $x -C ./$filename
done
验证集:
解压后重命名文件夹为val
将验证集标签数据文件夹(ILSVRC2012_devkit_t12)放在与val同一目录,并创建python文件如下
def move_valimg(val_dir='./val', devkit_dir='./ILSVRC2012_devkit_t12'):
"""
move valimg to correspongding folders.
val_id(start from 1) -> ILSVRC_ID(start from 1) -> WIND
organize like:
/val
/n01440764
images
/n01443537
images
.....
"""
# load synset, val ground truth and val images list
synset = scipy.io.loadmat(os.path.join(devkit_dir, 'data', 'meta.mat'))
ground_truth = open(os.path.join(devkit_dir, 'data', 'ILSVRC2012_validation_ground_truth.txt'))
lines = ground_truth.readlines()
labels = [int(line[:-1]) for line in lines]
root, _, filenames = next(os.walk(val_dir))
for filename in filenames:
# val image name -> ILSVRC ID -> WIND
val_id = int(filename.split('.')[0].split('_')[-1])
ILSVRC_ID = labels[val_id-1]
WIND = synset['synsets'][ILSVRC_ID-1][0][1][0]
print("val_id:%d, ILSVRC_ID:%d, WIND:%s" % (val_id, ILSVRC_ID, WIND))
# move val images
output_dir = os.path.join(root, WIND)
if os.path.isdir(output_dir):
pass
else:
os.mkdir(output_dir)
shutil.move(os.path.join(root, filename), os.path.join(output_dir, filename))
但在服务器中尝试直接运行失败
之后就可以直接使用example,或使用keras中的ImageDataGenerator
的flow_from_directory
方法或是pytorch中的torchvision.datasets.ImageFolder
来读取数据