zoukankan      html  css  js  c++  java
  • tensorflow利用预训练模型进行目标检测(一):安装tensorflow detection api

    一、tensorflow安装

    首先系统中已经安装了两个版本的tensorflow,一个是通过keras安装的, 一个是按照官网教程https://www.tensorflow.org/install/install_linux#InstallingNativePip使用Virtualenv 进行安装的,第二个在根目录下,做标记以防忘记。

    安装教程:

    使用 Virtualenv 进行安装
    请按照以下步骤使用 Virtualenv 安装 TensorFlow:
    
    发出下列其中一条命令来安装 pip 和 Virtualenv:
    
    $ sudo apt-get install python-pip python-dev python-virtualenv # for Python 2.7
    $ sudo apt-get install python3-pip python3-dev python-virtualenv # for Python 3.n
    发出下列其中一条命令来创建 Virtualenv 环境:
    
    $ virtualenv --system-site-packages targetDirectory # for Python 2.7
    $ virtualenv --system-site-packages -p python3 targetDirectory # for Python 3.n
    targetDirectory 用于指定 Virtualenv 树的顶层目录。我们的指令假定 targetDirectory 为 ~/tensorflow,但您可以选择任何目录。
    
    通过发出下列其中一条命令激活 Virtualenv 环境:
    
    $ source ~/tensorflow/bin/activate # bash, sh, ksh, or zsh
    $ source ~/tensorflow/bin/activate.csh  # csh or tcsh
    $ . ~/tensorflow/bin/activate.fish  # fish
    执行上述 source 命令后,您的提示符应该会变成如下内容:
    
    (tensorflow)$ 
    确保安装了 pip 8.1 或更高版本:
    
    (tensorflow)$ easy_install -U pip
    发出下列其中一条命令以在活动 Virtualenv 环境中安装 TensorFlow:
    
    (tensorflow)$ pip install --upgrade tensorflow      # for Python 2.7
    (tensorflow)$ pip3 install --upgrade tensorflow     # for Python 3.n
    (tensorflow)$ pip install --upgrade tensorflow-gpu  # for Python 2.7 and GPU
    (tensorflow)$ pip3 install --upgrade tensorflow-gpu # for Python 3.n and GPU
    如果上述命令执行成功,请跳过第 6 步。如果上述命令执行失败,请执行第 6 步。
    
    (可选)如果第 5 步执行失败(通常是因为您所调用的 pip 版本低于 8.1),请通过发出以下格式的命令,在活动 Virtualenv 环境中安装 TensorFlow:
    
    (tensorflow)$ pip install --upgrade tfBinaryURL   # Python 2.7
    (tensorflow)$ pip3 install --upgrade tfBinaryURL  # Python 3.n 
    其中 tfBinaryURL 表示 TensorFlow Python 软件包的网址。tfBinaryURL 的正确值取决于操作系统、Python 版本和 GPU 支持。可在此处查找适合您系统的 tfBinaryURL 值。例如,如果您要为装有 Python 3.4 的 Linux 安装仅支持 CPU 的 TensorFlow,则发出以下命令以在活动 Virtualenv 环境中安装 TensorFlow:
    
    (tensorflow)$ pip3 install --upgrade 
    
     https://download.tensorflow.google.cn/linux/cpu/tensorflow-1.8.0-cp34-cp34m-linux_x86_64.whl
    如果您遇到任何安装问题,请参阅常见的安装问题。
    
    后续步骤
    安装 TensorFlow 后,请验证安装。
    
    请注意,每次使用 TensorFlow 时,您都必须激活 Virtualenv 环境。如果 Virtualenv 环境当前未处于活动状态,请调用以下命令之一:
    
     $ source ~/tensorflow/bin/activate      # bash, sh, ksh, or zsh
    $ source ~/tensorflow/bin/activate.csh  # csh or tcsh
    在 Virtualenv 环境激活后,您就可以从这个 shell 运行 TensorFlow 程序。您的提示符将变成如下所示,这表示您的 Tensorflow 环境已处于活动状态:
    
    (tensorflow)$ 
    用完 TensorFlow 后,可以通过发出以下命令调用 deactivate 函数来停用环境:
    
    (tensorflow)$ deactivate 
    提示符将恢复为您的默认提示符(由 PS1 环境变量所定义)。
    
    卸载 TensorFlow
    要卸载 TensorFlow,只需移除您创建的树即可。例如:
    
    $ rm -r targetDirectory 
    View Code

    二、detection api配置

    参考链接:https://www.jianshu.com/p/86894ccaa407 https://www.cnblogs.com/qcloud1001/p/7677661.html  https://lijiancheng0614.github.io/2017/08/22/2017_08_22_TensorFlow-Object-Detection-API/ 

    Tensorflow在更新1.0版本之后多了很多新功能,其中放出了很多用tf框架写的深度网络结构(https://github.com/tensorflow/models ),大大降低了开发难度,利用现成的网络结构,无论fine-tuning还是重新训练方便了不少。最近笔者终于跑通TensorFlow Object Detection API的ssd_mobilenet_v1模型,这里记录下如何完整跑通数据准备到模型使用的整个过程,相信对自己和一些同学能有所帮助。

    Object Detection API提供了5种网络结构的预训练的权重,全部是用COCO数据集进行训练,这五种模型分别是SSD+mobilenet、SSD+inception_v2、R-FCN+resnet101、faster RCNN+resnet101、faster RCNN+inception+resnet101。各个模型的精度和计算所需时间如下。下面及介绍下如何使用Object Detection去训练自己的模型。

    使用 git 克隆 models 部分到本地,在终端输入指令:

    $ git clone https://github.com/tensorflow/models.git

    使用 protoc 编译

            在 models/research 目录下的终端执行:

    $ protoc object_detection/protos/*.proto --python_out=.
    

    将 object_detection/protos/ 文件下的以 .proto 为后缀的文件编译为 .py 文件输出。

    出现老问题,本服务器中安装caffe时依赖的为低版本的protoc,但是tensorflow需要高版本的protoc,在编译时报错
    object_detection/protos/anchor_generator.proto:12:3: Expected "required", "optional", or "repeated".
    object_detection/protos/anchor_generator.proto:12:32: Missing field number.

    几个查看protobuf版本信息之类的命令

    查看哪些路径安装了protoc:

    whereis protoc

    可以看到系统中安装了两个protoc

    查看默认调用的protoc是哪个:

    which protoc

    查看默认的protoc的版本:

    protoc --version

    查看pip安装的protoc的信息:(我的话就显示我在anaconda下的3.5+的版本了)

    pip show protobuf

    可以看到系统中存在着两个版本的protoc,现在的问题是如何在不改变默认版本protoc的情况下, 调用高版本的对tensorflow进行编译

    根据https://blog.csdn.net/strangerzz/article/details/73850484,考虑新装一个protoc3.0.2版本,并软连接/usr/local/bin/protoc3.0.2,这样,当我使用protoc命令时,调用的还是2.5.0版本。当我使用protoc3.0.2命令时,调用的是protoc3.0.2版本。然后当编译其他软件时,如果需要不同的版本,在Makefile中指定具体的版本。待验证可行性

    安装protoc3.0.2
    进入源码所在路径(比如为$PROTO_HOME)

    cd $PROTO_HOME

    更换到指定版本

    git checkout v3.0.2

    配置编译后的输出路径(比如为$PROTOC_3_0_2)

    ./configure --prefix=$PROTOC_3_0_2

    编译

    sudo make 

    sudo make install

    制作软连接

    ln -s $PROTOC_3_0_2/bin/protoc /usr/local/bin/protoc3.0.2
    然后通过命令 protoc3.0.2 object_detection/protos/*.proto --python_out=. 进行编译

    问题解决,继续下一步

    配置环境变量

            在 .bashrc 文件中加入环境变量。首先打开 .bashrc 文件:

    $ sudo gedit ~/.bashrc
    

    然后在文件末尾加入新行:

    export PYTHONPATH=$PYTHONPATH:/.../models/research:/.../models/research/slim
    

    其中省略号所在的两个目录需要填写为 models/research 文件夹、models/research/slim 文件夹的完整目录。保存之后执行如下指令:

    $ source ~/.bashrc
    

    让改动立即生效。

    测试是否安装成功

            在 models/research 文件下执行:

    $ python/python3 object_detection/builders/model_builder_test.py
    

    如果返回 OK,表示安装成功

    不过出现问题

    Traceback (most recent call last):
      File "object_detection/builders/model_builder_test.py", line 23, in <module>
        from object_detection.builders import model_builder
      File "/home/yanjieliu/models/models/research/object_detection/builders/model_builder.py", line 22, in <module>
        from object_detection.builders import box_predictor_builder
      File "/home/yanjieliu/models/models/research/object_detection/builders/box_predictor_builder.py", line 21, in <module>
        from object_detection.predictors import convolutional_box_predictor
      File "/home/yanjieliu/models/models/research/object_detection/predictors/convolutional_box_predictor.py", line 19, in <module>
        from object_detection.core import box_predictor
      File "/home/yanjieliu/models/models/research/object_detection/core/box_predictor.py", line 137, in <module>
        class KerasBoxPredictor(tf.keras.Model):
    AttributeError: 'module' object has no attribute 'keras'
    View Code

    解决方法:https://blog.csdn.net/qq_41185868/article/details/82890428

    升级tensorflow到最新版本即可! pip install -U tensorflow 

    升级完之后是到了tensorflow-1.11.0版本

    但是之前在装keras的时候因为部分原因降到了1.2版本,现在升回来可能会出现问题。先这样吧

    安装完成。

    三、下载预训练模型

    根据:https://lijiancheng0614.github.io/2017/08/22/2017_08_22_TensorFlow-Object-Detection-API/  下载预训练模型

    # From tensorflow/models/object_detection/
    mkdir checkpoints
    cd checkpoints
    wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_11_06_2017.tar.gz
    tar zxf ssd_mobilenet_v1_coco_11_06_2017.tar.gz

    另外可到https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md下载预训练模型,将上边命令中的模型名更换一下即可

  • 相关阅读:
    智能推荐算法演变及学习笔记(三):CTR预估模型综述
    从中国农业银行“雅典娜杯”数据挖掘大赛看金融行业数据分析与建模方法
    智能推荐算法演变及学习笔记(二):基于图模型的智能推荐(含知识图谱/图神经网络)
    (设计模式专题3)模板方法模式
    (设计模式专题2)策略模式
    (设计模式专题1)为什么要使用设计模式?
    关于macOS上常用操作命令(持续更新)
    记录下关于RabbitMQ常用知识点(持续更新)
    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
    SpringCloud教程二:Ribbon(Finchley版)
  • 原文地址:https://www.cnblogs.com/vactor/p/9816039.html
Copyright © 2011-2022 走看看