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

В предыдущем посте Как использовать глубокое обучение для количественной оценки поведения опылителей я описал, как снимал цветы георгина, и использовал трансферное обучение, чтобы найти кадры, на которых был шмель. Таким образом, я мог легко подсчитать, сколько шмелей на самом деле посетили цветок (20 за 90 минут). К сожалению, сеть не распространялась на другие цветы, поэтому я решил создать новые данные с большим количеством шмелей со всеми видами освещения и фона. Для этого мне понадобились всевозможные картинки шмелей с разными молниями. Просто загрузить изображения шмелей из Интернета не было возможности. Они имеют тенденцию быть очень красивыми и артистичными, и детектор шмелей, который я построил на этих данных, действительно распознал шмелей по изображениям, загруженным из Интернета, но не обнаружил шмелей на моих не очень резких дерьмовых изображениях. Поэтому я хотел собирать разные изображения с помощью той же веб-камеры, которую я использую для сбора данных. Кроме того, была зима, поэтому на улице было немного сложно найти шмелей.

Итак, чтобы собрать изображения, я построил палатку в своей гостиной, посадил в нее цветы и накрыл дно зеленой бумагой. Затем я заказал он-лайн шмель. Шмелей доставили в нашу маленькую квартирку, и днем ​​они красиво летали, производя невероятный шум, намного больше, чем пылесос. К счастью, они спят по ночам, и во время эксперимента ночь была долгой. Вот изображение обстановки:

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

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

новый пиксель = (1-весовой коэффициент) * старый пиксель + вес * бипиксель,

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

Чтобы сделать простой детектор, я сделал сверточную нейронную сеть в Keras на вырезках из цветов массивов 45 x 45 x 3, содержащих пчелу или нет. Я старался, чтобы сеть была небольшой, но с хорошей производительностью. После этого я использовал простой алгоритм скольжения и обнаружения, чтобы найти шмелей. То есть я переместил окно просмотра по изображению, чтобы определить вероятность того, что это был шмель. Часто, когда пчела находится там, два места, расположенных близко друг к другу, имеют высокую вероятность. Я решил отфильтровать это, у которого есть недостаток в том, что если две пчелы подходят близко друг к другу, я часто теряю отслеживание одной из них. Однако в более естественных ситуациях, чем моя гостиная, шмели вряд ли будут ползать друг по другу. В моей гостиной они сделали, как вы можете видеть в следующем фильме:

Так что это не идеально, но на самом деле работает довольно хорошо. Все обнаружения действительно пчелы, но некоторые из них упускаются из виду. Пчелы в других наборах данных могут быть намного больше или меньше, чем 45 x 45, поэтому я работаю над выбором правильного решения для этого. Более того, алгоритм скольжения и проверки действительно прост, но требует больших вычислительных ресурсов.

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

Наконец, я хотел бы поблагодарить группу DTU-compute-cogsys из Датского технического университета за их теплый прием и обмен идеями и возможностями.