Мой классификатор CNN дает неправильный прогноз на случайных изображениях - PullRequest
0 голосов
/ 16 октября 2018

Я обучил свой классификатор CNN (используя тензорный поток) трем категориям данных (удостоверение личности, паспорт, счета).
Когда я проверяю его с изображениями, которые принадлежат к одной из 3 категорий, он дает правильный прогноз.Однако, когда я тестирую его с неправильным изображением (например, с изображением автомобиля), он продолжает давать мне прогноз (то есть он предсказывает, что автомобиль относится к категории идентификационной карты).

Есть ли способ заставить его отображать сообщение об ошибке вместо неправильного прогноза?

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Это нужно решать по-другому.Это известно как проблема распознавания открытого множества .Вы можете найти его в Google и узнать больше об этом, но в основном это так: вы не можете обучить свой классификатор каждому из возможных классов.Он всегда сталкивается с каким-то другим классом, с которым он не знаком и которого он еще не видел.

Существует несколько решений, из которых я выделю 3 из них:

  1. Отдельный двоичный классификатор - Вы можете создать отдельный двоичный классификатор, который распознает изображения и сортирует их по двум категориям в зависимости от того, есть ли на изображении счет, паспорт или удостоверение личности или нет.Если это так, он должен позволить алгоритму, который вы уже создали, обработать изображение и классифицировать его в одну из 3 категорий.Если первый классификатор говорит, что на изображении есть какой-то другой объект, вы можете сразу же удалить это изображение, потому что это не изображение счета / паспорта / удостоверения личности.

  2. Порог .В случае, когда идентификатор находится на изображении, вероятность идентификатора высока, а вероятности для счета и паспорта довольно низки.В случае, когда изображение является чем-то другим (например, автомобиль ), вероятности, скорее всего, примерно одинаковы для всех 3 классов.Другими словами, вероятность ни для одного из классов действительно не выделяется.Это ситуация, в которой вы выбираете наибольшую вероятность из сгенерированных и устанавливаете выходной класс как класс этой вероятности, независимо от значения вероятности, равного 0,4 или что-то подобноеЧтобы решить эту проблему, вы можете установить пороговое значение, скажем, 0,7, и сказать, что если ни одна из вероятностей не превышает этот порог, на картинке есть что-то еще (не удостоверение личности, паспорт или счет).

  3. Создать четвертый класс: Неизвестно .Если вы выберете эту опцию, вы должны добавить несколько других изображений в набор данных и пометить их unknown .Затем обучите классификатор и посмотрите, каков будет результат.

Я бы порекомендовал 1 или 2. Надеюсь, это поможет:)

0 голосов
/ 16 октября 2018

Это на самом деле не проблема программирования, она намного сложнее.То, что вы хотите, называется Обнаружение вне распределения, когда классификатор может сообщить вам, что выборка отсутствует в обучающем наборе.

Существуют недавние исследовательские работы, посвященные этой проблеме, такие как * 1003.*https://arxiv.org/abs/1802.04865 и https://arxiv.org/abs/1711.09325

Как правило, вы не можете использовать модель, которая не была специально обучена для этого, например, вероятности, полученные с помощью классификатора softmax, не калибруются для этой цели, поэтому пороговое значение этихвероятности не будут работать вообще.

0 голосов
/ 16 октября 2018

Самый простой способ - просто добавить четвертую категорию для всего, кроме трех, и обучить ее различным совершенно случайным фотографиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...