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

Posted

技术标签:

【中文标题】如何将 CNN 应用于每个通道的基于多通道像素数据的权重?【英文标题】:How to apply CNN for multi-channel pixel data based weights to each channel? 【发布时间】:2017-12-25 14:27:30 【问题描述】:

我有一个有 8 个通道的图像。我有一个传统的算法,其中每个通道都添加了权重,以得到输出为“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

我已将 Keras 设置为 Theano 作为背景。基本的 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

【问题讨论】:

【参考方案1】:

我认为您应该像使用 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

【讨论】:

【参考方案2】:

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

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

使用binary_crossentropy作为损失函数。

【讨论】:

以上是关于如何将 CNN 应用于每个通道的基于多通道像素数据的权重?的主要内容,如果未能解决你的问题,请参考以下文章

基于多通道卷积神经网络的数字图像识别植物病害

CNN卷积层里的多输入多输出通道channel 动手学深度学习v2 pytorch

使用 OpenCV 多通道 Mat 沿通道方向访问像素

深度学习入门基础CNN系列——感受野和多输入通道多输出通道以及批量操作基本概念

机器学习-卷积神经网络CNN中的单通道和多通道图片差异

Tensorflow系列4:卷积神经网络--解决参数过多问题