我正在尝试设计和训练卷积神经网络来识别图像中的圆形细胞。我正在对完整图像的“剪切”进行训练,图像中间有一个圆圈(正面训练样本)或者没有(负面训练样本)。
中间带圆圈的图像示例(热图颜色不稳定,图像全部为灰度):http://imgur.com/a/6q8LZ
我不希望仅对两种类型的输入图像进行分类(中间是圆形还是非圆形),我希望网络输出为二进制位图,如果没有,则为均匀值(例如-1)输入图像中的圆圈或在图像中间有一个“斑点”(理想情况下是单个点)以指示圆的中心。然后将其应用于包含许多此类圆形单元格的大图像,并且输出应该是具有单元格的斑点的位图。
为了训练这个,我使用输出图像和2D高斯滤波器(http://imgur.com/a/fvfP6)之间的均方误差用于正训练样本和图像与具有值的均匀矩阵之间的MSE - 1表示负面训练样本。理想情况下,这应该导致CNN会聚在一个图像上,这个图像类似于正面训练样本中间的高斯峰值,以及一个图像,对于负面训练样本,该图像均匀为-1。
然而,网络不断融入“让一切为零”的逆向解决方案。这并没有最小化MSE,所以我不认为这是网络结构的固有问题(我尝试过不同的结构,从单层CNN,带有像输入图像一样大的滤波器到带有不同滤波器的多层CNN)大小,都有相同的结果)。
我使用的损失功能如下:
weighted_score = tf.reduce_sum(tf.square(tf.sub(conv_squeeze, y)),
reduction_indices=[1, 2])
conv_squeeze
是网络的输出图像,y
是标签(即上面显示的高斯模板)。我已经尝试对批量大小进行平均,如下所示:
Using squared difference of two images as loss function in tensorflow
但没有成功。我找不到任何有关如何使用模板图像作为标签训练神经网络的学术出版物,因此感谢任何人指出我正确的方向。非常感谢你!
答案 0 :(得分:0)
根据您的描述,我认为您面临着“数据不平衡”的问题。而且您可以尝试使用铰链损耗代替MSE,这可能会解决您的问题。