1

Метод AdaBoost от Viola-Jones очень популярен для обнаружения лица? Нам нужно много положительных и отрицательных образцов.собирать отрицательные образцы алгоритма adaboost для определения лица

Правило для сбора положительного образца прост: изображение, содержащее лица. Но правило для сбора отрицательной выборки не очень ясное: изображение, которое не содержит лиц.

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

Предлагаемая идея для отрицательных образцов: использование положительных образцов и обрезка области лица с использованием левой части в качестве отрицательных образцов. Это работа?

ответ

5

Вы задали много вопросов в своей теме.

  1. Количество образцов. Как правило: когда вы тренируете детектор, вам нужно примерно несколько тысяч положительных и отрицательных примеров на каждый этап. Типичный детектор имеет 10-20 ступеней. Каждый этап уменьшает количество отрицательных в 2 раза. Таким образом, вам понадобится примерно 3000 - 10 000 положительных примеров и от 5 000 000 до 100 000 000 отрицательных примеров.
  2. Какие отрицательные стороны принимать. Эмпирическое правило: вам нужно найти лицо в данной среде. Поэтому вам нужно принять эту среду как негативные примеры. Например, если вы пытаетесь обнаружить лица студентов, сидящих в классе, чем принимать в качестве негативных примеров изображения из класса (стены, окна, человеческое тело, одежду и т. Д.). Получение изображений луны или неба, вероятно, не поможет вам. Если вы не знаете свою среду, а не просто принимаете как можно больше различных естественных изображений (при различных условиях освещения).
  3. Если вы принимаете лицевые части (как глаз или нос) как отрицательные? Вы можете, но этого явно недостаточно (чтобы взять только те негативы). Действительная сила детектора будет исходить из отрицательных изображений, которые представляют собой типичный фон граней.
  4. Как собирать/генерировать отрицательные образцы - На самом деле вам не нужно много негативных изображений. Вы можете взять 1000 изображений и сгенерировать из них 10 000 000 отрицательных образцов. Вот как вы это делаете. Предположим, вы фотографируете автомобиль с разрешением 1 мегапикселя 1000x1000 пикселей. Предположим, что вы хотите тренировать детектор лица для работы с разрешением 20x20 пикселей (например, openCV). Таким образом, вы берете свое 1000x1000 большое изображение и разрезаете его на куски 20x20. Вы можете получить 2500 штук (50x50). Так вот как из одного большого изображения вы создали 2500 негативных примеров. Теперь вы можете взять такое же большое изображение и разрезать его на куски размером 10x10 пикселей. Теперь у вас будет еще 10 000 отрицательных примеров. Каждый пример имеет размер 10x10 пикселей, и вы можете увеличить его в 2 раза, чтобы весь образец имел одинаковый размер. Вы можете повторить этот процесс столько, сколько хотите (разрезание входного изображения на куски разного размера). Математически говоря, если ваше изображение имеет размер NxN - вы можете сгенерировать O (N^4) отрицательные примеры из него, вставив в него каждый возможный прямоугольник.
  5. На шаге 4 я описал, как взять одно большое изображение и разрезать его на большое количество негативных примеров. Я должен предупредить вас, что негативные примеры не должны иметь высокой ковариации, поэтому я не рекомендую брать только одно изображение и генерировать 1 миллион негативных примеров из него. Как правило, создайте библиотеку из 1000 изображений (или загрузите случайные изображения из Google). Убедитесь, что ни одно из изображений не содержит лиц. Обрезайте около 10 000 негативных примеров из каждого изображения, и теперь у вас есть достойные 10 000 000 негативных примеров. Обучите детектор. На следующем шаге вы можете вырезать каждое изображение до ~ 50 000 (частично перекрывающиеся части) и, таким образом, увеличить количество негативов до 50 миллионов.У вас начнутся хорошие результаты.
  6. Конечный шаг усовершенствования детектора. Когда у вас уже есть довольно хороший детектор, запустите его на многих изображениях. Он будет производить ложные обнаружения (обнаружить лицо, где нет лица). Соберите все эти ложные обнаружения и добавьте их в свой отрицательный набор. Теперь переустановите детектор еще раз. Чем больше таких итераций, тем лучше ваш детектор становится
  7. Реальные числа - Лучшие детекторы лица сегодня (например, Facebook) используют сотни миллионов положительных примеров и миллиарды негативов. В качестве положительных примеров они принимают не только лобные лица, но и лица во многих направлениях, разные выражения лица (улыбающиеся, кричащие, злые, ...), разные возрастные группы, разные полы, разные расы (кавказцы, чернокожие, тайские, китайские, .. ..), с или без очков/шляп/солнцезащитных очков/макияжа и т. д. Вы не сможете конкурировать с лучшими, поэтому не сердитесь, если ваш детектор пропустит какие-то лица.
    Удача
+0

Удивительный ответ! Еще один вопрос: должны ли быть отрицательные образцы одинакового размера? – tidy

+0

Да. Кроме того, если вы тренируете свой детектор на заданном разрешении (скажем, 20x20 пикселей или 24x24 - типично для лиц) - все ваши положительные и отрицательные примеры должны быть изменены до этого точного разрешения в том же формате (типичный уровень серого, без цвета) – DanielHsH

+0

Что такое подразумевается ** На следующем шаге вы можете вырезать каждое изображение до ~ 50 000 (частично перекрывающиеся части) и, таким образом, увеличить количество негативов до 50 миллионов. **? @DanielHsH –