如何用卷积神经网络对噪声圈进行分类和定位[tensorflow]

时间:2016-06-08 12:18:59

标签: localization tensorflow geometry conv-neural-network

我的任务是通过神经网络在医学图片(X射线)中找到并找到圆圈(标记)。 图片A [800x600,灰度图像]非常嘈杂,包含骨骼和圆圈/标记等结构。

首先,我构建了一个用于训练分类器的图片数据集。 我从800x600图片中保存了包含尺寸为28x28(标签=标记)的圆圈的区域。圆圈本身具有不同的强度等级(click here to see an example circle picture)有时圆圈部分被骨骼覆盖。此外,我保存了一些不包含圆圈的区域(label = NoMarker)。 每个训练图像的大小为28x28。 (数据库100'000图片大小28x28,其中一半带圆圈,另一半没有)。我将所有这些[28x28]图像和标签保存为与最小数据集(idx3 / idx1)相同的格式。

我开始基于tensorflow mnist_softmax示例构建一个分类器,并获得了大约90%的精确度。

代码如下所示:

# Read my  Datasets, code adapted from tensorflow.examples.tutorials.mnist:
# train_image [28x28] pixel, and the labels
mnist = read_data_sets(FLAGS.data_dir, one_hot=True)
sess = tf.InteractiveSession()

# Create the model
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)
# Define loss and optimizer
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(cross_entropy)

# Train
tf.initialize_all_variables().run()
for i in range(2000):
  batch_xs, batch_ys = mnist.train.next_batch(2000)
  train_step.run({x: batch_xs, y_: batch_ys})

# Test trained model
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print("Accuracy"+ str(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels})))

在此之后,我尝试本地化圆圈中的像素。 对于本地化,我采用滑动窗口方法。这意味着我运行其他800x600图片,总是将滑动窗口中的区域(28x28)作为我训练过的神经网络的输入。 NN的结果是这个窗口包含一个圆圈。该结果保存在矩阵/图片中:

本地化结果

Result of localisation in the complete picture, Red and gray pixels mean circle detected for this pixel [已编辑]:我已将红色圆圈标记为已在图片中正确分类。灰度级的强度代表圆的概率[黑色像素=圆内100%,白色像素=像素内0%]。所以在最好的情况下,应该只有红点,图片的其余部分应该是白色的。

在我看来,圆的几何/曲线不参与学习过程。 我是现场机器学习的新手。是否有可能/模型我可以用于此任务。 最好的祝福, KATER

0 个答案:

没有答案