[PYTHON] Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen

Überblick

Ich habe ein Programm für SRCNN erstellt, das eine der Super Resolution-Methoden ist, also werde ich es veröffentlichen. Es wird lange dauern, also plane ich, es in drei Teile zu teilen. Fortsetzung: Ich habe versucht, eine Super-Resolution-Methode / SRCNN② zu erstellen Fortsetzung: Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen

Inhaltsverzeichnis

  1. Zuallererst
  2. PC-Umgebung
  3. Codebeschreibung
  4. Am Ende

1. Zuallererst

Super-Resolution ist eine Technologie, die die Auflösung von Bildern mit niedriger Auflösung und bewegten Bildern verbessert. SRCNN verwendet Deep Learning, um Ergebnisse mit höherer Genauigkeit als herkömmliche Methoden zu messen. Es ist die Methode, die gemacht wurde. Dieses Mal habe ich dieses SRCNN implementiert, also werde ich es veröffentlichen.

Der vollständige Code ist auch auf GitHub veröffentlicht. Überprüfen Sie ihn daher dort. https://github.com/morisumori/srcnn_keras

2. PC-Umgebung

cpu : intel corei7 8th Gen gpu : NVIDIA GeForce RTX 1080ti os : ubuntu 20.04

3. Codebeschreibung

Wie Sie aus GitHub sehen können, besteht es hauptsächlich aus drei Codes. ・ Datacreate.py → Programm zur Datensatzgenerierung ・ Model.py → SRCNN-Programm ・ Main.py → Ausführungsprogramm Ich habe eine Funktion mit datacreate.py und model.py erstellt und mit main.py ausgeführt.

__ Dieses Mal werde ich datacreate.py erklären. __ __

Beschreibung von detacreate.py

datacreate.py



import cv2
import os
import random
import glob
import numpy as np
import tensorflow as tf

#Ein Programm, das eine beliebige Anzahl von Frames ausschneidet
def save_frame(path,        #Pfad der Datei, die die Daten enthält
               data_number, #Anzahl der Fotos, die aus einem Bild ausgeschnitten werden sollen
               cut_height,  #Speichergröße(Vertikal)
               cut_width,   #Speichergröße(Seite)
               mag,         #Untersetzungsverhältnis
               ext='jpg'):

    #Generieren Sie eine Liste von Datensätzen
    low_data_list = []
    high_data_list = []

    path = path + "/*"
    files = glob.glob(path)
    
    for img in files:
        img = cv2.imread(img, cv2.IMREAD_GRAYSCALE)
        H, W = img.shape

        if cut_height > H or cut_width > W:
            return

        for q in range(data_number):
            ram_h = random.randint(0, H - cut_height)
            ram_w = random.randint(0, W - cut_width)
          
            cut_img = img[ram_h : ram_h + cut_height, ram_w: ram_w + cut_width]
            
            #Mit Gauß-Filter verwischen
            img1 = cv2.GaussianBlur(img, (5, 5), 0)
            img2 = img1[ram_h : ram_h + cut_height, ram_w: ram_w + cut_width]
            
            high_data_list.append(cut_img)
            low_data_list.append(img2)
    
    #numpy → tensor +Normalisierung
    low_data_list = tf.convert_to_tensor(low_data_list, np.float32)
    high_data_list = tf.convert_to_tensor(high_data_list, np.float32)
    low_data_list /= 255
    high_data_list /= 255

    return low_data_list, high_data_list

Von hier aus werde ich individuell erklären.

def save_frame(path,        #Pfad der Datei, die die Daten enthält
               data_number, #Anzahl der Fotos, die aus einem Bild ausgeschnitten werden sollen
               cut_height,  #Speichergröße(Vertikal)
               cut_width,   #Speichergröße(Seite)
               mag,         #Untersetzungsverhältnis
               ext='jpg'):

Hier ist die Definition der Funktion. Wie ich im Kommentar geschrieben habe, Pfad ist der Pfad der Datei. (Wenn die Datei mit dem Namen file beispielsweise Fotos enthält, geben Sie "./file" ein.) data_number schneidet mehrere Fotos aus und dreht die Daten. cut_height und cut_wedth sind die Größe der Daten. Ich benutze kein Mag ... (weil ich dieses Mal einen Gaußschen Filter verwendet habe, um Bilder mit niedriger Auflösung zu erzeugen)

    path = path + "/*"
    files = glob.glob(path)

Dies ist eine Liste aller Fotos in der Datei.

for img in files:
        img = cv2.imread(img, cv2.IMREAD_GRAYSCALE)
        H, W = img.shape

        if cut_height > H or cut_width > W:
            return

        for q in range(data_number):
            ram_h = random.randint(0, H - cut_height)
            ram_w = random.randint(0, W - cut_width)
          
            cut_img = img[ram_h : ram_h + cut_height, ram_w: ram_w + cut_width]
            
            #Mit Gauß-Filter verwischen
            img1 = cv2.GaussianBlur(img, (5, 5), 0)
            img2 = img1[ram_h : ram_h + cut_height, ram_w: ram_w + cut_width]
            
            high_data_list.append(cut_img)
            low_data_list.append(img2)

Hier nehme ich die zuvor aufgelisteten Fotos einzeln heraus und schneide so viele wie die Anzahl der Datennummern aus. Ich verwende random.randint, weil ich es zufällig schneiden möchte. Dann wird es mit einem Gaußschen Filter unscharf, um ein Bild mit niedriger Auflösung zu erzeugen. Schließlich habe ich es der Liste mit Anhängen hinzugefügt.

    #numpy → tensor +Normalisierung
    low_data_list = tf.convert_to_tensor(low_data_list, np.float32)
    high_data_list = tf.convert_to_tensor(high_data_list, np.float32)
    low_data_list /= 255
    high_data_list /= 255

    return low_data_list, high_data_list

Hier ist es in Keras und Tensorflow erforderlich, anstelle eines Numpy-Arrays in einen Tensor zu konvertieren, sodass eine Konvertierung durchgeführt wird. Gleichzeitig erfolgt hier die Normalisierung.

Schließlich endet die Funktion mit einer Liste mit Bildern mit niedriger Auflösung und einer Liste mit Bildern mit hoher Auflösung.

4. Am Ende

Dieses Mal erklärte ich das Datengenerierungs- und Vorverarbeitungsprogramm. Als nächstes werde ich das Programm des SRCNN-Modells erklären. Fortsetzung: Ich habe versucht, eine Super-Resolution-Methode / SRCNN② zu erstellen Fortsetzung: Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen

Da ich zum ersten Mal einen Artikel schreibe, ist er möglicherweise schwer zu verstehen. Wenn Sie jedoch Fragen oder Kommentare haben, zögern Sie bitte nicht, mich zu kontaktieren!

Recommended Posts

Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich habe versucht, eine Super-Resolution-Methode / ESPCN zu erstellen
[Go + Gin] Ich habe versucht, eine Docker-Umgebung zu erstellen
Ich habe versucht "Wie man eine Methode in Python dekoriert"
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich möchte eine Python-Umgebung erstellen
Ich habe eine Web-API erstellt
Ich habe versucht zu debuggen.
Ich habe versucht, eine zufällige Zeichenfolge zu generieren
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Ich habe versucht, einen "verdammt großen Literaturkonverter" zu machen.
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich möchte einfach eine modellbasierte Entwicklungsumgebung erstellen
Ich habe versucht, eine ML-Pipeline mit Cloud Composer zu erstellen
CTF-Anfänger haben versucht, einen Problemserver (Web) zu erstellen [Problem]
Ich habe versucht, die Methode zur Mittelung der Dollarkosten zu simulieren
Ich habe CPython eine Funktion hinzugefügt (Build & Structure Grasp)
Ich habe versucht, ein Konfigurationsdiagramm mit Diagrammen zu zeichnen
Ich habe versucht, PredNet zu lernen
Ich habe versucht, SVM zu organisieren.
Ich habe versucht, PCANet zu implementieren
Ich habe versucht, Linux wieder einzuführen
Ich habe versucht, Pylint vorzustellen
Ich habe versucht, SparseMatrix zusammenzufassen
jupyter ich habe es berührt
Ich habe versucht, StarGAN (1) zu implementieren.
Ich habe versucht, eine Umgebung mit WSL + Ubuntu + VS-Code in einer Windows-Umgebung zu erstellen
Ich habe versucht, eine Klasse für die Suche nach Dateien mit der Glob-Methode von Python in VBA zu erstellen
Ich habe versucht, mit Quantx eine Linie mit gleitendem Durchschnitt des Volumens zu implementieren
Ich habe versucht, das grundlegende Modell des wiederkehrenden neuronalen Netzwerks zu implementieren
Ich habe den Super-Resolution-Algorithmus "PULSE" in einer Windows-Umgebung ausprobiert
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
[Markov-Kette] Ich habe versucht, die Zitate in Python einzulesen.
Ich habe versucht, das Problem der Kombinationsoptimierung mit Qiskit zu lösen
Ich habe versucht, mit Hy ・ Define a class zu beginnen
Ich habe versucht, [eine bestimmte Aufgabe] mit einem Raspeltorte zu automatisieren
Ich bin gestolpert, als ich versucht habe, Basemap zu installieren, also ein Memorandum
Ich habe versucht, eine zufällige FizzBuzz-Spalte mit Blasensortierung zu sortieren.
Ich habe versucht, einen Bot für die Ankündigung eines Wiire-Ereignisses zu erstellen
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Ich habe mit PyQt einen einfachen Texteditor erstellt
Als ich versuchte, eine Rails-Umgebung auf WSL2 (Ubuntu 20.04LTS) zu erstellen, stolperte ich und fiel hin.
Ich habe versucht, mit Docker einen Dienst aufzubauen, der maschinell erlernte Daten mit explosiver Geschwindigkeit verkauft
Ich habe versucht, Deep VQE zu implementieren
Ich habe versucht, eine Quip-API zu erstellen
Ich habe versucht, eine kontroverse Validierung zu implementieren
Ich habe versucht, Pytorchs Datensatz zu erklären
Ich habe Watson Voice Authentication (Speech to Text) ausprobiert.
Ich habe Teslas API berührt
Ich habe versucht, mich über MCMC zu organisieren.