Da war Robert Bond, ein 65-jähriger kalifornischer Programmierer. Und er hatte eine Gartenfrau, die ihren sauberen Rasen sehr liebte. Aber dies ist Kalifornien, es gibt keine zwei Meter hohen Zäune mit einem Katzenschutzsystem. Benachbarte Katzen laufen auf dem Rasen und scheißen!

Das Problem musste gelöst werden. Wie hat Robert das entschieden? Er kaufte etwas Eisen an seinen Computer, schloss eine Überwachungskamera im Freien an, die über den Rasen blickte, und tat dann etwas Ungewöhnliches. Er lud die verfügbare kostenlose Open Source-Software herunter - ein neuronales Netzwerk - und begann sie zu trainieren, um Katzen im Kamerabild zu erkennen. Und die Aufgabe am Anfang scheint trivial zu sein, denn wenn Sie etwas lernen und es einfach ist, ist es für Katzen, weil Katzen mit dem Internet übersät sind, gibt es zig Millionen von ihnen. Wenn alles so einfach war, aber die Dinge schlimmer sind, gehen Katzen im wirklichen Leben meistens nachts zum Mist. Im Internet gibt es praktisch keine Bilder von Nachtkatzen, die auf dem Rasen pinkeln. Und einige der Katzen schaffen es sogar, während der Arbeit aus dem Bewässerungssystem zu trinken, lassen es aber trotzdem fallen.

Nachfolgend finden Sie eine Beschreibung des Projekts des Autors. Die englische Version finden
Sie hier .
Dieses Projekt wurde durch zwei Dinge motiviert: den Wunsch, mehr über neuronale Netzwerksoftware zu erfahren, und den Wunsch, benachbarte Katzen zu ermutigen, sich an einem anderen Ort als meinem Rasen aufzuhalten.
Das Projekt umfasst nur drei Hardwarekomponenten: die
Nvidia Jetson TX1-Karte , die
Foscam FI9800P IP-Kamera und das an das
Relais angeschlossene
Partikelphoton . Die Kamera ist an der Seite des Hauses an der Seite des Rasens angebracht. Sie kontaktiert den WI-FI-Zugangspunkt, gefolgt von Jetson. Partikelphoton und Relais sind in der Steuereinheit meines Bewässerungssystems installiert und mit einem WI-FI-Zugangspunkt in der Küche verbunden.
Dabei ist die Kamera so konfiguriert, dass Änderungen im Hof überwacht werden. Wenn sich etwas ändert, überträgt die Kamera einen Satz von 7 Bildern an Jetson, eines pro Sekunde. Der von Jetson betriebene Dienst verfolgt eingehende Bilder und überträgt sie an das Deep-Training-Neuronale Netzwerk von Caffe. Wenn das Netzwerk eine Katze erkennt, signalisiert Jetson dem Partikelphotonenserver in der Cloud, der eine Nachricht an Photon sendet. Photon reagiert, indem er die Sprinkler zwei Minuten lang einschaltet.
Hier ging die Katze in den Rahmen und schaltete die Kamera ein:

Nach ein paar Sekunden kam die Katze in die Mitte des Hofes, schaltete die Kamera wieder ein und aktivierte die Sprinkler des Bewässerungssystems:

Kamerainstallation
Die Installation einer Kamera war nichts Ungewöhnliches. Die einzige dauerhafte Verbindung ist eine 12-Volt-Kabelverbindung, die durch ein kleines Loch unter der Kante verläuft. Ich montierte die Kamera auf einer Holzkiste, um den Vorgarten mit einem Rasen festzuhalten. Ein paar Drähte sind an die Kamera angeschlossen, die ich in einer Box versteckt habe.
Befolgen Sie die Anweisungen von Foscam, um es mit Jetsons AP zu verknüpfen (siehe unten). In meinem Setup befindet sich Jetson unter 10.42.0.1. Ich habe der Kamera eine feste IP-Adresse von 10.42.0.11 zugewiesen, damit sie leicht zu finden ist. Schließen Sie anschließend den Windows-Laptop an die Kamera an und konfigurieren Sie den Parameter „Warnung“, um die Änderung zu aktivieren. Richten Sie den Upload von 7 Bildern per FTP durch Warnung ein (Warnung). Geben Sie dann die Benutzer-ID und das Kennwort für Jetson ein. Meine Kamera sendet 640x360 Bilder per FTP in ihr Ausgangsverzeichnis.
Unten sehen Sie die Parameter, die für die Kamerakonfiguration ausgewählt wurden.

Einrichten eines Teilchenphotons
Photon war einfach einzurichten. Ich habe es in die Bewässerungssteuereinheit gelegt.

Die schwarze Box links mit der blauen LED ist ein bei eBay gekaufter 24-V-Wechselstrom- (5 V) zu 5-V-Gleichstromwandler. Sie können das weiße Relais auf der Relaisplatine und den blauen Anschluss an der Vorderseite sehen. Das Photon selbst ist auf der rechten Seite. Beide werden auf ein Stück Pappe geklebt, um sie zusammenzuhalten.
Der 5-V-Ausgang des Konverters ist mit dem VIN-Anschluss für Partikelphotonen verbunden. Die Relaisplatine ist größtenteils analog: Sie verfügt über einen NPN-Transistor mit offenem Kollektor mit einem nominalen 3,3-V-Eingang zur Transistorbasis und ein 3-V-Relais. Der Photonen-Controller konnte nicht genug Strom liefern, um das Relais zu steuern. Deshalb habe ich den Kollektor des Transistoreingangs über einen Widerstand mit einem Widerstand von 15 Ohm und einer Leistung von 1/2 W an 5 V angeschlossen, um den Strom zu begrenzen. Die Relaiskontakte sind parallel zum normalen Steuerkreis mit dem Wassergebläse verbunden.
Hier ist das Anschlussdiagramm:
24VAC Konverter 24VAC <---> Steuerkasten 24VAC OUT
24VAC Wandler + 5V <---> Photonen-VIN, Widerstand zur Relaisplatine + 3,3V
24VAC Wandler GND <---> Photon GND, Relais GND
Photon D0 <---> Signaleingang der Relaisplatine
Relais COM <---> Steuerkasten 24VAC OUT
Relais NEIN <---> Wasserventil im Vorgarten
Installieren Sie Jetson
Die einzigen Hardwarekomponenten, die Jetson hinzugefügt wurden, sind eine SATA-SSD und ein kleiner Belkin-USB-Hub. Der Hub verfügt über zwei drahtlose Tasten, die eine Tastatur und eine Maus verbinden.
SSD kam ohne Probleme. Ich habe es auf EXT4 neu formatiert und als / caffe installiert. Ich empfehle dringend, den gesamten Projektcode, die Git-Repositorys und die Anwendungsdaten von der internen SD-Karte von Jetson zu löschen, da es oft am einfachsten ist, das System während eines Jetpack-Upgrades zu löschen.

Das Einrichten eines drahtlosen Zugangspunkts war ziemlich einfach (wahr!), Wenn Sie
diese Anleitung befolgt
haben . Verwenden Sie einfach das angegebene Ubuntu-Menü und fügen Sie
diesen Konfigurationsparameter hinzu .
Ich habe vsftpd als
FTP-Server installiert. Die Konfiguration ist weitgehend serienmäßig. Ich habe anonymes FTP nicht aktiviert. Ich habe der Kamera einen Benutzernamen und ein Passwort gegeben, die für nichts mehr verwendet werden.
Ich habe Caffe nach dem
JetsonHacks- Rezept installiert. Ich glaube, dass es in aktuellen Versionen kein LMDB_MAP_SIZE-Problem mehr gibt. Versuchen Sie also, es zu erstellen, bevor Sie Änderungen vornehmen. Sie sollten in der Lage sein, die im JetsonHacks-Shell-Skript genannten Tests und Timing-Demos auszuführen. Ich verwende derzeit Cuda 7.0, bin mir jedoch nicht sicher, ob dies zu diesem Zeitpunkt von Bedeutung ist. Wenn Sie CDNN verwenden, wird in diesen kleinen Systemen eine erhebliche Menge an Speicherplatz gespart. Fügen Sie nach der Erstellung das Build-Verzeichnis zur PATH-Variablen hinzu, damit Skripte Caffe finden können. Fügen Sie außerdem das Caffe Python lib-Verzeichnis zu Ihrem PYTHONPATH hinzu.
~ $ echo $PATH /home/rgb/bin:/caffe/drive_rc/src:/caffe/drive_rc/std_caffe/caffe/build/tools:/usr/local/cuda-7.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ~ $ echo $PYTHONPATH /caffe/drive_rc/std_caffe/caffe/python: ~ $ echo $LD_LIBRARY_PATH /usr/local/cuda-7.0/lib:/usr/local/lib
Ich verwende die Option Fully Convolutional Network for Semantic Segmentation (FCN). Siehe
Berkeley Model Zoo ,
Github .
Ich habe mehrere andere Netzwerke ausprobiert und mich schließlich für FCN entschieden. Weitere Informationen zum Auswahlverfahren finden Sie im nächsten Artikel. Fcn32s funktioniert gut mit TX1 - es nimmt etwas mehr als 1 GB Speicher in Anspruch, läuft in etwa 10 Sekunden und segmentiert ein 640x360-Bild in etwa einer Drittelsekunde. Das aktuelle Github-Repository enthält eine Reihe guter Skripte. Die Einstellung ist unabhängig von der Größe des Bildes. Die Größe des Netzwerks wird so angepasst, dass es Ihren Vorstellungen entspricht.
Um es zu versuchen, müssen Sie die bereits trainierten Caffe-Modelle bereitstellen. Es dauert einige Minuten: Die Dateigröße fcn32s-heavy-pascal.caffemodel überschreitet 500 MB.
$ cd voc-fcn32s $ wget `cat caffemodel-url`
Bearbeiten Sie infer.py, indem Sie den Pfad im Befehl Image.open () in die entsprechende JPG-Datei ändern. Ändern Sie die Linie "net" so, dass sie auf das gerade geladene Modell zeigt:
-net = caffe.Net('fcn8s/deploy.prototxt', 'fcn8s/fcn8s-heavy-40k.caffemodel', caffe.TEST) +net = caffe.Net('voc-fcn32s/deploy.prototxt', 'voc-fcn32s/fcn32s-heavy-pascal.caffemodel', caffe.TEST)
Sie benötigen die Datei voc-fcn32s / deploy.prototxt. Es kann leicht aus voc-fcn32s / train.prototxt generiert werden. Schauen Sie sich die Änderungen zwischen voc-fcn8s / train.prototxt und voc-fcn8s / deploy.prototxt an, um zu sehen, wie das geht, oder Sie können sie aus meinem
Chasing-Cats- Repository auf Github herunterladen. Sie sollten jetzt laufen können.
$ python infer.py
Mein Repository enthält mehrere Versionen von infer.py, mehrere Python-Dienstprogramme, die sich mit segmentierten Dateien, Photon-Code und Verwaltungsskripten sowie Betriebsskripten auskennen, mit denen ich das System starte und überwache. Lesen Sie unten mehr über die Software.
Netzwerkauswahl
Neuronale Netze zur Bilderkennung werden normalerweise trainiert, um eine Reihe von Objekten zu erkennen. Angenommen, wir geben jedem Objekt einen Index von eins bis n. Das Klassifizierungsnetzwerk beantwortet die Frage "Welche Objekte in diesem Bild?" Rückgabe eines Arrays von Null bis n-1, wobei jeder Array-Eintrag einen Wert von Null bis Eins hat. Null bedeutet, dass sich das Objekt nicht im Bild befindet. Ein Wert ungleich Null bedeutet, dass er mit zunehmender Wahrscheinlichkeit vorhanden sein kann, wenn sich der Wert der Einheit nähert. Hier ist eine Katze und ein Mann in einer Reihe von 5 Elementen:

Ein segmentiertes Netzwerk segmentiert Bildpixel von Bereichen, die von Objekten aus unserer Liste belegt sind. Sie beantwortet die Frage, indem sie ein Array mit einem Datensatz zurückgibt, der jedem Pixel im Bild entspricht. Jeder Datensatz hat den Wert Null, wenn es sich um ein Hintergrundpixel handelt, oder einen Wert von eins bis n für n verschiedene Objekte, die er erkennen kann. Dieses fiktive Beispiel kann der Fuß einer Person sein:

Dieses Projekt ist Teil eines größeren Projekts zur Steuerung eines ferngesteuerten Autos mithilfe eines Computers. Die Idee ist, ein neuronales Netzwerk zu verwenden, um die Position (globale dreidimensionale Position und Ausrichtung) eines Autos zu bestimmen, um Navigationsbefehle an dieses zu übertragen. Die Kamera ist fest und der Rasen ist meist flach. Ich kann den Trigger ein wenig verwenden, um die 3D-Position zu ändern, damit das neuronale Netzwerk die Bildschirmpixel und die Ausrichtung finden kann. Die Rolle der Katze bei all dem ist der "beabsichtigte Zweck".
Ich dachte zunächst hauptsächlich an das Auto, weil ich nicht wusste, wie es ausgehen würde, vorausgesetzt, dass das Erkennen einer Katze mit einem vorab trainierten Netzwerk trivial wäre. Nach viel Arbeit, die ich in diesem Artikel nicht im Detail beschreiben werde, habe ich beschlossen, dass Sie die Ausrichtung des Autos mit einem ziemlich hohen Maß an Zuverlässigkeit bestimmen können. Hier ist ein Trainingsschuss in einem Winkel von 292,5 Grad:

Der größte Teil dieser Arbeit wurde mit dem Klassifizierungsnetzwerk, dem Caffe-Modell bvlc_reference_caffenet, durchgeführt. Aus diesem Grund habe ich beschlossen, dass die Aufgabe des Segmentierungsnetzwerks die Position der Maschine auf dem Bildschirm bestimmt.
Das erste Netzwerk, das ich verwendet habe, ist Faster R-CNN [1]. Es werden Begrenzungsrahmen für Objekte im Bild zurückgegeben, nicht für Pixel. Das Netzwerk auf Jetson war jedoch für diese Anwendung zu langsam. Die Idee eines Begrenzungsrahmens war sehr attraktiv, deshalb habe ich mir auch das fahrerorientierte Netzwerk angesehen [2]. Sie war auch zu langsam. FCN [3] war das schnellste Segmentierungsnetzwerk, das ich ausprobiert habe. "FCN" bedeutet "Vollfaltungsnetzwerk", ein vollständig Faltungsnetzwerk, da keine bestimmte Bildgröße mehr eingegeben werden muss und nur noch aus Faltungen / Pools besteht. Das Umschalten nur auf Faltungsschichten führt zu einer erheblichen Beschleunigung, wodurch meine Bilder auf Jetson um etwa 1/3 Sekunde klassifiziert werden. FCN enthält eine Reihe guter Python-Skripte für Schulungen und einfache Bereitstellung. Python-Skripte passen die Größe des Netzwerks an jede Größe des eingehenden Images an, wodurch die Verarbeitung des Hauptimages vereinfacht wird. Ich hatte einen Gewinner!
Die FCN GitHub-Version bietet mehrere Optionen. Zuerst habe ich voc-fcn32s ausprobiert. Es hat perfekt funktioniert. Voc-fcn32s wurde in 20 Standard-Voc-Klassen vorab trainiert. Da dies zu einfach ist, habe ich pascalcontext-fcn32s ausprobiert. Er wurde in 59 Klassen ausgebildet, darunter Gras und Bäume, also dachte ich, es sollte besser sein. Es stellte sich jedoch heraus, dass die Ausgabebilder nicht immer viel mehr Pixel hatten und die Segmentierung von Katzen und Menschen, die Gras und Büschen überlagert waren, nicht so genau war. Die Segmentierung von Siftflow war noch komplexer, sodass ich schnell zu den Voc-Optionen zurückkehrte.
Die Auswahl von Voc-Netzwerken bedeutet noch drei Dinge zu beachten: Voc-Fcn32s, Voc-Fcn16s und Voc-Fcn8s. Sie unterscheiden sich im „Schritt“ der Ausgabesegmentierung. Schritt 32 ist der Hauptschritt des Netzwerks: Das 640 x 360-Bild wird bis zum Abschluss der Faltungsschichten auf ein 20 x 11-Netzwerk reduziert. Diese grobe Segmentierung "dekonvolviert" sich dann zurück auf 640x360, wie in [3] beschrieben. Schritt 16 und Schritt 8 werden erreicht, indem dem Netzwerk mehr Logik zur besseren Segmentierung hinzugefügt wird. Ich habe es nicht einmal versucht - die 32-Segment-Segmentierung ist die erste, die ich ausprobiert habe, und sie ist aufgetaucht, und ich habe mich daran gehalten, weil die Segmentierung für dieses Projekt gut genug aussieht und das Training, wie beschrieben, für die beiden anderen Netzwerke komplizierter aussieht.
Schulung
Das erste, was mir beim Einschalten und Starten des Systems auffiel, war, dass nur etwa 30% der Katzen vom Netzwerk erkannt wurden. Ich habe zwei Gründe dafür gefunden. Erstens kommen Katzen oft nachts, sodass die Kamera sie im Infrarotlicht sieht. Dies kann leicht behoben werden - fügen Sie einfach einige segmentierte Infrarotbilder von Katzen zum Training hinzu. Das zweite Problem, das ich nach Durchsicht mehrerer hundert Fotos von Katzen aus dem Trainingskit entdeckte, ist, dass viele der Fotos zur Sorte „Schau dir meine süße Katze an“ gehören. Dies sind Frontalbilder einer Katze auf Augenhöhe. Entweder liegt die Katze auf dem Rücken oder auf dem Schoß ihres Besitzers. Sie sehen nicht aus wie Katzen, die in meinem Garten herumlaufen. Auch hier kann es mit einigen segmentierten Tagesbildern leicht behoben werden.

Wie segmentiere ich ein Objekt in ein Trainingsbild? Mein Ansatz ist es, das Hintergrundbild zu subtrahieren und dann die Vordergrundpixel zu verarbeiten, um anzuzeigen, dass das Objekt verfolgt werden soll. In der Praxis funktioniert dies ziemlich gut, da in meinem Archiv von der Kamera normalerweise ein Bild vorhanden ist, das einige Sekunden vor dem segmentierten Bild aufgenommen wurde. Es gibt jedoch Artefakte, die bereinigt werden müssen, und die Segmentierung muss häufig geklärt werden. Daher habe ich ein grobes Vorbereitungsprogramm zum Bearbeiten von Bildsegmenten geschrieben: src / extract_fg.cpp. Siehe den Hinweis oben in der Quelldatei zur Verwendung. Es ist etwas ungeschickt und hat kleine Überprüfungsfehler und muss verfeinert werden, aber es funktioniert gut genug für die Aufgabe.
Nachdem wir einige Bilder für das Training haben, wollen wir sehen, wie es geht. Ich habe voc-fcn32s in das Verzeichnis rgb_voc_fcn32s geklont. Alle Dateinamen beziehen sich bis zum Ende dieser Lektion auf dieses Verzeichnis.
$ cp -r voc-fcn32s rgb_voc_fcn32s
Code auf meinem Github, einschließlich Beispiel-Trainingsdatei in data / rgb_voc. Die wichtigsten Änderungen sind unten angegeben.
Trainingsdateiformat
Die verteilte Datenschicht erwartet fest codierte Bilder und Segmentierungsverzeichnisse. Die Trainingsdatei enthält eine Zeile pro Datei. Dann erhält die Datenschicht die Namen der Bilddateien und Segmente und fügt fest codierte Verzeichnisnamen hinzu. Dies hat bei mir nicht funktioniert, da ich mehrere Klassen von Trainingsdaten habe. Meine Trainingsdaten enthalten eine Reihe von Linien, von denen jede ein Bild und eine Segmentierung für dieses Bild enthält.
$ head data/rgb_voc/train.txt /caffe/drive_rc/images/negs/MDAlarm_20160620-083644.jpg /caffe/drive_rc/images/empty_seg.png /caffe/drive_rc/images/yardp.fg/0128.jpg /caffe/drive_rc/images/yardp.seg/0128.png /caffe/drive_rc/images/negs/MDAlarm_20160619-174354.jpg /caffe/drive_rc/images/empty_seg.png /caffe/drive_rc/images/yardp.fg/0025.jpg /caffe/drive_rc/images/yardp.seg/0025.png /caffe/drive_rc/images/yardp.fg/0074.jpg /caffe/drive_rc/images/yardp.seg/0074.png /caffe/drive_rc/images/yard.fg/0048.jpg /caffe/drive_rc/images/yard.seg/0048.png /caffe/drive_rc/images/yard.fg/0226.jpg /caffe/drive_rc/images/yard.seg/0226.png
Ich habe voc_layers.py durch rgb_voc_layers.py ersetzt, das das neue Schema versteht:
--- voc_layers.py 2016-05-20 10:04:35.426326765 -0700 +++ rgb_voc_layers.py 2016-05-31 08:59:29.680669202 -0700 ... - # load indices for images and labels - split_f = '{}/ImageSets/Segmentation/{}.txt'.format(self.voc_dir, - self.split) - self.indices = open(split_f, 'r').read().splitlines() + # load lines for images and labels + self.lines = open(self.input_file, 'r').read().splitlines()
Und train.prototxt wurde geändert, um meinen Code rgb_voc_layers zu verwenden. Beachten Sie, dass die Argumente auch unterschiedlich sind.
--- voc-fcn32s/train.prototxt 2016-05-03 09:32:05.276438269 -0700 +++ rgb_voc_fcn32s/train.prototxt 2016-05-27 15:47:36.496258195 -0700 @@ -4,9 +4,9 @@ top: "data" top: "label" python_param { - module: "layers" - layer: "SBDDSegDataLayer" - param_str: "{\'sbdd_dir\': \'../../data/sbdd/dataset\', \'seed\': 1337, \'split\': \'train\', \'mean\': (104.00699, 116.66877, 122.67892)}" + module: "rgb_voc_layers" + layer: "rgbDataLayer" + param_str: "{\'input_file\': \'data/rgb_voc/train.txt\', \'seed\': 1337, \'split\': \'train\', \'mean\': (104.00699, 1
Fast die gleiche Änderung in val.prototxt:
--- voc-fcn32s/val.prototxt 2016-05-03 09:32:05.276438269 -0700 +++ rgb_voc_fcn32s/val.prototxt 2016-05-27 15:47:44.092258203 -0700 @@ -4,9 +4,9 @@ top: "data" top: "label" python_param { - module: "layers" - layer: "VOCSegDataLayer" - param_str: "{\'voc_dir\': \'../../data/pascal/VOC2011\', \'seed\': 1337, \'split\': \'seg11valid\', \'mean\': (104.00699, 116.66877, 122.67892)}" + module: "rgb_voc_layers" + layer: "rgbDataLayer" + param_str: "{\'input_file\': \'data/rgb_voc/test.txt\', \'seed\': 1337, \'split\': \'seg11valid\', \'mean\': (104.00699, 116.66877, 122.67892)}"
Solver.py
Führen Sie lösen.py aus, um Ihr Training zu starten:
$ python rgb_voc_fcn32s / solve.py
Es verändert einige der normalen Mechanismen von Caffe. Insbesondere wird die Anzahl der Iterationen am Ende der Datei festgelegt. In dieser speziellen Einstellung ist die Iteration ein Bild, da sich die Netzwerkgröße für jedes Bild ändert und die Bilder einzeln übersprungen werden.
Eines der großartigen Dinge bei der Arbeit mit Nvidia ist, dass wirklich großartige Geräte verfügbar sind. Ich habe einen Titan in eine Workstation eingebaut, und es hat meinem Management nichts ausgemacht, ihn für etwas so zweifelhaftes wie dieses Projekt verwenden zu lassen. Mein letzter Trainingslauf war 4.000 Iterationen, was auf Titan etwas mehr als zwei Stunden dauerte.
Ich habe ein paar Dinge gelernt
- Eine Handvoll Bilder (weniger als 50) reichten aus, um das Netzwerk zu trainieren, um Eindringlinge in der Nacht zu erkennen.
- Nachtaufnahmen lehrten das Netzwerk zu glauben, dass die Schatten auf dem Fußweg Katzen sind.
- Negative Aufnahmen, dh Bilder ohne segmentierte Pixel, helfen bei der Bewältigung des Schattenproblems.
- Es ist einfach, das Netzwerk mit einer stationären Kamera neu zu trainieren, sodass alles, was sich unterscheidet, als zufällig eingestuft wird.
- Katzen und Menschen, die zufälligen Hintergründen überlagert sind, helfen bei Problemen, die durch Übertraining entstehen.
Wie Sie sehen können, ist der Prozess iterativ.
Empfehlungen
[1] Schnelleres R-CNN: Auf dem Weg zur Echtzeit-Objekterkennung mit regionalen Vorschlagsnetzwerken Shaoqing Ren, Kaiming He, Ross Girshick und Jian Sun
abs / 1506.01497v3 .
[2] Eine empirische Bewertung des tiefen Lernens beim Fahren auf der Autobahn Brody Huval, Tao Wang, Sameep Tandon, Jeff Kiske, Will Song, Joel Pazhayampallil, Mykhaylo Andriluka, Pranav Rajpurkar, Toki Migimatsu, Royce Cheng-Yue, Fernando Cojuju, Fernando Mujica, Andrew Y. Ng
arXiv: 1504.01716v3 ,
github.com/brodyh/caffe.git .
[3] Vollfaltungsnetzwerke für die semantische Segmentierung Jonathan Long, Evan Shelhamer, Trevor Darrell
arXiv: 1411.4038v2 ,
github.com/shelhamer/fcn.berkeleyvision.org.git .
Schlussfolgerungen
Um dem neuronalen Netzwerk das Erkennen von Nachtkatzen beizubringen, mussten die erforderlichen Daten hinzugefügt und akkumuliert werden. Danach wurde der letzte Schritt unternommen - das System wird an das Ventil angeschlossen, das das Spritzgerät startet. Die Idee ist, dass sobald die Katze den Rasen betritt und sich anpassen möchte, sie zu wässern beginnt. Die Katze wirft ab. Damit ist die Aufgabe gelöst, die Frau ist glücklich, und all dieses seltsame Wunder ist ein neuronales Netzwerk, das das Erkennen von Katzen lehrt, herausfindet, dass das Internet nicht über genügend Quellbilder für das Training verfügt und das dies gelernt hat. Es wurde das einzige neuronale Netzwerk der Welt, das Nachtkatzen erkennen kann.
Es ist erwähnenswert, dass all dies von einer Person gemacht wurde, die kein Hyperprogrammierer ist, der sein ganzes Leben lang in Yandex oder Google gearbeitet hat und mit Hilfe von Hardware recht billig, kompakt und einfach ist.
Ein bisschen Werbung :)
Vielen Dank für Ihren Aufenthalt bei uns. Gefällt dir unser Artikel? Möchten Sie weitere interessante Materialien sehen? Unterstützen Sie uns, indem Sie eine Bestellung
aufgeben oder Ihren Freunden empfehlen, einen
Rabatt von 30% für Habr-Benutzer auf einem einzigartigen analogen Einstiegsserver, den wir für Sie erfunden haben: Die ganze Wahrheit über VPS (KVM) E5-2650 v4 (6 Kerne) 10 GB DDR4 240 GB SSD 1 Gbit / s ab 20 $ oder wie teilt man den Server? (Optionen sind mit RAID1 und RAID10, bis zu 24 Kernen und bis zu 40 GB DDR4 verfügbar).
Dell R730xd 2 mal günstiger? Nur wir haben
2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2,6 GHz 14C 64 GB DDR4 4 x 960 GB SSD 1 Gbit / s 100 TV von 199 US-Dollar in den Niederlanden! Dell R420 - 2x E5-2430 2,2 GHz 6C 128 GB DDR3 2x960 GB SSD 1 Gbit / s 100 TB - ab 99 US-Dollar! Lesen Sie mehr über
den Aufbau eines Infrastrukturgebäudes. Klasse mit Dell R730xd E5-2650 v4 Servern für 9.000 Euro für einen Cent?