Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 10136|Antwort: 0

Die Entwicklung der neuronalen Netzwerkarchitektur: Eine umfassende Übersicht über mehr als zehn Architekturen von LeNet5 bis ENet

[Link kopieren]
Veröffentlicht am 24.04.2018 13:08:47 | | | |
LeNet5
LeNet5 wurde 1994 geboren und ist eines der ersten konvolutionellen neuronalen Netzwerke und hat das Feld des Deep Learning vorangebracht. Seit 1988, nach vielen erfolgreichen Iterationen, trägt dieses bahnbrechende Werk von Yann LeCun den Namen LeNet5 (siehe: Gradient-Based Learning Applied to Document Recognition).


Die Architektur von LeNet5 basiert auf der Idee, dass (insbesondere) die Merkmale eines Bildes über das gesamte Bild verteilt sind und dass Konvolution mit lernbaren Parametern eine effiziente Möglichkeit ist, ähnliche Merkmale an mehreren Orten mit einer kleinen Anzahl von Parametern zu extrahieren. Damals gab es keine GPU, die beim Training half, und selbst die CPU war langsam. Daher ist die Möglichkeit, Parameter zu speichern, ebenso wie der Berechnungsprozess, eine Schlüsselentwicklung. Das ist das Gegenteil davon, jeden Pixel als separaten Eingang für ein großes, mehrschichtiges neuronales Netzwerk zu verwenden. LeNet5 erklärt, dass diese Pixel nicht in der ersten Schicht verwendet werden sollten, da das Bild starke räumliche Korrelationen aufweist, die durch die Verwendung unabhängiger Pixel im Bild als unterschiedliche Eingabemerkmale nicht ausgenutzt werden können.

Die LeNet5-Funktionen lassen sich wie folgt zusammenfassen:

Faltungsneuronale Netze verwenden drei Schichten als Sequenz: konvolutionell, gepoolt, nichtlinear → Dies ist wahrscheinlich ein zentrales Merkmal des Bild-Deep Learning seit diesem Artikel!
Verwenden Sie Faltungen, um räumliche Merkmale zu extrahieren
Teilstichprobe unter Verwendung von Abbildung auf den räumlichen Mittelwert
Nichtlinearität in Form von hyperbolischer Tangente (tanh) oder S-förmiger (Sigmoid).
Mehrschichtige neuronale Netzwerke (MLPs) dienen als letzte Klassifikatoren
Dünne Verbindungsmatrizen zwischen Schichten vermeiden hohe Rechenkosten

Insgesamt ist dieses Netzwerk der Ausgangspunkt für eine Vielzahl neuerer Architekturen und hat viele in diesem Bereich inspiriert.

Intervall
Von 1998 bis 2010 befand sich das neuronale Netzwerk in der Inkubationsphase. Die meisten Menschen sind sich ihrer wachsenden Kraft nicht bewusst, während andere Forscher es langsam tun. Dank des Aufkommens von Mobiltelefonkameras und günstigen Digitalkameras werden immer mehr Daten genutzt. Und auch die Rechenleistung wächst, CPUs werden schneller und GPUs werden zu Werkzeugen für verschiedene Zwecke. Diese Trends haben es neuronalen Netzen ermöglicht, sich voranzutreiben, wenn auch langsam. Daten und Rechenleistung machen die Aufgaben, die neuronale Netze erledigen können, immer interessanter. Danach wurde alles klar......

Dan Ciresan Netz
Im Jahr 2010 veröffentlichten Dan Claudiu Ciresan und Jürgen Schmidhuber eine Implementierung des frühesten neuronalen GPU-Netzwerks. Diese Implementierung ist ein neurales Netzwerk mit 9 Schichten, das auf einem NVIDIA GTX 280-Grafikprozessor läuft, einschließlich Forward- und Backpropagation.

AlexNet
2012 veröffentlichte Alex Krizhevsky Alex Alexet (siehe: ImageNet Classification with Deep Convolutional Neural Networks), eine tiefere und breitere Version von LeNet, die den schwierigen ImageNet-Wettbewerb mit deutlichem Vorsprung gewann.


AlexNet erweitert LeNets Ideen auf größere neuronale Netzwerke, die viel komplexere Objekte und Objektebenen lernen können. Die Beiträge dieses Werks sind:

Verwenden Sie eine modifizierte lineare Einheit (ReLU) als Nichtlinearität
Verwenden Sie die Dropout-Technik, um während des Trainings gezielt einzelne Neuronen zu ignorieren, um Überanpassung von Modellen zu vermeiden
Überschreiben Sie einen großen Pool, um den durchschnittlichen Effekt von durchschnittlichem Pooling zu vermeiden
Reduziere die Trainingszeit mit der NVIDIA GTX 580 GPU

Zu diesem Zeitpunkt können GPUs eine höhere Anzahl von Kernen bereitstellen als CPUs, und die Trainingszeit kann um das Zehnfache verlängert werden, was wiederum größere Datensätze und größere Bilder ermöglicht.

Der Erfolg von AlexNet hat zu einer kleinen Revolution geführt. Faltungsneuronale Netze sind heute das Rückgrat des Deep Learning und sind zum Synonym für "große neuronale Netze, die nützliche Aufgaben lösen können" geworden.

Überleistung
Im Dezember 2013 schlug das Yann LeCun-Labor an der New York University eine Ableitung von AlexNet vor: Overfeat (siehe: OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks). Dieser Artikel schlug außerdem eine lernende Begrenzungsbox vor, was zu vielen Arbeiten zu demselben Thema führte. Ich glaube, es ist besser, zu lernen, Objekte zu teilen, als künstliche Begrenzungsboxen zu lernen.

VGG
Das VGG-Netzwerk der Universität Oxford (siehe: Very Deep Convolutional Networks for Large-Scale Image Recognition) ist das erste Netzwerk, das kleinere 3×3-Filter auf jeder Faltungsschicht verwendet und kombiniert, um sie als Faltungssequenz zu verarbeiten.

Dies scheint das Gegenteil von LeNets Prinzip zu sein, bei dem große Faltungen verwendet werden, um ähnliche Merkmale in einem Bild zu erhalten. Im Gegensatz zu AlexNets 9×9- oder 11×11-Filtern werden die Filter immer kleiner und nähern sich der berüchtigten 1×1-Faltungsanomalie, die LeNet zumindest auf der ersten Ebene des Netzwerks zu vermeiden versucht. VGG hat jedoch große Fortschritte gemacht, indem es mehrere 3×3-Faltungen hintereinander verwendet, um die Effekte größerer rezeptiver Felder wie 5×5 und 7×7 nachzuahmen. Diese Ideen wurden auch in neueren Netzwerkarchitekturen wie Inception und ResNet verwendet.


VGG-Netzwerke verwenden mehrere 3×3-Faltungsschichten, um komplexe Merkmale zu charakterisieren. Beachten Sie, dass die 3., 4., 5. Blöcke der VGG-E: 256×256 und 512×512 3×3-Filter mehrfach verwendet werden, um komplexere Merkmale und Kombinationen dieser Merkmale zu extrahieren. Der Effekt entspricht einem großen 512×512-Klassifikator mit 3 Faltungsschichten. Das bedeutet natürlich, dass es viele Parameter und Lernmöglichkeiten gibt. Diese Netzwerke sind jedoch schwer zu trainieren und müssen in kleinere Netzwerke unterteilt und Schicht für Schicht angesammelt werden. Dies liegt daran, dass es keine robuste Methode zur Regularisierung des Modells gibt oder dass aufgrund der großen Anzahl an Parametern ein großer Suchraum mehr oder weniger eingeschränkt wird.

VGG verwendet große Merkmalsgrößen in vielen Schichten, da Inferenz zur Laufzeit zeitaufwendig ist. Wie beim Engpass von Inception wird die Reduzierung der Anzahl der Funktionen einige Rechenkosten sparen.

Netzwerk-in-Netzwerk
Die Idee von Network in Network (NiN, siehe Papier: Network In Network) ist einfach und großartig: die Verwendung der 1×1-Faltung, um mehr komposierbare Fähigkeiten für die Funktionen der Faltungsschicht bereitzustellen.

Die NiN-Architektur verwendet räumliche MLP-Schichten nach einzelnen Faltungen, um Features besser zu kombinieren, bevor andere Schichten entstehen. Auch hier kann man denken, dass 1×1-Faltungen dem ursprünglichen Prinzip von LeNet widersprechen, aber tatsächlich können sie Faltungsmerkmale besser kombinieren, als es nicht möglich ist, wenn man einfach mehr Faltungsmerkmale stapelt. Das unterscheidet sich von der Verwendung des ursprünglichen Pixels als Eingabe der nächsten Schicht. 1×1-Faltungen werden oft verwendet, um Merkmale auf Merkmalskarten nach der Faltung spatisch zu kombinieren, sodass sie tatsächlich sehr wenige Parameter verwenden und diese über alle Pixel dieser Merkmale teilen können!


MLPs Fähigkeit, die Effektivität einzelner Faltungsmerkmale erheblich zu steigern, indem sie in komplexere Gruppen kombiniert werden. Diese Idee wurde seitdem in einigen neueren Architekturen wie ResNet, Inception und seinen Derivaten verwendet.

NiN verwendet außerdem eine durchschnittliche Pooling-Schicht als Teil des finalen Klassifikators, eine weitere Praxis, die später üblich wird. Dies geschieht, indem die Reaktionen des Netzwerks auf mehrere Eingabebilder vor der Klassifizierung gemittelt werden.

GoogLeNet und Inception
Christian Szegedy von Google begann seine Mission, den Rechenaufwand tiefer neuronaler Netze zu reduzieren, und entwarf GoogLeNet, die erste Inception-Architektur (siehe: Tiefer mit Faltungen).

Es war im Herbst 2014, und Deep-Learning-Modelle wurden immer nützlicher, um Bild- versus Videoframes zu klassifizieren. Die meisten Skeptiker zweifeln nicht mehr daran, dass Deep Learning und neuronale Netze diesmal wirklich zurück sind und sich weiterentwickeln werden. Angesichts des Nutzens dieser Technologien sind Internetgiganten wie Google sehr daran interessiert, diese Architekturen effizient und maßstabsgetreu auf ihren Servern bereitzustellen.

Christian hat viel darüber nachgedacht, wie tiefe neuronale Netze hohe Leistungsniveaus erzielen können, wie etwa bei ImageNet, und gleichzeitig deren Rechenaufwand reduziert. Oder es können Leistungsverbesserungen erzielt werden, während derselbe Rechenaufwand gewährleistet bleibt.

Er und sein Team entwickelten das Inception-Modul:


Auf den ersten Blick ist dies im Grunde eine parallele Kombination von 1×1, 3×3, 5×5 Faltungsfiltern. Aber die großartige Idee von Inception ist es, die Anzahl der Features vor teuren parallelen Modulen mit 1×1-Faltungsblöcken (NiN) zu reduzieren. Dies wird allgemein als "Bottleneck" bezeichnet. Dieser Abschnitt wird im Abschnitt "Flaschenhalsschicht" unten erklärt.

GoogLeNet verwendet ein Backbone ohne Inception-Modul als Anfangsschicht, gefolgt von einer durchschnittlichen Pooling-Schicht sowie einem Softmax-Klassifikator ähnlich wie NiN. Dieser Klassifikator hat eine viel geringere Anzahl von Operationen als die Klassifikatoren von AlexNet und VGG. Dies führte auch zu einem sehr effektiven Netzwerkdesign, siehe den Artikel: An Analysis of Deep Neural Network Models for Practical Applications.

Engpässelschicht
Inspiriert von NiN reduziert die Flaschenhalsschicht von Inception die Anzahl der Features in jeder Schicht und damit die Anzahl der Operationen; So kann die Schlussfolgerzeit niedrig gehalten werden. Die Anzahl der Features wird vierfach reduziert, bevor die Daten durch teure Faltungsmodule geleitet werden. Das ist eine erhebliche Einsparung in Bezug auf Rechenkosten und einen Erfolg der Architektur.

Lassen Sie uns das konkret überprüfen. Da Sie nun 256 Feature-Eingänge und 256 Feature-Ausgaben haben, nehmen wir an, dass die Inception-Schicht nur 3×3 Faltungen ausführen kann, was insgesamt 256×256×3×3 Faltungen bedeutet (fast 589.000 Multiplikations- und Akkumulationsoperationen (MAC)). Das könnte unser Rechenbudget überschreiten, zum Beispiel die Schicht in 0,5 Millisekunden auf Google-Servern zu betreiben. Stattdessen entschieden wir uns, die Anzahl der zu komplexen Funktionen zu reduzieren, die 64 betrug (also 256/4). In diesem Fall beginnen wir mit einer Faltung von 256 -> 64 1×1, dann 64 Faltungen auf allen Zweigen der Inception, gefolgt von einer 1×1-Faltung von einem Merkmal von 64 -> 256, und nun ist die Operation wie folgt:

256×64 × 1×1 = 16.000s
64×64 × 3×3 = 36.000s
64×256 × 1×1 = 16.000s

Im Vergleich zu den bisherigen 600.000 gibt es jetzt insgesamt 70.000 Rechenvolumina, was fast zehnmal weniger ist.

Und obwohl wir bessere Operationen gemacht haben, haben wir auf dieser Ebene nicht an Allgemeingültigkeit verloren. Die Engpassstelle hat sich bei Datensätzen wie ImageNet als erstklassig erwiesen und wird auch in Architekturen wie ResNet eingesetzt, das wir als Nächstes vorstellen werden.

Sie ist erfolgreich, weil die Eingabemerkmale miteinander verbunden sind, sodass Redundanz durch die korrekte Kombination mit 1×1-Faltung reduziert werden kann. Nachdem eine kleine Anzahl von Features verworfen wurde, können sie auf der nächsten Ebene wieder zu sinnvollen Kombinationen erweitert werden.

Inception V3 (und V2)
Christian und sein Team sind sehr produktive Forscher. Im Februar 2015 wurde Batch-normalisierte Inception als Inception V2 eingeführt (siehe Paper: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift). Batch-Normalisierung berechnet den Mittelwert und die Standardabweichung aller Merkmalsabbildungen auf der Ausgabe einer Schicht und verwendet diese Werte, um deren Antworten zu normalisieren. Dies entspricht dem "Aufhellen" der Daten, sodass alle neuronalen Abbildungen im gleichen Bereich reagieren und einen Mittelwert von null haben. Dies hilft beim Training, wenn die nächste Schicht den Offset nicht aus den Eingabedaten lernen muss, und konzentriert sich auch darauf, wie diese Funktionen besser kombiniert werden können.

Im Dezember 2015 veröffentlichte das Team eine neue Version des Inception-Moduls und einer ähnlichen Architektur (siehe Paper: Rethinking the Inception Architecture for Computer Vision). Das Papier erklärt die ursprüngliche GoogLeNet-Architektur besser und gibt mehr Details zu Designentscheidungen. Die ursprüngliche Idee lautet wie folgt:

Durch sorgfältigen Aufbau des Netzwerks werden Tiefe und Breite ausgeglichen, um den Informationsfluss ins Netzwerk zu maximieren. Vor jedem Pooling fügen Sie Feature-Mapping hinzu.
Mit zunehmender Tiefe steigt auch die Tiefe oder Anzahl der Funktionen der Netzwerkschicht systematisch.
Nutze jede Schichttiefe, um die Bindung der Features vor der nächsten Schicht zu erhöhen.
Mit nur 3×3-Faltungen können gegebene 5×5- und 7×7-Filter in mehrere 3×3-Filter aufgeteilt werden, wenn möglich. Sieh dir das Bild unten an


Infolgedessen wurde das neue Inception:


Man kann den Filter auch aufteilen, indem man die Faltung in komplexere Module abflacht:


Während der Durchführung von Inception-Berechnungen kann das Inception-Modul auch die Datengröße durch Pooling reduzieren. Das ist im Grunde vergleichbar damit, eine einfache Pooling-Schicht parallel auszuführen, wenn man eine Faltung ausführt:


Inception verwendet außerdem eine Pooling-Schicht und Softmax als letzten Klassifikator.

ResNet
Im Dezember 2015 gab es eine neue Änderung, die mit Inception V3 zusammenfiel. ResNet hat eine einfache Idee: Die Ausgabe zweier aufeinanderfolgender Faltungsschichten einspeisen und die Eingabe auf die nächste Schicht umgehen (siehe die Arbeit: Deep Residual Learning for Image Recognition).


Das ähnelt einigen der alten Ideen von vorher. In ResNet jedoch teilen sie die beiden Schichten auf und werden in größerem Maßstab angewendet. Das Tragen nach zwei Schichten ist eine wichtige Intuition, weil das Aufteilen einer Schicht keine weitere Verbesserung bringt. Das Durchqueren von Layer 2 könnte als kleiner Klassifikator oder als Netzwerk-in-Netzwerk betrachtet werden.

Dies ist das erste Mal, dass die Anzahl der Netzwerkschichten 100 übersteigt, und sogar 1000 Schichten können trainiert werden.

ResNet, das eine große Anzahl von Netzwerkschichten hat, beginnt, eine Netzwerkschicht ähnlich der Inception-Flaschenhalsschicht zu verwenden:


Diese Schicht verarbeitet eine kleinere Anzahl von Merkmalen, indem sie zunächst eine kleinere Anzahl von Merkmalen um eine 1×1 mit einer kleineren Ausgabe (meist 1/4 der Eingabe) verkrümmt, dann eine Schicht von 3×3 und schließlich eine Schicht von 1×1. Ähnlich wie das Inception-Modul sorgt dies für eine geringe Rechenintensität und bietet gleichzeitig reichhaltige Funktionskombinationen.

ResNet verwendet eine relativ einfache Anfangsschicht für die Eingaben: eine 7×7-Volumen-Basisschicht mit zwei Pools. Vergleichen Sie dies mit den komplexeren und weniger intuitiven Inception V3 und V4.

ResNet verwendet außerdem eine Pooling-Schicht plus Softmax als endgültigen Klassifikator.

Weitere Erkenntnisse über ResNet ergeben sich täglich:

ResNet kann sowohl parallel als auch zusammenhängend betrachtet werden, wobei Ein- und Ausgänge (Inouts) in vielen Modulen als parallel behandelt werden, während die Ausgänge jedes Moduls kontinuierlich verbunden sind.
ResNet kann auch als Kombination aus parallelen oder kontinuierlichen Modulen betrachtet werden (siehe den Artikel: Residual Networks are Exponential Ensembles of Relatively Shallow Networks).
Es wurde festgestellt, dass ResNet typischerweise parallel auf Netzwerkblöcken auf den Schichten 20-30 arbeitet. Anstatt kontinuierlich über die gesamte Länge des Netzes zu fließen.
Wenn ResNet die Ausgabe wie ein RNN an die Eingabe zurückspeist, kann das Netzwerk als biologisch vertrauenswürdigeres kortikales Modell betrachtet werden (siehe Papier: Bridging the Gaps Between Residual Learning, Recurrent Neural Networks and Visual Cortex).

Inception V4
Hier ist eine weitere Version von Inception von Christian und seinem Team, die Inception V3 ähnelt:


Inception V4 kombiniert außerdem das Inception-Modul und das ResNet-Modul:


Ich finde, die Architektur ist nicht sehr prägnant, aber sie ist auch voller weniger transparenter Heuristiken. Es ist schwierig, die darin vorhandenen Möglichkeiten zu verstehen, und es ist für die Autoren schwer, es zu erklären.

Angesichts der Einfachheit des Netzwerks, die leicht verständlich und korrigierbar ist, könnte ResNet besser sein.

SqueezeNet
SqueezeNet (siehe Artikel: SqueezeNet: AlexNet-level accuracy with 50x less parameters and <0,5MB Model Size) ist eine kürzlich veröffentlichte Architektur, die die Konzepte in ResNet und Inception neu aufarbeitet. Ein besseres Architektur-Design-Netzwerkmodell ist kleiner, und die Parameter erfordern noch keine komplexen Kompressionsalgorithmen.

ENet
Unser Team plant, alle Funktionen der kürzlich vorgestellten Architektur zu kombinieren, um ein sehr effizientes, leichtes Netzwerk zu schaffen, das weniger Parameter und Berechnungen verwendet, um erstklassige Ergebnisse zu erzielen. Diese Netzwerkarchitektur heißt ENet und wurde von Adam Paszke entworfen. Wir haben es bereits für Einzelpixel-Markup und Szenenauflösung verwendet.

Weitere Informationen zu ENet finden Sie im Artikel ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation. ENet ist ein Netzwerk aus Codierung, Addieren und Dekodieren. Der Encoder ist ein reguläres CNN-Design zur Klassifizierung. Der Decoder ist ein Upsampling-Netzwerk, das die Klassifikation rückwärts zum Originalbild zur Segmentierung weiterleitet. Dies verwendet nur neuronale Netze und keine anderen Algorithmen zur Bildsegmentierung.

ENet ist darauf ausgelegt, zu Beginn möglichst wenig Ressourcen zu verwenden. Deshalb hat es ein so kleines Skript, mit einem kombinierten Netzwerk aus Encodern und Decodern, das 0,7 MB mit 16 fp Genauigkeit einnimmt. Selbst mit einem so kleinen Modell ist ENet in Bezug auf Segmentierungsgenauigkeit ähnlich oder besser als andere neuronale Netzlösungen.

Modulanalyse
Die Analyse des CNN-Moduls, die im Artikel (Systematische Bewertung von CNN-Fortschritten auf dem ImageNet) durchgeführt wurde, ist sehr hilfreich:

Verwenden Sie ELU-Nichtlinearität ohne Batchnorm oder ReLU mit Batchnorm.
Verwenden Sie eine erlernte RGB-Farbraumtransformation.
Verwenden Sie eine lineare Strategie zum Rückgang der Lernrate.
Verwenden Sie die Summe der durchschnittlichen und größeren gepoolten Schichten.
Verwenden Sie eine Mini-Batchgröße von etwa 128 bis 256 Portionen. Wenn das zu groß für deine GPU ist, skaliere einfach die Lernrate auf diese Größe.
Verwenden Sie die vollständig verbundene Schicht als Faltung und durchschnittlichen Sie alle Vorhersagen für die endgültige Vorhersage.
Wenn die Studie die Größe des Trainingssets vergrößert, erkennt sie, ob ein Plateau nicht erreicht wird
Die Sauberkeit der Daten ist wichtiger als die Größe der Daten.
Wenn du die Größe des Eingabebildes nicht vergrößern oder den Schritt auf den folgenden Ebenen reduzieren kannst, hat das denselben Effekt.
Wenn Ihr Netzwerk eine komplexe und hochoptimierte Architektur wie GoogLeNet hat, müssen Sie vorsichtig sein, es zu verändern.

Andere Architekturen, denen man Aufmerksamkeit schenken sollte
FractalNet (siehe Artikel: FractalNet: Ultra-Deep Neural Networks without Residuals) verwendet eine rekursive Architektur, die auf ImageNet nicht getestet wird. Diese Architektur ist eine Ableitung von ResNet oder allgemeiner von ResNet.

Zukunft
Wir sind der Überzeugung, dass die Entwicklung einer neuronalen Netzwerkarchitektur eine oberste Priorität für die Entwicklung von Deep Learning ist. Unser Team empfiehlt dringend, die im Artikel genannten Arbeiten sorgfältig zu lesen und zu verstehen.

Aber man könnte sich fragen, warum wir so viel Zeit mit dem Bau von Architekturen verbringen? Warum sagen Sie uns nicht, was wir mit Daten verwenden sollen? Wie kombiniert man Module? Diese Fragen sind gut, werden aber noch erforscht, und es gibt eine Arbeit, auf die man sich beziehen kann: Neurale Netzwerke mit differenzierbarer Struktur.

Beachten Sie, dass die meisten der Architekturen, über die wir in diesem Artikel gesprochen haben, Computer Vision betreffen. Ähnliche neuronale Netzarchitekturen wurden in anderen Bereichen entwickelt, und es ist sehr interessant, sich über architektonische Veränderungen in allen anderen Aufgaben zu informieren.

Wenn Sie daran interessiert sind, die Architektur neuronaler Netze und die Rechenleistung zu vergleichen, siehe das Papier: Eine Analyse tiefer neuronaler Netzwerkmodelle für praktische Anwendungen.







Vorhergehend:Mehrere Python-Ausführungszeitberechnungsmethoden
Nächster:Antminer B3 sagt dir, was du ausgraben sollst!
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com