Размер изображения Darknet YOLO

Я пытаюсь обучить классификатор пользовательских объектов в Darknet YOLO v2 https://pjreddie.com/darknet/yolo/

Я собрал набор данных для изображений, большинство из которых имеют размер 6000 x 4000 пикселей, а также некоторые более низкие разрешения.

Нужно ли мне изменять размер изображений перед тренировкой, чтобы получить квадрат?

Я обнаружил, что в конфиге используются:

[net]
batch=64
subdivisions=8
height=416
width=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

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

Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
18
0
34 698
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Очень часто перед тренировкой размер изображений изменяется. 416x416 немного больше обычного. Большинство моделей imagenet изменяют размер и квадрат изображения, например, до 256x256. Так что я ожидал того же и здесь. Попытка тренироваться на 6000x4000 потребует целого ряда графических процессоров. Стандартный процесс - это квадрат изображения по наибольшему размеру (высоте или ширине), заполнение нулями на более короткой стороне, а затем изменение размера с помощью стандартных инструментов изменения размера изображения, таких как PIL.

Как насчет того, чтобы сделать прогноз на изображении 6000x4000 после обучения данных с помощью модели. это сработает?

Profstyle 03.04.2020 09:29

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

David Parks 03.04.2020 18:06

так что для обнаружения одного изображения размером 6000x4000 нам нужно установить наш файл cnfg таким большим, как этот? я немного запутался. Я не хочу делать тайлинг, но тоже получил бы высокую точность

Profstyle 05.04.2020 13:54

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

David Parks 05.04.2020 21:15
Ответ принят как подходящий

Вам не нужно изменять его размер, потому что Darknet сделает это вместо вас!

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

Небольшое обновление / комментарий: я обнаружил, что есть другие репозитории на основе даркнета (например, это), которые не поддерживают соотношение сторон. Отметьте это: github.com/AlexeyAB/darknet/issues/232#issuecomment-33695548‌ 5

Nerxis 06.08.2018 16:36

Вам не нужно изменять размер изображений, вы можете напрямую изменить значения в файле darknet.cfg.

  1. Когда вы открываете файл darknet.cfg (yolo-darknet.cfg), вы можете все
    гиперпараметры и их значения.
  2. Как показано в вашем файле cfg, размеры изображений составляют (416 416) -> (вес, высота), вы можете изменить значения, чтобы даркнет автоматически изменял размер изображений перед тренировкой.
  3. Поскольку изображения имеют большие размеры, вы можете настроить значения пакета и подразделения (уменьшите значения 32,16,8. Они должны быть кратны 2), чтобы даркнет не вылетел (ошибка выделения памяти)

Вам не нужно изменять размер изображений базы данных. Архитектура YOLO от PJReddie делает это сама, сохраняя безопасное соотношение сторон (никакая информация не пропадает) в соответствии с разрешением в файле .cfg. Например, если у вас размер изображения 1248 x 936, YOLO изменит его размер до 416 x 312, а затем заполнит дополнительное пространство черными полосами, чтобы оно поместилось в сеть 416 x 416.

По умолчанию API даркнета изменяет размер изображений как при выводе, так и при обучении, но теоретически любой размер ввода w, h = 32 x X, где X принадлежит натуральному числу, должен, W - ширина, H - высота. По умолчанию X = 13, поэтому размер ввода w, h = (416, 416). Я использую это правило с yolov3 в opencv, и оно работает лучше, чем больше X.

Другие вопросы по теме