在Jetson Nano配置Tensorflow Object Detection API
环境介绍
配置object detection api也是走了不少弯路,做个记录,仅供参考。
(下文将Tensorflow Object Detection API简称为OBJAPI)
版本 | |
---|---|
平台 | Jetson Nano |
Jetpack | 4.5.1 |
CUDA、cudnn | 10.1、8.0 |
Tensorflow | 2.3.1 |
TensorFlow Official Models | 2.3.0 |
准备工作
tensorflow的安装(略)
tensorflow安装照着nvidia的帮助文档即可:nvidia官方文档安装tensorflow
这里给出部分版本Tensorflow和Cuda的对应关系,在下载的时候注意版本的选择
版本 | Python 版本 | 编译器 | 构建工具 | cuDNN | CUDA |
---|---|---|---|---|---|
tensorflow-2.4.0 | 3.6-3.8 | GCC 7.3.1 | Bazel 3.1.0 | 8.0 | 11.0 |
tensorflow-2.3.0 | 3.5-3.8 | GCC 7.3.1 | Bazel 3.1.0 | 7.6 | 10.1 |
tensorflow-2.2.0 | 3.5-3.8 | GCC 7.3.1 | Bazel 2.0.0 | 7.6 | 10.1 |
tensorflow-2.1.0 | 2.7、3.5-3.7 | GCC 7.3.1 | Bazel 0.27.1 | 7.6 | 10.1 |
tensorflow-2.0.0 | 2.7、3.3-3.8 | GCC 7.3.1 | Bazel 0.26.1 | 7.4 | 10.0 |
Probobuf的配置(编译OBJAPI需要)
参考官方的readme.md:probuf配置
- 安装依赖
sudo apt-get install autoconf automake libtool curl make g++ unzip
- 从github下载源码,进行编译
(如果是自己手动下载的源码,则跳过此步骤,我这里是手动下载的protobuf-all-3.17.3.tar.gz)
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
./autogen.sh
- make一下安装完成
./configure
make -j4
make check
sudo make install
sudo ldconfig # refresh shared library cache.
Tensorflow Object Detection API的配置
一开始装了2.5.0的,考虑到tensorflow2.5和cuda10.1可能存在不匹配关系,换回了2.3.0版本。
注意两个版本的安装差异很大,且2.5.0版本的OBJAPI配置略复杂,需要手动编译tensorflow addons库
本文下载了2.3.0版本的TensorFlow Official Models(对应tensorflow2.3.1)
配置过程(参考下载源码中的research/object_detection/g3ddoc/installation.md):
- 手动下载2.3.0版本资源:下载
- 装一些库(可以更换镜像源加快安装速度)
pip install --user Cython
pip install --user contextlib2
pip install --user pillow
pip install --user lxml
pip install --user jupyter
pip install --user matplotlib
pip install --user tf_slim
pip install --user pycocotools
- 使用Protobuf编译
没error就可以了
cd models/reseach/
protoc object_detection/protos/*.proto --python_out=.
- 将库的路径加到PYTHONPATH中
sudo vim ~/.bashrc
#在打开的vim中最下面一行追加,其中‘pwd’替换成model文件夹所在的绝对路径
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
#退出vim,使用source使得修改生效
source ~/.bashrc
- 测试一下,Nano内存不够,跑到最后会报错,但是环境已经配置成功了
cd models/reseach/
#tensorflow1.x的把tf2改成tf1即可
python3 object_detection/builders/model_builder_tf2_test.py