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
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
cpu : intel corei7 8th Gen gpu : NVIDIA GeForce RTX 1080ti os : ubuntu 20.04
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. __ __
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.
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