Ubuntu18.04实现Tensorflow框架下的Fasterrcnn目标检测

2023-11-10 06:00

本文主要是介绍Ubuntu18.04实现Tensorflow框架下的Fasterrcnn目标检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考链接有,再次感谢各位前辈:

https://github.com/XuleiTao/ilove996/tree/master/tf-faster-rcnn

Faster R-CNN Github源码 tensorflow GPU下demo运行,训练,测试,验证,可视化。_CVDLML的博客-CSDN博客

python3+Tensorflow+Faster R-CNN训练自己的数据_北冥有杨其名为超的博客-CSDN博客

 Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】 - 简书

 最近因为需要完成FasterRCNN的加速优化,找了一些资料,参考一些博客和github上的代码,找到了一个可能实现的,准备试一试。首先第一步要实现FasterRCNN的模型训练和检测,找到一个在前辈们努力的基础上实现的一个代码,现在记录下我走过的过程,供大家参考!也方便自己以后需要的时候回顾,持续更新..........

Faster_RCNN源码:GitHub - endernewton/tf-faster-rcnn: Tensorflow Faster RCNN for Object Detection

一、环境配置

1、系统:Ubuntu18.04

2、显卡:GTX 1060  (后面有用先要确认)

lspci | grep -i vga
# 显卡是GeForce GTX 1060 6GB

3、虚拟环境(Anaconda3)

 一般情况下,我都是创建虚拟环境进行训练测试,因为很方便,用完后可以直接删掉,并且出错了可以重来,不用害怕死机,下面是我之前写的一个文章有Anaconda3的安装,有需要可以看看

Ubuntu18.04+CUDA10.0+cudnn7.6.5+Anaconda3+pytorch==1.2.0 torchvision==0.4.0_beautifulback的博客-CSDN博客

 步骤:

conda create -n tf_fasterrcnn python==3.6# To activate this environment, use
#
#     $ conda activate tf_fasterrcnn
#
# To deactivate an active environment, use
#
#     $ conda deactivateconda activate tf_fasterrcnn

 4、Tensorflow1.9 + cuda10.2+cudnn8.3.0

! ! ! 当然你也可以用自己现有的版本,只是说你的cuda+cudnn需要和Tensorflow版本对应

! ! ! 这个工程之前有博主(上面链接有,他用的是cuda==9.0)验证过tensorflow1.2.1不行,升级到tensorflow1.12.0版本太高,与CUDN9.0不兼容(CUDN9.0 + CUDNN7.0.5(安装参考此教程)tensorflow-gpu 1.7.0,python -m pip install tensorflow-gpu==1.7.0)

因为原博客是几年前写的当时的cuda用的是9.0,但是现在我大多数时候都是用的cuda==10.2,不想麻烦重新下旧版本,就直接在cuda10.2+cudnn8.3.0基础上找对应的Tensorflow的版本,有博客推荐用Tensorflow==1.9,于是我安装的1.9,实时证明可以成功了!

① cuda10.2+cudnn8.3.0安装:https://blog.csdn.net/m0_53397118/article/details/121896304

nvcc -V    # 查看cuda的版本cat /usr/local/cuda-10.2/include/cudnn_version.h | grep CUDNN_MAJOR -A 2    # 查看cudnn的版本

② Tensorflow==1.9安装:

conda install tensorflow-gpu=1.9# 安装完成后,可以在环境中用下面的命令查看(我的是这样的)
(base) lh@lh:~$ conda activate tf_fasterrcnn
(tf_fasterrcnn) lh@lh:~$ python
Python 3.6.0 | packaged by conda-forge | (default, Feb  9 2017, 14:36:55) 
[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
>>> tensorflow.__version__
'1.9.0'

但是刚刚安装完可能会出现这样的情况,可以看到最后import tensorflow也是对的,并且我也试过并不影响后面的使用,但是后来我还是看着不太舒服,想把这一串报错去掉,找到了原因。

我们一般现在创建虚拟换将python==3.6或者以上,都是自带的numpy==1.19.5,这与这个tensorflow版本有点冲突,需要降低numpy的版本,很简单!两条命令就可以解决:

参考:Numpy卸载与重装_多多有个梦想的博客-CSDN博客_卸载numpy

pip uninstall numpy    # Successfully uninstalled numpy-1.19.5(卸载高版本的numpy==1.19.5)pip install numpy==1.16.4    # Successfully installed numpy-1.16.4(安装低版本numpy==1.16.4)
# pip install -U numpy== 1.16.4 (或可使用)如果出现卸载不了numpy==1.19.5,可以直接在我们自己创建的虚拟环境中手动移动到回收站,在site-packages里面,
它的路径是(我的是):/home/lh/anaconda3/envs/tf_fasterrcnn/lib/python3.6/site-packages/numpy-1.19.5.dist-info,只删除numpy-1.19.5.dist-info,其他不动。然后再执行上面两步,如果有红色报错或者黄色警告,但最终有#后面生成的部分,就表示成功了,可以用它查看:
import numpy
numpy.__version__  # 1.16.4

5、补充需要的包的安装 + 出现过的错误(后续执行过程有什么问题都可以在这里找)

# ModuleNotFoundError: No module named 'Cython'
pip install cython# ModuleNotFoundError: No module named 'matplotlib'
pip install matplotlib# ModuleNotFoundError: No module named 'cv2'
pip install opencv-python# ModuleNotFoundError: No module named 'easydict'
pip install easydict# AttributeError: 'version_info' object has no attribute '__version__'
pip install pyparsing==2.4.7# ModuleNotFoundError: No module named 'scipy'
pip install scipy  --user# ModuleNotFoundError: No module named 'yaml'
pip install pyyaml#可能出现的错误
TypeError: load() missing 1 required positional argument: 'Loader'
由于Yaml 5.1版本后弃用了 yaml.load(file) 这个用法。Yaml 5.1版本之后就修改了需要指定Loader,通过默认加载​​器(FullLoader)禁止执行任意函数,使得此load函数的安全得到加强。
File "/home/lh/下载/tf-faster-rcnn/tools/../lib/model/config.py", line 362, in cfg_from_fileyaml_cfg = edict(yaml.load(f))改为:yaml_cfg = edict(yaml.safe_load(f))

二、文件配置和测试过程

 1. 从Github上克隆或直接打开下面的链接下载提取工程文件tf-asterr-cnn

git clone https://github.com/endernewton/tf-faster-rcnn.git

2. 根据自己电脑的显卡,更改对应的计算单元,在tf-faster-rcnn/lib/setup.py的第130行,GTX 1060对应的是sm_61。在这可以查到每种显卡对应的计算单元

# 我的路径如下
cd /home/lh/下载/tf-faster-rcnn/lib
vim steup.py

3. 在 tf-faster-rcnn/lib文件夹下运行下面的代码:

make clean      # 输出是:rm -rf */*.pyc   、   rm -rf */*.so
make            # 输出是编译的过程
cd ..           # 退回到tf-faster-rcnn根目录

 注意:这里结束后是在tf-faster-rcnn/文件夹下。

4. 安装COCO API(代码需要API来访问COCO dataset),按下面步骤运行即可:

cd data      # 这里是tf-faster-rcnn/data/文件夹下
git clone https://github.com/pdollar/coco.git
cd coco/PythonAPI      # 在data文件夹下,用上面的命令下载了coco文件夹,进入到里面的PythonAPI/文件夹下
make
cd ../../..      # 这里是退回到了tf-faster-rcnn/文件夹下

5. 下载数据(与其他下载VOC2007一样),这里下载完后是在tf-faster-rcnn/文件夹下。

① Download the training, validation, test data and VOCdevkit(下载后有3个文件夹)

这个过程如下但很漫长,我下载并保存到了我的网盘中链接: Pascal VOC2007(提取码:htl5)

wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar

② Extract all of these tars into one directory named VOCdevkit(解压后得到一个文件夹)

tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar

 ③ It should have this basic structure(这是看它的文件夹下有那些内容)

$VOCdevkit/                           # development kit
$VOCdevkit/VOCcode/                   # VOC utility code
$VOCdevkit/VOC2007                    # image sets, annotations, etc.
# ... and several other directories ...

④ Create symlinks for the PASCAL VOC dataset(创建软连接)

cd $FRCN_ROOT/data
ln -s $VOCdevkit VOCdevkit2007

之前看了好多博客关于这一步没有详细的写,或者创建软连接不成功(这种简单的办法就是直接将上面得到的VOCdevkit文件夹直接复制到tf-faster-rcnn/data/文件夹下)

以我自己的为例,这里的$VOCdevkit可以创建绝对路径就能成功了,看到有个向上的箭头!

# (tf_fasterrcnn) lh@lh:~/下载/tf-faster-rcnn$ cd data
cd data    # lh是我的用户名
ln -s /home/lh/下载/tf-faster-rcnn/VOCdevkit VOCdevkit2007  

 6. 下载预训练模型

./data/scripts/fetch_faster_rcnn_models.sh

 有几百M大小,下载速度慢,试过好像已经被删除了(这个文件夹里的文件就是这个作用)。提供以下网盘下载:voc_0712_80k-110k.tgz(提取码:9eob)、这里特别感谢:博主。下载的预训练模型为:voc_0712_80k-110k.tgz。

用下面的命令解压.tgz得到voc_2007_trainval+voc_2012_trainval文件夹:

tar xvf voc_0712_80k-110k.tgz

至此,tf-faster-rcnn/data/文件夹下的所需的文件都已经准备齐全了!(蓝色的是本来有的、红色是后期下载准备的、橘色的就是创建的软连接)

 7. 创建一个文件夹和一个软链接以使用预训练模型

tf-faster-rcnn根目录创建一个output文件夹并且在其中存放预训练模型的软链接,使用软连接来使用预训练模型,output文件夹中会在每次训练后存放训练好的模型,步骤:

    NET=res101TRAIN_IMDB=voc_2007_trainval+voc_2012_trainvalmkdir -p output/${NET}/${TRAIN_IMDB}cd output/${NET}/${TRAIN_IMDB}ln -s ../../../data/voc_2007_trainval+voc_2012_trainval ./defaultcd ../../..      # 这里介绍后是在tf-faster-rcnn/文件加下

8. 测试demo(这里我的电脑用的GPU_ID= 0)

GPU_ID=0CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/demo.py

运行过程:

测试的图片在/tf-faster-rcnn/data/demo文件里

有的博客写的是 GPU_ID = 01,但是我用这个会出现下面的错误,于是改为GPU_ID = 0,如果在测试过程中也有这样的错误(no CUDA-capable device is detected),你可以改改!

重点来了!忙了这么就终于可以看看效果了(会连续弹出好多张),其中一张结果如图:

demo.py效果图

 三、使用训练好的faster模型对数据进行测试

在tf-faster-rcnn/文件目录下运行:

GPU_ID=0
./experiments/scripts/test_faster_rcnn.sh $GPU_ID pascal_voc_0712 res101

这里有点地方需要改:首先把 tf-faster-rcnn/lib/datasets/voc_eval.py的第121行的

with open(cachefile,'w') as f修改为:
with open(cachefile,'wb') as f

同时还要把第105行的 

cachefile = os.path.join(cachedir, '%s_annots.pkl' % imagesetfile)修改为:
cachefile = os.path.join(cachedir, '%s_annots.pkl' % imagesetfile.split("/")[-1].split(".")[0])

过程中可能会出现问题,在上面第一大点的第5小点有相关解决办法(如果之前你已经安装了相应的包,应该在运行过程中就没有问题了),过程如图:

未完全测试完,待续.................

============================================================================

会在output文件夹下建立一个路径为:
/output/res101/voc_2007_test/default/res101_faster_rcnn_iter_110000/
的文件夹,res101代表网络名称,voc_2007_test代表数据集,与训练不同,该文件夹下不再是模型文件,tf-faster-rcnn平台搭建完成!

四、train:

这篇关于Ubuntu18.04实现Tensorflow框架下的Fasterrcnn目标检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/380794

相关文章

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.