Проблемы с trainCascadeObjectDetector

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

Модератор: Admin

donpedro
Пользователь
Сообщения: 2
Зарегистрирован: Вт янв 15, 2019 6:35 pm

Проблемы с trainCascadeObjectDetector

Сообщение donpedro » Пн янв 21, 2019 2:31 pm

Вопрос такой.
У меня есть серия черно-белых (gray-scale) фотографий веточки дерева, снятых регулярно с одной точки. Посередине каждой фотографии есть калибровочная пластинка - однотонный (хотя цвет его может меняться от снимка к снимку) прямоугольник одинакового размера. Ну, почти прямоугольник (чуть-чуть трапеция). Проблема в том, что он может слегка смещаться, и мне надо найти на каждом снимке его положение и сместить снимок так, чтобы положение пластинки на всех снимках было одмнаковым.
Я отметил положение пластинки на тренировочной выборке снимков с помощью imageLabeler, а затем запустил trainCascadeObjectDetector (в качестве негативной выборки использовались снимки другой веточки с пластинкой совсем другого размера и формы (изначально штук 50).
trainCascadeObjectDetector выдал:
Cannot find enough samples for training.

Когда я прибавил еще несколько сот снимков в негативную выборку, trainCascadeObjectDetector пошел писать:
"Warning: ComponentsConfiguration tag value is invalid. Tag value returned as-is. "
> In matlab.io.internal.imagesci.tifftagsprocess>handleComponentsConfiguration (line 144)
In matlab.io.internal.imagesci.tifftagsprocess>exiftagsprocess (line 58)
In matlab.io.internal.imagesci.tifftagsprocess (line 20)
In matlab.io.internal.imagesci.imjpginfo>incorporate_exif_metadata (line 70)
In matlab.io.internal.imagesci.imjpginfo (line 51)
In imjpginfo (line 20)
In imfinfo (line 237)
In vision.internal.cascadeTrainer.readImage>isImageIndexed (line 60)
In vision.internal.cascadeTrainer.readImage (line 22)
In trainCascadeObjectDetector (line 272)
In trainingMarkDetection (line 20)

И в конце:
Warning:
Unable to generate a sufficient number of negative samples for this stage.
Consider reducing the number of stages, reducing the false alarm rate
or adding more negative images.
> In trainCascadeObjectDetector (line 272)
In trainingMarkDetection (line 20)

Cannot find enough samples for training.
Training will halt and return cascade detector with 6 stages
Time to train stage 7: 93 seconds


После чего при запуске
detector = vision.CascadeObjectDetector('markDetector.xml');
[NposFiles,~] = size(gTruth.LabelData);
for i=1:NposFiles
fileName = char(gTruth.DataSource.Source(i));
img = imread(fileName);
bbox = step(detector,img);
....
end


ни на одном снимке он ничего не нашел.
Что можно с этим сделать? Может быть использовать другую процедуру, вместо trainCascadeObjectDetector? Повторю: объект для обнаружения простейший, однотонный, постоянной формы и размеров, различающийся лишь яркостью и чуть-чуть положением.
Спасибо.

donpedro
Пользователь
Сообщения: 2
Зарегистрирован: Вт янв 15, 2019 6:35 pm

Re: Проблемы с trainCascadeObjectDetector

Сообщение donpedro » Вт янв 22, 2019 11:11 am

P.S. Я уменьшил число стадий в trainCascadeObjectDetector до 6. Теперь он кончил на 3й стадии после таких же сообщений. Теперь он определяет положение пластинки на некоторых снимках, но ни разу правильно.