Εκτέλεση Μεταφοράς Νευρικού Στυλ σε 5 λεπτά
September 30, 2022Αυτό το άρθρο δημοσιεύτηκε ως μέρος του Data Science Blogathon.
Εισαγωγή
Η μεταφορά νευρικού στυλ είναι ένας τρόπος δημιουργίας μιας εικόνας με την ανάμειξη δύο διαφορετικών εικόνων. Με άλλα λόγια, χρησιμοποιεί δύο εικόνες για να αναπτύξει μια νέα εικόνα που διατηρεί τη δομή του πυρήνα μιας εικόνας ενώ τη διαμορφώνει χρησιμοποιώντας την άλλη εικόνα. Είναι ένα μοντέλο παραγωγής που είναι πολύ δημοφιλές για τη δημιουργία υψηλής ποιότητας ρεαλιστικής τέχνης. Είναι επίσης χρήσιμα στο gaming και στην εικονική πραγματικότητα που είναι ένα trending θέμα λόγω του Meta.
Αυτό το άρθρο δεν θα διερευνήσει σε βάθος τη λειτουργία και την αρχιτεκτονική του μοντέλου μεταφοράς νευρικού στυλ. Ωστόσο, θα έχουμε μια βασική επισκόπηση. Το μοντέλο έχει κατασκευαστεί χρησιμοποιώντας δύο δίκτυα, δηλαδή τον εξαγωγέα χαρακτηριστικών και το δίκτυο μεταφοράς στυλ. Τα συνελικτικά νευρωνικά δίκτυα έχουν εξαιρετικά καλή απόδοση σε σύνολα δεδομένων εικόνων, καθώς είναι ικανά να συλλαμβάνουν χωρικές πληροφορίες και να εξάγουν τα χαρακτηριστικά χαμηλού και υψηλού επιπέδου που υπάρχουν στις εικόνες εκτελώντας συνέλιξη στις εικόνες χρησιμοποιώντας ένα φίλτρο ή έναν πυρήνα. Αυτός είναι ένας από τους κύριους λόγους για την εξαιρετική απόδοση του CNN στην εργασία ταξινόμησης εικόνων σε σύγκριση με άλλες αρχιτεκτονικές νευρωνικών δικτύων.
Το μοντέλο εξαγωγής χαρακτηριστικών είναι συνήθως ένα προ-εκπαιδευμένο βαθύ CNN όπως το Xception, το ResNet50, το VGG16, το VGG19 κ.λπ. Η χρήση ενός προεκπαιδευμένου deep CNN ως εξαγωγής χαρακτηριστικών λειτουργεί στο γεγονός ότι ορισμένα επίπεδα μαθαίνουν να εξάγουν τα περιεχόμενα μιας εικόνας ενώ Ορισμένα επίπεδα μαθαίνουν τη δυνατότητα υφής που υπάρχει στις εικόνες. Το δίκτυο μεταφοράς στυλ είναι συνήθως ένας αυτόματος κωδικοποιητής και έχει την αρχιτεκτονική κωδικοποιητή-αποκωδικοποιητή καθώς δέχεται μια είσοδο εικόνας και επιστρέφει μια εικόνα ως έξοδο. Ανατρέξτε σε αυτό το άρθρο, για να μάθετε περισσότερα σχετικά με τους αυτόματους κωδικοποιητές και πώς μπορούν να κατασκευαστούν στο TensorFlow.
Ευτυχώς, υπάρχουν πολλά εκπαιδευμένα μοντέλα για διάφορες εργασίες όπως ταξινόμηση, παλινδρόμηση, ανάλυση χρονοσειρών κ.λπ. διαθέσιμα στο TensorFlow Hub, το οποίο είναι ένα αποθετήριο για εκπαιδευμένα μοντέλα υψηλής ποιότητας που διατηρεί το TensorFlow. Αυτά τα έτοιμα για παραγωγή μοντέλα μπορούν να προσπελαστούν και να βελτιωθούν με λίγες μόνο γραμμές κώδικα. Σε αυτό το άρθρο, θα χρησιμοποιήσουμε ένα εκπαιδευμένο μοντέλο μεταφοράς στυλ που είναι διαθέσιμο στον κόμβο TensorFlow για να πραγματοποιήσουμε μεταφορά νευρικού στυλ.
Όπως αναφέρθηκε προηγουμένως, δύο εικόνες θα χρησιμοποιηθούν για τη μεταφορά νευρικού στυλ. Η μία εικόνα είναι γνωστή ως εικόνα περιεχομένου ενώ η άλλη είναι γνωστή ως εικόνα στυλ. Η εικόνα περιεχομένου είναι η εικόνα στην οποία θέλουμε να εφαρμόσουμε την υφή ή το στυλ. Η εικόνα στυλ είναι η εικόνα από την οποία εξάγεται η υφή ή η υφή και μεταφέρεται στην εικόνα περιεχομένου για να παραχθεί μια στυλιζαρισμένη εικόνα ως έξοδο.
Θα χρησιμοποιήσουμε μια εικόνα του κατοικίδιου ζώου μου ως εικόνα περιεχομένου σε αυτό το άρθρο, αλλά θα μπορούσε να είναι κάτι σαν τη selfie σας, μια φωτογραφία των γονιών σας ή οτιδήποτε γενικά.

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


Εγκατάσταση του 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()

Αυτή είναι η εικόνα εξόδου χρησιμοποιώντας τη δεύτερη εικόνα στυλ.
συμπέρασμα
Σε αυτό το άρθρο, διερευνήσαμε τις ακόλουθες έννοιες.
- Επισκόπηση της Μεταφοράς Νευρωνικού Στυλ
- Εισαγωγή στο TensorFlow Hub
- Εγκατάσταση του TensorFlow Hub
- Φόρτωση μοντέλου Neural Style Transfer από το TensorFlow Hub
- Εκτέλεση Μεταφοράς Νευρικού Στυλ χρησιμοποιώντας το εκπαιδευμένο μοντέλο από το TensorFlow Hub
Χρησιμοποιήσαμε ένα εκπαιδευμένο μοντέλο μεταφοράς νευρικού στυλ απευθείας για να ολοκληρώσουμε τη δουλειά. Ανατρέξτε σε αυτό άρθρο εάν θέλετε να δημιουργήσετε χειροκίνητα ένα μοντέλο μεταφοράς νευρικού στυλ χρησιμοποιώντας ένα προεκπαιδευμένο βαθύ CNN.
Μπορούμε να το κάνουμε αυτό για να δημιουργήσουμε μοναδικές εικόνες υψηλής ποιότητας. Αυτές οι εικόνες που δημιουργούνται μπορούν στη συνέχεια να πωληθούν ως NFT σε αγορές NFT όπως το OpenSea ή το SuperRare.
Ελπίζω να σας άρεσε η ανάγνωση αυτού του άρθρου και να μάθατε κάτι νέο. Ευχαριστώ για την ανάγνωση και καλή μάθηση!
Τα μέσα που εμφανίζονται σε αυτό το άρθρο δεν ανήκουν στο Analytics Vidhya και χρησιμοποιούνται κατά την κρίση του συγγραφέα.