目标检测之Tensorflow环境搭建
1.前言
最近有一个项目就是实现视频识别的,于是就空闲的时候把这个东西弄一下了。我在网上弄了很久,尝试了很久,解决了不知道多少个问题,最后终于算是找到了一个可以实现的例子,大部分也都是官方的指导方案进行操作的,期间还是解决了不少的问题的。还有TensorFlow Object Detection API —— 开箱即用的目标检测API这篇文章也是很有用的,这里还提供了一个视频检测代码,整个过程和代码写的比较详细,但是也是让我费了很久的力气,才把问题搞定了。如果不进行尝试下,都不知道这个到底有多难。我主要是在 window 上测试的,linux上的步骤应该差不多了。
【1】.TensorFlow Object Detection API Installation 这是官方指导文档
2.创建虚拟环境
必要的时候,创建一个虚拟环境
1 | # 查看 |
3.安装tensorflow
1 | # 安装 |
4.安装GPU
(1)安装 英伟达的驱动
(2)找到驱动对应的 CUDA Toolkit 安装,使用: nvcc -V 命令查看
(3)找到对应的 cuDNN 安装,官方 可查对应版本。解压刚才下载的cuDNN压缩包,得到三个文件夹,复制上面红框中的三个文件夹,并粘贴到CUDA的安装目录下,即刚才装CUDA的位置,配置cuDNN的环境变量。
(4)配置环境变量
配置如下的环境变量,就是 上面的几个安装路径,这里我暂时没有修改,其实应该改成自己的路径。
1 | <INSTALL_PATH>\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin |
(5)安装pytorch-cuda
每一个虚拟环境都需要安装,可以直接使用命令进行安装,这里注意 cudnn 的版本,Pytorch下载官网 里面有针对不同的版本提供的命令,比如我使用 “nvidia-smi” 命令查看到的 cuda 版本是 12.1 版本
1 | # 安装 pytorch |
(6)查看 gpu 是否可用。
1 | # 如果报错可以加下面两行 |
【1】.conda创建虚拟环境 和 用conda创建GPU的cuda、cudnn使用环境
【2】.conda安装gpu版pytorch后cuda调用失败 conda卸载pytorch,pip安装gpu版pytorch
【3】.ubuntu将虚拟环境中的cuda版本加入环境变量
【4】.如何查看 ananconda 的环境(虚拟环境)安装包位置
【5】.Windows11安装GPU版本的pytorch环境 1.查看电脑是否有最新显卡驱动并确定已安装。2.安装CUDA(需要找准GPU驱动版本与CUDA版本的对应关系进行选择)。3.安装cuDNN。4.安装anaconda及pycharm及配置。5.安装pytorch(一定要对应CUDA、CUDAA、Python的版本版本)。6.测试培养pytorch是否安装成功。
【6】.CUDA安装教程(超详细Windows版) 输入 nvidia-smi 回车得到以下窗口,这里的12.2就是驱动对应的最高版本,我们所安装的CUDA版本小于等于它即可,COUA下载官网(点击跳转) 选择任意版本号小于等于上述最高版本的即可。输入 nvcc -V (注意-前有空格)回车得到以下窗口,安装成功了!
【7】.【保姆级教程】Windows安装CUDA及cuDNN 查看是否存在CUDA的环境变量,如果没有,则添加,添加的内容就是刚才安装CUDA的位置;如果已经存在环境变量,则不用添加。 在cuDNN Archive界面下,查找适合CUDA11.6的cuDNN版本,如下,我选择的是cuDNN v.8.5.0版本,然后单击左键下载对应的压缩包即可。
【8】.如何在conda虚拟环境中配置cuda+cudnn+pytorch深度学习环境 1.查看CUDA版本:nvidia-smi命令查看cuda版本号.2.安装CUDATookit。3.安装Pytorch。
【9】.在conda虚拟环境中安装cuda和cudnn,解决pip install or python setup.py install 将安装包安装到全局环境中的问题(1.2部分)。 conda install cudatoolkit=10.1,conda install cudnn=7.6.5
【10】.GPU Support (Optional) 1.Install CUDA Toolkit;2.Install CUDNN;3.Environment Setup;4.Update your GPU drivers (Optional);
5.下载源码
从代码仓库,下载 代码库,解压 models-master 到 models,放到 Tensorflow 目录下。
1 | TensorFlow/ |
6.安装protobuf
下载和安装protoc,下载相应版本的软件,这里我折腾了很久,下载了 protoc-3.19.6-win64.zip 。解压后配置环境变量Path,增加 C:\Soft\protoc-28.0-win64\bin 目录。在工程object_detection文件夹中,找到文件夹protos,把这些proto文件转换为py文件。在 TensorFlow\models\research 目录开启 cmd,执行:
1 | # 进入目录 |
注意,为了避免错误,最好安装的 protoc 的版本就是 3.19.6 版本
7.安装 COCO API
请注意,根据包的说明,必须安装 Visual C++ 2015 构建工具并位于您的路径上。如果没有,请确保从此处安装它们,可以从 这里 下载安装。我用官方的提示,还是失败了,没有安装成功,只能通过参考文章中的连接,获取了离线安装包,然后才安装成功的。
1 | pip install cython |
【1】.环境变量配置
【2】.(已解决)win10安装visual studio C++ build tools 提示安装包丢失或毁坏 使用离线安装 – 解决,提示安装包丢失或毁坏。
【3】.解决visual studio C++ build tools时安装包缺失或损坏的问题(亲测绝对有用!!!)
【4】.i did ‘’pip install git+https://github.com/philferriere/cocoapi.git#egg=pycocotools&subdirectory=PythonAPI’’
【5】.电脑离线安装pycocotools cocoapi
8.安装目标检测API
到目录 models\research,复制 object_detection/packages/tf2/setup.py 至目前目录 models/research,然后执行依赖安装
1 | # From within TensorFlow/models/research/ |
1 | # 这里可能会有问题,需要解决相关的问题,才能解决。 |
9.测试
执行测试步骤,如果输出 ok,说明就可以了。
1 | # From within TensorFlow/models/research/ |
【1】.基于tensorflow2的目标检测完整实现过程 这里有部分自定义数据集的说明,还有自行标注的说明。1.数据准备:目标检测公开数据集、自行标注。2.环境准备及目标检测API安装;3.模型训练及调用:数据格式转换、模型训练、模型调用。标注文件格式转换:txt_to_xml、xml_to_txt
【2】.Window环境运行Tensorflow目标识别示例程序 Tensorflow提供了目标识别的API来支持通过各种深度学习网络实现目标识别的功能。通过访问Github项目https://github.com/tensorflow/models 可以看到Tensorflow目前支持的各种神经网络的模型实现,包括Resnet,Fast R-CNN,SSD等。其中包含的一些子目录内容如下。
【3】.目标检测第1步-运行tensorflow官方示例 这里的路径可能不正确需要修改。
【4】.object_detection_tutorial.ipynb 这里遇到了一个问题,那就是 %%bash 这个不存在
问题
1.error: subprocess-exited-with-error,Collecting pyyaml<6.0,>=5.1
在安装软件的时候,出现了这个问题
【尝试方案】
(1)尝试方案
1 | pip install pyyaml --pre |
(2)还有一个方案,这个我倒是没有尝试
1 | pip install cython 和 pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI |
【解决方案】
1 | pip install "cython<3.0.0" wheel |
【1】.用protoc编译.proto文件遇到的问题 怕自己打目录出错,就在proto文件夹下编译。目录层太低了,直接在research文件夹下运行就行。
【2】。cannot import name ‘runtime_version’ from ‘google.protobuf’
【3】.Error installing Pyyaml==5.4, Cython_sources 不少人说了这个有用:pip install “cython<3.0.0” && pip install –no-build-isolation pyyaml==5.4.1
【4】.Issue importing PyYAML, cltk 升级到 6.0.1
【5】.Installation error.
2.Could not install packages due to an OSError: [WinError 5] 拒绝访问
我在安装的时候,出现了这个问题。
【尝试方案】
(1)增加了 –user 参数
(2)使用管理员运行
(3)设置 C:\Users\hjkj\AppData\Roaming\Python\Python310\site-packages 文件夹权限
(4)修改了文件夹的权限,改为了 Every One,无效
(5)使用 –user 参数,无效
(6)更换pip版本,无效
(7)以管理员身份运行,无效
【解决方案】
重新创建了一个虚拟环境,解决了这个问题。
1 | # 查看 |
【1】.【Python问题解决】—- ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。 使用管理员身份运行 cmd
【2】.解决Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问 1.方法一:使用管理员权限运行;2.更改文件夹权限;3.使用虚拟环境。
【3】.tensoerflow安装拒绝 1.防火墙或者代理设置。2.端口冲突。3.权限限制。4.Tensorflow版本问题。
【4】.解决无法成功安装tensorflow包时 拒绝访问的问题 pip install –user package_name
【5】.ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问 1.以管理员身份运行命令提示符或终端;2.使用—user选项安装包;3.检查文件路径的权限;4.更换pip版本;5.检查环境变量
【6】.【Python问题解决】—- ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。 已管理员身份重新安装pip
【7】.完美解决:ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问 添加 –user选项赋予权限就可以搞定 python -m pip install –upgrade pip -i https://pypi.douban.com/simple –user
【8】.win下用conda切换python环境
【9】.Anaconda查看、创建、切换虚拟环境 你的本地创建了多个虚拟环境之后,加之又在不同的虚拟环境中安装了不同的第三方package,这样一来,虚拟环境的切换就很重要了。否则,当你再次打开jupyter notebook,通过import命令试图导入某个package的时候,总是会得到如期的错误Cannot import module. “No module named …”
【10】.使用pip安装Cartopy库时,出现报错:Getting requirements to build wheel did not run successfully. pip install –user pyshp-2.2.0-py3-none-any.whl
3.cannot import name ‘builder’ from ‘google.protobuf.internal’
【尝试方案】
(1)升级版本
1 | pip install protobuf==3.20 |
【解决方案】
就是升级protobuf的版本
1 | pip install --upgrade protobuf |
【1】.ImportError: cannot import name ‘builder’ from ‘google.protobuf.internal’ 升级protobuf,pip install –upgrade protobuf
【2】.protobuf 的bug:ImportError_ cannot import name ‘builder‘ from ‘google.protobuf.internal‘
4.No module named ‘tensorflow.python.distribute.distribution_strategy_context’
在执行 python 训练的时候,结果就是报错了
【尝试方案】
(1)尝试安装 tensorflow,结果无效
1 | pip3 install tensorflow |
【解决方案】
安装指定版本的 tensorflow
1 | pip install tensorflow==2.15.0 |
【1】.解决pip安装tensorflow中出现的no module named tensorflow.python 问题
【2】.fix ModuleNotFoundError: No module named ‘tensorflow.python.distribute.distribution_strategy_context’ tensorflow.python.distribute.distribution_strategy_context seems to be a bug within tensorflow 2.16.1, downgrading to ver. 2.15.0 (pip install tensorflow==2.15.0) solved the issue for me.
5.cannot import name ‘runtime_version’ from ‘google.protobuf’
【尝试方案】
(1)安装了 numpy,结果无效
1 | pip install numpy==1.26.4 |
(2)尝试降级 protobuf,无效
1 | pip install protobuf==3.12.3 |
【解决方案】
保证 protobuf 版本和 pip 版本一直
1 | # 卸载 |
【1】.ImportError: cannot import name ‘runtime_version’ from ‘google.protobuf’ Downgrading protobuf less than 5 produces the error and upgrading it above 5 fixes it.
【2】.ImportError: cannot import name ‘runtime_version’ from ‘google.protobuf’ For my object detection project version 3.12.3 is working fine.
【3】.Ubuntu 22安装最新的protoc,并解决python运行报错ImportError: cannot import name ‘runtime_version’ from ‘google.pro 从错误信息来看,
ImportError: cannot import name 'runtime_version' from 'google.protobuf'
说明你可能使用了不兼容版本的 protobuf
Python 库。为了修复这个问题,请确保你使用的是最新版本的 protobuf
库,并且与所安装的 protoc
版本兼容。你可以按照以下步骤来解决这个问题:首先,卸载现有的 protobuf
库,然后,安装最新版本的 protobuf
库,如果你之前使用旧版本的 protoc
生成了 .py
文件,可能需要清理这些文件并使用最新的 protoc
重新生成。通过上述步骤,你应该能够解决ImportError
的问题,并确保你的系统使用最新版本的 protoc
和 protobuf
库。如果问题依然存在,请检查并确认所有步骤都正确执行。6.No module named ‘official’
【解决方案】
重新安装 tf-models-official
1 | pip install tf-models-official |
【1】.ModuleNotFoundError: No module named ‘official’ 这里有人提到了 pip install tf-models-official 方法
7.If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0
If you cannot immediately regenerate your protos, some other possible workarounds are: Downgrade the protobuf package to 3.20.x or lower
【解决方案】
在命令行运行的时候,我重新创建了一个 虚拟环境
8.module ‘keras._tf_keras.keras.layers’ has no attribute ‘experimental’
【尝试方案】
(1)降级tensorflow ,但是这就是一个死循环了。
1 | pip install tensorflow==2.13.1 |
(2)后来又想着升级tensorflow,结果还是不行
1 | pip install --upgrade tensorflow |
(3)尝试限制 tensorflow 的版本,重新执行安装,结果无效
1 | 'tf-models-official >=2.5.1, <2.16.0', |
【解决方案】
我尝试将相关的代码进行修改了,models\research\object_detection\core\freezable_sync_batch_norm.py,里面的 class FreezableSyncBatchNorm(tf.keras.layers.experimental.SyncBatchNormalization):进行修改,改为了 class FreezableSyncBatchNorm(tf.keras.layers.BatchNormalization):
【1】.module ‘keras.layers’ has no attribute ‘experimental’ pip install tensorflow==2.13.1
【2】.AttributeError: module ‘keras.layers’ has no attribute ‘experimental’: M1 Mac Tensorflow Metal ‘tf-models-official >=2.5.1, <2.16.0’,
【3】.Unable to run Object Detection API i.e. AttributeError: module ‘keras._tf_keras.keras.layers’ has no attribute ‘experimental’ The temporary workaround for the issue is Could you please try to limit the versions of tf-models-official >=2.5.1, <2.16.0 and comment out keras in the research/object_detection/packages/tf2/setup.py. By default tensorflow v2.16.1 import keras3.0.
【4】.AttributeError: module ‘keras.layers’ has no attribute ‘experimental’ keras.layers.experimental.preprocessing instead of layers.experimental.preprocessing.
9.No module named ‘tensorflow.python.keras.layers.preprocessing’
【尝试方案】
(1)我尝试把 python 去掉,结果不行,找不到 tensorflow.keras.layers.preprocessing
(2)尝试修改代码
1 | # 源代码 |
(3)尝试升级 tf-models-official 版本
1 | pip install --upgrade tf-models-official |
【解决方案】
这个问题最后我也没有解决,也就只能这么算了,重新从头开始测试整个的流程好了。
【1】.ModuleNotFoundError: No module named ‘keras.layers.preprocessing’
【2】.解决 ‘No module named ‘tensorflow.keras’’ 报错:理解 TensorFlow 与 Keras 的关系
【3】.No module named ‘tensorflow.python.keras.layers.preprocessing’ Kindly check the version of Tensorflow what your using make sure it should be compatible with the version of the object detection API. And check all required modules installed in your environment. If there are missing Modules like ‘official.legacy’ or ‘tensorflow.python.keras.layers.preprocessing’, please install by using pip.
【4】.TensorFlow 2 Object Detection API tutorial
【5】.ModuleNotFoundError: No module named ‘tensorflow.python.keras.preprocessing‘ 因为是跟着教学视频敲的,没有意识到版本可能不一样,还查了很多办法。谁知道把.python去掉就可以了。
【6】.ImportError: cannot import name ‘image_preprocessing’ from tensorflow.python.keras.layers.preprocessing import image_preprocessing as image_ops
【7】.‘tensorflow.python.keras.layers.preprocessing’ 在较新的版本中2.4.0及更高版本中,tensorflow.python.keras 已经简化为了 tensorflow.keras
【8】.ModuleNotFoundError:没有名为“tensorflow.python.ops.numpy_ops”的模块
1.Initializing libiomp5md.dll, but found libiomp5md.dll already initialized
安装完成python-cuda之后,结果出现这个问题。
【尝试方案】
(1)找到 libiomp5md.dll,删除其中一个。我这里有两个,我把第一个删除了,这个好像不管用
- C:\Soft\anaconda3\Library\bin
- C:\Soft\anaconda3\pkgs\intel-openmp-2021.4.0-haa95532_3556\Library\bin
(2)删除 pip 安装的 torch
因为我用 conda 和 pip 同时安装了 torch,我尝试卸载一个,这个导致了另外的问题,就是 gpu 无法使用,最后我只能切换虚拟环境,重新安装了环境,才解决了这个问题。
1 | pip uninstall torch torchvision |
【解决方案】
(1)代码前加入两行如下代码即可,这种方式可以解决,但是好像不好用。
1 | import os |
【1】.解决 OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
【2】.Ran into this issue while executing os.environ[“KMP_DUPLICATE_LIB_OK”]=”TRUE”
【3】.yolov5中OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized. 1.提前删除libiomp5md.dll。2.设置环境变量以允许程序继续进行`。
【4】.sklearn OMP: Error #15 (“Initializing libiomp5md.dll, but found mk2iomp5md.dll already initialized.”) when fitting models I tried manually deleting the old libiomp5md.dll file. This file is in your anaconda3/lib directory. You should remove the old libiomp5.dll file. Then it should work.
【5】.【深度学习】OMP Error #15 Initializing libiomp5md.dll, but found libiomp5md.dll already initialized 报错提示完美解决方案 Everything 搜索 libiomp5md.dll,发现有Anaconda目录下存在两个libiomp5md.dll。第一个路径是conda虚拟环境下的,第二个路径是torch下的,建议先备份路径,然后把第一个路径中的 libiomp5md.dll 剪切到其他地方问题完美解决