Как исправить "Проверка не удалась: background_label_id! = Label (0 против 0) Найдена фоновая метка в наборе данных" в обучающем SSD? - PullRequest
0 голосов
/ 10 января 2019

Я обучаю модель SSD, выполнив шаги, указанные в вики, чтобы обучить SSD для пользовательского набора данных . У меня есть около 60 тыс. Изображений с фоном в качестве ярлыка для устранения ложных срабатываний. (Обратите внимание, что У меня нет изображения только с фоновыми метками .) Созданы файлы lmdb для обучения и тестирования без каких-либо проблем. Когда я начинаю тренировку, я получаю следующую ошибку:

    bbox_util.cpp:1066] Check failed: background_label_id != label (0 vs. 0) Found background label in the dataset.

    *** Check failure stack trace: ***
        @     0x7f00cfcef5cd  google::LogMessage::Fail()
        @     0x7f00cfcf1433  google::LogMessage::SendToLog()
        @     0x7f00cfcef15b  google::LogMessage::Flush()
        @     0x7f00cfcf1e1e  google::LogMessageFatal::~LogMessageFatal()
        @     0x7f00d057ed71  caffe::GetGroundTruth<>()
        @     0x7f00d03f5f7e  caffe::MultiBoxLossLayer<>::Forward_cpu()
        @     0x7f00d0541537  caffe::Net<>::ForwardFromTo()
        @     0x7f00d05418a7  caffe::Net<>::Forward()
        @     0x7f00d05db510  caffe::Solver<>::Step()
        @     0x7f00d05dbf9e  caffe::Solver<>::Solve()
        @           0x40bcf4  train()
        @           0x4077c8  main
        @     0x7f00ce486830  __libc_start_main
        @           0x408099  _start
        @              (nil)  

Я искал ту же проблему в git repo , но ни одно из предложенных решений не сработало.

Это скрипт, который я использую для обучения: train_ssd.py Файл, который выдает ошибку: bbox_util.cpp

Ссылка на исходные файлы: src / caffe

Как начать обучение с помеченными фонами в наборе данных (чтобы исключить ложные срабатывания) без каких-либо проблем?

1 Ответ

0 голосов
/ 14 января 2019

Во-первых, в текущей реализации Caffe-SSD невозможно получить идентификатор класса, равный 0, поскольку он зарезервирован для фона. Технически, вы могли бы использовать другой идентификатор класса для него, но это будет не то же самое.

Я много работал с SSD и никогда не слышал о явной маркировке фона. Более того, я считаю, что это не имеет никакого смысла, так как концепция фона принципиально отличается от характерных объектов (например, при не максимальном подавлении).

Устранение ложных срабатываний является частью цели обучения (уменьшение ложных срабатываний, повышение уровня истинных положительных результатов, уменьшение ложных срабатываний и т. Д.). Таким образом, правильное обучение вашей модели целевому набору данных поможет вам в этом.

Если вашей мотивацией является выборка фоновых образцов из изображений, на которых нет аннотированных объектов вашего класса: вы можете ввести вспомогательный класс просто для того, чтобы это произошло, а затем отбросить его / игнорировать его обнаружения. Однако обычно SSD не имеет проблем с количеством отрицательных выборок. Действительно, существует гиперпарам, который ограничивает отношение отрицательных выборок, чтобы не подавлять выборки положительных объектов. Значения по умолчанию - 3: 1 (отрицательный / положительный), но вы можете увеличить его, чтобы увидеть, поможет ли это вам в вашей задаче.

...