Noscope视频查询优化复现过程

阅读: 评论:0

Noscope视频查询优化复现过程

Noscope视频查询优化复现过程

Noscope是在2017年提出的大规模数据视频的查询算法,通过采取差分检测器对视频帧的提取极大地提升运行速度,并且在检测时使用的轻量级CNN算法也很好地加速,是一种很好的视频查询加速思路。
项目的github地址:noscope

Noscope实战教程

  • 基本环境配置要求
  • 1 环境安装
    • 1.1 安装tensorflow-gpu 0.12.0和keras 1.2
    • 1.2 安装带有ffmpeg的opencv3.2
    • 1.3 安装 bazel0.4.5
      • 安装教程:
      • 卸载bazel0.7.0 安装bazel0.4.5
  • 2 编译tensorflow-noscope
    • 2.1 运行./configure
    • 2.2 编译前步骤,很重要. **很重要!!!**
    • 2.3 使用bazel编译
  • 3 运行noscope
    • 3.1 安装noscope和对应的依赖包
    • 3.2 准备工作
    • 3.3 数据集下载
    • 3.4 运行noscope
  • 4 结果展示

基本环境配置要求

根据官方项目的要求,我们首先配置如下:
ubuntu 16.04 + cuda 8.0 + cudnn 5.1 + opencv 3.2 + gcc 5.4 + python 2.7+ bazel 0.4.5
如果懂得如何配置docker的话,也可以直接在docker hub上直接搜索noscope,上面有配好的镜像noscope的docker镜像(不过镜像里面有些需要改动的地方,具体修改方法参见下文安装方法,改动的地方是:1. 安装cudnn5.1,2. 卸载bazel0.7.0再重新安装bazel0.4.5, 3. 安装ffmpeg)

1 环境安装

确保系统中安装有ubuntu16.04 + python 2.7 + cuda 8.0 + cudnn 5.1。如果cuda和cudnn的安装不会的话可以参考cuda及对应的cudnn安装。

1.1 安装tensorflow-gpu 0.12.0和keras 1.2

确保安装好cuda后,进行以下命令的安装:

pip install tensorflow-gpu==0.12.0 keras==1.2

如果安装过程中没有错误,最后显示成功安装即完成。

1.2 安装带有ffmpeg的opencv3.2

参照官方给的安装教程:opencv3.2官方教程,不过有一些需要特别注意的地方。

  1. 如果使用上述docker镜像,则只需要独自安装ffmpeg即可,即sudo apt-get install ffmpeg
  2. 按照官方给的opencv安装方法,在对opencv进行编译时会有可能出错,具体的出错内容博主当时没有记录下来,因此需要自行百度对应的错误(在csdn上都能找到对应答案)。
  3. 还可以参考此博主的安装方法,opencv3.2安装。

1.3 安装 bazel0.4.5

bazel是一款用来编译tensorflow的工具。首先如果我们根据docker安装的话就要先卸载,否则就会出现版本不对的错误。进入tensorflow-noscope的目录,打开文件configure.py,在第967行可以发现系统会检查你的bazel版本是不是0.4.5,如图所示。

安装教程:

  1. 首先,下载bazel0.4.5,这个在github上可以找到,bazel 0.4.5。选择对应系统的版本下载,例如我的ubuntu16,选的是这个bazel-0.4.5-installer-linux-x86_64.sh。
  2. 下载好之后修改文件权限:chmod +x bazel-0.4.5-installer-linux-x86_64.sh
  3. 安装依赖的包:sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python
  4. 安装bazel:./bazel-0.4.5-installer-linux-x86_64.sh --user,后面加的–user是为了把其写入用户变量里。
  5. 检验bazel是否安装成功:bazel -h,如图出现对应的版本号即安装成功(也表明系统目前默认的bazel版本是0.4.5)。

    PS:如果安装时出现JAVA not found,

    那么就是我们的jdk没有安装,只需要sudo apt-get install openjdk-8-jdk安装对应的jdk再重新安装即可。

卸载bazel0.7.0 安装bazel0.4.5

如果你是使用上述的镜像,那么还需要做的一件事就是进行bazel的卸载再安装0.4.5版本的,否则后面配置是会报错。
卸载过程:

  1. 找到对应的bazel位置:find / -name bazel
  2. 上图红框里面是安装了bazel之后的文件,把对应目录下的文件都删除。
  3. 按照上面安装bazel0.4.5的步骤重新安装即可。

2 编译tensorflow-noscope

至此,必备的基本环境已经配齐了,下一步就是进行环境的编译。
按照官方的教程, 下载tensorflow-noscope。(在此贴一个下载加速的方法,在githubcom后面加上pmjs能快速下载),即git clone .git
因为有时在进行到git submodule update这一步时会出现无法连接到github的现象,因此可以在执行git submodule init之后打开tensorflow-noscope下的.gitmodules文件,对应上述加速github办法,如下图。

2.1 运行./configure

运行./configure。除了cuda,其他都可以选N,并且cudnn选择时,选上5。下图是我的过程,可以作为参考。

2.2 编译前步骤,很重要. 很重要!!!

  1. 进入tensorflow目录cd tensorflow
  2. 运行noscope 下的build.sh,即./noscope/build.sh(一定要运行,否则就会报很多错(比如crosstool_wrapper_driver_is_not_gcc failed: error executing command的错误),我搞了好几天。)
  3. 再运行darknet下的convert.sh,将.cu文件转化为.cu文件./noscope/darknet/convert.sh。否则会出现’//tensorflow/noscope/darknet:src/activation_kernels.cu’ is misplaced here (expected , .cpp, .cxx, .c++, .C, .c, .h, .hh, .hpp, .hxx, .inc, .S, .s, .asm, .a, .lib, .pic.a, .lo, .pic.lo, .so, .dylib, .dll, .o or .pic.o). Since this rule was created by the macro ‘tf_kernel_library’, the error might have been caused by the macro的错误。
  4. 将tensorflow/noscope/BUILD中的"/lfs/0/ddkang/"改成“/usr/”,如图所示。

2.3 使用bazel编译

完成上述的编译前步骤之后就可以进行编译了。bazel build -c opt --copt=-mavx2 --config=cuda noscope
编译过程中如果出现找不到darknet.h的错误,请把此文件从include复制到src,即cp include/darknet.h src/
编译的过程需要挺长时间的,如果最后没有看到EEROR,那么说明编译就成功了。

3 运行noscope

3.1 安装noscope和对应的依赖包

  1. 安装noscope:pip install -e ./
  2. 安装对应依赖包:pip install -

3.2 准备工作

  1. 在noscope项目同目录下创立data,再在data里创建videos, csv, cnn-avg, cnn-models, experiments
mkdir data
cd data
mkdir videos csv cnn-avg cnn-models experiments
  1. 下载yolo.weights文件,放置到tensorflow-noscope/tensorflow/noscope/darknet/weights下,下载连接为weights。
  2. 修改example下的run.sh文件,将CODE_DIR和对应的DATA_DIR进行修改,改为自己存放的目录,如图。

    将不是自己的数据集进行注释,如图。

将46行的examples改为example,如图。

3.3 数据集下载

我是根据data官方的数据集跑的,使用的是jackson-town-square。将对应的.mp4文件放置在data下的videos里,将.csv文件放置在csv目录下。至此,准备工作结束。
PS:官方数据集下载会存在这样那样的问题,可以到此处下载。

3.4 运行noscope

在noscope目录下,运行命令:example/run.sh,接下来就是漫长的等待了。

4 结果展示

在运行结束后,输出文件会自动存在experimens中的对应视频名字目录下,例如,我的summary.csv。

此外,在不同的帧间隔下有不同的检测结果,Noscope都把它们写入CSV,而不是展示出来,例如我的:

Noscope是不会像YOLO那样描出物体检测的框框的,只有检测到的置信度和对应是否有检测到。

本文发布于:2024-01-31 17:50:17,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170669461830290.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:过程   视频   Noscope
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23