[PYTHON] Ich habe versucht, mit PI Fu aus einem Bild ein 3D-Modell einer Person zu erstellen

Was ist PIFu?

image.png Bildzitat (links): Sumire Uesaka Official Blog Nekomori Rally

PIFu: Pixel-Aligned Implicit Function for High-Resolution Clothed Human Digitization

Grob gesagt,

** Ein Modell für maschinelles Lernen, das aus einem einzelnen Bild ein 3D-Modell einer Person mit Kleidung generiert **

ist.

We introduce Pixel-aligned Implicit Function (PIFu), a highly effective implicit representation that locally aligns pixels of 2D images with the global context of their corresponding 3D object. Using PIFu, we propose an end-to-end deep learning method for digitizing highly detailed clothed humans that can infer both 3D surface and texture from a single image, and optionally, multiple input images. Highly intricate shapes, such as hairstyles, clothing, as well as their variations and deformations can be digitized in a unified way.

Einführung der pixelausgerichteten impliziten Funktion (PIFu). Dies ist eine sehr effektive implizite Darstellung, die die Pixel eines 2D-Bildes lokal im globalen Kontext des entsprechenden 3D-Objekts ausrichtet. Wir schlagen eine End-to-End-Deep-Learning-Methode zum Digitalisieren hochdetaillierter Kleidung vor, mit der mithilfe von PIFu sowohl 3D-Oberflächen als auch Texturen aus einem einzigen Bild und optional mehreren Eingabebildern abgeleitet werden können. .. Sehr komplexe Formen wie Frisuren und Kleidung sowie deren Variationen und Varianten können einheitlich digitalisiert werden.

Installationsmethode & Tutorial

Die Installationsmethode ist einfach.

$ git clone https://github.com/shunsukesaito/PIFu.git
$ cd PIFu
$ pip install -r requirements.txt
$ sh ./scripts/download_trained_model.sh

PIFu wird mit einem Beispieldatensatz geliefert, mit dem Sie problemlos arbeiten können.

$ sh ./scripts/test.sh

Dadurch wird eine Datei mit dem Namen "results / pifu_demo / result_ryota.obj" ausgegeben.

image.png

MeshLab wird beim Anzeigen von 3D-Modellen empfohlen. Der Grund dafür ist, dass das von PIFu ausgegebene Modell keine Textur aufweist und von VertexColor eingefärbt wird. Es wird empfohlen, da nur wenige Betrachter das mit dieser Scheitelpunktfarbe gefärbte Modell sehen können und es leicht zu erkennen ist.

Generieren Sie ein 3D-Modell mit dem angegebenen Bild

Es gibt zwei Dinge, die Sie tun müssen, um ein 3D-Modell mit PIFu zu generieren.

  1. Bereiten Sie ein quadratisches Bild vor
  2. Vorbereitung des Maskenbildes

Diesmal aus dem kostenlosen Material Pakutaso (www.pakutaso.com), Kostenloses Bild (Foto) von Yukata Brillenjunge (ganzer Körper), der seine Hände auf den Ärmel legt .html) wird verwendet.

image.png

Da das Originalbild vertikal lang ist, fügen Sie ein Band hinzu, um es zu einem quadratischen Bild zu machen. Nennen wir das "kimono.png ".

image.png

Dann erzeugen Sie ein Maskenbild. Nennen wir dies "kimono_mask.png ". ** Der Name ist hier wichtig. Stellen Sie sicher, dass Sie dem Maskenbild "_mask" hinzufügen. ** ** **

image.png

Erstellen Sie dann einen Kimono / Ordner und kopieren Sie die beiden Dateien.

mkdir kimono/
cp kimono.png kimono/
cp kimono_mask.png kimono/

Erstellen Sie den folgenden Inhalt als scripts / eval.sh.

scripts/eval.sh


#!/usr/bin/env bash
set -ex

# Training
GPU_ID=0
DISPLAY_ID=$((GPU_ID*10+10))
NAME='pifu_demo'

# Network configuration

BATCH_SIZE=1
MLP_DIM='257 1024 512 256 128 1'
MLP_DIM_COLOR='513 1024 512 256 128 3'

TEST_FOLDER_PATH=$1
shift

# Reconstruction resolution
# NOTE: one can change here to reconstruct mesh in a different resolution.
VOL_RES=$1
shift

CHECKPOINTS_NETG_PATH='./checkpoints/net_G'
CHECKPOINTS_NETC_PATH='./checkpoints/net_C'

# command
CUDA_VISIBLE_DEVICES=${GPU_ID} python ./apps/eval.py \
    --name ${NAME} \
    --batch_size ${BATCH_SIZE} \
    --mlp_dim ${MLP_DIM} \
    --mlp_dim_color ${MLP_DIM_COLOR} \
    --num_stack 4 \
    --num_hourglass 2 \
    --resolution ${VOL_RES} \
    --hg_down 'ave_pool' \
    --norm 'group' \
    --norm_color 'group' \
    --test_folder_path ${TEST_FOLDER_PATH} \
    --load_netG_checkpoint_path ${CHECKPOINTS_NETG_PATH} \
    --load_netC_checkpoint_path ${CHECKPOINTS_NETC_PATH}

Schließlich,

$ sh scripts/eval_default.sh kimono/ 256

Erzeugt results / pifu_demo / result_kimono.obj.

image.png

Entkomme PIFu

Es gibt eine Methode namens PIFu. Dies ist ein PIFu **, das ich erstellt habe, um hochwertige Texturen zu erstellen. (Ich habe es nur benannt, um es von der ursprünglichen Familie zu unterscheiden.) Es ist nur ein Ausweg, und es gibt einige Dinge, die etwas seltsam sind. Nun, es gibt verschiedene Umstände, also werde ich es später erklären.

Links: Originalbild Mittel: PIFu-Standard Rechts: PIFu

image.png

Ein Zweig namens 2_phase_generate in meinem PIFu-Repository.

https://github.com/kotauchisunsun/PIFu/tree/2_phase_generate

In diesem Zweig können Sie mit scripts / eval_two_phase.sh ausgeben. Wie man es benutzt

./scripts/eval_two_phase.sh IMAGE_DIR/  VOXEL_RESOLUTION VOXEL_LOAD_SIZE TEX_LOAD_SIZE

Es ist wie es ist. IMAGE_DIR / ist das Verzeichnis, das die Bilder enthält. VOXEL_RESOLUTION wird um 512.1024 empfohlen. Wenn es 1024 ist, werden ungefähr 20 GB Speicher benötigt. Passen Sie diesen Bereich an den Computer an. Es wird empfohlen, VOXEL_LOAD_SIZE auf 512 zu korrigieren. Setzen Sie TEX_LOAD_SIZE entsprechend der Auflösung der Textur auf 1024 oder 2048. Dies ist eine gute Idee, um ein Modell mit einer hochwertigen Textur zu erhalten.

Welcher Bereich ist also illegal? Es ist eine Geschichte. Nun, es sieht aus wie ** mit nicht normalem Verhalten **. Details sind in Pull Request beschrieben, aber ursprünglich sollten VOXEL_LOAD_SIZE und TEX_LOAD_SIZE mit Ausnahme von 512 nicht angegeben werden. darüber. Wenn ich jedoch TEX_LOAD_SIZE auf 1024 setze und hier ausgebe, ist es problematisch, dass ** ein hübsches Modell erstellt wurde **. Zuerst dachte ich: "Wenn ich einen ungültigen Wert in TEX_LOAD_SIZE setze, würde ich sterben" oder "Wenn es sich bewegt, wird die Textur zerbrochen", also habe ich es entsprechend geändert, aber es sieht so aus. Es kam wunderschön heraus. Es ist herausgekommen. Also habe ich eine Pull-Anfrage gestellt, aber es scheint, dass es ursprünglich nutzlos war. Tatsächlich ist die Textur dahinter eher zerkleinert. Links: PIFu Rechts: PIFu

image.png

Wie der Autor sagte, wenn Sie eine hochwertige Textur wünschen, warum nicht einfach projizieren? Es wird gesagt, dass es so sein kann. Eigentlich hat PIFu auch eine Funktion zum Projizieren von Texturen, aber ich denke, dass Änderungen wesentlich sind, da ich den Code gesehen habe und es unmöglich ist, ihn in hoher Auflösung auszugeben.

Impressionen

Ich bin glücklich, weil ich Sumipe vorstellen konnte. PIFu kennt seine Existenz seit letztem Jahr und fragte sich, wann der Code veröffentlicht werden würde, aber ich war überrascht, dass er unerwartet früh herauskam. Außerdem war es relativ einfach, sich zu bewegen, und ich bin froh, dass ich es schnell geschafft habe. Ich frage mich jedoch, ob ich es ein bisschen besser machen kann. Sonic Boom Sonic Boom Esaka Kawaii.

Recommended Posts

Ich habe versucht, mit PI Fu aus einem Bild ein 3D-Modell einer Person zu erstellen
Ich habe versucht, automatisch eine Portverwaltungstabelle aus L2SW Config zu generieren
Ich wollte viele Bilder sammeln, also habe ich versucht, "Google Image Download" zu verwenden.
Ich habe versucht, [eine bestimmte Aufgabe] mit einem Raspeltorte zu automatisieren
Ich habe versucht, mit Pandas eine Pferderenn-Datenbank zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Datum" zu erstellen
Ich habe versucht, ein Standbild aus dem Video auszuschneiden
Ich habe versucht, mit einem Foto einfach ein hochpräzises 3D-Bild zu erstellen [3]. MiDaS von feat. Intel-isl nur Tiefe ohne Erlaubnis.
Ich habe versucht, ein Auto in 3D zu erkennen
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
Ich habe mir eine Möglichkeit ausgedacht, aus einem Foto ein 3D-Modell zu erstellen.
ConSinGAN: Ich habe versucht, GAN zu verwenden, das aus einem Bild generiert werden kann
Ich habe versucht, eine Clusteranalyse von Kunden anhand von Kaufdaten durchzuführen
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, eine zufällige Zeichenfolge zu generieren
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
[Python] Ich habe versucht, das Mitgliederbild der Idolgruppe mithilfe von Keras zu beurteilen
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Ich habe versucht, eine verdächtige Person mithilfe von Geolonia-Adressdaten schnell zu einem MAP zu machen
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
Ich habe versucht, mit einem Foto einfach ein hochpräzises 3D-Bild zu erstellen [-1]. (Ist der versteckte Bereich wirklich sichtbar?)
Ich habe mir eine Möglichkeit ausgedacht, ein 3D-Modell aus einem Foto zu erstellen. Teil 02 Laden von Bildern und Zeichnen von Scheitelpunkten
Ich habe versucht, Iris aus dem Kamerabild zu erkennen
Ich habe versucht, ein Beispielmodell von Pytorch mit TorchServe zu hosten
Ich habe versucht, ein Konfigurationsdiagramm mit Diagrammen zu zeichnen
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Ich habe versucht, mit dem Seq2Seq-Modell von TensorFlow so etwas wie einen Chatbot zu erstellen
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Ich habe versucht, Objekte aus dem Bild des Steak-Sets zu sortieren
Ich habe versucht, den Text in der Bilddatei mit Tesseract der OCR-Engine zu extrahieren
Ich habe mir eine Möglichkeit ausgedacht, aus einem Foto ein 3D-Modell zu erstellen. 0 Projektion in den 3D-Raum
Ich habe eine Funktion zum Abrufen von Daten aus der Datenbank spaltenweise mithilfe von SQL mit SQLite3 von Python [SQLite3, SQL, Pandas] erstellt.
Ich habe versucht, mit einem Foto einfach ein hochpräzises 3D-Bild zu erstellen [1]. (Die Tiefe kann jetzt in PNG bearbeitet werden.)
Ich habe versucht, mit einem Foto einfach ein hochpräzises 3D-Bild zu erstellen [0]. (Bestätigt, wie der Raum erfasst und beschattet wird)
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe mir eine Möglichkeit ausgedacht, aus einem Foto ein 3D-Modell zu erstellen. Teil 04 Generieren von Polygonen
Ich habe versucht, das CNN-Modell von TensorFlow mit TF-Slim umzugestalten
Ich habe versucht, die Genauigkeit von Modellen für maschinelles Lernen mit Kaggle als Thema zu vergleichen.
Ich möchte viele Prozesse von Python aus starten
Ich habe versucht, die Pi Console I / F von Mechatraxs Raspeye IoT Starter Kit "anyPi" zu verwenden.
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
Ich habe versucht, "ein Herz, auch wenn es getrennt ist" mithilfe eines genetischen Algorithmus in Python zu automatisieren
Ich habe versucht, mit OpenCV eine Bewegungserkennungsüberwachungskamera mit einer WEB-Kamera mit Raspberry Pi herzustellen
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, die Objekte aus dem Bild des Steak-Sets zu sortieren. ① Objekterkennung
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Ich habe mit PyQt einen einfachen Texteditor erstellt
Ich habe versucht, die Erstellung einer praktischen Umgebung mithilfe der SoftLayer-API der IBM Cloud zu automatisieren
Eine Person, die das D-Problem mit ABC von AtCoder lösen möchte, hat versucht, zu kratzen
Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Ich habe versucht, die Anzahl der im Inland infizierten Menschen der neuen Korona mit einem mathematischen Modell vorherzusagen
Ich habe versucht, die Objekte aus dem Bild des Steak-Sets zu sortieren. ② Sortieren der Überlappungsnummern