DE102018128592A1 - Erzeugen eines Bilds unter Verwendung einer Map, die verschiedene Klassen von Pixeln repräsentiert - Google Patents

Erzeugen eines Bilds unter Verwendung einer Map, die verschiedene Klassen von Pixeln repräsentiert Download PDF

Info

Publication number
DE102018128592A1
DE102018128592A1 DE102018128592.2A DE102018128592A DE102018128592A1 DE 102018128592 A1 DE102018128592 A1 DE 102018128592A1 DE 102018128592 A DE102018128592 A DE 102018128592A DE 102018128592 A1 DE102018128592 A1 DE 102018128592A1
Authority
DE
Germany
Prior art keywords
image
digital representation
fine
representation
resolution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102018128592.2A
Other languages
English (en)
Inventor
Ting-Chun Wang
Ming-Yu Liu
Bryan Christopher Catanzaro
Jan Kautz
Andrew J. Tao
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US16/188,920 external-priority patent/US20190147296A1/en
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102018128592A1 publication Critical patent/DE102018128592A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features
    • G06V10/44Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components
    • G06V10/443Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components by matching or filtering
    • G06V10/449Biologically inspired filters, e.g. difference of Gaussians [DoG] or Gabor filters
    • G06V10/451Biologically inspired filters, e.g. difference of Gaussians [DoG] or Gabor filters with interaction between the filter responses, e.g. cortical complex cells
    • G06V10/454Integrating the filters into a hierarchical structure, e.g. convolutional neural networks [CNN]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/214Generating training patterns; Bootstrap methods, e.g. bagging or boosting
    • G06F18/2148Generating training patterns; Bootstrap methods, e.g. bagging or boosting characterised by the process organisation or structure, e.g. boosting cascade
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • G06F18/2413Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on distances to training or reference patterns
    • G06F18/24133Distances to prototypes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/82Arrangements for image or video recognition or understanding using pattern recognition or machine learning using neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V20/00Scenes; Scene-specific elements
    • G06V20/10Terrestrial scenes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V20/00Scenes; Scene-specific elements
    • G06V20/70Labelling scene content, e.g. deriving syntactic or semantic representations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V30/00Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
    • G06V30/10Character recognition
    • G06V30/19Recognition using electronic means
    • G06V30/191Design or setup of recognition systems or techniques; Extraction of features in feature space; Clustering techniques; Blind source separation
    • G06V30/19173Classification techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V30/00Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
    • G06V30/10Character recognition
    • G06V30/24Character recognition characterised by the processing or recognition method
    • G06V30/248Character recognition characterised by the processing or recognition method involving plural approaches, e.g. verification by template match; Resolving confusion among similar patterns, e.g. "O" versus "Q"
    • G06V30/2504Coarse or fine approaches, e.g. resolution of ambiguities or multiscale approaches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V30/00Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
    • G06V30/10Character recognition
    • G06V30/26Techniques for post-processing, e.g. correcting the recognition result
    • G06V30/262Techniques for post-processing, e.g. correcting the recognition result using context analysis, e.g. lexical, syntactic or semantic context
    • G06V30/274Syntactic or semantic context, e.g. balancing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Data Mining & Analysis (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Databases & Information Systems (AREA)
  • Medical Informatics (AREA)
  • Software Systems (AREA)
  • Biodiversity & Conservation Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Analysis (AREA)

Abstract

Ein Verfahren, ein computerlesbares Medium und ein System zum Erzeugen eines Bilds unter Verwendung einer Map, die verschiedene Klassen von spezifischen Pixeln innerhalb einer Szene repräsentiert, werden offenbart. Ein oder mehrere Computersysteme verwenden die Map, um ein vorläufiges Bild zu erzeugen. Dieses vorläufige Bild wird dann mit einem Originalbild verglichen, das zur Erzeugung der Map verwendet wurde. Es wird bestimmt, ob das vorläufige Bild mit dem Originalbild übereinstimmt, und Ergebnisse der Bestimmung werden dazu verwendet, die Computersysteme anzupassen, die das vorläufige Bild erzeugt haben, welches ein Leistungsvermögen solcher Computersysteme verbessert. Die angepassten Computersysteme werden dann dazu verwendet, Bilder basierend auf verschiedenen Input-Maps zu erzeugen, die verschiedene Objektklassen spezifischer Pixel innerhalb einer Szene repräsentieren.

Description

  • GEBIET DER ERFINDUNG
  • Die Erfindung bezieht sich auf Bildwiedergabe, insbesondere auf eine Wiedergabe von Bildern unter Verwendung einer semantischen Repräsentation.
  • HINTERGRUND
  • Die Wiedergabe bzw. das Rendern fotorealistischer Bilder mit Standardgrafiktechniken kann ein aufwändiger Prozess sein, da Geometrie, Materialien und Lichttransport explizit simuliert werden. Darüber hinaus sind der Aufbau und die Bearbeitung virtueller Umgebungen teuer und zeitaufwendig, da jeder Teil der virtuellen Welt explizit modelliert werden muss. Daher ist es wünschenswert, fotorealistische Bilder mit einem aus Daten gelernten Modell zu rendern, welches den Prozess des Renderns bzw. Wiedergeben von in ein Modell-Lern- und Inferenzproblem umwandeln kann. Es besteht daher ein Bedarf, diese Fragen und/oder andere Fragen im Zusammenhang mit dem Stand der Technik zu behandeln.
  • Figurenliste
    • 1 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Erzeugen eines Bilds unter Verwendung einer Map, die verschiedene Klassen von Pixeln darstellt, gemäß einem Ausführungsbeispiel.
    • 2 veranschaulicht eine Parallelverarbeitungseinheit gemäß einem Ausführungsbeispiel.
    • 3A veranschaulicht einen universellen Verarbeitungscluster innerhalb der Parallelverarbeitungseinheit von 2 gemäß einem Ausführungsbeispiel.
    • 3B veranschaulicht eine Speicherpartitionseinheit der Parallelverarbeitungseinheit von 2 gemäß einem Ausführungsbeispiel.
    • 4A veranschaulicht den Streaming-Multiprozessor von 3A gemäß einem Ausführungsbeispiel.
    • 4B ist ein konzeptionelles Diagramm eines unter Verwendung der PPU von 2 implementierten Verarbeitungssystems gemäß einem Ausführungsbeispiel.
    • 4C veranschaulicht ein beispielhaftes System, in welchem die unterschiedliche Architektur und/oder Funktionalität der verschiedenen vorangehenden Ausführungsbeispiele implementiert sein kann.
    • 5 ist ein konzeptionelles Diagramm einer von der PPU von 2 implementierten Grafikverarbeitungs-Pipeline gemäß einem Ausführungsbeispiel.
    • 6 veranschaulicht eine beispielhafte Netzwerkarchitektur eines Generators gemäß einem Ausführungsbeispiel.
    • 7 veranschaulicht eine beispielhafte trainierte Encoder-Architektur gemäß einem Ausführungsbeispiel.
    • 8 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Trainieren eines Grob-zu-Fein-Generators gemäß einem Ausführungsbeispiel.
    • 9 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Implementieren eines trainierten Grob-zu-Fein-Generators gemäß einem Ausführungsbeispiel.
    • 10 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Verfeinern einer Ausgabe unter Verwendung einer Instance-Feature-Map gemäß einem Ausführungsbeispiel.
    • 11 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Trainieren eines Modells für maschinelles Lernen, das zumindest teilweise auf einer semantischen Repräsentation einer ersten digitalen Repräsentation eines Bilds basiert, gemäß einem Ausführungsbeispiel.
    • 12 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Trainieren eines Modells für maschinelles Lernen, das zumindest teilweise auf einer semantischen Repräsentation einer ersten digitalen Repräsentation eines Bilds basiert, gemäß einem Ausführungsbeispiel.
    • 13 veranschaulicht ein beispielhaftes Modell für maschinelles Lernens gemäß einem Ausführungsbeispiel.
    • 14 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Verwenden einer trainierten Generatorarchitektur gemäß einem Ausführungsbeispiel.
  • DETAILLIERTE BESCHREIBUNG
  • 1 veranschaulicht ein Ablaufdiagramm eines Verfahrens 100 zum Erzeugen eines Bilds unter Verwendung einer Map, die Objektklassen von Pixeln repräsentiert, gemäß einem Ausführungsbeispiel. Obwohl das Verfahren 100 im Kontext einer Verarbeitungseinheit beschrieben wird, kann das Verfahren 100 auch durch ein Programm, eine benutzerdefinierte Schaltungsanordnung oder durch eine Kombination aus einer benutzerdefinierten Schaltungsanordnung und einem Programm durchgeführt werden. In einem Ausführungsbeispiel kann das Verfahren 100 von einer GPU (Grafikverarbeitungseinheit), einer CPU (Zentralverarbeitungseinheit) oder einem beliebigen Prozessor ausgeführt werden, der in der Lage ist, eine parallele Pfadraumfilterung durch Hashing durchzuführen. Darüber hinaus versteht sich, dass jedes System, das die Methode 100 durchführt, im Schutzumfang und Rahmen der Ausführungsbeispiele der Erfindung liegt.
  • Wie in Operation 102 gezeigt ist, wird ein Bild durch einen Generator unter Verwendung einer semantischen Repräsentation erzeugt. In einem Ausführungsbeispiel kann die semantische Repräsentation eine semantische Label-Map, eine Kanten-Map, eine Tiefen-Map, eine Beziehungs-Map (z.B. eine Map bzw. -Map oder Abbildung von Beziehungen zwischen Objektpaaren innerhalb eines Bilds) usw. beinhalten. In einem Ausführungsbeispiel kann die semantische Label-Map eine Wiedergabe bzw. Repräsentation oder Darstellung eines Bilds beinhalten, wobei jeder Pixel des Bilds eine Objektklasse repräsentiert, zu der der Pixel gehört. In einem Ausführungsbeispiel können die Objektklassen jeweils ein Element innerhalb des Bilds, wie z.B. eine Person, ein Fahrzeug, den Himmel, eine Straße usw., beinhalten
  • Zusätzlich kann in einem Ausführungsbeispiel der Generator einen Grob/Fein- bzw. Grob-zu-Fein-Generator beinhalten. In einem Ausführungsbeispiel kann ein Grob-zu-Fein-Generator eine Vielzahl von voneinander getrennten neuronalen Netzwerken beinhalten, die zusammenwirken, um ein Bild zu erzeugen. In einem Ausführungsbeispiel kann ein erstes neuronales Netzwerk innerhalb des Grob-zu-Fein-Generators ein grobes neuronales Netzwerk beinhalten. In einem Ausführungsbeispiel kann das grobe neuronale Netzwerk die semantische Repräsentation als Input nehmen und ein erstes Bild mit einer ersten Auflösung ausgeben. In einem Ausführungsbeispiel kann das grobe neuronale Netzwerk ein Restnetzwerk beinhalten, das auf Bilder mit einer ersten Auflösung trainiert ist.
  • Ferner kann in einem Ausführungsbeispiel ein zweites neuronales Netzwerk innerhalb des Grob-zu-Fein-Generators ein feines neuronales Netzwerk beinhalten. In einem Ausführungsbeispiel kann das feine neuronale Netzwerk die semantische Repräsentation und das erste Bild mit der ersten Auflösung als Input übernehmen und ein zweites Bild mit einer zweiten Auflösung größer bzw. höher als die erste Auflösung als eine Ausgabe ausgeben. In einem Ausführungsbeispiel kann der Input in Restblöcke in dem feinen neuronalen Netzwerk eine elementweise Summe aus einer Feature-Map des feinen neuronalen Netzwerks und einer Ausgabefunktions-Map aus dem groben neuronalen Netzwerk beinhalten. In einem Ausführungsbeispiel kann der Input auch die Ausgabe globaler Information aus dem groben neuronalen Netzwerk beinhalten. In einem Ausführungsbeispiel kann das feine neuronale Netzwerk ein finales Netzwerk beinhalten, das auf Bilder mit einer zweiten Auflösung, die höher ist als die erste Auflösung, trainiert ist.
  • Ferner kann in einem Ausführungsbeispiel die Ausgabe des Grob-zu-Fein-Generators die Bildausgabe durch das feine neuronale Netzwerks beinhalten. Auf diese Weise kann das grobe neuronale Netzwerk mit dem feinen neuronalen Netzwerk zusammenarbeiten, um ein Bild mit einer im Vergleich zu einem Ansatz mit einem einzelnen neuronalen Netzwerk höheren Auflösung zu erzeugen.
  • Darüber hinaus kann in einem Ausführungsbeispiel das Erzeugen während eines Trainingsprozesses (z.B. eines Trainings des Generators unter Verwendung eines bedingten gegnerischen bzw. adversarialen Netzwerks usw.). In einem Ausführungsbeispiel kann der Generator auch eine Instance-Feature-Map verwenden, um das Bild zu erzeugen. In einem Ausführungsbeispiel kann ein separates neuronales Netzwerk (z.B. ein Feature-Encoder-Netzwerk usw.) ein Originalbild, auf welchem die semantische Repräsentation basiert, als Input empfangen und eine Instance-Feature-Map basierend auf dem Originalbild erzeugen. In einem Ausführungsbeispiel kann die Instance-Feature-Map zusammen mit der semantischen Repräsentation als Input für den Generator verwendet werden. In einem Ausführungsbeispiel kann die Instance-Feature-Map mit der semantischen Repräsentation als Input für den Generator verknüpft sein. Auf diese Weise kann der Generator die Instance-Feature-Map nutzen, um das erzeugte Bild zu verfeinern.
  • Darüber hinaus kann in einem Ausführungsbeispiel die Instance-Feature-Map dazu verwendet werden, einen Stil des erzeugten Bilds zu steuern (z.B. durch das Vorgeben einer Farbe und/oder einer Textur einer oder mehrerer Komponenten des erzeugten Bilds, usw.). In einem Ausführungsbeispiel kann das Feature-Encoder-Netzwerk ein instanzweises Durchschnittspooling verwenden, um sicherzustellen, dass die Merkmale innerhalb der Instance-Feature-Map einheitlich sind. Auf diese Weise können alle ähnlichen Merkmale im erzeugten Bild gleich sein (z.B. gleichfarbiges Gras, gleiche Art von Straße, usw.).
  • Darüber hinaus analysiert, wie in Operation 104 gezeigt ist, ein Diskriminator, das Bild, um eine Rückmeldung zu erzeugen. In einem Ausführungsbeispiel kann der Diskriminator das Bild durch Vergleichen des von dem Generator erzeugten Bilds mit einem Originalbild, auf welchem die semantische Repräsentation basiert, analysieren. In einem Ausführungsbeispiel kann die semantische Repräsentation durch Analyse des Originalbilds erzeugt werden. In einem Ausführungsbeispiel kann die von dem Diskriminator erzeugte Rückmeldung eine Angabe darüber beinhalten, ob das von dem Generator erzeugte Bild mit dem Originalbild übereinstimmt. In einem Ausführungsbeispiel kann die Rückmeldung ein Bit beinhalten (wobei dann z.B. eine 1 einen Spielerfolg anzeigen kann, eine 0 einen Spielverlust anzeigen kann, usw.).
  • Außerdem ferner kann in einem Ausführungsbeispiel der Diskriminator eine Vielzahl von Multimaßstab-Diskriminatoren beinhalten. In einem Ausführungsbeispiel kann jeder der Vielzahl von Multimaßstab-Diskriminatoren ein neuronales Netzwerk beinhalten, das von den anderen Multimaßstab-Diskriminatoren getrennt ist. In einem Ausführungsbeispiel kann das Bild mehrfach heruntergerechnet (bzw. heruntergesampelt oder „downsampled“) werden, um eine Vielzahl von heruntergerechneten Bildern zu erzeugen. In einem Ausführungsbeispiel kann das Bild zum ersten Mal um einen ersten Faktor heruntergerechnet werden, um ein erstes heruntergerechnetes Bild mit einer ersten Auflösung, die geringer ist als eine Auflösung des Bilds, zu erzeugen. In einem Ausführungsbeispiel kann das Bild ein zweites Mal um einen zweiten Faktor, der größer ist als der erste Faktor, heruntergerechnet werden, um ein zweites heruntergerechnetes Bild mit einer zweiten Auflösung, die geringer ist als die erste Auflösung und die Auflösung des Bilds, zu erzeugen.
  • Darüber hinaus kann in einem Ausführungsbeispiel jeder der Vielzahl von Multimaßstab-Diskriminatoren mit einer Bildgröße arbeiten, die sich von der der anderen Diskriminatoren unterscheidet, und eines der Vielzahl von heruntergerechneten Bildern analysieren. In einem Ausführungsbeispiel kann ein erster Diskriminator das Bild analysieren (z.B. durch Vergleich mit dem Originalbild). In einem Ausführungsbeispiel kann ein zweiter Diskriminator, der mit einer Bildgröße arbeitet, die kleiner als die des ersten Diskriminators ist, das erste heruntergerechnete Bild analysieren (z.B. durch Vergleichen desselben mit einer ersten heruntergerechneten Version des Originalbilds, das eine niedrigere Auflösung als das Originalbild hat, usw.). In einem Ausführungsbeispiel kann ein dritter Diskriminator, der mit einer Bildgröße arbeitet, die kleiner ist als die des zweitem Diskriminators, das zweite heruntergerechnete Bild analysieren (z.B. durch Vergleichen desselben mit einer zweiten heruntergerechneten Version des Originalbilds, das eine niedrigere Auflösung als die erste heruntergerechnete Version hat, usw.).
  • Zusätzlich kann in einem Ausführungsbeispiel jeder der Vielzahl von Multimaßstab-Diskriminatoren eine Rückmeldung (z.B. eine Angabe, ob die verglichenen Bilder übereinstimmen, usw.) bereitstellen. In dieser Weise kann die Vielzahl von Multimaßstab-Diskriminatoren zusammenarbeiten, um eine genauere Rückmeldung an den Generator zu ermöglichen. In einem Ausführungsbeispiel kann der Diskriminator ein oder mehrere Merkmale (z.B. Zwischenmerkmalsrepräsentationen usw.) aus dem von dem Generator erzeugten Bild sowie dem Originalbild, auf welchem die semantische Repräsentation basiert, extrahieren. In einem Ausführungsbeispiel kann der Diskriminator eine Übereinstimmung zwischen den extrahierten Merkmalen aus beiden Bildern durchführen.
  • Ferner kann in einem Ausführungsbeispiel der Diskriminator auch die Instance-Feature-Map verwenden. In einem Ausführungsbeispiel kann die von dem Feature-Encoder-Netzwerk erzeugte Instance-Feature-Map zusammen mit dem erzeugten Bild als Eingang für den Diskriminator verwendet werden.
  • Ferner wird, wie in Operation 106 dargestellt, der Generator basierend auf der Rückmeldung eingestellt. In einem Ausführungsbeispiel können der Generator und der Diskriminator in ein allgemeines gegnerisches bzw. adversariales Netzwerk (general adversarial network; GAN) eingebunden werden. In einem Ausführungsbeispiel kann das Einstellen des Generators ein auf der Rückmeldung basierendes Ändern einer oder mehrerer Entscheidungen beinhalten, die der Generator während der Bilderzeugung getroffen hat. In einem Ausführungsbeispiel kann der Generator während eines Trainingsprozesses basierend auf der Rückmeldung eingestellt werden. In einem Ausführungsbeispiel kann die Rückmeldung während des Trainings des Generators dazu verwendet werden, die Ausgabe des Generators während des Trainingsprozesses zu verfeinern.
  • Darüber hinaus kann in einem Ausführungsbeispiel der eingestellte Generator dazu verwendet werden, Bilder basierend auf zugeführten semantischen Maps zu erzeugen. In einem Ausführungsbeispiel kann der eingestellte Generator eine semantische Repräsentation identifizieren, und kann unter Verwendung der semantischen Repräsentation ein hochauflösendes Bild erzeugen. In einem Ausführungsbeispiel kann das hochauflösende Bild von einem autonomen Fahrzeug zur Analyse von Weg-/Fahrbahn-Bildern verwendet werden. In einem Ausführungsbeispiel kann das hochauflösende Bild von einem autonomen Fahrzeug zur Navigation sowie zur Objekterkennung innerhalb einer Szene verwendet werden.
  • Auf diese Weise kann ein Grob-zu-Fein-Generator implementiert werden, der eine Vielzahl von voneinander getrennten neuronalen Netzwerken beinhaltet, die zusammenwirken, um das Bild unter Verwendung der semantischen Map zu erzeugen. Zusätzlich kann eine Instance-Feature-Map durch ein separates neuronales Netzwerk erzeugt werden, und kann die Instance-Feature-Map von dem Generator und von dem Diskriminator verwendet werden. Ferner können die erzeugten Bilder heruntergerechnet werden, und können für jedes der heruntergerechneten Bilder verschiedene Multimaßstab-Diskriminatoren verwendet werden. Außerdem ferner können Zwischenmerkmalsrepräsentationen von dem Diskriminator extrahiert werden. Darüber hinaus kann in einem Ausführungsbeispiel der Grob-/Fein-Generator unter Verwendung einer Parallelverarbeitungseinheit (PPU) 200 implementiert sein, wie nachstehend in 2 gezeigt ist.
  • Nachstehend werden weitere veranschaulichende Informationen zu verschiedenen optionalen Architekturen und Funktionen gegeben, mit welchen das vorgenannte Framework nach den Wünschen des Benutzers implementiert werden kann. Es sei ausdrücklich darauf hingewiesen, dass die folgenden Informationen lediglich zur Veranschaulichung aufgeführt sind und nicht als einschränkend auszulegen sind. Ein beliebiges der folgenden Merkmale kann wahlweise mit oder ohne Ausnahme anderer beschriebener Merkmale integriert werden.
  • Parallelverarbeitungsarchitektur
  • 2 veranschaulicht eine Parallelverarbeitungseinheit (PPU) 200 gemäß einem Ausführungsbeispiel. In einem Ausführungsbeispiel ist die PPU 200 ein Multithread-Prozessor, der auf einer oder mehreren integrierten Schaltungsvorrichtungen implementiert ist. Die PPU 200 ist eine latenzverbergende Architektur, die entwickelt wurde, um viele Threads parallel zu verarbeiten. Ein Thread (d.h. ein Thread der Ausführung) ist eine Instanziierung einer Reihe von Anweisungen, die für die Ausführung durch die PPU 200 konfiguriert sind. In einem Ausführungsbeispiel ist die PPU 200 eine Grafikverarbeitungseinheit (GPU), die dazu konfiguriert ist, eine Grafik-Rendering-Pipeline zum Verarbeiten von dreidimensionalen (3D) Grafikdaten zu implementieren, um zweidimensionale (2D) Bilddaten zur Anzeige auf einer Anzeigevorrichtung, wie beispielsweise einer Flüssigkristallanzeigevorrichtung (LCD), zu erzeugen. In anderen Ausführungsbeispielen kann die PPU 200 zur Durchführung von Universalberechnungen verwendet werden. Während hierin ein beispielhafter Parallelprozessor zu veranschaulichenden Zwecken bereitgestellt ist, ist dringend darauf hinzuweisen, dass dieser Prozessor nur zu veranschaulichenden Zwecken dargelegt ist und dass jeder Prozessor verwendet werden kann, um diesen zu ergänzen und/oder zu ersetzen.
  • Eine oder mehrere PPUs 200 können dazu konfiguriert sein, Tausende von High Performance Computing (HPC), Rechenzentren und Anwendungen maschinellen Lernens zu beschleunigen. Die PPU 200 kann dazu konfiguriert sein, zahlreiche Systeme und Anwendungen für Tiefenlernen zu beschleunigen, darunter autonome Fahrzeugplattformen, Deep Learning, hochpräzise Sprach-, Bild- und Texterkennungssysteme, intelligente Videoanalytik, molekulare Simulationen, Medikamentenentdeckung, Krankheitsdiagnose, Wettervorhersage, Big Data Analytik, Astronomie, Molekulardynamiksimulation, Finanzmodellierung, Robotik, Fabrikautomatisierung, Echtzeit-Sprachübersetzung, Online-Suchoptimierung und personalisierte Benutzerempfehlungen und dergleichen.
  • Wie in 2 gezeigt ist, beinhaltet die PPU 200 eine Eingabe/Ausgabe- bzw. Input/Output (I/O)-Einheit 205, eine Frontend-Einheit 215, eine Scheduler-Einheit 220, eine Arbeitsverteilungseinheit 225, einen Verteiler bzw. Hub 230, eine Kreuz- bzw. Querschiene (Xbar) 270, einen oder mehrere Universalverarbeitungscluster bzw. General Processing Cluster (GPCs) 250 und eine oder mehrere Partitionseinheiten 280. Die PPU 200 kann über eine oder mehrere Hochgeschwindigkeits-NVLink-Verbindungen 210 mit einem Host-Prozessor oder anderen PPUs 200 verbunden sein. Die PPU 200 kann über eine Verbindung 202 mit einem Host-Prozessor oder anderen Peripherievorrichtungen verbunden sein. Die PPU 200 kann darüber hinaus mit einem lokalen Speicher verbunden sein, der eine Anzahl von Speichervorrichtungen 204 umfasst. In einem Ausführungsbeispiel kann der lokale Speicher eine Anzahl von dynamischen DRAM (Dynamic Random Access Memory)-Vorrichtungen umfassen. Die DRAM-Vorrichtungen können als HBM (High-Bandwidth Memory)-Subsystem konfiguriert sein, mit mehreren gestapelten DRAM-Dies in jeder Vorrichtung.
  • Die NVLink-Verbindung 210 ermöglicht es Systemen, eine oder mehrere PPUs 200 kombiniert mit einer oder mehreren CPUs zu skalieren und zu integrieren, unterstützt Cache-Kohärenz zwischen den PPUs 200 und CPUs und CPU-Mastering. Daten und/oder Befehle können von dem NVLink 210 über den Hub 230 zu/von anderen Einheiten der PPU 200, wie z.B. einer oder mehreren Kopiermaschinen bzw. Kopier-Engines, einem Video-Encoder, einem Video-Decoder, einer Energieverwaltungseinheit bzw. Power-Management-Einheit usw. (nicht explizit dargestellt), übertragen werden. Der NVLink 210 wird in Verbindung mit 4B näher beschrieben.
  • Die I/O-Einheit 205 ist dazu konfiguriert, Kommunikationen (d.h. Befehle, Daten usw.) von einem Hostprozessor (nicht gezeigt) über die Verbindung 202 zu senden und zu empfangen. Die I/O-Einheit 205 kann mit dem Host-Prozessor direkt über die Verbindung 202 oder über eine oder mehrere Zwischenvorrichtungen, wie beispielsweise eine Speicherbrücke, kommunizieren. In einem Ausführungsbeispiel kann die I/O-Einheit 205 mit einem oder mehreren anderen Prozessoren, wie beispielsweise einer oder mehreren der PPUs 200, über die Verbindung 202 kommunizieren. In einem Ausführungsbeispiel implementiert die I/O-Einheit 205 eine Peripheral Component Interconnect Express (PCIe)-Schnittstelle für die Kommunikation über einen PCIe-Bus und ist die Verbindung 202 ein PCIe-Bus. In alternativen Ausführungsbeispielen kann die I/O-Einheit 205 andere Arten gut bekannter Schnittstellen zur Kommunikation mit externen Vorrichtungen implementieren.
  • Die I/O-Einheit 205 dekodiert Pakete, die über die Verbindung 202 empfangen werden. In einem Ausführungsbeispiel repräsentieren die Pakete Befehle, die dazu konfiguriert sind, die PPU 200 zu veranlassen, verschiedenartige Operationen durchzuführen. Die I/O-Einheit 205 überträgt die dekodierten Befehle an verschiedenartige andere Einheiten der PPU 200, wie dies in den Befehlen angegeben sein kann. Beispielsweise können einige Befehle an die Frontend-Einheit 215 übertragen werden. Andere Befehle können an den Hub 230 oder andere Einheiten der PPU 200, wie z.B. eine oder mehrere Kopier-Engines, ein Video-Encoder, ein Video-Decoder, eine Power-Management-Einheit, usw. (nicht explizit gezeigt) übertragen werden. Mit anderen Worten ist die I/O-Einheit 205 dazu konfiguriert, die Kommunikation zwischen und unter den verschiedenartigen logischen Einheiten der PPU 200 zu routen.
  • In einem Ausführungsbeispiel kodiert ein von dem Host-Prozessor ausgeführtes Programm einen Befehlsstrom in einem Puffer, der Arbeitsaufkommen bzw. Workloads für die PPU 200 zur Verarbeitung bereitstellt. Ein Arbeitsaufkommen kann mehrere Anweisungen und Daten umfassen, die durch diese Anweisungen zu verarbeiten sind. Der Puffer ist eine Region in einem Speicher, der sowohl von dem Host-Prozessor als auch von der PPU 200 aus zugänglich (d.h. lesend/schreibend) ist. Beispielsweise kann die I/O-Einheit 205 dazu konfiguriert sein, über Speicheranforderungen, die über die Verbindung 202 übertragen werden, auf den Puffer in einem mit der Verbindung 202 verbundenen Systemspeicher zuzugreifen. In einem Ausführungsbeispiel schreibt der Host-Prozessor den Befehlsstrom in den Puffer und sendet dann einen Zeiger auf den Anfang des Befehlsstroms an die PPU 200. Die Frontend-Einheit 215 empfängt Zeiger auf einen oder mehrere Befehlsströme. Die Frontend-Einheit 215 verwaltet einen oder mehrere Streams, wobei sie Befehle aus den Streams liest und Befehle an die verschiedenen Einheiten der PPU 200 weiterleitet.
  • Die Frontend-Einheit 215 ist mit einer Scheduler-Einheit 220 gekoppelt, die die verschiedenen GPCs 250 dazu konfiguriert, Aufgaben zu verarbeiten, die durch den einen oder die mehreren Stream(s) definiert sind. Die Scheduler-Einheit 220 ist dazu konfiguriert, Zustandsinformationen mit Bezug zu den verschiedenen Aufgaben, die von der Scheduler-Einheit 220 verwaltet werden, nachzuverfolgen. Der Zustand kann angeben, welchem GPC 250 eine Aufgabe zugeordnet ist, ob die Aufgabe aktiv oder inaktiv ist, eine der Aufgabe zugeordnete Prioritätsstufe usw. Die Scheduler-Einheit 220 verwaltet die Ausführung einer Vielzahl von Aufgaben auf dem einem oder den mehreren GPC(s) 250.
  • Die Scheduler-Einheit 220 ist mit einer Arbeitsverteilungseinheit 225 gekoppelt, die dazu konfiguriert ist, Aufgaben zur Ausführung auf den GPCs 250 zu verteilen. Die Arbeitsverteilungseinheit 225 kann eine Anzahl von geplanten Aufgaben nachverfolgen, die von der Scheduler-Einheit 220 empfangen wurden. In einem Ausführungsbeispiel verwaltet die Arbeitsverteilungseinheit 225 für jeden der GPCs 250 einen Pool offener bzw. ausstehender Aufgaben und einen Pool aktiver Aufgaben. Der Pool offener Aufgaben kann eine Anzahl von Slots (z.B. 32 Slots) umfassen, die Aufgaben enthalten, die von einem bestimmten GPC 250 zu bearbeitet sind. Der Pool aktiver Aufgaben kann eine Anzahl von Slots (z.B. 4 Slots) für Aufgaben umfassen, die von den GPCs 250 aktiv bearbeitet werden. Wenn ein GPC 250 die Ausführung einer Aufgabe beendet, wird diese Aufgabe aus dem Pool aktiver Aufgaben für den GPC 250 entfernt und wird eine der anderen Aufgaben aus dem Pool offener Aufgaben ausgewählt und zur Ausführung auf dem GPC 250 eingeplant. Wenn eine aktive Aufgabe auf dem GPC 250 im Leerlauf war, z. B. während des Wartens auf die Auflösung einer Datenabhängigkeit, kann die aktive Aufgabe aus dem GPC 250 entfernt und in den Pool ausstehender Aufgaben zurückgeführt werden, während eine andere Aufgabe im Pool offener Aufgaben ausgewählt und zur Ausführung auf dem GPC 250 eingeplant wird.
  • Die Arbeitsverteilungseinheit 225 kommuniziert mit dem einen oder den mehreren GPC(s) 250 über die XBar 270. Die XBar 270 ist ein Zwischenverbindungsnetzwerk, das viele der Einheiten der PPU 200 mit anderen Einheiten der PPU 200 koppelt. So kann beispielsweise die XBar 270 dazu konfiguriert sein, die Arbeitsverteilungseinheit 225 mit einem bestimmten GPC 250 zu koppeln. Obwohl dies nicht ausdrücklich angegeben ist, können eine oder mehrere andere Einheiten der PPU 200 auch über den Hub 230 mit der XBar 270 verbunden sein.
  • Die Aufgaben werden von der Scheduler-Einheit220 verwaltet und von der Arbeitsverteilungseinheit 225 an einen GPC 250 geschickt. Der GPC 250 ist dazu konfiguriert, die Aufgabe zu verarbeiten und Ergebnisse zu generieren. Die Ergebnisse können von anderen Aufgaben innerhalb des GPC 250 übernommen, über die XBar 270 an einen anderen GPC 250 weitergeleitet oder in dem Speicher 204 gespeichert werden. Die Ergebnisse können über die Partitionseinheiten 280, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in/aus dem Speicher 204 implementieren, in den Speicher 204 geschrieben werden. Die Ergebnisse können über den NVLink 210 an eine andere PPU 200 oder CPU übertragen werden. In einem Ausführungsbeispiel beinhaltet die PPU 200 eine Anzahl U von Partitionseinheiten 280, die gleich der Anzahl der separaten und unterschiedlichen Speichervorrichtungen 204 ist, die mit der PPU 200 gekoppelt sind. Eine Partitionseinheit 280 wird nachstehend in Verbindung mit 3B näher beschrieben.
  • In einem Ausführungsbeispiel führt ein Host-Prozessor einen Treiberkern aus, der eine Anwendungsprogrammierschnittstelle (API) implementiert, die es einer oder mehreren auf dem Host-Prozessor ausgeführten Anwendungen ermöglicht, Operationen zur Ausführung auf der PPU 200 zu planen. In einem Ausführungsbeispiel werden mehrere Rechenanwendungen gleichzeitig von der PPU 200 ausgeführt und stellt die PPU 200 Isolation, Quality of Service (QoS) und unabhängige Adressräume für die mehreren Rechenanwendungen bereit. Eine Anwendung kann Anweisungen (z.B. API-Aufrufe) erzeugen, die den Treiberkern veranlassen, eine oder mehrere Tasks bzw. Aufgaben zur Ausführung durch die PPU 200 zu erzeugen. Der Treiberkern gibt Aufgaben an einen oder mehrere Streams aus, die von der PPU 200 verarbeitet werden. Jede Aufgabe kann eine oder mehrere Gruppen von verwandten Threads umfassen, die hierin als Warp bezeichnet werden. In einem Ausführungsbeispiel umfasst ein Warp 32 verwandte Threads, die parallel ausgeführt werden können. Kooperierende Threads können sich auf eine Vielzahl von Threads beziehen, einschließlich Anweisungen zur Ausführung der Aufgabe, die Daten über einen gemeinsamen Speicher austauschen können. Threads und kooperierende Threads werden in Verbindung mit 4A näher beschrieben.
  • 3A veranschaulicht einen GPC 250 der PPU 200 von 2 gemäß einem Ausführungsbeispiel. Wie in 3A gezeigt ist, beinhaltet jeder GPC 250 eine Anzahl von Hardwareeinheiten für Verarbeitungsaufgaben. In einem Ausführungsbeispiel beinhaltet jeder GPC 250 einen Pipeline-Manager 310, eine Pre-Raster Operations Unit (PROP) 315, eine Rastermaschine bzw. Raster-Engine 325, eine Arbeitsverteilungs-Querschiene bzw. Work Distribution Crossbar (WDX) 380, eine Speicherverwaltungseinheit bzw. Memory Management Unit (MMU) 390 und einen oder mehrere Datenverarbeitungscluster bzw. Data Processing Cluster (DPCs) 320. Es versteht sich, dass der GPC 250 von 3A anstelle oder zusätzlich zu den in 3A gezeigten Einheiten weitere Hardwareeinheiten beinhalten kann.
  • In einem Ausführungsbeispiel wird der Betriebsablauf des GPC 250 durch den Pipeline-Manager 310 gesteuert. Der Pipeline-Manager 310 verwaltet die Konfiguration des einen oder der mehreren DPC(s) 320 zum Verarbeiten von Aufgaben, die dem GPC 250 zugeordnet sind. In einem Ausführungsbeispiel kann der Pipeline-Manager 310 zumindest einen des einen oder der mehreren DPC(s) 320 konfigurieren, um zumindest einen Teil einer Grafik-Rendering-Pipeline zu implementieren. Beispielsweise kann ein DPC 320 dazu konfiguriert sein, ein Vertex-Shader-Programm auf dem programmierbaren Streaming-Multiprozessor (SM) 340 auszuführen. Der Pipeline-Manager 310 kann darüber hinaus dazu konfiguriert sein, von der Arbeitsverteilungseinheit 225 empfangene Pakete an die geeigneten logischen Einheiten innerhalb des GPC 250 weiterzuleiten. Beispielsweise können einige Pakete an Hardwareeinheiten mit fester Funktion in dem PROP 315 und/oder der Raster-Engine 325 weitergeleitet werden, während andere Pakete an die DPCs 320 zur Verarbeitung durch die Stammfunktions-Engine 335 oder den SM 340 weitergeleitet werden können. In einem Ausführungsbeispiel kann der Pipeline-Manager 310 zumindest einen des einen oder der mehreren DPC(s) 320 dazu konfigurieren, ein neuronales Netzwerkmodell und/oder eine Rechen-Pipeline zu implementieren.
  • Die PROP-Einheit 315 ist dazu konfiguriert, die von der Raster-Engine 325 und den DPCs 320 erzeugten Daten an eine Raster Operations (ROP)-Einheit weiterzuleiten, die in Verbindung mit 3B näher beschrieben wird. Die PROP-Einheit 315 kann darüber hinaus dazu konfiguriert sein, Optimierungen zur Farbmischung durchzuführen, Pixeldaten zu organisieren, Adressenübersetzungen durchzuführen und dergleichen.
  • Die Raster-Engine 325 beinhaltet eine Anzahl von Hardwareeinheiten mit fester Funktion, die dazu konfiguriert sind, verschiedene Rasteroperationen durchzuführen. In einem Ausführungsbeispiel beinhaltet die Raster-Engine 325 eine Einricht- bzw. Setup-Engine, eine Grobrastermaschine bzw. Grobraster-Engine, eine Entfemungsmaschine bzw. Culling-Engine, eine Abschneidemaschine bzw. Clipping-Engine, eine Feinrastermaschine bzw. Feinraster-Engine und eine Kachel-Koaleszenzmaschine bzw. -Engine. Die Setup-Engine empfängt transformierte Eckpunkte bzw. Vertices und erzeugt Ebenengleichungen, die der durch die Vertices definierten geometrischen Stammfunktion zugeordnet sind. Die Ebenengleichungen werden an den Grobraster-Engine übertragen, um Abdeckungsinformationen (z.B. eine x,y-Abdeckungsmaske für eine Kachel) für die Stammfunktion zu erzeugen. Die Leistung der Grobraster-Engine wird an die Culling-Engine übertragen, an der der Stammfunktion zugeordnete Fragmente, die einen z-Test nicht bestehen, entfernt werden, und an eine Clipping--Engine übertragen, an der Fragmente, die außerhalb eines Betrachtungskegelstumpfs bzw. Betrachtungsfrustums liegen, abgeschnitten werden. Die Fragmente, die das Clipping und Culling überleben, können an die Feinraster-Engine übergeben werden, um Attribute für die Pixelfragmente basierend auf den von der Setup-Engine erzeugten Ebenengleichungen zu erzeugen. Die Ausgabe der Raster-Engine 325 umfasst Fragmente, die beispielsweise von einem innerhalb eines DPC 320 implementierten Fragment-Shaders zu verarbeiten sind.
  • Jeder in dem GPC 250 enthaltene DPC 320 beinhaltet eine M-Pipe-Steuereinrichtung bzw. einen M-Pipe-Controller (MPC) 330, eine Stammfunktions-Engine 335 und einen oder mehrere SMs 340. Der MPC 330 steuert den Betriebsablauf des DPC 320 und leitet die von dem Pipeline-Manager 310 empfangenen Pakete an die geeigneten Einheiten des DPC 320 weiter. Beispielsweise können Pakete, die einem Eckpunkt bzw. Vertex zugeordnet sind, an die Stammfunktions-Engine 335 weitergeleitet werden, welche dazu konfiguriert ist, die dem Vertex zugeordneten Vertex-Attribute aus dem Speicher 204 zu holen. Demgegenüber können Pakete, die einem Shader-Programm zugeordnet sind, an den SM 340 übertragen werden.
  • Der SM 340 umfasst einen programmierbaren Streaming-Prozessor, der dazu konfiguriert ist, Aufgaben zu verarbeiten, die durch eine Anzahl von Threads repräsentiert werden. Jeder SM 340 ist multi-threaded und dazu konfiguriert, eine Vielzahl von Threads (z.B. 32 Threads) aus einer bestimmten Gruppe von Threads gleichzeitig auszuführen. In einem Ausführungsbeispiel implementiert die SM 340 eine SIMD (Single-Instruction, Multiple-Data)-Architektur, bei der jeder Thread in einer Gruppe von Threads (d.h. einem Warp) dazu konfiguriert ist, einen anderen Datensatz basierend auf demselben Befehlssatz zu verarbeiten. Alle Threads in der Gruppe von Threads führen dieselben Anweisungen aus. In einem weiteren Ausführungsbeispiel implementiert der SM 340 eine SIMT (Single-Instruction, Multiple Thread)-Architektur, bei der jeder Thread in einer Gruppe von Threads dazu konfiguriert ist, einen anderen Datensatz basierend auf demselben Befehlssatz zu verarbeiten, wobei jedoch einzelne Threads in der Gruppe von Threads während der Ausführung divergieren dürfen. In einem Ausführungsbeispiel wird für jeden Warp ein Programmzähler, ein Aufrufstapel und ein Ausführungszustand beibehalten, welches die Gleichzeitigkeit zwischen Warps und die serielle Ausführung innerhalb von Warps ermöglicht, wenn Threads innerhalb des Warps divergieren. In einem weiteren Ausführungsbeispiel werden für jeden einzelnen Thread ein Programmzähler, ein Aufrufstapel und ein Ausführungszustand beibehalten, welches eine gleiche Gleichzeitigkeit zwischen allen Threads, innerhalb und zwischen Warps, ermöglicht. Wenn der Ausführungszustand für jeden einzelnen Thread beibehalten wird, können Threads, die dieselben Anweisungen ausführen, für maximale Effizienz konvergiert und parallel ausgeführt werden. Der SM 340 wird nachstehend in Verbindung mit 4A näher beschrieben.
  • Die MMU 390 stellt eine Schnittstelle zwischen dem GPC 250 und der Partitionseinheit 280 bereit. Die MMU 390 kann eine Übersetzung virtueller Adressen in physikalische Adressen, Speicherschutz und Arbitrierung von Speicheranforderungen bereitstellen. In einem Ausführungsbeispiel stellt die MMU 390 einen oder mehrere Translation Lookaside Buffer (TLBs) bereit zum Durchführen einer Übersetzung von virtuellen Adressen in physikalische Adressen in dem Speicher 204.
  • 3B veranschaulicht eine Speicherpartitionseinheit 280 der PPU 200 von 2 gemäß einem Ausführungsbeispiel. Wie in 3B gezeigt ist, beinhaltet die Speicherpartitionseinheit 280 eine Raster Operations (ROP)-Einheit 350, einen Level-2 (L2)-Cache 360 und eine Speicherschnittstelle 370. Die Speicherschnittstelle 370 ist mit dem Speicher 204 gekoppelt. Die Speicherschnittstelle 370 kann 32, 64, 128, 1024-Bit-Datenbusse oder dergleichen für eine Hochgeschwindigkeits-Datenübertragung implementieren. In einem Ausführungsbeispiel integriert die PPU 200 U-Speicherschnittstellen 370, eine Speicherschnittstelle 370 pro Paar von Partitionseinheiten 280, wobei jedes Paar von Partitionseinheiten 280 mit einer entsprechenden Speichervorrichtung 204 verbunden ist. Beispielsweise kann die PPU 200 mit bis zu Y Speichervorrichtungen 204 verbunden sein, wie beispielsweise Speicherstapeln mit hoher Bandbreite oder synchronem dynamischem Grafik-Direktzugriffsspeicher mit doppelter Datenrate, Version 5, oder anderen Arten von persistentem Speicher.
  • In einem Ausführungsbeispiel implementiert die Speicherschnittstelle 370 eine HBM2-Speicherschnittstelle und entspricht Y der Hälfte von U. In einem Ausführungsbeispiel befinden sich die HBM2-Speicherstapel auf dem gleichen physikalischen Package wie die PPU 200, welches im Vergleich zu herkömmlichen GDDR5-SDRAM-Systemen zu erheblichen Strom- und Flächeneinsparungen führt. In einem Ausführungsbeispiel beinhaltet jeder HBM2-Stapel vier Speicherchips und ist Y gleich 4, wobei der HBM2-Stapel zwei 128-Bit-Kanäle pro Die für insgesamt 8 Kanäle und eine Datenbusbreite von 1024 Bit beinhaltet.
  • In einem Ausführungsbeispiel unterstützt der Speicher 204 Single-Error Correcting Double-Error Detecting (SECDED) Error Correction Code (ECC) zum Schutz von Daten. ECC bietet eine höhere Zuverlässigkeit für Rechenanwendungen, die empfindlich auf Datenverluste reagieren. Zuverlässigkeit ist besonders wichtig in großen Cluster-Computerumgebungen, in denen PPUs 200 sehr große Datensätze verarbeiten und/oder Anwendungen über einen längeren Zeitraum betreiben.
  • In einem Ausführungsbeispiel implementiert die PPU 200 eine mehrstufige Speicherhierarchie. In einem Ausführungsbeispiel unterstützt die Speicherpartitionseinheit 280 einen vereinheitlichten Speicher, um einen einzigen vereinheitlichten virtuellen Adressraum für CPU- und PPU 200-Speicher bereitzustellen, der einen Datenaustausch zwischen virtuellen Speichersystemen ermöglicht. In einem Ausführungsbeispiel wird die Häufigkeit der Zugriffe einer PPU 200 auf Speicher, der sich auf anderen Prozessoren befindet, nachverfolgt, um sicherzustellen, dass Speicherseiten in den physikalischen Speicher der PPU 200 verschoben werden, die häufiger auf die Seiten zugreift. In einem Ausführungsbeispiel unterstützt der NVLink 210 Adressübersetzungsdienste, die es der PPU 200 ermöglichen, direkt auf die Seitentabellen einer CPU zuzugreifen, und stellt vollen Zugriff auf den CPU-Speicher durch die 200 bereit.
  • In einem Ausführungsbeispiel übertragen Kopiermaschinen bzw. Kopier-Engines Daten zwischen mehreren PPUs 200 oder zwischen PPUs 200 und CPUs. Die Kopier-Engines können Seitenfehler für Adressen erzeugen, die nicht in die Seitentabellen abgebildet sind. Die Speicherpartitionseinheit 280 kann dann die Seitenfehler beheben und die Adressen in die Seitentabelle eintragen, woraufhin die Kopier-Engine die Übertragung durchführen kann. In einem herkömmlichen System ist der Speicher für mehrfache Kopier-Engine-Operationen zwischen mehreren Prozessoren gepinnt (d.h. nicht auslagerbar), welches den verfügbaren Speicher erheblich reduziert. Mit Hardware-Seitenfehlerbehebung können Adressen an die Kopier-Engines weitergegeben werden, ohne sich Sorgen machen zu müssen, ob die Speicherseiten resident sind, und ist der Kopiervorgang transparent.
  • Daten aus dem Speicher 204 oder einem anderen Systemspeicher können von der Speicherpartitionseinheit 280 abgerufen und in dem L2-Cache 360 gespeichert werden, welcher sich auf dem Chip befindet und von den verschiedenen GPCs 250 gemeinsam genutzt wird. Wie gezeigt ist, beinhaltet jede Speicherpartitionseinheit 280 einen Abschnitt des L2-Cache 360, der einer entsprechenden Speichervorrichtung 204 zugeordnet ist. Untergeordnete Caches können dann in verschiedenen Einheiten innerhalb der GPCs 250 implementiert sein. Beispielsweise kann jeder der SMs 340 einen Level One (L1)-Cache implementieren. Der L1-Cache ist ein privater Speicher, der für einen bestimmten SM 340 dediziert ist. Daten aus dem L2-Cache 360 können abgerufen und in jedem der L1-Caches zur Verarbeitung in den Funktionseinheiten der SMs 340 gespeichert werden. Der L2-Cache 360 ist mit der Speicherschnittstelle 370 und der XBar 270 gekoppelt.
  • Die ROP-Einheit 350 führt grafische Rasteroperationen mit Bezug zu Pixelfarbe durch, wie z.B. eine Farbkompression, ein Pixelblending und dergleichen. Die ROP-Einheit 350 implementiert darüber hinaus Tiefenprüfungen in Verbindung mit der Raster-Engine 325 durch, wobei sie eine Tiefe für einen Musterort empfängt, die einem Pixelfragment von dem Culling-Engine der Raster-Engine 325 zugeordnet ist. Die Tiefe wird gegen eine entsprechende Tiefe in einem Tiefenpuffer für einen dem Fragment zugeordneten Musterort getestet. Falls das Fragment den Tiefentest für den Musterort besteht, aktualisiert die ROP-Einheit 350 den Tiefenpuffer und überträgt ein Ergebnis des Tiefentests an die Raster-Engine 325. Es versteht sich, dass die Anzahl der Partitionseinheiten 280 von der Anzahl der GPCs 250 verschieden sein kann und daher jede ROP-Einheit 350 mit jedem der GPCs 250 gekoppelt sein kann. Die ROP-Einheit 350 nachverfolgt die von den verschiedenen GPCs 250 empfangenen Pakete und bestimmt, zu welchem GPC 250 ein von der ROP-Einheit 350 erzeugtes Ergebnis durch die Xbar 270 geleitet wird. Obwohl die ROP-Einheit 350 in 3B innerhalb der Speicherpartitionseinheit 280 enthalten ist, kann sich die ROP-Einheit 350 in einem anderen Ausführungsbeispiel außerhalb der Speicherpartitionseinheit 280 befinden. Beispielsweise kann sich die ROP-Einheit 350 in dem GPC 250 oder einer anderen Einheit befinden.
  • 4A veranschaulicht den Streaming-Multiprozessor 340 von 3A gemäß einem Ausführungsbeispiel. Wie in 4A gezeigt ist, beinhaltet der SM 340 einen Anweisungscache 405, eine oder mehrere Scheduler-Einheiten 410(K), eine Registerdatei 420, einen oder mehrere Verarbeitungskerne 450, eine oder mehrere Spezialfunktionseinheiten (SFUs) 452, eine oder mehrere Lade-/Speicher-Einheiten (LSUs) 454, ein Verbindungsnetzwerk480, einen gemeinsam genutzten Speicher/L1-Cache 470.
  • Wie vorstehend beschrieben wurde, versendet die Arbeitsverteilungseinheit 225 Aufgaben zur Ausführung auf den GPCs 250 der PPU 200. Die Aufgaben sind einem bestimmten DPC 320 innerhalb eines GPC 250 zugeordnet und, wenn die Aufgabe einem Shader-Programm zugeordnet ist, kann die Aufgabe einem SM 340 zugeordnet sein. Die Scheduler-Einheit410(K) empfängt die Aufgaben von der Arbeitsverteilungseinheit 225 und verwaltet die Anweisungsplanung für einen oder mehrere dem SM 340 zugeordnete Thread-Blöcke. Die Scheduler-Einheit 410(K) plant Thread-Blöcke zur Ausführung als Warps paralleler Threads ein, wobei jedem Thread-Block zumindest ein Warp zugeordnet ist. In einem Ausführungsbeispiel führt jeder Warp 32 Threads aus. Die Scheduler-Einheit 410(K) kann eine Vielzahl von verschiedenen Thread-Blöcken verwalten, wobei sie die Warps den verschiedenen Thread-Blöcken zuordnet und dann während jedes Taktzyklus Anweisungen von der Vielzahl von verschiedenen kooperativen Gruppen an die verschiedenen Funktionseinheiten (d.h. Kerne 450, SFUs 452 und LSUs 454) sendet.
  • Cooperative Groups ist ein Programmiermodell zum Organisieren von Gruppen kommunizierenden Threads, das es Entwicklern erlaubt, die Granularität auszudrücken, mit welcher Threads kommunizieren, welches den Ausdruck reichhaltigerer, effizienterer paralleler Zerlegungen ermöglicht. Kooperative Start-APIs unterstützen eine Synchronisation zwischen Thread-Blöcken zur Ausführung paralleler Algorithmen. Herkömmliche Programmiermodelle bieten ein einziges, einfaches Konstrukt zur Synchronisation kooperierender Threads: eine Barriere über alle Threads eines Thread-Blocks (d.h. die syncthreads() Funktion). Programmierer möchten jedoch oft Gruppen von Threads definieren, die kleiner als die Granularität von Thread-Blöcken sind, und innerhalb der definierten Gruppen synchronisieren, um mehr Leistung, Designflexibilität und Softwarewiederverwendung in Form von kollektiven gruppenweiten Funktionsschnittstellen zu ermöglichen.
  • Cooperative Groups ermöglichen es Programmierern, Gruppen von Threads explizit bei Subblock- (d.h. so klein wie ein einzelner Thread) und Multiblock-Granularitäten zu definieren und kollektive Operationen wie beispielsweise eine Synchronisation auf den Threads in einer kooperativen Gruppe durchzuführen. Das Programmiermodell unterstützt eine saubere Komposition über Softwaregrenzen hinweg, so dass Bibliotheken und Hilfsfunktionen sicher innerhalb ihres lokalen Kontexts synchronisieren können, ohne Annahmen über Konvergenz treffen zu müssen. Stammfunktionen kooperativer Gruppen ermöglichen neue Muster kooperativer Parallelität, einschließlich einer Produzenten-Verbraucher-Parallelität, einer opportunistischen Parallelität und einer globalen Synchronisation über ein gesamtes Netz von Thread-Blöcken hinweg.
  • Eine Sende-Einheit 415 ist dazu konfiguriert, Anweisungen an eine oder mehrere der Funktionseinheiten zu senden. In dem Ausführungsbeispiel beinhaltet die Scheduler-Einheit 410(K) zwei Sende-Einheiten 415, die es ermöglichen, während jedes Taktzyklus zwei verschiedene Anweisungen aus demselben Warp zu versenden. In alternativen Ausführungsbeispielen kann jede Scheduler-Einheit 410(K) eine einzelne Sende-Einheit 415 oder zusätzliche Sende-Einheiten 415 beinhalten.
  • Jeder SM 340 beinhaltet eine Registerdatei 420, die einen Satz von Registern für die Funktionseinheiten des SM 340 bereitstellt. In einem Ausführungsbeispiel ist die Registerdatei 420 zwischen jeder der Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein dedizierter Abschnitt der Registerdatei 420 zugeordnet ist. In einem anderen Ausführungsbeispiel ist die Registerdatei 420 zwischen den verschiedenen Warps aufgeteilt, die von der SM 340 ausgeführt werden. Die Registerdatei 420 stellt einen Zwischenspeicher für Operanden, die mit den Datenpfaden der Funktionseinheiten verbunden sind, bereit.
  • Jeder SM 340 umfasst L Verarbeitungskeme 450. In einem Ausführungsbeispiel beinhaltet die SM 340 eine große Anzahl (z.B. 128, usw.) von verschiedenen Verarbeitungskernen 450. Jeder Kern 450 kann eine vollpipelinierte, einfachgenaue, doppeltgenaue und/oder gemischtgenaue Verarbeitungseinheit beinhalten, die eine Gleitkommaarithmetik-Logikeinheit und eine Ganzzahlarithmetik-Logikeinheit beinhaltet. In einem Ausführungsbeispiel implementieren die Gleitkommaarithmetik-Logikeinheiten den Standard IEEE 754-2008 für Gleitkommaarithmetik. In einem Ausführungsbeispiel beinhalten die Kerne 450 64 einfachgenaue (32-Bit) Gleitkomma-Kerne, 64 Ganzzahlkerne, 32 doppeltgenaue (64-Bit) Gleitkomma-Kerne und 8 Tensorkerne.
  • Tensorkerne, die dazu konfiguriert sind, Matrixoperationen durchzuführen, und, in einem Ausführungsbeispiel, ein oder mehrere Tensorkerne sind in den Kernen 450 enthalten. Insbesondere sind die Tensorkerne dazu konfiguriert, tief lernende Matrixarithmetik durchzuführen, wie z.B. Faltungsoperationen für das Training und die Inferenzierung neuronaler Netzwerke. In einem Ausführungsbeispiel arbeitet jeder Tensorkern auf einer 4x4-Matrix und führt eine Matrixmultiplikations- und Akkumulationsoperation D=AxB+C durch, worin A, B, C und D 4x4-Matrizen sind.
  • In einem Ausführungsbeispiel sind die Matrix-Multiplikationseingänge A und B 16-Bit Fließkomma-Matrizen, während die Akkumulationsmatrizen C und D 16-Bit Fließkomma- oder 32-Bit Fließkomma-Matrizen sein können. Tensorkerne arbeiten mit 16-Bit Gleitkomma-Eingangsdaten mit 32-Bit Gleitkommaakkumulation. Die 16-Bit-Fließkomma-Multiplikation erfordert 64 Operationen und resultiert in einem hochgenauen Produkt, das dann unter Verwendung der 32-Bit-Fließkommaaddition mit den anderen Zwischenprodukten für eine 4x4x4x4-Matrix-Multiplikation akkumuliert wird. In der Praxis werden Tensorkerne verwendet, um viel größere zweidimensionale oder höher dimensionale Matrixoperationen durchzuführen, die aus diesen kleineren Elementen aufgebaut sind. Eine API, wie beispielsweise die CUDA 9 C++ API, stellt spezielle Matrixlasten, Matrixmultiplikationen und -akkumulationen sowie Matrixspeicheroperationen zur Verfügung, um Tensor-Kerne aus einem CUDA-C++-Programm heraus effizient zu nutzen. Auf der CUDA-Ebene geht das Warp-Level-Interface von Matrizen der Größe 16x16 aus, die alle 32 Threads des Warps umfassen.
  • Jeder SM 340 umfasst darüber hinaus M SFUs 452, die spezielle Funktionen durchführen (z.B. Attributbewertung, reziproke Quadratwurzel und dergleichen). In einem Ausführungsbeispiel können die SFUs 452 eine Baumdurchlaufeinheit beinhalten, die dazu konfiguriert ist, eine hierarchische Baumdatenstruktur zu durchlaufen. In einem Ausführungsbeispiel können die SFUs 452 eine Textureinheit beinhalten, die dazu konfiguriert ist, Textur-Map-Filteroperationen durchzuführen. In einem Ausführungsbeispiel sind die Textureinheiten dazu konfiguriert, Textur-Maps (z.B. eine 2D-Anordnung von Texturen) aus dem Speicher 204 zu laden und die Textur-Maps abzutasten, um abgetastete Texturwerte für die Verwendung in Shader-Programmen zu erzeugen, die von dem SM 340 ausgeführt werden. In einem Ausführungsbeispiel werden die Textur-Maps in dem gemeinsam genutzten Speicher/L1-Cache 370 gespeichert. Die Textureinheiten implementieren Texturoperationen wie z.B. Filteroperationen mit Hilfe von Mip-Maps (d.h. Textur-Maps unterschiedlichen Detaillierungsgrads). In einem Ausführungsbeispiel beinhaltet jede SM 240 zwei Textureinheiten.
  • Jeder SM 340 umfasst auch N LSUs 454, die Lade- und Speicher-Operationen zwischen dem gemeinsam genutzten Speicher/L1-Cache 470 und der Registerdatei 420 implementieren. Jeder SM 340 beinhaltet ein Verbindungsnetzwerk 480, das jede der Funktionseinheiten mit der Registerdatei 420 und die LSU 454 mit der Registerdatei 420, dem gemeinsam genutzten Speicher/ L1-Cache 470 verbindet. In einem Ausführungsbeispiel ist das Verbindungsnetzwerk 480 eine Kreuzschiene, die dazu konfiguriert sein kann, eine beliebige der Funktionseinheiten mit einem beliebigen der Register in der Registerdatei 420 zu verbinden und die LSUs 454 mit der Registerdatei und den Speicherplätzen in dem gemeinsam genutzten Speicher/L1-Cache 470 zu verbinden.
  • Der gemeinsam genutzte Speicher/L1 Cache 470 ist eine Anordnung von On-Chip-Speicher, das eine Datenspeicherung und Kommunikation zwischen dem SM 340 und der Stammfunktions-Engine 335 sowie zwischen den Threads in dem SM 340 ermöglicht. In einem Ausführungsbeispiel umfasst der gemeinsam genutzte Speicher/L1-Cache 470 128KB Speicherkapazität und befindet sich in dem Pfad von dem SM 340 zu der Partitionseinheit 280. Der gemeinsam genutzte Speicher/L1-Cache 470 kann dazu verwendet werden, Lese- und Schreibvorgänge zwischenzuspeichern. Einer oder mehrere des gemeinsam genutzten Speichers/L1-Caches 470, des L2-Caches 360 und des Speichers 204 sind Backup-Speicher.
  • Ein Kombinieren von Daten-Cache und Shared-Memory-Funktionalität in einem einzigen Speicherblock bietet die beste Gesamtleistung für beide Arten von Speicherzugriffen. Die Kapazität ist als ein Cache von Programmen nutzbar, die keinen gemeinsam genutzten Speicher verwenden. Wenn beispielsweise der gemeinsam genutzte Speicher dazu konfiguriert ist, die Hälfte der Kapazität zu verwenden, können Textur- und Lade-/Speicher-Operationen die verbleibende Kapazität nutzen. Die Integration in den gemeinsam genutzten Speicher/L1-Cache 470 ermöglicht es dem gemeinsam genutzten Speicher/L1-Cache 470, als eine Hochdurchsatzleitung zum Streamen von Daten zu arbeiten und gleichzeitig einen Zugriff auf häufig wiederverwendete Daten mit hoher Bandbreite und geringer Latenz zu ermöglichen.
  • Bei einer Konfiguration für allgemeine parallele Berechnungen kann im Vergleich zu einer Grafikverarbeitung eine einfachere Konfiguration verwendet werden. Spezieller werden die in 2 gezeigten Grafikverarbeitungseinheiten mit fester Funktion umgangen, wodurch ein wesentlich einfacheres Programmiermodell entsteht. In der Konfiguration für allgemeine parallele Berechnungen weist die Arbeitsverteilungseinheit 225 Thread-Blöcke direkt den DPCs 320 zu und verteilt sie. Die Threads in einem Block führen das gleiche Programm aus, wobei sie eine eindeutige Thread-ID in der Berechnung verwenden, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse erzeugt, wobei der SM 340 dazu verwendet wird, das Programm auszuführen und Berechnungen durchzuführen, der gemeinsam genutzte Speicher/L1-Cache 470 dazu verwendet wird, um zwischen Threads zu kommunizieren, und die LSU 454 dazu verwendet wird, den globalen Speicher über den gemeinsam genutzten Speicher/L1-Cache 470 und die Speicherpartitionseinheit 280 zu lesen und zu schreiben. Wenn der SM 340 für allgemeine parallele Berechnungen konfiguriert ist, kann er auch Befehle schreiben, mit denen die Scheduler-Einheit 220 neue Arbeiten an den DPCs 320 starten kann.
  • Die PPU 200 kann in einem Desktop-Computer, einem Laptop-Computer, einem Tablet-Computer, Servern, Supercomputern, einem Smartphone (z.B. einem drahtlosen, tragbaren Gerät), einem Personal Digital Assistant (PDA), einer Digitalkamera, einem Fahrzeug, einem Kopfbildschirm, einer tragbaren elektronischen Vorrichtung und dergleichen enthalten sein. In einem Ausführungsbeispiel ist die PPU 200 auf einem einzelnen Halbleitersubstrat ausgeführt. In einem weiteren Ausführungsbeispiel ist die PPU 200 zusammen mit einer oder mehreren anderen Vorrichtungen, wie zusätzlichen PPUs 200, dem Speicher 204, einer CPU mit reduziertem Befehlssatz (RISC), einer Speicherverwaltungseinheit (MMU), einem Digital-Analog-Wandler (DAC) und dergleichen, in einem System auf einem Chip (SoC) enthalten.
  • In einem Ausführungsbeispiel kann die PPU 200 auf einer Grafik-Map enthalten sein, die eine oder mehrere Speichervorrichtungen 204 beinhaltet. Die Grafik-Map kann dazu konfiguriert sein, mit einem PCIe-Steckplatz auf einem Motherboard eines Desktop-Computers verbunden zu sein. In einem nochmals weiteren Ausführungsbeispiel kann die PPU 200 eine integrierte Grafikverarbeitungseinheit (iGPU) oder ein paralleler Prozessor sein, der in dem Chipsatz des Motherboards enthalten ist.
  • Beispielhaftes Rechensystem
  • Systeme mit mehreren GPUs und CPUs werden in einer Vielzahl von Branchen eingesetzt, da Entwickler mehr Parallelität in Anwendungen wie beispielsweise Computing in künstlicher Intelligenz bereitstellen und nutzen. Leistungsstarke GPUbeschleunigte Systeme mit zehn bis vielen Tausenden von Rechenknoten werden in Datenzentren, Forschungseinrichtungen und Supercomputern eingesetzt, um immer größere Probleme zu lösen. Mit zunehmender Anzahl von Verarbeitungsvorrichtungen innerhalb der Hochleistungssysteme müssen die Kommunikations- und Datenübertragungsmechanismen skaliert werden, um die erhöhte Bandbreite zu unterstützen.
  • 4B ist ein konzeptionelles Diagramm eines Verarbeitungssystems 400, das unter Verwendung der PPU 200 von 2 gemäß einem Ausführungsbeispiel implementiert ist. Das beispielhafte System 465 kann dazu konfiguriert sein, das in 1 gezeigte Verfahren 100 zu implementieren. Das Verarbeitungssystem 400 beinhaltet eine CPU 430, einen Switch 410 und jeweils mehrere PPUs 200 und entsprechende Speicher 204. Der NVLink 210 bietet Hochgeschwindigkeitskommunikationsverbindungen zwischen jeder der PPUs 200. Obwohl eine bestimmte Anzahl von NVLink-Verbindungen 210 und Zwischenverbindungen 202 in 4B dargestellt ist, kann die Anzahl der Verbindungen zu jeder PPU 200 und der CPU 430 variieren. Der Switch 410 verbindet zwischen der Verbindung 202 und der CPU 430. Die PPUs 200, Speicher 204 und NVLinks 210 können sich auf einer einzigen Halbleiterplattform befinden, um ein Parallelverarbeitungsmodul 425 zu bilden. In einem Ausführungsbeispiel unterstützt der Switch 410 zwei oder mehr Protokolle, um eine Schnittstelle zwischen verschiedenartigen unterschiedlichen Verbindungen und/oder Verknüpfungen auszubilden.
  • In einem weiteren Ausführungsbeispiel (nicht gezeigt) stellt der NVLink 210 eine oder mehrere Hochgeschwindigkeitskommunikationsverbindungen zwischen jeder der PPUs 200 und der CPU 430 her, und bildet der Switch 410 eine Schnittstelle zwischen der Verbindung 202 und jeder der PPUs 200. Die PPUs 200, die Speicher 204 und die Verbindung 202 können auf einer einzigen Halbleiterplattform angeordnet sein, ein Parallelverarbeitungsmodul 425 zu bilden. In einem nochmals weiteren Ausführungsbeispiel (nicht gezeigt) stellt die Verbindung 202 eine oder mehrere Kommunikationsverbindungen zwischen jeder der PPUs 200 und der CPU 430 bereit, und bildet der Switch 410 unter Verwendung des verwendend NVLinks 210 eine Schnittstelle zwischen jeder der PPUs 200, um eine oder mehrere Hochgeschwindigkeitskommunikationsverbindungen zwischen den PPUs 200 bereitzustellen. In einem weiteren Ausführungsbeispiel (nicht gezeigt) stellt der NVLink 210 eine oder mehrere Hochgeschwindigkeitskommunikationsverbindungen zwischen den PPUs 200 und der CPU 430 über den Switch 410 bereit. In einem nochmals weiteren Ausführungsbeispiel (nicht gezeigt) stellt die Verbindung 202 eine oder mehrere Kommunikationsverbindungen zwischen jeder der PPUs 200 direkt zur Verfügung. Eine oder mehrere der NVLink 210-Hochgeschwindigkeitskommunikationsverbindungen können als physische NVLink-Verbindung oder als On-Chip- oder On-Die-Verbindung unter Verwendung desselben Protokolls wie das des NVLinks 210 implementiert sein.
  • Im Kontext der Beschreibung kann sich eine einzelne Halbleiterplattform auf eine einzige einheitliche halbleiterbasierte integrierte Schaltung beziehen, die auf einem Chip oder einem Die hergestellt ist. Es wird angemerkt, dass sich der Begriff einer einzelnen Halbleiterplattform auch auf Multichip-Module mit erhöhter Konnektivität, welche einen On-Chip-Betriebsablauf simulieren und wesentliche Verbesserungen gegenüber einer herkömmlichen Busimplementierung vornehmen, beziehen kann. Natürlich können die verschiedenen Schaltungsanordnungen oder Vorrichtungen bzw. Geräte auch einzeln oder in verschiedenen Kombinationen von Halbleiterplattformen nach den Wünschen des Benutzers angeordnet sein. Alternativ kann das Parallelverarbeitungsmodul 425 als ein Leiterplattensubstrat implementiert sein und kann jede(r) der PPUs 200 und/oder Speicher 204 als gepackte Vorrichtung ausgeführt sein. In einem Ausführungsbeispiel liegen die CPU 430, der Switch 410 und das Parallelverarbeitungsmodul 425 auf einer einzigen Halbleiterplattform.
  • In einem Ausführungsbeispiel beträgt die Signalübertragungsrate jedes NVLink 210 20 bis 25 Gigabit/Sekunde und beinhaltet jede PPU 200 sechs NVLink 210-Schnittstellen (wie in 4B gezeigt ist, sind fünf NVLink 210-Schnittstellen für jede PPU 200 enthalten). Jeder NVLink 210 bietet eine Datenübertragungsrate von 25 Gigabyte/Sekunde in jede Richtung, so dass sechs Links 300 Gigabyte/Sekunde bereitstellen. Die NVLinks 210 können ausschließlich für die PPU-zu-PPU-Kommunikation verwendet werden, wie in 4B gezeigt ist, oder für eine Kombination aus PPU-zu-PPU und PPU-zu-CPU, wenn die CPU 430 auch eine oder mehrere NVLink 210-Schnittstellen beinhaltet.
  • In einem Ausführungsbeispiel ermöglicht das NVLink 210 den direkten Lade-/ Speicher-/Kern-Zugriff von der CPU 430 auf den Speicher 204 jeder PPU 200. In einem Ausführungsbeispiel unterstützt der NVLink 210 Kohärenzoperationen, so dass aus den Speichern 204 gelesene Daten in der Cache-Hierarchie der CPU 430 gespeichert werden können, wodurch die Cache-Zugriffslatenz für die CPU 430 reduziert wird. In einem Ausführungsbeispiel beinhaltet der NVLink 210 die Unterstützung von Address Translation Services (ATS), so dass die PPU 200 direkt auf Seitentabellen innerhalb der CPU 430 zugreifen kann. Einer oder mehrere der NVLinks 210 können auch für den Betrieb in einem Low-Power-Modus konfiguriert sein.
  • 4C veranschaulicht ein beispielhaftes System 465, in welchem die verschiedenartige Architektur und/oder Funktionalität der verschiedenartigen vorangehenden Ausführungsbeispiele implementiert sein kann. Das beispielhafte System 465 kann dazu konfiguriert sein, das in 1 gezeigte Verfahren 100 zu implementieren.
  • Wie gezeigt ist, wird ein System 465 bereitgestellt, das zumindest eine zentrale Verarbeitungseinheit 430 beinhaltet, die mit einem Kommunikationsbus 475 verbunden ist. Der Kommunikationsbus 475 kann unter Verwendung jedes geeigneten Protokolls, wie z.B. PCI (Peripheral Component Interconnect), PCI-Express, AGP (Accelerated Graphics Port), HyperTransport oder einem beliebigen anderen Bus- oder Punkt-zu-Punkt Kommunikationsprotokoll implementiert sein. Das System 465 beinhaltet darüber hinaus einen Hauptspeicher 440. Steuerlogik (Software) und Daten werden in dem Hauptspeicher 440 gespeichert, welcher als Direktzugriffsspeicher (RAM) ausgeführt sein kann.
  • Das System 465 beinhaltet darüber hinaus Eingabevorrichtungen 460, das Parallelverarbeitungssystem 425 und Anzeigevorrichtungen 445, d.h. eine herkömmliche CRT (Kathodenstrahlröhre), ein LCD (Flüssigkristallanzeige), ein LED (Leuchtdiode), eine Plasmaanzeige oder dergleichen. Benutzereingaben können von den Eingabevorrichtungen 460, z.B. einer Tastatur, einer Maus, einem Touchpad, einem Mikrofon und dergleichen, empfangen werden. Jedes der vorgenannten Module und/oder jede der vorgenannten Vorrichtungen kann sich sogar auf einer einzigen Halbleiterplattform befinden, um das System 465 zu bilden. Alternativ können die verschiedenen Module auch einzeln oder in verschiedenen Kombinationen von Halbleiterplattformen nach den Wünschen des Anwenders angeordnet sein.
  • Ferner kann das System 465 über eine Netzwerkschnittstelle 435 zu Kommunikationszwecken mit einem Netzwerk (z.B. einem Telekommunikationsnetzwerk, einem Local Area Network (LAN), einem drahtlosen Netzwerk, einem Wide Area Network (WAN) wie dem Internet, einem Peer-to-Peer-Netzwerk, einem Kabelnetzwerk oder dergleichen) gekoppelt sein.
  • Das System 465 kann darüber hinaus einen sekundären Speicher (nicht gezeigt) beinhalten. Der sekundäre Speicher beinhaltet beispielsweise ein Festplattenlaufwerk und/oder ein Wechselspeicherlaufwerk, das ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein Compact-Disk-Laufwerk, ein Digital Versatile Disk (DVD)-Laufwerk, eine Aufnahmevorrichtung, einen Flashspeicher für den universellen seriellen Bus (USB) repräsentiert. Das Wechselspeicherlaufwerk liest und/oder schreibt in gut bekannter Weise von einer/auf eine Wechselspeichereinheit.
  • Computerprogramme oder Logikalgorithmen der Computersteuerung können in dem Hauptspeicher 440 und/oder in dem sekundären Speicher gespeichert sein. Solche Computerprogramme ermöglichen es dem System 465, verschiedene Funktionen auszuführen, wenn sie ausgeführt werden. Der Speicher 440, der Speicher und/oder ein beliebiger andere Speicher sind mögliche Beispiele für computerlesbare Medien.
  • Die Architektur und/oder die Funktionalität der verschiedenen vorangehenden Figuren kann im Kontext eines universellen Computersystems, eines Schaltungsplatinensystems, eines Spielkonsolensystems, das für Unterhaltungszwecke dediziert ist, eines anwendungsspezifischen Systems und/oder eines beliebigen anderen gewünschten Systems implementiert sein. Das System 465 kann beispielsweise in Form eines Desktop-Computers, eines Laptops, eines Tablet-Computers, von Servern, von Supercomputern, eines Smartphones (z.B. eines drahtlosen, tragbaren Geräts), eines persönlichen digitalen Assistenten (PDA), einer Digitalkamera, eines Fahrzeugs, eines kopfmontierten Displays, einer tragbaren elektronischen Vorrichtung, einer mobilen Telefonvorrichtung, eines Fernsehers, einer Workstation, von Spielkonsolen, eines eingebetteten Systems und/oder einer beliebigen anderen Art von Logik ausgeführt sein.
  • Während vorstehend verschiedene Ausführungsbeispiele beschrieben wurden, versteht sich, dass diese nur beispielhaft und nicht beschränkend dargestellt wurden. Daher ist die Breite und der Schutzumfang eines bevorzugten Ausführungsbeispiels nicht durch eines der vorstehend beschriebenen beispielhaften Ausführungsbeispiele zu beschränken, sondern nur in Übereinstimmung mit den nachfolgenden Ansprüchen und deren Äquivalenten zu definieren.
  • Grafikverarbeitungs-Pipeline
  • In einem Ausführungsbeispiel umfasst die PPU 200 eine Grafikverarbeitungseinheit (GPU). Die PPU 200 ist dazu konfiguriert, Befehle zu empfangen, die Shader-Programme zur Verarbeitung von Bilddaten spezifizieren. Grafikdaten können als ein Satz von Stammfunktionen wie beispielsweise Punkte, Linien, Dreiecke, Vierecke, Dreiecksstreifen und dergleichen definiert sein. Typischerweise beinhaltet eine Stammfunktion Daten, die eine Anzahl von Vertices für die Stammfunktion (z.B. in einem Modell-Raum-Koordinatensystem) spezifizieren, sowie Attribute, die jedem Vertex der Stammfunktion zugeordnet sind. Die PPU 200 kann dazu konfiguriert sein, die Grafik-Stammfunktion zu verarbeiten, um einen Einzelbild- bzw. Frame-Puffer (d.h. Pixeldaten für jedes der Pixel des Displays) zu erzeugen.
  • Eine Anwendung schreibt Modelldaten für eine Szene (d.h. eine Sammlung von Vertices und Attributen) in einen Speicher, wie beispielsweise einen Systemspeicher oder Speicher 204. Die Modelldaten definieren jedes der Objekte, die auf einer Anzeige sichtbar sein können. Die Anwendung führt dann einen API-Aufruf an den Treiberkern durch, der die Modelldaten zur Wiedergabe und Anzeige anfordert. Der Treiberkern liest die Modelldaten und schreibt Befehle in den einen oder die mehreren Streams, um Operationen zur Verarbeitung der Modelldaten durchzuführen. Die Befehle können verschiedene Shader-Programme referenzieren, die auf den SMs 340 der PPU 200 zu implementieren sind, einschließlich eines oder mehrere eines Vertex-Shaders, eines Hüllen-Shaders, eines Domain-Shaders, eines Geometrie-Shaders und eines Pixel-Shaders. Beispielsweise kann einer oder mehrere der SMs 340 dazu konfiguriert sein, ein Vertex-Shader-Programm auszuführen, das eine Anzahl von durch die Modelldaten definierten Eckpunkten verarbeitet. In einem Ausführungsbeispiel können die verschiedenen SMs 340 dazu konfiguriert sein, verschiedene Shader-Programme gleichzeitig auszuführen. Beispielsweise kann eine erste Teilmenge von SMs 340 dazu konfiguriert sein, ein Vertex-Shader-Programm auszuführen, während eine zweite Teilmenge von SMs 340 dazu konfiguriert sein kann, ein Pixel-Shader-Programm auszuführen. Die erste Teilmenge von SMs 340 verarbeitet Vertex-Daten, um verarbeitete Vertex-Daten zu erzeugen, und schreibt die verarbeiteten Vertex-Daten in den L2-Cache 360 und/oder den Speicher 204. Nachdem die verarbeiteten Vertex-Daten gerastert sind (d.h. von dreidimensionalen Daten in zweidimensionale Daten im Bildschirmraum umgewandelt wurden), um Fragmentdaten zu erzeugen, führt die zweite Teilmenge von SMs 340 einen Pixel-Shader aus, um verarbeitete Fragmentdaten zu erzeugen, welche dann mit anderen verarbeiteten Fragmentdaten vermischt und in den Frame-Puffer im Speicher 204 geschrieben werden. Das Vertex-Shader-Programm und das Pixel-Shader-Programm können gleichzeitig ausgeführt werden und dabei verschiedene Daten aus derselben Szene in einer Pipeline verarbeiten, bis alle Modelldaten für die Szene in den Frame-Puffer gerendert sind. Anschließend wird der Inhalt des Frame-Puffers an eine Anzeigesteuervorrichtung zur Anzeige auf einer Anzeigevorrichtung übertragen.
  • 5 ist ein konzeptionelles Diagramm einer Grafikverarbeitungs-Pipeline 500, die durch die PPU 200 von 2 gemäß einem Ausführungsbeispiel implementiert wird. Die Grafikverarbeitungs-Pipeline 500 ist ein abstraktes Ablaufdiagramm der Verarbeitungsschritte, die zur Erzeugung von computer-generierten 2D-Bildern aus 3D-Geometriedaten implementiert sind. Wie gut bekannt ist, können Pipeline-Architekturen Operationen bzw. Betriebsabläufe mit langen Latenzzeiten durch Aufspalten der Operation in eine Vielzahl von Stufen effizienter durchführen, indem sie den Betriebsablauf in eine Vielzahl von Stufen aufteilen, wobei der Ausgang jeder Stufe mit dem Eingang der nächsten nachfolgenden Stufe gekoppelt ist. Somit empfängt die Grafikverarbeitungs-Pipeline 500 Eingangsdaten 501, die von einer Stufe zur nächsten Stufe der Grafikverarbeitungs-Pipeline 500 übertragen werden, um Ausgangsdaten 502 zu erzeugen. In einem Ausführungsbeispiel kann die Grafikverarbeitungs-Pipeline 500 eine durch die OpenGL®-API definierte Grafikverarbeitungs-Pipeline repräsentieren. Optional kann die Grafikverarbeitungs-pipeline 500 im Kontext der Funktionalität und der Architektur der vorangehenden Figuren und/oder (einer) beliebigen nachfolgenden Figur(en) implementiert sein.
  • Wie in 5 dargestellt ist, umfasst die Grafikverarbeitungs-Pipeline 500 eine Pipeline-Architektur, die mehrere Stufen beinhaltet. Die Stufen beinhalten, sind aber nicht beschränkt auf, eine Daten-Zusammensetzungsstufe 510, eine Vertex-Shading-Stufe 520, eine Stammfunktion-Zusammensetzungsstufe 530, eine Geometrie-Shading-Stufe 540, eine Ansichtsbereich-Skalen-, Cull- und Clip- (VSCC)-Stufe 550, eine Rasterungsstufe 560, eine Fragment-Shading-Stufe 570 und eine Rasteroperationsstufe 580. In einem Ausführungsbeispiel umfassen die Eingangsdaten 501 Befehle, die die Verarbeitungseinheiten dazu konfigurieren, die Stufen der Grafikverarbeitungs-Pipeline 500 und geometrischer Stammfunktionen (z.B. Punkte, Linien, Dreiecke, Vierecke, Dreiecksstreifen oder Fächer, usw.) zu implementieren, die von den Stufen zu verarbeiten sind. Die Ausgangsdaten 502 können Pixeldaten (d.h. Farbdaten) umfassen, die in einen Frame-Puffer oder eine andere Art von Oberflächendatenstruktur in einem Speicher kopiert werden.
  • Die Daten-Zusammensetzungsstufe 510 empfängt die Eingangsdaten 501, die Vertex-Daten für Oberflächen hoher Ordnung, Stammfunktion oder dergleichen spezifizieren. Die Daten-Zusammensetzungsstufe 510 sammelt die Vertex-Daten in einem Zwischenspeicher oder einer Warteschlange, beispielsweise durch Empfangen eines Befehls von dem Host-Prozessor, der einen Zeiger auf einen Puffer im Speicher enthält, und Lesen der Vertex-Daten aus dem Puffer. Die Vertex-Daten werden dann zur Verarbeitung an die Vertex-Shading-Stufe 520 übertragen.
  • Die Vertex-Shading-Stufe 520 verarbeitet Vertex-Daten, indem sie einen Satz von Operationen (z.B. einen Vertex-Shader oder ein Programm) einmal für jeden der Vertices durchführt. Vertices können z.B. als ein 4-Koordinaten-Vektor (d.h. <x, y, y, z, w>) angegeben sein, der einem oder mehreren Vertex-Attributen (z.B. Farbe, Texturkoordinaten, Oberflächennormale, usw.) zugeordnet ist. Die Vertex-Shading-Stufe 520 kann einzelne Vertex-Attribute wie Position, Farbe, Texturkoordinaten und dergleichen manipulieren. Mit anderen Worten führt die Vertex-Shading-Stufe 520 Operationen an den Vertex-Koordinaten oder anderen Vertex-Attributen durch, die einem Vertex zugeordnet sind. Solche Operationen beinhalten üblicherweise Beleuchtungsoperationen (d.h. ein Modifizieren von Farbattributen für einen Vertex) und Transformationsoperationen (d.h. ein Modifizieren des Koordinatenraums für einen Vertex). Beispielsweise können Vertices unter Verwendung von Koordinaten in einem Objektkoordinatenraum spezifiziert sein, welche durch Multiplizieren der Koordinaten mit einer Matrix, die die Koordinaten aus dem Objektkoordinatenraum in einen Welt-Raum oder einen für eine Vorrichtung normalisierten Koordinatenraum (normalized-device-coordinate; NCD) übersetzt, transformiert werden. Die Vertex-Shading-Stufe 520 erzeugt transformierte Vertex-Daten, die an die Stammfunktion-Zusammensetzungsstufe 530 übertragen werden.
  • Die Stammfunktion-Zusammensetzungsstufe 530 sammelt die von der Vertex-Shading-Stufe 520 ausgegebenen Vertices und gruppiert die Vertices zu geometrischen Stammfunktionen zur Verarbeitung durch die Geometrie-Shading-Stufe 540. Beispielsweise kann die Stammfunktion-Zusammensetzungsstufe 530 dazu konfiguriert sein, jeweils drei aufeinanderfolgende Vertices als geometrische Stammfunktion (d.h. ein Dreieck) zur Übertragung an die Geometrie-Shading-Stufe 540 zu gruppieren. In einigen Ausführungsbeispielen können bestimmte Vertices für aufeinanderfolgende geometrische Stammfunktionen wiederverwendet werden (z.B. können zwei aufeinanderfolgende Dreiecke in einem Dreieckstreifen zwei Eckpunkte teilen). Die Stammfunktion-Zusammensetzungsstufe 530 überträgt geometrische Stammfunktionen (d.h. eine Sammlung von zugehörigen Eckpunkten) an die Geometrie-Shading-Stufe 540.
  • Die Geometrie-Shading-Stufe 540 verarbeitet geometrische Stammfunktion, indem sie eine Reihe von Operationen (d.h. einen Geometrie-Shader oder ein Programm) auf den geometrischen Stammfunktionen durchführt. Tessellierungsoperationen können aus jeder geometrischen Stammfunktion eine oder mehrere geometrische Stammfunktionen erzeugen. Mit anderen Worten kann die Geometrie-Shading-Stufe 540 jede geometrische Stammfunktion in ein feineres Netzwerk von zwei oder mehr geometrischen Stammfunktionen zur Verarbeitung durch den Rest der Grafikverarbeitungs-Pipeline 500 unterteilen. Die Geometrie-Shading-Stufe 540 überträgt geometrische Stammfunktionen an die Ansichtsbereich-SCC-Stufe 550.
  • In einem Ausführungsbeispiel kann die Grafikverarbeitungs-Pipeline 500 innerhalb eines Streaming-Multiprozessors arbeiten, und die Vertex-Shading-Stufe 520, die Stammfunktion-Zusammensetzungsstufe 530, die Geometrie-Shading-Stufe 540, die Fragment-Shading-Stufe 570 und/oder damit verbundene Hardware/Software können sequenziell Verarbeitungsoperationen durchführen. Sobald die sequentiellen Verarbeitungsoperationen abgeschlossen sind, kann in einem Ausführungsbeispiel die Ansichtsbereich-SCC-Stufe 550 die Daten nutzen. In einem Ausführungsbeispiel können Stammfunktionsdaten, die von einer oder mehreren Stufen in der Grafikverarbeitungs-Pipeline 500 verarbeitet werden, in einen Cache (z.B. den L1-Cache, den Vertex-Cache, usw.) geschrieben werden. In diesem Fall kann in einem Ausführungsbeispiel die Ansichtsbereich-SCC-Stufe 550 auf die Daten in dem Cache zugreifen. In einem Ausführungsbeispiel sind die Ansichtsbereich-SCC-Stufe 550 und die Rasterungsstufe 560 als Schaltungsanordnung mit fester Funktion implementiert.
  • Die Ansichtsbereich-SCC-Stufe 550 führt eine Ansichtsbereich-Skalierung, ein Culling und ein Clipping der geometrischen Stammfunktionen durch. Jede Oberfläche, auf die gerendert wird, ist einer abstrakten Kameraposition zugeordnet. Die Kameraposition repräsentiert eine Position eines Betrachters, der die Szene betrachtet, und definiert einen Betrachtungskegelstumpf, der die Objekte der Szene umschließt. Der Betrachtungskegelstumpf kann eine Betrachtungsebene, eine hintere Ebene und vier Clipping-Ebenen beinhalten. Jede geometrische Stammfunktion, die sich vollständig außerhalb des Betrachtungskegelstumpfs befindet, kann gecullt (d.h. verworfen) werden, weil die geometrische Stammfunktion nicht zu der endgültigen gerenderten Szene beitragen wird. Jede geometrische Stammfunktion, die sich teilweise innerhalb des Betrachtungskegelstumpfs und teilweise außerhalb des Betrachtungskegelstumpfs befindet, kann abgeschnitten werden (d.h. in eine neue geometrische Stammfunktion umgewandelt werden, die innerhalb des Betrachtungskegelstumpfs eingeschlossen ist). Darüber hinaus können geometrische Stammfunktion jeweils auf der Grundlage einer Tiefe des Betrachtungskegelstumpfs skaliert werden. Alle potenziell sichtbaren geometrischen Stammfunktionen werden dann an die Rasterungsstufe 560 übertragen.
  • Die Rasterungsstufe 560 wandelt die geometrischen 3D-Stammfunktionen in 2D-Fragmente (die z.B. zur Anzeige genutzt werden können, usw.) um. Die Rasterungsstufe 560 kann dazu konfiguriert sein, die Vertices der geometrischen Stammfunktionen zu nutzen, um einen Satz von Ebenengleichungen aufzustellen, aus welchen verschiedene Attribute interpoliert werden können. Die Rasterungsstufe 560 kann auch eine Abdeckungsmaske für eine Vielzahl von Pixeln berechnen, die angibt, ob eine oder mehrere Musterorte für den Pixel die geometrische Stammfunktion unterbrechen. In einem Ausführungsbeispiel kann darüber hinaus ein z-Test durchgeführt werden, um zu ermitteln, ob die geometrische Stammfunktion durch andere geometrische Stammfunktionen, die bereits gerastert wurden, verdeckt wird. Die Rasterungsstufe 560 erzeugt Fragmentdaten (d.h. interpolierte Vertex-Attribute, die einem bestimmten Musterort für jedes abgedeckte Pixel zugeordnet sind), die an die Fragment-Shading-Stufe 570 übertragen werden.
  • Die Fragment-Shading-Stufe 570 verarbeitet Fragmentdaten durch Durchführen einer Reihe von Operationen (z.B. einen Fragment-Shader oder ein Programm) an jedem der Fragmente. Die Fragment-Shading-Stufe 570 kann Pixeldaten (d.h. Farbwerte) für das Fragment erzeugen, z.B. durch Durchführen von Beleuchtungsoperationen oder Abtasten von Textur-Maps unter Verwendung interpolierter Texturkoordinaten für das Fragment. Die Fragment-Shading-Stufe 570 erzeugt Pixeldaten, die an die Rasteroperationsstufe 580 übertragen werden.
  • Die Rasteroperationsstufe 580 kann verschiedene Operationen an den Pixeldaten durchführen, wie z.B. Alpha-Tests, Schablonentests und ein Mischen der Pixeldaten mit anderen Pixeldaten, die anderen Fragmenten entsprechen, die dem Pixel zugeordnet sind. Wenn die Rasteroperationsstufe 580 das Verarbeiten der Pixeldaten (d.h. der Ausgabedaten 502) abgeschlossen hat, können die Pixeldaten in ein Renderziel, wie beispielsweise ein Frame-Puffer, ein Farbpuffer oder dergleichen, geschrieben werden.
  • Es versteht sich, dass zusätzlich zu oder anstelle von einer oder mehrerer der vorstehend beschriebenen Stufen eine oder mehrere zusätzliche Stufen in der Grafikverarbeitungs-Pipeline 500 enthalten sein können. Verschiedene Implementierungen der abstrakten Grafikverarbeitungs-Pipeline können verschiedene Stufen implementieren. Ferner können in manchen Ausführungsbeispielen (z. B. der Geometrie-Shading-Stufe 540) eine oder mehrere der vorstehend beschriebenen Stufen aus der Grafikverarbeitungs-Pipeline ausgeschlossen sein. Andere Arten von Grafikverarbeitungs-Pipelines werden als im Rahmen der Offenbarung liegend betrachtet. Ferner kann jede der Stufen der Grafikverarbeitungs-Pipeline 500 durch eine oder mehrere dedizierte Hardwareeinheiten innerhalb eines Grafikprozessors wie beispielsweise der PPU 200 implementiert sein. Andere Stufen der Grafikverarbeitungs-Pipeline 500 können durch programmierbare Hardwareeinheiten wie beispielsweise den SM 340 der PPU 200 implementiert sein.
  • Die Grafikverarbeitungs-Pipeline 500 kann über eine Anwendung, die von einem Host-Prozessor, wie beispielsweise einer CPU, ausgeführt wird, implementiert sein. In einem Ausführungsbeispiel kann ein Gerätetreiber eine Anwendungsprogrammierschnittstelle (API) implementieren, die verschiedene Funktionen definiert, die von einer Anwendung verwendet werden können, um grafische Daten zur Anzeige zu erzeugen. Der Gerätetreiber ist ein Softwareprogramm, das eine Vielzahl von Anweisungen beinhaltet, die den Betriebsablauf der PPU 200 steuern. Die API stellt eine Abstraktion für einen Programmierer bereit, die es einem Programmierer ermöglicht, spezielle Grafikhardware, wie beispielsweise die PPU 200, zu verwenden, um die grafischen Daten zu erzeugen, ohne dass der Programmierer den spezifischen Befehlssatz für die PPU 200 verwenden muss. Die Anwendung kann einen API-Aufruf beinhalten, der an den Gerätetreiber für die PPU 200 weitergeleitet wird. Der Gerätetreiber interpretiert den API-Aufruf und führt verschiedene Operationen durch, um auf den API-Aufruf zu reagieren. In einigen Fällen kann der Gerätetreiber durch Ausführen von Anweisungen auf der CPU Operationen durchführen. In anderen Fällen kann der Gerätetreiber zumindest teilweise Operationen durchführen, indem er Operationen auf der PPU 200 über eine Eingabe-/Ausgabe-Schnittstelle zwischen der CPU und der PPU 200 startet. In einem Ausführungsbeispiel ist der Gerätetreiber dazu konfiguriert, die Grafikverarbeitungs-Pipeline 500 unter Verwendung der Hardware der PPU 200 zu implementieren.
  • Innerhalb der PPU 200 können verschiedene Programme ausgeführt werden, um die verschiedenen Stufen der Grafikverarbeitungs-Pipeline 500 zu implementieren. Beispielsweise kann der Gerätetreiber einen Kernel auf der PPU 200 starten, um die Vertex-Shading-Stufe 520 auf einem SM 340 (oder mehreren SMs 340) durchzuführen. Der Gerätetreiber (oder der initiale Kernel, der von der PPU 300 ausgeführt wird) kann auch andere Kernel auf der PPU 300 starten, um andere Stufen der Grafikverarbeitungs-Pipeline 500 durchzuführen, wie z.B. die Geometrie-Shading-Stufe 540 und die Fragment-Shading-Stufe 570. Darüber hinaus können einige der Stufen der Grafikverarbeitungs-Pipeline 500 auf fester Einheitshardware wie beispielsweise einem Rasterisierer oder einem innerhalb der PPU 300 implementierten Datenassembler implementiert sein. Es versteht sich, dass die Ergebnisse eines Kernels von einer oder mehreren dazwischenliegenden Hardwareeinheiten mit fester Funktion verarbeitet werden können, bevor sie von einem nachfolgenden Kernel auf einem SM 340 verarbeitet werden.
  • Maschinelles Lernen
  • Tiefe neuronale Netzwerke bzw. Deep Neural Networks (DNNs), die auf Prozessoren wie beispielsweise der PPU 200 entwickelt wurden, wurden für verschiedene Anwendungsfälle eingesetzt, von selbstfahrenden Autos bis hin zu schnellerer Medikamentenentwicklung, von der automatischen Bildüberschrift in Online-Bilddatenbanken bis hin zur intelligenten Echtzeit-Sprachübersetzung in Video-Chat-Anwendungen. Deep Learning ist eine Technik, die den neuronalen Lernprozess des menschlichen Gehirns modelliert, kontinuierlich lernt, kontinuierlich intelligenter wird und im Laufe der Zeit schnellere und genauere Ergebnisse liefert. Ein Kind wird zunächst von einem Erwachsenen gelehrt, verschiedene Formen richtig zu identifizieren und zu klassifizieren, um schließlich ohne Coaching Formen identifizieren zu können. Ebenso muss ein tief lernendes oder neuronal lernendes System in der Objekterkennung und -klassifizierung trainiert werden, damit es intelligenter und effizienter grundlegende Objekte, verdeckte Objekte usw. identifizieren und gleichzeitig den Objekten Kontext zuweisen kann.
  • Auf der einfachsten Ebene betrachten Neuronen im menschlichen Gehirn verschiedene Inputs, die empfangen werden, werden jedem dieser Inputs Bedeutungsgrade zugewiesen, und wird eine Ausgabe an andere Neuronen weitergeleitet, um darauf zu reagieren. Ein künstliches Neuron oder Perzeptron ist das grundlegendste Modell eines neuronalen Netzwerks. In einem Beispiel kann ein Perzeptron eine oder mehrere Inputs bzw. Eingaben empfangen, die verschiedene Merkmale eines Objekts darstellen, zu deren Erkennung und Klassifizierung das Perzeptron trainiert ist, und wird jedem dieser Merkmale ein bestimmtes Gewicht zugewiesen, das auf der Bedeutung dieses Merkmals für die Definition der Form eines Objekts basiert.
  • Ein DNN-Modell (Deep Neural Network) beinhaltet mehrere Schichten vieler verbundener Knoten (z.B. Wahrnehmungen, Boltzmann-Maschinen, radiale Basisfunktionen, Faltungsschichten, usw.), die mit enormen Mengen an Eingangsdaten trainiert werden können, um komplexe Probleme schnell und mit hoher Genauigkeit zu lösen. In einem Beispiel zerlegt eine erste Schicht des DNN-Modells ein zugeführtes Bild eines Autos in verschiedene Abschnitte und sucht nach Grundmustern wie beispielsweise Linien und Winkeln. Die zweite Schicht setzt die Linien zusammen, um nach Mustern höherer Ebene wie beispielsweise Rädern, Windschutzscheiben und Spiegeln zu suchen. Die nächste Schicht identifiziert den Fahrzeugtyp und die letzten paar Schichten erzeugen ein Label für das zugeführte Bild, das das Modell einer bestimmten Automobilmarke identifiziert.
  • Sobald das DNN trainiert ist, kann das DNN eingesetzt und dazu verwendet werden, Objekte oder Muster in einem Prozess zu identifizieren und zu klassifizieren, der als Inferenz bzw. Folgerung bezeichnet wird. Beispiele für Folgerungen (der Prozess, durch den ein DNN nützliche Informationen aus einem gegebenen Input extrahiert) beinhalten das Identifizieren von handschriftlichen Zahlen bei Schecks, die in Geldautomaten hinterlegt sind, das Identifizieren von Bildern von Freunden auf Fotos, das Liefern von Filmempfehlungen an über fünfzig Millionen Benutzer, das Identifizieren und Klassifizieren verschiedener Arten von Autos, Fußgängern und Straßengefahren in fahrerlosen Autos, oder das Übersetzen menschlicher Sprache in Echtzeit.
  • Während des Trainings fließen die Daten in einer Vorwärtspropagierungsphase durch das DNN, bis eine Vorhersage erzeugt wird, die eine dem Input entsprechende Bezeichnung anzeigt. Falls das neuronale Netzwerk den Input nicht korrekt bezeichnet, dann werden Fehler zwischen der korrekten Bezeichnung und der vorhergesagten Bezeichnung analysiert und die Gewichte während einer Rückwärtsausbreitungsphase für jedes Merkmal angepasst, bis das DNN den Input und andere Eingaben in einem Trainingsdatensatz korrekt bezeichnet. Das Training komplexer neuronaler Netze erfordert enorme Mengen an paralleler Rechenleistung, einschließlich Gleitkomma-Multiplikationen und Additionen, die von der PPU 200 unterstützt werden. Die Inferenzierung ist weniger rechenintensiv als das Training, da es sich um einen latenzsensitiven Prozess handelt, bei dem ein trainiertes neuronales Netzwerk auf neue Inputs angewendet wird, die es bisher noch nicht gesehen hat, um Bilder zu klassifizieren, Sprache zu übersetzen und allgemein neue Informationen abzuleiten.
  • Neuronale Netze sind stark auf Matrix-Mathematik-Operationen angewiesen, und komplexe mehrschichtige Netzwerke erfordern enorme Mengen an Gleitkommaleistung und Bandbreite für sowohl Effizienz als auch Geschwindigkeit. Mit Tausenden von Rechenkernen, optimiert für Matrix-Mathematik-Operationen, und Hunderte von TFLOPS an Leistung liefernd ist die PPU 200 eine Rechenplattform, die in der Lage ist, die für auf tiefen neuronalen Netzwerken basierende künstliche Intelligenz und Anwendungen maschinellen Lernens erforderliche Leistung zu liefern.
  • Hochauflösende Bildsynthese und semantische Manipulation mit bedingten GANs
  • In einem Ausführungsbeispiel können hochauflösende fotorealistische Bilder aus semantischen Label-Maps unter Verwendung bedingter adversarialer Netzwerke (Conditional GANs) synthetisiert werden. Conditional bzw. bedingte GANs haben eine Vielzahl von Anwendungen ermöglicht, aber die Ergebnisse sind oft auf niedrige Auflösungen beschränkt und immer noch weit davon entfernt, realistisch zu sein. In einem Ausführungsbeispiel können hochauflösende, optisch ansprechende Ergebnisse mit einem neuartigen adversarialen Ziel sowie neuen Multimaßstab-Generator- und Diskriminator-Architekturen erzeugt werden. In einem Ausführungsbeispiel kann eine Bildsynthese-Pipeline auf eine interaktive visuelle Manipulation mit zwei zusätzlichen Merkmalen erweitert werden, einschließlich (1) der Integration von Segmentierungsinformationen auf Instanz-Ebene, welches Objektmanipulationen wie beispielsweise ein Entfernen/Hinzufügen von Objekten und ein Ändern der Objektkategorie ermöglichen, und (2) eines Verfahrens zum Erzeugen verschiedener Ergebnisse bei gegebener gleicher Input-Label-Map, welches es dem Benutzer ermöglicht, das Aussehen jedes Objekts interaktiv zu bearbeiten. Diese Implementierung übertrifft bestehende Methoden deutlich und verbessert sowohl die Qualität als auch die Auflösung der tiefen Bildsynthese.
  • Einführung
  • Ein Rendern fotorealistischer Bilder unter Verwendung von Standardgrafiktechniken ist involviert, da Geometrie, Materialien und Lichttransport explizit simuliert werden müssen. Obwohl bestehende Grafikalgorithmen für diese Aufgabe hervorragend geeignet sind, ist der Aufbau und die Bearbeitung virtueller Umgebungen teuer und zeitaufwändig. Das liegt daran, dass jeder Teil der Welt explizit modelliert werden muss. Wäre es machbar, fotorealistische Bilder unter Verwendung eines aus Daten gelernten Modells zu rendern, könnte der Prozess des Renderns von Grafik in ein Problem des Lernens eines Modells und der Inferenz umgewandelt werden. Dann könnte der Prozess der Erschaffens neuer virtueller Welten vereinfacht werden, indem Modelle an neuen Datensätzen trainiert werden. Es könnte sogar einfacher werden, Umgebungen anzupassen, indem es Benutzern ermöglicht wird, einfach semantische Informationen anzugeben, anstatt Geometrien, Materialien oder Beleuchtung zu modellieren.
  • In einem Ausführungsbeispiel kann ein neuer Ansatz hochauflösende Bilder aus semantischen Label-Maps erzeugen. Dieses Verfahren hat einen breiten Anwendungsbereich. In einem Ausführungsbeispiel kann es dazu verwendet werden, synthetische Trainingsdaten zum Trainieren visueller Erkennungsnetzwerke zu erzeugen, da es viel einfacher ist, semantische Labels für gewünschte Szenarien zu erzeugen, als Trainingsbilder zu erzeugen. Unter Verwendung der semantischen Segmentierung können Bilder in eine semantische Label-Domäne transformiert werden, können die Objekte in der Label-Domäne bearbeitet werden, und können dann die Objekte wieder in die Bilddomäne zurück transformiert werden. Daher können neue Werkzeuge zur übergeordneten Bildbearbeitung bereitgestellt werden, z.B. ein Hinzufügen von Objekten zu Bildern oder ein Ändern des Aussehens bestehender Objekte.
  • In einem Ausführungsbeispiel können zwei Problembereiche angesprochen werden: (1) die Schwierigkeit, hochauflösende Bilder mit bedingten GANs zu erzeugen, und (2) das Fehlen von Details und realistischen Texturen in vorangehenden hochauflösenden Ergebnissen. Mit einem neuen robusten, adversarialen Lernziel sowie neuen multi-skaligen Generator- und Diskriminator-Architekturen können fotorealistische Bilder in hoher Auflösung (z.B. einer Auflösung von 2048 X 1024, usw.) synthetisiert und im Vergleich zu früheren Methoden optisch ansprechendere Ergebnisse erzielt werden. Ergebnisse werden zunächst nur mit adversarialem Training erzielt, ohne dass man sich handgemachte Verluste oder vortrainierte Netzwerke verlässt. Dann wird aufgezeigt, dass ein Hinzufügen von Wahrnehmungsverlusten aus vortrainierten Netzwerken unter Umständen die Ergebnisse leicht verbessern kann, wenn ein vortrainiertes Netzwerk verfügbar ist. Beide Ergebnisse übertreffen bisherige Arbeiten in Bezug auf Bildqualität deutlich.
  • Um interaktive semantische Manipulationen zu unterstützen, wird darüber hinaus das Verfahren in einem Ausführungsbeispiel mit zwei Erweiterungen verbessert: Erstens werden Informationen auf Instanz-Ebene genutzt, um die Qualität erzeugter Bilder zu verbessern und flexible Objektmanipulationen wie beispielsweise ein Entfernen/Einfügen von Objekten und ein Ändern von Objekttypen zu ermöglichen. Zweitens wird ein Verfahren vorgeschlagen, um verschiedene Ergebnisse mit demselben Input-Label zu erzeugen, so dass ein Benutzer das Aussehen desselben Objekts interaktiv bearbeiten kann. Ein Vergleichen mit modernsten visuellen Synthesesystemen zeigt, dass dieses Verfahren diese Ansätze sowohl in quantitativen Bewertungen als auch in Studien zur menschlichen Wahrnehmung übertrifft. Darüber hinaus wird eine Ablationsstudie bezüglich des Designs des vorliegenden Netzwerks und der Bedeutung von Segmentierungsinformationen auf Instanz-Ebene durchgeführt.
  • Generative adversariale Netzwerke
  • In einem Ausführungsbeispiel zielen generative adversariale Netzwerte (GANs) darauf ab, den natürlichen Bildverbund zu modellieren, indem sie die erzeugten Muster zwingen, nicht von natürlichen Bildern unterscheidbar zu sein. GANs ermöglichen eine breite Vielzahl von Anwendungen wie beispielsweise Bilderzeugung, Repräsentationslernen und Bildmanipulation. Es wurden verschiedene grobe bis feine Schemata vorgeschlagen, um größere Bilder (z.B. 256 X 256) in einem bedingungslosen Umfeld zu synthetisieren. In einem Ausführungsbeispiel werden eine grobe bis feine Zielfunktion sowie neue multi-skalige Generator- und Diskriminator-Architekturen vorgeschlagen, die für die bedingte Bilderzeugung bei einer viel höheren Auflösung geeignet sind.
  • Bildsynthese auf Instanz-Ebene
  • In einem Ausführungsbeispiel schlagen wir ein bedingtes kontradiktorisches Framework zum Erzeugen hochauflösender fotorealistischer Bilder aus semantischen Label-Maps vor. Zunächst gehen wir kurz auf unser Basismodell bzw. die Baseline pix2pix ein. Dann beschreiben wir, wie wir den Fotorealismus und die Auflösung der synthetisierten Ergebnisse mit unserer verbesserten Zielfunktion und unserem Netzwerkdesign erhöhen. Als nächstes zeigen wir, wie wir die zusätzlichen semantischen Informationen auf Instanz-Ebene nutzen, um die Bildqualität weiter zu verbessern. Schließlich werden wir ein Merkmalseinbettungsschema auf Instanz-Ebene einführen, um besser mit der multimodalen Natur der Bildsynthese umzugehen, welches eine interaktive Objektbearbeitung ermöglicht.
  • Das pix2pix Basismodell
  • In einem Ausführungsbeispiel beinhaltet das pix2pix-Framework ein bedingtes GAN-Framework für die Übersetzung von Bild zu Bild. Es besteht aus einem Generator und einem Diskriminator. In einem Ausführungsbeispiel besteht das Ziel des Generators darin, semantische Label-Maps in realistisch aussehende Bilder zu übersetzen, während das Ziel des Diskriminators darin besteht, reale Bilder von den übersetzten Bildern zu unterscheiden. In einem Ausführungsbeispiel arbeitet das Framework in einer überwachten Umgebung. Mit anderen Worten ist der Trainingsdatensatz als ein Satz von Paaren entsprechender Bilder {(si,xi)} gegeben, wobei si eine semantische Label-Map und xi ein entsprechendes natürliches Foto ist. In einem Ausführungsbeispiel zielen bedingte GANs darauf ab, die bedingte Verteilung realer Bilder anhand der eingegebenen semantischen Label-Map Pr(S|X) zu modellieren, worin S der Raum der semantischen Label-Maps und X der Raum der realen Bilder ist, über ein Lösen von: max G min D L G A N ( G ,   D )
    Figure DE102018128592A1_0001
    worin die Zielfunktion L G A N ( G ,   D )
    Figure DE102018128592A1_0002
    gegeben ist durch: E ( s , x ) [ log D ( s , x ) ] + E s [ log ( 1 D ( s , G ( s ) ) ]
    Figure DE102018128592A1_0003
  • In einem Ausführungsbeispiel, in pix2pix, ist der Generator als ein U-Net Auto-Encoder implementiert, und ist der Diskriminator als ein patchbasierter Diskriminator implementiert. Der Input in den Diskriminator ist die kanalweise Verkettung der semantischen Label-Map und des entsprechenden Bilds. Die Auflösung der erzeugten Bilder beträgt bis zu 256 X 256. In einem Ausführungsbeispiel kann das pix2pix-Framework wie nachfolgend beschrieben verbessert werden.
  • Verbesserung von Fotorealismus und Auflösung
  • In einem Ausführungsbeispiel kann das pix2pix-Framework durch Verwenden einer neuen Generatorarchitektur, einer neuen Diskriminator-Architektur und einer neuen Lernzielfunktion verbessert werden.
  • Grob-/Fein-Generator
  • In einem Ausführungsbeispiel zerlegen wir den Generator in zwei Teilnetze: G0 und G1. Wir bezeichnen G0 als das globale Generatornetzwerk und G1 als das lokale Verstärker- bzw. Enhancer-Netzwerk. Der Generator ist dann durch das Tupel G = {G0; G1} gegeben.
  • 6 veranschaulicht eine beispielhafte Netzwerkarchitektur eines Generators 600 gemäß einem Ausführungsbeispiel. In einem Ausführungsbeispiel trainieren wir zunächst ein Restnetzwerk (G0) 602 an Bildern mit geringerer Auflösung. Dann wird dieses Netzwerk dazu verwendet, unser endgültiges Netzwerk zu initialisieren, das auf hochauflösende Bilder trainiert ist (G1) 604A-B. Insbesondere ist der Input in die Residualblöcke in G1 604A-B die elementweise Summe der Feature-Map aus G1 604A-B und der letzten Feature-Map aus (Go) 602.
  • In einem Ausführungsbeispiel arbeitet das globale Generatornetzwerk mit einer Auflösung von 1024 X 512, und gibt das lokale Verstärkernetzwerk ein Bild mit einer Auflösung aus, die viermal größer ist als die Ausgabe des vorangehenden (zweimal größer entlang jeder Bilddimension). In einem Ausführungsbeispiel könnte zum Synthetisieren von Bildern mit noch höherer Auflösung zusätzliche lokale Verstärkernetzwerke genutzt werden. In einem Ausführungsbeispiel ist die Ausgangsbildauflösung des Generators G = {G1; G0} 2048 X 1024, und ist die Ausgangsbildauflösung von G = {G2; G1; G0} 4096 X 2048.
  • In einem Ausführungsbeispiel kann das globale Generatornetzwerk auf einer Netzwerkarchitektur basieren, die Residualblöcke bzw. Restblöcke nutzt. In einem Ausführungsbeispiel besteht die Architektur aus drei Komponenten: einem Faltungs-Frontend G0 (F), einem Satz von Restblöcken G0 (R) und einem transponierten Faltungs-Backend G0 (B). In einem Ausführungsbeispiel wird eine semantische Label-Map der Auflösung 1024 X 512 sequenziell durch die drei Komponenten geleitet, um ein Bild der Auflösung 1024 X 512 auszugeben.
  • In einem Ausführungsbeispiel besteht das lokale Enhancer-Netzwerk ebenfalls aus drei Komponenten: einem Faltungs-Frontend G1 (F), einem Satz von Restblöcken G1 (R) und einem transponierten Faltungs-Backend G1 (B). In einem Ausführungsbeispiel ist die Auflösung der eingegebenen semantischen Label-Map zu G1 2048 X 1024. Im Gegensatz zu dem globalen Generatornetzwerk ist der Input in den Restblock G1 (R) die elementweise Summe von zwei Feature-Maps: die Ausgangs-Feature-Map von G1 (F) und die letzte Feature-Map des Backends des globalen Generatornetzwerks G0 (B). Dies hilft bei der Integration der globalen Informationen von G0 bis G1. In einem Ausführungsbeispiel ist dann, wenn ein weiteres lokales Verstärkernetzwerk G2 zum Synthetisieren von Bildern mit einer höheren Auflösung verwendet wird, der Input in den Restblock G2 (R) die elementweise Summe der Ausgangs-Feature-Map von G2 (F) und der letzten Feature-Map von G1 (B).
  • In einem Ausführungsbeispiel trainieren wir während des Trainings zuerst den globalen Generator und dann den lokalen Verstärker in der Reihenfolge ihrer Auflösungen. Gemeinsam stimmen wir dann alle Netzwerke ab. Wir verwenden dieses Generatordesign, um globale und lokale Informationen für die Bildsyntheseaufgabe effektiv zu aggregieren.
  • Multi-skalige Diskriminatoren
  • Die hochauflösende Bildsynthese stellt eine Herausforderung an das GAN-Diskriminator-Design dar. In einem Ausführungsbeispiel, muss der Diskriminator zur Unterscheidung hochauflösender realer und synthetischer Bilder ein großes Empfangsfeld aufweisen. Dies würde entweder ein tiefes Netzwerk oder große Faltungskerne erfordern. Da beide Optionen zu einer erhöhten Netzwerkkapazität führen, würde die Überausstattung immer mehr zu einem Problem werden. Außerdem erfordern beide Optionen einen größeren Speicherbedarf für das Training, welches bereits eine knappe Ressource für hochauflösende Bilderzeugung ist.
  • Um das Problem anzugehen, schlagen wir in einem Ausführungsbeispiel vor, mehrstufige bzw. multi-skalige Diskriminatoren einzusetzen. In einem Ausführungsbeispiel verwenden wir drei Diskriminatoren, die eine identische Netzwerkstruktur haben (dreischichtiges Faltungsnetzwerk), aber mit unterschiedlichen Bildgrößen bzw. Bildskalen arbeiten. Wir werden die Diskriminatoren als D1, D2 und D3 bezeichnen. In einem Ausführungsbeispiel rechnen wir die realen und synthetisierten hochauflösenden Bilder um einen Faktor zwei und vier herunter, um eine dreiskalige Bildpyramide zu erzeugen. Die Diskriminatoren D1, D2 und D3 werden dann dazu trainiert, reale und synthetisierte Bilder bei den drei verschiedenen Skalen bzw. Maßstäben zu unterscheiden. Obwohl die Diskriminatoren eine identische Architektur haben, hat in einem Ausführungsbeispiel diejenige Architektur, die auf dem gröbsten Maßstab arbeitet, das größte Empfangsfeld. Sie hat eine globalere Sicht auf das Bild und kann den Generator dazu anleiten, global konsistente Bilder zu erzeugen. Andererseits ist der Diskriminator, der auf dem feinsten Maßstab arbeitet, darauf spezialisiert, den Generator anzuleiten, feinere Details zu erzeugen. Dies erleichtert auch das Training des Grob-zu-Fein-Generators, da ein Erweitern desselben auf eine höhere Auflösung nur das Hinzufügen eines zusätzlichen Diskriminators auf der feinsten Ebene erfordert, anstatt von Grund auf neu zu trainieren. Bei den Diskriminatoren wird das Lernproblem in (1) dann zu einem Multi-Task-Lernproblem von: max G min D 1 , D 2 , D 3 k = 1,2,3 L G A N ( G ,   D k )
    Figure DE102018128592A1_0004
  • In einem Ausführungsbeispiel kann das Design auf mehrere Diskriminatoren bei verschiedenen Bildgrößen bzw. Bildskalen zum Modellieren hochauflösender Bilder erweitert werden.
  • Verbesserter adversarialer Verlust
  • In einem Ausführungsbeispiel verbessern wir den GAN-Verlust in (2) für die Aufgabe der hochauflösenden Bildsynthese durch Integrieren eines GAN-Diskriminator-Merkmalsübereinstimmungsverlusts. In einem Ausführungsbeispiel verwenden wir den GAN-Diskriminator als einen Merkmalsextraktor und lernen, die aus dem realen Bild und dem synthetisierten Bild extrahierten Zwischenmerkmalsrepräsentationen in Übereinstimmung zu bringen. Zur Vereinfachung der Darstellung bezeichnen wir den Merkmalsextraktor der i-ten Schicht des Diskriminators Dk als Dk (i) (vom Input bis zur i-ten Schicht von Dk). Der Merkmalsübereinstimmungsverlust L F ( G ,   D k )
    Figure DE102018128592A1_0005
    ist dann gegeben durch: L F = i { 1 T 1 } E ( s , x ) [ D k ( i ) ( s , x ) D k ( i ) ( s , G ( s ) ) 1 1 ]
    Figure DE102018128592A1_0006
    worin T die Anzahl der Schichten in dem Diskriminator ist. In einem Ausführungsbeispiel bezieht sich unser GAN-Diskriminator-Merkmalsübereinstimmungsverlust auf den Wahrnehmungsverlust (oder VGG-Merkmalsübereinstimmungsverlust), der für die Bild-Superauflösung und die Stilübertragung als nützlich erachtet wird.
  • Wenn der GAN-Verlust und der GAN-Diskriminator-Merkmalsübereinstimmungsverlust kombiniert wird, ist das Lernproblem gegeben durch max G min D 1 , D 2 , D 3 k = 1,2,3 L G A N ( G ,   D k ) + λ L F ( G ,   D k )
    Figure DE102018128592A1_0007
    worin λ ein Gewichtungsparameter ist. In einem Ausführungsbeispiel kann λ > 1 die Leistung verbessern. In einem Ausführungsbeispiel setzen wir es in allen unseren Experimenten auf zehn.
  • Verwenden der Instanz-Map
  • In einem Ausführungsbeispiel ist eine semantische Label-Map ein Bild, bei dem der Pixelwert die Objektklasse repräsentiert, zu der der Pixel gehört. In einem Ausführungsbeispiel unterscheidet diese Map keine Objekte derselben Klasse. Andererseits enthält eine semantische Label-Map auf Instanz-Ebene für jedes einzelne Objekt eine eindeutige Objekt-ID. Bestehende Bildsyntheseverfahren nutzen nur semantische Label-Maps. Im Folgenden schlagen wir zwei Ansätze vor, Instanz-Maps zu nutzen, wenn sie verfügbar sind.
  • Instanzgrenzen-Map
  • In einem Ausführungsbeispiel argumentieren wir, dass die wichtigste Information, die die Instanz-Map liefert und die in der semantischen Label-Map nicht verfügbar ist, die Objektgrenze ist. In einem Ausführungsbeispiel kann dann, wenn mehrere Objekte gleicher Klasse nebeneinander liegen, allein der Blick auf die semantische Label-Map diese nicht unterscheiden. Dies gilt insbesondere für eine Straßenszene, da viele geparkte Autos oder Fußgänger oft nebeneinander stehen. Wenn jedoch die Instanz-Map gegeben ist, wird das Auseinanderhalten dieser Objekte zu einer einfacheren Aufgabe.
  • Um diese Informationen zu extrahieren, berechnen wir daher in einem Ausführungsbeispiel zunächst die Instanzgrenzen-Map. In einem Ausführungsbeispiel ist ein Pixel in der Instanzgrenzen-Map eins, falls sich seine Objekt-ID von irgendeinem seiner vier Nachbarn unterscheidet, ansonsten 0. In einem Ausführungsbeispiel wird dann die Instanzgrenzen-Map mit der eingegebenen semantischen Label-Map verkettet (als One Hot-Vektoren kodiert) und in das Generatornetzwerk eingespeist. Ebenso ist der Input in den Diskriminator die kanalweise Verkettung von Instanzgrenzen-Map, semantischer Label-Map und real/synthetisiertem Bild.
  • Diskriminator auf Instanz-Ebene
  • In einem Ausführungsbeispiel sind wir mit den Instanz-Maps in der Lage, spezielle GAN-Diskriminatoren auf einzelne Instanzen in dem Bild anzuwenden, um die Leistung der Bildsynthese weiter zu verbessern. Insbesondere schneiden wir Bildbereiche sowohl in realen als auch in synthetischen Bildern auf der Grundlage der Instanz-Maps zu. Die zugeschnittenen Bilder der Instanzen werden dann basierend auf ihren semantischen Klassen in verschiedene Gruppen eingeteilt. Klassenspezifische GAN-Diskriminatoren werden dann dazu verwendet, reale und synthetisierte Bildbereiche innerhalb derselben Gruppe zu unterscheiden. In einem Ausführungsbeispiel wenden wir den klassenspezifischen Diskriminator auf Auto-Instanzen an, und zwar nur dann, wenn der Begrenzungsrahmen der Auto-Instanz größer als 128 X 128 ist. Diese Technik hilft dem Generator, Autos mit semantisch einheitlicheren Erscheinungsformen zu synthetisieren.
  • Verwendung der Instanzmerkmal-Map
  • In einem Ausführungsbeispiel ist die Bildsynthese aus semantischen Label-Maps ein multimodales Mapping-Problem. Ein Bildsynthesealgorithmus sollte in der Lage sein, verschiedene realistische Bilder unter Verwendung derselben semantischen Label-Map zu erzeugen.
  • In einem Ausführungsbeispiel schlagen wir vor, dem Eingang zum Generatornetzwerk zusätzliche Merkmalskanäle hinzuzufügen, um die Fähigkeit zu ermöglichen, verschiedene Bilder zu erzeugen und die Steuerung auf Instanz-Ebene zu ermöglichen. Wir zeigen, dass wir durch Manipulieren dieser Merkmale mehr Kontrolle über den Bildsyntheseprozess haben können. Wir stellen fest, dass die Merkmale, da es sich um kontinuierliche Größen handelt, in der Lage sind, unendlich viele Bilder zu erzeugen.
  • In einem Ausführungsbeispiel trainieren wir ein Encoder-Netzwerk dazu, die Eingangsbilder einzubetten, um die benötigten Merkmale zu generieren. Wir verwenden eine Encoder-Architektur, die unserem Generator ähnlich ist. Um sicherzustellen, dass die Merkmale innerhalb jeder Instanz einheitlich sind, fügen wir dem Ausgang des Encoders eine instanzweise Durchschnitts-Pooling-Schicht hinzu, um das Durchschnittsmerkmal für die Instanz zu berechnen. Das Durchschnittsmerkmal wird dann an alle Pixelpositionen der Instanz übertragen.
  • 7 veranschaulicht eine beispielhaft trainierte Encoder-Architektur 700 gemäß einem beispielhaften Ausführungsbeispiel. In einem Ausführungsbeispiel, bei dem wir instanzweise Feature-Maps 702 zusätzlich zu Label-Maps 704 zum Erzeugen von Bildern verwenden, führen wir zunächst ein Encoder-Netzwerk 706 auf dem Originalbild 708 aus und führen dann ein instanzweises Durchschnitts-Pooling 710 durch, so dass jede Instanz die gleichen Merkmale teilt. Diese Feature-Map wird dann mit der Label-Map verkettet und in das Bilderzeugungsnetzwerk 712 eingespeist. In einem Ausführungsbeispiel werden das Bilderzeugungsnetzwerk 712 und das Encoder-Netzwerk 706 gemeinsam durchgehend trainiert, um das endgültige Bild auszugeben.
  • In einem Ausführungsbeispiel wird der Encoder mit den Generatoren und Diskriminatoren durchgehend zur Lösung von (5) trainiert. In einem Ausführungsbeispiel führen wir den Encoder, nachdem er trainiert wurde, auf allen Instanzen in den Trainingsbildern aus und zeichnen die erhaltenen Merkmale auf. In einem Ausführungsbeispiel führen wir dann für jeden semantischen Labeltyp ein K-Mittelwert-Clusterbildung auf diesen Merkmalen durch. Jeder Cluster kodiert somit die Merkmale für einen bestimmten Stil, in einem Ausführungsbeispiel Teer oder Kopfsteinpflaster für eine Straße. In einem Ausführungsbeispiel wählen wir zur Inferenzzeit zufällig eines der Clusterzentren aus und verwenden es als die kodierten Merkmale. Diese Funktionen werden mit der Label-Map verknüpft und als Input für unseren Generator verwendet.
  • Interaktive Obiektbearbeitung
  • In einem Ausführungsbeispiel sind wir aufgrund unseres merkmalsunterstützten Netzwerks darüber hinaus in der Lage, eine interaktive Instanzbearbeitung an den resultierenden Bildern durchzuführen. In einem Ausführungsbeispiel können wir die Farben einzelner Autos oder die Stile der Straße ändern. Wir können auch die Labels in dem Bild ändern, um unterschiedliche Ergebnisse zu erzielen, wie z.B. ein Ersetzen von Bäumen durch Gebäude. Dies ermöglicht eine sehr benutzerfreundliche Manipulation der Bilder. Darüber hinaus implementieren wir unsere Instanzbearbeitungsfunktion auch in einem Gesichts-Datensatz, in dem Labels für verschiedene Gesichtsteile verfügbar sind. Dadurch ist es einfach, Gesichtsbilder zu manipulieren (z.B. durch Ändern der Gesichtsfarbe, um verschiedene Make-up-Effekte nachzuahmen, oder durch Hinzufügen von Bärten zu einem Gesicht, usw.).
  • Diskussion
  • In einem Ausführungsbeispiel können bedingte GANs hochauflösende fotorealistische Bilder ohne handwerkliche Verluste oder vortrainierte Netzwerke synthetisieren. In einem Ausführungsbeispiel kann die Einbeziehung eines Wahrnehmungsverlustes die Ergebnisse mit zusätzlichen Rechenkosten leicht verbessern. Unsere Methode wird viele Anwendungen ermöglichen, besonders nützlich für die Bereiche, in denen hochauflösende Ergebnisse gefragt sind, aber vortrainierte Netzwerke nicht verfügbar sind (z.B. medizinische Bildgebung, Biologie, usw.). Außerdem kann eine Bild-zu-Bild-Synthesepipeline dazu erweitert werden, diverse Ausgaben zu erzeugen und eine interaktive Bildmanipulation zu erzeugen, sofern die entsprechenden Trainings-Eingangs-Ausgangs-Paare (z.B. Instanz-Maps in unserem Fall) zu ermöglichen.
  • 8 veranschaulicht ein Ablaufdiagramm eines Verfahrens 800 zum Trainieren eines Grob-zu-Fein-Generators gemäß einem Ausführungsbeispiel. Obwohl das Verfahren 800 im Kontext einer Verarbeitungseinheit beschrieben wird, kann das Verfahren 800 auch durch ein Programm, eine benutzerdefinierte Schaltungsanordnung oder durch eine Kombination aus einer benutzerdefinierten Schaltungsanordnung und einem Programm durchgeführt werden. In einem Ausführungsbeispiel kann das Verfahren 800 von einer GPU (Grafikverarbeitungseinheit), einer CPU (Zentralverarbeitungseinheit) oder einem beliebigen Prozessor ausgeführt werden, der in der Lage ist, eine parallele Pfadraumfilterung durch Hashing durchzuführen. Darüber hinaus versteht sich, dass jedes System, das das Verfahren 800 durchführt, im Schutzumfang und Rahmen der Ausführungsbeispiele der Erfindung liegt.
  • Wie in Operation 802 gezeigt ist, wird eine semantische Repräsentation als Input für einen Grob-zu-Fein-Generator empfangen. Zusätzlich erzeugt der Grob-Fein-Generator, wie in Operation 804 gezeigt ist, ein Bild unter Verwendung der semantischen Repräsentation. Ferner wird das Bild, wie in Operation 806 gezeigt ist, an einen Diskriminator gesendet.
  • Ferner vergleicht der Diskriminator, wie in Operation 808 gezeigt ist, das Bild mit einem Originalbild, auf dem die semantische Repräsentation basiert, um eine Rückmeldung zu erzeugen, die angibt, ob das Bild mit dem Originalbild übereinstimmt. In einem Ausführungsbeispiel kann der Diskriminator eine Vielzahl von Multimaßstab-Diskriminatoren beinhalten, die jeweils ein neuronales Netzwerk beinhalten, das von den anderen Multimaßstab-Diskriminatoren getrennt ist.
  • In einem Ausführungsbeispiel kann das Bild mehrfach heruntergerechnet werden, um eine Vielzahl von heruntergerechneten Bildern zu erzeugen, und kann jeder der Vielzahl von multi-skaligen Diskriminatoren mit einer von den anderen multi-skaligen Diskriminatoren verschiedenen Bildgröße arbeiten und eines der Vielzahl von heruntergerechneten Bildern analysieren. In einem Ausführungsbeispiel kann der Diskriminator einen ersten Satz von Zwischenmerkmalsrepräsentationen aus dem Bild extrahieren, und kann auch einen zweiten Satz von Zwischenmerkmalsrepräsentationen aus dem Originalbild, auf dem die semantische Repräsentation basiert, extrahieren.
  • In einem Ausführungsbeispiel kann der Diskriminator den ersten Satz von Zwischenmerkmalsrepräsentationen mit dem zweiten Satz von Zwischenmerkmalsrepräsentationen vergleichen, um eine Rückmeldung zu erzeugen, wobei die Rückmeldung eine Angabe darüber beinhaltet, ob die Zwischenmerkmalsrepräsentationen übereinstimmen.
  • Darüber hinaus sendet der Diskriminator, wie in Operation 810 gezeigt ist, die Rückmeldung an den Grob-zu-Fein-Generator. Darüber hinaus wird, wie in Operation 812 gezeigt ist, der Grob-zu-Fein-Generator unter Verwendung der Rückmeldung aktualisiert. In einem Ausführungsbeispiel kann das Aktualisieren des Grob-zu-Fein-Generators ein Ändern einer oder mehrerer Entscheidungen, die der Grob-zu-Fein-Generator während der Bilderzeugung basierend auf der Rückmeldung getroffen hat, beinhalten.
  • 9 veranschaulicht ein Ablaufdiagramm eines Verfahrens 900 zum Implementieren eines trainierten Grob-zu-Fein-Generators gemäß einem Ausführungsbeispiel. Obwohl das Verfahren 900 im Kontext einer Verarbeitungseinheit beschrieben wird, kann das Verfahren 900 auch durch ein Programm, eine benutzerdefinierte Schaltungsanordnung oder durch eine Kombination aus einer benutzerdefinierten Schaltungsanordnung und einem Programm durchgeführt werden. In einem Ausführungsbeispiel kann das Verfahren 900 von einer GPU (Grafikverarbeitungseinheit), einer CPU (Zentralverarbeitungseinheit) oder einem beliebigen Prozessor ausgeführt werden, der in der Lage ist, eine parallele Pfadraumfilterung durch Hashing durchzuführen. Darüber hinaus versteht sich, dass jedes System, das das Verfahren 900 durchführt, im Schutzumfang und Rahmen der Ausführungsbeispiele der Erfindung liegt.
  • Wie in Operation 902 gezeigt ist, wird eine semantische Repräsentation als Input eines Grob-zu-Fein-Generators empfangen. Zusätzlich erzeugt ein grobes neuronales Netzwerk des Grob-zu-Fein-Generators, wie in Operation 904 gezeigt ist, ein erstes Bild mit einer ersten Auflösung unter Verwendung der semantischen Repräsentation.
  • Ferner erzeugt ein feines neuronales Netzwerk des Grob-zu-Fein-Generators, wie in Operation 906 gezeigt ist, ein zweites Bild mit einer zweiten Auflösung, die höher ist als die erste Auflösung, unter Verwendung der semantischen Repräsentation und von Merkmalen, die zum Erzeugen des ersten Bilds verwendet werden. In einem Ausführungsbeispiel können die Merkmale, die zum Erzeugen des ersten Bilds verwendet werden, eine oder mehrere Zwischenmerkmalsebenen des groben Netzwerks beinhalten. Außerdem ferner gibt der Grob-zu-Fein-Generator, wie in Operation 908 gezeigt ist, das zweite Bild aus.
  • 10 veranschaulicht ein Ablaufdiagramm eines Verfahrens 1000 zum Verfeinern einer Ausgabe unter Nutzung einer Instance-Feature-Map gemäß einem Ausführungsbeispiel. Obwohl das Verfahren 1000 im Kontext einer Verarbeitungseinheit beschrieben wird, kann das Verfahren 1000 auch durch ein Programm, eine benutzerdefinierte Schaltungsanordnung oder durch eine Kombination aus einer benutzerdefinierten Schaltungsanordnung und einem Programm durchgeführt werden. In einem Ausführungsbeispiel kann das Verfahren 1000 von einer GPU (Grafikverarbeitungseinheit), einer CPU (Zentralverarbeitungseinheit) oder einem beliebigen Prozessor ausgeführt werden, der in der Lage ist, eine parallele Pfadraumfilterung durch Hashing durchzuführen. Darüber hinaus versteht sich, dass jedes System, das das Verfahren 1000 durchführt, im Schutzumfang und Rahmen der Ausführungsbeispiele der Erfindung liegt.
  • Wie in Operation 1002 gezeigt ist, erzeugt ein Feature-Encoder-Netzwerk eine Instance-Feature-Map eines Bilds. In einem Ausführungsbeispiel kann das Feature-Encoder-Netzwerk ein instanzweises Durchschnitts-Pooling verwenden, um sicherzustellen, dass die Merkmale innerhalb der Instance-Feature-Map einheitlich sind. Zusätzlich erzeugt ein grobes neuronales Netzwerk eines Grob-zu-Fein-Generators, wie in Operation 1004 gezeigt ist, ein erstes Bild mit einer ersten Auflösung unter Verwendung der semantischen Repräsentation des Bilds und der Instance-Feature-Map.
  • Ferner erzeugt ein feines neuronales Netzwerk des Grob-zu-Fein-Generators, wie in Operation 1006 gezeigt ist, ein zweites Bild mit einer zweiten Auflösung, die höher ist als die erste Auflösung, unter Verwendung der semantischen Repräsentation, der Instance-Feature-Map und der Merkmale, die zum Erzeugen des ersten Bilds verwendet werden. Ferner gibt der Grob-zu-Fein-Generator, wie in Operation 1008 gezeigt ist, das zweite Bild aus. Auf diese Weise kann die Instance-Feature-Map zusätzlich zu der Verfeinerung der Ausgabe eine Manipulation des Ausgabebilds auf Instanz-Ebene ermöglichen (z.B. durch Ändern eines Stils eines Objekts wie beispielsweise eines Autos oder der Textur eines Objekts wie beispielsweise einer Straße).
  • 11 veranschaulicht ein Ablaufdiagramm eines Verfahrens 1100 zum Trainieren eines Modells für maschinelles Lernen, das zumindest teilweise auf einer semantischen Repräsentation einer ersten digitalen Repräsentation eines Bilds basiert, gemäß einem Ausführungsbeispiel. Obwohl das Verfahren 1100 im Kontext einer Verarbeitungseinheit beschrieben wird, kann das Verfahren 1100 auch durch ein Programm, eine benutzerdefinierte Schaltungsanordnung oder durch eine Kombination aus einer benutzerdefinierten Schaltungsanordnung und einem Programm durchgeführt werden. In einem Ausführungsbeispiel kann das Verfahren 1100 von einer GPU (Grafikverarbeitungseinheit), einer CPU (Zentralverarbeitungseinheit) oder einem beliebigen Prozessor ausgeführt werden, der in der Lage ist, eine parallele Pfadraumfilterung durch Hashing durchzuführen. Darüber hinaus versteht sich, dass jedes System, das das Verfahren 1100 durchführt, im Schutzumfang und Rahmen der Ausführungsbeispiele der Erfindung liegt.
  • Wie in Operation 1102 gezeigt ist, wird ein grobes neuronales Netzwerk unter Verwendung nur der semantischen Repräsentation der ersten digitalen Repräsentation des Bilds trainiert, um eine grobe digitale Repräsentation des Bilds mit einer Auflösung, die geringer ist als die Auflösung der ersten digitalen Repräsentation des Bilds, zu erzeugen. In einem Ausführungsbeispiel beinhaltet die semantische Repräsentation der ersten digitalen Repräsentation des Bilds eine semantische Label-Map der ersten digitalen Repräsentation des Bilds. In einem Ausführungsbeispiel beinhaltet die semantische Repräsentation der ersten digitalen Repräsentation des Bilds eine Kanten-Map der ersten digitalen Repräsentation des Bilds. In einem Ausführungsbeispiel beinhaltet die semantische Repräsentation der ersten digitalen Repräsentation des Bilds eine Beziehungs-Map der ersten digitalen Repräsentation des Bilds.
  • Zusätzlich wird, wie in Operation 1104 gezeigt ist, ein feines neuronales Netzwerk unter Verwendung der semantischen Repräsentation der ersten digitalen Repräsentation des Bilds und der groben digitalen Repräsentation des Bilds trainiert, um eine feine digitale Repräsentation des Bilds mit einer Auflösung zu erzeugen, die höher ist als die Auflösung der groben digitalen Repräsentation des Bilds.
  • Ferner wird, wie in Operation 1106 gezeigt ist, die feine digitale Repräsentation des Bilds mit der ersten digitalen Repräsentation des Bilds verglichen. Außerdem ferner werden, wie in Operation 1108 gezeigt ist, die einem oder mehreren Knoten eines oder beider des groben neuronalen Netzwerks und des feinen neuronalen Netzwerks zugeordneten Gewichtswerte so eingestellt, dass ein Unterschied zwischen der ersten digitalen Repräsentation des Bilds und der feinen digitalen Repräsentation des Bilds minimiert wird.
  • Außerdem ferner kann in einem Ausführungsbeispiel eine heruntergerechnete feine digitale Repräsentation des Bilds unter Verwendung der feinen digitalen Repräsentation des Bilds erzeugt werden, wobei die heruntergerechnete feine digitale Repräsentation des Bilds eine Auflösung aufweist, die geringer ist als die Auflösung der feinen digitalen Repräsentation des Bilds. In einem Ausführungsbeispiel kann unter Verwendung der ersten digitalen Repräsentation des Bilds eine heruntergerechnete erste digitale Repräsentation des Bilds mit einer Auflösung erzeugt werden, die geringer ist als die Auflösung der ersten digitalen Repräsentation des Bilds.
  • Darüber hinaus kann in einem Ausführungsbeispiel die heruntergerechnete feine digitale Repräsentation des Bilds mit der heruntergerechneten ersten digitalen Repräsentation des Bilds verglichen werden, und können Gewichtswerte, die einem oder mehreren Knoten eines oder beider des groben neuronalen Netzwerks und des feinen neuronalen Netzwerks zugeordnet sind, angepasst werden, um einen Unterschied zwischen der heruntergerechneten feinen digitalen Repräsentation des Bilds und der heruntergerechneten ersten digitalen Repräsentation des Bilds zu minimieren.
  • Darüber hinaus kann in einem Ausführungsbeispiel ein Satz von Zwischenmerkmalsrepräsentationen der feinen digitalen Repräsentation des Bilds unter Verwendung der feinen digitalen Repräsentation des Bilds extrahiert werden. In einem Ausführungsbeispiel kann ein Satz von Zwischenmerkmalsrepräsentationen der ersten digitalen Repräsentation des Bilds unter Verwendung der ersten digitalen Repräsentation des Bilds extrahiert werden. In einem Ausführungsbeispiel kann der Satz von Zwischenmerkmalsrepräsentationen der feinen digitalen Repräsentation des Bilds mit dem Satz von Zwischenmerkmalsrepräsentationen der ersten digitalen Repräsentation des Bilds verglichen werden, und können Gewichtswerte, die einem oder mehreren Knoten eines oder beider des groben neuronalen Netzwerks und des feinen neuronalen Netzwerks zugeordnet sind, angepasst werden, um eine Differenz zwischen dem Satz von Zwischenmerkmalsrepräsentationen der feinen digitalen Repräsentation des Bilds und dem Satz von Zwischenmerkmalsrepräsentationen der ersten digitalen Repräsentation des Bilds zu minimieren.
  • Ferner kann in einem Ausführungsbeispiel das Modell des maschinellen Lernens auch zumindest teilweise auf der Grundlage einer Instanzmerkmal-Map der ersten digitalen Repräsentation des Bilds trainiert werden. In einem Ausführungsbeispiel kann die Instanzmerkmal-Map der ersten digitalen Repräsentation des Bilds zur semantischen Repräsentation der ersten digitalen Repräsentation des Bilds als Input in das Modell des maschinellen Lernens hinzugefügt werden.
  • In einem Ausführungsbeispiel kann unter Verwendung der feinen digitalen Repräsentation des Bilds eine Vielzahl von heruntergerechneten feinen digitalen Repräsentationen des Bilds mit Auflösungen unterhalb der Auflösung der feinen digitalen Repräsentation des Bilds erzeugt werden. In einem Ausführungsbeispiel kann eine Vielzahl von heruntergerechneten ersten digitalen Repräsentationen des Bilds mit Auflösungen geringer als die Auflösung der ersten digitalen Repräsentation eines Bilds auch unter Verwendung der ersten digitalen Repräsentation des Bilds erzeugt werden. In einem Ausführungsbeispiel können die feine digitale Repräsentation des Bilds und die heruntergerechneten feinen digitalen Repräsentationen des Bilds mit der ersten digitalen Repräsentation des Bilds und den heruntergerechneten ersten digitalen Repräsentationen des Bilds durch eine Vielzahl von neuronalen Netzwerken verglichen werden, wobei jedes der Vielzahl von neuronalen Netzwerken mit einer von den anderen neuronalen Netzwerken verschiedenen Auflösung arbeitet. In einem Ausführungsbeispiel können Gewichtswerte, die einem oder mehreren Knoten eines oder beider des groben neuronalen Netzwerks und des feinen neuronalen Netzwerks zugeordnet sind, angepasst werden, um einen Unterschied zwischen der feinen digitalen Repräsentation des Bilds und den feinen digitalen Repräsentationen des Bilds und der ersten digitalen Repräsentation des Bilds und den ersten digitalen Repräsentationen des Bilds zu minimieren.
  • 12 veranschaulicht ein Ablaufdiagramm eines Verfahrens 1200 zum Trainieren eines Modells für maschinelles Lernen, das zumindest teilweise auf einer semantischen Repräsentation einer ersten digitalen Repräsentation eines Bilds basiert, gemäß einem Ausführungsbeispiel. Obwohl das Verfahren 1200 im Kontext einer Verarbeitungseinheit beschrieben wird, kann das Verfahren 1200 auch durch ein Programm, eine benutzerdefinierte Schaltungsanordnung oder durch eine Kombination aus einer benutzerdefinierten Schaltungsanordnung und einem Programm durchgeführt werden. In einem Ausführungsbeispiel kann das Verfahren 1200 von einer GPU (Grafikverarbeitungseinheit), einer CPU (Zentralverarbeitungseinheit) oder einem beliebigen Prozessor ausgeführt werden, der in der Lage ist, eine parallele Pfadraumfilterung durch Hashing durchzuführen. Darüber hinaus versteht sich, dass jedes System, das das Verfahren 1200 durchführt, im Schutzumfang und Rahmen der Ausführungsbeispiele der Erfindung liegt.
  • Wie in Operation 1202 gezeigt ist, wird ein grobes neuronales Netzwerk unter Verwendung nur der semantischen Repräsentation der ersten digitalen Repräsentation des Bilds trainiert, um eine grobe digitale Repräsentation des Bilds mit einer Auflösung zu erzeugen, die geringer ist als die Auflösung der ersten digitalen Repräsentation des Bilds. In einem Ausführungsbeispiel beinhaltet die semantische Repräsentation der ersten digitalen Repräsentation des Bilds eine semantische Label-Map der ersten digitalen Repräsentation des Bilds. In einem Ausführungsbeispiel beinhaltet die semantische Repräsentation der ersten digitalen Repräsentation des Bilds eine Kanten-Map der ersten digitalen Repräsentation des Bilds. In einem Ausführungsbeispiel beinhaltet die semantische Repräsentation der ersten digitalen Repräsentation des Bilds eine Beziehungs-Map der ersten digitalen Repräsentation des Bilds.
  • Zusätzlich wird, wie in Operation 1204 gezeigt ist, ein feines neuronales Netzwerk unter Verwendung der semantischen Repräsentation der ersten digitalen Repräsentation des Bilds und der groben digitalen Repräsentation des Bilds trainiert, um eine feine digitale Repräsentation des Bilds mit einer Auflösung zu erzeugen, die höher ist als die Auflösung der groben digitalen Repräsentation des Bilds.
  • 13 veranschaulicht ein beispielhaftes Modell für maschinelles Lernen 1300 gemäß einem Ausführungsbeispiel. Wie gezeigt ist, beinhaltet das beispielhafte Modell für maschinelles Lernen 1300 ein grobes neuronales Netzwerk 1302 und ein feines neuronales Netzwerk 1304. In einem Ausführungsbeispiel kann das grobe neuronale Netzwerk 1302 unter Verwendung nur einer semantischen Repräsentation einer ersten digitalen Repräsentation eines Bilds eine grobe digitale Repräsentation des Bilds mit einer Auflösung erzeugen, die geringer ist als die Auflösung der ersten digitalen Repräsentation des Bilds.
  • Zusätzlich kann das feine neuronale Netzwerk 1304 in einem Ausführungsbeispiel unter Verwendung der semantischen Repräsentation der ersten digitalen Repräsentation des Bilds und der groben digitalen Repräsentation des Bilds eine feine digitale Repräsentation des Bilds mit einer Auflösung erzeugen, die höher ist als die Auflösung der groben digitalen Repräsentation des Bilds.
  • 14 veranschaulicht ein Ablaufdiagramm eines Verfahrens 1400 zum Verwenden einer trainierten Generator-Architektur gemäß einem Ausführungsbeispiel. Obwohl das Verfahren 1400 im Kontext einer Verarbeitungseinheit beschrieben wird, kann das Verfahren 1400 auch durch ein Programm, eine benutzerdefinierte Schaltungsanordnung oder durch eine Kombination aus einer benutzerdefinierten Schaltungsanordnung und einem Programm durchgeführt werden. In einem Ausführungsbeispiel kann das Verfahren 1400 von einer GPU (Grafikverarbeitungseinheit), einer CPU (Zentralverarbeitungseinheit) oder einem beliebigen Prozessor ausgeführt werden, der in der Lage ist, eine parallele Pfadraumfilterung durch Hashing durchzuführen. Darüber hinaus versteht sich, dass jedes System, das die Methode 1400 durchführt, im Schutzumfang und Rahmen der Ausführungsbeispiele der Erfindung liegt.
  • Wie in Operation 1402 gezeigt ist, erzeugt ein grobes neuronales Netzwerk eine grobe digitale Repräsentation des Bilds mit einer Auflösung, die geringer ist als die Auflösung der ersten digitalen Repräsentation des Bilds, wobei nur eine semantische Repräsentation einer ersten digitalen Repräsentation eines Bilds verwendet wird. Zusätzlich erzeugt ein feines neuronales Netzwerk, wie in Operation 1404 gezeigt ist, eine feine digitale Repräsentation des Bilds mit einer Auflösung, die höher ist als die Auflösung der groben digitalen Repräsentation des Bilds, unter Verwendung der semantischen Repräsentation der ersten digitalen Repräsentation des Bilds und der groben digitalen Repräsentation des Bilds.
  • Obwohl vorstehend verschiedene Ausführungsbeispiele beschrieben wurden, versteht sich, dass diese nur beispielhaft und nicht als beschränkend dargestellt wurden. Daher sind die Breite und der Schutzumfang eines bevorzugten Ausführungsbeispiels nicht durch eines der vorstehend beschriebenen beispielhaften Ausführungsbeispiele einzuschränken, sondern nur in Übereinstimmung mit den nachfolgenden Ansprüchen und ihren Äquivalenten zu definieren.

Claims (20)

  1. Verfahren, umfassend: Trainieren eines Modells für maschinelles Lernen, das zumindest teilweise auf einer semantischen Repräsentation einer ersten digitalen Repräsentation eines Bilds basiert, wobei das Trainieren des Modells für maschinelles Lernen beinhaltet: Trainieren eines groben neuronalen Netzwerks unter Verwendung nur der semantischen Repräsentation der ersten digitalen Repräsentation des Bilds, um eine grobe digitale Repräsentation des Bilds mit einer Auflösung zu erzeugen, die geringer ist als die Auflösung der ersten digitalen Repräsentation des Bilds; Trainieren eines feinen neuronalen Netzwerks unter Verwendung der semantischen Repräsentation der ersten digitalen Repräsentation des Bilds und der groben digitalen Repräsentation des Bilds, um eine feine digitale Repräsentation des Bilds mit einer Auflösung zu erzeugen, die höher ist als die Auflösung der groben digitalen Repräsentation des Bilds; Vergleichen der feinen digitalen Repräsentation des Bilds mit der ersten digitalen Repräsentation des Bilds; und Anpassen von Gewichtswerten, die einem oder mehreren Vertex eines oder beider des groben neuronalen Netzwerks und des feinen neuronalen Netzwerks zugeordnet sind, um einen Unterschied zwischen der ersten digitalen Repräsentation des Bilds und der feinen digitalen Repräsentation des Bilds zu minimieren.
  2. Verfahren nach Anspruch 1, bei dem die semantische Repräsentation der ersten digitalen Repräsentation des Bilds eine semantische Label-Map der ersten digitalen Repräsentation des Bilds beinhaltet.
  3. Verfahren nach Anspruch 1 oder 2, bei dem die semantische Repräsentation der ersten digitalen Repräsentation des Bilds eine Kanten-Map der ersten digitalen Repräsentation des Bilds beinhaltet.
  4. Verfahren nach einem der vorangehenden Ansprüche, bei dem die semantische Repräsentation der ersten digitalen Repräsentation des Bilds eine Beziehungs-Map der ersten digitalen Repräsentation des Bilds beinhaltet.
  5. Verfahren nach einem der vorangehenden Ansprüche, ferner umfassend ein Erzeugen, unter Verwendung der feinen digitalen Repräsentation des Bilds, einer heruntergerechneten feinen digitalen Repräsentation des Bilds mit einer Auflösung, die geringer ist als die Auflösung der feinen digitalen Repräsentation des Bilds.
  6. Verfahren nach Anspruch 5, ferner umfassend ein Erzeugen, unter Verwendung der ersten digitalen Repräsentation des Bilds, einer heruntergerechneten ersten digitalen Repräsentation des Bilds mit einer Auflösung, die geringer ist als die Auflösung der ersten digitalen Repräsentation eines Bilds.
  7. Verfahren nach Anspruch 6, ferner umfassend ein Vergleichen der heruntergerechneten feinen digitalen Repräsentation des Bilds mit der heruntergerechneten ersten digitalen Repräsentation des Bilds.
  8. Verfahren nach Anspruch 7, ferner umfassend ein Anpassen von Gewichtswerten, die einem oder mehreren Vertex eines oder beider des groben neuronalen Netzwerks und des feinen neuronalen Netzwerks zugeordnet sind, um einen Unterschied zwischen der heruntergerechneten feinen digitalen Repräsentation des Bilds und der heruntergerechneten ersten digitalen Repräsentation des Bilds zu minimieren.
  9. Verfahren nach einem der vorangehenden Ansprüche, ferner umfassend: Erzeugen, unter Verwendung der feinen digitalen Repräsentation des Bilds, einer Vielzahl von heruntergerechneten feinen digitalen Repräsentationen des Bilds mit Auflösungen, die geringer sind als die Auflösung der feinen digitalen Repräsentation des Bilds; Erzeugen, unter Verwendung der ersten digitalen Repräsentation des Bilds, einer Vielzahl von heruntergerechneten ersten digitalen Repräsentationen des Bilds mit Auflösungen, die geringer sind als die Auflösung der ersten digitalen Repräsentation eines Bilds; Vergleichen, mittels einer Vielzahl von neuronalen Netzwerken, der feinen digitalen Repräsentation des Bilds und der heruntergerechneten feinen digitalen Repräsentationen des Bilds mit der ersten digitalen Repräsentation des Bilds und den heruntergerechneten feinen digitalen Repräsentationen des Bilds, wobei jedes der Vielzahl von neuronalen Netzwerken mit einer Auflösung arbeitet, die sich von den anderen neuronalen Netzwerken unterscheidet; und Anpassen von Gewichtswerten, die einem oder mehreren Vertex eines oder beider des groben neuronalen Netzwerks und des feinen neuronalen Netzwerks zugeordnet sind, um einen Unterschied zwischen der feinen digitalen Repräsentation des Bilds und den heruntergerechneten feinen digitalen Repräsentationen des Bilds, und der ersten digitalen Repräsentation des Bilds und den heruntergerechneten ersten digitalen Repräsentationen des Bilds zu minimieren.
  10. Verfahren nach einem der vorangehenden Ansprüche, ferner umfassend ein Extrahieren, unter Verwendung der feinen digitalen Repräsentation des Bilds, eines Satzes von Zwischenmerkmalsrepräsentationen der feinen digitalen Repräsentation des Bilds.
  11. Verfahren nach Anspruch 10, ferner umfassend ein Extrahieren, unter Verwendung der ersten digitalen Repräsentation des Bilds, eines Satzes von Zwischenmerkmalsrepräsentationen der ersten digitalen Repräsentation des Bilds.
  12. Verfahren nach Anspruch 11, ferner umfassend ein Vergleichen des Satzes von Zwischenmerkmalsrepräsentationen der feinen digitalen Repräsentation des Bilds mit dem Satz von Zwischenmerkmalsrepräsentationen der ersten digitalen Repräsentation des Bilds.
  13. Verfahren nach Anspruch 12, ferner umfassend ein Anpassen von Gewichtswerten, die einem oder mehreren Vertex eines oder beider des groben neuronalen Netzwerks und des feinen neuronalen Netzwerks zugeordnet sind, um einen Unterschied zwischen dem Satz von Zwischenmerkmalsrepräsentationen der feinen digitalen Repräsentation des Bilds und dem Satz von Zwischenmerkmalsrepräsentationen der ersten digitalen Repräsentation des Bilds zu minimieren.
  14. Verfahren nach einem der vorangehenden Ansprüche, bei dem das Modell für maschinelles Lernen auch zumindest teilweise auf der Grundlage einer Instance-Feature-Map der ersten digitalen Repräsentation des Bilds trainiert wird.
  15. Verfahren nach Anspruch 14, bei dem die Instance-Feature-Map der ersten digitalen Repräsentation des Bilds als Input in das Modell für maschinelles Lernen zu der semantischen Repräsentation der ersten digitalen Repräsentation des Bilds hinzugefügt wird.
  16. Verfahren, umfassend: Trainieren eines Modells für maschinelles Lernen, das zumindest teilweise auf einer semantischen Repräsentation einer ersten digitalen Repräsentation eines Bilds basiert, wobei das Trainieren des Modells für maschinelles Lernen beinhaltet: Trainieren eines groben neuronalen Netzwerks unter Verwendung nur der semantischen Repräsentation der ersten digitalen Repräsentation des Bilds verwendet, um eine grobe digitale Repräsentation des Bilds mit einer Auflösung zu erzeugen, die geringer ist als die Auflösung der ersten digitalen Repräsentation des Bilds; und Trainieren eines feinen neuronalen Netzwerks unter Verwendung der semantischen Repräsentation der ersten digitalen Repräsentation des Bilds und der groben digitalen Repräsentation des Bilds, um eine feine digitale Repräsentation des Bilds mit einer Auflösung zu erzeugen, die höher ist als die Auflösung der groben digitalen Repräsentation des Bilds.
  17. Modell für maschinelles Lernen, beinhaltend: ein grobes neuronales Netzwerk, das unter Verwendung nur einer semantischen Repräsentation einer ersten digitalen Repräsentation eines Bilds eine grobe digitale Repräsentation des Bilds mit einer Auflösung erzeugt, die geringer ist als die Auflösung der ersten digitalen Repräsentation des Bilds; und ein feines neuronales Netzwerk, das unter Verwendung der semantischen Repräsentation der ersten digitalen Repräsentation des Bilds und der groben digitalen Repräsentation des Bilds eine feine digitale Repräsentation des Bilds mit einer Auflösung erzeugt, die höher ist als die Auflösung der groben digitalen Repräsentation des Bilds.
  18. Modell für maschinelles Lernen nach Anspruch 17, bei dem das maschinelle Lernen dazu konfiguriert ist, in Übereinstimmung mit einem Verfahren nach einem der Ansprüche 1 bis 16 zu arbeiten.
  19. Modell für maschinelles Lernen nach Anspruch 17, bei dem das Modell für maschinelles Lernen auch die feine digitale Repräsentation eines Bilds zumindest teilweise basierend auf einer Instance-Feature-Map der ersten digitalen Repräsentation des Bilds erzeugt.
  20. Verfahren, umfassend: Erzeugen, durch ein grobes neuronales Netzwerk unter Verwendung nur einer semantischen Repräsentation einer ersten digitalen Repräsentation eines Bilds, einer groben digitalen Repräsentation des Bilds mit einer Auflösung, die geringer ist als die Auflösung der ersten digitalen Repräsentation des Bilds; und Erzeugen, durch ein feines neuronales Netzwerk unter Verwendung der semantischen Repräsentation der ersten digitalen Repräsentation des Bilds und der groben digitalen Repräsentation des Bilds, einer feinen digitalen Repräsentation des Bilds mit einer Auflösung, die höher ist als die Auflösung der groben digitalen Repräsentation des Bilds.
DE102018128592.2A 2017-11-15 2018-11-14 Erzeugen eines Bilds unter Verwendung einer Map, die verschiedene Klassen von Pixeln repräsentiert Pending DE102018128592A1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201762586743P 2017-11-15 2017-11-15
US62/586,743 2017-11-15
US16/188,920 2018-11-13
US16/188,920 US20190147296A1 (en) 2017-11-15 2018-11-13 Creating an image utilizing a map representing different classes of pixels

Publications (1)

Publication Number Publication Date
DE102018128592A1 true DE102018128592A1 (de) 2019-05-16

Family

ID=66335842

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018128592.2A Pending DE102018128592A1 (de) 2017-11-15 2018-11-14 Erzeugen eines Bilds unter Verwendung einer Map, die verschiedene Klassen von Pixeln repräsentiert

Country Status (3)

Country Link
US (1) US20220012536A1 (de)
CN (1) CN117953092A (de)
DE (1) DE102018128592A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11299169B2 (en) * 2020-01-24 2022-04-12 Ford Global Technologies, Llc Vehicle neural network training
WO2023205726A1 (en) * 2022-04-20 2023-10-26 The General Hospital Corporation Deep learning based image reconstruction

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190147296A1 (en) * 2017-11-15 2019-05-16 Nvidia Corporation Creating an image utilizing a map representing different classes of pixels
US10643320B2 (en) * 2017-11-15 2020-05-05 Toyota Research Institute, Inc. Adversarial learning of photorealistic post-processing of simulation with privileged information
US10984286B2 (en) * 2018-02-02 2021-04-20 Nvidia Corporation Domain stylization using a neural network model
US10922793B2 (en) * 2018-05-16 2021-02-16 Nvidia Corporation Guided hallucination for missing image content using a neural network
US20200074707A1 (en) * 2018-09-04 2020-03-05 Nvidia Corporation Joint synthesis and placement of objects in scenes
DE102019123455A1 (de) * 2018-09-04 2020-03-05 Nvidia Corporation Gemeinsame synthese und platzierung von objekten in szenen
US11934959B2 (en) * 2020-06-01 2024-03-19 Nvidia Corporation Video synthesis using one or more neural networks
US20230252692A1 (en) * 2022-02-04 2023-08-10 Nvidia Corporation Learning dense correspondences for images

Also Published As

Publication number Publication date
US20220012536A1 (en) 2022-01-13
CN117953092A (zh) 2024-04-30

Similar Documents

Publication Publication Date Title
DE102019102279A1 (de) Erzeugung von synthetischen Bildern zum Trainieren eines Neuronal-Netzwerkmodells
DE102018121282A1 (de) Differenzierbare rendering-pipeline für inverse graphik
DE102018117813A1 (de) Zeitlich stabile Datenrekonstruktion mit einem externen rekurrenten neuronalen Netzwerk
DE102018126670A1 (de) Fortschreitende Modifizierung von generativen adversativen neuronalen Netzen
DE102018108324A1 (de) System und Verfahren zur Schätzung eines optischen Flusses
DE102019130889A1 (de) Schätzung der tiefe eines mit einer monokularen rgb-kamera aufgenommenen videodatenstroms
US20190147296A1 (en) Creating an image utilizing a map representing different classes of pixels
DE102019130702A1 (de) Stilbasierte architektur für generative neuronale netzwerke
DE102018132069A1 (de) Äquivariante Orientierungspunkt-Transformation für Orientierungspunkt-Lokalisierung
DE102019106123A1 (de) Dreidimensionale (3D) Posenschätzung von Seiten einer monokularen Kamera
DE102021119726A1 (de) Dreidimensionale objektrekonstruktion aus einem video
DE102017124573A1 (de) Systeme und verfahren zum beschneiden von neuronalen netzen für eine betriebsmitteleffiziente folgerung
DE102018009315A1 (de) Verfahren tiefgehenden Lernens zum Trennen von Reflexions- und Übertragungsbildern, die an einer halbreflektierenden Oberfläche in einem Computerbild einer Realweltszene sichtbar sind
DE102019102009A1 (de) Reduzierung des rauschens während des renderings durch parallele path-space-filterung unter verwendung von hashing
DE102019103310A1 (de) Schätzer for einen optimalen betriebspunkt für hardware, die unter einer beschränkung der gemeinsam genutzten leistung/wärme arbeitet
DE102019128750A1 (de) Reduzierung des detailgrades eines polygonnetzes, um eine komplexität einer bildlich wiedergegebenen geometrie innerhalb einer szene zu verringern
DE102021105249A1 (de) Mikrotraining zur iterativen verfeinerung eines neuronalen netzes mit wenigen anpassungen
DE102021121109A1 (de) Wiederherstellung dreidimensionaler modelle aus zweidimensionalen bildern
DE102019130311A1 (de) Transponierte schwachbesetzte matrix multipliziert mit dichtbesetzter matrix für ein training neuronaler netzwerke
DE102019106996A1 (de) Darstellen eines neuronalen netzwerks unter verwendung von pfaden innerhalb des netzwerks zum verbessern der leistung des neuronalen netzwerks
DE102019101871A1 (de) Verfahren und Vorrichtung zum Gewinnen von Abtastpositionen von Textuieroperationen
DE102019134020A1 (de) Dekompprimierungstechniken zur verarbeitung komprimierter daten, die für künstliche neuronale netzwerke geeignet sind
DE112019001978T5 (de) Verbesserung des realismus von szenen mit wasseroberflächen beim rendern
DE102020108526A1 (de) Adaptive pixelabtastreihenfolge für zeitlich dichtes rendern
DE102018114799A1 (de) Halbüberwachtes lernen zur orientierungspunktlokalisierung

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06K0009660000

Ipc: G06V0030194000