Εκτέλεση Μεταφοράς Νευρικού Στυλ σε 5 λεπτά

Εκτέλεση Μεταφοράς Νευρικού Στυλ σε 5 λεπτά

September 30, 2022 0 Von admin

Αυτό το άρθρο δημοσιεύτηκε ως μέρος του Data Science Blogathon.

Εισαγωγή

Η μεταφορά νευρικού στυλ είναι ένας τρόπος δημιουργίας μιας εικόνας με την ανάμειξη δύο διαφορετικών εικόνων. Με άλλα λόγια, χρησιμοποιεί δύο εικόνες για να αναπτύξει μια νέα εικόνα που διατηρεί τη δομή του πυρήνα μιας εικόνας ενώ τη διαμορφώνει χρησιμοποιώντας την άλλη εικόνα. Είναι ένα μοντέλο παραγωγής που είναι πολύ δημοφιλές για τη δημιουργία υψηλής ποιότητας ρεαλιστικής τέχνης. Είναι επίσης χρήσιμα στο gaming και στην εικονική πραγματικότητα που είναι ένα trending θέμα λόγω του Meta.

Αυτό το άρθρο δεν θα διερευνήσει σε βάθος τη λειτουργία και την αρχιτεκτονική του μοντέλου μεταφοράς νευρικού στυλ. Ωστόσο, θα έχουμε μια βασική επισκόπηση. Το μοντέλο έχει κατασκευαστεί χρησιμοποιώντας δύο δίκτυα, δηλαδή τον εξαγωγέα χαρακτηριστικών και το δίκτυο μεταφοράς στυλ. Τα συνελικτικά νευρωνικά δίκτυα έχουν εξαιρετικά καλή απόδοση σε σύνολα δεδομένων εικόνων, καθώς είναι ικανά να συλλαμβάνουν χωρικές πληροφορίες και να εξάγουν τα χαρακτηριστικά χαμηλού και υψηλού επιπέδου που υπάρχουν στις εικόνες εκτελώντας συνέλιξη στις εικόνες χρησιμοποιώντας ένα φίλτρο ή έναν πυρήνα. Αυτός είναι ένας από τους κύριους λόγους για την εξαιρετική απόδοση του CNN στην εργασία ταξινόμησης εικόνων σε σύγκριση με άλλες αρχιτεκτονικές νευρωνικών δικτύων.

Το μοντέλο εξαγωγής χαρακτηριστικών είναι συνήθως ένα προ-εκπαιδευμένο βαθύ CNN όπως το Xception, το ResNet50, το VGG16, το VGG19 κ.λπ. Η χρήση ενός προεκπαιδευμένου deep CNN ως εξαγωγής χαρακτηριστικών λειτουργεί στο γεγονός ότι ορισμένα επίπεδα μαθαίνουν να εξάγουν τα περιεχόμενα μιας εικόνας ενώ Ορισμένα επίπεδα μαθαίνουν τη δυνατότητα υφής που υπάρχει στις εικόνες. Το δίκτυο μεταφοράς στυλ είναι συνήθως ένας αυτόματος κωδικοποιητής και έχει την αρχιτεκτονική κωδικοποιητή-αποκωδικοποιητή καθώς δέχεται μια είσοδο εικόνας και επιστρέφει μια εικόνα ως έξοδο. Ανατρέξτε σε αυτό το άρθρο, για να μάθετε περισσότερα σχετικά με τους αυτόματους κωδικοποιητές και πώς μπορούν να κατασκευαστούν στο TensorFlow.

Ευτυχώς, υπάρχουν πολλά εκπαιδευμένα μοντέλα για διάφορες εργασίες όπως ταξινόμηση, παλινδρόμηση, ανάλυση χρονοσειρών κ.λπ. διαθέσιμα στο TensorFlow Hub, το οποίο είναι ένα αποθετήριο για εκπαιδευμένα μοντέλα υψηλής ποιότητας που διατηρεί το TensorFlow. Αυτά τα έτοιμα για παραγωγή μοντέλα μπορούν να προσπελαστούν και να βελτιωθούν με λίγες μόνο γραμμές κώδικα. Σε αυτό το άρθρο, θα χρησιμοποιήσουμε ένα εκπαιδευμένο μοντέλο μεταφοράς στυλ που είναι διαθέσιμο στον κόμβο TensorFlow για να πραγματοποιήσουμε μεταφορά νευρικού στυλ.

Όπως αναφέρθηκε προηγουμένως, δύο εικόνες θα χρησιμοποιηθούν για τη μεταφορά νευρικού στυλ. Η μία εικόνα είναι γνωστή ως εικόνα περιεχομένου ενώ η άλλη είναι γνωστή ως εικόνα στυλ. Η εικόνα περιεχομένου είναι η εικόνα στην οποία θέλουμε να εφαρμόσουμε την υφή ή το στυλ. Η εικόνα στυλ είναι η εικόνα από την οποία εξάγεται η υφή ή η υφή και μεταφέρεται στην εικόνα περιεχομένου για να παραχθεί μια στυλιζαρισμένη εικόνα ως έξοδο.

Θα χρησιμοποιήσουμε μια εικόνα του κατοικίδιου ζώου μου ως εικόνα περιεχομένου σε αυτό το άρθρο, αλλά θα μπορούσε να είναι κάτι σαν τη selfie σας, μια φωτογραφία των γονιών σας ή οτιδήποτε γενικά.

Νευρικό στυλ

Αυτές είναι οι εικόνες στυλ που θα χρησιμοποιήσουμε για να εξαγάγουμε την υφή και να την εφαρμόσουμε στην εικόνα περιεχομένου για να δημιουργήσουμε τη στυλιζαρισμένη εικόνα. Κατέβασα αυτές τις εικόνες από το Unsplash καθώς παρέχουν δωρεάν στη χρήση εικόνες υψηλής ποιότητας στοκ.

Vincent van Gogh|  Μεταφορά Νευρωνικού Στυλ
Vincent van Gogh|  Μεταφορά Νευρωνικού Στυλ

Εγκατάσταση του TensorFlow Hub

Το TensorFlow Hub απαιτείται για την πρόσβαση στα εκπαιδευμένα μοντέλα. Το TensorFlow Hub μπορεί να εγκατασταθεί όπως οποιοδήποτε άλλο πακέτο python στον τοπικό σας υπολογιστή.

!pip install --upgrade tensorflow_hub

Εισαγωγή Ενοτήτων

Αυτές είναι οι μονάδες που θα χρησιμοποιηθούν για την υλοποίηση του μοντέλου μεταφοράς νευρικού στυλ σε αυτό το άρθρο. Το OpenCV θα χρησιμοποιηθεί για τη φόρτωση εικόνας και τη βασική επεξεργασία εικόνας σε αυτό το άρθρο.

import tensorflow_hub as hub
import tensorflow as tf
import cv2
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.python.ops.numpy_ops import np_config; np_config.enable_numpy_behavior()

Χρησιμοποιώντας το μοντέλο μεταφοράς Neural Style από το TensorFlow Hub

Όπως αναφέρθηκε προηγουμένως, θα χρησιμοποιήσουμε ένα εκπαιδευμένο μοντέλο μεταφοράς νευρικού στυλ από το TensorFlow Hub. Η χρήση εκπαιδευμένων μοντέλων από το TensorFlow Hub είναι εξαιρετικά απλή και εύκολη. Μπορείτε είτε να κάνετε λήψη του εκπαιδευμένου μοντέλου από το TensorFlow Hub και να το χρησιμοποιήσετε φορτώνοντάς το από τον δίσκο σας ή μπορείτε να παρέχετε απευθείας τη διεύθυνση URL για το εκπαιδευμένο μοντέλο. Θα χρησιμοποιήσουμε τη διεύθυνση URL για τη φόρτωση του εκπαιδευμένου μοντέλου. Εναλλακτικά, μπορείτε να κάνετε λήψη του μοντέλου μεταφοράς νευρικού στυλ από εδώ.

model = hub.load('https://tfhub.dev/google/magenta/arbitrary-image-stylization-v1-256/2')

Φόρτωση και προεπεξεργασία περιεχομένου και εικόνας στυλ

Θα χρησιμοποιήσουμε το OpenCV για την ανάγνωση και την προεπεξεργασία των εικόνων. Το OpenCV χρησιμοποιεί χρωματική μορφή BGR αντί για την παραδοσιακή χρωματική μορφή RGB και επομένως είναι απαραίτητο να αλλάξετε τη μορφή χρώματος σε RGB. Θα κανονικοποιήσουμε επίσης τον πίνακα εικόνων για να μειώσουμε την υπολογιστική πολυπλοκότητα.

def load_img(path):
    img = cv2.imread(path)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img = img/255.
    return img
content_image = load_img('content.jpeg')
style_1 = load_img('style_1.png')
style_2 = load_img('style_1.png')

Εκτέλεση Μεταφοράς Νευρωνικού Στυλ

Το εκπαιδευμένο μοντέλο μεταφοράς νευρικού στυλ δέχεται εικόνες ως τανυστές μόνο του τύπου δεδομένων float-32. Είναι απαραίτητο να πραγματοποιηθεί αυτός ο μετασχηματισμός τόσο στο περιεχόμενο όσο και στην εικόνα στυλ. Το εκπαιδευμένο μοντέλο λειτουργεί καλύτερα όταν η εικόνα στυλ είναι μια τετράγωνη εικόνα με 256 pixel και στις δύο πλευρές, καθώς ήταν η διάσταση κάθε εικόνας ενώ το μοντέλο εκπαιδευόταν. Έτσι, θα αλλάξουμε το μέγεθος της εικόνας στυλ στην καθορισμένη διάσταση και θα τη μετατρέψουμε σε τανυστήρα τύπου float-32. Το εκπαιδευμένο μοντέλο δέχεται το περιεχόμενο και την εικόνα στυλ ως παραμέτρους εισόδου και επιστρέφει την εικόνα εξόδου αφού εκτελέσει μεταφορά νευρικού στυλ στην εικόνα περιεχομένου χρησιμοποιώντας την εικόνα στυλ.

def apply_style(content_image, style):
  content_image = content_image.reshape(1, content_image.shape[0], content_image.shape[1], content_image.shape[2]).astype('float32')
  content_image = tf.convert_to_tensor(content_image)
  style = cv2.resize(style, (256,256))
  style = style.reshape(1, style.shape[0], style.shape[1], style.shape[2]).astype('float32')
  outputs = model(tf.constant(content_image), tf.constant(style))
  stylized_image = outputs[0]
  return stylized_image

Ας οπτικοποιήσουμε την εικόνα εξόδου αφού εκτελέσουμε τη μεταφορά νευρικού στυλ χρησιμοποιώντας το matplotlib. Εναλλακτικά, μπορείτε να αποθηκεύσετε την εικόνα που δημιουργήθηκε στον τοπικό σας δίσκο ως α png ή α jpg αρχείο.

img = apply_style(content_image, style_1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(img[0])
plt.show()
Εικόνα γάτας

Αυτή είναι η εικόνα εξόδου που χρησιμοποιεί την πρώτη εικόνα στυλ.

img = apply_style(content_image, style_2)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(img[0])
plt.show()
Cat 2|Μεταφορά νευρωνικού στυλ

Αυτή είναι η εικόνα εξόδου χρησιμοποιώντας τη δεύτερη εικόνα στυλ.

συμπέρασμα

Σε αυτό το άρθρο, διερευνήσαμε τις ακόλουθες έννοιες.

  • Επισκόπηση της Μεταφοράς Νευρωνικού Στυλ
  • Εισαγωγή στο TensorFlow Hub
  • Εγκατάσταση του TensorFlow Hub
  • Φόρτωση μοντέλου Neural Style Transfer από το TensorFlow Hub
  • Εκτέλεση Μεταφοράς Νευρικού Στυλ χρησιμοποιώντας το εκπαιδευμένο μοντέλο από το TensorFlow Hub

Χρησιμοποιήσαμε ένα εκπαιδευμένο μοντέλο μεταφοράς νευρικού στυλ απευθείας για να ολοκληρώσουμε τη δουλειά. Ανατρέξτε σε αυτό άρθρο εάν θέλετε να δημιουργήσετε χειροκίνητα ένα μοντέλο μεταφοράς νευρικού στυλ χρησιμοποιώντας ένα προεκπαιδευμένο βαθύ CNN.

Μπορούμε να το κάνουμε αυτό για να δημιουργήσουμε μοναδικές εικόνες υψηλής ποιότητας. Αυτές οι εικόνες που δημιουργούνται μπορούν στη συνέχεια να πωληθούν ως NFT σε αγορές NFT όπως το OpenSea ή το SuperRare.

Ελπίζω να σας άρεσε η ανάγνωση αυτού του άρθρου και να μάθατε κάτι νέο. Ευχαριστώ για την ανάγνωση και καλή μάθηση!

Τα μέσα που εμφανίζονται σε αυτό το άρθρο δεν ανήκουν στο Analytics Vidhya και χρησιμοποιούνται κατά την κρίση του συγγραφέα.