opencv распознавание лиц ложные срабатывания неизвестная категория

Реализация All в соответствии с ILSpy (как в действительности я пошла и посмотрела, а не «хорошо, этот метод немного похож ...» Я мог бы сделать, если бы мы обсуждали теорию, а не влияние) .

public static bool All<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
    if (source == null)
    {
        throw Error.ArgumentNull("source");
    }
    if (predicate == null)
    {
        throw Error.ArgumentNull("predicate");
    }
    foreach (TSource current in source)
    {
        if (!predicate(current))
        {
            return false;
        }
    }
    return true;
}

Реализация Any в соответствии с ILSpy:

public static bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
    if (source == null)
    {
        throw Error.ArgumentNull("source");
    }
    if (predicate == null)
    {
        throw Error.ArgumentNull("predicate");
    }
    foreach (TSource current in source)
    {
        if (predicate(current))
        {
            return true;
        }
    }
    return false;
}

Конечно, может быть какая-то тонкая разница в произведенном IL. Но нет, нет, нет. IL - это почти то же самое, но для очевидной инверсии возврата истины в соответствие с предикатом по сравнению с возвратом false при несоответствии предикатов.

Это, конечно, linq-for-objects. Возможно, что какой-то другой провайдер linq рассматривает один гораздо лучше, чем другой, но если это так, то довольно случайный, который получает более оптимальную реализацию.

Казалось бы, исключительно для тех, кто чувствует, что if(determineSomethingTrue) проще и читабельнее, чем if(!determineSomethingFalse). И, честно говоря, я думаю, что у них немного точка в том, что я часто нахожу if(!someTest) запутанной *, когда есть альтернативный тест с равной многословностью и сложностью, который вернет true для условия, на которое мы хотим действовать. Тем не менее, на самом деле, я лично не нахожу ничего, чтобы одобрить одну из двух альтернатив, которые вы даете, и, возможно, немного наклонился бы к первому, если бы предикат был более сложным.

* Не путайте, как в I don я не понимаю, но смущаю, как в том, что я беспокоюсь, что есть какая-то тонкая причина для решения, которое я не понимаю, и требуется несколько умственных пропусков, чтобы понять, что «нет, они просто решили сделать это таким образом, подождать, что было Я снова смотрю этот бит кода? ... "

0
задан serj 16 January 2019 в 08:35
поделиться

1 ответ

Это одна из хорошо известных проблем в области статистики и нейронных сетей, называемая Проблема распознавания открытых множеств .

По сути, классификатор, который вы обучили, вычисляет только вероятность класса для выборки и, как правило, не имеет возможности различать метки вне известных / обученных классов.

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

Одним из возможных решений является придание байесовских свойств нейронной сети. В байесовской нейронной сети все веса и уклоны имеют распределенное распределение вероятностей. Вы можете сделать несколько проходов вперед во время вывода и интерпретировать выходную вероятность неопределенности для каждого класса.

Надеюсь, мои 2 цента помогут.

0
ответ дан Rex Low 16 January 2019 в 08:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: