Jetson TX2开发全纪录4-图像识别&摄像头目标识别(TF版)

工程是基于Jetpack3.2, 在原工程的基础上增加摄像头的识别和分类。

  1. 安装pip
sudo apt-get install python-pip
  1. 安装Tensorflow.

    1. 百度网盘下载两个文件
      https://pan.baidu.com/s/1pyLiI3za-L8oeZD_SvE3kA
    2. 安装
sudo pip install tensorflow-1.5.0rc0-cp27-cp27mu-linux_aarch64.whl

安装uff 库

tar -xzf TensorRT-3.0.4.Ubuntu-16.04.3.x86_64.cuda-9.0.cudnn7.0.tar.gz
sudo pip install TensorRT-3.0.4/uff/uff-0.2.0-py2.py3-none-any.whl
  1. 克隆代码,编译(很快编完)
    git clone --recursive https://github.com/307509256/tf_to_trt_image_classification.git
    cd tf_to_trt_image_classification
    mkdir build
    cd build
    cmake ..
    make 
    cd ..

Note: 代码编译完毕,接下来才是重点,先下载tensorflow的模型文件,通过两次转化成TensorRT能跑的权重文件,然后摄像头的识别。

  1. 下载模型文件
source scripts/download_models.sh

这个脚本会自动解压(.gz 变成 .ckpt),可能花费两小时(平均网速是500KB/s), 建议全部下载完,否则后续脚本会提示找不到某某文件, 跑完数下有没有遗漏,有遗漏的话去 scripts/download_models.sh把下载好的链接删掉,再跑这个脚本,直到全部下完,如果不删除又会重新下载, 建议下班挂机下载)。

  1. 转换成tensorflow常用的frozen_graphs格式(.ckpt 变成 .pb)

代码查看 scripts/models_to_frozen_graphs.py

python scripts/models_to_frozen_graphs.py

可以在data/frozen_graphs/下查看文件

  1. 转换 frozen graph 成 TensorRT 引擎模型(.pb 变成 .plan)
    查看代码 scripts/convert_plan.py
    举个例子,转换Inception V1 模型
python scripts/convert_plan.py data/frozen_graphs/inception_v1.pb data/plans/inception_v1.plan input 224 224 InceptionV1/Logits/SpatialSqueeze 1 0 float

也可以转换Inception V4 模型, 注意 模型的尺度变成了299,每个模型参数都不一样,具体参考那个图表

python scripts/convert_plan.py data/frozen_graphs/inception_v4.pb data/plans/inception_v4.plan input 299 299 InceptionV4/Logits/Logits/BiasAdd 1 0 float

转换resnet_v2_152 模型, 准确率高,是我要用的模型!

python scripts/convert_plan.py data/frozen_graphs/resnet_v2_152.pb data/plans/resnet_v2_152.plan input 299 299 resnet_v2_152/SpatialSqueeze 1 0 float
  1. 测试摄像头,我用的是外置usb 摄像头(罗技)
    在代码里的
93  VideoCapture cap;
94  cap.open(1);  //如果摄像头序号不是1,可以修改并重新make

用opencv开启摄像头,把每一帧图片交给resnet模型去识别
执行下列脚本就可以跑了:

source resnet_v2_152.sh  #关闭可以按‘Esc’键,代码classify_image.cu

Note:
如果要跑单张图片的识别, 查看原始的图像识别代码,我还有保留, 可以对比看改动,classify_image_old.cu替换掉classify_image.cu重新编译。


后记:
最后一步source resnet_v2_152.sh,遇到opencv打不开摄像头的情况,后来我升级到opencv3.4.0( 默认的Jetpack 3.2安装是opencv3.3.1),其实并非一定要升级,先检查下当前opencv的环境(PKG_CONFIG_PATH等),先找个opencv的demo跑跑;

默认的opencv的库是在/usr/lib下
如果第三方安装,那是在/usr/local/lib下,

如果实在不行, 需要重新编译opencv3.4.0的话:
参考我的另一篇文章:Jetson TX2开发全纪录2-手动安装opencv3.4.0

你可能感兴趣的:(Jetson TX2开发全纪录4-图像识别&摄像头目标识别(TF版))