Миграция на другой детектор или модель

Совет

Не стесняйтесь обращаться к нашим специалистам по вопросам миграции по адресу info@ntechlab.com.

Иногда вам может потребоваться миграция экземпляра FindFace Enterprise Server SDK на другой детектор лиц или модель нейронной сети. Как правило, данная процедура необходима при обновлении до последней версии продукта.

Совет

Сводные сведения по моделям см. здесь.

При смене детектора лиц вам следует повторно сгенерировать нормализованные изображения и миниатюры лиц, а также векторы признаков.

Предупреждение

Различные детекторы лиц обладают разной чувствительностью к чертам лица. Имейте в виду, что новый детектор может пропустить ранее найденные лица.

В этом разделе:

Утилиты

Для миграции экземпляра FindFace Enterprise Server SDK вам потребуются следующие утилиты:

Утилита Описание
findface-regenerate Скрипт, который повторно генерирует и перезаписывает данные лиц в MongoDB, применяя новые настройки детектора или модель нейронной сети к изображениям в папке Uploads.
mongo2searchapi Скрипт, который копирует перегенерированные векторы признаков из MongoDB в Tarantool.

Обе утилиты автоматически устанавливаются вместе с компонентом findface-facenapi.

Требования

Папка /var/lib/ffupload/uploads/ (Uploads) должна быть заполнена как минимум исходными изображениями. Ее содержимое можно просмотреть в браузере по адресу http://<findface_upload_IP:3333/uploads/.

В общем случае утилита findface-regenerate работает с папкой Uploads следующим образом:

Случай использования Принцип работы
Смена настроек детектора Утилита findface-regenerate прогоняет исходные изображения через компоненты facenapi и nnapi с новыми настройками детектора [и модели] и возвращает перегенерированные нормализованные изображения лиц, миниатюры лиц и векторы признаков.
Смена модели Утилита findface-regenerate прогоняет нормализованные изображения лиц через компонент nnapi с новыми настройками модели и возвращает перегенерированные векторы признаков.

Повторная генерация артефактов

Важно

Перед проведением любых операций с базой данных MongoDB обязательно создайте резервную копию.

Примените утилиту findface-regenerate следующим образом:

  1. Перейдите в папку /usr/bin/. Отобразите и внимательно изучите справку по утилите findface-regenerate:

    cd /usr/bin/
    findface-regenerate --help
    
    ## findface-regenerate --help
    
    Usage: /usr/bin/findface-regenerate [OPTIONS]
    
    Options:
    
     --help                           show this help information
    
    /usr/lib/python3/dist-packages/facenapi/core/decoders/decoder_threaded.py options:
    
     --max-size                       Maximum allowed photo width/height (default
                                     4000)
    
    /usr/lib/python3/dist-packages/facenapi/core/detectors/detector_dlib.py options:
    
     --dlib-adjust-threshold          Adjust face detector threshold (default 0.0)
     --dlib-max-size                  images with width or height larger than
                                      dlib_max_size will be scaled down before
                                      being fed into detector (default 1200)
     --dlib-normalizer                path to normalizer data (default
                                      /usr/share/findface-data/normalizer.dat)
    
    /usr/lib/python3/dist-packages/facenapi/core/detectors/detector_nnd.py options:
    
     --nnd-max-face-size              Maximum face size in pixels (no limit if 0)
                                      (default 0)
     --nnd-min-face-size              Minimum face size in pixels (default 30.0)
     --nnd-o-net-thresh                (default 0.9)
     --nnd-p-net-thresh                (default 0.5)
     --nnd-r-net-thresh                (default 0.5)
     --nnd-scale-factor                (default 0.79)
     --nnd-workers                    Number of detector workers threads. (0 - as
                                      much as there are cpus) (default 0)
    
    /usr/lib/python3/dist-packages/facenapi/core/main_utils.py options:
    
     --decoder                        Image decoder (threaded) (default threaded)
     --detector                       Face detector (dlib,nnd) (default nnd)
     --extractor                      Feature extractor (nnapi,extraction-api)
                                      (default nnapi)
     --facen-storage                  Feature vector storage
                                      (searchapi_replicated,tntapi,searchapi)
                                      (default tntapi)
     --id-generator                   Face id generator (tntime,mongo) (default
                                      tntime)
    
    /usr/lib/python3/dist-packages/facenapi/server/context.py options:
    
     --fetch-proxy                    Fetch images from urls via proxy, ex:
                                      http://1.2.3.4:3128
     --ffupload-url                   url (without path) to PUT images uploaded to
                                      /face, ex: http://127.0.0.1:1234
     --friend-count                    (default 5)
     --friend-interval                 (default 604800)
     --gae                            enable Gender, Age and Emotions support
                                      (default False)
     --mongo-host                     mongo database host (default localhost)
     --mongo-port                     mongo database port (default 27017)
     --person-identify                identify persons (default False)
     --person-identify-global         identify persons across all cameras (default
                                      False)
     --person-identify-threshold      threshold for persons identify (default
                                      0.75)
     --upload-path                    path of $ffupload_url (default uploads)
    
    /usr/lib/python3/dist-packages/facenapi/server/regenerate_facens.py options:
    
     --config                         path to config file
     --coroutines                     Number of parallel coroutines (default 30)
     --every-other                     (default 1)
     --every-other-offset              (default 0)
     --facen-size                     Facen size in number of floats. (facens of
                                      this sizes are not regenerated when smart
                                      regeneration is enabled) (default -1)
     --max-id                         Maximum id (inclusive)
     --min-id                         Minimum id (inclusive)
     --regenerate                     What to regenerate: facens, thumbs,
                                      normalized (comma-separated). (default
                                      facens)
    
    /usr/lib/python3/dist-packages/tornado/log.py options:
    
     --log-file-max-size              max size of log files before rollover
                                      (default 100000000)
     --log-file-num-backups           number of log files to keep (default 10)
     --log-file-prefix=PATH           Path prefix for log files. Note that if you
                                      are running multiple tornado processes,
                                      log_file_prefix must be different for each
                                      of them (e.g. include the port number)
     --log-rotate-interval            The interval value of timed rotating
                                      (default 1)
     --log-rotate-mode                The mode of rotating files(time or size)
                                      (default size)
     --log-rotate-when                specify the type of TimedRotatingFileHandler
                                      interval other options:('S', 'M', 'H', 'D',
                                      'W0'-'W6') (default midnight)
     --log-to-stderr                  Send log output to stderr (colorized if
                                      possible). By default use stderr if
                                      --log_file_prefix is not set and no other
                                      logging is configured.
    
     --logging=debug|info|warning|error|none
                                      Set the Python log level. If 'none', tornado
                                      won't touch the logging configuration.
                                      (default info)
    
  2. Для смены настроек детектора раскомментируйте и отредактируйте относящиеся к детектору параметры в файле конфигурации findface-facenapi.

    sudo vi /etc/findface-facenapi.ini
    
    detector                       = 'nnd'
    ...
    
  3. Для смены биометрической модели лица, отредактируйте параметр model_facen в файле конфигурации findface-nnapi:

    sudo vi /etc/findface-nnapi.ini
    
    model_facen = apricot_320
    
  4. Настройте findface-regenerate, используя аргументы командной строки, как описано в справке по утилите. Например, для того чтобы сменить детектор лиц, выполните из папки /usr/bin следующую команду:

    sudo findface-regenerate --regenerate=normalized,thumbs,facens --config=/etc/findface-facenapi.ini
    

    Для смены модели выполните команду:

    sudo findface-regenerate --regenerate=facens --config=/etc/findface-facenapi.ini
    

Копирование векторов признаков из MongoDB в Tarantool

Примените утилиту mongo2searchapi следующим образом:

  1. Создайте резервную копию БД Tarantool.

  2. Остановите Tarantool.

    sudo systemctl stop tarantool@FindFace*
    
  3. Удалите файлы снапшотов .snap, логов .xlog и быстрого индеса .idx для всех шардов tntapi.

    Совет

    По умолчанию, данные файлы хранятся в следующих папках:

    • Одиночная инсталляция:
      • /opt/ntech/var/lib/tarantool/default/snapshots
      • /opt/ntech/var/lib/tarantool/default/xlogs
      • /opt/ntech/var/lib/tarantool/default/index
    • Кластерная инсталляция:
      • /opt/ntech/var/lib/tarantool/shard_N/snapshots
      • /opt/ntech/var/lib/tarantool/shard_N/xlogs
      • /opt/ntech/var/lib/tarantool/shard_N/index
  4. Если векторы признаков в прежней и новой модели различаются по размеру, отредактируйте размер вектора признаков в разделе FindFace.start файла конфигурации Tarantool /etc/tarantool/instances.enabled/FindFace_shard_N.lua. Повторите для каждого шарда.

    sudo vi /etc/tarantool/instances.enabled/FindFace_shard_N.lua
    
    FindFace.start("127.0.0.1", 8001, {license_ntls_server="127.0.0.1:3133", facen_size = 320})
    
  5. Запустите mongo2searchapi на сервере с findface-facenapi:

    sudo python3 -m facenapi.server.tools.mongo2searchapi --config=/etc/findface-facenapi.ini
    
  6. Запустите Tarantool.

    sudo systemctl start tarantool@FindFace*