主要难点在于cuda、cudnn版本的选择及安装,TensorFlow-gpu与keras之间版本配合安装
各版本如下:
cuda_10.1.105_418.96_win10
cudnn-10.1-windows10-x64-v7.6.5.32
Keras 2.4.3
tensorflow-gpu 2.3.0
Windows下的显卡驱动安装比较简单随意了,可以去NVIDIA网站下载驱动安装,也可以使用驱动软件直接检测安装。
安装完之后,打开控制台,输入
nvidia-smi
我笔记本是一张1060的显卡,会得到如下内容,即表示安装成功
在选择cuda和cudnn版本时要慎重一下,因为最近新版的cudnn没有win64版本的,没深究为什么,这里我选择的是cuda10.1和cudnn7.6.5
cuda下载地址:https://developer.nvidia.com/cuda-toolkit-archive
下载完有2个多G,之后一路默认安装即可,path环境也会自动配置好
cudnn下载地址:https://developer.nvidia.com/rdp/cudnn-archive
下载完是一个安装包,解压后将对应文件复制到cuda相应的文件夹下
有三个文件:cudnn64_7.dll、cudnn.h、cudnn.lib
cuda如果是默认安装的话,路径为:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
打开控制台,输入
nvcc -V
详细内容可参考这篇文章:Windows下搭建TensorFlow2环境
conda create -n TensorFlow-gpu python=3.7
conda activate TensorFlow-gpu
TensorFlow与keras之间的版本对应关系还是比较重要的,不匹配会造成各种问题
这里选择的版本是Keras2.4.3与tensorflow-gpu2.3.0
安装tensorflow-gpu2.3.0
pip install tensorflow-gpu==2.3.0 -i https://mirrors.aliyun.com/pypi/simple/
安装Keras2.4.3
pip install keras==2.4.3 -i https://mirrors.aliyun.com/pypi/simple/
keras-retinanet的地址如下:https://github.com/fizyr/keras-retinanet
其中requirements.txt文件中包含了所需依赖:
cython keras-resnet==0.2.0 git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI h5py keras matplotlib numpy>=1.14 opencv-python>=3.3.0 pillow progressbar2 tensorflow>=2.3.0
由于我们已经安装好指定版本的TensorFlow和keras,所以将其在requirements.txt中删除
cython keras-resnet==0.2.0 git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI h5py matplotlib numpy>=1.14 opencv-python>=3.3.0 pillow progressbar2
然后直接在该目录下执行
pip install . --user
或者也可以单独pip安装
在keras-retinanet目录下执行
python setup.py build_ext --inplace
是因为源码中有cpx文件,需要根据当前环境进行编译
我在安装环境时遇到了很多问题,但大多都是与版本相关,所以这里不做记录,按照上边的环境进行安装后,应该不会出现问题。
log中显示如下:
WARNING:tensorflow:Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` batches (in this case, 500000 batches). You may need to use the repeat() function when building your dataset.
参考如下:
【记录】训练keras-retinanet提前结束
Training stops at epoch 1 #1462
是因为–steps这个参数必须完全等于训练图像的总数/batch_size,或者设置为默认值None,让tensorflow自动找出它
解决方法:在train.py文件中找到–steps,把原来的10000改为None
TensorFlow2版本加入如下代码
config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True
tf.compat.v1.keras.backend.set_session(tf.compat.v1.Session(config=config))
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
with tf.device('/cpu:0'):