Раньше, для детектирования объектов на изображении, применялся метод скользящего окна — когда прямоугольная область определённой ширины и высоты, перемещается («скользит») по изображению:
Такой подход очень просто реализуется кодом вида:
# sliding window across the image for y in range(0, temp_img.shape[0]-img_height, step_y): for x in range(0, temp_img.shape[1]-img_width, step_x): print('Rect: {} {} {} {}'.format(x, y, x+img_width, y+image_height)) # test_img = temp_img[y:y+img_height, x:x+img_width] # TODO: make prediction here color = (0,255,0) cv2.rectangle(temp_img, (x, y), (x+img_width, y+img_height), color) cv2.imshow('slide', temp_img) k = cv2.waitKey(20) & 0xFF
Но теперь, с развитием свёрточных нейронных сетей и глубокого обучения, появились сети, которые на своём выходе дают не только класс объекта, но и ограничивающий объект прямоугольник: x,y,w,h.
Получается действительно очень здорово — всего одно выполнение сети и все объекты на изображении будут найдены и отмечены.
YOLO: You only look once
SSD: Single Shot MultiBox Detector
Примеры работы
UPD 2017-06-06
CS231n Lecture 8 — Localization and Detection
Статьи
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks (PDF)
SSD: Single Shot MultiBox Detector (PDF)
YOLO9000: Better, Faster, Stronger (PDF)
Ссылки
https://pjreddie.com/darknet/yolo/
YOLO — код на [C + CUDA], [Tensorflow]
По теме
Sliding Windows for Object Detection with Python and OpenCV
OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks (PDF)
Нейрореволюция в головах и сёлах
Почему супер-мега-про машинного обучения за 15 минут всё же не стать
Awesome Deep Vision
Нейронная сеть
Нейронная сеть — введение
Принцип обучения многослойной нейронной сети с помощью алгоритма обратного распространения
Пример работы самоорганизующейся инкрементной нейронной сети SOINN