как уменьшить неправильное распознавание с помощью каскадного классификатора

Здравствуйте, я пытаюсь распознать автомобиль, используя каскадный классификатор, библиотеку Android и opencv. Моя проблема в том, что мой телефон почти все отмечает как автомобиль.

Я создал свой код на основе: https://www.youtube.com/watch?v=WEzm7L5zoZE и образец распознавания лиц. Мое приложение ведет себя очень странно, потому что маркировка выглядит случайной. Я даже не знаю, правильная ли маркировка машины или это просто какое-то случайное поведение. На данный момент он даже маркирует мою клавиатуру как автомобиль. Я не уверен, что я могу улучшить. Я не вижу никакого прогресса между тренировками до 5 или 14 этапов.

Я обучил свой файл до 14 этапов

мой код выглядит так:

@Override
public Mat onCameraFrame(Mat aInputFrame) {
    // return FrameAnalyzer.analyzeFrame(aInputFrame);
    // Create a grayscale image
    Imgproc.cvtColor(aInputFrame, grayscaleImage, Imgproc.COLOR_RGBA2RGB);

    MatOfRect objects = new MatOfRect();

    // Use the classifier to detect faces
    if (cascadeClassifier != null) {
        cascadeClassifier.detectMultiScale(grayscaleImage, objects, 1.1, 1,
                2, new Size(absoluteObjectSize, absoluteObjectSize),
                new Size());
    }

    Rect[] dataArray = objects.toArray();
    for (int i = 0; i < dataArray.length; i++) {
        Core.rectangle(aInputFrame, dataArray[i].tl(), dataArray[i].br(),
                new Scalar(0, 255, 0, 255), 3);
    }

    return aInputFrame;
}

person Fixus    schedule 07.12.2014    source источник
comment
Используйте больше отрицательных образцов и после обучения добавьте к отрицательным образцам ложные срабатывания и повторите обучение.   -  person Micka    schedule 07.12.2014
comment
@Micka добавляется ли второе обучение к первому или оно перезапишет первое? Большее количество негатива по отношению к позитиву дает лучшие результаты?   -  person Fixus    schedule 07.12.2014
comment
Не уверен насчет обучения детектору Хаара, но я думаю, вам придется полностью переучиться. Afaik, вы обычно используете гораздо больше отрицательных образцов (от 5x до 10x), чем положительных, но я не эксперт в машинном обучении...   -  person Micka    schedule 07.12.2014
comment
Или, может быть, не так драматично... взгляните на stackoverflow.com/questions/8935085/   -  person Micka    schedule 07.12.2014


Ответы (1)


Попробуйте изменить ниже.

  1. Использование COLOR_RGBA2RGB с cvtColor, как в примере кода, не даст изображение в градациях серого. Попробуйте RGBA2GRAY
  2. Увеличьте количество соседей в detectMultiScale. Теперь их 2. Больше соседей - больше уверенности в результате.
  3. Надеюсь, есть достаточно примеров для обучения. Быстрый поиск и чтение книг создает впечатление, что для обучения нужны тысячи изображений. Например, около 10000 изображений используются для обучения распознаванию символов. Для тренировки лица используется от 3000 до 5000 образцов.
  4. Что еще более важно, решите, действительно ли вы хотите пройти обучение по идентификации автомобиля. Могут быть лучшие методы идентификации транспортных средств. Например, для движущегося транспортного средства мы могли бы использовать методы, основанные на оптическом потоке.
person kiranpradeep    schedule 07.12.2014
comment
@Kirand спасибо за информацию. Я проверю все эти пункты. У меня есть некоторые положительные результаты с увеличением соседей - person Fixus; 10.12.2014