Neuronales Netzwerk mit OpenCV 3 und Python 3

Einführung

Dieses Mal werde ich versuchen, ein neuronales Netzwerk mit OpenCV3 und Python3 zu lernen. Der Fall, dass Bildverarbeitung und neuronales Netzwerk in Kombination verwendet werden, wird nur mit OpenCV abgeschlossen, sodass eine kleine Überprüfung sinnvoll ist. Außerdem sind die Python-Bindungen von OpenCV tatsächlich C ++, und Python ist nur ein Wrapper, der C ++ - Methoden aufruft, sodass das Lernen relativ schnell funktioniert.

■ Ausführungsumgebung · Python: 3.5.2 ・ OpenCV: 3.1

■ Klicken Sie hier für die Installation und einfache Verwendung Installieren Sie OpenCV 3 (Core + Contrib) in der Python 3-Umgebung und unterscheiden Sie zwischen OpenCV 2 und OpenCV 3 und überprüfen Sie die einfache Bedienung

Programm

Dies ist das Mindestprogramm. Eingabeebene: 9 Versteckte Ebene: 5 Ausgabeschicht: 9

nn_mini.png

Aktivierungsfunktion: Sigmoid Lernmethode: Rückenausbreitung Trainingsdaten: ·Eingabedaten    [[1.2, 1.3, 1.9, 2.2, 2.3, 2.9, 3.0, 3.2, 3.3]] ·Ausgabedaten    [[0, 0, 0, 0, 0, 1, 0, 0, 0]] Verifizierungsdaten: ·Eingabedaten    [[1.4, 1.5, 1.2, 2.0, 2.5, 2.8, 3.0, 3.1, 3.8]]

ann.py


# -*- coding: utf-8 -*-
import cv2
import numpy as np

#Generieren Sie ein neuronales Netzwerk
ann = cv2.ml.ANN_MLP_create()
#Einstellungen für Eingabeebene, versteckte Ebene und Ausgabeebene
ann.setLayerSizes(np.array([9, 5, 9], dtype = np.uint8))
#Lernmethodeneinstellungen
ann.setTrainMethod(cv2.ml.ANN_MLP_BACKPROP)
#Lernen
ann.train(np.array([[1.2, 1.3, 1.9, 2.2, 2.3, 2.9, 3.0, 3.2, 3.3]], dtype=np.float32),
          cv2.ml.ROW_SAMPLE,
          np.array([[0, 0, 0, 0, 0, 1, 0, 0, 0]], dtype=np.float32))
#Überprüfung
result = ann.predict(np.array([[1.4, 1.5, 1.2, 2.0, 2.5, 2.8, 3.0, 3.1, 3.8]], dtype = np.float32))
print(result)

Ausführungsergebnis

Das Ausführungsergebnis ist wie folgt.

(5.0, array([[-0.06419383, -0.13360272, -0.1681568 , -0.18708915,  0.0970564 ,  0.89237726,  0.05093023,  0.17537238,  0.13388439]], dtype=float32))

Die Ausgabe für die Eingabe [[1.4, 1.5, 1.2, 2.0, 2.5, 2.8, 3.0, 3.1, 3.8]] ist [[-0.06419383, -0.13360272, -0.1681568, -0.18708915, 0.0970564, 0.89237726, 0.05093023, 0.17537238, 0.13388439]] Es war. Da die zu trainierende Ausgabe [[0, 0, 0, 0, 0, 1, 0, 0, 0]] ist, weist die Eingabe zum Zeitpunkt der Überprüfung einige Schwankungen in Bezug auf die Eingabe zum Zeitpunkt des Lernens auf. Das Überprüfungsergebnis liegt im Bereich von -0,1 bis +0,1, was fast der beabsichtigten Ausgabe entspricht.

Aktivierungsfunktion

Die Standardaktivierungsfunktion ist die Sigmoidfunktion.

setActivationFunction(type, param1, param2)

Geben Sie mit an.

Spezifikationsbeispiel:

activate_function.py


ann.setActivationFunction(cv2.ml.ANN_MLP_SIGMOID_SYM, 0, 0)
Streit Bedeutung Standard
type Aktivierungsfunktion Sigmaid-Funktion
param1 α 0
param2 β 0
Methode Wert Konstante Formel
Gleiche Funktion 0 cv2.ml.ANN_MLP_IDENTITY f(x)=x
Sigmaid-Funktion 1 cv2.ml.ANN_MLP_SIGMOID_SYM f(x)=\beta*(1-e^{-\alpha x})/(1+e^{-\alpha x})
Gaußsche Funktion 2 cv2.ml.ANN_MLP_GAUSSIAN f(x)=\beta e^{-\alpha x*x}

Ausgangsbedingungen

Die Standardeinstellungen für die Endbedingung sind sowohl die maximale Anzahl von Wiederholungen: 1000 als auch der minimale Änderungsbetrag: 0,01.

setTermCriteria(val)

Geben Sie mit an.

Spezifikationsbeispiel:

criteria.py


criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 1000, 0.01)
ann.setTermCriteria(criteria)

Kriterien legt die Werte in der Reihenfolge (Typ, maxCount, epsilon) fest.

· Art

Konstante Bedeutung Wert
cv2.TERM_CRITERIA_COUNT Maximale Anzahl von Wiederholungen 1
cv2.TERM_CRITERIA_MAX_ITER Maximale Anzahl von Wiederholungen 1
cv2.TERM_CRITERIA_EPS Minimale Änderung 2

Einstellungen für die Rückübertragung

  1. Momentkoeffizient Sie können den Momentkoeffizienten für die Differenz zwischen der vorherigen und der vorherigen Iteration festlegen. Wenn Sie diesen Wert bis zu einem gewissen Grad festlegen, können Sie verhindern, dass er in der lokalen Lösung hängen bleibt, und die Konvergenz beschleunigen. Wenn Sie es jedoch zu groß einstellen, wird es am Ende nicht leicht konvergieren oder in einigen Fällen divergieren. Als Faustregel gilt, dass etwa 0,1 gut ist. Der Standardwert ist 0.1.

Spezifikationsbeispiel:

```momentum_scale.py
ann.setBackpropMomentumScale(0.1)
```
  1. Lernkoeffizient Ein Differenzkoeffizient, der die Lerngeschwindigkeit anpasst. Wenn es zu klein ist, konvergiert es nicht leicht, und wenn es zu groß ist, kann es divergieren. Als Faustregel gilt, dass etwa 0,1 gut ist. Der Standardwert ist 0.1.

Spezifikationsbeispiel:

```weight_scale.py
ann.setBackpropWeightScale(0.1)
```
  1. Elastische Rückausbreitung OpenCV3 unterstützt Resilient Backpropagation sowie Backpropagation, die die beiden oben genannten Parameter angeben. Resilient Back Propagation ist ein Algorithmus, der den Lernkoeffizienten abhängig davon ändert, ob sich das Vorzeichen des Lerngradienten zwischen dem vorherigen Zeitpunkt und diesem Zeitpunkt geändert hat.

Klicken Sie hier, um Einzelheiten zur Angabe zu erfahren (Link).

Über die Beziehung zwischen 3-Schicht-Neuronalen Netzwerk und Bildverarbeitung

Einführung von ** Bag Of Visual Words (BOW) ** in "Lernen, Hunde und Katzen mit OpenCV 3 zu klassifizieren" Es ist jedoch bekannt, wie mit BOW ein neuronaler Netzwerkeingang erstellt wird. Ich möchte diesen Bereich zu einem späteren Zeitpunkt noch einmal vorstellen.

Recommended Posts

Neuronales Netzwerk mit OpenCV 3 und Python 3
Neuronales Netzwerk mit Python (Scikit-Learn)
Leuchtendes Leben mit Python und OpenCV
Bilder mit Pupil, Python und OpenCV aufnehmen
2. Mittelwert und Standardabweichung beim neuronalen Netz!
Binarisierung mit OpenCV / Python
Hallo Welt- und Gesichtserkennung mit OpenCV 4.3 + Python
Installieren Sie OpenCV 4.0 und Python 3.7 unter Windows 10 mit Anaconda
Feature Matching mit OpenCV 3 und Python 3 (A-KAZE, KNN)
Generierung der Vorlagen-Netzwerkkonfiguration mit Python und Jinja2
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
"Apple-Verarbeitung" mit OpenCV3 + Python3
Python und Hardware-Verwenden von RS232C mit Python-
Bildbearbeitung mit Python OpenCV
Kameraerfassung mit Python + OpenCV
3. Normalverteilung mit neuronalem Netz!
[Python] Verwenden von OpenCV mit Python (Basic)
Neuronales Netz beginnend mit Chainer
Gesichtserkennung mit Python + OpenCV
Implementierung eines neuronalen Netzwerks in Python
4. Kreisparameter mit einem neuronalen Netzwerk!
Python mit Pyenv und Venv
Netzwerkprogrammierung mit Python Scapy
Verwenden von OpenCV mit Python @Mac
Funktioniert mit Python und R.
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
[Python] Webkamera-Rahmengröße und FPS-Einstellungen mit OpenCV
Laden / Anzeigen und Beschleunigen von GIF mit Python [OpenCV]
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Umgebungskonstruktion von Python und OpenCV
Roboter läuft mit Arduino und Python
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
AM-Modulation und Demodulation mit Python
Scraping mit Node, Ruby und Python
Bildklassifizierung mit selbst erstelltem neuronalen Netzwerk von Keras und PyTorch
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
Einwegverzögerungsmessung des Netzwerks mit Python
Scraping mit Python, Selen und Chromedriver
[Python] Verwenden von OpenCV mit Python (Kantenerkennung)
PRML Kapitel 5 Python-Implementierung für neuronale Netze
Kratzen mit Python und schöner Suppe
Einfaches Klassifizierungsmodell mit neuronalem Netz
JSON-Codierung und -Decodierung mit Python
Hadoop-Einführung und MapReduce mit Python
Einfache Python + OpenCV-Programmierung mit Canopy
[GUI in Python] PyQt5-Drag & Drop-
[TensorFlow] [Keras] Aufbau eines neuronalen Netzwerks mit Keras
Lesen und Schreiben von NetCDF mit Python
Einfache Theorie und Implementierung des neuronalen Netzes
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Schneiden Sie das Gesicht mit Python + OpenCV aus
Gesichtserkennung mit Kamera mit opencv3 + python2.7
Ich habe mit PyQt5 und Python3 gespielt
Laden Sie das GIF-Bild mit Python + OpenCV
Lesen und Schreiben von CSV mit Python
Finden Sie Bildähnlichkeit mit Python + OpenCV
Verwenden Sie OpenCV mit Python 3 in Window
Mehrfachintegration mit Python und Sympy