У меня есть данные сегментации изображения, где данные помечены без класса фона (пустые пиксели), а данные имеют горячее кодирование. Ie. метки и логиты имеют форму (256,256,3)
, где 3 класса являются взаимоисключающими и не содержат фоновый класс.
Когда я использую tf.argmax
, а затем сглаживаю данные с помощью tf.reshape
, матрица путаницы вывод накапливает фон void как номер класса 1.
код:
lab = tf.placeholder(tf.int32, shape=(256, 256, 3))
pred = tf.placeholder(tf.int32, shape=(256, 256, 3))
lab_ = tf.argmax(lab, axis=2)
pred_ = tf.argmax(pred, axis=2)
lab_ = tf.reshape(lab_, [-1])
pred_ = tf.reshape(pred_, [-1])
con = tf.math.confusion_matrix(labels=lab_, predictions=pred_, num_classes=3)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
conf = sess.run([con], feed_dict={lab: label_input, pred: logit_input})
print(conf)
вывод матрицы путаницы:
[[61048, 11, 608],
[ 0, 0, 0],
[ 742, 4, 3123]]
Как можно избежать использования меток void (background) включены в матрицу?
Как использовать функции тензорного потока для форматирования данных, чтобы избежать этой проблемы, и как настроить аргумент весов tf.confusion_matrix
для решения этой проблемы?