Для получения более наглядных результатов посетите страницу нашего проекта.
Подробную информацию можно найти в нашей статье.
Пожалуйста, клонируйте нашу среду и установите необходимые зависимости:
conda env create -f environment.yml
conda activate occfusion
conda install pytorch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 pytorch-cuda=12.4 -c pytorch -c nvidia
pip install submodules/diff-gaussian-rasterization
pip install submodules/simple-knn
pip install " git+https://github.com/facebookresearch/pytorch3d.git "
pip install --upgrade https://github.com/unlimblue/KNN_CUDA/releases/download/0.2/KNN_CUDA-0.2-py3-none-any.whl
Мы предоставляем код обучения/рендеринга для 6 последовательностей OcMotion, выбранных Wild2Avatar. Если вы считаете предварительно обработанные последовательности полезными, пожалуйста, процитируйте Wild2Avatar и CHOMP.
Загрузите обработанные последовательности здесь и разархивируйте загруженные последовательности в каталог ./data/
. Структура ./data/
должна выглядеть так:
./
├── ...
└── data/
├── 0011_02_1_w2a/
├── images/
├── masks/
└── ...
├── 0011_02_2_w2a/
├── 0013_02_w2a/
├── 0038_04_w2a/
├── 0039_02_w2a/
└── 0041_00_w2a/
Пожалуйста, зарегистрируйтесь и загрузите нейтральную модель SMPL здесь. Поместите скачанные модели в папку ./assets/
.
Чтобы обеспечить более эффективное использование SDS в каноническом пространстве, предварительно рассчитывается холст OpenPose для канонических 2D-поз, который можно скачать здесь. Поместите скачанную папку в папку: ./assets/
.
Для обучения модели на этапе 0 (необязательно, см. ниже) нам необходимо вычислить бинарные маски для полных изображений человека. Для сегментации мы использовали SAM-HQ. Если вы хотите вычислить маски самостоятельно, загрузите предварительно обученные веса sam_hq_vit_h.pth
здесь и поместите загруженные веса в папку: ./assets/
.
После успешной загрузки структура ./assets/
должна выглядеть так
./
├── ...
└── assets/
├── daposesv2
├── -5.png
└── ...
├── SMPL_NEUTRAL.pkl
└── sam_hq_vit_h.pth (optional)
Мы предоставляем наши предварительно обученные модели для всех последовательностей OcMotion, чтобы можно было быстро сделать выводы/оценку. Загрузите папку ocmotion/
здесь и поместите загруженные папки в ./output/
.
Обучение OccFusion состоит из 4 последовательных этапов. Этапы 0 и 2 являются необязательными и на них рисуют окклюдированного человека настраиваемыми моделями, решениями и подсказками. Различные комбинации могут сильно повлиять на результаты рисования. Качественная поза, обусловленная человеческим поколением, выходит за рамки данной работы. Мы предоставляем наш код (см. этапы 0 и 2 ниже), чтобы пользователи могли опробовать себя.
Мы предоставляем наши предварительно рассчитанные поколения (чтобы воспроизвести наши результаты в статье), которые можно загрузить здесь. Пожалуйста, разархивируйте и поместите папку oc_generations/
непосредственно в корневой каталог. Если воспользоваться нашими расчетами, этапы 0 и 2 можно пропустить.
Перед обучением мы настоятельно рекомендуем указать настроенную директорию для кэширования моделей Hugging Face, которая будет загружена автоматически при первом запуске обучающих скриптов.
export HF_HOME= " YOUR_DIRECTORY "
export HF_HUB_CACHE= " YOUR_DIRECTORY "
Запустите этап 0 (этап инициализации), чтобы сегментировать и нарисовать бинарные маски для полных людей с SAM и Stable Diffusion. Чтобы запустить этап 0 в последовательности OcMotion, раскомментируйте соответствующую переменную SUBJECT
и
source run_oc_stage0.sh
Сегментированные двоичные маски будут сохранены в каталоге ./oc_genertaions/$SUBJECT/gen_masks/
.
Запустите этап 1, чтобы начать этап оптимизации. Чтобы запустить этап 1 для последовательности OcMotion, раскомментируйте соответствующую переменную SUBJECT
и
source run_oc_stage1.sh
Контрольная точка вместе с рендерингом будет сохранена в ./output/$SUBJECT/
.
Используя оптимизированную модель, запустите этап 2, чтобы запустить incontext-inpainting. Чтобы запустить этап 2 для последовательности OcMotion, раскомментируйте соответствующую переменную SUBJECT
и
source run_oc_stage2.sh
Окрашенные изображения RGB будут сохранены в каталоге ./oc_genertaions/$SUBJECT/incontext_inpainted/
.
Наконец, с нарисованными изображениями RGB и контрольной точкой оптимизированной модели запустите этап 3, чтобы начать этап уточнения. Чтобы запустить этап 3 для последовательности OcMotion, раскомментируйте соответствующую переменную SUBJECT
и
source run_oc_stage1.sh
Контрольная точка вместе с рендерингом будет сохранена в ./output/$SUBJECT/
.
На этапах 1 и 3 процесс рендеринга будет запущен автоматически после завершения обучения. Чтобы явно выполнить рендеринг на обученной контрольной точке, запустите
source render.sh
Эта база кода построена на GauHuman. Рекомендации SDS заимствованы у DreamGaussian.
Ознакомьтесь также с нашими предыдущими работами по рендерингу окклюдированного человека! OccNeRF и Wild2Avatar.
Если вы найдете этот репозиторий полезным в своей работе или исследовании, укажите:
@inproceedings { occfusion ,
title = { OccFusion: Rendering Occluded Humans with Generative Diffusion Priors } ,
author = { Sun, Adam and Xiang, Tiange and Delp, Scott and Fei-Fei, Li and Adeli, Ehsan } ,
booktitle = { The Thirty-eighth Annual Conference on Neural Information Processing Systems } ,
url = { https://arxiv.org/abs/2407.00316 } ,
year = { 2024 }
}