NVIDIA TAO 工具包 (TAO Toolkit) 的部署和使用
前期准备
tao-launcher 严格来说是一个只支持python3的包,能够在python3.6.9或3.7上运行。
安装docker-ce
参考:https://docs.docker.com/engine/install/
确保docker可以在没有sudo的情况下运行。
安装nvidia-container-toolkit
参考:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html
获取NGC帐户和API密钥
进入网页:https://developer.nvidia.com/zh-cn/tao-toolkit
点击右上角注册登录:
然后点击右上角,进入setup:
然后按照对应的指令安装:
$ wget -O ngccli_linux.zip https://ngc.nvidia.com/downloads/ngccli_linux.zip && unzip -o ngccli_linux.zip && chmod u+x ngc
$ md5sum -c ngc.md5
$ echo "export PATH=\"\$PATH:$(pwd)\"" >> ~/.bash_profile && source ~/.bash_profile
接下来需要获取AIPKEY
,回到上面图片的页面
获取到KEY之后,继续执行
$ ngc config set
然后依次输入:
然后输入:
$ docker login nvcr.io
然后根据API-KEY页面下Docker下的显示输入,看到success 就成功了
Tao Toolkit
安装Tao Toolkit
使用VirtualEnvRapper创建新的virtualenv
Linux 下创建python的虚拟环境
安装virtualenv:
pip install virtualenv
创建虚拟环境:
virtualenv venv #venv为虚拟环境目录名,目录名自定义
source venv/bin/activate
安装TAO启动程序Python包nvidia-tao
进入虚拟环境,安装tao
pip3 install nvidia-pyindex
pip3 install nvidia-tao
tao --help
出现:
运行Tao Toolkit
下载Computer Vision examples
wget --content-disposition https://api.ngc.nvidia.com/v2/resources/nvidia/tao/cv_samples/versions/v1.2.0/zip -O cv_samples_v1.2.0.zip
unzip -u cv_samples_v1.2.0.zip -d ./cv_samples_v1.2.0 && rm -rf cv_samples_v1.2.0.zip && cd ./cv_samples_v1.2.0
安装jupyter
pip3 install jupyter
生成配置文件
jupyter notebook --generate-config
生成秘钥,打开python解释器
$:python
>>>from notebook.auth import passwd
>>>passwd()
#输入新的登陆密码(本地访问的时候使用)
#再次确认
#生成key,复制留存并修改到配置文件中去。ubuntu终端中ctrl+shift+C复制,ctrl+shift+V粘贴
exit()退出python环境
修改配置文件(编辑器自行选择,可以是gedit、nano等,这里使用vim)
vim ~/.jupyter/jupyter_notebook_config.py
修改配置文件中一下内容,去掉注释后保存,配置文件默认都是注释掉的,如果找不到一下内容,那就直接在文件头输入保存即可。
c.NotebookApp.ip='*' # 就是设置所有ip地址皆可访问
#或者c.NotebookApp.ip='0.0.0.0'
c.NotebookApp.password ="复制的那个密文key 替换等号后面的内容"
保存退出
执行命令:jupyter notebook
在本地浏览器输入服务器地址+端口号
密码是之前在python解释器环节自己设置的
路径
我的路径及虚拟环境如下:
cd /data/home/trainee/tao/
source venv/bin/activate
登录Docker容器
(venv) trainee@inspur-dev:~/tao$ docker login nvcr.io
----------------------输入用户名和密码------------------------------
WARNING! Your password will be stored unencrypted in /data/home/trainee/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
模型下载
查看所有模型
查看所有对话式 AI 模型,命令如下:
(venv) trainee@inspur-dev:~/tao$ ngc registry model list nvidia/tlt-riva/*
----------------------------------------------------
[{
"application": "Riva",
"builtBy": "NVIDIA",
"createdDate": "2021-07-30T16:02:07.759Z",
"description": "Base English n-gram LM trained on LibriSpeech, Switchboard and Fisher",
"displayName": "Riva ASR English LM",
"framework": "Riva",
"isPublic": true,
"labels": [
{
"key": "builtBy",
"values": [
"NVIDIA"
]
},
{
"key": "framework",
"values": [
"Riva"
]
},
{
"key": "precision",
"values": [
"n/a"
]
},
{
"key": "publisher",
"values": [
"NVIDIA"
]
}
],
"latestVersionIdStr": "deployable_v1.0",
"latestVersionSizeInBytes": 7932483714,
"logo": "https://raw.githubusercontent.com/kbojo/images/master/Nvidia-Centric-TLT-Riva.png",
"modelFormat": "ARPA",
"name": "speechtotext_english_lm",
"orgName": "nvidia",
"precision": "n/a",
"publisher": "NVIDIA",
"teamName": "tlt-riva",
"updatedDate": "2021-11-16T22:07:59.681Z"
}]
指定模型下载
从 NGC 模型注册表下载选择的模型,命令如下:
ngc registry model download-version <ORG/model_name:version> -dest <path_to_download_dir>
例如,使用该命令将 resnet 18 分类模型下载到 /data/home/trainee/tao/models/
目录:
(venv) trainee@inspur-dev:~/tao$ ngc registry model download-version nvidia/tao/pretrained_classification:resnet18 --dest models
----------------------------------------------------
{
"download_end": "2022-01-20 06:43:53.403896",
"download_start": "2022-01-20 06:43:25.363507",
"download_time": "28s",
"files_downloaded": 1,
"local_path": "/data/home/trainee/tao/models/pretrained_classification_vresnet18",
"size_downloaded": "82.38 MB",
"status": "Completed",
"transfer_id": "pretrained_classification_vresnet18"
}
使用 Jupyter Notebook 进行训练
安装Python虚拟环境
安装virtualenv
(venv) trainee@inspur-dev:~/tao$ pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple/
安装virtualenvwrapper
(venv) trainee@inspur-dev:~/tao$ pip install virtualenvwrapper -i https://pypi.tuna.tsinghua.edu.cn/simple/
查看python路径
(venv) trainee@inspur-dev:~/tao$ whereis python
----------------------------------------------------
python: /usr/bin/python3.8 /usr/bin/python3.8-config /usr/lib/python2.7 /usr/lib/python3.8 /usr/lib/python3.9 /etc/python3.8 /usr/local/lib/python3.8 /usr/include/python3.8 /data/home/trainee/tao/venv/bin/python /data/home/trainee/tao/venv/bin/python3.8
添加环境变量
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.8
显示所有环境变量
export
mkvirtualenv launcher -p /usr/bin/python3.8
车牌检测
准备数据集
下载LPD模型以及数据集
LPD网络模型下载链接:https://catalog.ngc.nvidia.com/?filters=&orderBy=scoreDESC&query=LPD
$ git clone https://github.com/openalpr/benchmarks benchmarks
下载lpd_prepare_data.py文件
调整数据集图像/标签大小
$ python lpd_prepare_data.py --input_dir benchmarks/endtoend/us --output_dir lpd --target_width 640 --target_height 480
将结果保存至/data/home/trainee/tao/lpd/
文件夹
分割数据集
- 将.tao_mounts.json文件复制到
/data/home/trainee/
文件夹下,.tao_mounts.json文件的内容如下:
{
"Mounts": [
{
"source": "/home/<username>/tao-experiments",
"destination": "/workspace/tao-experiments"
},
{
"source": "/home/<username>/openalpr",
"destination": "/workspace/openalpr"
}
]
}
- 将数据分成两部分:80% 用于训练集,20% 用于验证集。运行以下命令随机拆分数据集并生成 tfrecords。
tao detectnet_v2 dataset_convert -d /workspace/openalpr/SPECS_tfrecord.txt -o /workspace/openalpr/lpd_tfrecord/lpd
配置规范文件
将批量大小设置为 4 并运行 120 个 epoch 进行训练。每 10 个 epoch 使用验证集对训练模型进行评估。
训练
$ tao detectnet_v2 train -e /workspace/openalpr/SPECS_train.txt -r /workspace/openalpr/exp_unpruned -k nvidia_tlt
训练完成后,得到如下文件夹
导出模型
$ tao detectnet_v2 export -m /workspace/openalpr/exp_unpruned/weights/model.tlt -o /workspace/openalpr/export/unpruned_model.etlt --cal_cache_file /workspace/openalpr/export/calibration.bin -e /workspace/openalpr/ SPECS_train.txt -k nvidia_tao --cal_image_dir /workspace/openalpr/lpd/data/image --data_type int8 --batch_size 4 --batches 10 --engine_file /workspace/openalpr/export/unpruned_int8.trt
训练LPD模型的正确性
$ tao detectnet_v2 evaluate -m /workspace/openalpr/exp_unpruned/weights/model.tlt -k nvidia_tao -e /workspace/openalpr/SPECS_train.txt
车牌识别
下载LPR模型以及数据集
LPD网络模型下载链接:https://catalog.ngc.nvidia.com/?filters=&orderBy=scoreDESC&query=LPD
$ git clone https://github.com/openalpr/benchmarks benchmarks
数据预处理
python preprocess_openalpr_benchmark.py --input_dir=./benchmarks/endtoend/us --output_dir=./data/openalpr
将得到 train文件夹 和 val文件夹
训练
$ tao lprnet train -e /workspace/tao-experiments/lprnet/tutorial_spec.txt -r /workspace/tao-experiments/lprnet/ -k nvidia_tao -m /workspace/tao-experiments/lprnet/us_lprnet_baseline18_trainable.tlt
模型转换
查看处理器架构
$ uname -m
下载tao-converter
根据自己的平台架构和所需要的环境下载下载tao-converter,链接如下:
NVIDIA官网:https://developer.nvidia.com/tao-toolkit-get-started
安装libssl-dev
$ sudo apt-get install libssl-dev
配置环境变量
对于X86平台
$ export TRT_LIB_PATH="/usr/lib/x86_64-linux-gnu"
$ export TRT_INC_PATH="/usr/include/x86_64-linux-gnu"
对于aarch平台
$ export TRT_LIB_PATH=/usr/lib/aarch64-linux-gnu
$ export TRT_INCLUDE_PATH=/usr/include/aarch64-linux-gnu
运行 tao-converter(tlt模型转engine)
./tao-converter -k nvidia_tlt -p image_input,1x3x48x96,4x3x48x96,16x3x48x96 models/LP/LPR/ch_lprnet_baseline18_deployable.etlt -t fp16 -e models/LP/LPR/lpr_ch_onnx_b16.engine
模型推理
$ make
执行make
命令之后如果报错,可参考https://blog.csdn.net/qq_44824148/article/details/122841870?spm=1001.2014.3001.5502这篇博客。
将视频复制/home/inspur/deepstream_lpr_app-master/deepstream-lpr-app/
文件夹下,
$ cd deepstream-lpr-app
$ cp dict_ch.txt dict.txt
$ sudo ./deepstream-lpr-app 2 2 0 ch_car_test.mp4 output.264