如何将 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