Untuk hasil visual yang lebih banyak, lihat halaman proyek kami.
Untuk detailnya, silakan merujuk ke makalah kami.
Harap kloning lingkungan kami dan instal dependensi yang diperlukan:
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
Kami menyediakan kode pelatihan/render untuk 6 rangkaian OcMotion yang diambil sampelnya oleh Wild2Avatar. Jika menurut Anda urutan yang telah diproses sebelumnya berguna, harap pertimbangkan untuk mengutip Wild2Avatar dan CHOMP.
Silakan unduh urutan yang diproses di sini dan unzip urutan yang diunduh di direktori ./data/
. Struktur ./data/
akan terlihat seperti:
./
├── ...
└── data/
├── 0011_02_1_w2a/
├── images/
├── masks/
└── ...
├── 0011_02_2_w2a/
├── 0013_02_w2a/
├── 0038_04_w2a/
├── 0039_02_w2a/
└── 0041_00_w2a/
Silakan mendaftar dan download model SMPL netral di sini. Letakkan model yang diunduh ke dalam folder ./assets/
.
Untuk mengaktifkan SDS ruang kanonik yang lebih efisien, kanvas OpenPose untuk pose 2D kanonik telah dihitung sebelumnya dan dapat diunduh di sini. Letakkan folder yang diunduh di folder: ./assets/
.
Untuk melatih model di Tahap 0 (opsional, lihat di bawah), kita perlu menghitung topeng biner untuk pengecatan manusia secara lengkap. Kami menggunakan SAM-HQ untuk segmentasi. Jika Anda ingin menghitung sendiri maskernya, silakan unduh bobot yang telah dilatih sebelumnya sam_hq_vit_h.pth
di sini dan masukkan bobot yang telah diunduh ke dalam folder: ./assets/
.
Setelah pengunduhan berhasil, struktur ./assets/
akan terlihat seperti ini
./
├── ...
└── assets/
├── daposesv2
├── -5.png
└── ...
├── SMPL_NEUTRAL.pkl
└── sam_hq_vit_h.pth (optional)
Kami menyediakan model terlatih untuk semua rangkaian OcMotion untuk memungkinkan inferensi/evaluasi cepat. Silakan unduh folder ocmotion/
di sini dan letakkan folder yang diunduh di ./output/
.
Pelatihan OccFusion terdiri dari 4 tahap berurutan. Tahap 0 dan 2 bersifat opsional dan mengecat manusia yang tersumbat dengan model, sovler, dan petunjuk yang disesuaikan. Kombinasi yang berbeda dapat sangat mempengaruhi hasil pengecatan. Pose berkualitas tinggi yang mengkondisikan generasi manusia berada di luar cakupan pekerjaan ini. Kami menyediakan kode kami (lihat Tahap 0 dan Tahap 2 di bawah) agar pengguna dapat mencobanya sendiri.
Kami menyediakan generasi yang telah dihitung sebelumnya (untuk mereplikasi hasil kami di makalah) untuk diunduh di sini. Silakan unzip dan letakkan folder oc_generations/
langsung pada direktori root. Jika Anda menggunakan perhitungan kami, Tahap 0 dan 2 dapat dilewati.
Sebelum pelatihan, kami sangat menyarankan untuk menentukan direktori khusus untuk menyimpan cache model Wajah Pelukan, yang akan diunduh secara otomatis saat skrip pelatihan pertama kali dijalankan.
export HF_HOME= " YOUR_DIRECTORY "
export HF_HUB_CACHE= " YOUR_DIRECTORY "
Jalankan Tahap 0 (Tahap Inisialisasi) untuk melakukan segmentasi dan mengecat topeng biner untuk manusia lengkap dengan SAM dan Difusi Stabil. Untuk menjalankan Tahap 0 pada urutan OcMotion, hapus komentar pada variabel SUBJECT
yang sesuai dan
source run_oc_stage0.sh
Masker biner tersegmentasi akan disimpan di direktori ./oc_genertaions/$SUBJECT/gen_masks/
.
Jalankan Tahap 1 untuk memulai Tahap Optimasi. Untuk menjalankan Tahap 1 pada urutan OcMotion, hapus komentar pada variabel SUBJECT
yang sesuai dan
source run_oc_stage1.sh
Pos pemeriksaan beserta renderingnya akan disimpan di ./output/$SUBJECT/
.
Dengan model yang dioptimalkan, jalankan Tahap 2 untuk meluncurkan incontext-inpainting. Untuk menjalankan Tahap 2 pada urutan OcMotion, hapus komentar pada variabel SUBJECT
yang sesuai dan
source run_oc_stage2.sh
Gambar RGB yang tidak dicat akan disimpan di direktori ./oc_genertaions/$SUBJECT/incontext_inpainted/
.
Terakhir, dengan gambar RGB yang dicat dan pos pemeriksaan model yang dioptimalkan, jalankan Tahap 3 untuk memulai Tahap Penyempurnaan. Untuk menjalankan Tahap 3 pada urutan OcMotion, hapus komentar pada variabel SUBJECT
yang sesuai dan
source run_oc_stage1.sh
Pos pemeriksaan beserta renderingnya akan disimpan di ./output/$SUBJECT/
.
Pada Tahap 1 dan 3, proses rendering akan dipicu secara otomatis setelah pelatihan selesai. Untuk merender secara eksplisit pada pos pemeriksaan terlatih, jalankan
source render.sh
Basis kode ini dibangun di atas GauHuman. Panduan SDS dipinjam dari DreamGaussian.
Periksa juga karya kami sebelumnya tentang rendering manusia yang tersumbat! OccNeRF dan Wild2Avatar.
Jika Anda merasa repo ini berguna dalam pekerjaan atau penelitian Anda, harap kutip:
@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 }
}