DensePose — это алгоритм машинного обучения, основанный на Facebook Detectron, который был разработан Ризой Альп Гулер, Натальей Неверовой, Ясонасом Коккиносом, вы можете найти статью здесь. У проекта есть сайт densepose.org и репозиторий на github.

Реализация была написана на Python 2.7, и все шаги установки предназначены для среды Linux. Нет поддержки или документации по переносу кода на Python 3.6, сборке и запуску алгоритма под Windows.

Моя цель состояла в том, чтобы преобразовать исходный проект для поддержки Python 3.6 и заставить его работать под Windows. Я разделил весь процесс на несколько шагов. Реализация всех шагов и изменений вы можете найти в репозитории на Github, который содержит два подмодуля DensePose и Cocoapi. Перейдите и загрузите его, затем выполните следующие действия.

Мы создадим автономную среду с использованием Python 3.6 Zero и Visual Studio 2019 для сборки и запуска проекта. Детектор Facebook использует PyTorch с графическим процессором. Я предполагаю, что у вас есть видеокарта Nvidia GPU с возможностями, равными или превышающими 5.0.

Большинство изменений, которые мне пришлось внести, были связаны с переименованием некоторых импортов и исправлением небольших проблем в setup.py. Давайте рассмотрим их один за другим. (Все изменения можно найти в коммите здесь.)

Вот краткое изложение некоторых:

  1. Строки должны быть изменены с b’…’ на просто ‘..’
  2. cPickle для рассола, очередь для очереди, urllib2 для urllib
  3. Оба импорта — detectron.utils.cython_bbox — как cython_bbox и detectron.utils.cython_nms — как cython_nms, будут использоваться только для cython_bbox и cython_nms. Позже мы будем использовать пакеты для его установки.
  4. В config.py функция load_cfg должна быть переписана с помощью six.
  5. cython_nms.pyx нам нужно изменить строку 45, чтобы использовать np.intp_t
  6. env.py нам нужно настроить DETECTRON_OPS_LIB = ‘caffe2_detectron_ops_gpu.dll’ вместо libcaffe2_detectron_ops_gpu.so и добавить torch/lib в качестве папки по умолчанию.
  7. setup.py. Мне пришлось удалить все аргументы из extra_compile_args, которые недоступны в окне.

Как только мы будем готовы со всеми небольшими проблемами, давайте погрузимся в процесс создания автономной среды для DensePose.

Шаг первый

Сделайте локальную копию репозитория и всех подмодулей.

Шаг второй

Настройка WinPython643.6.8 Zero

- Необходимо создать новую подпапку с именем WPy64 в папке репозитория, после чего вам необходимо скачать нулевой Python, который можно найти здесь.

Шаг третий

Нам нужно вручную скачать архив ниже, потому что под Windows мы не можем выполнять скрипты .sh. Перейдите по ссылке, разархивируйте и скопируйте все файлы в denpose\DensePoseData\UV_data.

Другой вариант — установить cygwin, а затем запустить скрипты, которые находятся в папке плотнопосе\DensePoseData. Скрипты: get_DensePose_COCO.sh, get_densepose_uv.sh, get_eval_data.sh

Шаг четвертый

Нам нужно установить наш инструмент сборки. Я буду использовать Visual Studio 2019, скачать которую можно по ссылке: https://visualstudio.microsoft.com. Вполне достаточно версии Visual Studio 201 Community. Я не буду описывать все подробности, как его установить, потому что процесс довольно прост. Я предполагаю, что вы знакомы с некоторыми основами. Наиболее важная часть заключается в том, что вам необходимо включить эти функции: включить поддержку языка Python, инструменты сборки MSVC v142 — VS 2019 C++ x64/x86 (v14.23).

Шаг пятый

Мы почти в финале. Давайте установим все пакеты Python, которые нужны Detectron и DensePose. Я добавляю файл requirements.txt, который содержит все пакеты с их версиями, чтобы предотвратить любые проблемы, возникающие из-за несоответствия версий. Есть два варианта их установки:

- Frist: из Windows перейдите в папку WinPy64, запустите «WinPython Command Prompt.exe», затем перейдите в папку «densepose» и запустите: «pip install -r requirements.txt».

- Второе: Откройте Densepose.sln из основной папки с помощью Visual Studio. В Visual Studio-> Solution Explorer-> среды Python выберите WinPy64, затем откройте контекстное меню, нажмите «Установить из требований».

Шаг шестой

Давайте поиграем со сборками Cocoapi и Детектора. В проводнике Windows перейдите в папку WinPy64 и запустите WinPython Command Prompt.exe, затем в консоли выполните следующие действия:

1. Перейдите в папку «cocoapi\PythonAPI» и выполните следующую команду:

установка python setup.py
установка python setup.py

2. Перейдите в папку «densepose» и выполните следующую команду:

установка python setup.py
установка python setup.py

Шаг восьмой

На данный момент мы завершили все важные шаги. Теперь давайте запустим вывод с предварительно обученными моделями.

  • Первый вариант — открыть Densepose.sln в Visual Studio, а затем запустить проект:
  • Второй вариант — из папки Windows Explorer WinPy64 вам нужно запустить «WinPython Command Prompt.exe», а затем настроить папку python для обнаружения. Для этого перейдите в основную папку и запустите setpath.bat. Это установит следующий путь python: «set PYTHONPATH=%cd%\densepose;%PYTHONPATH%», затем перейдите в папку «denspose» и выполните одну из следующих команд:

https://gist.github.com/NikolaySt/549f6d1fe324f226fb911e3a7cfb1bff

or

https://gist.github.com/NikolaySt/7aa7fdebb47823d21ddbc7fd140fbdd0

Если все работает, то вывод консоли будет содержать эти строки

ИНФОРМАЦИЯ infer_simple.py: 111: Время вывода: 2,606 с
ИНФОРМАЦИЯ infer_simple.py: 114: | im_detect_bbox: 2,154 с
ИНФОРМАЦИЯ infer_simple.py: 114: | misc_bbox: 0.000s
INFO infer_simple.py: 114: | im_detect_body_uv: 0,452 с
IUV записано в: DensePoseData/infer_out/demo_im_IUV.png

Обсуждение возможных проблем.

Несмотря на то, что я описываю все шаги в отдельной среде, в реальной жизни все обстоит иначе. Вы можете столкнуться с некоторыми проблемами:

  1. Смешивание пути Windows Python по умолчанию для существующей установки Python.
  2. В файле requirements.txt мы устанавливаем PyTorh с поддержкой GPU cuda 10. Это может быть несовместимо с вашим оборудованием.

Вы можете найти меня на linkedin.