Как классифицировать True Negatives при обнаружении скользящего окна?

Я собираю результаты из моего алгоритма детектора изображения. Поэтому в основном то, что я делаю, это то, что из набора изображений (размером 320 х 480) я бы запускал скользящее окно размером 64x128 через него, а также под ряд предопределенных масштабов.

Я понимаю, что:

  • True Positives = когда мое обнаруженное окно перекрывается (в пределах определенного размера пересечения/центроида) с правдой земли (аннотированные ограничивающие поля)
  • False Positives = когда алгоритм дает мне положительные окна, которые находятся за пределами правды.
  • False Negatives = когда мне не удалось дать положительное окно, в то время как аннотация основной истины гласит, что есть объект.

Но как насчет True Negatives? Являются ли эти истинные негативы всеми окнами, которые мой классификатор дает мне отрицательные результаты? Это звучит странно, поскольку я раздвигаю небольшое окно (64x128) на 4 пиксела за раз, и у меня есть около 8 различных шкал, используемых при обнаружении. Если бы я это сделал, тогда у меня было бы много истинных негативов на изображение.

Или я готовлю набор чистых отрицательных изображений (вообще никаких объектов/людей), где я просто проскальзываю, и если в каждом из этих изображений есть одно или несколько положительных детектировок, я бы считал это False Negative, и наоборот?

Здесь примерное изображение (с зелеными прямоугольниками как истинная истина)

Example image, not real result

Ответ 1

Я всегда видел четыре термина следующим образом:

  • Ложно отрицательный; Результат должен быть положительным, но отрицательным.
  • Ложноположительный; Результат должен был быть отрицательным, но был положительным.
  • Истинный положительный; Результат должен быть положительным и положительным.
  • Истинный отрицательный; Результат должен быть отрицательным и отрицательным.

В вашем случае, если я правильно понимаю, вы пытаетесь определить, есть ли объекты в вашем изображении. Следовательно, ложный отрицательный результат означает, что существовал объект (результат должен быть положительным), но алгоритм не обнаружил его (и поэтому вернулся отрицательным). Истинный отрицательный результат - это просто алгоритм, правильно указывающий, что проверяемая область не содержит объекта.

Вы можете игнорировать отрицательные значения, но их можно использовать для дальнейшей подготовки вашего алгоритма (например, используя алгоритм, который ищет оба, вместо того, чтобы устанавливать все, что не признано ложным).

Ответ 2

Здесь есть приятное объяснение здесь. Показатель F1, объясненный в wiki и здесь, полезен для измерения успеха.

enter image description here

У меня есть попытка написать функцию, которая вычисляет оценку F1:

    /// <param name="realClasses">Class names that exists on the image. A class name may exists more than once.</param>
    /// <param name="foundClasses">Predicted class names. A class name may exists more than once.</param>
    private static void findPosNeg(List<string> realClasses, List<string> foundClasses, out int truePositive, out int falsePositive, out int falseNegative)
    {            
        Dictionary<string, int> dicReal = new Dictionary<string, int>(StringComparer.InvariantCultureIgnoreCase);
        Dictionary<string, int> dicFound = new Dictionary<string, int>(StringComparer.InvariantCultureIgnoreCase);
        #region fill dictionaries
        foreach (string className in realClasses)
        {
            if (!dicReal.ContainsKey(className))
                dicReal[className] = 1;
            else
                dicReal[className]++;
        }
        foreach (string className in foundClasses)
        {
            if (!dicFound.ContainsKey(className))
                dicFound[className] = 1;
            else
                dicFound[className]++;
        }
        #endregion

        truePositive = 0;
        falsePositive = 0;
        falseNegative = 0;
        foreach (string className in dicFound.Keys)
        {
            if (!dicReal.ContainsKey(className))
                falsePositive += dicFound[className];
            else
            {
                int found = dicFound[className];
                int real = dicReal[className];
                truePositive += Math.Min(found, real);
                if (real > found)
                    falseNegative += real - found;
                else if (found > real)
                    falsePositive += found - real;
            }
        }
        foreach (string className in dicReal.Keys)
            if (!dicFound.ContainsKey(className))
                falseNegative += dicReal[className];

    }
    /// <summary>
    /// Calculates F1Score ref:https://en.wikipedia.org/wiki/Precision_and_recall
    /// </summary>
    private static double calc_F1Score(int truePositive, int falsePositive, int falseNegative, out double precision, out double recall)
    {
        precision = (double)truePositive / ((double)truePositive + (double)falsePositive);
        recall = (double)truePositive / ((double)truePositive + (double)falseNegative);
        double div = (precision + recall);
        return (div != 0d) ? 2d * precision * recall / div : 0d;
    }

Ответ 3

AFAIK, True Negative - это сценарий, в котором объект присутствует на изображении, но не отмечен ни в аннотации наземной истинности, ни в прогнозе модели.

Обычно системы обнаружения двумерных объектов используют только две данные, то есть аннотации истинности земли и прогнозы модели. Однако, чтобы найти случаи True Negative, нам потребовался бы искомый расширенный набор основных аннотаций истинности, который содержит информацию обо всех экземплярах классов, присутствующих в изображении (а не только тех, которые являются специфическими для нашей модели).

Например, принимая данное изображение; если мы заинтересованы в обнаружении объектов для целей автономного вождения, мы можем рассмотреть две основные аннотации истинности, как показано ниже:

Super Set GT Аннотации

  • автомобиль (автомобили)
  • человек
  • дерево
  • животное
  • house_window
  • бургер (может быть брошен на дороге)

Автономное вождение GT Аннотации

  • автомобиль (автомобили)
  • человек
  • дерево
  • животное

С помощью двух вышеупомянутых основных аннотаций истинности можно было бы рассчитать истинные отрицательные значения для бургера и окна. Однако я сомневаюсь, что True Negatives можно рассчитать без аннотации надмножества.