需下载:python3.5.2 tensorflow1.6 keras2.1.5 h5py
一、下载keras-yolov3
git clone https://github.com/qqwweee/keras-yolo3.git
二、下载yolov3权重文件
https://pjreddie.com/media/files/yolov3.weights
将yolov3.weights权重文件放到keras-yolov3文件夹中
三、转换YOLO的weights文件格式为Keras的格式:
python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5
1、出现错误:module tensorflow has no attribute get_default_graph
原因:keras和TensorFlow的版本过高导致模块不存在或者已经更改不再兼容。
不知道这里是不是因为我的cuda和cudnn版本与tensorflow不匹配。我的cuda=8,cudnn=5.1,但是根据下图中,我应该安装tensorflow1.2.0的版本。
解决:
先卸载原来的版本
pip uninstall tensorflow # 卸载tf
pip uninstall keras # 卸载keras
再安装
pip install tensorflow==1.2.0
pip install keras==2.0.9
2、出现错误:TypeError: buffer is too small for requested array
原因:我的是因为yolov3.weights文件有问题。
解决:我重新下载的yolov3.weights权重文件。然后就没问题了。
3、出现错误:ImportError: `save_model` requires h5py.
原因:没有安装h5py
解决:pip3 install h5py(速度太慢)
(使用国内镜像下载:pip3 install h5py -i http://pypi.douban.com/simple --trusted-host pypi.douban.com)
四、运行测试
# cd到keras-yolov3目录下
python yolo.py
1、出现错误:ImportError: No module named 'matplotlib'
原因:没有安装matplotlib
解决:
2、python导入tensorflow时出现错误
原因:numpy版本太高
解决方法:pip3 install numpy==1.16.0
3、
出现警告:
意思是你的 CPU 支持AVX AVX2 (可以加速CPU计算),但你安装的 TensorFlow 版本不支持。
我忽略了。
4、
出现错误:
这个问题真的很抓狂。又是tensorflow版本的问题。具体我也不知道哪出问题了。反正我是把tensorflow和keras全部卸载掉,然后重新安装的tensorflow==1.6.0和keras==2.1.5。然后再运行yolo.py就没问题了。
运行yolo.py之前,需要对yolo.py进行修改:在最后加上以下代码:
def detect_img(yolo):
while True:
img = input('Input image filename:')
if img == 'exit':
break
else:
try:
image = Image.open(img)
except:
print('Open Error! Try again!')
continue
else:
r_image = yolo.detect_image(image)
r_image.show()
yolo.close_session()
if __name__ == '__main__':
detect_img(YOLO())
保存,退出。
在keras-yolov3目录下放一张你即将检测用到的图片。
cd到keras-yolov3目录
终端输入:python yolo.py
然后会提示你输入需要检测的图片名字:
输入后,就会显示检测结果。关闭检测结果,会接着让你输入下一张检测图片名字。如果你不想检测了,就输入exit退出检测。
插曲1:ubuntu中的nvidia驱动不见了。出现了以下错误:
原因:系统内核与我之前安装的nvidia驱动不匹配。nvidia驱动是我在4.15.0-45时候安装的,但是不知道在怎么的,系统自己更新到了4.15.0-91。
我看到网上有说这样解决的:
step1:sudo apt-get install dkms
step2: sudo dkms install -m nvidia -v 410.73(这个是你自己之前安装的nvidia版本号)
但是,我用这个方法根本没有解决问题。。。。。。
>>>>>>以下是真正的解决方法:
首先,你可以在终端输入:
grep menuentry /boot/grub/grub.cfg
查看一下自己系统的内核信息:(下图是我借的网上的)可以看到存在着不同的内核版本信息。
解决:重启。在以下界面选择第二行的‘Advanced options for Ubuntu’。
进入后,会出现几个版本的内核(下图是我借的网上的)。选择第二新的内核,比如我最新的时4.15.0-91,第二新的时4.15.0-45,我就选择了4.15.0-45。然后回车,进入系统。
打开终端,输入:
# 查看当前系统内核版本
uname -r
# 查看nvidia相关信息
nvidia-smi
另外!如果你需要一致保持该内核版本使用。你就要修改ubuntu默认开机启动的内核版本。
终端输入:
sudo gedit /etc/default/grub
将下图中的GRUB_DEFAULT=0 修改为:GRUB_DEFAULT="1> 3"(注意>和3之间有一个空格)
(注:1 代表主菜单的第二项Advanced options for Ubuntu;3代表1项目下面对应的子菜单里面的第4项;)
修改后:
保存后退出。然后在终端输入:
sudo update-grub
这样,以后就会在该版本的内核下启动ubuntu。
(参考博客:)
插曲2:I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030 Creating Tensotrflow devices.....
在执行convert.py时,在这个地方卡住了。一直卡在I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030 Creating Tensotrflow devices......
不要着急,耐心等待。
插曲3:我在另一台服务器上配置运行的时候,出现了其他的问题。
问题1:Loaded runtime CuDNN library: 7501 (compatibility version 7500) but source was compiled with 7004 ........
是cudnn版本的问题。服务器上有cuda=8.0(cudnn=5.1.0)和cuda=9.0(cudnn=)。之前用的一直是cuda=8.0,出了问题后,我就换成了cuda=9.0,然后就可以了。
(因为在之前的电脑上没有用gpu,所以没有出现cudnn版本问题)
问题2:AttributeError: module ‘tensorflow.python.ops.nn’ has no attribute ‘leaky_relu
是tensorflow的问题。我安装的是tensorflow=1.6.0,然后我卸载后安装的tensorflow-gpu=1.6.0