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

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

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

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

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

Эти блоки, также называемые ячейками сетки, представлены в нейронной сети рядом нейронов (см. рисунок ниже) в выходном слое сверточной нейронной сети. Одна строка представляет разные свойства, связанные с одним полем. Этими свойствами являются высота объекта, ширина объекта, координата по оси x центра объекта в поле, координата по оси y центра объекта в поле, класс объекта и уверенность Yolo в его предсказании.

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

Полный вывод для ячейки сетки приведен ниже.

[[h, w, x, y, класс 1, класс 2, класс 3, класс 4, …., класс n, достоверность], [h, w, x, y, класс 1, класс 2, класс 3, класс 4, …. , класс n, достоверность], [h, w, x, y, класс 1, класс 2, класс 3, класс 4, …., класс n, достоверность]]

Как видите, на ячейку сетки приходится несколько полей. Это связано с тем, что ячейка сетки может иметь центр нескольких объектов, поэтому для обнаружения всех этих объектов у нее есть несколько полей. По мере увеличения количества ящиков и класса на ячейку сетки будет увеличиваться и количество фильтров в выходном слое сверточной нейронной сети.

Для обучения Yolo используется функция ошибок, которая корректирует высоту объекта, ширину объекта, положение центра объекта по оси x в ячейке сетки, положение центра объекта по оси y в ячейке сетки, класс объекта и насколько точным является его предсказание коробки, рассчитанное с использованием долговой расписки, которая используется для определения его достоверности. Если ячейка сетки не имеет центра объектов, то для этой ячейки сетки корректируется только достоверность, а другие выходные данные игнорируются.

Функция ошибки Yolo

1_{gb}^{obj} умножает то, что следует за ним, на единицу, если центр объектов существует в ячейке g этой сетки, b иначе умножает на 0. Это делается для обучения нейронов, отвечающих за предсказание, поскольку это приводит к более плавным градиентам.

Некоторые объекты будут большего размера, другие среднего размера, третьи маленького размера. В результате они будут иметь разную величину ошибки. Но для нас ошибка большого ящика имеет такое же значение, как ошибка среднего или маленького ящика. Чтобы решить эту проблему, высота h и ширина w были взяты из квадратного корня.

Ошибка классификации p_gb(c) для идентификации класса является кросс-энтропийной ошибкой.

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

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

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

Во время логического вывода в качестве выходных данных используются поля с высокой достоверностью, предсказанной сверточной нейронной сетью.