设为首页收藏本站

Jetson开发者

搜索
查看: 978|回复: 0

如何在Jetson TX2上用Python捕获摄像头影像,并用Caffe进行推理

[复制链接]

116

主题

146

帖子

1884

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1884
发表于 2017-11-21 13:58:33 | 显示全部楼层 |阅读模式
Jetson TX2
本文转载自JK Jung的帖子:https://jkjung-avt.github.io/tx2-camera-caffe/ 如果有侵犯到贴主利益,请立刻跟我联系。

之前,贴主分享了一个python脚本,它可以用来在Jetson TX2上捕捉和显示来自相机(IP、USB或板载)的实时视频。在这里,贴主继续扩展了这个脚本,并展示了如何在捕获的相机映像上运行Caffe图像分类(推断),这些都是在python代码中完成的。这tegra-cam-caffe.py sample应该适合快速验证您的新训练的Caffe图像分类模型,用于原型,或者用实时摄像机输入构建Caffe演示程序。
我主要是在Jetson TX2的python 3测试了代码,不过我认为在Jetson TX1上用Python 2也是可以的。

准备工作:
  • 参考前面的帖子:如何利用Python在Jetson TX2上抓取和显示摄像头影像  ,确认tegra-cam.py 在你的Jetson TX2上运行是OK的。
  • 在Jetson TX2安装Caffe,你可以使用BVLC Caffe, NVIDIA Caffe 或者其它你喜欢的Caffe.
  • 我的python代码假设构建的Caffe代码位于/ home/nvidia/ Caffe。为了使用defaultbvlc_reference_caffenet模型运行脚本,您必须下载预先训练的权重和标签:
$ cd /home/nvidia/caffe$ ./scripts/download_model_binary.py ./models/bvlc_reference_caffenet$ ./data/ilsvrc12/get_ilsvrc_aux.sh

参考:
How to run the Tegra camera Caffe sample code:
$ python3 tegra-cam-caffe.py --help

  • 使用默认的bvlc_reference_caffenetmodel使用Jetson机载相机(python程序的默认行为)来进行Caffe图像分类。
$ python3 tegra-cam-caffe.py

  • 使用USB网络摄像头 /dev/video1 ,同时分辨率设置为 1280x720.
$ python3 tegra-cam-caffe.py --usb --vid 1 --width 1280 --height 720

  • 或者使用IP摄像头.
$ python3 tegra-cam-caffe.py --rtsp --uri rtsp://admin:XXXXXX@192.168.1.64:554

  • 用板载摄像机对不同的Caffe模型进行图像分类。
  1. $ python3 tegra-cam-caffe.py --prototxt XXX.prototxt \
  2.                              --model YYY.caffemodel \
  3.                              --labels ZZZ.txt \
  4.                              --mean UUU.binaryproto
复制代码

当我用一个USB相机和一个菠萝图片测试代码时,默认的bvlc_reference_caffenet说它百分之百肯定(概率~ 1.0)图像是一个菠萝!
接下来,我试着用一种受过NVIDIA数字训练的Caffe模型进行测试。更具体地说,我用“Caltech 101”数据集训练了一个AlexNet,正如在NVIDIA QuikLabs课程中提到的那样:图像分类与数字。这个免费的quicklab课程非常不错的一点是,你可以使用NVIDIA数字的K520 GPU云服务器2小时的访问,完全免费。通过“Caltech 101”数据集成功地培训了一个AlexNet模型(我刚刚训练了30个具有普通SGD和默认学习速率的模型),然后我下载了最后一个培训时代的模型快照:20171022 - 025612-7b04_epoch_30.0.tar.gz。这是快照tarball中的文件列表。
info.json
labels.txt
mean.binaryproto
original.prototxt
snapshot_iter_1620.caffemodel
solver.prototxt
train_val.prototxt

(这个培训课程目前NV也在各大城市开展过,大家可以关注一下本论坛的培训通知)
然后我用下面的命令验证了这个训练的Caffe模型。在训练过程中,日志显示这个训练有素的模型的精度仅在67.5%左右(用于对101个对象分类)。在测试时,我确实发现这个模型在许多测试映像上工作得很差。但无论如何,我设法让这个模型正确地将“pegion”的图片分类。
  1. $ python3 ./tegra-cam-caffe.py --usb --vid 1 --crop \
  2.                                --prototxt alexnet/deploy.prototxt \
  3.                                --model alexnet/snapshot_iter_1620.caffemodel \
  4.                                --labels alexnet/labels.txt \
  5.                                --mean alexnet/mean.binaryproto \
  6.                                --output softmax
复制代码

顺便说一下,如果你想用一个为灰度图像输入(例如LeNet)训练的Caffe模型来运行代码,你就必须修改python代码,将输入的相机图像转换成灰度,然后再将它们送到Caffe transformer进行处理。比如: gray = cv2.cvtColor(img_crop, cv2.COLOR_BGR2GRAY) and then net.blobs["data"].data[...] = transformer.preprocess("data", gray).
我没有使用各种相机或咖啡模型对这段代码做过很多测试。如果您发现代码有问题,请随时告诉我,我将尽快查看。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表