可以用组里的显卡采数据了!怕自己忘了怎么弄,在这里记录一下。
Carla transfuser 数据采集
transfuser
的数据采集脚本在 leaderboard/scripts/datagen.sh
,readme原文如下:
Data generation
In addition to the dataset itself, we have provided the scripts for data generation with our autopilot agent. To generate data, the first step is to launch a CARLA server:
./CarlaUE4.sh --world-port=2000 -opengl
For more information on running CARLA servers (e.g. on a machine without a display), see the official documentation. Once the server is running, use the script below for generating training data:
./leaderboard/scripts/datagen.sh <carla root> <working directory of this repo (*/transfuser/)>
The main variables to set for this script are SCENARIOS
and ROUTES
.
实际上在运行脚本时terminal所在路径并不重要,只要
-
运行
./CarlaUE4.sh --world-port=2000 -opengl
; -
运行
datagen.sh
,不用传入参数。
不过要确保 datagen.sh
中变量的正确性:
设置路径:
export CARLA_ROOT=${1:path/to/carla}
export WORK_DIR=${2:-/path/to/transfuser}
设置Town和Scenario:
export SCENARIOS=${WORK_DIR}/leaderboard/data/training/scenarios/Scenario10/Town05_Scenario10.json
export ROUTES=${WORK_DIR}/leaderboard/data/training/routes/Scenario10/Town05_Scenario10.xml
搬运文件
这时候就需要在带有显卡的服务器上跑自己的程序了。不过出现了一个小插曲:远程服务器的网络似乎不很顺畅,几乎没有办法用它自己下载任何东西。于是我们只好从自己的电脑传递文件过去。
由于可以使用 ssh
,于是使用 scp
进行传输。
传输文件夹(不建议):
scp -r /path/to/local/folder username@ipaddress:/path/to/remote/folder
其中 -r
表示 recursive
,即上传文件夹和文件夹里所有文件。注意,scp
会把这个文件夹传送到目标文件夹下,我忘了这一点所以叠了两个同名文件夹,有点搞笑。
更快的方法是在传输之前 压缩文件夹,直接传文件太慢了,尤其是在虚拟环境中有众多小文件的前提下。
压缩:
tar -czvf env_name.tar.gz -C ~/anaconda3/envs env_name
传输:
scp env_name.tar.gz username@remote_ip:/path/to/destination/
解压:
tar -xzvf /path/to/destination/env_name.tar.gz -C /path/to/desired/location/
首先本地下载了anaconda
的安装包等等文件,传输到了远程机器进行安装;
安装完毕之后,输入conda --version
可以成功显示版本号。之后就要迁移conda
环境了。
迁移虚拟环境
首先用 conda env list
查看本地 conda
虚拟环境都存储在了哪里,然后将这个文件夹传送到远程机器上去。
接着使用
conda config --append envs_dirs /path/to/env
这里注意,后面的路径应当是你传入的虚拟环境所在路径的上一个目录,因为这个命令的本质是增加 conda
存放虚拟环境的文件夹,而每个虚拟环境都是这个文件夹下的子文件夹。
这时候运行 conda env list
,就可以发现我们的新虚拟环境已经被添加,然后使用 conda activate
激活环境就可以使用了。
不过值得注意的是,新版 conda
取消了 conda activate
,需要用 source activate
替代。但是退出虚拟环境仍然是 conda deactivate
,十分神秘。
运行数据采集
然后就是按照上面的流程进行数据采集了。cd
到 transfuser
文件夹,首先运行 Carla
:
./carla/CarlaUE4.sh --world-port=2000 -opengl
然后运行数据采集脚本:
./leaderboard/scripts/datagen.sh
注意,当终端退出时,挂在 2000
端口的 Carla
不会停止。停止它的一种方法是在原终端直接 Ctrl + C
,另一种是直接杀掉进程。(可以使用 ps aux | grep Carla
获得进程号,然后 kill -9 <pid>
);
datagen
脚本比较烦人,对它进行 Ctrl + C
仅仅会停止当前组数据的采集,它还会开始下一组。直接关掉终端或者杀掉进程(ps aux | grep leaderboard
获得进程号)会比较管用。
为了在退出终端后程序可以继续运行,可以使用gnu screen
。我让 iris
一直运行使用的就是 screen
,可以说是打过不少交道了。
但是需要注意一下:screen
对 conda
虚拟环境的支持似乎存在bug,请在创建 screen
之前退出虚拟环境,在正确的路径下用 screen
创建虚拟屏幕之后再 conda activate
或者 source activate
,否则可能出现问题。
screen
常用指令:
-
screen
创建一个虚拟屏幕 -
screen -ls
查看已有的screen
列表; -
screen -r <sid>
将编号为sid
的虚拟屏幕连接到当前的终端窗口; -
screen -d <sid>
使编号为sid
的虚拟屏幕解除挂载; -
在虚拟屏幕里输入
exit
终止该虚拟屏幕。