[PYTHON] Machine Sommelier von Keras-

In diesem Artikel untersucht der Autor, der dem tiefen Lernen misstraut, die Klassifizierungsfähigkeit des tiefen Lernens. Es gibt Orte, an denen Bilder von Websites und Youtube nach Überprüfung zitiert werden (Quellenbeschreibung). Obwohl es für akademische Zwecke ist, werden wir es löschen, wenn es ein Problem gibt. ** Sammeln Sie die Bilder auch selbst, wenn Sie das Programm verwenden. ** ** ** machine_senban.png

Einführung

Einleitung Einleitung Einleitung

Warum hast du entschieden, dass es Vakuum ist ...

Figure0.png
Figure 0.Neuronales Netz von Bildern von Männern, die R2D2 manipulieren(VGG16)Das Ergebnis der Klassifizierung nach. In der folgenden Grafik sind die Vorhersageklassen in absteigender Reihenfolge der Sicherheit von links angeordnet.

7 große Werkzeugmaschinen (Details in Nikkan Kogyo Shimbun, 11. März 2020)

nikkan_7sha.png
Figure 1.7 große Werkzeugmaschinenhersteller (Bestellungen eingegangen im Februar 2020) Wenn Sie am Inhalt dieses Artikels interessiert sind, lesen Sie bitte die aktuelle Webseite. https://www.nikkan.co.jp/articles/view/00551108
Was ist die Kraft der Deep-Learning-Klassifizierung?

――Es hat nichts mit dem Inhalt des Artikels zu tun (Verkäufe jedes Unternehmens), aber ich habe mich gefragt, ob die Produkte dieser 7 Unternehmen durch tiefes Lernen klassifiziert werden können, also habe ich es versucht. ――Da die Werkzeugmaschine ein Produkt ist, werden anscheinend Daten gesammelt, und ich dachte, es wäre einfach, sie mathematisch zu modellieren. Deshalb wollte ich sehen, wie sie klassifiziert wurden. ――Diese Problemeinstellung ist nicht praktikabel, aber ich denke, Sie können dieses Klassifizierungsframework verwenden.

Aufmerksamkeitspunkte des neuronalen Netzes von Grad-CAM

Schließlich werden die Kriterien für die Bildklassifizierung durch Grad-CAM angezeigt, die jedoch nicht im veröffentlichten Programm enthalten sind. Ich kann es irgendwann in der Zukunft posten. Ob anhand des Logos beurteilt werden soll, ohne explizit festgelegt zu haben, mit dem Logo zu lernen, oder anhand seltsamer Punkte. Nun, nicht alle Produkte haben ein Logo, daher ist es möglicherweise ein Beispiel für die Kraft des tiefen Lernens.

Über den Titel

Das Wort Sommelier ist ein Wort, das nur für Wein verwendet wird, aber in letzter Zeit scheint es, dass es auch für andere als Wein in Form von "Sommelier" verwendet wird.

Programmausführungsumgebung

Erstellen Sie mit Keras ein Modell, um die Produkte von 7 großen Werkzeugmaschinen zu klassifizieren

Figure2_dataset.gif Figure2_resize.png
Figure 2-a Figure 2-b

Glossar

Tiefes Lernen Tiefes Lernen

Deep Learning ist eine Methode des maschinellen Lernens. Maschinelles Lernen ist eine Methode, um Beispieldaten, in den Daten verborgene Lernmuster und die Beziehung zwischen Eingabe und Ausgabe zu ermitteln. Unter diesen ist das neuronale Netzwerk ein Modell, das versucht, Lernen durch Nachahmung eines menschlichen neuronalen Schaltkreises zu realisieren. Was als Ursprung des neuronalen Netzwerks bezeichnet werden kann, ist das 1958 vorgeschlagene einfache Perzeptron. Deep Learning ist eine tiefere Schicht des neuronalen Netzwerks, und die Grundlage dafür ist das neuronale Netzwerk vom Forward Propagation-Typ (Abbildung 3-b.). Ein einfaches Perzeptron multipliziert $ n $ Eingabeknoten mit $ n $ Gewichten $ w $ und addiert sie alle durch die Funktion $ f_ {(x)} $, wie in Abbildung 3-a gezeigt. Durch Hinzufügen von w_ {n + 1} $ wird 1 ausgegeben, wenn die Ausgabe über einem bestimmten Wert liegt, und 0 wird ausgegeben, wenn sie unter einem bestimmten Wert liegt.

Figure3_a.png Figure3_b.png
Figure 3-a.Konzeptdiagramm des einfachen Perzeptrons Figure 3-b.Konzeptdiagramm des neuronalen Netzwerks mit Vorwärtsausbreitung

Darüber hinaus wird das neuronale Netzwerk vom Vorwärtsausbreitungstyp bei der Bilderkennung häufig als Faltungs-Neuronales Netzwerk verwendet.

Faltungsneuronales Netzwerk

Ein Faltungs-Neuronales Netzwerk (CNN) ist ein neuronales Vorwärtsausbreitungsnetzwerk, in dem Einheiten auf der Seite der Ausgangsschicht mit bestimmten Einheiten auf der Seite der benachbarten Eingangsschicht verbunden sind. CNN hat eine spezielle Schicht, die als Faltungsschicht und Pooling-Schicht bezeichnet wird. In der Faltungsschicht wird eine Merkmalskarte erhalten, indem ein Filter (Kernel) auf die Eingabedaten angewendet wird. Obwohl in diesem Artikel weggelassen, ist CNN ein sehr wichtiger Prozess bei der Bilderkennung. Abbildung 4 zeigt ein Beispiel für die CNN-Verarbeitung.

ch2_cnn.png
Figure 4.Beispiel für eine CNN-Verarbeitung

Klassifizierung Bildklassifizierung

Ich denke, es gibt hauptsächlich vier Arten im Bereich der Bilderkennung. Einige Anwendungen haben eine komplexere Ausgabe, aber dieses Mal werden wir sie weglassen.

** ・ Klassifizierung Bildklassifizierung ** Erraten Sie, welcher Klasse die Eingabe entspricht (jede Ausgabe die Wahrscheinlichkeit) (Abbildung 5-a)

Figure4_a.png 50%
Figure 5-a.Klassifizierungsbeispiel. Die Klassifizierung mit VGG16 (einem unten beschriebenen Netzwerktyp), die mit ImageNet (später beschrieben) trainiert wurde, schlägt aufgrund dieses Beispiels fehl (am Ende erläutert).
[Falten. Klicken Sie auf ▶] Übrigens (Vakuum) ImageNet scheint Daten wie die folgenden Websites zu enthalten. Kein Wunder, dass dies mit Vakuum verwechselt wird ... https://www.myhenry.co.uk/

** ・ Erkennung Objekterkennung ** Erraten Sie, welche Objektklasse in welchem Koordinatenbereich für die Eingabe mit einem Rechteck vorhanden ist (Abbildung 5-b).

Figure4_b.png
Figure 5-b.Erkennungsbeispiel. Die Erkennung durch Yolo (eine Art Lernarchitektur), die in Pascal VOC2012 (später beschrieben) trainiert wurde, kann in diesem Beispiel Personen gut erkennen, aber den Roboter"parking meter"Wird falsch erkannt.
[Falten. Klicken Sie auf ▶] Übrigens (Parkuhr) Wie die Parkuhr aussieht, steht im folgenden Artikel. https://arxiv.org/pdf/2003.07003.pdf parking_meter.PNG Es sieht aus wie ein Roboter, aber ...

** ・ Semantische Segmentierung des semantischen Segmentierungsbereichs ** Klassifizieren Sie jedes Eingangspixel (Abbildung 5-c).

Figure4_c.png
Figure 5-c.Ein Beispiel für semantische Segmentierung. Deeplab V3 lernte bei Pascal VOC 2018+Die semantische Segmentierung durch errät in diesem Beispiel den menschlichen Bereich korrekt. Der Roboter wird als Hintergrund erkannt.

** · Instanzsegmentierung ** = Erkennung + Segmentierung (Abbildung 5-d)

Figure4_d.png

Abbildung 5-d. Beispiel für eine Instanzsegmentierung. Die von Microsoft COCO (später beschrieben) trainierte Instanzsegmentierung nach Maske R-CNN kann in diesem Beispiel auf die menschliche Domäne schließen, ist jedoch grob. Der Roboter wird als Hintergrund erkannt. |

Dieses Mal wenden wir Softmax am Ende des Netzwerks an und führen eine "** Klassifizierung **" durch, um zu erraten, welcher Klasse die Eingabe entspricht.

Backbone Backbone ist ein Feature-Extraktionsnetzwerk. Dies ist der Teil, in dem die Ebene des Eingabeteils und des Ausgabeteils (Kopf) entfernt wird. Dieses Mal werden wir ResNet50 und Mobilenet (später beschrieben) verwenden. Beide werden von Keras bereitgestellt, sodass Sie kein eigenes Netzwerk aufbauen müssen. Sie können es wie folgt importieren.

from keras.applications.resnet50 import ResNet50

base_model = ResNet50(
    include_top = False,
    weights = "imagenet",
    input_shape = INPUT_SHAPE
)

Da Backbone ein neuronales Netzwerk ist, bestimmt das Training in einem bestimmten Datensatz einige Gewichte (Gewichte im obigen Programm).

Head (Top) Dies ist der Teil in der Nähe des Ausgangs des neuronalen Netzwerks. Sie können die Ausgabe ändern, indem Sie include_top = False setzen, wenn Sie ein vorhandenes Backbone laden. Es ist möglich, je nach Zweck zu ändern, z. B. die Anzahl der Ebenen zu erhöhen und die Genauigkeit zu verbessern oder die Anzahl der Klassifizierungsklassen zu ändern (ich denke, dass die Anzahl der Klassen mit dem Argument geändert werden kann ...). Dieses Mal wurde das Kopfteil wie folgt konstruiert.

top_model.add(Flatten(input_shape=base_model.output_shape[1:]))
top_model.add(Dropout(0.5))
top_model.add(Dense(nb_classes, activation='softmax'))
# Concatenate base_model(backbone) with top model
model = Model(input=base_model.input, output=top_model(base_model.output))

Grad-CAM Das Grad-CAM-Papier finden Sie weiter unten. Bitte lesen Sie für Details. Ramprasaath R. Selvaraju · Michael Cogswell · Abhishek Das · Ramakrishna Vedantam · Devi Parikh · Dhruv Batra, Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization, arXiv:1610.02391v4 [cs.CV] 3 Dec 2019 (https://arxiv.org/abs/1610.02391) Dieses Papier wird im Folgenden als Grad-CAM-Papier bezeichnet. Einige der Abstracts des Grad-CAM-Papiers sind:

We propose a technique for producing ‘visual explanations’ for decisions from a large class of Convolutional Neural Network (CNN)-based models, making them more transparent and explainable. Our approach–Gradient-weighted Class Activation Mapping (Grad-CAM), uses the gradients of any target concept (say ‘dog’ in a classification network or a sequence of words in captioning network) flowing into the final convolutional layer to produce a coarse localization map highlighting the important regions in the image for predicting the concept.

→ Die vorgeschlagene Methode erklärt visuell die Entscheidungen, die aus der großen Klasse von CNN-basierten Modellen getroffen wurden, wodurch die Transparenz und Interpretierbarkeit des Modells verbessert wird. Grad-CAM verwendet einen Gradienten des interessierenden Konzepts (z. B. ein hundeartiges Etikett), der in die letzte Ebene eingeht, um eine grobe Feature-Map zu erstellen und wichtige Positionen auf dem Bild hervorzuheben, wenn Vorhersagen getroffen werden. ..

Figure6.png
Figure 6. Grad-Abb. Im CAM-Papier.2 Bilder

Das Ergebnis der "Hervorhebung wichtiger Positionen auf dem Bild bei der Vorhersage" ist die Farbkarte (a in Abbildung 6) mit der Bezeichnung Grad-CAM im obigen Bild. Dieses Mal werden wir diese Farbkarte generieren und prüfen, wo im Eingabebild wir uns bei der Vorhersage der Klasse konzentriert haben.

** Fasste den Verarbeitungsablauf von Grad-CAM zusammen ** (Es tut mir leid, wenn ich einen Fehler gemacht habe). ** 1. Eingabe und Vorhersage in CNN **: In der Deep-Learning-Architektur wird eine Feature-Map ausgegeben, wenn das Eingabebild das CNN durchläuft, und basierend darauf ein Array von Wahrscheinlichkeiten, welcher Klasse die Eingabe entspricht. Wird ausgegeben als (b in Abbildung 6.).

    plobs_pred = model.predict(input_tests)
    cls_idx = np.argmax(model.predict(x))
    cls_output = model.output[:, cls_idx]
    conv_output = model.get_layer(layer_name).output 

** 2. Berechnung des Gradienten $ \ frac {\ partiell y ^ {c}} {\ partiell A_ {ij} ^ {k}} $ **: Backpropagation mit 1 für die Zielklasse und 0 für die anderen Ich werde das machen. Da es ausreicht, den Gradienten mit der letzten Schicht zu nehmen, berechnen Sie wie folgt. In diesem Fall lautet die Variable Layername Activation_49 für ResNet50 und conv_pw_13_relu für Mobilenet. $ A_ {i j} ^ {k} $ im Grad-CAM-Papier wurde durch die folgende fmap_activation gefunden. $ \ frac {\ partiell y ^ {c}} {\ partiell A_ {ij} ^ {k}} $ ist die Punktzahl $ y ^ {c} der Klasse $ c $ für $ A_ {ij} ^ {k} $ Es ist ein Gradient von $, und fmap_activation wird nicht zur Berechnung des Gradienten verwendet. Ich denke, es ist eine Frage der Bedeutung.

    grads = keras.backend.gradients(cls_output, conv_output)[0]  
    gradient_function = keras.backend.function([model.input], [conv_output, grads]) 
    fmap_activation, grads_val = gradient_function([x])
    fmap_activation, grads_val = output[0], grads_val[0]

** Achtung ** Die obige Eingabe x muss mit img_to_array usw. vorverarbeitet werden.

** 3. Berechnung des Gewichts $ \ alpha_ {k} ^ {c} $ **: Nehmen Sie den Durchschnitt der Verläufe für jeden Kanal und verwenden Sie ihn als Gewicht. Dies ist die Verarbeitung des Teils, der Gleichung (1) des folgenden Grad-CAM-Papiers entspricht. Vor Grad-CAM musste Class Activation Mapping (CAM) eine globale durchschnittliche Pooling-Schicht (GAP) hinzufügen (CAM wird als Produkt aus der Feature-Map und dem Gewicht der letzten Layer berechnet, und die Feature-Map wird mit GAP gewichtet. Erhalten). Mit Grad-CAM kann der GAP-Teil jedoch durch eine Berechnung des Backpropagation-Gradienten ersetzt werden, und die Visualisierung ist möglich, ohne das Modell zu ändern.

\alpha_{k}^{c}=\frac{1}{Z} \sum_{i} \sum_{j} \frac{\partial y^{c}}{\partial A_{i j}^{k}}
    alpha = np.mean(grads_val, axis=(0, 1))

** 4. Lokale Karte zur Klassenidentifikation (Grad-CAM) $ L_ {\ text {Grad} - \ mathrm {C} A \ mathrm {M}} ^ {c} $ Berechnung **: Grad-CAM Die Berechnung von Gleichung (2) wird wie folgt durchgeführt. Der Sigma-Teil wird durch das innere Produkt von Numpy berechnet, und ReLU hat null Negativ, wie in Abbildung 7 gezeigt. Daher können wir sehen, dass das Maximum von Numpy verwendet werden sollte.

Figure7_ReLU.png
Figure 7.ReLU-Diagramm
L_{\mathrm{Grad}-\mathrm{CAM}}^{c}=\operatorname{ReLU}\left(\sum_{k} \alpha_{k}^{c} A^{k}\right)
    l_gradcam = np.dot(fmap_activation, alpha)#Sigma Teil
    l_gradcam = cv2.resize(l_gradcam, (img_h, img_w), cv2.INTER_LINEAR) 
    l_gradcam = np.maximum(l_gradcam, 0) #Entspricht der ReLU-Berechnung
    l_gradcam = l_gradcam / l_gradcam.max()

Danach ist die JET-Konvertierung mit cv2.applyColorMap usw. zum Erstellen einer Farbkarte abgeschlossen.

Aussteigen

Eine als Dropout bezeichnete Technik wird angewendet, um ein Übertraining des Netzwerks zu verhindern (ein Phänomen, bei dem Validierungsdaten nur aufgrund einer Überanpassung an Trainingsdaten ungenau sind). Wiederholen Sie das Lernen, indem Sie einige Knoten im Netzwerk deaktivieren, um die Generalisierungsleistung zu verbessern.

Verlustfunktion

Ich habe es letztes Mal kurz erklärt (Weinklassifizierung durch Keras), also werde ich es weglassen. Da es sich bei dieser Zeit auch um eine Mehrklassenklassifikation handelt, wird ** category_crossentropy ** verwendet. Weinklassifizierung nach Keras: https://qiita.com/moriitkys/items/2ac240437a31131108c7

Optimierungsfunktion

Ich habe es letztes Mal kurz erklärt (Weinklassifizierung durch Keras), also werde ich es weglassen. Aufgrund verschiedener Versuche war ** SGD ** diesmal am besten zu lernen, daher werde ich es übernehmen.

Die obige Verlustfunktion und Optimierungsfunktion befinden sich in dem Teil, der das Modell in Zelle 2 des auf github hochgeladenen Codes kompiliert.

model.compile(
    optimizer = SGD(lr=0.001),
    loss = 'categorical_crossentropy',
    metrics = ["accuracy"]
)

Tkinter Da es sich um eine Standardbibliothek (Widget-Toolkit) zum Erstellen und Betreiben einer GUI aus Python handelt, kann diese Bibliothek verwendet werden, wenn Python installiert wird, ohne etwas zu tun. Das GUI-Fenster, das diesmal mit dem auf github veröffentlichten Notebook funktioniert, sieht wie folgt aus.

Das Programm ist unten. Ich denke, es wird funktionieren, auch wenn Sie es so kopieren und einfügen, wie es ist. Es gibt drei Arten von Schaltflächen, und die Funktion click_flag_train wird beim Drücken rot und der Flag-Wert ändert sich. Drücken Sie zunächst im Inferenzmodus auf Zugmodus, drücken Sie auf Inferenzmodus und so weiter. Das Etikett ändert sich ebenfalls. Ein Optionsfeld ist ebenfalls installiert, und Sie können auswählen, welches Backbone mit tkinter.Radiobutton verwendet werden soll. Drücken Sie abschließend die Start-Taste unten, um das Fenster zu schließen und mit dem Programm darunter fortzufahren.

Figure8_tkinter.gif
Figure 8.Betriebszustand von Tkinter
import os
import numpy as np

flag_train = False
type_backbone = "ResNet50"
layer_name_gradcam = "activation_49"

# --- Setting buttons ---
import tkinter
tki = tkinter.Tk()
tki.geometry('300x400')
tki.title('Settings')

radio_value_aug = tkinter.IntVar() 
radio_value_split = tkinter.IntVar() 
radio_value = tkinter.IntVar() 

label = tkinter.Label(tki, text='Mode: Inference')
label.place(x=50, y=60)

def callback(event):
    if event.widget["bg"] == "SystemButtonFace":
        event.widget["bg"] = "red"
    else:
        event.widget["bg"] = "SystemButtonFace"
def click_flag_train():
    global flag_train
    if flag_train == True:
        label['text'] = 'Mode: Inference'
        flag_train = False
    else:
        label['text'] = 'Mode: Train'
        flag_train = True
def click_start():
    tki.destroy()
    
# Create buttons
btn_flag_train = tkinter.Button(tki, text='Train', command = click_flag_train)
btn_start = tkinter.Button(tki, text='Start', command = click_start)
label1 = tkinter.Label(tki,text="1. Select Train or Inference")
label1.place(x=50, y=30)
btn_flag_train.place(x=50, y=100)

label2 = tkinter.Label(tki,text="2. Select ResNet50 or Mobilenet")
label2.place(x=50, y=150)
rdio_one = tkinter.Radiobutton(tki, text='ResNet',
                             variable=radio_value, value=1) 
rdio_two = tkinter.Radiobutton(tki, text='Mobilenet',
                             variable=radio_value, value=2) 
rdio_one.place(x=50, y=180)
rdio_two.place(x=150, y=180)

label3 = tkinter.Label(tki,text="3. Start")
label3.place(x=50, y=250)
btn_start.place(x=50, y=280)

# Display the button window
btn_flag_train.bind("<1>",callback)
btn_start.bind("<1>",callback)
tki.mainloop()

if radio_value.get() == 1:
    type_backbone = "ResNet50"
    layer_name_gradcam = "activation_49"
elif radio_value.get() == 2 :
    type_backbone = "Mobilenet"
    layer_name_gradcam = "conv_pw_13_relu"

print(flag_train)
print(type_backbone)

Es ist nicht das Hauptthema dieser Zeit, aber Tkinter ist lang geworden.

** Ende des Glossars **


ResNet50 VS Mobilenet V1

Grob gesagt besteht der Unterschied zwischen beiden darin, dass ResNet schwer und sehr genau ist und Mobilenet leicht und leicht ungenau ist. Unten finden Sie einen detaillierten Vergleich.

ResNet

Figure9_resnet50_layers_1.jpg Figure9_resnet50_rb.PNG
Figure 9-a.ResNet-Modellstruktur Figure 9-b.Reststruktur
Figure10-a.PNG Figure10-b.PNG
Figure 10-a.Anzahl der ResNet-Parameter Figure 10-b.ResNet lernen

Die Reststruktur hat eine Struktur, in der die Identitätsfunktion so wie sie ist zur Ausgabe hinzugefügt wird, wie in 9-b gezeigt, und es ist weniger wahrscheinlich, dass der Gradient verschwindet, wenn die Schicht vertieft wird. Daher hat ResNet eine komplexere Ausdruckskraft gewonnen.

Mobilenet V1

Figure10_mvnet.png Figure10_dw-pw.png
Figure 11-a.Mobilenet V1 Struktur Figure 11-b. Depthwise Separable Convolution
Figure12_nn.PNG Figure12_epochs.PNG
Figure 12-a.Anzahl der Parameter von Mobilenet V1 Figure 12-b.Mobilenet V1 lernen

Wie in Abbildung 11-b gezeigt, führt die Struktur der durch die Tiefe trennbaren Faltung den Faltungsprozess in zwei Schritten aus: Faltung in räumlicher Richtung (vertikal und horizontal) und dann Faltung in Kanalrichtung. Normalerweise machst du das alles auf einmal. Das Prinzip, warum das Gewicht in zwei Schritten reduziert wird, wird im Artikel ausführlich durch Lesen des Papiers oder im Qiita-Artikel einer anderen Person erläutert, daher werde ich es dieses Mal weglassen (vielleicht werde ich es in Zukunft schreiben).

Lerneinstellungen

・ Es gibt 7 Arten von Klassen: Kategorien = ["Makino", "Okuma", "OKK", "Toshiba", "JTEKT", "Tsugami", "Mitsubishi"] -Die Anzahl der Datensätze ist in der folgenden Tabelle 1 aufgeführt. Die Erweiterung führt Helligkeitsänderungen, Pfefferrauschen, Ausschnitte und Transformationen durch. ・ Datensatzteilungszug: Validierung = 6: 4 -Die vertikale und horizontale Größe des Bildes beträgt 197x197 für ResNet50 und 192x192 für Mobilenet. ・ Ausfall, Verlustfunktion, Optimierungsfunktion wurden bereits erläutert. ・ Alle Ebenen sind Lernziele -Ratch batch_size = 32, 30 Epochen Training auf ResNet50 bzw. Mobilenet V1

Tabelle 1. Aufschlüsselung des Datensatzes

Klasse Anzahl der Blätter vor der Expansion Anzahl der Blätter nach der Expansion
1 Makino 105 2088
2 Okuma 72 1368
3 OKK 75 1800
4 Toshiba 7 504
5 JTEKT 60 2160
6 Tsugami 45 1620
7 Mitsubishi 24 1152

Ergebnis

Verlust und Genauigkeit

Ich denke, dass das Lernen durch den Übergang von Verlust und Genauigkeit konvergiert hat. (Obwohl es störend ist, dass die Bewertung 1,0 ist) Erstens ist der Übergang von Verlust und Genauigkeit beim Lernen mit ResNet 50 30 Epochen wie folgt. Je kleiner der Verlust und je größer die Genauigkeit, desto besser das Lernen. Blau ist die Genauigkeit der Zugdaten und Orange ist die Genauigkeit der Valodationsdaten. Sie können auch die Auswirkung des Aussetzers sehen (weniger genau in Zugdaten).

Figure13-a.png Figure13-b.png
Figure 13-a.Verlust für jede Epoche in ResNet 50 Figure 13-b.Genauigkeit für jede Epoche von ResNet 50

Als nächstes ist der Übergang von Verlust und Genauigkeit beim Lernen von 30 Epochen mit Mobilenet V1 wie folgt. Blau ist die Genauigkeit der Zugdaten und Orange ist die Genauigkeit der Valodationsdaten.

Figure14-a.png Figure14-b.png
Figure 14-a.Verlust für jede Epoche auf Mobilenet Figure 14-b.Genauigkeit für jede Epoche von Mobilenet

Erraten der Ergebnisse anhand unbekannter Testbilder

Unter Verwendung dieses 30 Epochen trainierten Gewichts werden 28 unbekannte Bilder gesammelt und geschätzt, die nicht für das Training oder die Bewertung verwendet werden, und die Ergebnisse sind in der folgenden Tabelle 2 zusammengefasst.

Tabelle 2. Vermutungsergebnisse für jedes Testbild jedes Modells

table2-1.png table2-2.png table2-3.png table2-4.png table2-5.png table2-6.png table2-7.png
Gesamtzahl der Testbilder ResNet50 Gesamtzahl der richtigen Antworten Mobilenet Gesamtzahl der richtigen Antworten
28 26 23
Richtige Antwortrate 0.929 0.821

Aus diesem Grund war ResNet etwa 10% genauer.

Visualisierung mit Grad-CAM

Darüber hinaus visualisiert Grad-CAM den interessierenden Bereich, aber es scheint, dass wir auf den leicht logoähnlichen Teil (insbesondere ResNet) achten.

Figure15-1.png
Figure 15-1.Erraten Sie die Ergebnisse und visualisieren Sie Makinos Testbild https://www.youtube.com/watch?v=mMgyLnV7l6M
Figure15-2.png
Figure 15-2.Erraten der Ergebnisse und Visualisierung von Okumas Testbild https://www.youtube.com/watch?v=f_qI1sxj9fU
Figure15-6.png
Figure 15-3.Erraten der Ergebnisse und Visualisierung von Tsugamis Testbild https://www.youtube.com/watch?v=rSTW2hEfSns

Es kann nicht so sein ...

Figure15-5.png
Figure 15-4.Ergebnisse und Visualisierung der JTEKT-Testbildschätzung https://www.youtube.com/watch?v=SVtN08ASIrI

Viele Visualisierungen erweckten den Eindruck, dass ResNet sich stark auf Logos, Farben und unterschiedliche Formen (Kanten usw.) konzentrierte, Mobilenet jedoch im Allgemeinen verschwommen war und die Funktionen nicht vollständig erfassen konnte. Es sieht auch so aus.

Es scheint, dass OKKs Typ sich durch Farbe auszeichnet.

Figure15-3.png
Figure 15-5.Erraten des Ergebnisses und Visualisierung des OKK-Testbilds https://www.youtube.com/watch?v=Xfk3wXWleUs&t=21s

Über "Einführung in den Anfang"

Figure0.png Der Grund, warum das erste Bild als Vakuum beurteilt wurde, ist nicht, dass die Netzwerkstruktur schlecht ist, sondern dass es sich um ein Datensatzproblem handelt. Und ich habe über die folgenden drei Gründe nachgedacht.

Ich mache mir jedoch Sorgen, dass Person nicht in den Top 10 enthalten ist. Als ich dann das Bild eines Menschen erriet, der nach vorne blickte, gab es viele Vermutungen über Kleidung wie Hemden, Krawatten und Anzüge. Aus diesem Grund denke ich, dass das Tragen einer Maske die Genauigkeit menschlicher Vermutungen mit ImageNet verringert.

Impressionen

――Makino Millings Website war der beste Weg, um Datensätze zu sammeln. Dies liegt daran, dass einige Produkte aus unterschiedlichen Winkeln aufgenommen wurden und es viele Bilder gibt, die ähnlich aussehen. OKK hat bis auf einige auch eine charakteristische Farbe, daher kann es für NN geschätzt werden. ―― Da es sich um Transferlernen handelt, könnte ich, wenn es sich um ein ähnliches Bild handelt, bis zu einem gewissen Grad lernen, selbst wenn es weniger als 100 beträgt. Dieses Beispiel ist jedoch zu speziell und möglicherweise nicht sehr hilfreich. Insbesondere der Übergang von Verlust und Genauigkeit ist so schön, dass ich den Datensatz und die Parametereinstellung nicht für angemessen halte. ――Was mir am meisten klar ist, dass ** Datensätze sehr wichtig sind **, aber unter dem Gesichtspunkt der Ergebnisse und der Genauigkeit dieser Visualisierung stellt sich heraus, dass das Netzwerk auch einen gewissen Einfluss hat. Ich tat. ――Für die Visualisierung hatte ich gehofft, Funktionen zu entdecken, die nicht sofort erkennbar sind, anstatt Funktionen wie Logos und Farben, aber ich habe noch nicht alle gesehen. Selbst wenn ich es schaffen kann, finde ich es nicht gut, hier viele Bilder zu veröffentlichen ... ――In dieser Überprüfung ist die Problemeinstellung selbst nicht praktikabel, aber ich denke, dass es sich um ein benutzerfreundliches Notizbuch handelt, wenn Sie die Lernergebnisse schnell sehen möchten. ――Artikel und Programme haben noch einige grobe Teile, die Sie jedoch trennen müssen. Wenn Sie Korrekturen oder Kommentare haben, kontaktieren Sie uns bitte.

Referenz

https://www.ling.upenn.edu/courses/cogs501/Rosenblatt1958.pdf https://keras.io/ja/models/sequential/ https://keras.io/ja/applications/ https://www.bigdata-navi.com/aidrops/2611/ https://qiita.com/simonritchie/items/f6d6196b1b0c41ca163c https://qiita.com/kinziro/items/69f996065b4a658c42e8 http://www.image-net.org/ https://cocodataset.org/#home http://host.robots.ox.ac.uk/pascal/VOC/ https://arxiv.org/pdf/1409.1556.pdf https://pjreddie.com/darknet/yolo/ https://github.com/tensorflow/models/tree/master/research/deeplab https://arxiv.org/abs/1703.06870

https://docs.python.org/ja/3/library/tkinter.html https://qiita.com/simonritchie/items/da54ff0879ad8155f441

https://www.makino.co.jp/ja-jp/ https://www.okuma.co.jp/mold-industry/index.html https://www.okk.co.jp/product/index.html https://www.shibaura-machine.co.jp/jp/product/machinetool/ https://www.jtekt.co.jp/ https://www.tsugami.co.jp/ https://www.mhi-machinetool.com/

https://qiita.com/moriitkys/private/2ac240437a31131108c7

Recommended Posts

Machine Sommelier von Keras-
Maschinelle Übersetzung von Amazon Translate
4 [/] Vier Arithmetik durch maschinelles Lernen
Die Struktur der Liste, die von model.get_weights () von Keras erhalten wird
Zusammenfassung des maschinellen Lernens von Python-Anfängern
Kontrolle eines Sandwich-Mannes durch maschinelles Lernen ver4
[Fehler] Finde Maki Horikita durch maschinelles Lernen
Vier Betriebsregeln mit maschinellem Lernen 6 [Kommerziell]
Objekterkennung durch tiefes Lernen, Keras tief zu verstehen
Python & maschinelles Lernen Lernnotiz Machine: Maschinelles Lernen durch Rückausbreitung