Spielt ihr Pokemon? Ich habe es zum ersten Mal seit 10 Jahren gekauft ~~ Ich habe es vom Weihnachtsmann bekommen. Mit dem Ziel, eine starke Kraft zu sein, planen wir, zu Hause zu bleiben und während der Jahresend- und Neujahrsferien sorgfältig auszuwählen. Ich habe mich gefragt, ob der Adventskalender etwas mit Pokemon Neta anfangen kann, also habe ich ** eine Methode ausprobiert, die die Grundlage für die Beurteilung eines Deep-Learning-Modells ** zeigt, an dem ich kürzlich interessiert bin, am Beispiel der Pokemon-Drei-Familien-Klassifikation **. Sah.
Deep Learning beginnt in der Gesellschaft in verschiedenen Bereichen zu implementieren, aber es ist eher eine Black Box, auf der das Modell Entscheidungen trifft, auf denen es basiert. In den letzten Jahren wurden Untersuchungen zur "Erklärung" und "Interpretierbarkeit" von Modellen durchgeführt.
Daher möchte ich dieses Mal die in ICML 2018 verwendete Methode Quantitatives Testen mit Konzeptaktivierungsvektoren (TCAV) ausprobieren.
Ableitung von CAV durch Trainieren eines linearen Klassifikators zwischen einem konzeptuellen Bild und einem zufälligen Gegenbeispiel und Erhalten eines zur Entscheidungsgrenze orthogonalen Vektors. (Die folgende Abbildung ist schneller zu sehen).
Das ** "Konzept" **, das das Modell lernt, kann in einer Form quantifiziert werden, die vom Menschen interpretiert werden kann. Beispiel: Lernen von "Streifenmuster" aus "Punktmuster" in der Klassifizierung "Shimauma" Sie können das Lernen auch in jeder Ebene sehen, sodass Sie sehen können, wie grobe / detaillierte Merkmale in den flachen / tiefen Ebenen erfasst werden.
Verstehen Sie die ** Verzerrung ** des Datensatzes Beispiel: In der Klasse "Schürze" ist das Konzept "weiblich" verwandt, in der Klasse "Rugbyball" ist das Konzept "weiß" verwandt
Kann als Bildsortierer verwendet werden (kann nach Ähnlichkeit mit konzeptuellen Bildern sortiert werden)
Dieses Mal ist es mein Ziel, TCAV zu bewegen, also habe ich es zu einer einfachen Aufgabe gemacht. Erstelle einen Pokemon Three Family Classifier.
Die folgenden Bilder wurden mit icrawler gesammelt. Ich werde den Code setzen.
import os
from icrawler.builtin import GoogleImageCrawler
save_dir = '../datasets/hibany'
os.makedirs(save_dir, exist_ok=True)
query = 'Scorbunny'
max_num = 200
google_crawler = GoogleImageCrawler(storage={'root_dir': save_dir})
google_crawler.crawl(keyword=query, max_num=max_num)
Nur minimale Verarbeitung.
Die Bilder wurden so gesammelt. (Übrigens war ich eine schnelle Entscheidung für Hibani. Ich liebe Flammentyp)
Scorbunny | Messon | Sarnori |
---|---|---|
156 Blatt | 147 Blatt | 182 Blatt |
Die folgenden Pokémon außer den drei Familien, Charakterbildern und überdeformierten Illustrationen wurden ebenfalls verwirrt, sodass sie durch visuelle Inspektion ausgeschlossen werden. ~~ Kibana San Cool ~~
Es ist ein einfaches CNN.
Da die Anzahl der Bilder der Testdaten gering ist (ca. 15), flattert die Genauigkeit der Testdaten. Wir haben jedoch ein Klassifizierungsmodell mit einer Genauigkeit erstellt, die für die TCAV-Überprüfung ausreicht.
Sie benötigen eine **. Pb-Datei **, um den CAV zu berechnen. Speichern Sie das Modell daher in .pb. Machen Sie sich als Nächstes bereit, um zu sehen, was das Modell lernt.
Befolgen Sie zur Vorbereitung die folgenden Schritte. (Der Code, den ich dieses Mal verwendet habe, ist auf hier. Ich werde README später richtig schreiben ...)
Das folgende Bild ist für das reguläre Beispielbild vorbereitet. Wir haben mehrere Farben vorbereitet, basierend auf der Hypothese, dass wir die drei Familien anhand der Farben klassifizieren würden. (Obwohl es mit 10 bis 20 Blatt funktioniert, ist es besser, etwa 50 bis 200 Blatt zu haben)
** Beispielbildbeispiel **
Weiß | rot | Blau | Gelb | Grün | schwarz |
---|---|---|---|---|---|
22 Blatt | 20 Blatt | 15 Blatt | 18 Blatt | 21 Blatt | 17 Blatt |
Ich schließe diejenigen aus, die zu viele Farben haben
** Negatives Beispielbildbeispiel ** Alles, was nicht in eines der obigen Beispiele passt, ist wünschenswert. (In diesem Fall ist es schwierig zu sagen, dass es keiner Farbe entspricht.) Dieses Mal habe ich zufällig Bilder von Caltech256 aufgenommen.
Die Verzeichnisstruktur der bisher gesammelten Bilder ist wie folgt. Alle Sätze von konzeptuellen Bildern sollten Unterverzeichnisse sein.
├── datasets
│ ├── for_tcav #Datensatz für TCAV
│ │ ├── black
│ │ ├── blue
│ │ ├── green
│ │ ├── hibany
│ │ ├── messon
│ │ ├── random500_0
│ │ ├── random500_1
│ │ ├── random500_2
│ │ ├── random500_3
│ │ ├── random500_4
│ │ ├── random500_5
│ │ ├── red
│ │ ├── sarunori
│ │ ├── white
│ │ └── yellow
│ └── splited #Datensatz für die Erstellung von Bildklassifizierungsmodellen
│ ├── test
│ │ ├── hibany
│ │ ├── messon
│ │ └── sarunori
│ ├── train
│ │ ├── hibany
│ │ ├── messon
│ │ └── sarunori
│ └── validation
│ ├── hibany
│ ├── messon
│ └── sarunori
Ich werde es zuerst klonen.
git clone [email protected]:tensorflow/tcav.git
Hier erstellen wir einen Wrapper, um Modellinformationen an TCAV zu übermitteln. Fügen Sie diese Klasse zu tcav / model.py hinzu.
class SimepleCNNWrapper_public(PublicImageModelWrapper):
def __init__(self, sess, model_saved_path, labels_path):
self.image_value_range = (0, 1)
image_shape_v3 = [256, 256, 3]
endpoints_v3 = dict(
input='conv2d_1_input:0',
logit='activation_6/Softmax:0',
prediction='activation_6/Softmax:0',
pre_avgpool='max_pooling2d_3/MaxPool:0',
logit_weight='activation_6/Softmax:0',
logit_bias='dense_1/bias:0',
)
self.sess = sess
super(SimepleCNNWrapper_public, self).__init__(sess,
model_saved_path,
labels_path,
image_shape_v3,
endpoints_v3,
scope='import')
self.model_name = 'SimepleCNNWrapper_public'
Jetzt können Sie loslegen. Lassen Sie uns das Ergebnis sofort sehen.
Werfen wir einen Blick auf die Konzepte (diesmal Farben), die in jeder Klasse wichtig sind. Die nicht mit * gekennzeichneten Konzepte sind wichtig.
Hibani-Klasse | Messon Klasse | Sarnori-Klasse |
---|---|---|
Rot / Gelb / Weiß | rot(!?) | Grün |
Ich denke, Hibani und Sarnori sind so. Das Messon ist ein Rätsel, daher ist es wichtig, es zu berücksichtigen. Wenn Sie die Anzahl der Versuche oder die Anzahl der konzeptionellen Bilder / Zielbilder während des Experiments ändern, ändern sich die Ergebnisse erheblich. Ich denke, es ist notwendig, etwas mehr zu berücksichtigen. Es scheint sich zu lohnen, verschiedene Dinge auszuprobieren, da es sich zu ändern scheint, je nachdem, wie Sie das konzeptionelle Bild auswählen.
Ich habe eine Methode ausprobiert, die die Beurteilungsgrundlage des neuronalen Netzwerkmodells zeigt. Es war für den Menschen leicht zu interpretieren, und das Ergebnis war ** "intuitiv so" **. Dieses Mal habe ich die Farbe als konzeptionelles Bild gewählt, da es als Dreifamilienfamilie klassifiziert ist, aber es ist schwierig, das konzeptionelle Bild vorzubereiten. .. Sie müssen verschiedene Vorbereitungen treffen, müssen das Modell jedoch nicht neu lernen. Wenn Sie die einzelnen Schritte einmal ausprobieren und sich daran gewöhnen, können Sie sie problemlos verwenden. Bitte versuchen Sie es auf jeden Fall!
Recommended Posts