Как выбрать наборы изображений для обнаружения и отслеживания объектов? - PullRequest
2 голосов
/ 23 марта 2020

Я должен считать яйца на конвейерной ленте. Яйца можно увидеть по-разному.

Small, large, odd-shaped, dirty, cracked, broken, broken empty inside, broken with liquid inside, next to chicken feather, many eggs touching to each others, even some eggs might be sitting on top of some group of other eggs.

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

У меня уже есть какое-то решение, работающее на Jetson Nano. Он считает яйца, находя счетчики на относительно темном фоне (вычитание фона). Он в некоторой степени неплохо справляется с работой, хотя и медленно.

Мой вопрос (ы);

Теперь я хочу сделать это больше с deep-learning models используя object detection и object tracking в одном алгоритме вместе. Это усилие все еще можно считать экспериментом для меня.

Прежде всего, мне нужно иметь несколько наборов изображений, поэтому мне нужны некоторые советы по этому вопросу.

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

Что я не уверен, где и как делать снимки. Нужно ли делать снимки с естественной средой / фоном объекта? И как? я должен сделать снимок каждого возможного появления яиц, как я перечислил выше, помещая их по конвейерной ленте один за другим, а также каждый раз немного меняя их ориентацию?

Или я должен делать каждый выстрел снова один за другим с белым фоном и снова, а также немного изменяя их ориентацию каждый раз?

Образец образца с конвейерной ленты:

enter image description here

1 Ответ

2 голосов
/ 24 марта 2020
  1. Сначала создайте набор данных яиц с ограничивающими прямоугольниками (около 1 Кб, затем используйте увеличение, чтобы сделать еще несколько тысяч). Вы можете использовать следующие инструменты для аннотирования:

https://github.com/developer0hye/Yolo_Label (прекрасно работает, но только для windows)

https://github.com/AlexeyAB/Yolo_mark

https://github.com/heartexlabs/label-studio (это более сложный инструмент аннотации для многих других задач)

Поскольку это встроенное решение, и яйца будут двигаться, вам нужно что-то с хорошим FPS, а также с разумной картой. Из моих экспериментов со многими моделями обнаружения объектов я обнаружил, что yolov3 (dar knet) является наиболее стабильным.

Я бы предложил go с dar knet YOLO, что написанный на C ++, вам не нужно было бы писать какой-либо основной код, он будет быстрым и точным.

https://pjreddie.com/darknet/yolo/

Используйте этот репозиторий, если вы Linux https://github.com/pjreddie/darknet

Используйте этот режим, если вы используете Windows https://github.com/AlexeyAB/darknet

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

https://github.com/zabir-nabil/yolov3-anchor-clustering

Я провел небольшую настройку (например, отправку массивов OpenCV / numpy непосредственно в модель), чтобы ускорить работу API dar knet python на сервере (сервер модели tenorflow с REST и gRP C). Я также написал flask сервер для него. Вы можете найти его здесь -

https://github.com/zabir-nabil/tf-model-server4-yolov3

Об разрешении изображения: Размер по умолчанию для yolov3 равен (416, 416), которого должно быть достаточно для твой случай. Таким образом, вы должны делать снимки той же / аналогичной камерой, которую вы будете использовать в реальной среде разработки. Пи-камеры должно быть достаточно, вы также можете использовать более качественные камеры, но в конце вы должны изменить их размер до (416 416).

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

20% изображений с 0 яйцами. Остальные 80% будут формировать несколько равномерное или плоское гауссово распределение, если значение 80% = = 1000 изображений, количество изображений с 1 яйцом будет 1000 / (диапазон) = 1000 / (25-1 + 1) = 1000/25 = 40, то же самое для других (2-25).

Для яркости, контраста, освещения вам следует просто go с тем, который будет очень близок к реальному сценарию развертывания, а остальное позаботится об увеличении. Yolov3 очень прочный, поэтому вам не нужно слишком беспокоиться о фоновом шуме.

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

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