• Как зашифровать извлеченные биометрические признаки на выходе обучения классификатора/нейросети?

    @SolidMinus
    По поводу безопасности я все четко описал в комментах к своей статье.

    Если делать проверку биометрических признаков при помощи MLP-классификатора, то шифровать не имеет смысла, сама матрица весов нейронной сети уже будет чем-то вроде хэша, а feed-forward входного вектора через нейронную сеть - сверкой с этим хэшом. Таким образом по моему ту методу имеем N матриц весов, где N - количество пользователей, хранить вектора уже не имеет смысла.

    https://habrahabr.ru/post/336198/

    Кстати, удачно, всего через 5 дней после вашего вопроса. Прочтите статью, мб интересные идеи оттуда подчерпнете.
    Ответ написан
    6 комментариев
  • Как зашифровать извлеченные биометрические признаки на выходе обучения классификатора/нейросети?

    begemot_sun
    @begemot_sun
    Программист в душе.
    Обучаете автоэнкодер на ваших данных. Потом берете средний слой (самый наименьший по кол-ву нейронов), он то и будет "абстрактным" кодом вашего изображения. Или я не понял вопроса ?
    Ответ написан
    4 комментария
  • Как правильно построить структуру программы?

    Поиграйтесь с cv::rectangle, cv::addWeighted и cv::putText.
    Вот код прямиком из рабочего проекта, рисует полупрозрачный прямоугольник и пишет строки текста:

    cv::Mat writeOnImage(const cv::Mat& source, const std::vector<std::string>& lines, int width)
    {
    	auto rect = source.clone();
    	cv::rectangle(rect, { 10, 10 }, { width, 20 + 50 * static_cast<int>(lines.size()) }, cv::Scalar(0, 0, 0), cv::FILLED);
    
    	auto result = cv::Mat();
    	cv::addWeighted(source, 0.6, rect, 0.4, 0.0, result);
    
    	for (size_t i = 0; i < lines.size(); ++i) {
    		cv::putText(result, lines[i], { 20, 50 + 50 * static_cast<int>(i) }, cv::FONT_HERSHEY_PLAIN, 3, cv::Scalar(10, 255, 255), 3, cv::LINE_8);
    	}
    
    	return result;
    }
    Ответ написан
    1 комментарий
  • Критерии выбора значимых признаков для SVM классификации (метод опорных векторов)?

    YasonBy
    @YasonBy
    Прежде всего, не нужно зацикливаться на SVM: это всего лишь один из многих методов классификации. Да, у SVM есть своя специфика (у других методов — своя), но на данном этапе Вы вполне можете использовать общие алгоритмы предобработки данных.

    какие именно признаки брать?
    Это называется feature selection и feature extraction.

    Простыми словами, процесс выглядит так:
    1. Составляем список имеющихся признаков.
    2. Добавляем в него различные функции от признаков (как упомянутый логарифм от веса), комбинации разных признаков (например, длина*ширина*высота), и т.п. Что именно комбинировать и какие преобразования использовать, должно подсказать знание задачи и здравый смысл. Этот процесс относится к feature extraction.
    3. Задаём функцию ошибки, то есть определяем как будет оцениваться точность классификации. Например, это может быть отношение правильно распознанных примеров к их общему количеству. Здесь полезно почитать про precision and recall.
    4. Переходим на один уровень абстракции выше.
    Представим эдакий чёрный ящик, внутри которого находится классификатор вместе с обучающей и тестирующей выборками. На входе ящика — двоичный вектор, указывающий, какие признаки должен использовать классификатор; на выходе — величина ошибки классификации (на тестовой выборке).

    Таким образом, задача выбора признаков сводится к задаче оптимизации: нужно найти такой входной вектор, при котором выходное значение ящика (ошибка классификации) будет минимально. Можно, например, добавлять признаки по одному (начиная с тех, которые сильнее всего улучшают результат) — см. градиентный спуск. Можно использовать что-то посерьёзнее, типа генетических алгоритмов.

    Нужно ли при этом нормализовывать численные значения этих признаков?
    Это сильно зависит от конкретной задачи и самих признаков.

    Что делать если количество зерен в реальности (в обучающей выборке) относится к количеству плевел как 1/200? Портит ли это обучающую выборку?
    В общем случае, портит: если одних примеров гораздо меньше, чем других, существует риск, что классификатор «запомнит» примеры из обучающей выборки, и не сможет адекватно разпознавать другие похожие примеры (Overfitting).
    К тому же, если используется простейшая функция ошибки (правильно_распознанных / размер_выборки), философски настроенный классификатор может всегда отвечать «плевел» — и в 99.5% случаев будет прав :)
    Ответ написан
    1 комментарий