在利用深度学习,对遥感图像中的景物进行语义分割时,使用https://github.com/AstarLight/Satellite-Segmentation的代码,实验环境为Window 10,使用Anaconda集成环境,利用Spyder编译器进行程序的编译,在配置的过程中,出现了如下的问题:
使用Python 3.6,在程序运行时,会发现缺少相关支持库,主要缺少cv2,matplotlib以及Keras的安装,通过Anaconda的集成环境,可以很方便的进行相关支持库的安装,安装方式如下所示:
在输入框中输入想要进行安装的支持库,点击apply进行相关支持库的安装。
由于在进行程序编译的过程中需要利用GPU,因此需要在程序中配置如下语句:
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
此时对于多数使用者来说,将会出现如下的问题
tensorflow.python.framework.errors_impl.InvalidArgumentError: Negative dimension size caused by subtracting 2 from 1 for 'max_pooling2d_2/MaxPool' (op: 'MaxPool') with input shapes: [?,1,128,128].
出现该问题的原因主要是因为在图片读入时,输入参数错误所导致的,因为keras调用的后端深度学习框架一般都是Tensorflow后者Theano,对于两种不同的深度学习框架来说,输入参数的格式不尽相同,对于Tensorflow来说,输入参数格式为:(batch_size,w,h,channal),对于Theano来说,输入参数格式为:(batch_size,channal,w,h),因此需要进行参数格式的对应。
解决方法1:
model.add(Conv2D(64,(3,3),strides=(1,1),input_shape=(3,img_w,img_h),padding='same',activation='relu'))
更改input_shape的输入方式为(img_w,img_h,3),此时程序也许会成功运行。
解决方法2:
找到C盘下.keras文件夹下的keras.json文件,对该文件下的"image_data_format": 字段更改为:"channels_first",此时,程序可以成功运行。
在程序的运行过程中,也许会出现显存大小不够的问题,如下类型所示:
Resource exhausted: OOM when allocating tensor with shape[10000,32,28,28]
此时,需要对程序中的Batch_size进行更改,将原始的16更改为8或者其他可以运行的大小,此时程序便可以成功运行。成功运行结果如下所示: