DE102017131364A1 - Zwanglose erscheinungs-basierte blickschätzung - Google Patents

Zwanglose erscheinungs-basierte blickschätzung Download PDF

Info

Publication number
DE102017131364A1
DE102017131364A1 DE102017131364.8A DE102017131364A DE102017131364A1 DE 102017131364 A1 DE102017131364 A1 DE 102017131364A1 DE 102017131364 A DE102017131364 A DE 102017131364A DE 102017131364 A1 DE102017131364 A1 DE 102017131364A1
Authority
DE
Germany
Prior art keywords
eye
image
cnn
data
orientation
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
DE102017131364.8A
Other languages
English (en)
Inventor
Rajeev Ranjan
Shalini Gupta
Jan Kautz
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 US15/855,887 external-priority patent/US11132543B2/en
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102017131364A1 publication Critical patent/DE102017131364A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/011Arrangements for interaction with the human body, e.g. for user immersion in virtual reality
    • G06F3/013Eye tracking input arrangements
    • 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
    • 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
    • G06V40/00Recognition of biometric, human-related or animal-related patterns in image or video data
    • G06V40/10Human or animal bodies, e.g. vehicle occupants or pedestrians; Body parts, e.g. hands
    • G06V40/16Human faces, e.g. facial parts, sketches or expressions
    • G06V40/161Detection; Localisation; Normalisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V40/00Recognition of biometric, human-related or animal-related patterns in image or video data
    • G06V40/10Human or animal bodies, e.g. vehicle occupants or pedestrians; Body parts, e.g. hands
    • G06V40/18Eye characteristics, e.g. of the iris
    • G06V40/193Preprocessing; Feature extraction

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Human Computer Interaction (AREA)
  • Evolutionary Computation (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • General Engineering & Computer Science (AREA)
  • Artificial Intelligence (AREA)
  • Databases & Information Systems (AREA)
  • Oral & Maxillofacial Surgery (AREA)
  • Computing Systems (AREA)
  • Ophthalmology & Optometry (AREA)
  • Medical Informatics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Image Generation (AREA)

Abstract

Ein Verfahren, ein computerlesbares Medium und ein System werden zur Durchführung einer zwangslosen Erscheinungsbasierten Blickschätzung offenbart. Das Verfahren umfasst die Schritte des Identifizierens eines Bildes eines Auges und einer dem Bild des Auges zugeordneten Kopforientierung, des Bestimmens einer Orientierung für das Auge durch Analysieren innerhalb eines konvolutionalen neuralen Netzwerk (CNN) das Bild des Auges und die dem Bild des Auges zugeordnete Kopforientierung und des Zurückgebens der Orientierung des Auges.

Description

  • GEBIET DER ERFINDUNG
  • Die vorliegende Erfindung betrifft die Benutzerüberwachung und insbesondere das Durchführen einer Blickverfolgung unter Verwendung eines konvolutionalen neuralen Netzwerks (CNN).
  • HINTERGRUND
  • Die aktuelle Technologie zum Verfolgen eines Blicks einer Person (d.h., einer Sichtlinie) unter Verwendung von Kameras erfordert typischerweise eine extensive Kalibrierung. Des Weiteren sind hochwertige Bildsensoren erforderlich, um genaue Ergebnisse zu erzeugen, und die Ergebnisse können ebenfalls angemessene Beleuchtungsbedingungen erfordern. Es gibt ein Wunsch, ein hochwertiges Blickschätzungssystem mit Bildsensoren, die häufig in den heutigen kostengünstigen Elektronikgeräten für den Endverbraucher verwendet werden, für den Endverbraucher zu erzeugen.
  • Es besteht somit ein Bedürfnis, diese und/oder andere Themen, die mit dem Stand der Technik verbunden sind, zu behandeln.
  • ZUSAMMENFASSUNG
  • Ein Verfahren, ein computerlesbares Medium und ein System werden zum Durchführen einer zwanglosen Erscheinungs-basierten Blickschätzung offenbart. Das Verfahren umfasst die Schritte des Identifizierens eines Bildes eines Auges und einer dem Bild des Auges zugeordneten Kopforientierung, des Bestimmens einer Orientierung für das Auge durch Analysieren innerhalb eines konvolutionalen neuralen Netzwerks (CNN) das Bild des Auges und die dem Bild des Auges zugeordnete Kopforientierung und des Zurückgebens der Orientierung des Auges.
  • Figurenliste
    • 1 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Durchführen einer zwanglosen Erscheinungs-basierten Blickschätzung gemäß einer Ausführungsform;
    • 2 veranschaulicht eine Parallelverarbeitungseinheit gemäß einer Ausführungsform;
    • 3A veranschaulicht einen allgemeinen Verarbeitungscluster der Parallelverarbeitungseinheit von 2 gemäß einer Ausführungsform;
    • 3B veranschaulicht eine Partitions-Einheit der Parallelverarbeitungseinheit von 2 gemäß einer Ausführungsform;
    • 4 veranschaulicht den Streaming-Multiprozessor von 3A gemäß einer Ausführungsform;
    • 5 veranschaulicht ein System-on-Chip, das die Parallelverarbeitungseinheit von 2 umfasst, gemäß einer Ausführungsform;
    • 6 ist ein Konzeptdiagramm einer Graphikverarbeitungs-Pipeline, die von der Parallelverarbeitungseinheit von 2 implementiert wird, gemäß einer Ausführungsform;
    • 7 veranschaulicht ein beispielhaftes System, in dem die verschiedene Architektur und/oder Funktionalität der verschiedenen vorherigen Ausführungsformen implementiert werden kann.
    • 8 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Erstellen von Daten zur Eingabe in ein CNN gemäß einer Ausführungsform;
    • 9 veranschaulicht ein beispielhaftes System zur Blickschätzung gemäß einer Ausführungsform; und
    • 10 veranschaulicht ein beispielhaftes CNN gemäß einer Ausführungsform.
    • 11 veranschaulicht verschiedene Beispiele von gerenderten Augenpatches, die als Teil eines Trainingsdatensatz gemäß einer Ausführungsform erzeugt werden.
  • AUSFÜHRLICHE BESCHREIBUNG
  • 1 veranschaulicht ein Ablaufdiagramm eines Verfahrens 100 zum Durchführen einer zwanglosen Erscheinungs-basierten Blickschätzung gemäß einer Ausführungsform. Wie in Operation 102 gezeigt, werden ein Bild eines Auges und eine dem Bild des Auges zugeordnete Kopforientierung identifiziert. In einer Ausführungsform kann das Auge ein Auge eines Subjekts (z.B. eines Menschen oder anderen Lebewesens usw.) umfassen. In einer anderen Ausführungsform kann das Bild des Auges von einem Bild eines Gesichts des Subjekts erhalten werden. Beispielsweise kann ein allgemeines Bild, das ein Gesicht eines Subjekts umfasst, unter Benutzung einer oder mehrerer Kameras identifiziert werden. In einem anderen Beispiel kann ein Gesichtsbild innerhalb des allgemeinen Bildes (z.B. innerhalb eines Kopfes eines Subjekts usw.) unter Benutzung einer oder mehrerer Anwendungen identifiziert und isoliert werden.
  • In noch einem anderen Beispiel kann ein Ort eines oder mehrerer Augen innerhalb des Gesichtsbildes bestimmt werden. Beispielsweise kann der Ort des einen oder mehrerer Augen durch Bestimmen eines Orts einer Mitte des einen oder mehrerer Augen innerhalb des Gesichtsbildes durchgeführt werden. Die Mitte kann X- und Y-Koordinaten innerhalb des Gesichtsbildes umfassen und die Mitte kann verwendet werden, um das Gesichtsbild um den Ort des einen oder mehrerer Augen zuzuschneiden. Dies kann zu einem oder mehreren zugeschnittenen Bildern führen, die ein Auge innerhalb des Gesichtsbildes und einen das Auge umgebenden Bereich umfassen (wobei z.B. der Bereich ein zugeschnittener Bereich ist, der kleiner als das Gesichtsbild selbst ist).
  • Außerdem kann in einer Ausführungsform das Bild des Gesichts unter Benutzung einer oder mehrere Kameras (z.B. einer oder mehrerer Web-Kameras, Kameras mobiler Vorrichtungen, Streaming-Kameras usw.) erhalten werden. In einer anderen Ausführungsform kann das Bild des Gesichts unter Verwendung von Umgebungslicht (z.B. natürlichem Licht, wie beispielsweise Licht von der Sonne, Licht, das einen Raum beleuchtet, usw.) erhalten werden. In noch einer anderen Ausführungsform kann das Bild des Gesichts unter Verwendung von Infrarotlicht (z.B. IR-Beleuchtung usw.) erhalten werden. In noch einer anderen Ausführungsform kann das Bild des Gesichts ohne Durchführen irgendwelcher Kalibrierungsoperationen erhalten werden.
  • Ferner kann in einer Ausführungsform die dem Bild des Auges zugeordnete Kopforientierung eine Orientierung eines Gesichts und/oder Kopfs des Subjekts mit Bezug auf eine Kamera umfassen. In einer anderen Ausführungsform kann die Kopforientierung durch Durchführen einer Kopfposenschätzung berechnet werden. Beispielsweise kann ein Gesichtsbild innerhalb eines allgemeinen Bildes identifiziert und isoliert werden. In einem anderen Beispiel kann das Gesichtsbild auf einem Kopf des Subjekts innerhalb des allgemeinen Bilds lokalisiert sein. In noch einem anderen Beispiel kann unter Benutzung des Gesichtsbilds eine Orientierung des Gesichts und/oder Kopfs mit Bezug auf eine Kamera bestimmt werden. Beispielsweise kann die Kopforientierung einer 3D-Drehung (z.B. ein Gieren, Nicken und Rollen) des Gesichts relativ zu einer Kameraachse, einer Kameraebene usw. umfassen.
  • In einer Ausführungsform kann ferner noch das Gesichtsbildes normiert werden. Beispielsweise kann das Gesichtsbild rotiert werden, um Rollen relativ zu der Kameraebene zu korrigieren. In einem anderen Beispiel kann die Korrektur durch Normieren eines Orientierungsvektors durchgeführt werden, um Rollen zu korrigieren. Dies kann die Wirkung des Rollens innerhalb des Gesichtsbildes entfernen (z.B. durch Gerademachen eines Kopfes, auf dem das Gesicht lokalisiert ist, was das Gesichtsbild und die Augen gerade machen kann usw.). In einer anderen Ausführungsform kann das Bild des Auges von dem normierten Gesichtsbild erhalten werden.
  • In einer Ausführungsform kann die dem Bild des Auges zugeordnete Kopforientierung einen Azimutwert (der z.B. eine Gierdrehung darstellt, usw.) und einen Höhenwert (der z.B. eine Nickdrehung darstellt, usw.) des normierten Gesichtsbildes umfassen. In einer anderen Ausführungsform kann die Kopforientierung in der Form eines Vektors sein.
  • Außerdem wird, wie in Operation 104 gezeigt, eine Orientierung für das Auge durch Analysieren des Bildes des Auges und der dem Bild des Auges zugeordneten Kopforientierung innerhalb eines konvolutionalen neuralen Netzwerks (CNN = convolutional neural network) bestimmt. In einer Ausführungsform kann die Orientierung für das Auge eine Orientierung des Auges mit Bezug auf die Kamera oder mit Bezug auf den Kopf umfassen. Beispielsweise kann die Kamera die gleiche Kamera sein, für welche die dem Bild des Auges zugeordnete Kopforientierung bestimmt wird. In einem anderen Beispiel kann die Orientierung des Auges einen Blickwinkel mit Bezug auf die Kamera oder mit Bezug auf den Kopf umfassen. In noch einem anderen Beispiel kann die Orientierung des Auges einen Azimutwert (der z.B. eine Gierdrehung usw. darstellt) und einen Höhenwert (der z.B. eine Nickdrehung usw. darstellt) des Auges umfassen. In noch einem anderen Beispiel kann die Orientierung des Auges in der Form eines Vektors sein.
  • Des Weiteren kann in einer Ausführungsform das CNN eine Mehrzahl von Faltungsschichten, eine Poolbildungsschicht, eine vollständig verbundene Schicht und eine oder mehrere zusätzliche vollständig verbundene Schichten umfassen, wobei jede zusätzliche vollständig verbundene Schicht einem Kopforientierungscluster zugeordnet sein kann. In einer anderen Ausführungsform kann das CNN eine oder mehrere Übersprungsverbindungen implementieren. Beispielsweise kann eine Übersprungsschicht innerhalb des CNN implementiert sein, die ein Umgehen einer oder mehreren Schichten während des Datentransfers erlauben kann. Dies kann unteren Schichten innerhalb das CNN erlauben, auf Merkmale höherer Auflösung zuzugreifen, die bei höheren Schichten innerhalb des CNN lokalisiert sind.
  • In einer Ausführungsform kann das CNN ferner noch eine Verzweigung implementieren. Beispielsweise kann das CNN eine Mehrzahl von unterschiedlichen Verzweigungsschichten umfassen. In einem anderen Beispiel kann jede der Mehrzahl von Verzweigungsschichten einer unterschiedlichen vorbestimmten Gruppierung von Kopfposen zugeordnet sein. In noch einem anderen Beispiel kann die dem Bild des Auges zugeordnete Kopforientierung in einer der vorbestimmten Gruppierungen von Kopfposen klassifiziert sein. Die resultierende Gruppierungsklassifizierung kann die Verzweigungsschicht des CNN diktieren, die innerhalb des CNN verwendet wird, um die Orientierung des Auges zu bestimmen. Dies kann eine Genauigkeit der bestimmten Orientierung für das Auge verbessern.
  • In einer Ausführungsform kann das CNN ebenfalls vortrainiert sein. Beispielsweise kann das CNN mit Bildern trainiert werden, denen entsprechende Gewichte gegeben werden. In einem anderen Beispiel kann das CNN mit Gewichten einer verwandten Aufgabe während des Vortrainierens initialisiert werden (z.B. anstelle der Verwendung von Zufallswerten usw.). In noch einem anderen Beispiel kann ein Ähnlichkeitsniveau zwischen der aktuellen Aufgabe (z.B. der Bestimmung der Orientierung des Auges) und anderen Aufgaben bestimmt werden, die zuvor unter Benutzung des CNN durchgeführt wurden. Die vorherige Aufgabe, die das höchste Ähnlichkeitsniveau aufweist, kann ausgewählt werden, um dem CNN Gewichte während des Vortrainierens für die aktuelle Aufgabe bereitzustellen.
  • Außerdem kann in einer Ausführungsform das CNN unter Verwendung synthetischer (z.B. gerenderter) Daten trainiert werden. Beispielsweise können 3D-gerenderte graphische Daten als eine Datensatzeingabe verwendet werden, um das CNN zu trainieren. In einem anderen Beispiel können die gerenderten Daten die gleiche Verteilung wie reale Daten aufweisen, die während des Trainierens verwendet werden. Beispielsweise können die realen Daten nicht synthetische Bilder von realen Augen (z.B. nicht 3D-gerenderten Augen) umfassen. Dies kann eine Genauigkeit des trainierten CNN erhöhen.
  • Ferner kann in einer Ausführungsform das CNN unter Verwendung eines Trainingsdatensatzes trainiert werden, der gerenderte Bilder und reale Bilder umfasst. Beispielsweise kann jedes gerenderte Bild in den im Trainingsdatensatz umfassten gerenderten Bildern eine Darstellung eines Kopfes eines Subjekts Kopf umfassen, der eine bestimmte Kopforientierung und Blickrichtung aufweist. In einem anderen Beispiel können die gerenderten Bilder einem Bereich von Subjekten, Kopforientierungen, Blickrichtungen, simulierten Beleuchtungsbedingungen usw. zugeordnet sein.
  • Ferner noch kann in einer Ausführungsform das CNN in einer vorbestimmten Reihenfolge trainiert werden. Beispielsweise kann das CNN zuerst mit einem oder mehreren Gewichten initialisiert werden. Das CNN kann dann unter Verwendung der synthetischen Daten trainiert werden und als nächstes mit realen Daten trainiert werden. Dies kann eine Genauigkeit des trainierten CNN erhöhen. In einer anderen Ausführungsform können die gerenderten Bilder in einer Vortrainingsphase verwendet werden, um eine Grobeinstellung von Netzwerkparametern für das CNN zu implementieren, und die realen Bildern können in einer Trainingsphase verwendet werden, um eine Feineinstellung der Netzwerkparameter für das CNN zu implementieren.
  • In einer Ausführungsform können auch zusätzliche Informationen mit den synthetischen Daten bereitgestellt werden. Beispielsweise kann eine Bezugspunktschätzung durch Annotieren eines oder mehrere Punkte (z.B. Pixel usw.) innerhalb der gerenderten Daten durchgeführt werden. Beispielsweise können ein oder mehrere Punkte innerhalb der gerenderten Daten als „unteres Augenlid,“ „oberes Augenlid“, „Regenbogenhaut“, „Pupille“ usw. bezeichnet werden. Das CNN kann dann eine Liste von räumlichen Koordinaten (z.B. X- und Y-Koordinaten usw.) für jeden Punkt innerhalb des gerenderten Bildes erzeugen.
  • In einer anderen Ausführungsform kann eine Bildsegmentierung durch Segmentieren der gerenderten Daten in eine oder mehrere Regionen durchgeführt werden. Beispielsweise können die gerenderten Daten in eine Mehrzahl von unterschiedlichen Klassen segmentiert werden. Das CNN kann dann eine Klassifizierung für jeden Punkt innerhalb des Bildes erzeugen. In noch einer anderen Ausführungsform kann das CNN in einer verteilten Rechenumgebung (z.B. einer Cloud-Rechenumgebung usw.) implementiert werden.
  • Außerdem wird, wie in Operation 106 gezeigt, die Orientierung des Auges zurückgegeben. In einer Ausführungsform kann die Orientierung des Auges an eine oder mehrere Anwendungen (z.B. eine Foveated-Rendering-Anwendung virtueller Realität (VR) usw.) zurückgegeben werden. Beispielsweise kann die Foveated-Rendering-Anwendung ein Rendering-Niveau innerhalb einer Szene basierend auf der Orientierung des Auges einstellen. In einem anderen Beispiel kann das Foveated-Rendering innerhalb einer Anzeige eines Kraftfahrzeugs (z.B. einer Tastbildschirmanzeige, einer Head-Up-Display usw.) implementiert werden.
  • In einer anderen Ausführungsform kann die Orientierung des Auges verwendet werden, um einen Fahrer eines Fahrzeugs zu überwachen. In noch einer anderen Ausführungsform kann die Orientierung des Auges verwendet werden, um eine Blickkorrektur während einer Videokonferenz durchzuführen. In noch einer anderen Ausführungsform kann die Orientierung des Auges verwendet werden, um ein oder mehrere Elemente eines Videospiels (z.B. einen Avatar usw.) zu animieren.
  • Auf diese Weise kann eine zwangslose Blickverfolgung durchgeführt werden, wobei die Blickverfolgung innerhalb einer zwanglosen Umgebung und mit einer zwangslosen Kopfbewegung durch die Subjekte durchgeführt wird. Außerdem kann eine Subjekt- und/oder Sitzungskalibrierung während einer Blickverfolgung vermieden werden.
  • Weitere veranschaulichende Information wird nun hinsichtlich verschiedener optionaler Architekturen und Merkmalen dargelegt, mit denen das vorhergehende Rahmenwerk gemäß den Wünschen des Benutzers implementiert werden kann oder nicht. Es sei nachdrücklich bemerkt, dass die folgende Information für veranschaulichende Zwecke dargelegt wird und nicht auf irgendeine Art und Weise als begrenzend ausgelegt werden sollte. Jedes der folgenden Merkmale kann optional mit oder ohne den Ausschluss von anderen beschriebenen Merkmalen aufgenommen werden.
  • Parallelverarbeitungsarchitektur
  • 2 veranschaulicht eine Parallelverarbeitungseinheit (PPU) 200 gemäß einer Ausführungsform. In einer Ausführungsform ist die PPU 200 ein Multi-Threaded-Prozessor bzw. mehrsträngiger Prozessor, der auf einer oder mehreren integrierten Schaltung Vorrichtungen implementiert ist. Die PPU 200 ist eine Latenz-verbergende Architektur, die ausgestaltet ist, um eine große Anzahl von Threads bzw. Strängen parallel zu verarbeiten. Ein Thread bzw. Strang (d.h. ein Ausführungsthread) ist eine Instanziierung eines Satzes von Anweisungen, die konfiguriert sind, um von der PPU 200 ausgeführt zu werden. In einer Ausführungsform ist die PPU 200 eine Graphikverarbeitungseinheit (GPU), die konfiguriert ist, um eine Graphik-Rendering-Pipeline zur Verarbeitung von dreidimensionalen (3D) Graphikdaten zu implementieren, um zweidimensionale (2D) Bilddaten zur Anzeige auf einer Anzeigevorrichtung, wie beispielsweise einer Flüssigkristallanzeige(LCD)-Vorrichtung, zu erzeugen. In anderen Ausführungsformen kann die PPU 200 zum Durchführen von Allzweckberechnungen benutzt werden. Während ein beispielhafter paralleler Prozessor hier für veranschaulichende Zwecke bereitgestellt wird, sei nachdrücklich bemerkt, dass ein derartiger Prozessor lediglich für veranschaulichende Zwecke dargelegt wird, und dass ein beliebiger Prozessor benutzt werden kann, um dasselbe zu ergänzen und/oder zu ersetzen.
  • Wie in 2 gezeigt, umfasst die PPU 200 eine Eingabe/Ausgabe(E/A)-Einheit 205, eine Host-Schnittstelleneinheit 210, eine Frontend-Einheit 215, eine Planer-Einheit 220, eine Arbeitsverteilungs-Einheit 225, einen Hub 230, eine Kreuzschiene (Xbar) 270, einen oder mehrere allgemeine Verarbeitungscluster (GPCs) 250 und eine oder mehrere Partitions-Einheiten 280. Die PPU 200 kann mit einem Host-Prozessor oder anderen peripheren Vorrichtungen über einen Systembus 202 verbunden werden. Die PPU 200 kann ebenfalls mit einem lokalen Speicher verbunden werden, der eine Anzahl von Speichervorrichtungen 204 umfasst. In einer Ausführungsform kann der lokale Speicher eine Anzahl von Direktzugriffsspeicher(DRAM)-Vorrichtungen umfassen.
  • Die E/A-Einheit 205 ist konfiguriert, um Kommunikationen (d.h. Befehle, Daten, usw.) von einem Host-Prozessor (nicht gezeigt) über den Systembus 202 zu übertragen und zu empfangen. Die E/A-Einheit 205 kann mit dem Host-Prozessor direkt über den Systembus 202 oder durch eine oder mehrere Zwischenvorrichtungen, wie beispielsweise einer Speicherbrücke, kommunizieren. In einer Ausführungsform implementiert die E/A-Einheit 205 eine Umfangskomponenten-Zwischenverbindungsexpress(PCIe)-Schnittstelle für Kommunikationen über einen PCIe-Bus. In alternativen Ausführungsformen kann die E/A-Einheit 205 andere Arten von bekannten Schnittstellen zum Kommunizieren mit externen Vorrichtungen implementieren.
  • Die E/A-Einheit 205 ist mit einer Host-Schnittstelleneinheit 210 gekoppelt, die Pakete decodiert, die über den Systembus 202 empfangen wurden. In einer Ausführungsform stellen die Pakete Befehle dar, die konfiguriert sind, um die PPU 200 zu veranlassen, verschiedene Operationen durchzuführen. Die Host-Schnittstelleneinheit 210 überträgt die decodierten Befehle an verschiedene andere Einheiten der PPU 200, wie es die Befehle spezifizieren können. 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 beispielsweise eine oder mehrere Kopiermaschinen, einen Video-Codierer, einen Video-Decodierer, eine Leistungsverwaltungseinheit usw. (nicht explizit gezeigt) übertragen werden. Mit anderen Worten ist die Host-Schnittstelleneinheit 210 konfiguriert, um Kommunikationen zwischen und unter den verschiedenen logischen Einheiten der PPU 200 weiterzuleiten.
  • In einer Ausführungsform codiert ein Programm, das von dem Host-Prozessor ausgeführt wird, einen Befehlsstrom in einem Puffer, welcher der PPU 200 Arbeitslasten zur Verarbeitung bereitstellt. Eine Arbeitslast kann eine Anzahl von Anweisungen und Daten umfassen, die von diesen Anweisungen zu verarbeiten sind. Der Puffer ist eine Region in einem Speicher, der von sowohl dem Host-Prozessor als auch der PPU 200 zugänglich ist (d.h. Lesen/Schreiben). Beispielsweise kann die Host-Schnittstelleneinheit 210 konfiguriert sein, um auf den Puffer in einem Systemspeicher, der mit dem Systembus 202 verbunden ist, über Speicheranfragen, die über den Systembus 202 übertragen werden, durch die E/A-Einheit 205 zuzugreifen. In einer Ausführungsform schreibt der Host-Prozessor den Befehlsstrom in den Puffer und überträgt dann einen Zeiger an den Start des Befehlsstroms zu der PPU 200. Die Host-Schnittstelleneinheit 210 stellt der Frontend-Einheit 215 Zeiger auf einen oder mehrere Befehlsströme bereit. Die Frontend-Einheit 215 verwaltet den einen oder mehrere Ströme, wobei Befehle aus den Strömen gelesen und Befehle an die verschiedenen Einheiten der PPU 200 weitergeleitet werden.
  • Die Frontend-Einheit 215 ist mit eine Planer-Einheit 220 gekoppelt, welche die verschiedenen GPCs 250 konfiguriert, um Aufgaben zu verarbeiten, die durch den einen oder mehrere Ströme definiert sind. Die Planer-Einheit 220 ist konfiguriert, um Zustandsinformation zu verfolgen, die verschiedene Aufgaben betrifft, die von der Planer-Einheit 220 verwaltet werden. Der Zustand kann angeben, welchem GPC 250 eine Aufgabe zugewiesen ist, ob die Aufgabe aktiv oder inaktiv ist, ob eine Prioritätsebene der Aufgabe zugeordnet ist und so weiter. Die Planer-Einheit 220 verwaltet die Ausführung einer Mehrzahl von Aufgaben auf dem einen oder mehreren GPCs 250.
  • Die Planer-Einheit 220 ist mit einer Arbeitsverteilungs-Einheit 225 gekoppelt, die konfiguriert ist, um Aufgaben zur Ausführung auf den GPCs 250 zu versenden. Die Arbeitsverteilungs-Einheit 225 kann eine Anzahl von eingeplanten Aufgaben verfolgen, die von der Planer-Einheit 220 empfangen werden. In einer Ausführungsform verwaltet die Arbeitsverteilungs-Einheit 225 einen Pool für anhängige Aufgaben und einen Pool für aktive Aufgaben für jeden der GPCs 250. Der Pool für anhängige Aufgaben kann eine Anzahl von Schlitzen (z.B. 32 Schlitze) umfassen, die Aufgaben enthalten, die zugewiesen sind, von einem bestimmten GPC 250 verarbeitet zu werden. Der Pool für aktive Aufgaben kann eine Anzahl von Schlitzen (z.B. 4 Schlitze) für Aufgaben umfassen, die von den GPCs 250 aktiv verarbeitet werden. Wenn ein GPC 250 die Ausführung einer Aufgabe abschließt, wird diese Aufgabe aus dem Pool für aktive Aufgaben für den GPC 250 geräumt und eine der anderen Aufgaben wird aus dem Pool für anhängige Aufgaben ausgewählt und zur Ausführung auf dem GPC 250 eingeplant. Wenn eine aktive Aufgabe auf dem GPC 250 inaktiv war, wie beispielsweise während darauf gewartet wird, dass eine Datenabhängigkeit behoben wird, dann kann die aktive Aufgabe aus dem GPC 250 geräumt und zu dem Pool für anhängige Aufgaben zurückgeführt werden, während eine andere Aufgabe in dem Pool für anhängige Aufgaben ausgewählt und zur Ausführung auf dem GPC 250 eingeplant wird.
  • Die Arbeitsverteilungs-Einheit 225 kommuniziert mit dem einen oder mehreren GPCs 250 über eine Kreuzschiene bzw. XBar 270. Die XBar 270 ist ein Zwischenverbindungs-Netzwerk, das viele der Einheiten der PPU 200 mit anderen Einheiten der PPU 200 koppelt. Beispielsweise kann die XBar 270 konfiguriert sein, um die Arbeitsverteilungs-Einheit 225 mit einem bestimmten GPC 250 zu koppeln. Obwohl nicht explizit gezeigt, sind eine oder mehrere andere Einheiten der PPU 200 mit der Host-Einheit 210 gekoppelt. Die anderen Einheiten können ebenfalls mit der XBar 270 über einen Hub 230 verbunden sein.
  • Die Aufgaben werden von der Planer-Einheit 220 verwaltet und an einen GPC 250 durch die Arbeitsverteilungs-Einheit 225 versendet. Der GPC 250 ist konfiguriert, um die Aufgabe zu verarbeiten und Ergebnisse zu erzeugen. Die Ergebnisse können von anderen Aufgaben innerhalb des GPC 250 verbraucht werden, an einen unterschiedlichen GPC 250 über die XBar 270 weitergeleitet oder im Speicher 204 gespeichert werden. Die Ergebnisse können in den Speicher 204 über die Partitions-Einheiten 280 geschrieben werden, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in/aus dem Speicher 204 implementieren. In einer Ausführungsform umfasst die PPU 200 eine Anzahl U von Partitions-Einheiten 280, die gleich der Anzahl von separaten und unterschiedlichen Speichervorrichtungen 204 ist, die mit der PPU 200 gekoppelt sind. Eine Partitions-Einheit 280 wird nachstehend ausführlicher in Verbindung mit 3B beschrieben.
  • In einer Ausführungsform führt ein Host-Prozessor einen Treiber-Kernel aus, der eine AnwendungsprogrammierSchnittstelle (API) implementiert, die ermöglicht einer oder mehreren Anwendungen ermöglicht, die auf dem Host-Prozessor ausgeführt werden, Operationen zur Ausführung auf der PPU 200 einzuplanen. Eine Anwendung kann Anweisungen (d.h. API-Aufrufe) erzeugen, welche den Treiber-Kernel veranlassen, eine oder mehrere Aufgaben zur Ausführung durch die PPU 200 zu erzeugen. Der Treiber-Kernel gibt Aufgaben an einen oder mehrere Ströme aus, die von der PPU 200 verarbeitet werden. Jede Aufgabe kann eine oder mehrere Gruppen von in Beziehung stehenden Threads umfassen, die hier als ein Warp bezeichnet werden. Ein Thread-Block kann sich auf eine Mehrzahl von Gruppen von Threads beziehen, die Anweisungen umfassen, um die Aufgabe durchzuführen. Threads in der gleichen Gruppe von Threads können Daten durch einen gemeinsam benutzten Speicher austauschen. In einer Ausführungsform umfasst eine Gruppe von Threads 32 in Beziehung stehende Threads.
  • 3A veranschaulicht einen GPC 250 der PPU 200 von 2 gemäß einer Ausführungsform. Wie in 3A gezeigt, umfasst jeder GPC 250 eine Anzahl von Hardwareeinheiten zur Verarbeitung von Aufgaben. In einer Ausführungsform umfasst jeder GPC 250 einen Pipeline-Manager 310, eine Vor-Raster-Operationen-Einheit (PROP) 315, eine Raster-Engine 325, eine Arbeitsverteilungs-Kreuzschiene (WDX) 380, eine Speicherverwaltungseinheit (MMU) 390 und einen oder mehrere Texturverarbeitungscluster (TPCs) 320. Es wird anerkannt, dass der GPC 250 von 3A andere Hardwareeinheiten anstatt von oder zusätzlich zu in 3A gezeigten Einheiten umfassen kann.
  • In einer Ausführungsform wird der Betrieb des GPC 250 durch den Pipeline-Manager 310 gesteuert. Der Pipeline-Manager 310 verwaltet die Konfiguration des einen oder mehrerer TPCs 320 zur Verarbeitung von Aufgaben, die dem GPC 250 zugeteilt sind. In einer Ausführungsform kann der Pipeline-Manager 310 mindestens einen des einen oder mehrerer TPCs 320 konfigurieren, um mindestens einen Abschnitt einer Graphik-Rendering-Pipeline zu implementieren. Beispielsweise kann ein TPC 320 konfiguriert sein, um ein Vertex-Shader-Programm auf dem programmierbaren Streaming-Multiprozessor (SM) 340 auszuführen. Der Pipeline-Manager 310 kann ebenfalls konfiguriert sein, um Pakete, die von der Arbeitsverteilungs-Einheit 225 empfangen werden, an die geeigneten logischen Einheiten innerhalb des GPC 250 weiterzuleiten. Beispielsweise können einige Pakete an Festfunktions-Hardwareeinheiten in der PROP 315 und/oder der Raster-Engine 325 weitergeleitet werden, während andere Pakete an die TPCs 320 zur Verarbeitung durch die Primitiven-Engine 335 oder den SM 340 weitergeleitet werden können.
  • Die PROP-Einheit 315 ist konfiguriert, um Daten, die von der Raster-Engine 325 und den TPCs 320 erzeugt werden, an eine Raster-Operationen-Einheit (ROP-Einheit) in der Partitions-Einheit 280 weiterzuleiten, die nachstehend ausführlicher beschrieben wird. Die PROP-Einheit 315 kann ebenfalls konfiguriert sein, um Optimierungen zur Farbenmischung durchzuführen, Pixeldaten zu organisieren, Adressenübersetzungen und dergleichen durchzuführen.
  • Die Raster-Engine 325 umfasst eine Anzahl von Festfunktions-Hardwareeinheiten, die konfiguriert sind, um verschiedene Raster-Operationen durchzuführen. In einer Ausführungsform umfasst die Raster-Engine 325 eine Setup-Engine, eine Grobraster-Engine, eine Aussonderungs-Engine, eine Abschneide-Engine, eine Feinraster-Engine und eine Kachel-verschmelzende-Engine. Die Setup-Engine empfängt transformierte Vertices und erzeugt Ebenengleichungen, die den geometrischen Primitiven zugeordnet sind, die durch die Vertices definiert werden. Die Ebenengleichungen werden an die Grobraster-Engine übertragen, um Abdeckungsinformation (z.B. eine (x,y)-Abdeckungsmaske für eine Kachel) für die Primitive zu erzeugen. Die Ausgabe der Grobraster-Engine kann an die Aussonderungs-Engine übertragen werden, wo Fragmente, die Primitiven zugeordnet sind, die einen z-Test nicht bestehen, ausgesondert und an eine Abschneide-Engine übertragen werden, wo Fragmente, die außerhalb eines Betrachtungsstumpfes liegen, abgeschnitten werden. Diejenigen Fragmente, die Abschneidung und Aussonderung überleben, können an eine Feinraster-Engine weitergeben werden, um Attribute für die Pixelfragmente basierend auf den Ebenengleichungen zu erzeugen, die durch die Setup-Engine erzeugt werden. Die Ausgabe der Raster-Engine 325 umfasst Fragmente, die beispielsweise von einem Fragment-Shader zu verarbeiten sind, der innerhalb eines TPC 320 implementiert ist.
  • Jeder TPC 320, der in dem GPC 250 umfasst ist, umfasst einen M-Pipe-Controller (MPC) 330, eine Primitiven-Engine 335, einen oder mehrere SMs 340 und eine oder mehrere Textureinheiten 345. Der MPC 330 steuert den Betrieb des TPC 320, der von dem Pipeline-Manager 310 empfangene Pakete an die geeigneten Einheiten im TPC 320 weiterleitet. Beispielsweise können einem Vertex zugeordnete Pakete an die Primitiven-Engine 335 weitergeleitet werden, die konfiguriert ist, um der Vertex zugeordnete Vertexattribute aus dem Speicher 204 zu holen. Im Gegensatz dazu können einem Shader-Programm zugeordnete Pakete an den SM 340 übertragen werden.
  • In einer Ausführungsform sind die Textureinheiten 345 konfiguriert, um Texturabbildungen (z.B., ein 2D-Array von Texeln) aus dem Speicher 204 zu laden und die Texturabbildungen abzutasten, um abgetastete Texturwerte zur Verwendung in Shader-Programme zu erzeugen, die von dem SM 340 ausgeführt werden. Die Textureinheiten 345 implementieren Textur-Operationen, wie beispielsweise Filter-Operationen unter Verwendung von Mip-Abbildungen (d.h. Texturabbildungen mit einem unterschiedlichen Grad an Detail). Die Textureinheit 345 wird ebenfalls als der Lade/Speicher-Weg für den SM 340 zu der MMU 390 verwendet. In einer Ausführungsform umfasst jeder TPC 320 zwei (2) Textureinheiten 345.
  • Der SM 340 umfasst einen programmierbaren Streaming-Prozessor, der konfiguriert ist, um Aufgaben zu verarbeiten, die durch eine Anzahl von Threads dargestellt werden. Jeder SM 340 umfasst mehrere Threads (ist multithreaded) und ist konfiguriert, um eine Mehrzahl von Threads (z.B., 32 Threads) von einer bestimmten Gruppe von Threads nebenläufig auszuführen. In einer Ausführungsform implementiert der SM 340 eine SIMD(Einzelne-Anweisung, Mehrere-Daten)-Architektur, wobei jeder Thread in einer Gruppe von Threads (d.h. einem Warp) konfiguriert ist, um einen unterschiedlichen Satz von Daten basierend auf dem gleichen Satz von Anweisungen zu verarbeiten. Alle Threads in der Gruppe von Threads führen die gleichen Anweisungen aus. In einer anderen Ausführungsform implementiert der SM 340 eine SIMT(Einzelne Anweisung, Mehrere Threads)-Architektur, wobei jeder Thread in einer Gruppe von Threads konfiguriert ist, um einen unterschiedlichen Satz von Daten basierend auf dem gleichen Satz von Anweisungen zu verarbeiten, wobei jedoch einzelnen Threads in der Gruppe von Threads ermöglicht wird, während der Ausführung zu divergieren. Mit anderen Worten können, wenn eine Anweisung für die Gruppe von Threads zur Ausführung versandt wird, einige Threads in der Gruppe von Threads aktiv sein, wodurch die Anweisung ausgeführt wird, während andere Threads in der Gruppe von Threads inaktiv sein können, wodurch keine Operation (NOP) durchgeführt wird, anstatt die Anweisung auszuführen. Der SM 340 kann ausführlicher nachstehend in Verbindung mit 4 beschrieben werden.
  • Die MMU 390 stellt eine Schnittstelle zwischen dem GPC 250 und der Partitions-Einheit 280 bereit. Die MMU 390 kann Übersetzung von virtuellen Adressen in physikalische Adressen, Speicherschutz und Arbitrierung von Speicheranfragen bereitstellen. In einer Ausführungsform stellt die MMU 390 einen oder mehrere Adressenübersetzungspuffer (TLBs = translation lookaside buffers) zum Verbessern der Übersetzung von virtuellen Adressen in physikalische Adressen in dem Speicher 204 bereit.
  • 3B veranschaulicht eine Partitions-Einheit 280 der PPU 200 von 2 gemäß einer Ausführungsform. Wie in 3B gezeigt, umfasst die Partitions-Einheit 280 eine Raster-Operationen(ROP)-Einheit 350, einen L2-Cache-Speicher 360, eine Speicherschnittstelle 370 und eine L2-Kreuzschiene (XBar) 365. Die Speicherschnittstelle 370 ist mit dem Speicher 204 gekoppelt. Die Speicherschnittstelle 370 kann 16-, 32-, 64-, 128-Bit-Datenbusse oder dergleichen für Hochgeschwindigkeits-Datentransfer implementieren. In einer Ausführungsform umfasst die PPU 200 U Speicherschnittstellen 370, eine Speicherschnittstelle 370 pro Partitions-Einheit 280, wobei jede Partitions-Einheit 280 mit einer entsprechenden Speichervorrichtung 204 verbunden ist. Beispielsweise kann die PPU 200 mit bis zu U Speichervorrichtungen 204, wie beispielsweise einem synchronen dynamischen Speicher mit wahlweisem Zugriff mit Graphikdoppeldatenrate der Version 5 (GDDR5 SDRAM) verbunden sein. In einer Ausführungsform implementiert die Speicherschnittstelle 370 eine DRAM-Schnittstelle und U ist gleich 8.
  • In einer Ausführungsform implementiert die PPU 200 eine Mehrebenen-Speicherhierarchie. Der Speicher 204 ist außerhalb des Chips im SDRAM lokalisiert, der mit der PPU 200 verbunden ist. Daten aus dem Speicher 204 können geholt und in dem L2-Cache-Speicher 360 gespeichert werden, der innerhalb des Chips lokalisiert ist und zwischen den verschiedenen GPCs 250 gemeinsam benutzt wird. Wie gezeigt, umfasst jede Partitions-Einheit 280 einen Abschnitt des L2-Cache-Speichers 360, der einer entsprechenden Speichervorrichtung 204 zugeordnet ist. Cache-Speicher niedrigerer Ebene können dann in verschiedenen Einheiten innerhalb der GPCs 250 implementiert werden. Beispielsweise kann jeder der SMs 340 einen L1-Cache-Speicher implementieren. Der L1-Cache-Speicher ist ein privater Speicher, der für einen bestimmten SM 340 dediziert ist. Daten von dem L2-Cache-Speicher 360 können geholt und in jedem der L1-Cache-Speicher zur Verarbeitung in den Funktionseinheiten der SMs 340 gespeichert werden. Der L2-Cache-Speicher 360 ist mit der Speicherschnittstelle 370 und der XBar 270 gekoppelt.
  • Die ROP-Einheit 350 umfasst einen ROP-Manager 355, eine Farbeneinheit ROP (CROP-Einheit) 352 und eine Z ROP (ZROP) Einheit 354. Die CROP-Einheit 352 führt Raster-Operationen durch, welche die Pixelfarbe betreffen, wie beispielsweise Farbenkomprimierung, Pixelmischung und dergleichen. Die ZROP-Einheit 354 implementiert Tiefentesten in Verbindung mit der Raster-Engine 325. Die ZROP-Einheit 354 empfängt eine Tiefe für einen Abtastort, der einem Pixelfragment zugeordnet ist, von der Aussonderungs-Engine der Raster-Engine 325. Die ZROP-Einheit 354 prüft die Tiefe gegen eine entsprechende Tiefe in einem Tiefenpuffer für einen Abtastort, der dem Fragment zugeordnet ist. Wenn das Fragment den Tiefentest für den Abtastort besteht, dann aktualisiert die ZROP-Einheit 354 den Tiefenpuffer und überträgt ein Ergebnis des Tiefentests an die Raster-Engine 325. Der ROP-Manager 355 steuert den Betrieb der ROP-Einheit 350. Es wird anerkannt, dass sich die Anzahl von Partitions-Einheiten 280 von der Anzahl von GPCs 250 unterscheiden kann, und daher jede ROP-Einheit 350 mit jedem der GPCs 250 gekoppelt werden kann. Daher verfolgt der ROP-Manager 355 Pakete, die von den unterschiedlichen GPCs 250 empfangen werden, und bestimmt, zu welchem GPC 250 ein Ergebnis weitergeleitet wird, das durch die ROP-Einheit 350 erzeugt wurde. Die CROP-Einheit 352 und die ZROP-Einheit 354 sind mit dem L2-Cache-Speicher 360 über eine L2-XBar 365 gekoppelt.
  • 4 veranschaulicht den Streaming-Multiprozessor 340 von 3A gemäß einer Ausführungsform. Wie in 4 gezeigt, umfasst der SM 340 einen Anweisungs-Cache-Speicher 405, eine oder mehrere Planer-Einheiten 410, eine Registerdatei 420, einen oder mehrere Verarbeitungskerne 450, eine oder mehrere Spezialfunktionseinheiten (SFUs) 452, eine oder mehrere Lade/Speicher-Einheiten (LSUs) 454, ein Zwischenverbindungs-Netzwerk 480, einen gemeinsam benutzten Speicher 470 und einen L1-Cache-Speicher 490.
  • Wie oben beschrieben, versendet die Arbeitsverteilungs-Einheit 225 Aufgaben zur Ausführung auf den GPCs 250 der PPU 200. Die Aufgaben werden einem bestimmten TPC 320 innerhalb eines GPC 250 zugeteilt, und, wenn die Aufgabe einem Shader-Programm zugeordnet ist, kann die Aufgabe einem SM 340 zugeteilt werden. Die Planer-Einheit 410 empfängt die Aufgaben von der Arbeitsverteilungs-Einheit 225 und verwaltet die Anweisungs-Planung (instruction scheduling) für eine oder mehrere Gruppen von Threads (d.h. Warps), die dem SM 340 zugewiesen sind. Die Planer-Einheit 410 plant Threads zur Ausführung in Gruppen von parallel Threads, wobei jede Gruppe ein Warp genannt wird. In einer Ausführungsform umfasst jeder Warp 32 Threads. Die Planer-Einheit 410 kann eine Mehrzahl von unterschiedlichen Warps verwalten, wobei die Warps zur Ausführung geplant und dann Anweisungen von der Mehrzahl von unterschiedlichen Warps an die verschiedenen Funktionseinheiten (d.h. Kerne 350, SFUs 352 und LSUs 354) während jeden Taktzyklus versandt werden.
  • In einer Ausführungsform umfasst jede Planer-Einheit 410 eine oder mehrere Anweisungs-Versandeinheiten 415. Jede Versandeinheit 415 ist konfiguriert, um Anweisungen an eine oder mehrere der Funktionseinheiten zu übertragen. In der in 4 gezeigten Ausführungsform umfasst die Planer-Einheit 410 zwei Versandeinheiten 415, die ermöglichen, dass zwei unterschiedliche Anweisungen von dem gleichen Warp während jedes Taktzyklus versandt werden. In alternativen Ausführungsformen kann jede Planer-Einheit 410 eine einzige Versandeinheit 415 oder zusätzliche Versandeinheiten 415 umfassen.
  • Jeder SM 340 umfasst eine Registerdatei 420, die einen Satz von Registern für die Funktionseinheiten des SM 340 bereitstellt. In einer Ausführungsform ist die Registerdatei 420 zwischen jeder der Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein zugehöriger Abschnitt der Registerdatei 420 zugeteilt ist. In einer anderen Ausführungsform ist die Registerdatei 420 zwischen den unterschiedlichen Warps aufgeteilt, die von dem SM 340 ausgeführt werden. Die Registerdatei 420 stellt temporären Speicher für Operanden bereit, die mit den Datenwegen der Funktionseinheiten verbunden sind.
  • Jeder SM 340 umfasst L Verarbeitungskerne 450. In einer Ausführungsform umfasst der SM 340 eine große Anzahl (z.B., 128, usw.) von unterschiedlichen Verarbeitungskernen 450. Jeder Kern 450 kann eine vollständig in einer Pipeline angeordnete (fully-pipelined) Einfach-Präzisions-Verarbeitungseinheit umfassen, die eine Gleitkommaarithmetik-Logikeinheit und eine Ganzzahlarithmetik-Logikeinheit umfasst. Der Kern 450 kann ebenfalls eine Doppel-Präzisions-Verarbeitungseinheit umfassen, die eine Gleitkommaarithmetik-Logikeinheit umfasst. In einer Ausführungsform implementieren die Gleitkommaarithmetik-Logikeinheiten den IEEE 754-2008 Standard für Gleitkommaarithmetik. Jeder SM 340 umfasst ebenfalls M SFUs 452, die Spezialfunktionen durchführen (z.B., Attributauswertung, reziproke Quadratwurzel und dergleichen), und N LSUs 454, die Lade- und SpeicherOperationen zwischen dem gemeinsam benutzten Speicher 470 oder dem L1-Cache-Speicher 490 und der Registerdatei 420 implementieren. In einer Ausführungsform umfasst der SM 340 128 Kerne 450, 32 SFUs 452 und 32 LSUs 454.
  • Jeder SM 340 umfasst ein Zwischenverbindungs-Netzwerk 480, das jede der Funktionseinheiten mit der Registerdatei 420 verbindet und die LSU 454 mit der Registerdatei 420, dem gemeinsam benutzten Speicher 470 und dem L1-Cache-Speicher 490 verbindet. In einer Ausführungsform ist das Zwischenverbindungs-Netzwerk 480 eine Kreuzschiene, die konfiguriert sein kann, um beliebige der Funktionseinheiten mit einem beliebigen der Register in der Registerdatei 420 zu verbinden und die LSUs 454 mit der Registerdatei und Speicherorten in dem gemeinsam benutzten Speicher 470 und L1-Cache-Speicher 490 zu verbinden.
  • Der gemeinsam benutzte Speicher 470 ist ein Array von auf dem Chip befindlicher Speicher, der Datenspeicherung und Kommunikation zwischen dem SM 340 und der Primitiven-Engine 335 und zwischen Threads in dem SM 340 ermöglicht. In einer Ausführungsform umfasst der gemeinsam benutzte Speicher 470 64KB von Speicherkapazität. Ein L1-Cache-Speicher 490 ist im Weg von dem SM 340 zu der Partitions-Einheit 280. Der L1-Cache-Speicher 490 kann verwendet werden, um Lese- und Schreibvorgänge zwischen zu speichern. In einer Ausführungsform umfasst der L1-Cache-Speicher 490 24KB von Speicherkapazität.
  • Die oben beschriebene PPU 200 kann konfiguriert sein, um hochparallele Berechnungen viel schneller als herkömmliche CPUs durchzuführen. Parallele Berechnen weist Vorteile bei der Graphikverarbeitung, der Datenkomprimierung, der Biometrik, den Stromverarbeitungsalgorithmen und dergleichen auf.
  • Wenn für Allzweck-Parallelberechnung konfiguriert, kann eine einfachere Konfiguration verwendet werden. In diesem Modell werden, wie in 2 gezeigt, Festfunktions-Graphikverarbeitungseinheiten umgangen, wobei ein viel einfacheres Programmiermodell erzeugt wird. In dieser Konfiguration werden von der Arbeitsverteilungs-Einheit 225 Blöcke von Threads zugewiesen und direkt an die TPCs 320 verteilt. Die Threads in einem Block führen das gleiche Programm unter Verwendung einer eindeutigen Thread-ID in der Berechnung aus, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse erzeugt, wobei der SM 340 verwendet wird, um das Programm auszuführen und Berechnungen durchzuführen, damit der gemeinsam benutzte Speicher 470 zwischen Threads kommuniziert, und die LSU 454 verwendet wird, um den globalen Speicher durch Partitionierung des L1-Cache-Speichers 490 und der Partitions-Einheit 280 zu lesen und zu beschreiben.
  • Wenn für Allzweck-Parallelberechnung konfiguriert, kann der SM 340 ebenfalls Befehle schreiben, welche die Planer-Einheit 220 verwenden kann, um neue Arbeit auf den TPCs 320 zu starten.
  • In einer Ausführungsform umfasst die PPU 200 eine Graphikverarbeitungseinheit (GPU). Die PPU 200 ist konfiguriert, um Befehle zu empfangen, die Shader-Programme zur Verarbeitung von Graphikdaten spezifizieren. Graphikdaten können als ein Satz von Primitiven, wie beispielsweise Punkte, Linien, Dreiecke, Vierecke, Dreieckstreifen und dergleichen definiert sein. Typischerweise umfasst eine Primitive Daten, die eine Anzahl von Vertices für die Primitive (z.B., in einem Modellraum-Koordinatensystem) sowie auch Attribute spezifizieren, die jedem Vertex der Primitiven zugeordnet sind. Die PPU 200 kann konfiguriert sein, um die Graphikprimitive zu verarbeiten, um ein Frame-Puffer zu erzeugen (d.h. Pixeldaten für jedes der Pixel der Anzeige).
  • 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 dem Treiber-Kernel aus, der die Modelldaten anfragt, die zu rendern und anzuzeigen sind. Der Treiber-Kernel liest die Modelldaten und schreibt Befehle an den einen oder mehrere Ströme, um Operationen durchzuführen, um die Modelldaten zu verarbeiten. Die Befehle können unterschiedliche Shader-Programme referenzieren, die auf den SMs 340 der PPU 200 zu implementieren sind, die einen oder mehrere eines Vertex-Shader, Hull-Shader, Domain-Shader, Geometrie-Shader und eines Pixel-Shader umfassen können. Beispielsweise können eine oder mehrere der SMs 340 konfiguriert sein, um ein Vertex-Shader-Programm auszuführen, das eine Anzahl von Vertices verarbeitet, die durch die Modelldaten definiert sind. In einer Ausführungsform können die unterschiedlichen SMs 340 konfiguriert sein, um unterschiedliche Shader-Programme nebenläufig auszuführen. Beispielsweise kann eine erste Untermenge von SMs 340 konfiguriert sein, ein Vertex-Shader-Programm auszuführen, während eine zweite Untermenge von SMs 340 konfiguriert sein kann, ein Pixel-Shader-Programm auszuführen. Die erste Untermenge von SMs 340 verarbeitet Vertexdaten, um verarbeitete Vertexdaten zu erzeugen, und schreibt die verarbeiteten Vertexdaten in den L2-Cache-Speicher 360 und/oder den Speicher 204. Nachdem die verarbeiteten Vertexdaten gerastert sind (d.h. von dreidimensionalen Daten in zweidimensionale Daten im Bildschirmraum transformiert sind), um Fragmentdaten zu erzeugen, führt die zweite Untermenge von SMs 340 einen Pixel-Shader aus, um verarbeitete Fragmentdaten zu erzeugen, die dann mit anderen verarbeiteten Fragmentdaten gemischt werden und in den Frame-Puffer im Speicher 204 geschrieben werden. Das Vertex-Shader-Programm und das Pixel-Shader-Programm können nebenläufig ausgeführt werden, wobei unterschiedliche Daten von der gleichen Szene in einem Pipeline-Verfahren verarbeitet werden, bis alle der Modelldaten für die Szene gerenderten zu dem Frame-Puffer gerendert wurden. Dann wird der Inhalt des Frame-Puffers an einen Anzeigencontroller zur Anzeige auf einer Anzeigevorrichtung übertragen.
  • Die PPU 200 kann in einem Tischcomputer, einem Laptop-Computer, einem Tablet-Computer, einem Smartphone (z.B. einer drahtlosen handgehaltenen Vorrichtung), einem persönlichen digitalen Assistenten (PDA), einer Digitalkamera, einer handgehaltenen elektronischen Vorrichtung und dergleichen umfasst sein. In einer Ausführungsform ist die PPU 200 auf einem einzelnen Halbleitersubstrat verkörpert. In einer anderen Ausführungsform ist die PPU 200 in einem System-on-Chip (SoC) zusammen mit einer oder mehreren anderen Logikeinheiten, wie beispielsweise einer Rechner-mit-reduziertem-Befehlssatz(RISC)-CPU, einer Speicherverwaltungseinheit (MMU), einem Digital/Analog-Wandler (DAC) und dergleichen umfasst.
  • In einer Ausführungsform kann die PPU 200 auf einer Graphikkarte umfasst sein, die eine oder mehrere Speichervorrichtungen 204, wie beispielsweise GDDR5 SDRAM, umfasst. Die Graphikkarte kann konfiguriert sein, um sich mit einem PCIe-Schlitz auf einer Hauptplatine eines Tischcomputers schnittstellenmäßig zu verbinden, der beispielsweise einen Northbridge-Chipsatz und einen Southbridge-Chipsatz umfasst. In noch einer anderen Ausführungsform kann die PPU 200 eine integrierte Graphikverarbeitungseinheit (iGPU) sein, die in dem Chipsatz (d.h. Northbridge) der Hauptplatine umfasst ist.
  • 5 veranschaulicht ein System-on-Chip (SoC) 500, das die PPU 200 von 2 umfasst, gemäß einer Ausführungsform. Wie in 5 gezeigt, umfasst das SoC 500 eine CPU 550 und eine PPU 200, wie oben beschrieben. Das SoC 500 kann ebenfalls einen Systembus 202 umfassen, um Kommunikation zwischen den verschiedenen Komponenten des SoC 500 zu ermöglichen. Speicheranfragen, die von der CPU 550 und der PPU 200 erzeugt werden, können durch eine System-MMU 590 weitergeleitet werden, die von mehreren Komponenten des SoC 500 gemeinsam benutzt werden. Das SoC 500 kann ebenfalls eine Speicherschnittstelle 595 umfassen, die mit einer oder mehreren Speichervorrichtungen 204 gekoppelt ist. Die Speicherschnittstelle 595 kann beispielsweise eine DRAM-Schnittstelle implementieren.
  • Obwohl nicht explizit gezeigt, kann das SoC 500 andere Komponenten zusätzlich zu den in 5 gezeigten Komponenten umfassen. Beispielsweise kann das SoC 500 mehrere PPUs 200 (z.B., vier PPUs 200), einen Video-Codierer/Decodierer und einen drahtlosen Breitband-Sendeempfänger sowie auch andere Komponenten umfassen. In einer Ausführungsform kann das SoC 500 mit dem Speicher 204 in einer Package-on-Package(PoP)-Konfiguration umfasst sein.
  • 6 ist ein Konzeptdiagramm einer von der PPU 200 implementierten Graphikverarbeitungs-Pipeline 600 gemäß einer Ausführungsform. Die Graphikverarbeitungs-Pipeline 600 ist ein abstraktes Ablaufdiagramm der Verarbeitungsschritte, die implementiert werden, um 2D-Computer-erzeugte Bilder aus 3D-Geometriedaten zu erzeugen. Wie bekannt ist, können Pipeline-Architekturen Operationen mit langer Latenz effizienter durch Aufteilen der Operation in eine Mehrzahl von Stufen durchführen, wobei die Ausgabe jeder Stufe mit dem Eingang der nächsten aufeinanderfolgenden Stufe gekoppelt ist. Somit empfängt die Graphikverarbeitungs-Pipeline 600 Eingabedaten 601, die von einer Stufe zu der nächsten Stufe der Graphikverarbeitungs-Pipeline 600 übertragen werden, um Ausgabedaten 602 zu erzeugen. In einer Ausführungsform kann die Graphikverarbeitungs-Pipeline 600 eine Graphikverarbeitungs-Pipeline darstellen, die durch die OpenGL® API definiert ist. Als eine Option kann die Graphikverarbeitungs-Pipeline 600 im Kontext der Funktionalität und Architektur der vorherigen Figuren und/oder etwaiger nachfolgenden Figur(en) implementiert werden.
  • Wie in 6 gezeigt, umfasst die Graphikverarbeitungs-Pipeline 600 eine Pipeline-Architektur, die eine Anzahl von Stufen umfasst. Die Stufen umfassen, sind jedoch nicht beschränkt auf, eine Daten-Zusammenstellungsstufe 610, eine Vertex-Shading-Stufe 620, eine Primitiven-Zusammenstellungsstufe 630, eine Geometrie-Shading-Stufe 640, eine Darstellungsfeld-Skalierungs-, Aussonderungs- und Abschneide-(VSCC)-Stufe 650, eine Rasterungsstufe 660, eine Fragment-Shading-Stufe 670 und eine Raster-Operationen-Stufe 680. In einer Ausführungsform umfassen die Eingabedaten 601 Befehle, welche die Verarbeitungseinheiten konfigurieren, um die Stufen der Graphikverarbeitungs-Pipeline 600 und geometrische Primitive (z.B., Punkte, Linien, Dreiecke, Vierecke, Dreieckstreifen oder Fächer, usw.) zu implementieren, die mittels der Stufen zu verarbeiten sind. Die Ausgabedaten 602 können Pixeldaten (d.h. Farbdaten) umfassen, die in einen Frame-Puffer oder einen anderen Typ von Oberflächen-Datenstruktur in einem Speicher kopiert werden.
  • Die Daten-Zusammenstellungsstufe 610 empfängt die Eingabedaten 601, die Vertexdaten für Oberflächen höherer Ordnung, Primitive oder dergleichen spezifizieren. Die Daten-Zusammenstellungsstufe 610 sammelt die Vertexdaten in einem temporären Speicher oder Queue, wie beispielsweise durch Empfangen eines Befehls von dem Host-Prozessor, der einen Zeiger auf einen Puffer im Speicher umfasst und die Vertexdaten aus dem Puffer liest. Die Vertexdaten werden dann an die Vertex-Shading-Stufe 620 zur Verarbeitung übertragen.
  • Die Vertex-Shading-Stufe 620 verarbeitet Vertexdaten durch Durchführen eines Satzes von Operationen (d.h. eines Vertex-Shader oder eines Programms) einmal für jede der Vertices. Vertices können beispielsweise als ein 4-Koordinaten-Vektor (d.h. <x, y, z, w>) spezifiziert sein, der einem oder mehreren Vertexattributen (z.B., Farbe, Texturkoordinaten, Oberflächennormalen, usw.) zugeordnet ist. Die Vertex-Shading-Stufe 620 kann einzelne Vertexattribute, wie beispielsweise Position, Farbe, Texturkoordinaten und dergleichen, manipulieren. Mit anderen Worten führt die Vertex-Shading-Stufe 620 Operationen an den Vertex-Koordinaten oder anderen Vertexattributen durch, welche einer Vertex zugeordnet sind. Derartige Operationen umfassen gewöhnlicherweise Beleuchtungs-Operationen (d.h. Modifizieren von Farbattributen für einen Vertex) und Transformations-Operationen (d.h. Modifizieren des Koordinatenraums für einen Vertex). Beispielsweise können Vertices unter Verwendung von Koordinaten in einem Objekt-Koordinatenraum spezifiziert sein, die durch Multiplizieren der Koordinaten mittels einer Matrix transformiert werden, welche die Koordinaten aus dem Objekt-Koordinatenraum in einen Welt-Raum oder einen normierten Vorrichtungskoordinaten(NCD = Normalized Device Coordinates)-Raum übersetzt. Die Vertex-Shading-Stufe 620 erzeugt transformierte Vertexdaten, die an die Primitiven-Zusammenstellungsstufe 630 übertragen werden.
  • Die Primitiven-Zusammenstellungsstufe 630 sammelt Vertices, die mittels der Vertex-Shading-Stufe 620 ausgegeben werden, und gruppiert die Vertices in geometrischen Primitiven zur Verarbeitung durch die Geometrie-Shading-Stufe 640. Beispielsweise kann die Primitiven-Zusammenstellungsstufe 630 konfiguriert sein, um alle drei aufeinanderfolgenden Vertices als eine geometrische Primitive (d.h. ein Dreieck) zur Übertragung an die Geometrie-Shading-Stufe 640 zu gruppieren. In einigen Ausführungsformen können spezifische Vertices für aufeinanderfolgende geometrische Primitiven erneut verwendet werden (z.B. können zwei aufeinanderfolgende Dreiecke in einem Dreieckstreifen zwei Vertices gemeinsam benutzen). Die Primitiven-Zusammenstellungsstufe 630 überträgt geometrische Primitive (d.h. eine Sammlung von zugeordneten Vertices) an die Geometrie-Shading-Stufe 640.
  • Die Geometrie-Shading-Stufe 640 verarbeitet geometrische Primitiven durch Durchführen eines Satzes von Operationen (d.h. eines Geometrie-Shader oder Programms) an den geometrischen Primitiven. Tessellations-Operationen können eine oder mehrere geometrische Primitiven aus jeder geometrischen Primitive erzeugen. Mit anderen Worten kann die Geometrie-Shading-Stufe 640 jede geometrische Primitive in ein feineres Netz von zwei oder mehr geometrischen Primitiven zur Verarbeitung durch den Rest der Graphikverarbeitungs-Pipeline 600 unterteilen. Die Geometrie-Shading-Stufe 640 überträgt geometrische Primitive an die Darstellungsfeld-SCC-Stufe 650.
  • In einer Ausführungsform kann die Graphikverarbeitungs-Pipeline 600 innerhalb eines Streaming-Multiprozessors arbeiten und die Vertex-Shading-Stufe 620, die Primitiven-Zusammenstellungsstufe 630, die Geometrie-Shading-Stufe 640, die Fragment-Shading-Stufe 670 und/oder die damit zugeordnete Hardware/Software kann sequentiell Verarbeitungsoperationen durchführen. Sobald die sequentiellen Verarbeitungsoperationen in einer Ausführungsform abgeschlossen sind, kann die Darstellungsfeld-SCC-Stufe 650 die Daten benutzen. In einer Ausführungsform können Primitivendaten, die durch eine oder mehrere der Stufen in der Graphikverarbeitungs-Pipeline 600 verarbeitet wurden, in einen Cache-Speicher (z.B. einen L1-Cache-Speicher, einen Vertex-Cache-Speicher usw.) geschrieben werden. In diesem Fall kann in einer Ausführungsform die Darstellungsfeld-SCC-Stufe 650 auf die Daten in dem Cache-Speicher zugreifen. In einer Ausführungsform sind die Darstellungsfeld-SCC-Stufe 650 und die Rasterungsstufe 660 als Festfunktions-Schaltungen implementiert.
  • Die Darstellungsfeld-SCC-Stufe 650 führt Darstellungsfeld-Skalierung, Aussonderung und Abschneidung der geometrischen Primitiven durch. Jede Oberfläche, die gerendert wird, wird einer abstrakten Kameraposition zugeordnet. Die Kameraposition stellt einen Ort eines Betrachters dar, der die Szene betrachtet, und definiert einen Betrachtungsstumpf, der die Objekte der Szene einschließt. Der Betrachtungsstumpf kann eine Betrachtungs-Ebene, eine hintere Ebene und vier Abschneide-Ebenen umfassen. Jede geometrische Primitive, die vollständig außerhalb des Betrachtungsstumpfes ist, kann ausgesondert (d.h. verworfen) werden, weil die geometrische Primitive nicht zu der endgültigen gerenderten Szene beitragen wird. Jede geometrische Primitive, die innerhalb des Betrachtungsstumpfs und teilweise außerhalb des Betrachtungsstumpf ist, kann abgeschnitten werden (d.h. in ein neue geometrische Primitive transformiert werden, die innerhalb des Betrachtungsstumpf eingeschlossen ist). Des Weiteren können geometrische Primitiven jeweils basierend auf einer Tiefe des Betrachtungsstumpfes skaliert werden. Alle potentiell sichtbaren geometrischen Primitiven werden dann an die Rasterungsstufe 660 übertragen.
  • Die Rasterungsstufe 660 wandelt die 3D-geometrischen Primitiven in 2D-Fragmente um (die z.B. in der Lage sind, zur Anzeige benutzt zu werden, usw.). Die Rasterungsstufe 660 kann konfiguriert sein, um die Vertices der geometrischen Primitive zu benutzen, um einen Satz von Ebenengleichungen aufzustellen, von denen verschiedene Attribute interpoliert werden können. Die Rasterungsstufe 660 kann ebenfalls eine Abdeckungsmaske für eine Mehrzahl von Pixeln berechnen, die angibt, ob eine oder mehrere Abtastorte für das Pixel die geometrische Primitive schneiden. In einer Ausführungsform kann auch z-Testen durchgeführt werden, um zu bestimmen, ob die geometrische Primitive von anderen geometrischen Primitiven verdeckt wird, die bereits gerastert wurden. Die Rasterungsstufe 660 erzeugt Fragmentdaten (d.h. interpolierte Vertexattribute, die einem bestimmten Abtastort für jedes abgedeckte Pixel zugeordnet sind), die an die Fragment-Shading-Stufe 670 übertragen werden.
  • Die Fragment-Shading-Stufe 670 verarbeitet Fragmentdaten durch Durchführen eines Satzes von Operationen (d.h. eines Fragment-Shader oder eines Programms) an jedem der Fragmente. Die Fragment-Shading-Stufe 670 kann Pixeldaten (d.h. Farbenwerte) für das Fragment erzeugen, wie beispielsweise durch Durchführen von Beleuchtungs-Operationen oder Abtasten von Texturabbildungen unter Verwendung von interpolierten Texturkoordinaten für das Fragment. Die Fragment-Shading-Stufe 670 erzeugt Pixeldaten, die an die Raster-Operationen-Stufe 680 übertragen werden.
  • Die Raster-Operationen-Stufe 680 kann verschiedene Operationen an den Pixeldaten durchführen, wie beispielsweise Alpha-Tests, Stencil-Tests und Mischung der Pixeldaten mit anderen Pixeldaten, die anderen Fragmente entsprechen, die dem Pixel zugeordnet sind. Wenn die Raster-Operationen-Stufe 680 die Verarbeitung der Pixeldaten (d.h. der Ausgabedaten 602) beendet hat, können die Pixeldaten in ein Render-Ziel, wie beispielsweise einen Frame-Puffer, einen Farbenpuffer oder dergleichen, geschrieben werden.
  • Es wird anerkannt, dass eine oder mehrere zusätzliche Stufen in der Graphikverarbeitungs-Pipeline 600 zusätzlich zu oder anstatt einer oder mehrerer der oben beschriebenen Stufen umfasst sein können. Verschiedene Implementierungen der abstrakten Graphikverarbeitungs-Pipeline können unterschiedliche Stufen implementieren. Des Weiteren können eine oder mehrere der oben beschriebenen Stufen der Graphikverarbeitungs-Pipeline in einigen Ausführungsformen (wie beispielsweise der Geometrie-Shading-Stufe 640) ausgeschlossen sein. Andere Arten von Graphikverarbeitungs-Pipelines werden betrachtet, als innerhalb des Schutzumfangs der vorliegenden Offenbarung zu liegen. Des Weiteren können beliebige der Stufen der Graphikverarbeitungs-Pipeline 600 von einer oder mehreren dedizierten Hardwareeinheiten innerhalb eines Graphikprozessors, wie beispielsweise der PPU 200, implementiert werden. Andere Stufen der Graphikverarbeitungs-Pipeline 600 können durch programmierbare Hardwareeinheiten, wie beispielsweise dem SM 340 der PPU 200, implementiert werden.
  • Die Graphikverarbeitungs-Pipeline 600 kann über eine Anwendung implementiert werden, die von einem Host-Prozessor, wie beispielsweise einer CPU 550, ausgeführt wird. In einer Ausführungsform kann ein Vorrichtungstreiber eine Anwendungsprogrammierschnittstelle (API) implementieren, die verschiedene Funktionen definiert, die von einer Anwendung benutzt werden können, um graphische Daten zur Anzeige zu erzeugen. Der Vorrichtungstreiber ist ein Softwareprogramm, das eine Mehrzahl von Anweisungen umfasst, die den Betrieb der PPU 200 steuern. Die API stellt eine Abstraktion für einen Programmierer bereit, die einem Programmierer erlaubt, spezialisierte Graphikhardware zu benutzen, wie beispielsweise die PPU 200, um die graphischen Daten zu erzeugen, ohne zu verlangen, dass der Programmierer den spezifischen Anweisungssatz für die PPU 200 benutzen muss. Die Anwendung kann einen API-Aufruf umfassen, der an den Vorrichtungstreiber für die PPU 200 weitergeleitet wird. Der Vorrichtungstreiber interpretiert den API-Aufruf und führt verschiedene Operationen durch, um auf den API-Aufruf zu antworten. In einigen Fällen kann der Vorrichtungstreiber Operationen durch Ausführen von Anweisungen auf der CPU 550 durchführen. In anderen Fällen kann der Vorrichtungstreiber Operationen, zumindest teilweise, durch Starten von Operationen auf der PPU 200 durchführen, wobei eine Eingabe/Ausgabe-Schnittstelle zwischen der CPU 550 und der PPU 200 benutzt wird. In einer Ausführungsform ist der Vorrichtungstreiber konfiguriert, um die Graphikverarbeitungs-Pipeline 600 unter Benutzung der Hardware der PPU 200 zu implementieren.
  • Verschiedene Programme können innerhalb der PPU 200 ausgeführt werden, um die verschiedenen Stufen der Graphikverarbeitungs-Pipeline 600 zu implementieren. Beispielsweise kann der Vorrichtungstreiber ein Kernel auf der PPU 200 starten, um die Vertex-Shading-Stufe 620 auf einem SM 340 (oder mehreren SMs 340) durchzuführen. Der Vorrichtungstreiber (oder den von der PPU 200 ausgeführten Anfangskernel) kann ebenfalls andere Kernels auf der PPU 200 starten, um andere Stufen der Graphikverarbeitungs-Pipeline 600 durchzuführen, wie beispielsweise die Geometrie-Shading-Stufe 640 und die Fragment-Shading-Stufe 670. Außerdem können einige der Stufen der Graphikverarbeitungs-Pipeline 600 auf einer festen Hardwareeinheit implementiert werden, wie beispielsweise einem Rasterer oder einem Daten-Assembler, der innerhalb der PPU 200 implementiert ist. Es wird anerkannt, dass Ergebnisse von einem Kernel durch eine oder mehrere intervenierende Festfunktions-Hardwareeinheiten verarbeitet werden können, bevor sie von einem nachfolgenden Kernel auf einem SM 340 verarbeitet werden.
  • 7 veranschaulicht ein beispielhaftes System 700, in welchem die verschiedene Architektur und/oder Funktionalität der verschiedenen vorangehenden Ausführungsformen implementiert werden können. Wie gezeigt, wird ein System 700 bereitgestellt, das mindestens einen zentralen Prozessor 701 aufweist, der mit einem Kommunikationsbus 702 verbunden ist. Der Kommunikationsbus 702 kann unter Anwendung eines beliebigen geeigneten Protokolls, wie beispielsweise durch PCI (periphere Komponenten-Zwischenverbindung), PCI-Express, AGP (beschleunigter Graphikport), HyperTransport oder durch ein oder mehrere andere Bus-Protokolle oder Punkt-Zu-Punkt-Kommunikationsprotokolle implementiert werden. Das System 700 kann ferner einen Hauptspeicher 704 aufweisen. Steuerlogik (Software) und Daten sind in dem Hauptspeicher 704 gespeichert, der die Form eines Speichers mit wahlfreiem Zugriff (RAM) aufweisen kann.
  • Das System 700 umfasst ferner Eingabevorrichtungen 712, einen Graphikprozessor 706 und eine Anzeige 708, d.h. eine herkömmliche CRT (Kathodenstrahlröhre), eine LCD (Flüssigkristallanzeige), eine LED (lichtemittierende Diode), eine Plasmaanzeige oder dergleichen. Eine Anwendereingabe kann über die Eingabevorrichtungen 712, beispielsweise Tastatur, Maus, berührungsempfindliche Auflage, Mikrophon und dergleichen, empfangen werden. In einer Ausführungsform kann der Graphikprozessor 706 eine Mehrzahl von Shading-Modulen, ein Rastermodul, usw. aufweisen. Jedes der vorangehenden Module kann in einer einzelnen Halbleiterplattform angeordnet sein, so dass eine graphische Verarbeitungseinheit (GPU) gebildet ist.
  • In der vorliegenden Beschreibung kann eine einzelne Halbleiterplattform eine einzelne alleinstehende halbleiterbasierte integrierte Schaltung oder einen Chip bezeichnen. Es sollte beachtet werden, dass der Begriff einzelne Halbleiterplattform auch Multi-Chip-Module mit vergrößerter Verbindungsstruktur bezeichnen kann, die einen chipinternen Betrieb simulieren, und die eine wesentliche Verbesserung gegenüber der Verwendung einer Realisierung mit herkömmlicher zentraler Recheneinheit (CPU) und einem Bus darstellen. Selbstverständlich können die verschiedenen Module auch separat oder in verschiedenen Kombinationen von Halbleiterplattformen entsprechend den Bedürfnissen des Anwenders angeordnet sein.
  • Das System 700 kann ebenfalls einen sekundären Speicher 710 umfassen. Der sekundäre Speicher 710 umfasst beispielsweise eine Festplatte und/oder eine entfernbare Speicherplatte, die ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein Kompaktdisketten-Laufwerk, ein Laufwerk für eine digitale Vielseitigkeitsdiskette (DVD), ein Aufzeichnungsgerät, einen Flash-Speicher mit universellem seriellen Bus (USB) repräsentieren kann. Die entfernbare Speichervorrichtung liest in eine und/oder schreibt aus einer entfernbaren Speichereinheit auf eine bekannte Art und Weise.
  • Computerprogramme oder Computer-Steuerlogikalgorithmen können in dem Hauptspeicher 704 und/oder in dem sekundären Speicher 710 gespeichert sein. Derartige Computerprogramme versetzen, wenn sie ausgeführt werden, das System 700 in die Lage, verschiedene Funktionen auszuführen. Der Hauptspeicher 704, der Speicher 710 und/oder ein beliebiger anderer Speicher sind mögliche Beispiele für computerlesbare Medien.
  • In einer Ausführungsform können die Architektur und/oder Funktionalität der verschiedenen vorherigen Figuren im Zusammenhang mit dem zentralen Prozessor 701, dem Graphikprozessor 706, einer integrierten Schaltung (nicht gezeigt), die zumindest einen Teil der Fähigkeiten sowohl des zentralen Prozessors 701 als auch des Graphikprozessors 706 aufweist, mit einem Chipsatz (das heißt, einer Gruppe aus integrierten Schaltungen, die so gestaltet ist, dass sie als Einheit zur Ausführung zugehöriger Funktionen arbeiten und als solche verkauft wird, usw.) und/oder mit einer anderen integrierten Schaltung für diese Angelegenheit implementiert werden.
  • Ferner können die Architektur und/oder Funktionalität der verschiedenen vorangehenden Figuren auch im Rahmen eines allgemeinen Computersystems, eines Systems aus Leiterplatten, eines Systems mit Spielekonsole, die für Unterhaltungszwecke gedacht ist, im Rahmen eines anwendungsspezifischen Systems und/oder im Rahmen eines anderen gewünschten Systems implementiert werden. Beispielsweise kann das System 700 die Form eines Tischrechners, eines Laptops, eines Dienstleister-Rechners, eines Arbeitsplatzrechners, von Spielekonsolen, eines eingebetteten Systems und/oder einer beliebigen anderen Art von Logik annehmen. Des Weiteren kann das System 700 die Form verschiedener anderer Vorrichtungen annehmen, wozu gehören, ohne Einschränkung, eine Vorrichtung als persönlicher digitaler Assistent (PDA), eine Vorrichtung als Mobiltelefon, eine Vorrichtung als Fernsehgerät, usw.
  • Obwohl dies nicht gezeigt ist, kann das System 700 mit einem Netzwerk (beispielsweise einem Telekommunikationsnetzwerk, einem Nahbereichsnetzwerk (LAN), einem drahtlosen Netzwerk, einem Weitbereichsnetzwerk (WAN), wie etwa das Internet, einem Gerät-zu-Gerät-Netzwerk, einem Kabelnetzwerk oder dergleichen) für Kommunikationszwecke verbunden sein.
  • Ferner kann, obwohl nicht gezeigt, das System 700 mit einem Netzwerk (z.B. einem Telekommunikationsnetzwerk, Lokalbereichsnetzwerk (LAN), drahtlosem Netzwerk, Weitbereichsnetzwerk (WAN), wie beispielsweise dem Internet, Peer-to-Peer-Netzwerk, Kabelnetzwerk oder dergleichen) für Kommunikationszwecke gekoppelt sein.
  • Poseninvariante Erscheinungs-basierte Blickschätzung unterstützt durch synthetische Daten
  • Beispielhafter Überblick
  • 8 veranschaulicht ein Ablaufdiagramm eines Verfahrens 800 zum Erstellen von Daten zur Eingabe in ein CNN gemäß einer Ausführungsform. Wie in Operation 802 gezeigt, wird ein Bild durch eine Kamera erfasst. Außerdem wird, wie in Operation 804 gezeigt, eine Gesichtserfassung innerhalb des Bildes durchgeführt, um ein Bild eines Gesichts eines Subjekts zu bestimmen. Ferner wird, wie in Operation 806 gezeigt, ein Ort eines Auges innerhalb des Bildes des Gesichts bestimmt und der Ort des Auges wird verwendet, um ein Bild des Auges zu erzeugen. Beispielsweise kann das Bild des Auges durch Zuschneiden eines vorbestimmten Patch um das Auge innerhalb des Bildes des Gesichts erzeugt werden, um das Bild des Auges zu erzeugen.
  • Ebenfalls wird, wie in Operation 808 gezeigt, eine Kopfposenschätzung durchgeführt, um Gier-, Nick- und Rollwerte für das Bild des Gesichts relativ zu einer Kameraebene zu bestimmen. Außerdem wird, wie in Operation 810 gezeigt, eine Normierung an dem Kopf des Subjekts durchgeführt, um den Rollwert zu korrigieren und das Bild über eine perspektivische Projektion zu verziehen, um von dem Gesichtspunkt einer normierten Kamera zu sein, die direkt auf das Auge schaut. Des Weiteren werden, wie in Operation 812 gezeigt, Gier- und Nickwerte des Kopfes mit Bezug auf die normierte Kamera für den korrigierten Kopf des Subjekts bestimmt. Ferner noch werden, wie in Operation 814 gezeigt, das Bild des Auges und die Gierdrehung und Nickdrehung des Kopfes einem CNN bereitgestellt. Ebenfalls bestimmt, wie in Operation 816 gezeigt, das CNN eine Gierdrehung und Nickdrehung des Auges.
  • Einführung
  • Die Fernblickschätzung erzeugte ein sehr großes Interesse in der Forschungsgemeinschaft und in der Industrie. Sie weist zahlreiche Anwendungen auf, welche die Ausgestaltung von industriellen und Web-Schnittstellen, Verbessern der Kraftfahrzeugsicherheit durch Überwachung des visuellen Verhaltens von Fahrern, Ausgestalten blickgesteuerter Computerschnittstellen für erhöhte Zugänglichkeit, Korrigieren der Blickrichtung während Videokonferenzen, „rendering foveated“ Anzeigen in den bandbreitenbeschränkten Umgebungen von Augmented und Virtual Reality Headsets usw. umfassen.
  • In einer Ausführungsform kann eine CNN-basierte Klassifiziererarchitektur für eine genaue Erscheinungs-basierte Blickschätzung ein Bild des Auges und eine Kopfpose als Eingabe nehmen. Dies kann eine Kopfposenabhängige CNN-Architektur mit Übersprungsverbindungen umfassen, welche die Genauigkeit der Blickschätzung verbessert. In einer anderen Ausführungsform kann ein synthetischer Datensatz bereitgestellt werden, und eine Methodologie zum Vortrainieren mit synthetischen Daten und zur Feinabstimmung auf Realweltdaten, um die Genauigkeit einer Erscheinungs-basierten Blickschätzung an dem letzteren zu verbessern, kann bereitgestellt werden.
  • Außerdem kann in einer Ausführungsform eine posenabhängige CNN-Architektur mit gegabelten, vollständig verbundenen Schichten und Übersprungsverbindungen implementiert werden, die zu verbesserte Genauigkeit für die Blickschätzung führen kann. Das CNN kann unter Verwendung eines Modells, das zuvor für eine allgemeine Objektgesichtspunktschätzung trainiert wurde, feinabgestimmt werden. Ferner kann ein hochwertiger synthetischer Blickdatensatz erzeugt werden und eine neue Methodologie für den Vortrainier und zur Feinabstimmung von CNNs mit dem Datensatz kann implementiert werden, um die Genauigkeit der Blickschätzung auf Datensätzen der realen Welt zu verbessern.
  • Ferner kann in einer Ausführungsform ein konvolutionales neurales Netzwerk (CNN) verwendet werden, um eine Blickrichtung einer Person basierend auf einem mit einem einfachen Bildsensor erfassten Bildes zu schätzen. In einer anderen Ausführungsform kann ein Blickverfolgungssystem implementiert werden, dass ein Bild eines Gesichts eines Benutzers unter Verwendung herkömmlicher Bildsensoren (Verbraucherqualität) und Umgebungslicht erfasst. Das Blickverfolgungssystem kann ebenfalls ein CNN benutzen, um erfasste Bilddaten zu analysieren. Das CNN kann basierend auf Ausgestaltung und Training konfiguriert werden, um einen geschätzten Blickvektor basierend auf den erfassten Bilddaten und einem dem CNN bereitgestellten Kopforientierungsvektor als Eingabe zu erzeugen.
  • Allgemeine Architektur
  • 9 veranschaulicht ein beispielhaftes System zur Blickschätzung gemäß einer Ausführungsform. Wie in 9 gezeigt, umfasst das Blickverfolgungssystem 900 einen oder mehrere Bildsensoren 902, einen Speicher 904, einen Prozessor 906 und ein CNN 908. In einer Ausführungsform kann jeder Bildsensor 902 mit einer Linse und/oder anderer Elektronik in einer Kameraanordnung gekoppelt und konfiguriert sein, um Bilder zu erfassen und Bilder in einem Bildformat (z.B. RGB) in dem Speicher 904 zu speichern. Der Prozessor 906 kann die erfassten Bilder aus dem Speicher 904 lesen und kann die Bilder verarbeiten. In einer anderen Ausführungsform kann der Prozessor 906 das erfasste Bild analysieren, um eine Kopforientierung eines Subjekts in dem Bild zu schätzen. Beispielsweise können herkömmliche Bildanalysetechniken verwendet werden, um zu schätzen, wie ein Kopf relativ zu einer dem Bildsensor zugeordneten Achse orientiert ist. In einer anderen Ausführungsform kann ein Trägheitssensor, der an dem Kopf des Subjektes angebracht ist, verwendet werden, um die Orientierung des Kopfes zu berechnen.
  • In einer Ausführungsform kann die Orientierung des Kopfes des Subjekts in Bezug auf Nicken, Gieren und Rollen relativ zu einer Achse normal zu der Oberfläche des Bildsensors oder jedes anderen geeignet definierten Koordinatensystems gegeben werden. Das Bild kann normiert werden, um Rollen durch Durchführen einer affinen Transformation des Bilds zu korrigieren, um die Orte der Augen des Subjekts relativ zu einer horizontalen Achse auszurichten. Das Bild kann ferner über eine perspektivische Projektion verzogen werden, um von dem Gesichtspunkt einer Kamera zu sein, die direkt in die Mitte des Gesichts oder Auges schaut. Die Kopforientierung des Subjekts kann dann unter Verwendung einer Gierwinkelkomponente (θ) und einer Nickkomponente (Φ) dargestellt werden. Die Gierwinkelkomponente gibt an, zu welchen Grad der Kopf des Subjekts nach links oder rechts mit Bezug auf einen oder mehrere Bildsensoren 902 gekippt ist, und die Nickkomponente gibt an, zu welchem Grad der Kopf des Subjekts nach oben oder unten mit Bezug auf einen oder mehrere Bildsensoren 902 gekippt ist. Das normierte Bild kann dann ferner zugeschnitten werden, um ein Augenpatch zu erzeugen (d.h., ein zugeschnittenes Bild des Auges des Subjekts). Das Augenpatch kann zusammen mit dem Kopforientierungsvektor (d.h., <θ,Φ>) als Eingabe in das CNN 908 bereitgestellt werden, um einen geschätzten Blickvektor zu erzeugen.
  • Klassifiziererarchitektur
  • 10 veranschaulicht ein beispielhaftes CNN 1000 gemäß einer Ausführungsform. Wie in 10 gezeigt, umfasst ein CNN 1000 fünf Faltungsschichten 1002A-E, wobei die ersten, zweiten und fünften Schichten 1002A, B und E von Max-Poolbildungsschichten 1004A-C und einer ersten vollständig verbundenen Schicht 1006 gefolgt werden. Außerdem werden mehrere zusätzliche vollständig verbundene Schichten 1008A-N nach der ersten vollständig verbundenen Schicht 1006 implementiert, wobei jede zusätzliche vollständig verbundene Schicht 1008A-N einem bestimmten Kopforientierungscluster zugeordnet ist. Wie hier verwendet, bezieht sich ein Kopforientierungscluster auf einen Cluster von ähnlichen Kopforientierungen.
  • In einer Ausführungsform können die Azimut- und Höhenwinkel (angegeben in Radianten) zur Kopforientierung mit den 512 Merkmalen in den jeweiligen Schichten 1008A-N für die verschiedenen Posencluster verkettet sein, was zu einem Vektor von Länge 514 führen kann. Dieser Vektor kann in die endgültigen Ausgabenschicht 1010 des CNN 1000 eingegeben werden, der die Azimut- und Höhenwinkel (in Radianten) für den Blickvektor erzeugen kann. Restübersprungsverbindungen 1012 können ebenfalls für den Klassifizierer implementiert werden, um leichten Zugriff auf die Merkmale der unteren Ebene des Netzwerks aufzuweisen. Die gleichgerichtete Lineareinheit (ReLU = rectified Linear Unit) kann als die Aktivierungsfunktion nach allen Faltungs- und vollständig verbundenen Schichten verwendet werden. In einer anderen Ausführungsform können die Annotationen in jeder Box innerhalb des CNN 1000 der Reihenfolge nach darstellen: die Filterkerngrößen, den CNN-Schichttyp, die Anzahl von ausgegebenen Merkmalkarten und den Schritt.
  • Kopfposenabhängigkeit
  • In einer Ausführungsform kann eine Schätzung der Blickorientierung basierend auf einem Augenpatch für Gruppen von ähnlichen Kopforientierungen genauer sein. Mit anderen Worten kann das CNN verbesserte Ergebnisse erzeugen, wenn eine Kopforientierung innerhalb einiger relativ kleiner Grenzen festgelegt ist. In der realen Welt ist die Kopforientierung jedoch zwanglos und daher kann das CNN ausgestaltet sein, die Kopforientierung auszugleichen, ohne Genauigkeit zu verlieren.
  • Beispielsweise kann die Kopforientierung eine signifikante Änderung in der Erscheinung von Augenbildern verursachen. Ein Trainieren eines Blicknetzwerks, um gegen Kopfposen invariant zu sein, kann als Antwort darauf durchgeführt werden. In einer Ausführungsform kann es für Erscheinungs-basierte Algorithmen einfacher sein, sich über den Blickwinkel zurückzubilden, wenn die Augenbilder begrenztere Kopfposen aufweisen. Diese Verbesserung kann auf einer Abnahme in der Variation in der Erscheinung von Augenbildern zum Begrenzen von Kopfposen und einer Begrenzung einer Verteilung von Blickwinkeln beruhen, was die Arbeitsbelastung des Netzwerks erleichtern kann.
  • In einer Ausführungsform kann ein Netzwerk spezifisch auf eine Gruppe von Kopfposen mit kleinen Variationen trainiert werden. Beispielsweise können die Kopfposenvektoren der Trainingsdaten in K-Gruppen unter Verwendung von k-Mittel-Clustering und Kosinus-Entfernung geclustert werden. Der Wert von K kann durch Kreuzvalidierung gewählt und von der Verteilung von der Kopfpose in den Daten abhängen. In einer Ausführungsform kann die Verteilung von Blickwinkeln von der Kopfpose abhängig sein.
  • Außerdem kann in einer Ausführungsform eine Gewichtenteilung zwischen den CNNs der unterschiedlichen Kopfposencluster implementiert werden. Beispielsweise können die Schichten unterer Ebenen (conv1 bis fc6) für alle Kopfposencluster gemeinsam gehalten werden, wobei jedoch getrennte Schichten fc7 und fc8 für jede von ihnen verwendet werden können. Dies kann sicherstellen, dass generische Merkmale unterer Ebenen die gleichen für alle Cluster sind, während kopfposenabhängige Merkmale für jeden der Kopfposencluster in den letzten beiden vollständig verbundenen Schichten gelernt werden.
  • Auf diese Weise kann der Kopforientierungsvektor benutzt werden, um unterschiedliche Wege innerhalb des CNN zu aktivieren, die für unterschiedliche Kopforientierungscluster ausgestaltet sind. Diese CNN-Architektur kann Platz sparen, in dem nicht verlangt wird, dass unterschiedliche volle CNNs für jeden Kopforientierungscluster erzeugt werden, sondern dass durch gemeinsame Nutzung die Faltungsschichten und Poolbildungsschicht zwischen allen Kopforientierungsclustern gemeinsam benutzt werden und lediglich die endgültigen vollständig verbundenen Schichten getrennt werden, um die endgültige Klassifizierung durchzuführen, um den geschätzten Blickvektor zu erzeugen. Die gemeinsame Nutzung der Faltungsschichten kann das System daran hindern, unterschiedliche CNNs für jedes analysierte Augenpatch neu zu laden und zu initialisieren, was Speicherbandbreite und Rechenressourcen in einem Prozessor oder Prozessoren sparen kann, die mit dem Implementieren der CNNs beauftragt sind.
  • Wahl eines Vortrainierten Modells
  • In einer Ausführungsform kann ein Initialisieren eines CNN von einem vortrainierten Modell zum Trainieren die Gesamtleistung des CNN verbessern. In einer Ausführungsform kann das CNN kann mit den Gewichten von einem anderen Modell initialisiert werden (z.B. einem Modell, das zum Schätzen der Gesichtspunkte von generischen Objekten usw. trainiert ist). Dieses Netzwerk kann ursprünglich für die Aufgabe der gemeinsamen Objekterfassung und Gesichtspunktschätzung unter Verwendung eines großen Korpus von synthetisch gerenderten Bildern von unterschiedlichen Objektkategorien trainiert werden. Das Verwenden der Gewichte von diesem Netzwerk, um die Gewichte des aktuellen Blickschätzungs-CNN zu initialisieren, kann zu verbesserter Genauigkeit führen.
  • Übersprungsverbindungen
  • Für die Aufgabe der Blickschätzung kann eine subtile Änderung in der relativen Position des Augapfels mit Bezug auf die Lederhaut eine beträchtliche Änderung in dem Blickwert verursachen. In derartigen Fällen können Poolbildungsoperationen, welche die Merkmale invariant gegen lokale Translation und kleinen geometrischen Transformationen machen können, nicht verwendet werden. Außerdem können die Merkmale der unteren Schicht reich an Semantik sein, die eine Charakterisierung der lokalen Transformationen verbessern. Um die Merkmale der unteren Schichten des CNN ohne irgendeine Poolbildungsoperation zu verwenden, können Übersprungsverbindungen in dem Netzwerk hinzugefügt werden.
  • Übersprungsverbindungen können zu dem Netzwerk hinzugefügte Verknüpfungen umfassen, so dass Information durch einen geringeren nicht linearen Weg läuft. Beispielsweise können Faltungsschichten conv1a und conv3a jeweils zu sowohl conv1 als auch conv3 hinzugefügt werden, so dass ihre ausgegebenen Merkmalskarten eine konsistente Dimension von 13 × 13 × 256 aufweisen. Eine elementweise Hinzufügung dieser Merkmale kann durchgeführt werden. Die Merkmale können zu der Schicht pool5nach einer 3x3 Faltungsoperation hinzugefügt werden. Auf diese Weise kann das Netzwerk einen Weg von der Eingabe zu der Ausgabe aufweisen, der keine Poolbildungsoperation beinhaltet. Die somit erhaltenen Merkmalen können aufgrund der Netzwerktiefe unterschiedlich sein und aufgrund leichten Zugriffs auf die Merkmale unterer Ebene durch Übersprungsverbindungen auch reich an Semantik sein.
  • Synthetischer Datensatz
  • In einer Ausführungsform kann ein Datensatz von hochwertigen photorealistischen synthetischen Bildern erzeugt werden (z.B. unter Verwendung eines Modells, das hochwertige 3D-Scans von Modellen des menschlichen Kopfes und getrennten Augapfelmodellen enthalten, die unabhängig von den Kopfmodellen posiert werden können, usw.). In einer anderen Ausführungsform können die Augenlider des Subjekts synchron mit der Aufwärts-abwärts-Bewegung des Augapfels posiert werden. Farbbilder von Augen können unter Verwendung von Strahlenverfolgung und Suboberflächenstreuung auf einer Graphikverarbeitungseinheit gerendert werden.
  • In noch einer anderen Ausführungsform können die Kopfgier- und Kopfnickwinkel der Bilder gleichmäßig in dem Bereich von [-60;60]° verteilt sein. Die Nick- und Gierdrehungen des Augapfels können jeweils innerhalb der Bereiche von [-25;25]° und [-35;35]° um jede Kopfpose gleichmäßig verteilt sein. Die Bilder können weite Variationen in der Beleuchtung enthalten, die durch bildbasierte erneute Beleuchtung mit unterschiedlichen Umgebungskarten erreicht werden kann.
  • 11 zeigt verschiedene Beispiele 1102A-C von gerenderten Augenpatches, die als Teil des Trainingsdatensatzes erzeugt werden, gemäß einer Ausführungsform.
  • Synthetisches Daten-Targeting
  • Das Vorhandensein von Unterschieden in den vorbekannten Verteilungen von Blick- und Kopfposen der Trainings- und Testdatensätze kann eine Schlüsselrolle beim Bestimmen der Leistung des Netzwerks spielen. Wenn eine Zielverteilung bekannt ist, kann der Trainingssatz erneut abgetastet werden, so dass seine Verteilung mit dem des Testsatzes übereinstimmt. Dies kann zu verbesserter Leistung bei der Querdatensatzauswertung führen. Diese Technik der Zielausrichtung des synthetischen Datensatzes, um den Verteilungen der Realweltdatensätze zu entsprechen, kann wirksamer sein. Beispielsweise können, um die synthetischen Trainingsdaten erneut abzutasten, 4-dimensionale Histogramme aus den Blickgier-, Blicknick-, Kopfposengier- und Kopfposennickwerten mit identischen Bin-Mitten und Bin-Breiten von 2 aus den synthetischen und Zieldatensätzen erzeugt werden. Da die synthetischen Daten eine ungleiche Verteilung aufweisen können, können ihre Wahrscheinlichkeitswerte für jedes Bin mit der Zielverteilung multipliziert werden. Dann kann eine kleinere Anzahl von synthetischen Bildern für jedes Bin zufällig abgetastet werden, so dass seine gesamte pdf dem Zieldatensatz ähneln kann.
  • Wirkungen einer Kopfpose
  • In einer Ausführungsform kann das Bereitstellen einer Kopfpose als Eingabe in das CNN zusätzlich zu einem Augenbild die Genauigkeit der Blickschätzung erhöhen. In einer anderen Ausführungsform kann das Aussondern der Schichten höherer Ebene fc7 und fc8 in mehrere Zweige für unterschiedliche eingegebene Kopfposen zu einer Verringerung des Winkelfehlers führen. In noch einer anderen Ausführungsform kann die Hinzufügung von Übersprungsverbindungen zu dem CNN mit kopfgetrennten Schichten einen Blickfehler des CNN verringern.
  • Auf diese Weise kann die vorgeschlagene
  • Netzwerkausgestaltung dadurch rechenmäßig effizient sein, dass sie CNN-Merkmale niedriger Ebene für alle Kopfposenverzweigungen erneut verwenden kann und unterschiedliche Trennungsgrenzen für die verschiedenen Kopfposen in dem semantischen Merkmalraum hoher Ebene lernen kann. Diese Architektur kann ebenfalls für die Zwecke des Trainierens von CNNs gegenüber der Verwendung von mehreren unterschiedlichen Netzwerken für die verschiedenen Kopfposencluster wünschenswert sein. Die Netzwerkdaten von allen Kopfposencluster können verfügbar sein, um die Gewichte der konvolutionalen und vollständig verbundenen Schichten unterer Ebene des Netzwerks zu lernen.
  • Schlussfolgerung
  • In einer Ausführungsform kann ein Blickverfolger ein CNN verwenden, um auf eine Blickrichtung eines Bildes des Auges zu schließen. Die Eingaben in das CNN können eine Orientierung eines Kopfes und ein Farb-/Intensitätsbild eines Auges umfassen. In einer anderen Ausführungsform kann, um eine Trainingsprozedur für das CNN zu initialisieren, ein vortrainiertes CNN verwendet werden, das ursprünglich für eine Aufgabe einer Objektposenschätzung unter Verwendung eines Korpus von synthetisch gerenderten Bildern trainiert wurde. In noch einer anderen Ausführungsform kann eine Architektur für das CNN entwickelt werden, die in die endgültigen prädiktiven Schichten gabeln kann, um sich in eine Aufgabe der Blickvorhersage für Bilder des unter unterschiedlichen Kopfposen erfassten Auges zu spezialisieren. Diese Architektur kann eine Genauigkeit des CNN erhöhen. In noch einer anderen Ausführungsform kann ein Algorithmus unter Verwendung eines CNN zum Erfassen von Vergleichspunkten entlang einer Grenze eines Auges, einer Regenbogenhaut und einer Pupille entwickelt werden, wobei das CNN unter Verwendung von nur synthetisch erzeugten Daten trainiert werden kann.
  • Innerhalb der Kategorie von Algorithmen, die ein Augenbild und eine Kopfpose als Eingabe benutzen, kann ein Algorithmus für die Erscheinungs-basierte Blickschätzung implementiert werden, der die Genauigkeit von aktuellen Implementierungen verbessert. Ein genaue posenabhängige CNN-Architektur kann für die Blickschätzung implementiert werden. Außerdem kann eine Datenbank von hochwertigen synthetisch gerenderten Bildern implementiert werden. Ferner kann eine wirksame Vortrainings-Methodologie zum Verwenden synthetischer Daten verwendet werden, um die Genauigkeit der Blickschätzung an Realweltdaten zu verbessern. In einer Ausführungsform kann die posenabhängige CNN-Architektur ebenfalls auf Vollgesichtsbasierte Blickschätzungserfahren erweitert werden. In einer anderen Ausführungsform kann ein adversatorisches CNN-Training verwendet werden, um die Domain der synthetischen Daten an verschiedene Realwelt-Datensätze anzupassen. In noch einer anderen Ausführungsform kann eine größere Subjektvariabilität in dem synthetischen Datensatz umfasst sein.
  • Die oben offenbarte Technologie kann zwanglos, kopfposen- und subjektunabhängig sowie kalibrierungsfrei sein. Sie kann ein Bild verwenden, das mit vielen unterschiedlichen (und kostengünstigen) Bildsensoren erfasst wird, und kann in hellem Sonnenlicht, in Kraftwagen, im Freien usw. implementiert werden.
  • Während verschiedene Ausführungsformen oben beschrieben wurden, sei zu verstehen, dass sie lediglich beispielhaft und nicht begrenzend präsentiert wurden. Somit sollte die Breite und der Umfang einer bevorzugten Ausführungsform nicht durch irgendeine der oben beschriebenen beispielhaften Ausführungsformen begrenzt werden, sondern sollte nur den folgenden Ansprüchen und ihrer Äquivalente definiert werden.

Claims (18)

  1. Verfahren, umfassend: Identifizieren eines Bildes eines Auges und einer dem Bild des Auges zugeordneten Kopforientierung; Bestimmen einer Orientierung für das Auge durch Analysieren innerhalb eines konvolutionalen neuralen Netzwerks (CNN) das Bild des Auges und die dem Bild des Auges zugeordnete Kopforientierung; und Zurückgeben der Orientierung des Auges.
  2. Verfahren gemäß Anspruch 1, wobei das Bild des Auges von einem Bild eines Gesichts eines Subjekts unter Verwendung von Umgebungs- oder Infrarotlicht erhalten wird.
  3. Verfahren gemäß Anspruch 1 oder 2, wobei die dem Bild des Auges zugeordnete Kopforientierung eine Orientierung eines Kopfes eines Subjekts mit Bezug auf eine Kamera umfasst.
  4. Verfahren gemäß einem der vorangehenden Ansprüche, wobei die Orientierung des Auges eine Orientierung des Auges mit Bezug auf eine Kamera oder mit Bezug auf den Kopf umfasst.
  5. Verfahren gemäß einem der vorangehenden Ansprüche, wobei die dem Bild des Auges zugeordnete Kopforientierung einen Vektor, der einen Azimutwert angibt, der eine Gierdrehung eines normierten Gesichtsbildes mit Bezug auf eine Kamera darstellt, und einen Höhenwert, der eine Nickdrehung des normierten Gesichtsbildes mit Bezug auf die Kamera darstellt, umfasst.
  6. Verfahren gemäß einem der vorangehenden Ansprüche, wobei die Orientierung des Auges einen Vektor umfasst, der einen Azimutwert, der eine Gierdrehung des Auges mit Bezug auf eine Kamera darstellt, und einen Höhenwert, der eine Nickdrehung des Auges mit Bezug auf die Kamera darstellt, angibt.
  7. Verfahren gemäß einem der vorangehenden Ansprüche, wobei das CNN eine oder mehrere Übersprungsverbindungen implementiert, die ein Umgehen einer oder mehrerer Schichten des CNN während eines Datentransfers erlauben.
  8. Verfahren gemäß einem der vorangehenden Ansprüche, wobei das CNN eine Mehrzahl von unterschiedlichen Verzweigungsschichten umfasst, wobei jede der Mehrzahl von unterschiedlichen Verzweigungsschichten einer unterschiedlichen vorbestimmten Gruppierung von Kopfposen zugeordnet ist.
  9. Verfahren gemäß Anspruch 8, wobei die dem Bild des Auges zugeordnete Kopforientierung in eine der unterschiedlichen vorbestimmten Gruppierungen von Kopfposen klassifiziert wird.
  10. Verfahren gemäß einem der vorangehenden Ansprüche, wobei das CNN mit Gewichten von einer verwandten Aufgabe während des Vortrainings initialisiert wird, anstatt Zufallswerte zu verwenden.
  11. Verfahren gemäß einem der vorangehenden Ansprüche, wobei das CNN unter Verwendung von 3D-gerenderten graphischen Daten trainiert wird.
  12. Verfahren gemäß einem der vorangehenden Ansprüche, wobei das CNN zuerst mit einem oder mehreren Gewichten initialisiert, dann unter Verwendung synthetischer Daten trainiert und dann mit realen Daten trainiert wird.
  13. Verfahren gemäß einem der vorangehenden Ansprüche, wobei das CNN unter Verwendung 3D gerenderter graphischer Daten trainiert und eine Bezugspunktschätzung durch Annotieren eines oder mehrerer Punkte innerhalb der 3D-gerenderten graphischen Daten durchgeführt wird.
  14. Verfahren gemäß einem der vorangehenden Ansprüche, wobei das CNN unter Verwendung von 3D-gerenderten graphischen Daten trainiert und eine Bildsegmentierung durch Segmentieren der 3D-gerenderten graphischen Daten in eine oder mehrere Regionen durchgeführt wird.
  15. Verfahren gemäß einem der vorangehenden Ansprüche, wobei die Orientierung des Auges an eine Foveated-Rendering-Anwendung zurückgegeben wird.
  16. System, umfassend: einen Prozessor, der konfiguriert ist, um: ein Bild eines Auges und eine dem Bild des Auges zugeordnete Kopforientierung zu identifizieren; eine Orientierung für das Auge durch Analysieren innerhalb eines konvolutionalen neuralen Netzwerks (CNN) das Bild des Auges und die dem Bild des Auges zugeordnete Kopforientierung zu bestimmen; und die Orientierung des Auges zurückzugeben.
  17. System gemäß Anspruch 16, wobei der Prozessor konfiguriert ist, um ein Verfahren auszuführen, wie in einem der Ansprüche 2 bis 15 erwähnt.
  18. Computerlesbares Speichermedium, das Anweisungen speichert, die, wenn durch einen Prozessor ausgeführt, den Prozessor veranlassen, Schritte durchzuführen, die ein Verfahren umfassen, wie in einem der Ansprüche 1 bis 15 erwähnt.
DE102017131364.8A 2016-12-28 2017-12-28 Zwanglose erscheinungs-basierte blickschätzung Pending DE102017131364A1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201662439870P 2016-12-28 2016-12-28
US62/439,870 2016-12-28
US15/855,887 US11132543B2 (en) 2016-12-28 2017-12-27 Unconstrained appearance-based gaze estimation
US15/855,887 2017-12-27

Publications (1)

Publication Number Publication Date
DE102017131364A1 true DE102017131364A1 (de) 2018-06-28

Family

ID=62509995

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102017131364.8A Pending DE102017131364A1 (de) 2016-12-28 2017-12-28 Zwanglose erscheinungs-basierte blickschätzung

Country Status (1)

Country Link
DE (1) DE102017131364A1 (de)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109598207A (zh) * 2018-11-14 2019-04-09 华南理工大学 一种基于卷积神经网络的快速人眼跟踪方法
CN111401107A (zh) * 2019-01-02 2020-07-10 上海大学 基于特征融合神经网络的多模态人脸识别方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109598207A (zh) * 2018-11-14 2019-04-09 华南理工大学 一种基于卷积神经网络的快速人眼跟踪方法
CN109598207B (zh) * 2018-11-14 2021-08-10 华南理工大学 一种基于卷积神经网络的快速人眼跟踪方法
CN111401107A (zh) * 2019-01-02 2020-07-10 上海大学 基于特征融合神经网络的多模态人脸识别方法
CN111401107B (zh) * 2019-01-02 2023-08-18 上海大学 基于特征融合神经网络的多模态人脸识别方法

Similar Documents

Publication Publication Date Title
US11132543B2 (en) Unconstrained appearance-based gaze estimation
DE102019102279A1 (de) Erzeugung von synthetischen Bildern zum Trainieren eines Neuronal-Netzwerkmodells
DE102021119726A1 (de) Dreidimensionale objektrekonstruktion aus einem video
DE102018121282A1 (de) Differenzierbare rendering-pipeline für inverse graphik
DE102017100609A1 (de) Online-Erfassung und Klassifizierung von dynamischen Gesten mit rekurrenten faltenden neuronalen Netzwerken
DE102018130924A1 (de) Systeme und Verfahren zur dynamischen Gesichtsanalyse mittels eines rekurrenten neuronalen Netzes
DE102017124573A1 (de) Systeme und verfahren zum beschneiden von neuronalen netzen für eine betriebsmitteleffiziente folgerung
DE102020124932A1 (de) Vorrichtung und Verfahren zur Echtzeit-Grafikverarbeitung mittels lokaler und cloudbasierter Grafikverarbeitungsbetriebsmittel
DE102018113845A1 (de) Systeme und Verfahren zum Trainieren von neuronalen Netzwerken mit dünnbesetzten Daten
DE102018127647A1 (de) Systeme und verfahren zum trainieren neuronaler netzwerke auf regression ohne referenzdaten-trainingsmuster
DE102018009315A1 (de) Verfahren tiefgehenden Lernens zum Trennen von Reflexions- und Übertragungsbildern, die an einer halbreflektierenden Oberfläche in einem Computerbild einer Realweltszene sichtbar sind
DE102018111407A1 (de) Methode zum maschinellen lernen für automatisches modellieren von mehrwertigen ausgaben
DE102020115026A1 (de) Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität
DE102019103310A1 (de) Schätzer for einen optimalen betriebspunkt für hardware, die unter einer beschränkung der gemeinsam genutzten leistung/wärme arbeitet
DE102018116552A1 (de) Sakkadische umleitung zur fortbewegung von virtueller realität
DE102020131896A1 (de) Deep learning-basierte auswahl von abtastwerten für adaptives supersampling
DE102020107080A1 (de) Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz
DE102021207678A1 (de) Streamen eines komprimierten lichtfelds
DE102020132557A1 (de) Vorrichtung und verfahren für asynchrones raytracing
DE102020132272A1 (de) Verfahren und vorrichtung zum codieren basierend auf schattierungsraten
DE102020118860A1 (de) Techniken zum vorladen von texturen beim rendering von graphik
DE102018128699A1 (de) Einstellen einer Winkelabtastrate während eines Renderings unter Verwendung von Blickinformationen
DE102020132377A1 (de) Vorrichtung und Verfahren zur Drosselung einer Raytracing-Pipeline
DE102022100360A1 (de) Framework für maschinelles lernen angewandt bei einer halbüberwachten einstellung, um instanzenverfolgung in einer sequenz von bildframes durchzuführen
DE102021121109A1 (de) Wiederherstellung dreidimensionaler modelle aus zweidimensionalen bildern

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication