本次记录在Ubuntu系统上尝试完成Keras版本YOLO V3复现及踩坑超详细过程,期间参考了很多博主的文章,在这一如既往地对他们表示我由衷的感谢。另外,本人小小白一个,文中若有错误还望各位不吝赐教!
【写在前面】
拖了很久,原因是TeamViewer突然连不上服务器了,今天提醒我被商业化了,如果你和我一样不幸,参考帖子:
TeamViewer检测为商用小tips,亲测有效
ok ,开始这次的任务~~~
Keras版本的Yolo v3的环境是python 3.5.3+Keras 2.1.5+tensorflow 1.6.0
conda create -n py352 python=3.5.2
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Keras==2.1.5
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow==1.6.0
(小tips:加版本号时,“==”前不要有空格)
主要看符不符合要求~~(这一步熟悉自己电脑的可以略过)~~
一、查看 CUDA 版本:
cat /usr/local/cuda/version.txt
我的是CUDA Version 10.1.168
二、查看GPU型号
lspci | grep -i nvidia
三、查看NVIDIA驱动版本
sudo dpkg --list | grep nvidia-*
OK,查询工作结束,正式开始下载安装darknet并配置环境
先根据这个提示下载配置Darknet:
git clone https://github.com/pjreddie/darknet.git
cd darknet
make
编译后有一堆信息显示,然后尝试运行它!
./darknet
若得到以下输出表示成功。
usage: ./darknet
更改Makefile文件:(可选,根据情况来)
GPU=1
OpenCV=1
如果安装了CUDNN:
CUDNN=1
NVCC=/usr/local/cuda/bin/nvcc
…………………………分割线……………………………………
那么问题来了~~~
服务器可用GPU,也安装了CUDNN,但如何修改Makefile文件里的参数呢?!
小白如我,简直把csdn和网络翻了个遍!1h+过去了,修改了n多次就是保存不了……绝望.jpg
不能放弃,办法总是有的,解决方法见这里【如何在Makefile文件里修改参数并保存】
为方便直接简写在此:
首先cd进到文件所属的文件夹下,然后:
vim Makefile
打开会有这么个界面后输入e
进到文件里
然后按i,进入到编辑模式
编辑完毕后,按Esc退出编辑模式
再输入:wq!强制保存退出
然后你就会发现,改掉并保存成功!
……………………………分割线……………………………………
再下载权重文件
wget https://pjreddie.com/media/files/yolov3.weights
but!248m,下载得太太太慢了惹不说,失败无数次了惹了吧!
然后一搜索看到了这位好心大大的分享惹:
关于yolov3.weights文件下载地址的分享
下载好权重文件后,根据使用GPU与否修改Makefile文件后简单测试:(cd到darknet文件夹下)
make
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
失败原因?我还在找啊哈哈哈哈……
也许是OpenCV安装失败?用anaconda包管理安装的不行之类的?路径没添加上?……
没事,只是darknet测试失败而已,YOLO V3还没开始呢
在这里下载文件【我直接网页download了】
将上面下载好的权重文件yolo3weights文件放到keras-yolo3-master文件夹里:
cd keras-yolo3-master
生成现在权重下h5文件:
python3 convert.py yolov3.cfg yolov3.weights model_data/yolo.h5
进行快速测试:
python3 yolo_video.py --image
之后让你输入图片路径:
(注意!!!:若将图片放在keras-yolo3-master文件夹下,直接输入图片名字,但注意后缀的jpg也要带上)
这部分遇到一系列问题较多,因此单独拿出来做记录
错误1:在生成现在权重下h5文件时报错
ImportError: numpy.core.multiarray failed to import
查询后得知可能原因是:numpy版本出问题了,与tensorflow不兼容就将numpy卸载了,然后再用pip show numpy 查询,查到就将其删掉
最后安装了1.16.4版本的numpy:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy==1.16.4
错误2:重新安装1.16.4版本的numpy再次尝试生成现在权重下h5文件时报错
TypeError: ‘NoneType’ object is not callable
查询后有个博主说
在网络程序or主程序前最开始加上这句话:
backend.clear_session()
其中,backend需要导入, from keras import backend
然后我分不清楚哪个是主程序,先在convert.py文件里加了backend.clear_session()这个报错表示没有backend,继而又删掉且把from keras import backend加在了前面。
错误3:继上述修改后又报错
ImportError:
save_model
requires h5py
查到了解决方法:
pip install --upgrade h5py
错误4:继续下一步,输入python3 yolo_video.py --image进行快速测试时报错
ImportError: No module named ‘PIL’
然后又同样出现了类似的问题,就是matplotlib问题,安装即可:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow matplotlib
测试输入
python3 yolo_video.py --image
会提醒你输入图片名字(要将图片放置在keras-yolo3-master)
然后是我别的地方找的一组对比图:
【这里有问题记录在此:为什么小孩和床前后无变化但检测到的结果却有变化呢?】
总算是成功了,下一步,尝试训练自己的数据集!
(要赶快做人脸测试了啊啊啊,人工智能作业嗷嗷待哺ing!)