SlideShare a Scribd company logo
1 of 62
Download to read offline
ΔΗΜΟΚΡΙΤΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΡΑΚΗΣ
ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ
ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ
ΜΕΤΑΦΟΡΑ ΣΤΥΛ (STYLE
TRANSFER) ΣΕ ΕΙΚΟΝΕΣ ΚΑΙ
ΕΙΚΟΝΟΣΕΙΡΕΣ
Λίτσος Μιχαήλ
Επιβλέπων: Νικόλαος Μητιανούδης Αναπλ. Καϑηγητής ΔΠΘ
2022, Ξάνϑη
Περιεχόμενα
1 Εισαγωγή 1
2 Νευρωνικά Δίκτυα και Βαϑιά Μάϑηση 3
2.1 Τύποι Επίπεδων Νευρωνικών Δικτύων . . . . . . . . . . . . . . 4
2.1.1 2D Convolution . . . . . . . . . . . . . . . . . . . . . . 4
2.1.2 Διαδικασία Zero Padding . . . . . . . . . . . . . . . . . 5
2.1.3 Επίπεδο Pooling . . . . . . . . . . . . . . . . . . . . . . 6
2.1.4 Η συνάρτηση ενεργοποίησης ReLU . . . . . . . . . . . . 8
2.1.5 Sigmoid . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.6 Tanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.7 Η τεχνική Batch Normalization . . . . . . . . . . . . . 9
2.1.8 Η τεχνική Instance Normalization . . . . . . . . . . . . 10
3 H Μέϑοδος Μεταφοράς Στυλ του Gatys et al 12
3.1 Περιγραφή της μεϑόδου . . . . . . . . . . . . . . . . . . . . . . 12
3.1.1 VGG19 . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.2 Ονοματολογία επιπέδων και block . . . . . . . . . . . . 14
3.1.3 Θεωρητική ανάλυση μεϑόδου . . . . . . . . . . . . . . . 14
3.2 Αναπαράσταση Στυλ και Περιεχομένου . . . . . . . . . . . . . . 14
3.2.1 Αναπαράσταση Περιεχομένου . . . . . . . . . . . . . . . 15
3.2.2 Αναπαράσταση Στυλ . . . . . . . . . . . . . . . . . . . 16
3.2.3 Συνολική Συνάρτηση Απώλειας (loss function) . . . . . 16
3.3 Πειράματα και Αποτελέσματα . . . . . . . . . . . . . . . . . . . 17
3.3.1 Εξάρτηση αποτελεσμάτων από τις παραμέτρους α, β . . 18
3.3.2 Εξάρτηση αποτελεσμάτων από το πλήϑος των μπλοκ
συνέλιξης . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4 Προγραμματιστικές σημειώσεις για την υλοποίηση της μεϑοδου
σε TensorFlow 2.x και Απόδοση . . . . . . . . . . . . . . . . . 22
3.4.1 Σημειώσεις . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.5 Χαρακτηριστικά και Απόδοση . . . . . . . . . . . . . . . . . . . 25
4 Μέϑοδος Johnson et al 26
4.1 Περιγραφή Μεϑόδου . . . . . . . . . . . . . . . . . . . . . . . . 26
i
4.2 Αρχιτεκτονική Image Transform Network . . . . . . . . . . . . 28
4.2.1 Residual blocks . . . . . . . . . . . . . . . . . . . . . . 28
4.2.2 Transpose 2D Convolution . . . . . . . . . . . . . . . . 28
4.3 Εφαρμογή της μεϑόδου . . . . . . . . . . . . . . . . . . . . . . . 29
4.3.1 Αποτελέσματα σε εικόνες . . . . . . . . . . . . . . . . . 30
4.3.2 Αποτελέσματα σε βίντεο . . . . . . . . . . . . . . . . . 31
4.4 Υλοποίηση . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.4.1 Σημειώσεις . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.5 Χαρακτηριστικά και Απόδοση . . . . . . . . . . . . . . . . . . . 34
5 H Μέϑοδος Gupta et al 36
5.1 Εισαγωγή . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2 Αρχιτεκτονική . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2.1 Χρονική Απώλεια . . . . . . . . . . . . . . . . . . . . . 36
5.2.2 Διαδικασίες Μεταφοράς (Wrapping) και Κάλυψης
(Occlusion) . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2.3 Εκπαίδευση . . . . . . . . . . . . . . . . . . . . . . . . 38
5.3 Αποτελέσματα σε βίντεο . . . . . . . . . . . . . . . . . . . . . . 40
6 H Μέϑοδος των Huang και Belongie 42
6.1 Εισαγωγή . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.2 Αρχιτεκτονική της μεϑόδου . . . . . . . . . . . . . . . . . . . . 42
6.2.1 Encoder . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.2.2 Adaptive Instance Normalization . . . . . . . . . . . . 43
6.2.3 Ο Αποκωδικοποιητής (Decoder) . . . . . . . . . . . . . 44
6.3 H Εκπαιδευτική διαδικασία . . . . . . . . . . . . . . . . . . . . 44
6.3.1 Επίπεδο 2D Upsampling . . . . . . . . . . . . . . . . . 45
6.4 Συναρτήσεις Κόστους . . . . . . . . . . . . . . . . . . . . . . . 46
6.4.1 Απώλεια του Content . . . . . . . . . . . . . . . . . . . 46
6.4.2 Απώλεια του Style . . . . . . . . . . . . . . . . . . . . . 46
6.5 Αποτελέσματα σε εικόνες . . . . . . . . . . . . . . . . . . . . . 47
6.6 Υλοποίηση . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.7 Χαρακτηριστικά και Απόδοση . . . . . . . . . . . . . . . . . . . 49
7 Ανάπτυξη Εφαρμογής σε περιβάλλον Android 51
7.1 Χαρακτηριστικά της Εφαρμογής . . . . . . . . . . . . . . . . . 51
7.2 Υλοποίηση Εφαρμογής . . . . . . . . . . . . . . . . . . . . . . . 51
7.2.1 Μετατροπή δικτύου σε TensorFlow Lite . . . . . . . . . 51
8 Σύγκριση των μεϑόδων 54
9 Συμπεράσματα - Μελλοντική δουλειά 56
ii
Κεφάλαιο 1
Εισαγωγή
Η μεταφορά του στυλ μιας εικόνα σε μια άλλη εικόνα ή σε εικονοσειρές μέσω
νευρωνικών δικτύων (Νeural Style Transfer) , προσέλκυσε το ενδιαφέρον
της επιστημονικής κοινότητας, ύστερα από το άρθρο του Gatys et al [4]. Η
εφαρμογή είναι να μπορέσει ένας χρήστης να επιβάλλει το καλλιτεχνικό στυλ
μιας εικόνας σε μια άλλη εικόνα που δεν έχει σχέση αναγκαστικά με την αρ-
χική. Για παράδειγμα, φανταστείτε ότι έχει μια εικόνα που απεικονίζει τη
ϑέα από το μπαλκόνι σας. Πως ϑα σας φαινόταν αν αυτή η εικόνα πάρει το
χρωματικό και ζωγραφικό στυλ ενός πίνακα του Van Gogh, για παράδειγμα
την "´Εναστρη νύχτα (Starry Night)", αλλά φυσικά πάλι να απεικονίζει ουσι-
αστικά τα αρχικά αντικείμενα. Η πρωτοποριακή αυτή διαδικασία ονομάστηκε
μεταφορά στυλ (style transfer) και απασχόλησε εκτεταμένα την ερευνητική
κοινότητα της επεξεργασίας εικόνας και βαθιάς μάϑησης τα τελευταία χρόνια.
H μεταφορά του στυλ από μια εικόνα σε άλλη εικόνα ϑεωρείται πρόβλημα
μεταφοράς υφής. Στη μεταφορά υφής ο στόχος είναι η σύνθεση μιας υφής
από μια αρχική εικόνα περιορίζοντας τη σύνθεση της υφής προκειμένου να
διατηρηϑεί το σημασιολογικό περιεχόμενο της εικόνας στόχου. Για τη σύνθεση
υφής υπάρχει μια μεγάλη γκάμα ισχυρών μη-παραμετρικών αλγορίθμων, που
μπορούν να συνθέσουν φωτορεαλιστικές φυσικές υφές με επαναπροσδιορισμό
των εικονοστοιχείων μιας δεδομένης υφής από μια αρχική πηγαία εικόνα.
Ο Gatys et al παρουσιάζει μια πρωτοποριακή χρήση των νευρωνικών δικ-
τύων με σκοπό τη μεταφορά του στυλ από μια εικόνα σε μία άλλη εικόνα.
Χρησιμοποιεί την έξοδο από συγκεκριμένα επίπεδα του συνελικτικού δικ-
τύου VGG-19 [9], έτσι ώστε να λάβει την πληροφορία σχετικά με το στυλ
της εικόνας που ϑέλουμε να αντιγράψουμε και του περιεχομένου της εικόνας
που ϑέλουμε να εφαρμόσουμε αυτό το στυλ. Η μέϑοδος αυτή χαρακτηρίζεται
από κυρίως ωραίες στιλιστικά εικόνες αλλά είναι πολύ αργή, διότι χρειάζονται
πολλές επαναλήψεις.
Ο Johnson et al[8] πρότεινε μια νέα μέϑοδο μεταφοράς στυλ από εικόνα
σε εικόνα με στόχο να μπορεί να χρησιμοποιηθεί σε real-time εφαρμογές.
Πρότεινε ένα νέο νευρωνικό δίκτυο, όπου εκπαιδεύεται στο να εφαρμόζει το
1
στυλ της εικόνας που ϑέλουμε σύμφωνα με τις συναρτήσεις απώλειας που είχε
χρησιμοποιήσει και ο Gatys et al. Με αυτό το τρόπο, η παραγωγή της εικόνας
με το επιθυμητό στυλ γίνεται μέσα σε μερικά δευτερόλεπτα, διότι η εικόνα
χρειάζεται μόνο ένα πέρασμα (inference) από το νευρωνικό δίκτυο.
Λόγω της ταχύτητας της μεθόδου του Johnson et al αυτή η μέϑοδος άρχισε
να εφαρμόζεται και σε βίντεο. Το κύριο πρόβλημα που εξακολουθεί να υφίσ-
ταται είναι ότι δεν υπάρχει τοπική συνοχή του στυλ μεταξύ των καρέ της
εικονοσειράς. Για να λυθεί το πρόβλημα αυτό, ο Gupta et al [5] πρότεινε μια
μέϑοδο fine-tuning του νευρωνικού δικτύου του Johnson et al έτσι ώστε να
μπορεί να υπάρχει τοπική συνοχή του στυλ μεταξύ των καρέ. Το πλεονέκτημα
της μεθόδου είναι ότι δεν χρειάζεται να επεξεργαστεί ή να επανεκπαιδευτεί
από την αρχή το δίκτυο. ´Ετσι, ο χρόνος εκπαίδευσης του είναι σχετικά γρή-
γορος και η καθυστέρηση (latency) του δικτύου παραμένει ίδια.
Οι παραπάνω μέϑοδοι χαρακτηρίζονται ως per style per model, δηλαδή
ένα μοντέλο για ένα στυλ. ´Οπως είναι φυσικό, αυτό ϑέτει περιορισμούς
στο πλήϑος των στυλ μπορούμε να εφαρμόσουμε, εφόσον χρειαζόμαστε για
κάϑε στυλ και ένα μοντέλο. Για να αποφύγουμε αυτό τον περιορισμό
δημιουργήϑηκαν νευρωνικά με πολλαπλά στυλ για κάϑε μοντέλο (multiple
style per model). ´Ετσι ένα νευρωνικό δίκτυο μπορεί να εφαρμόσει πολλά
στυλ. Εδώ ϑα παρουσιαστεί η μέϑοδος του Huang και Belongie [6] όπου εί-
ναι για μεταφορά στυλ σε εικόνες και εικονοσειρές χρησιμοποιώντας Adaptive
Instance Normalization.
Στα επόμενα κεφάλαια ϑα αναφερθούμε πρώτα στις βασικές τεχνολογίες
των νευρωνικών δικτύων και της βαθιάς μάϑησης. Θα δείξουμε αναλυτικά τις
μεθόδους των Gatys et al, Johnson et al, Agrim et al και Huang και Belongie,
ϑα δείξουμε πειράματα σχετικά με το τρόπο που επηρεάζονται τα μοντέλα
αυτά με την αλλαγή των υπερπαραμέτρων τους, ϑα μελετήσουμε την απόδοση
τους και ϑα δοκιμάσουμε να βελτιστοποιήσουμε την απόδοση αυτή. Τέλος,
ϑα παρουσιάσουμε μια εφαρμογή που αναπτύχθηκε στα πλαίσια της διπλω-
ματικής αυτής σε περιβάλλον android για τη μεταφορά στυλ σε βίντεο.
2
Κεφάλαιο 2
Νευρωνικά Δίκτυα και Βαϑιά
Μάϑηση
Τα τεχνικά νευρωνικά δίκτυα (artificial neural networks) ή νευρωνικά δίκτυα
(neural networks) είναι ένα μαθηματικό σύστημα, που προσπαθεί να προσο-
μοιώσει τη βιολογική δομή του εγκεφάλου. ´Ενα νευρωνικό δίκτυο αποτελεί-
ται από πιο μικρές μονάδες ή κόμβους που αποκαλούνται νευρώνες, όπως οι
νευρώνες που υπάρχουν στον εγκέφαλο. Οι νευρώνες ενώνονται μεταξύ τους
έτσι, ώστε να μπορούν να ανταλλάσσουν πληροφορίες. Ο κάϑε νευρώνας
δέχεται ένα σήμα, το επεξεργάζεται και παράγει ένα αποτέλεσμα, ύστερα
αυτό το σήμα μπορεί να το μεταδώσει σε ένα άλλο νευρώνα. Το σύνολο των
νευρώνων που συνδέονται μεταξύ τους αποτελούν ένα νευρωνικό δίκτυο.
Η βαθιά μάϑηση (deep learning) αντιπροσωπεύει τις τεχνικές εκμάθησης,
που χρησιμοποιούνται έτσι ώστε ένα πιο πολύπλοκο νευρωνικό δίκτυο να
μπορεί να μάθει πολύ πιο πολύπλοκες διαδικασίες. Στη συνέχεια, ϑα αναλυ-
ϑούν κάποια είδη νευρωνικών επιπέδων και αρχιτεκτονικών, στις οποίες ϑα
αναφερθούμε πολύ στα επικείμενα κεφάλαια.
Σχήμα 2.1: Παράδειγμα 2Δ συνελικτικών φίλτρων.
3
2.1 Τύποι Επίπεδων Νευρωνικών Δικτύων
2.1.1 2D Convolution
Η διαδικασία της διδιάστατης συνέλιξης χαρακτηρίζεται από τον αριϑμό των
φίλτρων, το μέγεϑος του φίλτρου και το stride. Το stride είναι ένας αριϑμός
που δείχνει τη μετατόπιση του φίλτρου πάνω στη είσοδο. Στην αυϑεντική 2Δ
συνέλιξη το φίλτρο μετακινείται ανά 1 εικονοστοιχείο. Εδώ, όμως, δίνεται η
δυνατότητα το φίλτρο να εφαρμόζεται με μετακίνηση για παραπάνω από 1
εικονοστοιχεία, τα οποία ορίζει η παράμετρος stride.
O αριθμός των φίλτρων επιλέγεται ανάλογα με το πλήϑος των χαρακ-
τηριστικών (features) που ϑέλουμε το δίκτυο μας να μπορεί να αναγνωρί-
σει. Το μέγεθος των φίλτρων και του stride επιλέγεται ανάλογα με το πόσο
ϑέλουμε να μειώσουμε την είσοδο μας σε μέγεθος. Με άλλα λόγια, το stride
αποτελεί μια μέϑοδος down-sampling. Αν η εικόνα εισόδου έχει διαστάσεις
Winput×Hinput×Dinput, το 2Δ φίλτρο έχει διαστάσεις kernel_size×kernel_size,
τότε η έξοδος της συνέλιξης είναι W × H × D, όπου D = Depth,W = W idth
και H = Height για δεδομένο stride υπολογίζεται από τις παρακάτω σχέσεις:
D = number_of _f ilters
W = (Winput − kernel_size)/(stride) + 1
H = (Hinput − kernel_size)/(stride) + 1
(2.1)
Παράδειγμα:
´Εστω ότι έχουμε μια έγχρωμη εικόνα ως είσοδο με διαστάσεις 256x256,
δηλαδή το tensor ϑα είναι 1x256x256x3. ´Εστω ότι έχουμε μία συλλογή από
64 φίλτρα με διαστάσεις 3x3. Επιλέγουμε το stride να είναι 1 ως προς το H
και W της εικόνας. Σύμφωνα με τις παραπάνω εξισώσεις τα αποτελέσματα
ϑα είναι
D = 64
W = (256 − 3)/1 + 1 = 254
H = (256 − 3)/1 + 1 = 254
(2.2)
Σε TensorFlow [1]
Listing 2.1: Παράδειγμα 1
# Batch =1, Height =256, Width=256, Channels=3
input = t f . random . uniform ( ( 1 , 256 , 256 , 3 ) )
# F i l t e r H e i g h t =3, FilterWidth =3, InChannels =3,
#OutChannels / NumberOfFilters=64
kernel = t f . random . uniform ( ( 3 , 3 , 3 , 64))
output = t f . nn . conv2d ( input , kernel , s t r i d e s =[1 , 1 , 1 , 1 ])
print ( f " Output_Shape_=_ { output . shape } " )
4
´Εξοδος:
Output_Shape_=_ (1 , 254 , 254 , 64)
Σχήμα 2.2: Παράδειγμα χρήσης stride σε 2Δ συνέλιξη. Απεικονίζεται η δι-
αφορά χρήσης stride = 1 και stride = 2.
2.1.2 Διαδικασία Zero Padding
Η διαδικασία zero padding χρησιμοποιείται, όταν επιθυμούμε η έξοδος του
νευρωνικού επιπέδου, όπως η 2Δ συνέλιξη, να έχει ίδιες διαστάσεις με την εί-
σοδο. Στο Listing 2.1 βλέπουμε ότι οι διαστάσεις από 256x256 μειώνονται
σε 254x254. Στην περίπτωση, όπου η έξοδος μας χρειάζεται να είναι ίδια με
την είσοδο μας, μπορούμε να χρησιμοποιήσουμε την τεχνική Zero Padding,
δηλαδή να προσθέσουμε μηδενικά στην έξοδο με αποτέλεσμα η έξοδος να
έχει διαστάσεις 256x256. Η πληροφορία παραμένει στις διαστάσεις 254x254
απλώς τώρα υπάρχουν επιπλέον μηδενικά γύρω από αυτήν την πληροφορία
ώστε να ταιριάζει τις διαστάσεις της εισόδου Figure 2.3. Αυτή η τεχνική είναι
πολύ χρήσιμη σε μπλοκ όπως τα residual blocks (ϑα αναλυθούν αργότερα στο
κεφάλαιο 3) και σε σημεία όπου έχουμε να κάνουμε πράξεις όπως οι συναρτή-
σεις κόστους.
5
2.1.3 Επίπεδο Pooling
Το επίπεδο pooling χρησιμοποιείται, έτσι ώστε να κάνουμε υποδειγματολ-
ηψία το δείγμα μας. Χρησιμοποιείται κυρίως μετά απο επίπεδα συνέλιξης
με σκοπό να μειώσουμε την ποσότητα της πληροφορίας, χωρίς όμως να χά-
σουμε τα σημαντικά κομμάτια αυτής. Υπάρχουν διάφοροι τρόποι pooling,
αλλά εδώ ϑα περιγράψουμε μόνο το Max Pooling. To Max Pooling, συνήϑως,
γίνεται με ένα φίλτρο 2×2 το οποίο σαρώνει την 2Δ πληροφορία στην είσοδο,
π.χ τα χαρακτηριστικά που εξάγονται από μια εικόνα ύστερα από το επίπεδο
συνέλιξης και διαλέγει το μεγαλύτερο αριθμό (Figure 2.4). Με αυτό το τρόπο
το δίκτυο μας δεν επηρεάζεται από μικρές μετακινήσεις της πληροφορίας, κα-
ϑώς πάντα ϑα διαλέγουμε τα πιο σημαντικά κομμάτια αυτής.
Σχήμα 2.3: Στο πάνω σχήμα φαίνεται το αποτέλεσμα της 2Δ συνέλιξης χωρίς
zero padding. Στο κάτω σχήμα φαίνεται το αποτέλεσμα της 2Δ συνέλιξης με
zero padding.
Αν η είσοδος σε ένα pooling layer είναι N ×H×W ×C, η έξοδος υπολογίζε-
ται από:
Noutput = Ninput
Houtput = ((Hinput − P oolSize))
Woutput = ((Winput − P oolSize))
Coutput = Cinput
(2.3)
6
Σχήμα 2.4: Max Pooling
Επομένως, βλέπουμε ότι η πληροφορία μειώνεται κατά P oolSize ως προς H
και W . Η TensorFlow έχει μια ελαφρά διαφορετική υλοποίηση όπου η έξοδος
υπολογίζεται από:
Noutput = Ninput
Houtput = b(Hinput − P oolSize)/stridesc + 1
Woutput = b(Winput − P oolSize)/stridesc + 1
Coutput = Cinput
(2.4)
7
Παράδειγμα σε TensorFlow
input = t f . random . uniform ( ( 1 , 256 , 256 , 3 ) )
kernel = [1 , 2 , 2 , 1]
output = t f . nn . max_pool2d ( input , kernel , [1 ,1 ,1 ,1] , "VALID" )
print ( f " Output_Shape_=_ { output . shape } " )
´Εξοδος
Output_Shape_=_ (1 , 255 , 255 , 3)
2.1.4 Η συνάρτηση ενεργοποίησης ReLU
Η συνάρτηση ενεργοποίησης ReLU ή αλλιώς Rectified Linear Unit είναι μια
μη-γραμμική συνάρτηση, που περιγράφεται από το διάγραμμα Figure 2.5.
Χρησιμοποιείται κυρίως μετά από συνελικτικά επίπεδα, έτσι ώστε να μην
υπάρχουν αρνητικές τιμές στις εξόδους των χαρακτηριστικών διότι δεν έχουν
κάποιο υπολογιστικό νόημα. Φυσικά μπορεί να εφαρμοστεί σε οποιοδήποτε
σημείο του νευρωνικού ανάλογα με το στόχο του δικτύου.
Σχήμα 2.5: Η συνάρτηση ενεργοποίησης ReLU.
2.1.5 Sigmoid
H Sigmoid είναι μια μη γραμμική συνάρτηση όπου έχει μέγιστες εξόδους
μεταξύ [−1,1] ή [0,1] ανάλογα τη χρήση της. Ο μαθηματικός της τύπος εί-
ναι
S(x) =
1
1 + e−x
(2.5)
και η γραφική της παράσταση είναι Figure 2.7. Μία πολύ συχνή χρήση της
συνάρτησης αυτής είναι η μετατροπή πραγματικών αριϑμών σε πιϑανότητες.
8
Σχήμα 2.6: Παράδειγμα εφαρμογής της συνάρτησης ενεργοποίησης ReLU στην
2Δ έξοδο ενός δικτύου.
2.1.6 Tanh
H συνάρτηση ενεργοποίησης Tanh ή υπερβολική εφαπτομένη είναι μια μη-
γραμμική συνάρτηση όπου έχει μέγιστες εξόδους μεταξύ [−1,1] Ο μαϑηματικός
της τύπος είναι
S(x) =
e2x − 1
e2x + 1
(2.6)
και η γραφική της παράσταση απεικονίζεται στο Figure 2.7. Λόγω των
παραγώγων της τα δίκτυα που τη χρησιμοποιούν τείνουν να μαθαίνουν πιο
γρήγορα σε σχέση με άλλες συναρτήσεις ενεργοποίησης όπως η σιγμοειδής.
2.1.7 Η τεχνική Batch Normalization
Το Batch Normalization [7] είναι μία τεχνική κανονικοποίησης, που χρησι-
μοποιείται έτσι ώστε τα νευρωνικά δίκτυα να εκπαιδεύονται πιο γρήγορα και
να είναι πιο σταθερά στα αποτελέσματά τους. Αυτό που συνήϑως προσπα-
ϑούμε να αποφύγουμε είναι την υπερπροσαρμογή δεδομένων (overfitting).
Κατά το φαινόμενο αυτό, το νευρωνικό δίκτυο μαθαίνει να ταξινομεί τα δε-
δομένα εκπαίδευσης με πολύ μεγάλη ακρίβεια, αλλά αποτυγχάνει να γενικεύ-
σει σε άγνωστα δεδομένα, με αποτέλεσμα η απόδοση του στο σετ δεδομένων
δοκιμής να είναι πολύ χαμηλότερη. ´Ενας τρόπος που προτείνετε μέσα από τη
διαδικασία του batch normalization είναι να κανονικοποιούνται οι τιμές των
δεδομένων στην έξοδο κάϑε επιπέδου του δικτύου σε ένα συγκεκριμένο εύρος.
Αυτό έχει δειχθεί ότι ρυθμίζει την απόδοση του δικτύου και στις περισσότερες
περιπτώσεις μειώνεται η υπερπροσαρμογή. Κατά την τεχνική αυτή, η έξοδος
ενός επιπέδου κατά την εκπαίδευση υπολογίζεται από
Output =
γ(x − µ)
σ
+ β (2.7)
9
Σχήμα 2.7: Η γραφική παράσταση της σιγμοειδής συνάρτησης ενεργοποίησης.
όπου x η είσοδος π.χ το κάϑε pixel από μια εικόνα 256×256, γ ο παράγοντας
στάϑμισης, µ ο μέσος όρος της εισόδου, σ η τυπική απόκλιση της εισόδου και
β ο παράγοντας απόκλισης. Στόχος είναι η έξοδος να έχει μέσο όρο 0 και
τυπική απόκλιση 1.
Η έξοδος του επιπέδου κατά το inference υπολογίζεται από την ακόλουϑη
σχέση:
Output =
γ(x − µmoving)
σmoving
+ β (2.8)
όπου x η είσοδος π.χ το κάϑε pixel από μια εικόνα 256×256, γ ο παράγοντας
στάϑμισης, µmoving είναι ο "κινούμενος" μέσος όρος όπου υπολογίζεται κατά
τη διάρκεια της εκπαίδευσης, σmoving είναι η "κινούμενη" τυπική απόκλιση
όπου υπολογίζεται κατά τη διάρκεια της εκπαίδευσης και β ο παράγοντας
απόκλισης. Ο στόχος είναι και πάλι η έξοδος να έχει μέσο όρο 0 και τυπική
απόκλιση 1.
2.1.8 Η τεχνική Instance Normalization
Μια άλλη μέϑοδος κανονικοποίησης είναι να αντικαταστήσουμε το batch nor-
malization με instance normalization [10]. Η διαφορά μεταξύ τους είναι ότι
το instance normalization υπολογίζει το μέσο όρο και την τυπική απόκλιση
ανά κανάλι και ανά εικόνα, ενώ το batch normalization τα υπολογίζει ανά
ομάδα εικόνων (batch). Από εκεί και πέρα ο στόχος είναι ίδιος ϑέλουμε έξοδος
10
να έχει μέσο όρο 0 και τυπική απόκλιση 1. Από πειράματα έχει βρεθεί ότι η
συγκεκριμένη τεχνική μπορεί να μειώσει δραματικά το χρόνο εκπαίδευσης βα-
ϑέων δικτύων που κάνουν stylization εικόνων, όπως κι αυτά που ϑα ασχολ-
ηθούμε σε αυτήν την εργασία.
11
Κεφάλαιο 3
H Μέϑοδος Μεταφοράς Στυλ
του Gatys et al
Στο κεφάλαιο αυτό, ϑα ασχοληϑούμε με την πρώτη μέϑοδο μεταφοράς στυλ
με τη βοήϑεια βαϑιάς μάϑησης, που είναι η μέϑοδος του Gatys et al [4]. Θα
δούμε αναλυτικά τη δομή της μεϑόδου και τα αποτελέσματά της.
3.1 Περιγραφή της μεϑόδου
3.1.1 VGG19
Σχήμα 3.1: Διάγραμμα της Μεϑόδου Μεταφοράς Στυλ του Gatys et al.
Η μέϑοδος αυτή χρησιμοποιεί το δίκτυο VGG19, έτσι ώστε να εξάγει τις
αναγκαίες πληροφορίες σχετικά με το στυλ της εικόνας που ϑέλουμε να προσ-
εγγίσουμε και του περιεχομένου της εικόνας που ϑέλουμε να εφαρμόσουμε
αυτό το στυλ.
12
Σχήμα 3.2: Αρχιτεκτονική του βαϑέως δικτύου ταξινόμησης VGG19.
Το VGG19 είναι ένα συνελικτικό νευρωνικό δίκτυο, που χρησιμοποιείται
κυρίως για Large-Scale Image Recognition. To VGG19 αποτελείται από 16
συνελικτικά επίπεδα με kernel size 3 × 3, το καθένα ακολουθούμενο από μια
ReLu. Από αυτά τα επίπεδα, 2 επίπεδα έχουν 64 φίλτρα, 2 επίπεδα έχουν
128 φίλτρα, 4 επίπεδα έχουν 256 φίλτρα και τα τελευταία 8 επίπεδα έχουν
512 φίλτρα. Ανά 2 ή 4 συνελικτικά επίπεδα υπάρχει 1 MaxPooling layer.
Στο τέλος, έχουμε 3 πλήρως συνδεδεμένα επίπεδα (Fully Connected layers)
με 4096 νευρώνες, 4096 νευρώνες και 1000 νευρώνες αντίστοιχα. Οι έξοδοι
του τελευταίου πλήρως συνδεδεμένου επιπέδου περνάνε από τη Softmax
συνάρτηση, για να μπορέσουν μετά να χρησιμοποιηθούν για την ταξινόμηση
της εικόνας εισόδου.
Για την υλοποίηση της μεθόδου του Gatys et al χρησιμοποιούμε προ-
εκπαιδευμένο το VGG19 από τις βιβλιοθήκες της TensorFlow. Το δίκτυο αυτό
είναι εκπαιδευμένο σε όλο το σετ δεδομένων της συλλογής ImageNet [3] και
αποτελείται από 143.667.240 παραμέτρους. Η χρήση προ-εκπαιδευμένων
δικτύων για παραπλήσια, αν και διαφορετικά, προβλήματα όρασης μηχανής
και όχι μόνο, είναι μια τεκμηριωμένη επωφελής διαδικασία στη διεϑνή βιβ-
λιογραφία. Είναι μια διαδικασία που αποδίδει πολύ καλύτερα από την
τυχαία αρχικοποίηση των βαρών του δικτύου, παρόλο που χρησιμοποιείται σε
μια εντελώς διαφορετική εφαρμογή από εκείνη για την οποία εκπαιδεύτηκε.
Να τονιστεί ότι, στις περισσότερες περιπτώσεις, το προ-εκπαιδευμένο δίκ-
τυο συνεχίζει να εκπαιδεύεται και στην νέα εφαρμογή του, απλά τα προ-
εκπαιδευμένα βάρη λειτουργούν ως μια καλύτερη αρχικοποίηση του δικτύου.
Στη μέϑοδο του Gatys et al, παρόλα αυτά, το VGG19 δε ϑα συνεχίσει την
εκπαίδευση του, αλλά οι συντελεστές του ϑα χρησιμοποιηθούν ως έχουν.
13
3.1.2 Ονοματολογία επιπέδων και block
´Οπως βλέπουμε στο Figure 3.3, το VGG19 αποτελείται από 5 βασικά block,
όπου το κάϑε block έχει από 2 εώς 4 επίπεδα συνέλιξης. Επομένως, όταν
γράφουμε block1_conv2 ή conv1_2, αναφερόμαστε στο επίπεδο συνέλιξης
2(Conv2) από το Block 1. Η ίδια ονοματολογία ισχύει και για τα υπόλοιπα
επίπεδα.
Σχήμα 3.3: Σχηματκό διάγραμμα των blocks του δικτύου VGG19.
3.1.3 Θεωρητική ανάλυση μεϑόδου
Στις μεθόδους μεταφοράς στυλ, αναφερόμαστε σε τρεις εικόνες: την εικόνα
που έχει το επιθυμητό στυλ (style image), την εικόνα που ϑέλουμε να εφαρ-
μόσουμε αυτό το στυλ (content image) και την παραγόμενη εικόνα (gener-
ated image), η όποια στην αρχή αποτελείται από λευκό ϑόρυβο (βλέπε Fig-
ure 3.1). Σε κάϑε επανάληψη περνάμε από το δίκτυο το style image, con-
tent image και generated image. Συλλέγουμε την πληροφορία του style im-
age από τα στρώματα relu1_1,relu2_1,relu3_1,relu4_1 και relu5_1, ενώ
για τα content image και generated image συλλέγουμε την πληροφορία από
το relu4_2. ´Εχοντας αυτές τις αναπαραστάσεις (features) μπορούμε να υπ-
ολογίσουμε το σφάλμα που υπάρχει στο στυλ και στο περιεχόμενο. ´Ετσι μεσώ
της διαδικασία back-propagation υπολογίζουμε τα gradients, ανανεώνουμε
τις τιμές του generated image και ύστερα από αρκετές επαναλήψεις το gen-
erated image έχει το περιεχόμενο του content image με το στυλ του style
image.
3.2 Αναπαράσταση Στυλ και Περιεχομένου
Στην παρουσιαζόμενη μέϑοδο, προτείνονται συγκεκριμένες μαθηματικές ανα-
παραστάσεις του στυλ και του περιεχομένου, έτσι ώστε να μπορούμε να υπ-
ολογίσουμε τα σφάλματα στις συναρτήσεις κόστους και να υπολογιστούν οι
ανανεώσεις για την εκπαίδευση των βαρών του δικτύου.
14
Σχήμα 3.4: Αποτέλεσμα της μεθόδου μεταφοράς στυλ του Gatys et al. Αρισ-
τερά είναι η αρχική εικόνα (content image), στη μέση είναι η εικόνα που έχει
το επιθυμητό στυλ (style image) και δεξιά είναι η παραγόμενη εικόνα (gener-
ated image).
3.2.1 Αναπαράσταση Περιεχομένου
Θεωρούμε ότι Xl είναι η αναπαράσταση-έξοδος της πρωτότυπης εικόνας στο
επίπεδο l του δικτύου και Fl την αναπαράσταση-έξοδο της παραγόμενης
εικόνας στο επίπεδο l του δικτύου. Το σφάλμα αναπαράστασης περιεχομέ-
νου περιγράφεται από την εξίσωση:
Lcontent =
1
2
X
i,j
(Fl
ij − Xl
ij)2
(3.1)
Σχήμα 3.5: Αποτελέσματα φίλτρων ανά μπλοκ συνέλιξης για το περιεχόμενο.
15
Σχήμα 3.6: Αποτελέσματα φίλτρων ανά convolution block για το στυλ.
3.2.2 Αναπαράσταση Στυλ
Για την αναπαράσταση του στυλ χρειαζόμαστε να εξάγουμε την πληροφορία
σχετικά με την υφή (texture) της εικόνας. Αυτό μπορούμε να το πετύχουμε με
τη βοήϑεια του Gram Matrix, που ορίζεται ως ακολούϑως:
Gl
ij =
X
k
Fl
ikFl
jk. (3.2)
όπου Fl ορίζουμε πάλι την αναπαράσταση-έξοδο της παραγόμενης εικόνας
στο επίπεδο l του δικτύου. Ο πίνακας Gram διατηρεί την πληροφορία της
υφής (texture), χωρίς να μας ενδιαφέρει που βρίσκεται τοπικά αυτή η πληρο-
φορία. Θεωρούμε ότι Al είναι ο πίνακας Gram της πρωτότυπης εικόνας στο
επίπεδο l του δικτύου και Gl είναι ο πίνακας Gram της παραγόμενης εικόνας
στο επίπεδο l του δικτύου. ´Ετσι η απώλεια του στυλ (style loss) στο επίπεδο
l του δικτύου δίνεται από τη σχέση:
El =
1
4N2
l M2
l
X
i,j
(Gl
i,j − Al
i,j)2
(3.3)
Η συνολική απώλεια του στυλ είναι
Lstyle =
L
X
l=0
wlEl (3.4)
όπου wl είναι το βάρος του σφάλματος για το επίπεδο l του δικτύου.
3.2.3 Συνολική Συνάρτηση Απώλειας (loss function)
Η τελική και συνολική συνάρτηση απώλειας δίνεται από τη σχέση:
Ltotal = αLcontent + βLstyle (3.5)
16
´Οπου α το βάρος της απώλειας περιεχομένου και β το βάρος της απώλειας
στυλ. ´Οπως είναι προφανές, η συνολική συνάρτηση απωλειών προσπαθεί
να ελαχιστοποιήσει ταυτόχρονα τις δύο διαφορετικές συναρτήσεις απωλειών,
φυσικά με διαφορετικό βάρος. Με άλλα λόγια, αυτό που προσπαθεί να
επιτύχει είναι να μοιάζει η τελική παραγόμενη εικόνα στην αρχική εικόνα εισό-
δου όσο το δυνατόν περισσότερο (ελαχιστοποίηση απώλειας περιεχομένου),
αλλά ταυτόχρονα η τελική παραγόμενη εικόνα να έχει παρόμοια υφή με την
εικόνα στυλ (ελαχιστοποίηση απώλειας στυλ). Οι μεταβλητές α,β ρυθμίζουν
το πόσο έντονο ϑέλουμε να είναι το κάϑε ένα από τα δύο κριτήρια.
3.3 Πειράματα και Αποτελέσματα
Το μοντέλο Gatys et al και όλες οι επιπλέον βοηθητικές συναρτήσεις
δημιουργήϑηκαν σε γλώσσα Python με την βοήθεια του Tensorflow. Οι
παράμετροι του μοντέλου είναι τα α,β, ο αριθμός και τα μπλοκς των χρησι-
μοποιούμενων επιπέδων συνέλιξης. Τα βάρη wl στην εξίσωση (3.4) είναι όλα
ίσα με 1. ´Ολα τα πειράματα έγιναν για 10 εποχές με 100 επαναλήψεις ανά
εποχή. Οποιαδήποτε μεταβλητή αλλάζει ϑα αναφέρεται ρητά, αλλιώς η τιμή
της ϑα είναι αυτή που γράφεται στο πίνακα 3.1
Σχήμα 3.7: Παραγόμενη εικόνας με τη μέϑοδο μεταφοράς στυλ Gatys et al ανά
εποχή εκπαίδευσης.
α 1e4
β 1
content_layers conv4_2
style_layers conv1_1,conv2_1,conv3_1,conv4_1,conv5_1
Πίνακας 3.1: Hyperparameters
Τα αποτελέσματα του Σχήματος 3.7 δημιουργήϑηκαν με τις υπερ-
17
παραμέτρους που εμφανίζονται στο Πίνακα 3.1. ´Εγιναν συνολικά 10 εποχές
από 100 επαναλήψεις σε κάϑε εποχή.
3.3.1 Εξάρτηση αποτελεσμάτων από τις παραμέτρους α, β
Τα αποτελέσματα του Σχήματος 3.8 δημιουργήϑηκαν με τις υπερ-
παραμέτρους που εμφανίζονται στο Πίνακα 3.1 με το α να παίρνει τιμές στο
διάστημα [1e−4,1e6]. Παρατηρούμε ότι καθώς αυξάνουμε την παράμετρο α το
περιεχόμενο της εικόνας γίνεται όλο και πιο αντιληπτό σε σχέση με το στυλ,
μέχρις ότου για α = 1e6 πλέον ο αλγόριθμος δεν μπορεί να εφαρμόσει το στυλ,
διότι στη συνάρτηση απώλειας το βάρος του περιεχομένου είναι α >> β και
έτσι ϑεωρεί ότι η διατήρηση του περιεχομένου είναι πολύ πιο σημαντική.
Σχήμα 3.8: Αποτελέσματα παραγόμενης εικόνας με διάφορες τιμές του α με
τη μέϑοδο του Gatys et al.
18
Τα αποτελέσματα του Σχήματος 3.9 δημιουργήϑηκαν με τις υπερ-
παραμέτρους, που εμφανίζονται στον Πίνακα 3.1 με το β να παίρνει τιμές
στο διάστημα [1e−4,1e6]. Παρατηρούμε ότι καθώς αυξάνεται το β, το στυλ
αρχίζει να είναι πιο έντονο στην εικόνα.
Σχήμα 3.9: Αποτελέσματα παραγόμενης εικόνας με διάφορες τιμές του β με
τη μέϑοδο του Gatys et al.
3.3.2 Εξάρτηση αποτελεσμάτων από το πλήϑος των μπλοκ
συνέλιξης
Η επόμενη παράμετρος που επηρεάζει το αισϑητικό αποτέλεσμα είναι ο αρι-
ϑμός των επίπεδων συνέλιξης και το μπλοκ, όπου ανήκει η συνέλιξη.
Στο Σχήμα 3.10 βλέπουμε το αποτέλεσμα που έχει η αλλαγή του επιπέδου
της συνέλιξης που χρησιμοποιούμε ως Content Layer.
19
Σχήμα 3.10: Αποτελέσματα εικόνας με διαφορετικό αριθμό συνελικτικών
επιπέδων για την μέϑοδο του Gatys et al.
Σχήμα 3.11: Αποτελέσματα εικόνας με διαφορετικό αριθμό συνελικτικών
επιπέδων για την μέϑοδο του Gatys et al.
Από τις παραπάνω εικόνες μπορούμε να παρατηρήσουμε ότι για να υπ-
άρχει ένα σωστό οπτικά αποτέλεσμα της μεταφοράς του στυλ, μας ενδι-
αφέρουν κυρίως τα χαρακτηριστικά (features) του περιεχομένου που εξά-
γονται από τη συνέλιξη, παρά το πλήϑος των επιπέδων της συνέλιξης.
´Εχουμε μειώσει τη τιμή του β για αυτό το πείραμα, έτσι ώστε να είναι πιο
ευκρινές ο ρόλος του αριθμού και επιπέδου των επιπέδων που επιλέγονται.
20
Σχήμα 3.12: Αποτέλεσμα εικόνας με διαφορετικά επίπεδα συνέλιξης για το
στυλ με τη μέϑοδο του Gatys et al.
Στο Σχήμα 3.12 βλέπουμε το αποτέλεσμα που έχει η αλλαγή του επιπέδου
της συνέλιξης, καϑώς και ο αριϑμός των επιπέδων που χρησιμοποιούμε ως
Style Layer. Στο Σχήμα 3.13 φαίνεται ότι τα συνελικτικά επίπεδα στο block4,
από μόνα τους, μπορούν να λειτουργήσουν για την ανακατασκευή του στυλ.
Σχήμα 3.13: Αποτέλεσμα εικόνας με 4 διαφορετικά επίπεδα συνέλιξης για το
στυλ με τη μέϑοδο του Gatys et al.
Από τα παραπάνω πειράματα παρατηρούμε ότι όσο πιο γενικά και
αφηρημένα είναι τα χαρακτηριστικά που εξάγονται για το περιεχόμενο από
το συνελικτικό επίπεδο, τόσο πιο έντονα μπορεί να εφαρμοστεί το στυλ που
επιθυμούμε (Σχήμα 3.14).
21
Σχήμα 3.14: Απόκριση φίλτρων ανα convolution layer και το απότελεσμα του
ως content layer με τη μέϑοδο του Gatys et al.
3.4 Προγραμματιστικές σημειώσεις για την
υλοποίηση της μεϑοδου σε TensorFlow 2.x και
Απόδοση
3.4.1 Σημειώσεις
Σημείωση 1: ´Οπως αναφέρθηκε στην παράγραφο 3.1.1, ϑα χρησιμοποιήσουμε το
δίκτυο VGG19, που μας δίνεται έτοιμο και pre-trained στο imagenet
από το ΤensorFlow. Δεν το χρειαζόμαστε ολόκληρο το δίκτυο, οπότε
μπορούμε να φορτώσουμε μόνο ένα μέρος του. Επιπλέον, ϑέτουμε το
δίκτυο να μην είναι εκπαιδεύσιμο, εφόσον δεν πραγματοποιούμε καμία
εκπαίδευση στο ίδιο το δίκτυο.
# Importing VGG19 without top
vgg = t f . keras . applications .VGG19( include_top=False ,
weights= ’ imagenet ’ )
# We do not need to t r a i n VGG19
vgg . trainable = False
22
Το δίκτυο που δημιουργήϑηκε είναι
Layer ( type )
Output Shape Param #
=================================================================
input_1 ( InputLayer )
[ ( None , None , None , 3 ) ] 0
_________________________________________________________________
block1_conv1 (Conv2D)
(None , None , None , 64) 1792
_________________________________________________________________
block1_conv2 (Conv2D)
(None , None , None , 64) 36928
_________________________________________________________________
block1_pool ( MaxPooling2D )
(None , None , None , 64) 0
_________________________________________________________________
block2_conv1 (Conv2D)
(None , None , None , 128) 73856
_________________________________________________________________
block2_conv2 (Conv2D)
(None , None , None , 128) 147584
_________________________________________________________________
block2_pool ( MaxPooling2D )
(None , None , None , 128) 0
_________________________________________________________________
block3_conv1 (Conv2D)
(None , None , None , 256) 295168
_________________________________________________________________
block3_conv2 (Conv2D)
(None , None , None , 256) 590080
_________________________________________________________________
block3_conv3 (Conv2D)
(None , None , None , 256) 590080
_________________________________________________________________
block3_conv4 (Conv2D)
(None , None , None , 256) 590080
_________________________________________________________________
block3_pool ( MaxPooling2D )
(None , None , None , 256) 0
_________________________________________________________________
block4_conv1 (Conv2D)
(None , None , None , 512) 1180160
_________________________________________________________________
23
block4_conv2 (Conv2D)
(None , None , None , 512) 2359808
_________________________________________________________________
block4_conv3 (Conv2D)
(None , None , None , 512) 2359808
_________________________________________________________________
block4_conv4 (Conv2D)
(None , None , None , 512) 2359808
_________________________________________________________________
block4_pool ( MaxPooling2D )
(None , None , None , 512) 0
_________________________________________________________________
block5_conv1 (Conv2D)
(None , None , None , 512) 2359808
_________________________________________________________________
block5_conv2 (Conv2D)
(None , None , None , 512) 2359808
_________________________________________________________________
block5_conv3 (Conv2D)
(None , None , None , 512) 2359808
_________________________________________________________________
block5_conv4 (Conv2D)
(None , None , None , 512) 2359808
_________________________________________________________________
block5_pool ( MaxPooling2D )
(None , None , None , 512) 0
=================================================================
Total params : 20 ,024 ,384
Trainable params : 0
Non−trainable params : 20 ,024 ,384
Σημείωση 2: Για να εξάγουμε τα χαρακτηριστικά είτε από το στυλ, είτε από το
περιεχόμενο, χρειαζόμαστε την έξοδο από συγκεκριμένα επίπεδα. ´Ετσι,
φτιάχνουμε ένα δίκτυο με τελευταίο επίπεδο το τελευταίο επιθυμητό
επίπεδο συνέλιξης που χρειαζόμαστε, αλλά ως έξοδο του έχουμε μια
λίστα από όλα τα επιθυμητά επίπεδα, γιατί χρειαζόμαστε την πληρο-
φορία όλων των επιπέδων.
# Desired Content Layer
content_layers = [ ’ block4_conv2 ’ ]
# Desired S t y l e Layers
s t y l e _ l a y e r s = [ ’ block1_conv1 ’ ,
’ block2_conv1 ’ ,
’ block3_conv1 ’ ,
24
’ block4_conv1 ’ ]
layer_names = s t y l e _ l a y e r s + content_layers
outputs = [ vgg . get_layer (name ) . output for name in layer_names ]
model = t f . keras . Model ( [ vgg . input ] , outputs )
Σημείωση 3: Οποιοσδήποτε και αν είναι ο τρόπος που φορτώνονται οι εικόνες πάντα,
πριν περάσουν από το VGG19, ϑα πρέπει να περάσουν μια προ-
επεξεργασία, έτσι ώστε να έρθουν στη σωστή μορφή για να εισαχϑούν
στο δίκτυο. Αυτή η προ-επεξεργασία αποτελείται από αλλαγή της
σειράς των καναλιών από RGB σε BGR και αφαίρεση του μέσου όρου
του dataset από την κάϑε εικόνα. Αυτό μπορεί να γίνει πολύ εύκολα
μέσω του TensorFlow με τη συνάρτηση
preprocessed_input = t f . keras . applications . vgg19 .
preprocess_input ( inputs )
Η είσοδος της συνάρτησης πρέπει να είναι ένα Tensor 3D (Η, W, C) ή
4D
(B, H, W, C) με σειρά καναλιών RGB και τιμές μεταξύ 0 − 255.
3.5 Χαρακτηριστικά και Απόδοση
H απόδοση της μεθόδου μετρήϑηκε στον υπολογιστή από το Εργαστήριο
Ηλεκτρικών Κυκλωμάτων, Επεξεργασίας Σημάτων και Εικόνων με GPU TI-
TAN Xp και στη CPU του λάπτοπ μου Intel-Core i7-4510u CPU @
2.00GHz. ´Εχουμε διαλέξει μια αρκετά δυνατή GPU και μια απλή CPU, έτσι
ώστε να δούμε την απόδοση σε διαφορετικά συστήματα.
Network0sName V GG19
Size 77M
GPU Performance 67.8 seconds
CPU Performance no results
Πίνακας 3.2: Χαρακτηριστικά και Απόδοση
Τα παραπάνω χαρακτηριστικά κρίνουν ακατάλληλη τη μέϑοδο αυτή για
real-time εφαρμογές καθώς και για εφαρμογή σε εικονοσειρές. Επιπλέον, στη
συγκεκριμένη μέϑοδο δεν υπάρχει δίκτυο που να έχει εκπαιδευτεί σε κάποιου
συγκεκριμένο στυλ και να μπορεί να επαναχρησιμοποιηθεί για να μεταφέρει
το ίδιο στυλ σε κάποια άλλη εικόνα. Το αποτέλεσμα είναι το κάϑε φορά
που χρησιμοποιούμε το δίκτυο να μην είναι επαναχρησιμοποιήσιμο, αλλά να
αφορά το συγκεκριμένο συνδυασμό εικόνας εισόδου και εικόνας στυλ.
25
Κεφάλαιο 4
Μέϑοδος Johnson et al
4.1 Περιγραφή Μεϑόδου
Οι Johnson et al [8] στο άρθρο τους περιγράφουν μια πρωτοποριακή μέϑοδο
για τη μεταφορά στυλ από εικόνα σε εικόνα, χρησιμοποιώντας νευρωνικά δίκ-
τυα. Σε αντίθεση με τη μέϑοδο των Gatys et al , οι Johnson et al χρησιμοποιoύν
2 δίκτυα για την εκπαίδευση. ´Ενα Loss Network και ένα Image Transform
Network, που είναι και το κύριο δίκτυο που κάνει τη μεταφορά στυλ.
To Loss Network είναι το VGG16 [9] και το χρησιμοποιεί για να παράγει
τις αναπαραστάσεις του περιεχομένου και του στυλ, όπως έκανε και o Gatys
et al με το VGG19.
Το Image Transform Network είναι ένα νευρωνικό δίκτυο, που ως εί-
σοδο δέχεται την εικόνα που έχει το περιεχόμενο (content) και στην έξοδο
του δικτύου η εικόνα είναι επεξεργασμένη, έτσι ώστε να έχει εφαρμοστεί το
επιθυμητό στυλ. Στο Image Transform Network στην αρχή της εκπαίδευσης
τα βάρη του αρχικοποιούνται σε τυχαίες τιμές. Τις απώλειες του περιεχομέ-
νου και του στυλ τις υπολογίζουμε από τις συναρτήσεις απώλειας, που χρησι-
μοποίησε και ο Gatys et al σύμφωνα με τις αναπαραστάσεις που παράγει
το Loss Network. Γνωρίζοντας το ολικό σφάλμα, με τη διαδικασία του back-
propagation ανανεώνουμε τα βάρη του Image Transform Network. Στο τέλος
της εκπαίδευσης, έχουμε ένα δίκτυο, που τα βάρη του είναι τέτοια, ώστε να
μπορεί να εφαρμόζει ένα συγκεκριμένο στυλ σε οποιαδήποτε εικόνα επιθυ-
μούμε. Το κύριο πλεονέκτημα αυτής της μεθόδου είναι ότι μπορεί να παράξει
το αποτέλεσμα σε μερικά εκατοστά του δευτερολέπτου και για αυτό κιόλας
χαρακτηρίζεται real-time.
Στο Σχήμα 4.1 φαίνεται η αρχιτεκτονική της μεϑόδου. Πρώτα περνάμε
την είσοδο από το Image Transform Network και μετά η έξοδος του δικτύου,
το content και στο style περνάνε από το VGG16, έτσι ώστε να πάρουμε τις
ανάλογες αναπαραστάσεις. Για το style, συλλέγουμε την πληροφορία από τα
relu1_2, relu2_2, relu3_2 και relu4_2, για το content από το relu3_2. Από
αυτά τα δεδομένα μπορούμε να υπολογίσουμε τις συναρτήσεις κόστους και
26
τέλος με τη διαδικασία της οπισϑοδιάδοσης να εκπαιδεύσουμε το δίκτυο.
Σχήμα 4.1: Αρχιτεκτονική της μεϑόδου Johnson et al
27
4.2 Αρχιτεκτονική Image Transform Network
Σχήμα 4.2: Αρχιτεκτονική Image Transform Network
Η είσοδος του δικτύου είναι 256 × 256 × 3. Αποτελείται από 3 επίπεδα
2D Convolution, 5 Residual blocks, 3 επίπεδα 2D Transpose Convolution
και στο τέλος ένα επίπεδο tanh activation. Τελικά η έξοδος του δικτύου είναι
256 × 256 × 3 δηλαδή όπως και η είσοδος.
4.2.1 Residual blocks
Το δίκτυο έχει 5 residual block όπου αποτελούνται από 2 × 2D Convolu-
tion block και το skip connection. Τα residual blocks είναι πολύ χρήσιμα
στην περίπτωση του Image Transform Net, διότι το αποτέλεσμα του δικτύου
ϑέλουμε να είναι κατά ένα ποσοστό επεξεργασμένο σύμφωνα με την είσοδο
του. Επίσης, τα blocks αυτά βοηθάνε στη σωστή διαδικασία της εκπαίδευσης,
ώστε να αποφευχθεί κάποια υπολογιστική έκρηξη και βοηθούν στη ταχύτητα
της εξαγωγής συμπερασμάτων (inference).
4.2.2 Transpose 2D Convolution
Είναι η ακριβώς αντίθετη διαδικασία του 2D Convolution, έτσι ώστε η εικόνα
στην έξοδο του δικτύου να επανέλθει στις αρχικές διαστάσεις της, δηλαδή
256 × 256 × 3. ´Υστερα από κάϑε Transpose Convolution υπάχει Batch Nor-
malization και Relu, εκτός από το τελευταίο Transpose 2D Convolution,
όπου δεν υπάρχει Relu.
28
4.3 Εφαρμογή της μεϑόδου
Για την εφαρμογή της μεϑόδου χρησιμοποιήϑηκε η γλώσσα python και το API
της TensorFlow. Το δίκτυο ϑα εκπαιδευτεί σε περίπου 40000 εικόνες από
το COCO Dataset για 2 εποχές. Για την επιτάχυνση της εκπαίδευσης και για
την αισϑητική βελτίωση των αποτελεσμάτων χρησιμοποιούνται οι παρακάτω
πρακτικές:
• Αντί για VGG16, χρησιμοποιούμε το VGG19. Αυτό το κάνουμε, επειδή
πρακτικά φαίνεται ότι βγάζει αισϑητικά πιο όμορφα αποτελέσματα. Στο
Σχήμα 4.3 βλέπουμε το αποτέλεσμα στο ίδιο ακριβώς τεστ με μόνη δι-
αφορά το loss network.
• ´Υστερα από κάϑε συνέλιξη είτε 2D Convolution, είτε Transpose 2D
Convolution εφαρμόζεται zero-padding. Για παράδειγμα, ύστερα από
το πρώτο 2D Convolution η χρήσιμη πληροφορία βρίσκεται σε διάσ-
ταση 248 × 248 και προστίθενται μηδενικά, έτσι ώστε να φτάσει σε
διάσταση 256 × 256. ´Ετσι αποφεύγονται τα σφάλματα που μπορεί να
προκύψουν μεταξύ των επιπέδων λόγω των διαστάσεων.
• Εφόσον χρησιμοποιούμε zero-padding μπορούμε να αντικαταστήσουμε
το τελευταίο Transpose 2D Convolution με 2D Convolution, αφού το
αποτέλεσμα πάλι ϑα είναι 256 × 256. Αυτή η πρακτική φαίνεται ότι
επιταχύνει την εκμάθηση και βελτιώνει το αισϑητικό αποτέλεσμα. Τα
αποτελέσματα στο Σχήμα 4.4 παράχϑηκαν με τα δεδομένα από το πί-
νακα 4.1
• ´Υστερα από κάϑε συνέλιξη είτε 2D Convolution, είτε Transpose
2D Convolution ακολουθεί Instance Normalization. Στο άρθρο του
Ulyanov δείχνει ότι μπορεί να παράξει καλύτερα αισϑητικά αποτελέσ-
ματα σε περισσότερες περιπτώσεις σε σχέση με το Batch Normaliza-
tion. Τα αποτελέσματα στο Σχήμα 4.5 παράχϑηκαν με τα δεδομένα από
το πίνακα 4.1
Σχήμα 4.3: Αποτελέσματα VGG16/VGG19 στο τεστ με Table 4.1. Tα style
layers και content layers για το VGG16 είναι αυτά που προτείνονται από τοv
Johnson et al και για το VGG19 αυτά που πρότεινε ο Gatys et al
29
Σχήμα 4.4: Αλλαγή τελευταίου επιπέδου από Transpose 2D Conv σε 2D
Conv
Σχήμα 4.5: Αλλαγή μεϑόδου Κανονικοποίησης.
4.3.1 Αποτελέσματα σε εικόνες
´Ολα τα αποτελέσματα παράχϑηκαν σύμφωνα με την ενότητα 9 και τον πίνακα
4.2
30
4.3.2 Αποτελέσματα σε βίντεο
´Ολα τα αποτελέσματα παράχϑηκαν σύμφωνα με την ενότητα 9 και τον πίνακα
4.2
Από τα βίντεο μπορούμε να δούμε ότι η μέϑοδος του Johnson, αν
και παράγει όμορφα στιλιστικά αποτελέσματα παράγει επίσης και πολλά
τρεμοπαιξίματα (flickers), διότι δεν υπάρχει κανένας περιορισμός σχετικά με
τη χωρική συνοχή μεταξύ των frames.
Loss Net VGG19
α 1
β 40
Total Variation Loss 200
epochs 2
Number of images in training 5000
content_layers conv4_2
style_layers conv1_1,conv2_1,conv3_1,conv4_1,conv5_1
Πίνακας 4.1: Υπερ-παράμετροι (hyperparameters) για μικρά πειράματα.
31
Loss Net VGG19
α 1
β 40
Total Variation Loss 200
epochs 2
Number of images in training 40000
content_layers conv4_2
style_layers conv1_1,conv2_1,conv3_1,conv4_1,conv5_1
Πίνακας 4.2: Υπερ-παράμετροι (hyperparameters) για μεγάλα πειράματα.
4.4 Υλοποίηση
4.4.1 Σημειώσεις
• Μετά από κάϑε 2D Convolution layer ακολουθεί Instance Normaliza-
tion και ReLU, εκτός από το τελευταίο επίπεδο 2D Convolution.
class ConvLayer ( t f . keras . layers . Layer ) :
def __init__ ( self , f i l t e r s ,
kernel =(3 ,3) , padding= ’same ’ ,
s t r i d e s =(1 ,1) , activate=True , name=" " ,
w e i g h t _ i n i t i a l i z e r=" glorot_uniform "
) :
super ( ConvLayer , s e l f ) . __init__ ( )
s e l f . activate = activate
s e l f . conv = t f . keras . layers . Conv2D( f i l t e r s , kernel_size=kernel ,
padding=padding , s t r i d e s=strides ,
name=name , trainable=True ,
use_bias=False ,
k e r n e l _ i n i t i a l i z e r=w e i g h t _ i n i t i a l i z e r
)
s e l f . inst_norm = tfa . layers . InstanceNormalization ( axis =3,
center=True ,
scale=True ,
b e t a _ i n i t i a l i z e r=" zeros " ,
gamma_initializer=" ones " ,
trainable=True )
i f s e l f . activate :
s e l f . relu_layer = t f . keras . layers . Activation ( ’ relu ’ ,
trainable=False )
def c a l l ( self , x ) :
32
x = s e l f . conv ( x )
x = s e l f . inst_norm ( x )
i f s e l f . activate :
x = s e l f . relu_layer ( x )
return x
• Μετά από κάϑε Transpose 2D Convolution layer ακολουϑεί Instance
Normalization και ReLU.
class ConvTLayer ( t f . keras . layers . Layer ) :
def __init__ ( self , f i l t e r s , kernel =(3 ,3) , padding= ’same ’ ,
s t r i d e s =(1 ,1) , activate=True , name=" " ,
w e i g h t _ i n i t i a l i z e r=" glorot_uniform "
) :
super ( ConvTLayer , s e l f ) . __init__ ( )
s e l f . activate = activate
s e l f . conv_t = t f . keras . layers . Conv2DTranspose ( f i l t e r s ,
kernel_size=kernel , padding=padding ,
s t r i d e s=strides , name=name ,
use_bias=False ,
k e r n e l _ i n i t i a l i z e r=w e i g h t _ i n i t i a l i z e r )
s e l f . inst_norm = tfa . layers . InstanceNormalization ( axis =3,
center=True ,
scale=True ,
b e t a _ i n i t i a l i z e r=" zeros " ,
gamma_initializer=" ones " ,
trainable=True )
i f s e l f . activate :
s e l f . relu_layer = t f . keras . layers . Activation ( ’ relu ’ )
def c a l l ( self , x ) :
x = s e l f . conv_t ( x )
x = s e l f . inst_norm ( x )
i f s e l f . activate :
x = s e l f . relu_layer ( x )
return x
• Το Resblock περιγράφεται προγραμματιστικά ως εξής:
class ResBlock ( t f . keras . layers . Layer ) :
def __init__ ( self , f i l t e r s , kernel =(3 ,3) , padding= ’same ’ ,
w e i g h t _ i n i t i a l i z e r=" glorot_uniform " , prefix=" " ) :
super ( ResBlock , s e l f ) . __init__ ( )
33
s e l f . prefix_name = prefix + " _ "
s e l f . conv1 =ConvLayer ( f i l t e r s =f i l t e r s ,
kernel=kernel ,
padding=padding ,
w e i g h t _ i n i t i a l i z e r=weight_initializer ,
name=s e l f . prefix_name + " conv_1 " )
s e l f . conv2 =ConvLayer ( f i l t e r s =f i l t e r s ,
kernel=kernel ,
padding=padding ,
activate=False ,
w e i g h t _ i n i t i a l i z e r=weight_initializer ,
name=s e l f . prefix_name + " conv_2 " )
s e l f . add = t f . keras . layers .Add(name=s e l f . prefix_name + "add" )
def c a l l ( self , x ) :
tmp = s e l f . conv1 ( x )
c = s e l f . conv2 (tmp)
return s e l f . add ( [ x , c ] )
όπου βλέπουμε ότι η έξοδος του επιπέδου είναι η επεξεργασμένη είσοδος συν
την αρχική είσοδο.
• Χρησιμοποιούμε μια επιπλέον συνάρτηση κόστους όπου ονομάζεται
total variation loss. To total variation loss υπολογίζεται από την
ακόλουϑη έκφραση:
V (y) =
X
i,j
q
|yi+1,j − yi,j|2 + |yi,j+1 − yi,j|2 (4.1)
και χρησιμοποιείται έτσι ώστε να μειωϑεί ο ϑόρυβος στην παραγόμενη
εικόνα.
4.5 Χαρακτηριστικά και Απόδοση
H απόδοση της μεθόδου μετρήϑηκε στον υπολογιστή από το Εργαστήριο
Ηλεκτρικών Κυκλωμάτων, Επεξεργασίας Σημάτων και Εικόνων με GPU TI-
TAN Xp και στη CPU του λάπτοπ μου Intel-Core i7-4510u CPU @ 2.00GHz
και είναι ο μέσος όρος 100 εικόνων. ´Εχουμε διαλέξει μια αρκετά δυνατή GPU
και μια απλή CPU έτσι ώστε να δούμε την απόδοση σε διαφορετικά συστή-
ματα.
34
Network0sName Jonshon
Size 6.7M
GPU Performance 0.02212 seconds
CPU Performance 0.48373 seconds
Πίνακας 4.3: Χαρακτηριστικά και Απόδοση της μεϑόδου Johnson et alσε δύο
διαφορετικά συστήματα με GPU και CPU.
35
Κεφάλαιο 5
H Μέϑοδος Gupta et al
5.1 Εισαγωγή
Στην εργασία τους οι Gupta et al δείχνουν μία μέϑοδο fine-tuning του δικ-
τύου του Johnson, έτσι ώστε να υπάρχει χρονική συνοχή του στυλ μεταξύ των
frames. Με τη μέϑοδο αυτή δεν χρειάζεται να επανεκπαιδευτεί το δίκτυο από
την αρχή και διατηρεί όλα τα πλεονεκτήματα όπως την ταχύτητα της εξαγ-
ωγής αποτελέσματος (inference).
5.2 Αρχιτεκτονική
Η αρχιτεκτονική και οι συναρτήσεις απώλειας είναι ίδιες με αυτές από τη
μέϑοδο του Johnson et al. Ο επιπλέον παράγοντας που εισάγεται είναι η
χρονική απώλεια.
5.2.1 Χρονική Απώλεια
´Οπως είδαμε στο subsection 4.3.2 στα βίντεο δημιουργείται ένα είδους
τρεμοπαίγμα (flickering artifacts). Η εξαγωγή αποτελέσματος (inference) σε
κάϑε frame παράγει διαφορετικό αποτέλεσμα, διότι από frame σε frame υπ-
άρχει διαφορετική πληροφορία, έστω και αν η διαφορά αυτή είναι μικρή. Για
να λυθεί αυτό το πρόβλημα, οι Gupta et al πρότειναν να γίνει fine-tuning
του δικτύου, συγκεκριμένα έτσι ώστε να υπάρχουν καλύτερα αποτελέσματα
σε βίντεο. ´Ετσι πρότειναν την εισαγωγή της χρονικής απώλειας
Lt(pt−1,pt) =
1
HW
k mt · pt − mt · p̃t+1 k2
F (5.1)
´Οπου pt είναι το frame τη στιγμή t, p̃t+1 είναι το frame τη στιγμή t + 1
μεταφερμένο (wrapped) στη στιγμή t και mt είναι η μάσκα κάλυψης (occlu-
sion mask) του frame στη στιγμή t.
36
5.2.2 Διαδικασίες Μεταφοράς (Wrapping) και Κάλυψης (Occlu-
sion)
Για να μπορέσουμε να συγκρίνουμε σωστά το στυλ των frames μεταξύ τους,
πρέπει το frame τη στιγμή t + 1 να το κάνουμε μεταφορά στη χρονική στιγμή
t. Για να το καταφέρουμε αυτό χρησιμοποιούμε την πληροφορία της οπ-
τικής ροής (optical flow) και της μάσκας κάλυψης (occlusion mask). Η οπ-
τική ροή (optical flow) διαθέτει την πληροφορία της μετατόπισης δx,δy κάϑε
pixel από frame σε frame. Η μάσκα κάλυψης (occlusion mask) είναι μια
μάσκα (δηλαδή μία εικόνα), όπου με άσπρο χρώμα είναι η πληροφορία, που
ϑέλουμε να κρατήσουμε (occlusion mask) και με μαύρο χρώμα η πληροφορία
που ϑέλουμε να απορρίψουμε (not occluded).
Σχήμα 5.1: Wrapper
´Οπως βλέπουμε στο Σχήμα 5.1, το τελικό αποτέλεσμα στο frame t και
στο frame t + 1 είναι ίδιο. Με τη βοήϑεια της οπτικής ροής, μπορούμε να
αναστρέψουμε τη στιγμή t+1 σε t. Στο συγκεκριμένο dataset MPI SENTINEL,
πρέπει να αντιστρέψουμε τις τιμές της μάσκας κάλυψης και μετά να γίνει το
εσωτερικό γινόμενο και στα 2 frames. Mε τη μάσκα κάλυψης επιλέγουμε ποια
σημεία ϑέλουμε να έχουμε μέσα στο frame και έτσι τα 2 αυτά frames μπορούν
να συγκριϑούν. Να σημειωϑεί ότι στη διαδικασία της εκπαίδευσης αυτά τα 2
frames πρέπει να έχουμε περάσει από το δίκτυο και να είναι stylized.
37
5.2.3 Εκπαίδευση
Αφού έχουμε εκπαιδεύσει πλήρως το δίκτυο του Johnson et al, αλλάζουμε
dataset και αρχίζουμε την εκπαίδευση στο MPI Sentinel [2]. To MPI Sentinel
Dataset αποτελείται από πολλά frame by frame κινούμενες εικονοσειρές,
που παρέχουν ταυτόχρονα τις μάσκες κάλυψης και τις οπτικές ροές σε κάϑε
frame. Ακολουθούμε τα παρακάτω βήματα
1. Διαβάζουμε 5 frames με διάσταση 218 × 512 × 3.
2. Περνάμε το frame 1 από το δίκτυο για να πάρουμε ένα stylized frame
1.
3. Ενώνουμε (concatenate) το stylized frame 1 με το frame 1 κατά μήκος
των κανανλιών και έτσι έχουμε το concatenated image 1 με διάσταση
218 × 512 × 6.
4. Περνάμε το concatenated image 1 από το δίκτυο και έχουμε το stylized
concatenated image 1. Από αυτό μπορούμε να εξάγουμε τα style loss
και content loss.
38
5. Ενώνουμε (concatenate) τo stylized concatenated image 1 με το frame
2 και έχουμε το concatenated image 2 με διάσταση 218 × 512 × 6.
6. Περνάμε το concatenated image 2 από το δίκτυο και έχουμε το styl-
ized concatenated image 2. Από αυτό μπορούμε να εξάγουμε τα style
loss, content loss και flow loss με το stylized concatenated image 2
σύμφωνα με αυτά που παρουσιάστηκαν στην ενότητα 5.2.2.
7. Ενώνουμε (concatenate) τo stylized concatenated image 2 με το frame
3 και έχουμε το concatenated image 3.
39
8. Περνάμε το concatenated image 3 από το δίκτυο και έχουμε το stylized
concatenated image 3. Από αυτό μπορούμε να εξάγουμε τα style loss
και content loss.
9. Ενώνουμε (concatenate) τo stylized concatenated image 3 με το frame
4 και έχουμε το concatenated image 4.
10. Περνάμε το concatenated image 4 από το δίκτυο και έχουμε το styl-
ized concatenated image 4. Από αυτό μπορούμε να εξάγουμε τα style
loss, content loss και flow loss με το stylized concatenated image 3,
σύμφωνα με αυτά που παρουσιάστηκαν στην ενότητα 5.2.2.
11. Διαβάζουμε τα επόμενα 4 frames και επαναλαμβάνουμε την διαδικασία.
Το κάνουμε αυτό για όλα τα frames του dataset.
5.3 Αποτελέσματα σε βίντεο
Σε αυτό το σύνδεσμο μπορείτε να παρακολουϑήσετε το βίντεο που δείχνει τη
σύγκριση των αποτελεσμάτων σε εικονοσειρές μεταξύ των μεϑόδων Johnson
et al και Gupta et al.
40
Παρακάτω 5.2 παρουσιάζονται κάποια frames για τη σύγκριση μεταξύ
Johnson et al και Gupta et al. Με κύκλο είναι σημειωμένο ένα σημείο όπου
φαίνεται η διαφορά των αποτελεσμάτων.
Σχήμα 5.2: Σύγκριση αποτελεσμάτων μεταξύ Johnson et al και Gupta et al
41
Κεφάλαιο 6
H Μέϑοδος των Huang και
Belongie
6.1 Εισαγωγή
Τα προηγούμενα μοντέλα που μελετήσαμε ήταν αρχιτεκτονικές per model per
style. Αδιαμφισβήτητα, δημιουργήϑηκε η ανάγκη για δημιουργία μοντέλων, τα
οποία ϑα μπορούν να εφαρμόσουν οποιοδήποτε στυλ. Στο παρόν κεφάλαιο
ϑα αναλύσουμε τη μέϑοδο των Huang και Belongie [6], που χρησιμοποιεί το
VGG19, μία δομή decoder και ένα επίπεδο adaptive instance.
6.2 Αρχιτεκτονική της μεϑόδου
Η αρχιτεκτονική χωρίζεται σε 3 μέρη. Τον κωδικοποιητή (encoder), το
επίπεδο adaptive instance και τον αποκωδικοποιητή (decoder).
6.2.1 Encoder
Σχήμα 6.1: H δομή του κωδικοποιητή (encoder) στην αρχιτεκτονική των
Huang και Belongie.
Ο κωδικοποιητής (encoder) αποτελείται από το VGG19 μέχρι το επίπεδο
relu4_1. Το χρησιμοποιούμε έτσι ώστε να κωδικοποιήσουμε το content και
style. Το content κωδικοποιείται από το επίπεδο relu4_1 και το style από
τα επίπεδα relu1_1, relu2_1, relu3_1 και relu4_1 με όλα τα επίπεδα να
έχουν ίσα βάρη. Ο συγκεκριμένος κωδικοποιητής (encoder) χρησιμοποιείται
42
pre-trained και δεν συμμετέχει στη αλλαγή των βαρών του κατά τη διάρκεια
της εκπαίδευσης.
Σχήμα 6.2: Η αρχιτεκτονική κωδικοποιητή (encoder).
6.2.2 Adaptive Instance Normalization
Το Adaptive Instance Normalization είναι μια ειδική περίπτωση του In-
stance Normalization που προτάθηκε από τους Huang και Belangie. Σκοπός
αυτού του είδους η ικανοποίηση είναι να μπορεί να προσαρμοστεί σε
οποιοδήποτε στυλ κατά τη διάρκεια της εκπαίδευσης και του inference. Μα-
ϑηματικά περιγράφεται από την ακόλουϑη εξίσωση:
AdaIN(x,y) = σ(y)
x − µ(x)
σ(x)
!
+ µ(y) (6.1)
όπου x είναι το κωδικοποιημένο content, y είναι το κωδικοποιημένο style,
σ(y) η τυπική απόκλιση του κωδικοποιημένου style, σ(x) η τυπική απόκλιση
του κωδικοποιημένου content, µ(y) o μέσος όρος του κωδικοποιημένου style,
µ(x) o μέσος όρος του κωδικοποιημένου content. Με άλλα λόγια προσπα-
ϑεί να μετατοπίσει τη τυπική απόκλιση και το μέσο όρο του κωδικοποιη-
μένου content στις τιμές της τυπικής απόκλισης και του μέσου όρου του
κωδικοποιημένου style. Σε αντίθεση με όλες τις άλλες κανονικοποιήσεις που
εμφανίστηκαν μέχρι τώρα, η συγκεκριμένη δεν έχει καμία παράμετρο που να
χρειάζεται εκπαίδευση.
43
6.2.3 Ο Αποκωδικοποιητής (Decoder)
Ο αποκωδικοποιητής (decoder) είναι ένας αντικατοπτρισμός του κωδικοποι-
ητή (encoder) με τη διαφορά ότι τα επίπεδα MaxPooling έχουν αντικατασ-
ταθεί από Upsampling για να μειωθεί το εφέ της σκακιέρας στη παραγόμενη
εικόνα. Επίσης, μετά το τελευταίο επίπεδο 2D Convolution δεν ακολουθεί
ReLU. O αποκωδικοποιητής (decoder) είναι το μόνο μέρος της αρχιτεκτονικής
που εκπαιδεύεται. Ο σκοπός του είναι να μπορεί να αποκωδικοποιήσει τα δε-
δομένα από το feature space στο image space και να μάθει να το κάνει αυτό
σύμφωνα με το δεδομένο style και content.
Σχήμα 6.3: Η αρχιτεκτονική του αποκωδικοποιητή (decoder).
6.3 H Εκπαιδευτική διαδικασία
Σχήμα 6.4: Η αρχιτεκτονική της εκπαίδευσης.
Αρχικά, περνάμε το style και το content από τον Encoder. Τα χαρακ-
44
τηριστικά που παράγονται από τον κωδικοποιητή τροφοδοτούνται στο Adap-
tive Instance Normalization και η έξοδος του καταλήγει στον αποκωδικοποι-
ητή. Η παραγόμενη εικόνα περνάει ξανά από τον κωδικοποιητή και χρησι-
μοποιούμε τα χαρακτηριστικά αυτά, έτσι ώστε να μετρήσουμε την απώλεια
που έχει στο style και στο content. Για το style loss χρησιμοποιούμε τα
χαρακτηριστικά των επιπέδων relu1_1, relu2_1, relu3_1 και relu4_1 του
style και της παραγόμενης εικόνας. Για το content loss χρησιμοποιούμε
τα χαρακτηριστικά του επιπέδου relu4_1 από τη παραγόμενη εικόνα και
το αποτέλεσμα content/style (t) από το Adaptive Instance Normaliza-
tion. Εφόσον έχουμε υπολογίσει τα κόστη μπορούμε με τη μέϑοδο του back-
propagation να ανανεώσουμε τα βάρη του αποκωδικοποιητή. Στο τέλος της
εκπαίδευσης έχουμε έναν αποκωδικοποιητή, που μπορεί να αποκωδικοποίη-
σει σωστά από το feature space στο image space, με τη παραγόμενη εικόνα
να έχει το στυλ του style image και το περιεχόμενο του content image. Ο
αποκωδικοποιητής εκπαιδεύεται στα Dataset MS COCO και Wikiart.
6.3.1 Επίπεδο 2D Upsampling
Το επίπεδο Upsampling χρησιμοποιείται ώστε να αυξήσουμε τις διαστάσεις
τις δισδιάστατης πληροφορίας.
Παράδειγμα σε TensorFlow
x = t f . random . uniform ( shape =(1 , 2 ,2 , 3 ) )
print ( x )
´Εξοδος
t f . Tensor (
[[[[0.3989674 0.713215 0.62062943]
[0.33789444 0.02036715 0.9366275 ] ]
[[0.21986496 0.41404057 0.04343021]
[0.13876796 0.14224517 0.68413365]]]] , shape =(1 , 2 , 2 , 3)
y = t f . keras . layers . UpSampling2D ( size =(1 , 2 ) ) ( x )
print ( y )
´Εξοδος
t f . Tensor (
[[[[0.3989674 0.713215 0.62062943]
[0.3989674 0.713215 0.62062943]
[0.33789444 0.02036715 0.9366275 ]
[0.33789444 0.02036715 0.9366275 ] ]
[[0.21986496 0.41404057 0.04343021]
[0.21986496 0.41404057 0.04343021]
45
[0.13876796 0.14224517 0.68413365]
[0.13876796 0.14224517 0.68413365]]]]
´Οπως βλέπουμε αυξάνονται οι διαστάσεις σύμφωνα με rows × size[0] και
columns × size[1].
6.4 Συναρτήσεις Κόστους
6.4.1 Απώλεια του Content
H απώλεια του content εκφράζεται από την ευκλείδεια απόσταση μεταξύ
των χαρακτηριστικών του content και των χαρακτηριστικών της παραγόμενης
εικόνας, σύμφωνα με τη relu4_1 του κωδικοποιητή.
Lc = ||f (g(t)) − t||2 (6.2)
όπου t είναι το κωδικοποιημένο content/style μετά την επεξεργασία του
Adaptive Instance Normalization, g(t) η αποκωδικοποιημένη πληροφορία
του t και f (g(t)) η κωδικοποιημένη πληροφορία του g(t).
6.4.2 Απώλεια του Style
H απώλεια του style περιγράφεται από
Ls =
L
X
i=1
||µ(ϕi(g(t))) − µ(ϕi(s))||2 +
L
X
i=1
||σ(ϕi(g(t))) − σ(ϕi(s))||2 (6.3)
´Οπου s είναι τα χαρακτηριστικά του style, t είναι το κωδικοποιημένο con-
tent/style μετά την επεξεργασία του Adaptive Instance Normalization, g(t)
η αποκωδικοποιημένη πληροφορία του t, ϕi το επίπεδο που χρησιμοποιεί-
ται από το VGG19, σ η τυπική απόκλιση και µ ο μέσος όρος. Ουσιαστικά,
βρίσκουμε την ευκλείδεια απόσταση μεταξύ των μέσων όρων και των τυπικών
αποκλίσεων.
46
6.5 Αποτελέσματα σε εικόνες
Αποτελέσματα πλήρως εκπαιδευμένου αποκωδικοποιητή. ´Ενας αποκ-
ωδικοποιητής παράγει όλα τα παρακάτω αποτελέσματα.
Σχήμα 6.5: Αποτελέσματα σε εικόνες
6.6 Υλοποίηση
Υπάρχουν κάποια βασικά σημεία που πρέπει να προσέξουμε κατά την
υλοποίηση αυτής της μεθόδου.
• Για το VGG19 δεν χρησιμοποιούμε το pre-trained μοντέλο που μας δίνει
η TensorFlow. Εδώ χρειάζεται να χρησιμοποιήσουμε μια διαφορετική
έκδοση του, το VGG19-normalized, όπου τα βάρη του είναι κανον-
ικοποιημένα. Συγκεκριμένα, από το repo αυτό μπορούμε να κατεβά-
σουμε τα βάρη σε numpy array. Από εκεί και πέρα χρησιμοποιούμε τις
συναρτήσεις που προτείνει έτσι ώστε να φορτωϑούν σωστά τα βάρη, κα-
ϑώς και για να δημιουργηϑούν σωστά οι δομές των μοντέλων κωδικοποι-
ητών και αποκωδικοποιητών.
• Ο αποκωδικοποιητής εκπαιδεύεται στα MSCOCO και Wikiart dataset.
Σε κάϑε πέρασμα διαλέγουμε μια εικόνα ως content από το MSCOCO
και μια εικόνα για ως style από το Wikiart. Αυτό μπορεί να γίνει και σε
batches. Στη συγκεκριμένη υλοποίηση χρησιμοποιείται batch size 8.
• Για την εκπαίδευση χρησιμοποιείται σταδιακή μείωση του ρυθμού εκ-
μάθησης, έτσι ώστε να αποφευχϑούν κορεσμός ("κάψιμο") στα pixel της
47
παραγόμενης εικόνας. Συγκεκριμένα, χρησιμοποιήθηκαν οι παράμετροι
από τον πίνακα 6.1. Τα αποτελέσματα του σχήματος 6.6 έγιναν σε ένα
μικρό τεστ με παραμέτρους από τον πίνακα 6.2.
Σχήμα 6.6: Αποτελέσματα με και χωρίς σταδιακή μείωση του ρυθμού εκ-
μάθησης.
• O αλγόριϑμος ακολουϑεί το παρακάτω Διάγραμμα Ροής. Προφανώς,
ανάλογα την υλοποίηση που ϑα ακολουϑηϑεί μπορεί να τροποποιηϑεί.
LEARNING RATE 1e − 4
LR DECAY RATE 5e − 5
DECAY STEPS 1.0
Πίνακας 6.1: Παράμετροι σταδιακής μείωσης ρυϑμού εκμάϑησης.
48
Content Layers relu4_1
Style Layers relu1_1,relu2_1,relu3_1,relu4_1
Style Weight 2
Number of images for training 26 sets of content/style
Epochs 4
Πίνακας 6.2: Παράμετροι τεστ.
6.7 Χαρακτηριστικά και Απόδοση
H απόδοση της μεθόδου μετρήϑηκε στον υπολογιστή από το Εργαστήριο
Ηλεκτρικών Κυκλωμάτων, Επεξεργασίας Σημάτων και Εικόνων με GPU TI-
TAN Xp και στη CPU ενός laptop Intel-Core i7-4510u CPU @ 2.00GHz και
είναι ο μέσος όρος 100 εικόνων. ´Εχουμε διαλέξει μια αρκετά δυνατή GPU και
μια απλή CPU, έτσι ώστε να δούμε την απόδοση σε διαφορετικά συστήματα.
´Ονομα Δικτύου AdaIn
Μέγεϑος 28M
Απόδοση GPU 0.02026 seconds
Απόδοση CPU 1.24720 seconds
Πίνακας 6.3: Χαρακτηριστικά και Απόδοση
Οι χρόνοι αυτοί είναι για όλη την αρχιτεκτονική από τον κωδικοποιητή
μέχρι και τον αποκωδικοποιητή. Το μέγεϑος είναι μόνο για τον κωδικοποιητή
και τον αποκωδικοποιητή.
49
Σχήμα 6.7: Αποτέλεσματα μεταξύ Johnson et al, Gupta et al και Huang/Be-
longie
Τα αποτελέσματα στο 6.7 παράχϑηκαν με το δίκτυο όπου παράχϑηκαν
και τα 6.5. Φαίνεται ότι το στυλ Wassily Kandinsky, Composition VII με το
συγκεκριμένο βίντεο παράγει άσχημα αποτελέσματα. Το φόντο (backround)
του βίντεο επειδή είναι "κενό" φαίνεται ότι δυσκολεύει πολύ το δίκτυο να
κωδικοποιήση τη πληροφορία του περιεχομένου με αποτέλεσμα να μην μπορεί
να εφαρμοστεί σωστά το στιλ.
50
Κεφάλαιο 7
Ανάπτυξη Εφαρμογής σε
περιβάλλον Android
Με το δίκτυο που δημιουργήσαμε στο Κεφάλαιο 4, που βασίζεται στη μέϑοδο
του Johnson et al, δοκιμάσαμε να το εφαρμόσουμε για μια Style Transfer
εφαρμογή για κινητά στη πλατφόρμα Android.
7.1 Χαρακτηριστικά της Εφαρμογής
Το σενάριο που ϑέλουμε να υποστηρίζει η εφαρμογή που ϑα αναπτύξουμε
είναι το ακόλουϑο. Θέλουμε με την εφαρμογή να μπορούμε να τραβάμε ένα
βίντεο, ύστερα να κάνουμε κάνουμε μεταφορά στυλ σε κάϑε frame και τέλος
να γίνεται η σύνϑεση των frames σε ένα νέο stylized βίντεο.
7.2 Υλοποίηση Εφαρμογής
Για τη δημιουργία της εφαρμογής χρησιμοποιήσαμε για αρχή την έτοιμη εφαρ-
μογή Style Transfer, που δίνει η TensorFlow, έτσι ώστε να έχουμε κάποια
βασικά δομικά στοιχεία της εφαρμογής, όπως διάφορα πακέτα, που έχουν
σχέση με τα νευρωνικά δίκτυα, βασικές συναρτήσεις για την επεξεργασία
εικόνας και όποιο άλλο βασικό χαρακτηριστικό χρειαστεί.
7.2.1 Μετατροπή δικτύου σε TensorFlow Lite
Το TensorFlow Lite είναι ένα σετ από εργαλεία, που βοηθάνε στο να δώ-
σουν τη δυνατότητα σε ένα δίκτυο να τρέχει εύρωστα και με ικανοποιητική
ταχύτητα σε συστήματα χαμηλότερων δυνατοτήτων, όπως Android, iOS,
ενσωματωμένα συστήματα Linux και μικροελεγκτές. Με αυτό το τρόπο, γίνε-
ται δυνατό να τρέξει ένα νευρωνικό δίκτυο σε κάποιο από αυτά τα συστή-
ματα πλέον με πολύ μεγαλύτερη ταχύτητα, έχει μικρή κατανάλωση ισχύος,
δεν χρειάζεται σύνδεση στο διαδίκτυο, εφόσον τα δεδομένα παραμένουν στη
51
συσκευή. ´Ολη η διεργασία γίνεται από την ίδια τη συσκευή. Το μέγεθος που
καταλαμβάνει το δίκτυο είναι πολύ πιο μικρό, οπότε μπορεί και να εγκατασ-
ταθεί σε οποιοδήποτε πλατφόρμα.
Πρέπει να δοθεί ιδιαίτερη προσοχή στη δομή του δικτύου, διότι προς το
παρόν το framework του TensorFlow Lite δεν μπορεί να μετατρέψει όλες
τις πράξεις από TensorFlow σε TensorFlow Lite. Υπάρχει αυτός ο οδηγός,
που δείχνει ποιες πράξεις υποστηρίζονται. Ο τρόπος με τον οποίο αναπ-
τύχθηκε το μοντέλο για τη μέϑοδο του Johnson et al είναι ιδανικός για τη μετα-
τροπή. Συγκεκριμένα, ϑα φτιάξουμε 2 μοντέλα. ´Ενα μοντέλο που ϑα παράγει
αποτελέσματα με ακρίβεια f loat16 και ένα μοντέλο που ϑα κάνει παράγει
αποτελέσματα με ακρίβεια int8. Αυτή η μέϑοδος ονομάζεται post-training
quantization, διότι κβαντίζει την ακρίβεια των βαρών, αφού έχει εκπαιδευτεί
το δίκτυο.
Μοντέλο Float16
inputs = t f . keras . Input ( shape =[256 , 256 , 3] , batch_size= None)
# Johnson Model
outputs = training_model ( inputs )
savedModel = t f . keras . Model ( inputs , outputs )
converter = t f . l i t e . TFLiteConverter . from_keras_model ( savedModel )
converter . optimizations = [ t f . l i t e . Optimize .DEFAULT]
converter . target_spec . supported_types = [ t f . float16 ]
tflite_quant_model = converter . convert ( )
Αν συγκρίνουμε το tflite μοντέλο χωρίς float16 quantization με το float16
quantized μοντέλο μπορούμε να δούμε ότι καταλαμβάνει σχεδόν τη μισή
χωρητικότητα.
−rw−r−−r−− 1 root root 3.3M Sep 13 09:31 model_float16_quant . t f l i t e
−rw−r−−r−− 1 root root 6.5M Sep 13 09:31 model . t f l i t e
Το f loat16 tflite μοντέλο μπορεί να τρέξει σε GPU και CPU. Ανάλογα το
hardware που ϑα το τρέξει μπορεί να υπάρχει αύξηση της ταχύτητας παραγ-
ωγής τελικού αποτελέσματος, διότι κάποιες GPU μπορούν να κάνουν πράξεις
με f loat16. Στην περίπτωση που το hardware δεν είναι ικανό να τρέξει το
μοντέλο σε f loat16, το μοντέλο κάνει upsample τα βάρη σε f loat32 πριν αρ-
χίσει να παράγει αποτελέσματα.
Μοντέλο Int8
Για να δημιουργήσουμε αυτό το μοντέλο χρειαζόμαστε ένα αντιπροσωπευτικό
dataset των εισόδων που ϑα έχει το δίκτυο, έτσι ώστε να μετρήσει το συνολικό
δυναμικό εύρος τιμών για να μπορέσει να βαϑμονομήσει και να κβαντίσει τα
βάρη του δικτύου.
52
 Style Transfer in Images and Videos
 Style Transfer in Images and Videos
 Style Transfer in Images and Videos
 Style Transfer in Images and Videos
 Style Transfer in Images and Videos
 Style Transfer in Images and Videos
 Style Transfer in Images and Videos

More Related Content

Similar to Style Transfer in Images and Videos

οδηγός εκμάθησης Scetchpad
οδηγός εκμάθησης Scetchpadοδηγός εκμάθησης Scetchpad
οδηγός εκμάθησης Scetchpadviviq36
 
οδηγός εκμάθησης Scetchpad
οδηγός εκμάθησης Scetchpadοδηγός εκμάθησης Scetchpad
οδηγός εκμάθησης Scetchpadbsig
 
Yliko kse geniko_meros_c_201304 (1)
Yliko kse geniko_meros_c_201304 (1)Yliko kse geniko_meros_c_201304 (1)
Yliko kse geniko_meros_c_201304 (1)Xyla Eleni
 
Yliko kse geniko_meros_c_201304 (1)
Yliko kse geniko_meros_c_201304 (1)Yliko kse geniko_meros_c_201304 (1)
Yliko kse geniko_meros_c_201304 (1)Xyla Eleni
 
Eπιμορφωτικό Yλικό του Γενικού Μέρους της επιμόρφωσης β΄επιπέδου ΠΕ19/20
Eπιμορφωτικό Yλικό του Γενικού Μέρους της επιμόρφωσης β΄επιπέδου ΠΕ19/20Eπιμορφωτικό Yλικό του Γενικού Μέρους της επιμόρφωσης β΄επιπέδου ΠΕ19/20
Eπιμορφωτικό Yλικό του Γενικού Μέρους της επιμόρφωσης β΄επιπέδου ΠΕ19/20Vasilis Drimtzias
 
εισαγωγή στην La tex για φοιτητές (latex greek-book-manual-math)
εισαγωγή στην La tex για φοιτητές (latex greek-book-manual-math)εισαγωγή στην La tex για φοιτητές (latex greek-book-manual-math)
εισαγωγή στην La tex για φοιτητές (latex greek-book-manual-math)Christos Loizos
 
άλγεβρα β΄ λυκείου γιώργος αποστόλου
άλγεβρα β΄ λυκείου γιώργος αποστόλουάλγεβρα β΄ λυκείου γιώργος αποστόλου
άλγεβρα β΄ λυκείου γιώργος αποστόλουChristos Loizos
 
21-0058-02_Grammatiki-Neas-Ellinikis-Glossas_A-B-G-Gymnasiou.pdf
21-0058-02_Grammatiki-Neas-Ellinikis-Glossas_A-B-G-Gymnasiou.pdf21-0058-02_Grammatiki-Neas-Ellinikis-Glossas_A-B-G-Gymnasiou.pdf
21-0058-02_Grammatiki-Neas-Ellinikis-Glossas_A-B-G-Gymnasiou.pdfArtemhsia
 
σχεδιασμός μαθήματος σταυρούλα κουρή
σχεδιασμός μαθήματος σταυρούλα κουρήσχεδιασμός μαθήματος σταυρούλα κουρή
σχεδιασμός μαθήματος σταυρούλα κουρήstavroulakour
 
Fortran notes panepistimio_kritis
Fortran notes panepistimio_kritisFortran notes panepistimio_kritis
Fortran notes panepistimio_kritisFanis Vlazakis
 
Bézout matrices and their applications 31th October 2016 (master Thesis in gr...
Bézout matrices and their applications 31th October 2016 (master Thesis in gr...Bézout matrices and their applications 31th October 2016 (master Thesis in gr...
Bézout matrices and their applications 31th October 2016 (master Thesis in gr...Pantelis Gryparis
 
3D Printing in Robotics
3D Printing in Robotics3D Printing in Robotics
3D Printing in RoboticsFotios Dimeas
 
επαναληπτικά τεστάκια στη Γλώσσα της Ε' τάξης
επαναληπτικά τεστάκια στη Γλώσσα της Ε' τάξηςεπαναληπτικά τεστάκια στη Γλώσσα της Ε' τάξης
επαναληπτικά τεστάκια στη Γλώσσα της Ε' τάξηςelen25
 
Πτυχιακή Εργασια_e_V
Πτυχιακή Εργασια_e_VΠτυχιακή Εργασια_e_V
Πτυχιακή Εργασια_e_VPanos Tsilivis
 
φύλλο εργασίας
φύλλο εργασίαςφύλλο εργασίας
φύλλο εργασίαςpliakas
 
Πειραματική διερεύνηση της διηλεκτρικής συμπεριφοράς διακένων ατμοσφαιρικού α...
Πειραματική διερεύνηση της διηλεκτρικής συμπεριφοράς διακένων ατμοσφαιρικού α...Πειραματική διερεύνηση της διηλεκτρικής συμπεριφοράς διακένων ατμοσφαιρικού α...
Πειραματική διερεύνηση της διηλεκτρικής συμπεριφοράς διακένων ατμοσφαιρικού α...Athanasios Karafyllas
 
gymnasioum book for b class
gymnasioum book for b classgymnasioum book for b class
gymnasioum book for b classChristos Loizos
 
Φυλλο εργασιας
Φυλλο εργασιαςΦυλλο εργασιας
Φυλλο εργασιαςkatetrinasal
 
σχολικές σημειώσεις άλγεβρας α΄λυκείου
σχολικές σημειώσεις άλγεβρας α΄λυκείουσχολικές σημειώσεις άλγεβρας α΄λυκείου
σχολικές σημειώσεις άλγεβρας α΄λυκείουkeratea1
 

Similar to Style Transfer in Images and Videos (20)

οδηγός εκμάθησης Scetchpad
οδηγός εκμάθησης Scetchpadοδηγός εκμάθησης Scetchpad
οδηγός εκμάθησης Scetchpad
 
οδηγός εκμάθησης Scetchpad
οδηγός εκμάθησης Scetchpadοδηγός εκμάθησης Scetchpad
οδηγός εκμάθησης Scetchpad
 
Yliko kse geniko_meros_c_201304 (1)
Yliko kse geniko_meros_c_201304 (1)Yliko kse geniko_meros_c_201304 (1)
Yliko kse geniko_meros_c_201304 (1)
 
Yliko kse geniko_meros_c_201304 (1)
Yliko kse geniko_meros_c_201304 (1)Yliko kse geniko_meros_c_201304 (1)
Yliko kse geniko_meros_c_201304 (1)
 
Υλικό ΚΣΕ - Γενικό Μέρος
Υλικό ΚΣΕ - Γενικό ΜέροςΥλικό ΚΣΕ - Γενικό Μέρος
Υλικό ΚΣΕ - Γενικό Μέρος
 
Eπιμορφωτικό Yλικό του Γενικού Μέρους της επιμόρφωσης β΄επιπέδου ΠΕ19/20
Eπιμορφωτικό Yλικό του Γενικού Μέρους της επιμόρφωσης β΄επιπέδου ΠΕ19/20Eπιμορφωτικό Yλικό του Γενικού Μέρους της επιμόρφωσης β΄επιπέδου ΠΕ19/20
Eπιμορφωτικό Yλικό του Γενικού Μέρους της επιμόρφωσης β΄επιπέδου ΠΕ19/20
 
εισαγωγή στην La tex για φοιτητές (latex greek-book-manual-math)
εισαγωγή στην La tex για φοιτητές (latex greek-book-manual-math)εισαγωγή στην La tex για φοιτητές (latex greek-book-manual-math)
εισαγωγή στην La tex για φοιτητές (latex greek-book-manual-math)
 
άλγεβρα β΄ λυκείου γιώργος αποστόλου
άλγεβρα β΄ λυκείου γιώργος αποστόλουάλγεβρα β΄ λυκείου γιώργος αποστόλου
άλγεβρα β΄ λυκείου γιώργος αποστόλου
 
21-0058-02_Grammatiki-Neas-Ellinikis-Glossas_A-B-G-Gymnasiou.pdf
21-0058-02_Grammatiki-Neas-Ellinikis-Glossas_A-B-G-Gymnasiou.pdf21-0058-02_Grammatiki-Neas-Ellinikis-Glossas_A-B-G-Gymnasiou.pdf
21-0058-02_Grammatiki-Neas-Ellinikis-Glossas_A-B-G-Gymnasiou.pdf
 
σχεδιασμός μαθήματος σταυρούλα κουρή
σχεδιασμός μαθήματος σταυρούλα κουρήσχεδιασμός μαθήματος σταυρούλα κουρή
σχεδιασμός μαθήματος σταυρούλα κουρή
 
Fortran notes panepistimio_kritis
Fortran notes panepistimio_kritisFortran notes panepistimio_kritis
Fortran notes panepistimio_kritis
 
Bézout matrices and their applications 31th October 2016 (master Thesis in gr...
Bézout matrices and their applications 31th October 2016 (master Thesis in gr...Bézout matrices and their applications 31th October 2016 (master Thesis in gr...
Bézout matrices and their applications 31th October 2016 (master Thesis in gr...
 
3D Printing in Robotics
3D Printing in Robotics3D Printing in Robotics
3D Printing in Robotics
 
επαναληπτικά τεστάκια στη Γλώσσα της Ε' τάξης
επαναληπτικά τεστάκια στη Γλώσσα της Ε' τάξηςεπαναληπτικά τεστάκια στη Γλώσσα της Ε' τάξης
επαναληπτικά τεστάκια στη Γλώσσα της Ε' τάξης
 
Πτυχιακή Εργασια_e_V
Πτυχιακή Εργασια_e_VΠτυχιακή Εργασια_e_V
Πτυχιακή Εργασια_e_V
 
φύλλο εργασίας
φύλλο εργασίαςφύλλο εργασίας
φύλλο εργασίας
 
Πειραματική διερεύνηση της διηλεκτρικής συμπεριφοράς διακένων ατμοσφαιρικού α...
Πειραματική διερεύνηση της διηλεκτρικής συμπεριφοράς διακένων ατμοσφαιρικού α...Πειραματική διερεύνηση της διηλεκτρικής συμπεριφοράς διακένων ατμοσφαιρικού α...
Πειραματική διερεύνηση της διηλεκτρικής συμπεριφοράς διακένων ατμοσφαιρικού α...
 
gymnasioum book for b class
gymnasioum book for b classgymnasioum book for b class
gymnasioum book for b class
 
Φυλλο εργασιας
Φυλλο εργασιαςΦυλλο εργασιας
Φυλλο εργασιας
 
σχολικές σημειώσεις άλγεβρας α΄λυκείου
σχολικές σημειώσεις άλγεβρας α΄λυκείουσχολικές σημειώσεις άλγεβρας α΄λυκείου
σχολικές σημειώσεις άλγεβρας α΄λυκείου
 

Style Transfer in Images and Videos

  • 1. ΔΗΜΟΚΡΙΤΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΡΑΚΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΜΕΤΑΦΟΡΑ ΣΤΥΛ (STYLE TRANSFER) ΣΕ ΕΙΚΟΝΕΣ ΚΑΙ ΕΙΚΟΝΟΣΕΙΡΕΣ Λίτσος Μιχαήλ Επιβλέπων: Νικόλαος Μητιανούδης Αναπλ. Καϑηγητής ΔΠΘ 2022, Ξάνϑη
  • 2. Περιεχόμενα 1 Εισαγωγή 1 2 Νευρωνικά Δίκτυα και Βαϑιά Μάϑηση 3 2.1 Τύποι Επίπεδων Νευρωνικών Δικτύων . . . . . . . . . . . . . . 4 2.1.1 2D Convolution . . . . . . . . . . . . . . . . . . . . . . 4 2.1.2 Διαδικασία Zero Padding . . . . . . . . . . . . . . . . . 5 2.1.3 Επίπεδο Pooling . . . . . . . . . . . . . . . . . . . . . . 6 2.1.4 Η συνάρτηση ενεργοποίησης ReLU . . . . . . . . . . . . 8 2.1.5 Sigmoid . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.1.6 Tanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.7 Η τεχνική Batch Normalization . . . . . . . . . . . . . 9 2.1.8 Η τεχνική Instance Normalization . . . . . . . . . . . . 10 3 H Μέϑοδος Μεταφοράς Στυλ του Gatys et al 12 3.1 Περιγραφή της μεϑόδου . . . . . . . . . . . . . . . . . . . . . . 12 3.1.1 VGG19 . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.1.2 Ονοματολογία επιπέδων και block . . . . . . . . . . . . 14 3.1.3 Θεωρητική ανάλυση μεϑόδου . . . . . . . . . . . . . . . 14 3.2 Αναπαράσταση Στυλ και Περιεχομένου . . . . . . . . . . . . . . 14 3.2.1 Αναπαράσταση Περιεχομένου . . . . . . . . . . . . . . . 15 3.2.2 Αναπαράσταση Στυλ . . . . . . . . . . . . . . . . . . . 16 3.2.3 Συνολική Συνάρτηση Απώλειας (loss function) . . . . . 16 3.3 Πειράματα και Αποτελέσματα . . . . . . . . . . . . . . . . . . . 17 3.3.1 Εξάρτηση αποτελεσμάτων από τις παραμέτρους α, β . . 18 3.3.2 Εξάρτηση αποτελεσμάτων από το πλήϑος των μπλοκ συνέλιξης . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.4 Προγραμματιστικές σημειώσεις για την υλοποίηση της μεϑοδου σε TensorFlow 2.x και Απόδοση . . . . . . . . . . . . . . . . . 22 3.4.1 Σημειώσεις . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.5 Χαρακτηριστικά και Απόδοση . . . . . . . . . . . . . . . . . . . 25 4 Μέϑοδος Johnson et al 26 4.1 Περιγραφή Μεϑόδου . . . . . . . . . . . . . . . . . . . . . . . . 26 i
  • 3. 4.2 Αρχιτεκτονική Image Transform Network . . . . . . . . . . . . 28 4.2.1 Residual blocks . . . . . . . . . . . . . . . . . . . . . . 28 4.2.2 Transpose 2D Convolution . . . . . . . . . . . . . . . . 28 4.3 Εφαρμογή της μεϑόδου . . . . . . . . . . . . . . . . . . . . . . . 29 4.3.1 Αποτελέσματα σε εικόνες . . . . . . . . . . . . . . . . . 30 4.3.2 Αποτελέσματα σε βίντεο . . . . . . . . . . . . . . . . . 31 4.4 Υλοποίηση . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.4.1 Σημειώσεις . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.5 Χαρακτηριστικά και Απόδοση . . . . . . . . . . . . . . . . . . . 34 5 H Μέϑοδος Gupta et al 36 5.1 Εισαγωγή . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.2 Αρχιτεκτονική . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.2.1 Χρονική Απώλεια . . . . . . . . . . . . . . . . . . . . . 36 5.2.2 Διαδικασίες Μεταφοράς (Wrapping) και Κάλυψης (Occlusion) . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.2.3 Εκπαίδευση . . . . . . . . . . . . . . . . . . . . . . . . 38 5.3 Αποτελέσματα σε βίντεο . . . . . . . . . . . . . . . . . . . . . . 40 6 H Μέϑοδος των Huang και Belongie 42 6.1 Εισαγωγή . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6.2 Αρχιτεκτονική της μεϑόδου . . . . . . . . . . . . . . . . . . . . 42 6.2.1 Encoder . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6.2.2 Adaptive Instance Normalization . . . . . . . . . . . . 43 6.2.3 Ο Αποκωδικοποιητής (Decoder) . . . . . . . . . . . . . 44 6.3 H Εκπαιδευτική διαδικασία . . . . . . . . . . . . . . . . . . . . 44 6.3.1 Επίπεδο 2D Upsampling . . . . . . . . . . . . . . . . . 45 6.4 Συναρτήσεις Κόστους . . . . . . . . . . . . . . . . . . . . . . . 46 6.4.1 Απώλεια του Content . . . . . . . . . . . . . . . . . . . 46 6.4.2 Απώλεια του Style . . . . . . . . . . . . . . . . . . . . . 46 6.5 Αποτελέσματα σε εικόνες . . . . . . . . . . . . . . . . . . . . . 47 6.6 Υλοποίηση . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.7 Χαρακτηριστικά και Απόδοση . . . . . . . . . . . . . . . . . . . 49 7 Ανάπτυξη Εφαρμογής σε περιβάλλον Android 51 7.1 Χαρακτηριστικά της Εφαρμογής . . . . . . . . . . . . . . . . . 51 7.2 Υλοποίηση Εφαρμογής . . . . . . . . . . . . . . . . . . . . . . . 51 7.2.1 Μετατροπή δικτύου σε TensorFlow Lite . . . . . . . . . 51 8 Σύγκριση των μεϑόδων 54 9 Συμπεράσματα - Μελλοντική δουλειά 56 ii
  • 4. Κεφάλαιο 1 Εισαγωγή Η μεταφορά του στυλ μιας εικόνα σε μια άλλη εικόνα ή σε εικονοσειρές μέσω νευρωνικών δικτύων (Νeural Style Transfer) , προσέλκυσε το ενδιαφέρον της επιστημονικής κοινότητας, ύστερα από το άρθρο του Gatys et al [4]. Η εφαρμογή είναι να μπορέσει ένας χρήστης να επιβάλλει το καλλιτεχνικό στυλ μιας εικόνας σε μια άλλη εικόνα που δεν έχει σχέση αναγκαστικά με την αρ- χική. Για παράδειγμα, φανταστείτε ότι έχει μια εικόνα που απεικονίζει τη ϑέα από το μπαλκόνι σας. Πως ϑα σας φαινόταν αν αυτή η εικόνα πάρει το χρωματικό και ζωγραφικό στυλ ενός πίνακα του Van Gogh, για παράδειγμα την "´Εναστρη νύχτα (Starry Night)", αλλά φυσικά πάλι να απεικονίζει ουσι- αστικά τα αρχικά αντικείμενα. Η πρωτοποριακή αυτή διαδικασία ονομάστηκε μεταφορά στυλ (style transfer) και απασχόλησε εκτεταμένα την ερευνητική κοινότητα της επεξεργασίας εικόνας και βαθιάς μάϑησης τα τελευταία χρόνια. H μεταφορά του στυλ από μια εικόνα σε άλλη εικόνα ϑεωρείται πρόβλημα μεταφοράς υφής. Στη μεταφορά υφής ο στόχος είναι η σύνθεση μιας υφής από μια αρχική εικόνα περιορίζοντας τη σύνθεση της υφής προκειμένου να διατηρηϑεί το σημασιολογικό περιεχόμενο της εικόνας στόχου. Για τη σύνθεση υφής υπάρχει μια μεγάλη γκάμα ισχυρών μη-παραμετρικών αλγορίθμων, που μπορούν να συνθέσουν φωτορεαλιστικές φυσικές υφές με επαναπροσδιορισμό των εικονοστοιχείων μιας δεδομένης υφής από μια αρχική πηγαία εικόνα. Ο Gatys et al παρουσιάζει μια πρωτοποριακή χρήση των νευρωνικών δικ- τύων με σκοπό τη μεταφορά του στυλ από μια εικόνα σε μία άλλη εικόνα. Χρησιμοποιεί την έξοδο από συγκεκριμένα επίπεδα του συνελικτικού δικ- τύου VGG-19 [9], έτσι ώστε να λάβει την πληροφορία σχετικά με το στυλ της εικόνας που ϑέλουμε να αντιγράψουμε και του περιεχομένου της εικόνας που ϑέλουμε να εφαρμόσουμε αυτό το στυλ. Η μέϑοδος αυτή χαρακτηρίζεται από κυρίως ωραίες στιλιστικά εικόνες αλλά είναι πολύ αργή, διότι χρειάζονται πολλές επαναλήψεις. Ο Johnson et al[8] πρότεινε μια νέα μέϑοδο μεταφοράς στυλ από εικόνα σε εικόνα με στόχο να μπορεί να χρησιμοποιηθεί σε real-time εφαρμογές. Πρότεινε ένα νέο νευρωνικό δίκτυο, όπου εκπαιδεύεται στο να εφαρμόζει το 1
  • 5. στυλ της εικόνας που ϑέλουμε σύμφωνα με τις συναρτήσεις απώλειας που είχε χρησιμοποιήσει και ο Gatys et al. Με αυτό το τρόπο, η παραγωγή της εικόνας με το επιθυμητό στυλ γίνεται μέσα σε μερικά δευτερόλεπτα, διότι η εικόνα χρειάζεται μόνο ένα πέρασμα (inference) από το νευρωνικό δίκτυο. Λόγω της ταχύτητας της μεθόδου του Johnson et al αυτή η μέϑοδος άρχισε να εφαρμόζεται και σε βίντεο. Το κύριο πρόβλημα που εξακολουθεί να υφίσ- ταται είναι ότι δεν υπάρχει τοπική συνοχή του στυλ μεταξύ των καρέ της εικονοσειράς. Για να λυθεί το πρόβλημα αυτό, ο Gupta et al [5] πρότεινε μια μέϑοδο fine-tuning του νευρωνικού δικτύου του Johnson et al έτσι ώστε να μπορεί να υπάρχει τοπική συνοχή του στυλ μεταξύ των καρέ. Το πλεονέκτημα της μεθόδου είναι ότι δεν χρειάζεται να επεξεργαστεί ή να επανεκπαιδευτεί από την αρχή το δίκτυο. ´Ετσι, ο χρόνος εκπαίδευσης του είναι σχετικά γρή- γορος και η καθυστέρηση (latency) του δικτύου παραμένει ίδια. Οι παραπάνω μέϑοδοι χαρακτηρίζονται ως per style per model, δηλαδή ένα μοντέλο για ένα στυλ. ´Οπως είναι φυσικό, αυτό ϑέτει περιορισμούς στο πλήϑος των στυλ μπορούμε να εφαρμόσουμε, εφόσον χρειαζόμαστε για κάϑε στυλ και ένα μοντέλο. Για να αποφύγουμε αυτό τον περιορισμό δημιουργήϑηκαν νευρωνικά με πολλαπλά στυλ για κάϑε μοντέλο (multiple style per model). ´Ετσι ένα νευρωνικό δίκτυο μπορεί να εφαρμόσει πολλά στυλ. Εδώ ϑα παρουσιαστεί η μέϑοδος του Huang και Belongie [6] όπου εί- ναι για μεταφορά στυλ σε εικόνες και εικονοσειρές χρησιμοποιώντας Adaptive Instance Normalization. Στα επόμενα κεφάλαια ϑα αναφερθούμε πρώτα στις βασικές τεχνολογίες των νευρωνικών δικτύων και της βαθιάς μάϑησης. Θα δείξουμε αναλυτικά τις μεθόδους των Gatys et al, Johnson et al, Agrim et al και Huang και Belongie, ϑα δείξουμε πειράματα σχετικά με το τρόπο που επηρεάζονται τα μοντέλα αυτά με την αλλαγή των υπερπαραμέτρων τους, ϑα μελετήσουμε την απόδοση τους και ϑα δοκιμάσουμε να βελτιστοποιήσουμε την απόδοση αυτή. Τέλος, ϑα παρουσιάσουμε μια εφαρμογή που αναπτύχθηκε στα πλαίσια της διπλω- ματικής αυτής σε περιβάλλον android για τη μεταφορά στυλ σε βίντεο. 2
  • 6. Κεφάλαιο 2 Νευρωνικά Δίκτυα και Βαϑιά Μάϑηση Τα τεχνικά νευρωνικά δίκτυα (artificial neural networks) ή νευρωνικά δίκτυα (neural networks) είναι ένα μαθηματικό σύστημα, που προσπαθεί να προσο- μοιώσει τη βιολογική δομή του εγκεφάλου. ´Ενα νευρωνικό δίκτυο αποτελεί- ται από πιο μικρές μονάδες ή κόμβους που αποκαλούνται νευρώνες, όπως οι νευρώνες που υπάρχουν στον εγκέφαλο. Οι νευρώνες ενώνονται μεταξύ τους έτσι, ώστε να μπορούν να ανταλλάσσουν πληροφορίες. Ο κάϑε νευρώνας δέχεται ένα σήμα, το επεξεργάζεται και παράγει ένα αποτέλεσμα, ύστερα αυτό το σήμα μπορεί να το μεταδώσει σε ένα άλλο νευρώνα. Το σύνολο των νευρώνων που συνδέονται μεταξύ τους αποτελούν ένα νευρωνικό δίκτυο. Η βαθιά μάϑηση (deep learning) αντιπροσωπεύει τις τεχνικές εκμάθησης, που χρησιμοποιούνται έτσι ώστε ένα πιο πολύπλοκο νευρωνικό δίκτυο να μπορεί να μάθει πολύ πιο πολύπλοκες διαδικασίες. Στη συνέχεια, ϑα αναλυ- ϑούν κάποια είδη νευρωνικών επιπέδων και αρχιτεκτονικών, στις οποίες ϑα αναφερθούμε πολύ στα επικείμενα κεφάλαια. Σχήμα 2.1: Παράδειγμα 2Δ συνελικτικών φίλτρων. 3
  • 7. 2.1 Τύποι Επίπεδων Νευρωνικών Δικτύων 2.1.1 2D Convolution Η διαδικασία της διδιάστατης συνέλιξης χαρακτηρίζεται από τον αριϑμό των φίλτρων, το μέγεϑος του φίλτρου και το stride. Το stride είναι ένας αριϑμός που δείχνει τη μετατόπιση του φίλτρου πάνω στη είσοδο. Στην αυϑεντική 2Δ συνέλιξη το φίλτρο μετακινείται ανά 1 εικονοστοιχείο. Εδώ, όμως, δίνεται η δυνατότητα το φίλτρο να εφαρμόζεται με μετακίνηση για παραπάνω από 1 εικονοστοιχεία, τα οποία ορίζει η παράμετρος stride. O αριθμός των φίλτρων επιλέγεται ανάλογα με το πλήϑος των χαρακ- τηριστικών (features) που ϑέλουμε το δίκτυο μας να μπορεί να αναγνωρί- σει. Το μέγεθος των φίλτρων και του stride επιλέγεται ανάλογα με το πόσο ϑέλουμε να μειώσουμε την είσοδο μας σε μέγεθος. Με άλλα λόγια, το stride αποτελεί μια μέϑοδος down-sampling. Αν η εικόνα εισόδου έχει διαστάσεις Winput×Hinput×Dinput, το 2Δ φίλτρο έχει διαστάσεις kernel_size×kernel_size, τότε η έξοδος της συνέλιξης είναι W × H × D, όπου D = Depth,W = W idth και H = Height για δεδομένο stride υπολογίζεται από τις παρακάτω σχέσεις: D = number_of _f ilters W = (Winput − kernel_size)/(stride) + 1 H = (Hinput − kernel_size)/(stride) + 1 (2.1) Παράδειγμα: ´Εστω ότι έχουμε μια έγχρωμη εικόνα ως είσοδο με διαστάσεις 256x256, δηλαδή το tensor ϑα είναι 1x256x256x3. ´Εστω ότι έχουμε μία συλλογή από 64 φίλτρα με διαστάσεις 3x3. Επιλέγουμε το stride να είναι 1 ως προς το H και W της εικόνας. Σύμφωνα με τις παραπάνω εξισώσεις τα αποτελέσματα ϑα είναι D = 64 W = (256 − 3)/1 + 1 = 254 H = (256 − 3)/1 + 1 = 254 (2.2) Σε TensorFlow [1] Listing 2.1: Παράδειγμα 1 # Batch =1, Height =256, Width=256, Channels=3 input = t f . random . uniform ( ( 1 , 256 , 256 , 3 ) ) # F i l t e r H e i g h t =3, FilterWidth =3, InChannels =3, #OutChannels / NumberOfFilters=64 kernel = t f . random . uniform ( ( 3 , 3 , 3 , 64)) output = t f . nn . conv2d ( input , kernel , s t r i d e s =[1 , 1 , 1 , 1 ]) print ( f " Output_Shape_=_ { output . shape } " ) 4
  • 8. ´Εξοδος: Output_Shape_=_ (1 , 254 , 254 , 64) Σχήμα 2.2: Παράδειγμα χρήσης stride σε 2Δ συνέλιξη. Απεικονίζεται η δι- αφορά χρήσης stride = 1 και stride = 2. 2.1.2 Διαδικασία Zero Padding Η διαδικασία zero padding χρησιμοποιείται, όταν επιθυμούμε η έξοδος του νευρωνικού επιπέδου, όπως η 2Δ συνέλιξη, να έχει ίδιες διαστάσεις με την εί- σοδο. Στο Listing 2.1 βλέπουμε ότι οι διαστάσεις από 256x256 μειώνονται σε 254x254. Στην περίπτωση, όπου η έξοδος μας χρειάζεται να είναι ίδια με την είσοδο μας, μπορούμε να χρησιμοποιήσουμε την τεχνική Zero Padding, δηλαδή να προσθέσουμε μηδενικά στην έξοδο με αποτέλεσμα η έξοδος να έχει διαστάσεις 256x256. Η πληροφορία παραμένει στις διαστάσεις 254x254 απλώς τώρα υπάρχουν επιπλέον μηδενικά γύρω από αυτήν την πληροφορία ώστε να ταιριάζει τις διαστάσεις της εισόδου Figure 2.3. Αυτή η τεχνική είναι πολύ χρήσιμη σε μπλοκ όπως τα residual blocks (ϑα αναλυθούν αργότερα στο κεφάλαιο 3) και σε σημεία όπου έχουμε να κάνουμε πράξεις όπως οι συναρτή- σεις κόστους. 5
  • 9. 2.1.3 Επίπεδο Pooling Το επίπεδο pooling χρησιμοποιείται, έτσι ώστε να κάνουμε υποδειγματολ- ηψία το δείγμα μας. Χρησιμοποιείται κυρίως μετά απο επίπεδα συνέλιξης με σκοπό να μειώσουμε την ποσότητα της πληροφορίας, χωρίς όμως να χά- σουμε τα σημαντικά κομμάτια αυτής. Υπάρχουν διάφοροι τρόποι pooling, αλλά εδώ ϑα περιγράψουμε μόνο το Max Pooling. To Max Pooling, συνήϑως, γίνεται με ένα φίλτρο 2×2 το οποίο σαρώνει την 2Δ πληροφορία στην είσοδο, π.χ τα χαρακτηριστικά που εξάγονται από μια εικόνα ύστερα από το επίπεδο συνέλιξης και διαλέγει το μεγαλύτερο αριθμό (Figure 2.4). Με αυτό το τρόπο το δίκτυο μας δεν επηρεάζεται από μικρές μετακινήσεις της πληροφορίας, κα- ϑώς πάντα ϑα διαλέγουμε τα πιο σημαντικά κομμάτια αυτής. Σχήμα 2.3: Στο πάνω σχήμα φαίνεται το αποτέλεσμα της 2Δ συνέλιξης χωρίς zero padding. Στο κάτω σχήμα φαίνεται το αποτέλεσμα της 2Δ συνέλιξης με zero padding. Αν η είσοδος σε ένα pooling layer είναι N ×H×W ×C, η έξοδος υπολογίζε- ται από: Noutput = Ninput Houtput = ((Hinput − P oolSize)) Woutput = ((Winput − P oolSize)) Coutput = Cinput (2.3) 6
  • 10. Σχήμα 2.4: Max Pooling Επομένως, βλέπουμε ότι η πληροφορία μειώνεται κατά P oolSize ως προς H και W . Η TensorFlow έχει μια ελαφρά διαφορετική υλοποίηση όπου η έξοδος υπολογίζεται από: Noutput = Ninput Houtput = b(Hinput − P oolSize)/stridesc + 1 Woutput = b(Winput − P oolSize)/stridesc + 1 Coutput = Cinput (2.4) 7
  • 11. Παράδειγμα σε TensorFlow input = t f . random . uniform ( ( 1 , 256 , 256 , 3 ) ) kernel = [1 , 2 , 2 , 1] output = t f . nn . max_pool2d ( input , kernel , [1 ,1 ,1 ,1] , "VALID" ) print ( f " Output_Shape_=_ { output . shape } " ) ´Εξοδος Output_Shape_=_ (1 , 255 , 255 , 3) 2.1.4 Η συνάρτηση ενεργοποίησης ReLU Η συνάρτηση ενεργοποίησης ReLU ή αλλιώς Rectified Linear Unit είναι μια μη-γραμμική συνάρτηση, που περιγράφεται από το διάγραμμα Figure 2.5. Χρησιμοποιείται κυρίως μετά από συνελικτικά επίπεδα, έτσι ώστε να μην υπάρχουν αρνητικές τιμές στις εξόδους των χαρακτηριστικών διότι δεν έχουν κάποιο υπολογιστικό νόημα. Φυσικά μπορεί να εφαρμοστεί σε οποιοδήποτε σημείο του νευρωνικού ανάλογα με το στόχο του δικτύου. Σχήμα 2.5: Η συνάρτηση ενεργοποίησης ReLU. 2.1.5 Sigmoid H Sigmoid είναι μια μη γραμμική συνάρτηση όπου έχει μέγιστες εξόδους μεταξύ [−1,1] ή [0,1] ανάλογα τη χρήση της. Ο μαθηματικός της τύπος εί- ναι S(x) = 1 1 + e−x (2.5) και η γραφική της παράσταση είναι Figure 2.7. Μία πολύ συχνή χρήση της συνάρτησης αυτής είναι η μετατροπή πραγματικών αριϑμών σε πιϑανότητες. 8
  • 12. Σχήμα 2.6: Παράδειγμα εφαρμογής της συνάρτησης ενεργοποίησης ReLU στην 2Δ έξοδο ενός δικτύου. 2.1.6 Tanh H συνάρτηση ενεργοποίησης Tanh ή υπερβολική εφαπτομένη είναι μια μη- γραμμική συνάρτηση όπου έχει μέγιστες εξόδους μεταξύ [−1,1] Ο μαϑηματικός της τύπος είναι S(x) = e2x − 1 e2x + 1 (2.6) και η γραφική της παράσταση απεικονίζεται στο Figure 2.7. Λόγω των παραγώγων της τα δίκτυα που τη χρησιμοποιούν τείνουν να μαθαίνουν πιο γρήγορα σε σχέση με άλλες συναρτήσεις ενεργοποίησης όπως η σιγμοειδής. 2.1.7 Η τεχνική Batch Normalization Το Batch Normalization [7] είναι μία τεχνική κανονικοποίησης, που χρησι- μοποιείται έτσι ώστε τα νευρωνικά δίκτυα να εκπαιδεύονται πιο γρήγορα και να είναι πιο σταθερά στα αποτελέσματά τους. Αυτό που συνήϑως προσπα- ϑούμε να αποφύγουμε είναι την υπερπροσαρμογή δεδομένων (overfitting). Κατά το φαινόμενο αυτό, το νευρωνικό δίκτυο μαθαίνει να ταξινομεί τα δε- δομένα εκπαίδευσης με πολύ μεγάλη ακρίβεια, αλλά αποτυγχάνει να γενικεύ- σει σε άγνωστα δεδομένα, με αποτέλεσμα η απόδοση του στο σετ δεδομένων δοκιμής να είναι πολύ χαμηλότερη. ´Ενας τρόπος που προτείνετε μέσα από τη διαδικασία του batch normalization είναι να κανονικοποιούνται οι τιμές των δεδομένων στην έξοδο κάϑε επιπέδου του δικτύου σε ένα συγκεκριμένο εύρος. Αυτό έχει δειχθεί ότι ρυθμίζει την απόδοση του δικτύου και στις περισσότερες περιπτώσεις μειώνεται η υπερπροσαρμογή. Κατά την τεχνική αυτή, η έξοδος ενός επιπέδου κατά την εκπαίδευση υπολογίζεται από Output = γ(x − µ) σ + β (2.7) 9
  • 13. Σχήμα 2.7: Η γραφική παράσταση της σιγμοειδής συνάρτησης ενεργοποίησης. όπου x η είσοδος π.χ το κάϑε pixel από μια εικόνα 256×256, γ ο παράγοντας στάϑμισης, µ ο μέσος όρος της εισόδου, σ η τυπική απόκλιση της εισόδου και β ο παράγοντας απόκλισης. Στόχος είναι η έξοδος να έχει μέσο όρο 0 και τυπική απόκλιση 1. Η έξοδος του επιπέδου κατά το inference υπολογίζεται από την ακόλουϑη σχέση: Output = γ(x − µmoving) σmoving + β (2.8) όπου x η είσοδος π.χ το κάϑε pixel από μια εικόνα 256×256, γ ο παράγοντας στάϑμισης, µmoving είναι ο "κινούμενος" μέσος όρος όπου υπολογίζεται κατά τη διάρκεια της εκπαίδευσης, σmoving είναι η "κινούμενη" τυπική απόκλιση όπου υπολογίζεται κατά τη διάρκεια της εκπαίδευσης και β ο παράγοντας απόκλισης. Ο στόχος είναι και πάλι η έξοδος να έχει μέσο όρο 0 και τυπική απόκλιση 1. 2.1.8 Η τεχνική Instance Normalization Μια άλλη μέϑοδος κανονικοποίησης είναι να αντικαταστήσουμε το batch nor- malization με instance normalization [10]. Η διαφορά μεταξύ τους είναι ότι το instance normalization υπολογίζει το μέσο όρο και την τυπική απόκλιση ανά κανάλι και ανά εικόνα, ενώ το batch normalization τα υπολογίζει ανά ομάδα εικόνων (batch). Από εκεί και πέρα ο στόχος είναι ίδιος ϑέλουμε έξοδος 10
  • 14. να έχει μέσο όρο 0 και τυπική απόκλιση 1. Από πειράματα έχει βρεθεί ότι η συγκεκριμένη τεχνική μπορεί να μειώσει δραματικά το χρόνο εκπαίδευσης βα- ϑέων δικτύων που κάνουν stylization εικόνων, όπως κι αυτά που ϑα ασχολ- ηθούμε σε αυτήν την εργασία. 11
  • 15. Κεφάλαιο 3 H Μέϑοδος Μεταφοράς Στυλ του Gatys et al Στο κεφάλαιο αυτό, ϑα ασχοληϑούμε με την πρώτη μέϑοδο μεταφοράς στυλ με τη βοήϑεια βαϑιάς μάϑησης, που είναι η μέϑοδος του Gatys et al [4]. Θα δούμε αναλυτικά τη δομή της μεϑόδου και τα αποτελέσματά της. 3.1 Περιγραφή της μεϑόδου 3.1.1 VGG19 Σχήμα 3.1: Διάγραμμα της Μεϑόδου Μεταφοράς Στυλ του Gatys et al. Η μέϑοδος αυτή χρησιμοποιεί το δίκτυο VGG19, έτσι ώστε να εξάγει τις αναγκαίες πληροφορίες σχετικά με το στυλ της εικόνας που ϑέλουμε να προσ- εγγίσουμε και του περιεχομένου της εικόνας που ϑέλουμε να εφαρμόσουμε αυτό το στυλ. 12
  • 16. Σχήμα 3.2: Αρχιτεκτονική του βαϑέως δικτύου ταξινόμησης VGG19. Το VGG19 είναι ένα συνελικτικό νευρωνικό δίκτυο, που χρησιμοποιείται κυρίως για Large-Scale Image Recognition. To VGG19 αποτελείται από 16 συνελικτικά επίπεδα με kernel size 3 × 3, το καθένα ακολουθούμενο από μια ReLu. Από αυτά τα επίπεδα, 2 επίπεδα έχουν 64 φίλτρα, 2 επίπεδα έχουν 128 φίλτρα, 4 επίπεδα έχουν 256 φίλτρα και τα τελευταία 8 επίπεδα έχουν 512 φίλτρα. Ανά 2 ή 4 συνελικτικά επίπεδα υπάρχει 1 MaxPooling layer. Στο τέλος, έχουμε 3 πλήρως συνδεδεμένα επίπεδα (Fully Connected layers) με 4096 νευρώνες, 4096 νευρώνες και 1000 νευρώνες αντίστοιχα. Οι έξοδοι του τελευταίου πλήρως συνδεδεμένου επιπέδου περνάνε από τη Softmax συνάρτηση, για να μπορέσουν μετά να χρησιμοποιηθούν για την ταξινόμηση της εικόνας εισόδου. Για την υλοποίηση της μεθόδου του Gatys et al χρησιμοποιούμε προ- εκπαιδευμένο το VGG19 από τις βιβλιοθήκες της TensorFlow. Το δίκτυο αυτό είναι εκπαιδευμένο σε όλο το σετ δεδομένων της συλλογής ImageNet [3] και αποτελείται από 143.667.240 παραμέτρους. Η χρήση προ-εκπαιδευμένων δικτύων για παραπλήσια, αν και διαφορετικά, προβλήματα όρασης μηχανής και όχι μόνο, είναι μια τεκμηριωμένη επωφελής διαδικασία στη διεϑνή βιβ- λιογραφία. Είναι μια διαδικασία που αποδίδει πολύ καλύτερα από την τυχαία αρχικοποίηση των βαρών του δικτύου, παρόλο που χρησιμοποιείται σε μια εντελώς διαφορετική εφαρμογή από εκείνη για την οποία εκπαιδεύτηκε. Να τονιστεί ότι, στις περισσότερες περιπτώσεις, το προ-εκπαιδευμένο δίκ- τυο συνεχίζει να εκπαιδεύεται και στην νέα εφαρμογή του, απλά τα προ- εκπαιδευμένα βάρη λειτουργούν ως μια καλύτερη αρχικοποίηση του δικτύου. Στη μέϑοδο του Gatys et al, παρόλα αυτά, το VGG19 δε ϑα συνεχίσει την εκπαίδευση του, αλλά οι συντελεστές του ϑα χρησιμοποιηθούν ως έχουν. 13
  • 17. 3.1.2 Ονοματολογία επιπέδων και block ´Οπως βλέπουμε στο Figure 3.3, το VGG19 αποτελείται από 5 βασικά block, όπου το κάϑε block έχει από 2 εώς 4 επίπεδα συνέλιξης. Επομένως, όταν γράφουμε block1_conv2 ή conv1_2, αναφερόμαστε στο επίπεδο συνέλιξης 2(Conv2) από το Block 1. Η ίδια ονοματολογία ισχύει και για τα υπόλοιπα επίπεδα. Σχήμα 3.3: Σχηματκό διάγραμμα των blocks του δικτύου VGG19. 3.1.3 Θεωρητική ανάλυση μεϑόδου Στις μεθόδους μεταφοράς στυλ, αναφερόμαστε σε τρεις εικόνες: την εικόνα που έχει το επιθυμητό στυλ (style image), την εικόνα που ϑέλουμε να εφαρ- μόσουμε αυτό το στυλ (content image) και την παραγόμενη εικόνα (gener- ated image), η όποια στην αρχή αποτελείται από λευκό ϑόρυβο (βλέπε Fig- ure 3.1). Σε κάϑε επανάληψη περνάμε από το δίκτυο το style image, con- tent image και generated image. Συλλέγουμε την πληροφορία του style im- age από τα στρώματα relu1_1,relu2_1,relu3_1,relu4_1 και relu5_1, ενώ για τα content image και generated image συλλέγουμε την πληροφορία από το relu4_2. ´Εχοντας αυτές τις αναπαραστάσεις (features) μπορούμε να υπ- ολογίσουμε το σφάλμα που υπάρχει στο στυλ και στο περιεχόμενο. ´Ετσι μεσώ της διαδικασία back-propagation υπολογίζουμε τα gradients, ανανεώνουμε τις τιμές του generated image και ύστερα από αρκετές επαναλήψεις το gen- erated image έχει το περιεχόμενο του content image με το στυλ του style image. 3.2 Αναπαράσταση Στυλ και Περιεχομένου Στην παρουσιαζόμενη μέϑοδο, προτείνονται συγκεκριμένες μαθηματικές ανα- παραστάσεις του στυλ και του περιεχομένου, έτσι ώστε να μπορούμε να υπ- ολογίσουμε τα σφάλματα στις συναρτήσεις κόστους και να υπολογιστούν οι ανανεώσεις για την εκπαίδευση των βαρών του δικτύου. 14
  • 18. Σχήμα 3.4: Αποτέλεσμα της μεθόδου μεταφοράς στυλ του Gatys et al. Αρισ- τερά είναι η αρχική εικόνα (content image), στη μέση είναι η εικόνα που έχει το επιθυμητό στυλ (style image) και δεξιά είναι η παραγόμενη εικόνα (gener- ated image). 3.2.1 Αναπαράσταση Περιεχομένου Θεωρούμε ότι Xl είναι η αναπαράσταση-έξοδος της πρωτότυπης εικόνας στο επίπεδο l του δικτύου και Fl την αναπαράσταση-έξοδο της παραγόμενης εικόνας στο επίπεδο l του δικτύου. Το σφάλμα αναπαράστασης περιεχομέ- νου περιγράφεται από την εξίσωση: Lcontent = 1 2 X i,j (Fl ij − Xl ij)2 (3.1) Σχήμα 3.5: Αποτελέσματα φίλτρων ανά μπλοκ συνέλιξης για το περιεχόμενο. 15
  • 19. Σχήμα 3.6: Αποτελέσματα φίλτρων ανά convolution block για το στυλ. 3.2.2 Αναπαράσταση Στυλ Για την αναπαράσταση του στυλ χρειαζόμαστε να εξάγουμε την πληροφορία σχετικά με την υφή (texture) της εικόνας. Αυτό μπορούμε να το πετύχουμε με τη βοήϑεια του Gram Matrix, που ορίζεται ως ακολούϑως: Gl ij = X k Fl ikFl jk. (3.2) όπου Fl ορίζουμε πάλι την αναπαράσταση-έξοδο της παραγόμενης εικόνας στο επίπεδο l του δικτύου. Ο πίνακας Gram διατηρεί την πληροφορία της υφής (texture), χωρίς να μας ενδιαφέρει που βρίσκεται τοπικά αυτή η πληρο- φορία. Θεωρούμε ότι Al είναι ο πίνακας Gram της πρωτότυπης εικόνας στο επίπεδο l του δικτύου και Gl είναι ο πίνακας Gram της παραγόμενης εικόνας στο επίπεδο l του δικτύου. ´Ετσι η απώλεια του στυλ (style loss) στο επίπεδο l του δικτύου δίνεται από τη σχέση: El = 1 4N2 l M2 l X i,j (Gl i,j − Al i,j)2 (3.3) Η συνολική απώλεια του στυλ είναι Lstyle = L X l=0 wlEl (3.4) όπου wl είναι το βάρος του σφάλματος για το επίπεδο l του δικτύου. 3.2.3 Συνολική Συνάρτηση Απώλειας (loss function) Η τελική και συνολική συνάρτηση απώλειας δίνεται από τη σχέση: Ltotal = αLcontent + βLstyle (3.5) 16
  • 20. ´Οπου α το βάρος της απώλειας περιεχομένου και β το βάρος της απώλειας στυλ. ´Οπως είναι προφανές, η συνολική συνάρτηση απωλειών προσπαθεί να ελαχιστοποιήσει ταυτόχρονα τις δύο διαφορετικές συναρτήσεις απωλειών, φυσικά με διαφορετικό βάρος. Με άλλα λόγια, αυτό που προσπαθεί να επιτύχει είναι να μοιάζει η τελική παραγόμενη εικόνα στην αρχική εικόνα εισό- δου όσο το δυνατόν περισσότερο (ελαχιστοποίηση απώλειας περιεχομένου), αλλά ταυτόχρονα η τελική παραγόμενη εικόνα να έχει παρόμοια υφή με την εικόνα στυλ (ελαχιστοποίηση απώλειας στυλ). Οι μεταβλητές α,β ρυθμίζουν το πόσο έντονο ϑέλουμε να είναι το κάϑε ένα από τα δύο κριτήρια. 3.3 Πειράματα και Αποτελέσματα Το μοντέλο Gatys et al και όλες οι επιπλέον βοηθητικές συναρτήσεις δημιουργήϑηκαν σε γλώσσα Python με την βοήθεια του Tensorflow. Οι παράμετροι του μοντέλου είναι τα α,β, ο αριθμός και τα μπλοκς των χρησι- μοποιούμενων επιπέδων συνέλιξης. Τα βάρη wl στην εξίσωση (3.4) είναι όλα ίσα με 1. ´Ολα τα πειράματα έγιναν για 10 εποχές με 100 επαναλήψεις ανά εποχή. Οποιαδήποτε μεταβλητή αλλάζει ϑα αναφέρεται ρητά, αλλιώς η τιμή της ϑα είναι αυτή που γράφεται στο πίνακα 3.1 Σχήμα 3.7: Παραγόμενη εικόνας με τη μέϑοδο μεταφοράς στυλ Gatys et al ανά εποχή εκπαίδευσης. α 1e4 β 1 content_layers conv4_2 style_layers conv1_1,conv2_1,conv3_1,conv4_1,conv5_1 Πίνακας 3.1: Hyperparameters Τα αποτελέσματα του Σχήματος 3.7 δημιουργήϑηκαν με τις υπερ- 17
  • 21. παραμέτρους που εμφανίζονται στο Πίνακα 3.1. ´Εγιναν συνολικά 10 εποχές από 100 επαναλήψεις σε κάϑε εποχή. 3.3.1 Εξάρτηση αποτελεσμάτων από τις παραμέτρους α, β Τα αποτελέσματα του Σχήματος 3.8 δημιουργήϑηκαν με τις υπερ- παραμέτρους που εμφανίζονται στο Πίνακα 3.1 με το α να παίρνει τιμές στο διάστημα [1e−4,1e6]. Παρατηρούμε ότι καθώς αυξάνουμε την παράμετρο α το περιεχόμενο της εικόνας γίνεται όλο και πιο αντιληπτό σε σχέση με το στυλ, μέχρις ότου για α = 1e6 πλέον ο αλγόριθμος δεν μπορεί να εφαρμόσει το στυλ, διότι στη συνάρτηση απώλειας το βάρος του περιεχομένου είναι α >> β και έτσι ϑεωρεί ότι η διατήρηση του περιεχομένου είναι πολύ πιο σημαντική. Σχήμα 3.8: Αποτελέσματα παραγόμενης εικόνας με διάφορες τιμές του α με τη μέϑοδο του Gatys et al. 18
  • 22. Τα αποτελέσματα του Σχήματος 3.9 δημιουργήϑηκαν με τις υπερ- παραμέτρους, που εμφανίζονται στον Πίνακα 3.1 με το β να παίρνει τιμές στο διάστημα [1e−4,1e6]. Παρατηρούμε ότι καθώς αυξάνεται το β, το στυλ αρχίζει να είναι πιο έντονο στην εικόνα. Σχήμα 3.9: Αποτελέσματα παραγόμενης εικόνας με διάφορες τιμές του β με τη μέϑοδο του Gatys et al. 3.3.2 Εξάρτηση αποτελεσμάτων από το πλήϑος των μπλοκ συνέλιξης Η επόμενη παράμετρος που επηρεάζει το αισϑητικό αποτέλεσμα είναι ο αρι- ϑμός των επίπεδων συνέλιξης και το μπλοκ, όπου ανήκει η συνέλιξη. Στο Σχήμα 3.10 βλέπουμε το αποτέλεσμα που έχει η αλλαγή του επιπέδου της συνέλιξης που χρησιμοποιούμε ως Content Layer. 19
  • 23. Σχήμα 3.10: Αποτελέσματα εικόνας με διαφορετικό αριθμό συνελικτικών επιπέδων για την μέϑοδο του Gatys et al. Σχήμα 3.11: Αποτελέσματα εικόνας με διαφορετικό αριθμό συνελικτικών επιπέδων για την μέϑοδο του Gatys et al. Από τις παραπάνω εικόνες μπορούμε να παρατηρήσουμε ότι για να υπ- άρχει ένα σωστό οπτικά αποτέλεσμα της μεταφοράς του στυλ, μας ενδι- αφέρουν κυρίως τα χαρακτηριστικά (features) του περιεχομένου που εξά- γονται από τη συνέλιξη, παρά το πλήϑος των επιπέδων της συνέλιξης. ´Εχουμε μειώσει τη τιμή του β για αυτό το πείραμα, έτσι ώστε να είναι πιο ευκρινές ο ρόλος του αριθμού και επιπέδου των επιπέδων που επιλέγονται. 20
  • 24. Σχήμα 3.12: Αποτέλεσμα εικόνας με διαφορετικά επίπεδα συνέλιξης για το στυλ με τη μέϑοδο του Gatys et al. Στο Σχήμα 3.12 βλέπουμε το αποτέλεσμα που έχει η αλλαγή του επιπέδου της συνέλιξης, καϑώς και ο αριϑμός των επιπέδων που χρησιμοποιούμε ως Style Layer. Στο Σχήμα 3.13 φαίνεται ότι τα συνελικτικά επίπεδα στο block4, από μόνα τους, μπορούν να λειτουργήσουν για την ανακατασκευή του στυλ. Σχήμα 3.13: Αποτέλεσμα εικόνας με 4 διαφορετικά επίπεδα συνέλιξης για το στυλ με τη μέϑοδο του Gatys et al. Από τα παραπάνω πειράματα παρατηρούμε ότι όσο πιο γενικά και αφηρημένα είναι τα χαρακτηριστικά που εξάγονται για το περιεχόμενο από το συνελικτικό επίπεδο, τόσο πιο έντονα μπορεί να εφαρμοστεί το στυλ που επιθυμούμε (Σχήμα 3.14). 21
  • 25. Σχήμα 3.14: Απόκριση φίλτρων ανα convolution layer και το απότελεσμα του ως content layer με τη μέϑοδο του Gatys et al. 3.4 Προγραμματιστικές σημειώσεις για την υλοποίηση της μεϑοδου σε TensorFlow 2.x και Απόδοση 3.4.1 Σημειώσεις Σημείωση 1: ´Οπως αναφέρθηκε στην παράγραφο 3.1.1, ϑα χρησιμοποιήσουμε το δίκτυο VGG19, που μας δίνεται έτοιμο και pre-trained στο imagenet από το ΤensorFlow. Δεν το χρειαζόμαστε ολόκληρο το δίκτυο, οπότε μπορούμε να φορτώσουμε μόνο ένα μέρος του. Επιπλέον, ϑέτουμε το δίκτυο να μην είναι εκπαιδεύσιμο, εφόσον δεν πραγματοποιούμε καμία εκπαίδευση στο ίδιο το δίκτυο. # Importing VGG19 without top vgg = t f . keras . applications .VGG19( include_top=False , weights= ’ imagenet ’ ) # We do not need to t r a i n VGG19 vgg . trainable = False 22
  • 26. Το δίκτυο που δημιουργήϑηκε είναι Layer ( type ) Output Shape Param # ================================================================= input_1 ( InputLayer ) [ ( None , None , None , 3 ) ] 0 _________________________________________________________________ block1_conv1 (Conv2D) (None , None , None , 64) 1792 _________________________________________________________________ block1_conv2 (Conv2D) (None , None , None , 64) 36928 _________________________________________________________________ block1_pool ( MaxPooling2D ) (None , None , None , 64) 0 _________________________________________________________________ block2_conv1 (Conv2D) (None , None , None , 128) 73856 _________________________________________________________________ block2_conv2 (Conv2D) (None , None , None , 128) 147584 _________________________________________________________________ block2_pool ( MaxPooling2D ) (None , None , None , 128) 0 _________________________________________________________________ block3_conv1 (Conv2D) (None , None , None , 256) 295168 _________________________________________________________________ block3_conv2 (Conv2D) (None , None , None , 256) 590080 _________________________________________________________________ block3_conv3 (Conv2D) (None , None , None , 256) 590080 _________________________________________________________________ block3_conv4 (Conv2D) (None , None , None , 256) 590080 _________________________________________________________________ block3_pool ( MaxPooling2D ) (None , None , None , 256) 0 _________________________________________________________________ block4_conv1 (Conv2D) (None , None , None , 512) 1180160 _________________________________________________________________ 23
  • 27. block4_conv2 (Conv2D) (None , None , None , 512) 2359808 _________________________________________________________________ block4_conv3 (Conv2D) (None , None , None , 512) 2359808 _________________________________________________________________ block4_conv4 (Conv2D) (None , None , None , 512) 2359808 _________________________________________________________________ block4_pool ( MaxPooling2D ) (None , None , None , 512) 0 _________________________________________________________________ block5_conv1 (Conv2D) (None , None , None , 512) 2359808 _________________________________________________________________ block5_conv2 (Conv2D) (None , None , None , 512) 2359808 _________________________________________________________________ block5_conv3 (Conv2D) (None , None , None , 512) 2359808 _________________________________________________________________ block5_conv4 (Conv2D) (None , None , None , 512) 2359808 _________________________________________________________________ block5_pool ( MaxPooling2D ) (None , None , None , 512) 0 ================================================================= Total params : 20 ,024 ,384 Trainable params : 0 Non−trainable params : 20 ,024 ,384 Σημείωση 2: Για να εξάγουμε τα χαρακτηριστικά είτε από το στυλ, είτε από το περιεχόμενο, χρειαζόμαστε την έξοδο από συγκεκριμένα επίπεδα. ´Ετσι, φτιάχνουμε ένα δίκτυο με τελευταίο επίπεδο το τελευταίο επιθυμητό επίπεδο συνέλιξης που χρειαζόμαστε, αλλά ως έξοδο του έχουμε μια λίστα από όλα τα επιθυμητά επίπεδα, γιατί χρειαζόμαστε την πληρο- φορία όλων των επιπέδων. # Desired Content Layer content_layers = [ ’ block4_conv2 ’ ] # Desired S t y l e Layers s t y l e _ l a y e r s = [ ’ block1_conv1 ’ , ’ block2_conv1 ’ , ’ block3_conv1 ’ , 24
  • 28. ’ block4_conv1 ’ ] layer_names = s t y l e _ l a y e r s + content_layers outputs = [ vgg . get_layer (name ) . output for name in layer_names ] model = t f . keras . Model ( [ vgg . input ] , outputs ) Σημείωση 3: Οποιοσδήποτε και αν είναι ο τρόπος που φορτώνονται οι εικόνες πάντα, πριν περάσουν από το VGG19, ϑα πρέπει να περάσουν μια προ- επεξεργασία, έτσι ώστε να έρθουν στη σωστή μορφή για να εισαχϑούν στο δίκτυο. Αυτή η προ-επεξεργασία αποτελείται από αλλαγή της σειράς των καναλιών από RGB σε BGR και αφαίρεση του μέσου όρου του dataset από την κάϑε εικόνα. Αυτό μπορεί να γίνει πολύ εύκολα μέσω του TensorFlow με τη συνάρτηση preprocessed_input = t f . keras . applications . vgg19 . preprocess_input ( inputs ) Η είσοδος της συνάρτησης πρέπει να είναι ένα Tensor 3D (Η, W, C) ή 4D (B, H, W, C) με σειρά καναλιών RGB και τιμές μεταξύ 0 − 255. 3.5 Χαρακτηριστικά και Απόδοση H απόδοση της μεθόδου μετρήϑηκε στον υπολογιστή από το Εργαστήριο Ηλεκτρικών Κυκλωμάτων, Επεξεργασίας Σημάτων και Εικόνων με GPU TI- TAN Xp και στη CPU του λάπτοπ μου Intel-Core i7-4510u CPU @ 2.00GHz. ´Εχουμε διαλέξει μια αρκετά δυνατή GPU και μια απλή CPU, έτσι ώστε να δούμε την απόδοση σε διαφορετικά συστήματα. Network0sName V GG19 Size 77M GPU Performance 67.8 seconds CPU Performance no results Πίνακας 3.2: Χαρακτηριστικά και Απόδοση Τα παραπάνω χαρακτηριστικά κρίνουν ακατάλληλη τη μέϑοδο αυτή για real-time εφαρμογές καθώς και για εφαρμογή σε εικονοσειρές. Επιπλέον, στη συγκεκριμένη μέϑοδο δεν υπάρχει δίκτυο που να έχει εκπαιδευτεί σε κάποιου συγκεκριμένο στυλ και να μπορεί να επαναχρησιμοποιηθεί για να μεταφέρει το ίδιο στυλ σε κάποια άλλη εικόνα. Το αποτέλεσμα είναι το κάϑε φορά που χρησιμοποιούμε το δίκτυο να μην είναι επαναχρησιμοποιήσιμο, αλλά να αφορά το συγκεκριμένο συνδυασμό εικόνας εισόδου και εικόνας στυλ. 25
  • 29. Κεφάλαιο 4 Μέϑοδος Johnson et al 4.1 Περιγραφή Μεϑόδου Οι Johnson et al [8] στο άρθρο τους περιγράφουν μια πρωτοποριακή μέϑοδο για τη μεταφορά στυλ από εικόνα σε εικόνα, χρησιμοποιώντας νευρωνικά δίκ- τυα. Σε αντίθεση με τη μέϑοδο των Gatys et al , οι Johnson et al χρησιμοποιoύν 2 δίκτυα για την εκπαίδευση. ´Ενα Loss Network και ένα Image Transform Network, που είναι και το κύριο δίκτυο που κάνει τη μεταφορά στυλ. To Loss Network είναι το VGG16 [9] και το χρησιμοποιεί για να παράγει τις αναπαραστάσεις του περιεχομένου και του στυλ, όπως έκανε και o Gatys et al με το VGG19. Το Image Transform Network είναι ένα νευρωνικό δίκτυο, που ως εί- σοδο δέχεται την εικόνα που έχει το περιεχόμενο (content) και στην έξοδο του δικτύου η εικόνα είναι επεξεργασμένη, έτσι ώστε να έχει εφαρμοστεί το επιθυμητό στυλ. Στο Image Transform Network στην αρχή της εκπαίδευσης τα βάρη του αρχικοποιούνται σε τυχαίες τιμές. Τις απώλειες του περιεχομέ- νου και του στυλ τις υπολογίζουμε από τις συναρτήσεις απώλειας, που χρησι- μοποίησε και ο Gatys et al σύμφωνα με τις αναπαραστάσεις που παράγει το Loss Network. Γνωρίζοντας το ολικό σφάλμα, με τη διαδικασία του back- propagation ανανεώνουμε τα βάρη του Image Transform Network. Στο τέλος της εκπαίδευσης, έχουμε ένα δίκτυο, που τα βάρη του είναι τέτοια, ώστε να μπορεί να εφαρμόζει ένα συγκεκριμένο στυλ σε οποιαδήποτε εικόνα επιθυ- μούμε. Το κύριο πλεονέκτημα αυτής της μεθόδου είναι ότι μπορεί να παράξει το αποτέλεσμα σε μερικά εκατοστά του δευτερολέπτου και για αυτό κιόλας χαρακτηρίζεται real-time. Στο Σχήμα 4.1 φαίνεται η αρχιτεκτονική της μεϑόδου. Πρώτα περνάμε την είσοδο από το Image Transform Network και μετά η έξοδος του δικτύου, το content και στο style περνάνε από το VGG16, έτσι ώστε να πάρουμε τις ανάλογες αναπαραστάσεις. Για το style, συλλέγουμε την πληροφορία από τα relu1_2, relu2_2, relu3_2 και relu4_2, για το content από το relu3_2. Από αυτά τα δεδομένα μπορούμε να υπολογίσουμε τις συναρτήσεις κόστους και 26
  • 30. τέλος με τη διαδικασία της οπισϑοδιάδοσης να εκπαιδεύσουμε το δίκτυο. Σχήμα 4.1: Αρχιτεκτονική της μεϑόδου Johnson et al 27
  • 31. 4.2 Αρχιτεκτονική Image Transform Network Σχήμα 4.2: Αρχιτεκτονική Image Transform Network Η είσοδος του δικτύου είναι 256 × 256 × 3. Αποτελείται από 3 επίπεδα 2D Convolution, 5 Residual blocks, 3 επίπεδα 2D Transpose Convolution και στο τέλος ένα επίπεδο tanh activation. Τελικά η έξοδος του δικτύου είναι 256 × 256 × 3 δηλαδή όπως και η είσοδος. 4.2.1 Residual blocks Το δίκτυο έχει 5 residual block όπου αποτελούνται από 2 × 2D Convolu- tion block και το skip connection. Τα residual blocks είναι πολύ χρήσιμα στην περίπτωση του Image Transform Net, διότι το αποτέλεσμα του δικτύου ϑέλουμε να είναι κατά ένα ποσοστό επεξεργασμένο σύμφωνα με την είσοδο του. Επίσης, τα blocks αυτά βοηθάνε στη σωστή διαδικασία της εκπαίδευσης, ώστε να αποφευχθεί κάποια υπολογιστική έκρηξη και βοηθούν στη ταχύτητα της εξαγωγής συμπερασμάτων (inference). 4.2.2 Transpose 2D Convolution Είναι η ακριβώς αντίθετη διαδικασία του 2D Convolution, έτσι ώστε η εικόνα στην έξοδο του δικτύου να επανέλθει στις αρχικές διαστάσεις της, δηλαδή 256 × 256 × 3. ´Υστερα από κάϑε Transpose Convolution υπάχει Batch Nor- malization και Relu, εκτός από το τελευταίο Transpose 2D Convolution, όπου δεν υπάρχει Relu. 28
  • 32. 4.3 Εφαρμογή της μεϑόδου Για την εφαρμογή της μεϑόδου χρησιμοποιήϑηκε η γλώσσα python και το API της TensorFlow. Το δίκτυο ϑα εκπαιδευτεί σε περίπου 40000 εικόνες από το COCO Dataset για 2 εποχές. Για την επιτάχυνση της εκπαίδευσης και για την αισϑητική βελτίωση των αποτελεσμάτων χρησιμοποιούνται οι παρακάτω πρακτικές: • Αντί για VGG16, χρησιμοποιούμε το VGG19. Αυτό το κάνουμε, επειδή πρακτικά φαίνεται ότι βγάζει αισϑητικά πιο όμορφα αποτελέσματα. Στο Σχήμα 4.3 βλέπουμε το αποτέλεσμα στο ίδιο ακριβώς τεστ με μόνη δι- αφορά το loss network. • ´Υστερα από κάϑε συνέλιξη είτε 2D Convolution, είτε Transpose 2D Convolution εφαρμόζεται zero-padding. Για παράδειγμα, ύστερα από το πρώτο 2D Convolution η χρήσιμη πληροφορία βρίσκεται σε διάσ- ταση 248 × 248 και προστίθενται μηδενικά, έτσι ώστε να φτάσει σε διάσταση 256 × 256. ´Ετσι αποφεύγονται τα σφάλματα που μπορεί να προκύψουν μεταξύ των επιπέδων λόγω των διαστάσεων. • Εφόσον χρησιμοποιούμε zero-padding μπορούμε να αντικαταστήσουμε το τελευταίο Transpose 2D Convolution με 2D Convolution, αφού το αποτέλεσμα πάλι ϑα είναι 256 × 256. Αυτή η πρακτική φαίνεται ότι επιταχύνει την εκμάθηση και βελτιώνει το αισϑητικό αποτέλεσμα. Τα αποτελέσματα στο Σχήμα 4.4 παράχϑηκαν με τα δεδομένα από το πί- νακα 4.1 • ´Υστερα από κάϑε συνέλιξη είτε 2D Convolution, είτε Transpose 2D Convolution ακολουθεί Instance Normalization. Στο άρθρο του Ulyanov δείχνει ότι μπορεί να παράξει καλύτερα αισϑητικά αποτελέσ- ματα σε περισσότερες περιπτώσεις σε σχέση με το Batch Normaliza- tion. Τα αποτελέσματα στο Σχήμα 4.5 παράχϑηκαν με τα δεδομένα από το πίνακα 4.1 Σχήμα 4.3: Αποτελέσματα VGG16/VGG19 στο τεστ με Table 4.1. Tα style layers και content layers για το VGG16 είναι αυτά που προτείνονται από τοv Johnson et al και για το VGG19 αυτά που πρότεινε ο Gatys et al 29
  • 33. Σχήμα 4.4: Αλλαγή τελευταίου επιπέδου από Transpose 2D Conv σε 2D Conv Σχήμα 4.5: Αλλαγή μεϑόδου Κανονικοποίησης. 4.3.1 Αποτελέσματα σε εικόνες ´Ολα τα αποτελέσματα παράχϑηκαν σύμφωνα με την ενότητα 9 και τον πίνακα 4.2 30
  • 34. 4.3.2 Αποτελέσματα σε βίντεο ´Ολα τα αποτελέσματα παράχϑηκαν σύμφωνα με την ενότητα 9 και τον πίνακα 4.2 Από τα βίντεο μπορούμε να δούμε ότι η μέϑοδος του Johnson, αν και παράγει όμορφα στιλιστικά αποτελέσματα παράγει επίσης και πολλά τρεμοπαιξίματα (flickers), διότι δεν υπάρχει κανένας περιορισμός σχετικά με τη χωρική συνοχή μεταξύ των frames. Loss Net VGG19 α 1 β 40 Total Variation Loss 200 epochs 2 Number of images in training 5000 content_layers conv4_2 style_layers conv1_1,conv2_1,conv3_1,conv4_1,conv5_1 Πίνακας 4.1: Υπερ-παράμετροι (hyperparameters) για μικρά πειράματα. 31
  • 35. Loss Net VGG19 α 1 β 40 Total Variation Loss 200 epochs 2 Number of images in training 40000 content_layers conv4_2 style_layers conv1_1,conv2_1,conv3_1,conv4_1,conv5_1 Πίνακας 4.2: Υπερ-παράμετροι (hyperparameters) για μεγάλα πειράματα. 4.4 Υλοποίηση 4.4.1 Σημειώσεις • Μετά από κάϑε 2D Convolution layer ακολουθεί Instance Normaliza- tion και ReLU, εκτός από το τελευταίο επίπεδο 2D Convolution. class ConvLayer ( t f . keras . layers . Layer ) : def __init__ ( self , f i l t e r s , kernel =(3 ,3) , padding= ’same ’ , s t r i d e s =(1 ,1) , activate=True , name=" " , w e i g h t _ i n i t i a l i z e r=" glorot_uniform " ) : super ( ConvLayer , s e l f ) . __init__ ( ) s e l f . activate = activate s e l f . conv = t f . keras . layers . Conv2D( f i l t e r s , kernel_size=kernel , padding=padding , s t r i d e s=strides , name=name , trainable=True , use_bias=False , k e r n e l _ i n i t i a l i z e r=w e i g h t _ i n i t i a l i z e r ) s e l f . inst_norm = tfa . layers . InstanceNormalization ( axis =3, center=True , scale=True , b e t a _ i n i t i a l i z e r=" zeros " , gamma_initializer=" ones " , trainable=True ) i f s e l f . activate : s e l f . relu_layer = t f . keras . layers . Activation ( ’ relu ’ , trainable=False ) def c a l l ( self , x ) : 32
  • 36. x = s e l f . conv ( x ) x = s e l f . inst_norm ( x ) i f s e l f . activate : x = s e l f . relu_layer ( x ) return x • Μετά από κάϑε Transpose 2D Convolution layer ακολουϑεί Instance Normalization και ReLU. class ConvTLayer ( t f . keras . layers . Layer ) : def __init__ ( self , f i l t e r s , kernel =(3 ,3) , padding= ’same ’ , s t r i d e s =(1 ,1) , activate=True , name=" " , w e i g h t _ i n i t i a l i z e r=" glorot_uniform " ) : super ( ConvTLayer , s e l f ) . __init__ ( ) s e l f . activate = activate s e l f . conv_t = t f . keras . layers . Conv2DTranspose ( f i l t e r s , kernel_size=kernel , padding=padding , s t r i d e s=strides , name=name , use_bias=False , k e r n e l _ i n i t i a l i z e r=w e i g h t _ i n i t i a l i z e r ) s e l f . inst_norm = tfa . layers . InstanceNormalization ( axis =3, center=True , scale=True , b e t a _ i n i t i a l i z e r=" zeros " , gamma_initializer=" ones " , trainable=True ) i f s e l f . activate : s e l f . relu_layer = t f . keras . layers . Activation ( ’ relu ’ ) def c a l l ( self , x ) : x = s e l f . conv_t ( x ) x = s e l f . inst_norm ( x ) i f s e l f . activate : x = s e l f . relu_layer ( x ) return x • Το Resblock περιγράφεται προγραμματιστικά ως εξής: class ResBlock ( t f . keras . layers . Layer ) : def __init__ ( self , f i l t e r s , kernel =(3 ,3) , padding= ’same ’ , w e i g h t _ i n i t i a l i z e r=" glorot_uniform " , prefix=" " ) : super ( ResBlock , s e l f ) . __init__ ( ) 33
  • 37. s e l f . prefix_name = prefix + " _ " s e l f . conv1 =ConvLayer ( f i l t e r s =f i l t e r s , kernel=kernel , padding=padding , w e i g h t _ i n i t i a l i z e r=weight_initializer , name=s e l f . prefix_name + " conv_1 " ) s e l f . conv2 =ConvLayer ( f i l t e r s =f i l t e r s , kernel=kernel , padding=padding , activate=False , w e i g h t _ i n i t i a l i z e r=weight_initializer , name=s e l f . prefix_name + " conv_2 " ) s e l f . add = t f . keras . layers .Add(name=s e l f . prefix_name + "add" ) def c a l l ( self , x ) : tmp = s e l f . conv1 ( x ) c = s e l f . conv2 (tmp) return s e l f . add ( [ x , c ] ) όπου βλέπουμε ότι η έξοδος του επιπέδου είναι η επεξεργασμένη είσοδος συν την αρχική είσοδο. • Χρησιμοποιούμε μια επιπλέον συνάρτηση κόστους όπου ονομάζεται total variation loss. To total variation loss υπολογίζεται από την ακόλουϑη έκφραση: V (y) = X i,j q |yi+1,j − yi,j|2 + |yi,j+1 − yi,j|2 (4.1) και χρησιμοποιείται έτσι ώστε να μειωϑεί ο ϑόρυβος στην παραγόμενη εικόνα. 4.5 Χαρακτηριστικά και Απόδοση H απόδοση της μεθόδου μετρήϑηκε στον υπολογιστή από το Εργαστήριο Ηλεκτρικών Κυκλωμάτων, Επεξεργασίας Σημάτων και Εικόνων με GPU TI- TAN Xp και στη CPU του λάπτοπ μου Intel-Core i7-4510u CPU @ 2.00GHz και είναι ο μέσος όρος 100 εικόνων. ´Εχουμε διαλέξει μια αρκετά δυνατή GPU και μια απλή CPU έτσι ώστε να δούμε την απόδοση σε διαφορετικά συστή- ματα. 34
  • 38. Network0sName Jonshon Size 6.7M GPU Performance 0.02212 seconds CPU Performance 0.48373 seconds Πίνακας 4.3: Χαρακτηριστικά και Απόδοση της μεϑόδου Johnson et alσε δύο διαφορετικά συστήματα με GPU και CPU. 35
  • 39. Κεφάλαιο 5 H Μέϑοδος Gupta et al 5.1 Εισαγωγή Στην εργασία τους οι Gupta et al δείχνουν μία μέϑοδο fine-tuning του δικ- τύου του Johnson, έτσι ώστε να υπάρχει χρονική συνοχή του στυλ μεταξύ των frames. Με τη μέϑοδο αυτή δεν χρειάζεται να επανεκπαιδευτεί το δίκτυο από την αρχή και διατηρεί όλα τα πλεονεκτήματα όπως την ταχύτητα της εξαγ- ωγής αποτελέσματος (inference). 5.2 Αρχιτεκτονική Η αρχιτεκτονική και οι συναρτήσεις απώλειας είναι ίδιες με αυτές από τη μέϑοδο του Johnson et al. Ο επιπλέον παράγοντας που εισάγεται είναι η χρονική απώλεια. 5.2.1 Χρονική Απώλεια ´Οπως είδαμε στο subsection 4.3.2 στα βίντεο δημιουργείται ένα είδους τρεμοπαίγμα (flickering artifacts). Η εξαγωγή αποτελέσματος (inference) σε κάϑε frame παράγει διαφορετικό αποτέλεσμα, διότι από frame σε frame υπ- άρχει διαφορετική πληροφορία, έστω και αν η διαφορά αυτή είναι μικρή. Για να λυθεί αυτό το πρόβλημα, οι Gupta et al πρότειναν να γίνει fine-tuning του δικτύου, συγκεκριμένα έτσι ώστε να υπάρχουν καλύτερα αποτελέσματα σε βίντεο. ´Ετσι πρότειναν την εισαγωγή της χρονικής απώλειας Lt(pt−1,pt) = 1 HW k mt · pt − mt · p̃t+1 k2 F (5.1) ´Οπου pt είναι το frame τη στιγμή t, p̃t+1 είναι το frame τη στιγμή t + 1 μεταφερμένο (wrapped) στη στιγμή t και mt είναι η μάσκα κάλυψης (occlu- sion mask) του frame στη στιγμή t. 36
  • 40. 5.2.2 Διαδικασίες Μεταφοράς (Wrapping) και Κάλυψης (Occlu- sion) Για να μπορέσουμε να συγκρίνουμε σωστά το στυλ των frames μεταξύ τους, πρέπει το frame τη στιγμή t + 1 να το κάνουμε μεταφορά στη χρονική στιγμή t. Για να το καταφέρουμε αυτό χρησιμοποιούμε την πληροφορία της οπ- τικής ροής (optical flow) και της μάσκας κάλυψης (occlusion mask). Η οπ- τική ροή (optical flow) διαθέτει την πληροφορία της μετατόπισης δx,δy κάϑε pixel από frame σε frame. Η μάσκα κάλυψης (occlusion mask) είναι μια μάσκα (δηλαδή μία εικόνα), όπου με άσπρο χρώμα είναι η πληροφορία, που ϑέλουμε να κρατήσουμε (occlusion mask) και με μαύρο χρώμα η πληροφορία που ϑέλουμε να απορρίψουμε (not occluded). Σχήμα 5.1: Wrapper ´Οπως βλέπουμε στο Σχήμα 5.1, το τελικό αποτέλεσμα στο frame t και στο frame t + 1 είναι ίδιο. Με τη βοήϑεια της οπτικής ροής, μπορούμε να αναστρέψουμε τη στιγμή t+1 σε t. Στο συγκεκριμένο dataset MPI SENTINEL, πρέπει να αντιστρέψουμε τις τιμές της μάσκας κάλυψης και μετά να γίνει το εσωτερικό γινόμενο και στα 2 frames. Mε τη μάσκα κάλυψης επιλέγουμε ποια σημεία ϑέλουμε να έχουμε μέσα στο frame και έτσι τα 2 αυτά frames μπορούν να συγκριϑούν. Να σημειωϑεί ότι στη διαδικασία της εκπαίδευσης αυτά τα 2 frames πρέπει να έχουμε περάσει από το δίκτυο και να είναι stylized. 37
  • 41. 5.2.3 Εκπαίδευση Αφού έχουμε εκπαιδεύσει πλήρως το δίκτυο του Johnson et al, αλλάζουμε dataset και αρχίζουμε την εκπαίδευση στο MPI Sentinel [2]. To MPI Sentinel Dataset αποτελείται από πολλά frame by frame κινούμενες εικονοσειρές, που παρέχουν ταυτόχρονα τις μάσκες κάλυψης και τις οπτικές ροές σε κάϑε frame. Ακολουθούμε τα παρακάτω βήματα 1. Διαβάζουμε 5 frames με διάσταση 218 × 512 × 3. 2. Περνάμε το frame 1 από το δίκτυο για να πάρουμε ένα stylized frame 1. 3. Ενώνουμε (concatenate) το stylized frame 1 με το frame 1 κατά μήκος των κανανλιών και έτσι έχουμε το concatenated image 1 με διάσταση 218 × 512 × 6. 4. Περνάμε το concatenated image 1 από το δίκτυο και έχουμε το stylized concatenated image 1. Από αυτό μπορούμε να εξάγουμε τα style loss και content loss. 38
  • 42. 5. Ενώνουμε (concatenate) τo stylized concatenated image 1 με το frame 2 και έχουμε το concatenated image 2 με διάσταση 218 × 512 × 6. 6. Περνάμε το concatenated image 2 από το δίκτυο και έχουμε το styl- ized concatenated image 2. Από αυτό μπορούμε να εξάγουμε τα style loss, content loss και flow loss με το stylized concatenated image 2 σύμφωνα με αυτά που παρουσιάστηκαν στην ενότητα 5.2.2. 7. Ενώνουμε (concatenate) τo stylized concatenated image 2 με το frame 3 και έχουμε το concatenated image 3. 39
  • 43. 8. Περνάμε το concatenated image 3 από το δίκτυο και έχουμε το stylized concatenated image 3. Από αυτό μπορούμε να εξάγουμε τα style loss και content loss. 9. Ενώνουμε (concatenate) τo stylized concatenated image 3 με το frame 4 και έχουμε το concatenated image 4. 10. Περνάμε το concatenated image 4 από το δίκτυο και έχουμε το styl- ized concatenated image 4. Από αυτό μπορούμε να εξάγουμε τα style loss, content loss και flow loss με το stylized concatenated image 3, σύμφωνα με αυτά που παρουσιάστηκαν στην ενότητα 5.2.2. 11. Διαβάζουμε τα επόμενα 4 frames και επαναλαμβάνουμε την διαδικασία. Το κάνουμε αυτό για όλα τα frames του dataset. 5.3 Αποτελέσματα σε βίντεο Σε αυτό το σύνδεσμο μπορείτε να παρακολουϑήσετε το βίντεο που δείχνει τη σύγκριση των αποτελεσμάτων σε εικονοσειρές μεταξύ των μεϑόδων Johnson et al και Gupta et al. 40
  • 44. Παρακάτω 5.2 παρουσιάζονται κάποια frames για τη σύγκριση μεταξύ Johnson et al και Gupta et al. Με κύκλο είναι σημειωμένο ένα σημείο όπου φαίνεται η διαφορά των αποτελεσμάτων. Σχήμα 5.2: Σύγκριση αποτελεσμάτων μεταξύ Johnson et al και Gupta et al 41
  • 45. Κεφάλαιο 6 H Μέϑοδος των Huang και Belongie 6.1 Εισαγωγή Τα προηγούμενα μοντέλα που μελετήσαμε ήταν αρχιτεκτονικές per model per style. Αδιαμφισβήτητα, δημιουργήϑηκε η ανάγκη για δημιουργία μοντέλων, τα οποία ϑα μπορούν να εφαρμόσουν οποιοδήποτε στυλ. Στο παρόν κεφάλαιο ϑα αναλύσουμε τη μέϑοδο των Huang και Belongie [6], που χρησιμοποιεί το VGG19, μία δομή decoder και ένα επίπεδο adaptive instance. 6.2 Αρχιτεκτονική της μεϑόδου Η αρχιτεκτονική χωρίζεται σε 3 μέρη. Τον κωδικοποιητή (encoder), το επίπεδο adaptive instance και τον αποκωδικοποιητή (decoder). 6.2.1 Encoder Σχήμα 6.1: H δομή του κωδικοποιητή (encoder) στην αρχιτεκτονική των Huang και Belongie. Ο κωδικοποιητής (encoder) αποτελείται από το VGG19 μέχρι το επίπεδο relu4_1. Το χρησιμοποιούμε έτσι ώστε να κωδικοποιήσουμε το content και style. Το content κωδικοποιείται από το επίπεδο relu4_1 και το style από τα επίπεδα relu1_1, relu2_1, relu3_1 και relu4_1 με όλα τα επίπεδα να έχουν ίσα βάρη. Ο συγκεκριμένος κωδικοποιητής (encoder) χρησιμοποιείται 42
  • 46. pre-trained και δεν συμμετέχει στη αλλαγή των βαρών του κατά τη διάρκεια της εκπαίδευσης. Σχήμα 6.2: Η αρχιτεκτονική κωδικοποιητή (encoder). 6.2.2 Adaptive Instance Normalization Το Adaptive Instance Normalization είναι μια ειδική περίπτωση του In- stance Normalization που προτάθηκε από τους Huang και Belangie. Σκοπός αυτού του είδους η ικανοποίηση είναι να μπορεί να προσαρμοστεί σε οποιοδήποτε στυλ κατά τη διάρκεια της εκπαίδευσης και του inference. Μα- ϑηματικά περιγράφεται από την ακόλουϑη εξίσωση: AdaIN(x,y) = σ(y) x − µ(x) σ(x) ! + µ(y) (6.1) όπου x είναι το κωδικοποιημένο content, y είναι το κωδικοποιημένο style, σ(y) η τυπική απόκλιση του κωδικοποιημένου style, σ(x) η τυπική απόκλιση του κωδικοποιημένου content, µ(y) o μέσος όρος του κωδικοποιημένου style, µ(x) o μέσος όρος του κωδικοποιημένου content. Με άλλα λόγια προσπα- ϑεί να μετατοπίσει τη τυπική απόκλιση και το μέσο όρο του κωδικοποιη- μένου content στις τιμές της τυπικής απόκλισης και του μέσου όρου του κωδικοποιημένου style. Σε αντίθεση με όλες τις άλλες κανονικοποιήσεις που εμφανίστηκαν μέχρι τώρα, η συγκεκριμένη δεν έχει καμία παράμετρο που να χρειάζεται εκπαίδευση. 43
  • 47. 6.2.3 Ο Αποκωδικοποιητής (Decoder) Ο αποκωδικοποιητής (decoder) είναι ένας αντικατοπτρισμός του κωδικοποι- ητή (encoder) με τη διαφορά ότι τα επίπεδα MaxPooling έχουν αντικατασ- ταθεί από Upsampling για να μειωθεί το εφέ της σκακιέρας στη παραγόμενη εικόνα. Επίσης, μετά το τελευταίο επίπεδο 2D Convolution δεν ακολουθεί ReLU. O αποκωδικοποιητής (decoder) είναι το μόνο μέρος της αρχιτεκτονικής που εκπαιδεύεται. Ο σκοπός του είναι να μπορεί να αποκωδικοποιήσει τα δε- δομένα από το feature space στο image space και να μάθει να το κάνει αυτό σύμφωνα με το δεδομένο style και content. Σχήμα 6.3: Η αρχιτεκτονική του αποκωδικοποιητή (decoder). 6.3 H Εκπαιδευτική διαδικασία Σχήμα 6.4: Η αρχιτεκτονική της εκπαίδευσης. Αρχικά, περνάμε το style και το content από τον Encoder. Τα χαρακ- 44
  • 48. τηριστικά που παράγονται από τον κωδικοποιητή τροφοδοτούνται στο Adap- tive Instance Normalization και η έξοδος του καταλήγει στον αποκωδικοποι- ητή. Η παραγόμενη εικόνα περνάει ξανά από τον κωδικοποιητή και χρησι- μοποιούμε τα χαρακτηριστικά αυτά, έτσι ώστε να μετρήσουμε την απώλεια που έχει στο style και στο content. Για το style loss χρησιμοποιούμε τα χαρακτηριστικά των επιπέδων relu1_1, relu2_1, relu3_1 και relu4_1 του style και της παραγόμενης εικόνας. Για το content loss χρησιμοποιούμε τα χαρακτηριστικά του επιπέδου relu4_1 από τη παραγόμενη εικόνα και το αποτέλεσμα content/style (t) από το Adaptive Instance Normaliza- tion. Εφόσον έχουμε υπολογίσει τα κόστη μπορούμε με τη μέϑοδο του back- propagation να ανανεώσουμε τα βάρη του αποκωδικοποιητή. Στο τέλος της εκπαίδευσης έχουμε έναν αποκωδικοποιητή, που μπορεί να αποκωδικοποίη- σει σωστά από το feature space στο image space, με τη παραγόμενη εικόνα να έχει το στυλ του style image και το περιεχόμενο του content image. Ο αποκωδικοποιητής εκπαιδεύεται στα Dataset MS COCO και Wikiart. 6.3.1 Επίπεδο 2D Upsampling Το επίπεδο Upsampling χρησιμοποιείται ώστε να αυξήσουμε τις διαστάσεις τις δισδιάστατης πληροφορίας. Παράδειγμα σε TensorFlow x = t f . random . uniform ( shape =(1 , 2 ,2 , 3 ) ) print ( x ) ´Εξοδος t f . Tensor ( [[[[0.3989674 0.713215 0.62062943] [0.33789444 0.02036715 0.9366275 ] ] [[0.21986496 0.41404057 0.04343021] [0.13876796 0.14224517 0.68413365]]]] , shape =(1 , 2 , 2 , 3) y = t f . keras . layers . UpSampling2D ( size =(1 , 2 ) ) ( x ) print ( y ) ´Εξοδος t f . Tensor ( [[[[0.3989674 0.713215 0.62062943] [0.3989674 0.713215 0.62062943] [0.33789444 0.02036715 0.9366275 ] [0.33789444 0.02036715 0.9366275 ] ] [[0.21986496 0.41404057 0.04343021] [0.21986496 0.41404057 0.04343021] 45
  • 49. [0.13876796 0.14224517 0.68413365] [0.13876796 0.14224517 0.68413365]]]] ´Οπως βλέπουμε αυξάνονται οι διαστάσεις σύμφωνα με rows × size[0] και columns × size[1]. 6.4 Συναρτήσεις Κόστους 6.4.1 Απώλεια του Content H απώλεια του content εκφράζεται από την ευκλείδεια απόσταση μεταξύ των χαρακτηριστικών του content και των χαρακτηριστικών της παραγόμενης εικόνας, σύμφωνα με τη relu4_1 του κωδικοποιητή. Lc = ||f (g(t)) − t||2 (6.2) όπου t είναι το κωδικοποιημένο content/style μετά την επεξεργασία του Adaptive Instance Normalization, g(t) η αποκωδικοποιημένη πληροφορία του t και f (g(t)) η κωδικοποιημένη πληροφορία του g(t). 6.4.2 Απώλεια του Style H απώλεια του style περιγράφεται από Ls = L X i=1 ||µ(ϕi(g(t))) − µ(ϕi(s))||2 + L X i=1 ||σ(ϕi(g(t))) − σ(ϕi(s))||2 (6.3) ´Οπου s είναι τα χαρακτηριστικά του style, t είναι το κωδικοποιημένο con- tent/style μετά την επεξεργασία του Adaptive Instance Normalization, g(t) η αποκωδικοποιημένη πληροφορία του t, ϕi το επίπεδο που χρησιμοποιεί- ται από το VGG19, σ η τυπική απόκλιση και µ ο μέσος όρος. Ουσιαστικά, βρίσκουμε την ευκλείδεια απόσταση μεταξύ των μέσων όρων και των τυπικών αποκλίσεων. 46
  • 50. 6.5 Αποτελέσματα σε εικόνες Αποτελέσματα πλήρως εκπαιδευμένου αποκωδικοποιητή. ´Ενας αποκ- ωδικοποιητής παράγει όλα τα παρακάτω αποτελέσματα. Σχήμα 6.5: Αποτελέσματα σε εικόνες 6.6 Υλοποίηση Υπάρχουν κάποια βασικά σημεία που πρέπει να προσέξουμε κατά την υλοποίηση αυτής της μεθόδου. • Για το VGG19 δεν χρησιμοποιούμε το pre-trained μοντέλο που μας δίνει η TensorFlow. Εδώ χρειάζεται να χρησιμοποιήσουμε μια διαφορετική έκδοση του, το VGG19-normalized, όπου τα βάρη του είναι κανον- ικοποιημένα. Συγκεκριμένα, από το repo αυτό μπορούμε να κατεβά- σουμε τα βάρη σε numpy array. Από εκεί και πέρα χρησιμοποιούμε τις συναρτήσεις που προτείνει έτσι ώστε να φορτωϑούν σωστά τα βάρη, κα- ϑώς και για να δημιουργηϑούν σωστά οι δομές των μοντέλων κωδικοποι- ητών και αποκωδικοποιητών. • Ο αποκωδικοποιητής εκπαιδεύεται στα MSCOCO και Wikiart dataset. Σε κάϑε πέρασμα διαλέγουμε μια εικόνα ως content από το MSCOCO και μια εικόνα για ως style από το Wikiart. Αυτό μπορεί να γίνει και σε batches. Στη συγκεκριμένη υλοποίηση χρησιμοποιείται batch size 8. • Για την εκπαίδευση χρησιμοποιείται σταδιακή μείωση του ρυθμού εκ- μάθησης, έτσι ώστε να αποφευχϑούν κορεσμός ("κάψιμο") στα pixel της 47
  • 51. παραγόμενης εικόνας. Συγκεκριμένα, χρησιμοποιήθηκαν οι παράμετροι από τον πίνακα 6.1. Τα αποτελέσματα του σχήματος 6.6 έγιναν σε ένα μικρό τεστ με παραμέτρους από τον πίνακα 6.2. Σχήμα 6.6: Αποτελέσματα με και χωρίς σταδιακή μείωση του ρυθμού εκ- μάθησης. • O αλγόριϑμος ακολουϑεί το παρακάτω Διάγραμμα Ροής. Προφανώς, ανάλογα την υλοποίηση που ϑα ακολουϑηϑεί μπορεί να τροποποιηϑεί. LEARNING RATE 1e − 4 LR DECAY RATE 5e − 5 DECAY STEPS 1.0 Πίνακας 6.1: Παράμετροι σταδιακής μείωσης ρυϑμού εκμάϑησης. 48
  • 52. Content Layers relu4_1 Style Layers relu1_1,relu2_1,relu3_1,relu4_1 Style Weight 2 Number of images for training 26 sets of content/style Epochs 4 Πίνακας 6.2: Παράμετροι τεστ. 6.7 Χαρακτηριστικά και Απόδοση H απόδοση της μεθόδου μετρήϑηκε στον υπολογιστή από το Εργαστήριο Ηλεκτρικών Κυκλωμάτων, Επεξεργασίας Σημάτων και Εικόνων με GPU TI- TAN Xp και στη CPU ενός laptop Intel-Core i7-4510u CPU @ 2.00GHz και είναι ο μέσος όρος 100 εικόνων. ´Εχουμε διαλέξει μια αρκετά δυνατή GPU και μια απλή CPU, έτσι ώστε να δούμε την απόδοση σε διαφορετικά συστήματα. ´Ονομα Δικτύου AdaIn Μέγεϑος 28M Απόδοση GPU 0.02026 seconds Απόδοση CPU 1.24720 seconds Πίνακας 6.3: Χαρακτηριστικά και Απόδοση Οι χρόνοι αυτοί είναι για όλη την αρχιτεκτονική από τον κωδικοποιητή μέχρι και τον αποκωδικοποιητή. Το μέγεϑος είναι μόνο για τον κωδικοποιητή και τον αποκωδικοποιητή. 49
  • 53. Σχήμα 6.7: Αποτέλεσματα μεταξύ Johnson et al, Gupta et al και Huang/Be- longie Τα αποτελέσματα στο 6.7 παράχϑηκαν με το δίκτυο όπου παράχϑηκαν και τα 6.5. Φαίνεται ότι το στυλ Wassily Kandinsky, Composition VII με το συγκεκριμένο βίντεο παράγει άσχημα αποτελέσματα. Το φόντο (backround) του βίντεο επειδή είναι "κενό" φαίνεται ότι δυσκολεύει πολύ το δίκτυο να κωδικοποιήση τη πληροφορία του περιεχομένου με αποτέλεσμα να μην μπορεί να εφαρμοστεί σωστά το στιλ. 50
  • 54. Κεφάλαιο 7 Ανάπτυξη Εφαρμογής σε περιβάλλον Android Με το δίκτυο που δημιουργήσαμε στο Κεφάλαιο 4, που βασίζεται στη μέϑοδο του Johnson et al, δοκιμάσαμε να το εφαρμόσουμε για μια Style Transfer εφαρμογή για κινητά στη πλατφόρμα Android. 7.1 Χαρακτηριστικά της Εφαρμογής Το σενάριο που ϑέλουμε να υποστηρίζει η εφαρμογή που ϑα αναπτύξουμε είναι το ακόλουϑο. Θέλουμε με την εφαρμογή να μπορούμε να τραβάμε ένα βίντεο, ύστερα να κάνουμε κάνουμε μεταφορά στυλ σε κάϑε frame και τέλος να γίνεται η σύνϑεση των frames σε ένα νέο stylized βίντεο. 7.2 Υλοποίηση Εφαρμογής Για τη δημιουργία της εφαρμογής χρησιμοποιήσαμε για αρχή την έτοιμη εφαρ- μογή Style Transfer, που δίνει η TensorFlow, έτσι ώστε να έχουμε κάποια βασικά δομικά στοιχεία της εφαρμογής, όπως διάφορα πακέτα, που έχουν σχέση με τα νευρωνικά δίκτυα, βασικές συναρτήσεις για την επεξεργασία εικόνας και όποιο άλλο βασικό χαρακτηριστικό χρειαστεί. 7.2.1 Μετατροπή δικτύου σε TensorFlow Lite Το TensorFlow Lite είναι ένα σετ από εργαλεία, που βοηθάνε στο να δώ- σουν τη δυνατότητα σε ένα δίκτυο να τρέχει εύρωστα και με ικανοποιητική ταχύτητα σε συστήματα χαμηλότερων δυνατοτήτων, όπως Android, iOS, ενσωματωμένα συστήματα Linux και μικροελεγκτές. Με αυτό το τρόπο, γίνε- ται δυνατό να τρέξει ένα νευρωνικό δίκτυο σε κάποιο από αυτά τα συστή- ματα πλέον με πολύ μεγαλύτερη ταχύτητα, έχει μικρή κατανάλωση ισχύος, δεν χρειάζεται σύνδεση στο διαδίκτυο, εφόσον τα δεδομένα παραμένουν στη 51
  • 55. συσκευή. ´Ολη η διεργασία γίνεται από την ίδια τη συσκευή. Το μέγεθος που καταλαμβάνει το δίκτυο είναι πολύ πιο μικρό, οπότε μπορεί και να εγκατασ- ταθεί σε οποιοδήποτε πλατφόρμα. Πρέπει να δοθεί ιδιαίτερη προσοχή στη δομή του δικτύου, διότι προς το παρόν το framework του TensorFlow Lite δεν μπορεί να μετατρέψει όλες τις πράξεις από TensorFlow σε TensorFlow Lite. Υπάρχει αυτός ο οδηγός, που δείχνει ποιες πράξεις υποστηρίζονται. Ο τρόπος με τον οποίο αναπ- τύχθηκε το μοντέλο για τη μέϑοδο του Johnson et al είναι ιδανικός για τη μετα- τροπή. Συγκεκριμένα, ϑα φτιάξουμε 2 μοντέλα. ´Ενα μοντέλο που ϑα παράγει αποτελέσματα με ακρίβεια f loat16 και ένα μοντέλο που ϑα κάνει παράγει αποτελέσματα με ακρίβεια int8. Αυτή η μέϑοδος ονομάζεται post-training quantization, διότι κβαντίζει την ακρίβεια των βαρών, αφού έχει εκπαιδευτεί το δίκτυο. Μοντέλο Float16 inputs = t f . keras . Input ( shape =[256 , 256 , 3] , batch_size= None) # Johnson Model outputs = training_model ( inputs ) savedModel = t f . keras . Model ( inputs , outputs ) converter = t f . l i t e . TFLiteConverter . from_keras_model ( savedModel ) converter . optimizations = [ t f . l i t e . Optimize .DEFAULT] converter . target_spec . supported_types = [ t f . float16 ] tflite_quant_model = converter . convert ( ) Αν συγκρίνουμε το tflite μοντέλο χωρίς float16 quantization με το float16 quantized μοντέλο μπορούμε να δούμε ότι καταλαμβάνει σχεδόν τη μισή χωρητικότητα. −rw−r−−r−− 1 root root 3.3M Sep 13 09:31 model_float16_quant . t f l i t e −rw−r−−r−− 1 root root 6.5M Sep 13 09:31 model . t f l i t e Το f loat16 tflite μοντέλο μπορεί να τρέξει σε GPU και CPU. Ανάλογα το hardware που ϑα το τρέξει μπορεί να υπάρχει αύξηση της ταχύτητας παραγ- ωγής τελικού αποτελέσματος, διότι κάποιες GPU μπορούν να κάνουν πράξεις με f loat16. Στην περίπτωση που το hardware δεν είναι ικανό να τρέξει το μοντέλο σε f loat16, το μοντέλο κάνει upsample τα βάρη σε f loat32 πριν αρ- χίσει να παράγει αποτελέσματα. Μοντέλο Int8 Για να δημιουργήσουμε αυτό το μοντέλο χρειαζόμαστε ένα αντιπροσωπευτικό dataset των εισόδων που ϑα έχει το δίκτυο, έτσι ώστε να μετρήσει το συνολικό δυναμικό εύρος τιμών για να μπορέσει να βαϑμονομήσει και να κβαντίσει τα βάρη του δικτύου. 52