TensorFlow 2 Object Detection API 物体检测教程 (1)- 环境搭建与测试

2年前我在csdn上原创了Tensorflow object detection API 的教程,获得了很多好评。

原博客地址:https://blog.csdn.net/dy_guox/article/details/79081499

原视频地址: https://www.bilibili.com/video/BV1tW411T7ei/

至今仍有读者留言提问,现在Tensorflow已经发布2.0版本,使用旧版教程会有很多兼容问题,由于时间精力有限,没有办法一一回答,所以另开一篇博客介绍TF2.0的物体检测教程。

 

1.开发环境搭建

Tensorflow 2.0 系统要求

  • Target Software versions

    OS

    Windows, Linux

    Python

    3.8

    TensorFlow

    2.2.0

    CUDA Toolkit

    10.1

    CuDNN

    7.6.5

    Anaconda

    Python 3.7 (Optional)

 

 

内存:不能太小

CPU:够用就行

GPU:关键,https://developer.nvidia.com/cuda-gpus 查看GPU适用性

总之,需要一台配置不低的电脑。

Tensorflow 2.0 不分 tensorflow 跟tensorflow-gpu。

注意对应的各种软件版本(https://www.tensorflow.org/install/source#tested_build_configurations)。

(1) 安装Python

跟1.0教程一样,推荐Anaconda版本,便于进行版本管理。

  •  https://www.anaconda.com/products/individual 下载

  • 选择64位或者32位系统

  • 安装时选择 “Add Anaconda3 to my PATH environment variable”, 将Anaconda Python作为系统默认版本

接下来创建一个单独的conda环境

  • 开始菜单 - Anaconda 3- Anaconda Prompt
  • 创建一个名为‘tensorflow’的新环境,Python 3.8版本
conda create -n tensorflow pip python=3.8
  • 然后激活此环境
conda activate tensorflow
  • 这样在命令前会有环境的名字,如:
(tensorflow) C:\Users\xxx>
  • 所有新的python插件安装都在此环境(Terminal)下进行。

(2)安装Tensorflow

在之前的环境中,通过命令行安装

pip install --ignore-installed --upgrade tensorflow==2.2.0

安装好以后,输入

python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
2020-06-22 19:20:32.620571: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2020-06-22 19:20:35.027232: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2020-06-22 19:20:35.060549: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1561] Found device 0 with properties:
pciBusID: 0000:02:00.0 name: GeForce GTX 1070 Ti computeCapability: 6.1
coreClock: 1.683GHz coreCount: 19 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2020-06-22 19:20:35.074967: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
2020-06-22 19:20:35.084458: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cublas64_10.dll'; dlerror: cublas64_10.dll not found
2020-06-22 19:20:35.094112: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cufft64_10.dll'; dlerror: cufft64_10.dll not found
2020-06-22 19:20:35.103571: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'curand64_10.dll'; dlerror: curand64_10.dll not found
2020-06-22 19:20:35.113102: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cusolver64_10.dll'; dlerror: cusolver64_10.dll not found
2020-06-22 19:20:35.123242: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cusparse64_10.dll'; dlerror: cusparse64_10.dll not found
2020-06-22 19:20:35.140987: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-06-22 19:20:35.146285: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1598] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.
Skipping registering GPU devices...
2020-06-22 19:20:35.162173: I tensorflow/core/platform/cpu_feature_guard.cc:143] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2020-06-22 19:20:35.178588: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x15140db6390 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-06-22 19:20:35.185082: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2020-06-22 19:20:35.191117: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-06-22 19:20:35.196815: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1108]
tf.Tensor(1620.5817, shape=(), dtype=float32)

可以得到以上类似的输出。

目前只是CPU版本,如果需要GPU版本,仍然需要安装其他插件。

(2.1)安装Tensorflow GPU 版本

GPU版本系统要求(假设使用的3.8版本python):

Prerequisites

Nvidia GPU (GTX 650 or newer)

CUDA Toolkit v10.1

CuDNN 7.6.5

安装 CUDA Toolkit

https://developer.nvidia.com/cuda-toolkit-archive 选择对应版本 10.1,具体安装教程见 https://docs.nvidia.com/cuda/archive/10.1/cuda-installation-guide-microsoft-windows/index.html

安装 CUDNN

  • 进入 https://developer.nvidia.com/rdp/cudnn-download

  • 创建帐号,登录

  • 选择 cuDNN v7.6.5 (Nov 5, 2019), for CUDA 10.1 对应CUDA版本

  • 下载 cuDNN v7.6.5 Library for Windows 10

  • 解压 zip 文件到 CUDA安装目录 \NVIDIA GPU Computing Toolkit\CUDA\v10.1\,   默认一般为 C:\Program Files.

设置环境变量

开始菜单搜索 ‘environment variables’ 或者‘系统变量’ , 或者桌面右键‘此电脑’- 属性-高级-环境变量

在系统变量中找到'PATH',编辑,加入以下路径( 默认一般为 C:\Program Files):

  • \NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin

  • \NVIDIA GPU Computing Toolkit\CUDA\v10.1\libnvvp

  • \NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\CUPTI\libx64

  • \NVIDIA GPU Computing Toolkit\CUDA\v10.1\cuda\bin

更新显卡驱动(N卡)

http://www.nvidia.com/Download/index.aspx下载更新驱动

此时最好重启一下电脑。

再次激活anaconda ‘tensorflow’环境, 输入

python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

得到类似输出

2020-06-22 20:24:31.355541: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2020-06-22 20:24:33.650692: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2020-06-22 20:24:33.686846: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1561] Found device 0 with properties:
pciBusID: 0000:02:00.0 name: GeForce GTX 1070 Ti computeCapability: 6.1
coreClock: 1.683GHz coreCount: 19 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2020-06-22 20:24:33.697234: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2020-06-22 20:24:33.747540: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2020-06-22 20:24:33.787573: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2020-06-22 20:24:33.810063: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2020-06-22 20:24:33.841474: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2020-06-22 20:24:33.862787: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2020-06-22 20:24:33.907318: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-06-22 20:24:33.913612: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1703] Adding visible gpu devices: 0
2020-06-22 20:24:33.918093: I tensorflow/core/platform/cpu_feature_guard.cc:143] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2020-06-22 20:24:33.932784: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x2382acc1c40 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-06-22 20:24:33.939473: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2020-06-22 20:24:33.944570: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1561] Found device 0 with properties:
pciBusID: 0000:02:00.0 name: GeForce GTX 1070 Ti computeCapability: 6.1
coreClock: 1.683GHz coreCount: 19 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2020-06-22 20:24:33.953910: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2020-06-22 20:24:33.958772: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2020-06-22 20:24:33.963656: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2020-06-22 20:24:33.968210: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2020-06-22 20:24:33.973389: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2020-06-22 20:24:33.978058: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2020-06-22 20:24:33.983547: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-06-22 20:24:33.990380: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1703] Adding visible gpu devices: 0
2020-06-22 20:24:35.338596: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-06-22 20:24:35.344643: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1108]      0
2020-06-22 20:24:35.348795: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1121] 0:   N
2020-06-22 20:24:35.353853: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1247] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6284 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1070 Ti, pci bus id: 0000:02:00.0, compute capability: 6.1)
2020-06-22 20:24:35.369758: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x2384aa9f820 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:
2020-06-22 20:24:35.376320: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): GeForce GTX 1070 Ti, Compute Capability 6.1
tf.Tensor(122.478485, shape=(), dtype=float32)

包含GPU信息,说明GPU版本已经安装成功。

 

(3)下载Tensorflow object detection API 

https://github.com/tensorflow/models

从github上下载项目(右上角“Clone or download”-"DownloadZIP"),下载到本地目录(避免中文),解压

 

(4)Protobuf 安装与配置

在 https://github.com/google/protobuf/releases  网站中选择windows 版本(最下面),解压后将bin文件夹中的【protoc.exe】放到C:\Windows

 

在models\research\目录下打开命令行窗口,输入:

 

# From tensorflow/models/
protoc object_detection/protos/*.proto --python_out=.

在这一步有时候会出错,可以尝试把/*.proto 这部分改成文件夹下具体的文件名,一个一个试,每运行一个,文件夹下应该

出现对应的.py结尾的文件。不报错即可

(5) COCO API 安装

 TensorFlow 2 需要安装COCO API,而且最好在 object detection api之前安装,不然很有可能报错。

在安装COCO API之前,还需要确认已经安装 

Visual C++ 2015 Build Tools https://go.microsoft.com/fwlink/?LinkId=691126

 

然后在tensorflow环境终端输入

pip install cython
pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI

(6) 安装Tensorflow object detection API 

tensorflow环境终端 cd 到对应路径
# From within TensorFlow/models/research/
cp object_detection/packages/tf2/setup.py .
python -m pip install .

(7) 检验安装是否成功

输入

# From within TensorFlow/models/research/
python object_detection/builders/model_builder_tf2_test.py

如果出现以下信息说明安装成功

[       OK ] ModelBuilderTF2Test.test_create_ssd_models_from_config
[ RUN      ] ModelBuilderTF2Test.test_invalid_faster_rcnn_batchnorm_update
[       OK ] ModelBuilderTF2Test.test_invalid_faster_rcnn_batchnorm_update
[ RUN      ] ModelBuilderTF2Test.test_invalid_first_stage_nms_iou_threshold
[       OK ] ModelBuilderTF2Test.test_invalid_first_stage_nms_iou_threshold
[ RUN      ] ModelBuilderTF2Test.test_invalid_model_config_proto
[       OK ] ModelBuilderTF2Test.test_invalid_model_config_proto
[ RUN      ] ModelBuilderTF2Test.test_invalid_second_stage_batch_size
[       OK ] ModelBuilderTF2Test.test_invalid_second_stage_batch_size
[ RUN      ] ModelBuilderTF2Test.test_session
[  SKIPPED ] ModelBuilderTF2Test.test_session
[ RUN      ] ModelBuilderTF2Test.test_unknown_faster_rcnn_feature_extractor
[       OK ] ModelBuilderTF2Test.test_unknown_faster_rcnn_feature_extractor
[ RUN      ] ModelBuilderTF2Test.test_unknown_meta_architecture
[       OK ] ModelBuilderTF2Test.test_unknown_meta_architecture
[ RUN      ] ModelBuilderTF2Test.test_unknown_ssd_feature_extractor
[       OK ] ModelBuilderTF2Test.test_unknown_ssd_feature_extractor
----------------------------------------------------------------------
Ran 20 tests in 68.510s

OK (skipped=1)

 

2.测试自带案例

打开Jupyter Notebook,

models/research/object_detection/colab_tutorials/inference_tf2_colab.ipynb

测试自带案例。更多应用例子及拓展功能可以参考考 https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2.md

 

 

参考资料:

【1】 https://github.com/tensorflow/models/tree/master/research/object_detection#:~:text=The%20TensorFlow%20Object%20Detection%20API%20is%20an%20open,and%20we%20hope%20that%20you%20will%20as%20well.

【2】https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/

你可能感兴趣的:(物体检测,Tensorflow)