Цитата из YOLO вступительная статья :
2,4. Ограничения YOLO
YOLO накладывает строгие пространственные ограничения на предсказания ограничивающего прямоугольника, поскольку каждая ячейка сетки предсказывает только два прямоугольника и может иметь только один класс. Это пространственное ограничение ограничивает количество близлежащих объектов, которые может предсказать наша модель. Наша модель борется с небольшими объектами, которые появляются в группах, например стаями птиц.
Начиная с YOLO версии 1, распознавание небольших и многомасштабных объектов значительно улучшилось, но я не нашел никаких доказательств того, что оно улучшилось при распознавании небольших сгруппированных объектов (поправьте меня, если я ошибаюсь, пожалуйста).
Будет проблематично распознать очень маленькие объекты на больших изображениях с высоким разрешением, поскольку YOLOv3 уменьшит их до 416x416 (или 320x320, если вы используете разрешение YOLOv3 320 ). Вы можете подавать YOLOv3 области изображения, если оно слишком большое. Или вы можете найти некоторые существующие решения для таких случаев.
В этой статье парни объединили детектор на основе CNN с полностью сверточной сетью и семантической сегментацией на основе суперпикселей, используя машины опорных векторов для достижения высокой производительности при обнаружении небольших объектов на больших изображениях. Они утверждают, что достигли высокой точности обнаружения.
Но часто вы можете использовать гораздо более простые подходы, которые включают лишь небольшую часть алгоритмической обработки изображений, если относительная разница между объектом, который вы хотите обнаружить, и его окружением очевидна и проста для вычисления.
Вы можете попытаться обнаружить стадо по высокому цветовому контрасту между птицами и небом. Обычно птицы выглядят намного темнее на фоне неба. Для этого вам могут пригодиться этот и этот этот документ OpenCV о пороге изображения.
int main(){
Mat src = imread("1.jpg");
Mat gray;
cvtColor(src, gray, CV_BGR2GRAY);
Mat thresholded;
threshold(gray, thresholded, 100, 255, CV_THRESH_BINARY_INV);
imwrite("2.jpg", thresholded);
return 0;
}
Я получил это:
Теперь вы можете извлекать капли белой птицы с помощью findContours()
или SimpleBlobDetector
(и сопоставлять их с шаблонами или делать дополнительное распознавание / классификацию, если это требуется).