123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- Wie oben bereits erwähnt, ist die Annotation von Bildern ein notwendiger Prozess, um einem Computer beizubringen, Objekte automatisch zu erkennen.
- Je nachdem welche Aufgabe der Computer später übernehmen soll, müssen dabei verschiedene Objekte annotiert werden.
- Wenn der Computer zum Beispiel lernen soll, Menschen und Tiere zu erkennen, dann würde es nichts bringen Autos zu annotieren.
- Die verschiedenen Objektkategorien, deren Objekte annotiert werden sollen, werden Klassen genannt.
- In diesem Beispiel würden die Klassen \glq Mensch\grq{ } und \glq Tier\grq{ } ausreichen. Je nach Anwendungsfall
- könnte es aber auch sinnvoll sein diese Klassen noch weiter aufzuteilen.
- In der GUI, welche in dieser Arbeit vorgestellt wird, im nachfolgenden Text nur noch GUI genannt,
- geht es jedoch nicht nur um die Annotation von Objekten auf Bildern, sondern auch um die Annotation von Bildsequenzen.
- Eine Bildsequenz ist eine geordnete Abfolge von Bildern, die von verschiedenen Kameras aufgenommen wurden.
- Dabei sind die Bilder zunächst nach der Kamera und dann nach dem Aufnahmenzeitpunkt geordnet.
- Diese besondere Ordnung der Bilder erleichtert den Prozess des Annotierens,
- da sich die Objekte in den verschiedenen Bildern einer Kamera immer nur ein Stück in eine Richtung bewegen.
- Es ist für den Nutzer der GUI daher leicht, dieselben Objekte auf den Bildern wiederzuerkennen.
- Außerdem ändern sich die Objekte nur selten in ihrer Form, weshalb die Umrisse eines Objektes oft von einem Bild zum nächsten kopiert werden können.
- Beispiel:
- Es sind zwei Kameras A und B vorhanden, welche alle 2 Sekunden ein Bild machen. Die Objekte, die von den Kameras erfasst werden,
- bewegen sich zunächst durch das Sichtfeld von Kamera A und dann durch das Sichtfeld von Kamera B.
- Eine Bildsequenz dieser beiden Kameras enthält nun zuerst alle Bilder von Kamera A, in zeitlich sortierter Reihenfolge,
- und dann alle Bilder von Kamera B, welche im gleichen Zeitfenster aufgenommen wurden.
- Der Nutzer kann nun das erste Bild von Kamera A annotieren.
- Dann kann der Nutzer jedes annotierte Objekt kopieren und auf dem nächsten Bild leicht verschoben oder gedreht wieder einfügen.
- Bei der Annotierung von einzelnen Bildern reichen bei der Objekterkennung als Trainingsdaten die Daten aus,
- wo sich auf welchem Bild ein Objekt einer bestimmten Klasse befindet.
- Bei einer Sequenz von Bildern spielen jedoch auch andere Daten eine Rolle. Zum Beispiel ist es sinnvoll zu wissen,
- bei welchen Objekten auf unterschiedlichen Bildern es sich um dasselbe Objekt handelt,
- welches zu einem anderen Zeitpunkt oder aus einer anderen Blickrichtung aufgenommen wurde.
- Daher bekommt in der GUI jedes Objekt eine eindeutige ID, an welcher man das Objekt auf verschiedenen Bildern wiedererkennen kann.
- Jeder Objekt-ID wird dann eine Objektklasse zugeordnet. So ist sichergestellt, dass dasselbe Objekt nicht auf unterschiedlichen Bildern
- unterschiedlichen Klassen zugeordnet werden kann.
- Es kann sogar vorkommen, dass dasselbe Objekt an mehreren unterschiedlichen Stellen im gleichen Bild vorkommt.
- Das passiert genau dann, wenn die Sicht auf das Objekt durch einen Gegenstand versperrt wird und das Objekt nur teilweise sichtbar ist (siehe Abbildung \ref{fig:zerteiltesobjekt}).
- \graphicsfigure{bilder/zerteiltesobjekt}{Mehrfaches Vorkommen desselben Objektes auf einem Bild}{fig:zerteiltesobjekt}{0.33\textwidth}
- Außerdem gibt es bei einer Bildsequenz für eine Kamera oft Bereiche, in denen sich kein Objekt befinden kann.
- Solche Bereiche können in der GUI mit Masken festgelegt werden.
- Um die Annotation zu speichern, können verschiedene Formate benutzt werden. Dabei ist es sinnvoll sich für ein Format zu entscheiden,
- welches möglichst viele andere Personen auch benutzen, da dann möglichst viele von den annotierten Bildern profitieren können.
- Im folgenden Abschnitt wird das von der GUI verwendete Format zum Speichern von Annotationen
- und die unterstützten Formate für das Erstellen neuer annotierter Bildsequenzen erklärt.
- \section{Annotationsformat}\label{sec:annotationsformat}
- Damit möglichst viele Forscher die von der GUI erstellten Annotationen verwenden können,
- wird zur Speicherung der Annotationen ein Format verwendet, welches sich sehr stark an dem Format des PascalVOC 2007 Datensatzes orientiert~\cite{pascal-voc-2007}.
- Es werden lediglich zusätzliche Informationen wie zum Beispiel Kamera und Objekt-ID gespeichert.
- Zu jeder annotierten Bildsequenz gehören dabei die vier Ordner \glq Annotations\grq, \glq SourceImages\grq, \glq SourceMasks\grq{ } und \glq JPEGImages\grq.
- Im Ordner \glq Annotations\grq{ } wird für jedes Bild eine XML Datei erstellt,
- welche alle annotierten Objekte auf dem Bild enthält. Zusätzlich werden hier auch Informationen zu dem zugehörigen Bild
- wie zum Beispiel Größe und Aufnahmezeitpunkt gespeichert.
- Der Inhalt einer XML Datei könnte für ein Bild mit nur einem Objekt zum Beispiel wie folgt aussehen:
- \lstset{language=XML}
- \begin{lstlisting}
- <?xml version="1.0" encoding="utf-8"?>
- <annotation>
- <folder>VOC2007</folder>
- <filename>0001.jpg</filename>
- <source>
- <database>The VOC2007 Database</database>
- <annotation>PASCAL VOC 2007</annotation>
- <image>0001.jpg</image>
- </source>
- <camera_id>Scan E 01</camera_id>
- <size>
- <width>1920</width>
- <height>1080</height>
- <depth>32</depth>
- </size>
- <segmented>0</segmented>
- <timestamp>2017-02-07 21:07:47.275</timestamp>
- <object>
- <name>packingbox</name>
- <id>1</id>
- <pose>Unspecified</pose>
- <truncated>0</truncated>
- <difficult>0</difficult>
- <bndbox>
- <xmin>100</xmin>
- <ymin>100</ymin>
- <xmax>150</xmax>
- <ymax>150</ymax>
- </bndbox>
- <polygon>
- <point>
- <x>100</x>
- <y>100</y>
- </point>
- <point>
- <x>150</x>
- <y>100</y>
- </point>
- <point>
- <x>150</x>
- <y>100</y>
- </point>
- </polygon>
- </object>
- </annotation>
- \end{lstlisting}
- Dabei wird der Name der Kamera in dem camera\_id Tag (im Beispiel Zeile 10) angegeben. Der Zeitpunkt, zudem das Bild aufgenommen wurde,
- wird durch timestamp (im Beispiel Zeile 17) angegeben. Die Objekt-ID, an der die Objekte auf unterschiedlichen Bildern wiedererkannt werden,
- wird im id Tag (im Beispiel Zeile 20) angegeben. Der Objektumriss wird im polygon Tag (im Beispiel Zeile 30-43) als Liste von Punkten angegeben,
- welche in Pixelkoordinaten angegeben werden. Falls das Objekt mehrmals auf dem Bild zu sehen ist,
- werden die Polygone als Liste hintereinander abgespeichert.
- Im Ordner \glq SourceImages\grq{ } werden die originalen Bilder der Sequenz gespeichert.
- Sie werden von der GUI benötigt, da der Nutzer auf diesen Bildern die Objekte annotiert.
- Im Ordner \glq SourceMasks\grq{ } wird für jede Kamera eine Maske gespeichert.
- Eine Maske ist ein schwarz-weiß Bild mit gleicher Größe wie das zugehörige originale Bild.
- Weiße Flächen in der Maske bedeuten, dass innerhalb dieser Fläche im originalen Bild ein Objekt vorkommen darf.
- Schwarze Flächen bedeuten, dass sich an diesen Stellen im originalen Bild kein Objekt befinden kann.
- \begin{figure}[H]
- \centering
- \subfigure[Source Image]{\includegraphics[width=0.25\textwidth]{bilder/bild_von_kamera.jpg}}
- \subfigure[Source Mask]{\includegraphics[width=0.25\textwidth]{bilder/maske_von_kamera.jpg}}
- \subfigure[JPEG Image]{\includegraphics[width=0.25\textwidth]{bilder/ergebnis.jpg}}
- \caption{Beispiel für eine Kameramaske}
- \end{figure}
- Im Ordner \glq JPEGImages\grq{ } werden die Bilder gespeichert, welche man erhält, wenn man die Masken auf die originalen Bilder anwendet.
- Dabei werden die schwarzen Flächen der Maske auf das originale Bild übertragen.
- Die Bilder werden von der GUI generiert, sobald die Maske einer Kamera durch den Nutzer verändert wird.
- Die Bilder in diesem Ordner werden später für das Training verwendet, da hier keine Objekte außerhalb der Maske mehr vorkommen.
- \section{Format neuer Annotationen}\label{sec:formatNeuerAnnotationen}
- Wie oben bereits erwähnt, entstand diese GUI im Kontext einer Arbeit,
- bei der es darum ging ein neuronales Netzwerk darauf zu trainieren,
- automatisch Pakete durch Überwachungskameras zu verfolgen.
- Die GUI hat daher eine Funktion, die es dem Nutzer erlaubt eine Bildsequenz, wie sie von den Überwachungskameras erzeugt wird zu importieren.
- Damit die GUI eine solche Sequenz öffnen kann, müssen die Bilder in folgendem Format vorliegen:
- \begin{enumerate}
- \item Alle Bilder befinden sich in einem Ordner
- \item Die Bilder sind aufsteigend nummeriert und im JPG Format gespeichert.
- \item Es existiert eine CSV Datei mit Informationen über Aufnahmezeitpunkt und verwendeter Kamera für jedes Bild im Ordner.
- \end{enumerate}
- Falls die Bilder im obigen Format vorliegen, kann die GUI daraus automatisch eine annotierte Bildsequenz im Format aus Abschnitt \ref{sec:annotationsformat} generieren.
- Natürlich soll die GUI auch für andere Zwecke verwendet werden können.
- Sobald in dem Ordner keine CSV Datei gefunden wird, wird der Ordner von der GUI rekursiv nach Bildern durchsucht.
- Dabei werden die Namen der Unterordner als Kameranamen und das Datum der Dateierstellung als Aufnahmezeitpunkt übernommen.
|