如何将CNN应用于基于多通道像素数据的权重到每个通道?

时间:2017-07-20 04:49:46

标签: image-processing classification keras conv-neural-network pixels

我有一个8通道的图像。我有一个传统的算法,其中权重被添加到这些通道中的每一个,以获得输出为' 0' 0或者' 1'。这适用于几个样本和复杂场景。我想在使用CNN方法的机器学习中实现相同的功能。

我是ML的新手,并开始寻找那些似乎专门处理图像处理问题的教程 - 手写识别,特征提取等。

http://cv-tricks.com/tensorflow-tutorial/training-convolutional-neural-network-for-image-classification/

https://leonardoaraujosantos.gitbooks.io/artificial-inteligence/content/neural_networks.html

我设置了以Theano为背景的Keras.Basic Keras样本正常运行。

为了使用CNN获得相同的结果,我需要遵循哪些步骤?我不理解在我的用例中使用过滤器,内核,步幅。如果像素通道值和输出是以下形式,我们如何向Keras提供训练数据?

像素#1 f(C1,C2 ... C8)= 1

像素#2 f(C1,C2 ... C8)= 1

像素#3 f(C1,C2 ... C8)= 0。

像素#N f(C1,C2 ... C8)= 1

2 个答案:

答案 0 :(得分:2)

我认为你应该像使用CNN进行语义分割一样对待它。有关示例,请参阅

https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf

您可以使用与他们使用相同的架构,但对于第一层而不是使用3个频道的过滤器,使用8个频道的过滤器。

对于损失函数,您可以使用相同的loos函数或更特定于二进制丢失的函数。

keras有几种实现,但有tensorflow 后端

https://github.com/JihongJu/keras-fcn https://github.com/aurora95/Keras-FCN

答案 1 :(得分:1)

由于输入是通道值的形式,顺序也是如此。我建议您使用 Convolution1D 。在这里,您将每个像素的通道值作为输入,您需要预测每个像素。试试这个 例如:

 Conv1D(filters, kernel_size, strides=1, padding='valid')
 Conv1D()
 MaxPooling1D(pool_size)
 ......
 (Add many layers as you want)
 ......
 Dense(1) 

使用binary_crossentropy作为损失函数。