想在笔记本win10上安装Tensorflow并搭建Faster R-CNN环境
本来看了B站北大公开课的教程安装一路顺畅https://blog.csdn.net/qq_40728302/article/details/105347188,结果安装好才发现github上的代码是tf1版本的,我却安装了tf2,只好全部删除,重来一遍。
配置环境:win10 + cuda9.0 + VS2015 + cudnn7.0.5 + tensorflow1.5.0
Tips:安装包、数据压缩包,都可以右键复制链接地址,然后用迅雷下载,超爽哦!!!
1.由于使用CUDA需要VisualStudio,所以先安装VS2015(安装时仅需勾选VisualC++)
2.Anaconda3重新安装Anaconda3-5.1.0-Windows-x86_64版本,卸载了原来的Anaconda3-2020.02-Windows-x86_64
3.安装cuda_9.0.176_win10,若提示This graphics driver could not find compatible graphics hardware,继续安装;若安装失败,则通过自定义的方式取消Visual Studio Intergration进行安装,待安装完成后单独安装Visual Studio Intergration。(自定义安装时记住NVIDIA GPU Computing Toolkit的安装路径,安装cudnn时需要用到)CUDA安装完毕后,打开Anaconda promt,在终端手动输入命令:nvcc -V,若输出CUDA版本则说明安装成功。并检查是否将toolkit的路径添加到环境变量,可手动添加。
4.安装cudnn7.0.5,https://developer.nvidia.com/rdp/cudnn-download,解压cudnn7.0.5后将三个文件夹bin、include、lib复制到前面cuda toolkit的安装路径中(那里也有这三个文件夹)
这里必须安装cudnn7.0.5,若安装cudnn7.1.3,则会报错:Loaded runtime CuDNN library: 7103 (compatibility version 7100) but source was compiled with 7003。
5.安装tensorflow1.5,这里不建议使用anaconda navigator,安装ipython和spyder都没有镜像下载快速
-
conda create -n tensorflow python=
3.5
-
activate tensorflow
-
pip install tensorflow-gpu==
1.5 -i https:
//pypi.tuna.tsinghua.edu.cn/simple
-
pip install ipython -i https:
//pypi.tuna.tsinghua.edu.cn/simple
-
pip install spyder -i https:
//pypi.tuna.tsinghua.edu.cn/simple
-
-
# conda使用清华源,输入下面三行命令即可
-
conda config --
add channels https:
//mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
-
conda config --
add channels https:
//mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
-
conda config --
add channels https:
//mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
-
-
# 测试代码
-
import tensorflow
as tf
-
hello = tf.constant(
'Hello, TensorFlow!')
-
sess = tf.Session()
-
print(sess.run(hello))
接下来是配置从GitHub上白嫖来的faster rcnn工程,源码地址:https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5
faster-rcnn依赖的库比较多,缺什么装什么:cython, python-opencv, easydict, pillow, matplotlib, scipy(安装在虚拟环境中)
如何终端进入faster-rcnn工程目录中,执行命令:
-
cd ./data/coco/PythonAPI
-
python setup.py build_ext
--inplace
-
python setup.py build_ext
install
-
cd ./lib/utils
-
python setup.py build_ext
--inplace
然后下载VOC训练集,解压后使得训练集的路径为:
data\VOCDevkit2007\VOC2007
下载模型VGG16并解压,使得模型路径为:
data\imagenet_weights\vgg16.ckpt
执行训练代码,模型保存在根目录下的\default\voc_2007_trainval\default,模型训练过程中每5000次迭代保存一次。
所以想要跑demo.py,先训练吧。
python train.py
训练之前遇到的一些error:
1.TensorFlow报错FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated......
报错原因:numpy1-17-0版本过高,使用numpy-1.16-0版本即可
pip install numpy==1.16.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
2.cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:352: error:
报错原因:版本不兼容,安装兼容python3.5的 opencv_python-3.4.6-cp35-cp35m-win_amd64.whl 解决问题。
镜像站:https://www.lfd.uci.edu/~gohlke/pythonlibs/ &&&参考:https://download.csdn.net/download/qq_39113137/11151939
3.failed to allocate **M (** bytes) from device: CUDA_ERROR_OUT_OF_MEMORY
1)需要指定GPU,代码头部添加如下代码:
-
import os
-
os.environ[
"CUDA_VISIBLE_DEVICES"] =
"0"
2)限制当前脚本可用显存,代码头部添加第一行,session 语句进行如第二行的修改
-
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
-
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
4. failed to alloc 17179869184 bytes on host: CUDA_ERROR_OUT_OF_MEMORY
方法1,适当减小batch大小
方法2,设置显存分配方式
-
import os
-
os.environ[
"CUDA_VISIBLE_DEVICES"] =
'0'
#指定第一块GPU可用
-
config = tf.ConfigProto()
-
config.gpu_options.per_process_gpu_memory_fraction =
0.5
#最多只占用指定gpu50%的显存
-
config.gpu_options.allow_growth =
True
#程序按需申请内存
-
sess = tf.Session(config = config)
---------------------------------------------------------------------------分割线-------------------------------------------------------------------------------------------------------------------------------------------------------------开始训练啦----------------------------------------------------------------------------------
配置:HP暗夜精灵5;CPU:i5-9300H;内存:8G;GPU:GTX1660Ti 6G独显
经测试,GPU训练速度是CPU的十倍,我的GPU训练速度为0.89~0.72s/iter;总耗时8h,最终获得如下模型。
终于可以跑demo了,开心!!!结果又出幺蛾子了。。。
但是幸好有前人摸索:https://blog.csdn.net/fuyang2191/article/details/80902324
解决办法:修改demo.py部分代码
-
parser.add_argument(
'--net', dest=
'demo_net', help=
'Network to use [vgg16 res101]',
-
choices=NETS.keys(),
default=
'vgg16')
-
NETS = {
'vgg16': (
'vgg16.ckpt',),
'res101': (
'res101_faster_rcnn_iter_110000.ckpt',)}
在工程根目录下创建/Faster-RCNN-TensorFlow-Python3-master\output\vgg16\voc_2007_trainval+voc_2012_trainval\default\
然后把训练生成的default下的四个40000文件复制到刚才创建的路径下,并重命名如下:
python demo.py
lbwnb噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔噔......
如果想要训练自己的图像集,可以参考他的博客 https://blog.csdn.net/beyond_xnsx/article/details/79771690
图像集终于做好啦,哈哈,好累啊。。。终于可以跑demo了,修改了类别CLASSES,测试图像im_names,在demo文件夹中放入与im_names对应的图像。python demo.pyGPU调用成功,开始跑demo图像啦,出来吧,黑暗大法师!!!。。。?。???这是什么鸡儿情况?程序正常运行啊,不是应该跳出一个框,然后把我的黑暗大法师圈出来吗???怎么啥都没有出现呀?难受呀,马飞。。。检查了一下,奥,原来是类名写错了,没事,咱再来;python demo.pyGPU调用成功,开始跑demo图像啦,出来吧,黑暗大法师!!!。。。?。。怎么还是没有啊?我tm心态崩了呀。。。
仔细看看demo代码,才发现问题很严重,faster rcnn给出的score是判断最后是否将物体识别成一个类别,用print打印数据查看果然score都很低,均没有达到阈值。请教了学长,学长提醒我:1.数据集可能太小(我只有80几张图);2.迭代次数可能不够,模型还没有收敛(我只迭代了1000次)建议我用tensorboard观察loss;3.batch_size可能设置太小了(我只设了2),适当加大batch_size可以加快收敛;4.训练自己的数据时,pascal_voc.py中的_classes只放自己需要的类名,将原来无关类名去除;
-----------当时还遇到这个error:image invalid,skipping
-----------并且有两个loss值一直是零:>>>loss_cls: 0.000000 >>>loss_box: 0.000000
一开始出现次数较少,后来error越来越多,一个iter的训练时间也变长了,我觉得有问题。。。于是参考网上的方法修改代码,但是都无济于事,后来我跑了原有的VOC2007数据发现没有这个问题,所以我推断应该是图像集的问题。仔细检查一看,文件夹命名错误、ImageSets里面的txt也没有给值。。。(lll¬ω¬) 然后自己的图像集不能太大,一般宽高在500~300范围内。
我重新配置了工程,检查数据集无误后放入工程,config.py中设置batch_size为128,max_iters为5000,pascal_voc.py修改
-
self._classes = (
'__background__',
# always index 0
-
'crack',
'scratch',
'spot')
#只有我需要的三个目标类名
训练完成后,修改demo.py中的CLASSES为对应类名,测试数据集demo中放入自己的图片,python demo.py
终于将缺陷识别出来啦,哈哈哈,那么接下来就对视频进行目标检测啦!
未完待续。。。
转载:https://blog.csdn.net/qq_40728302/article/details/105411667