ntua-cvsp-lab / DSP_LabSupport

Here the students of the 2019-2020 DSP course can submit questions regarding the course to the teaching assistants.
7 stars 3 forks source link

[LAB 2] 3.1 #62

Open DimLiak opened 4 years ago

DimLiak commented 4 years ago

Καλησπέρα, Λόγω του μεγάλου πλήθους των αρχείων προσπάθησα να βρώ κάποια συναρτηση που να κανει load πολλα .npz αρχεία, αλλα δεν βρήκα κάποια έτοιμη συνάρτηση. Επίσης, παρατήρησα ότι η np.load επιστρέφει έναν δέικτη σε μία θέση μνήμης, αλλα και πάλι δεν βρήκα τρόπο να τον προσπελάσω. Υπάρχει κάποιος απλός και γρήγορος τρόπος που μπορούμε να χρησιμοποιήσουμε για να φορτώσουμε τα αρχεία αυτά ή πρέπει να το υλοποιήσουμε ξεχωριστα για το καθένα? Ευχαριστω!

cgaroufis commented 4 years ago

Καλησπέρα,

Αν κατάλαβα το πρόβλημα, μπορείς με χρήση της εντολής dirs = os.listdir(directory_name) (πρέπει να κάνεις import το πακέτο os, δε θέλει εγκατάσταση) να πάρεις μια λίστα με όλα τα αρχεία που είναι σε ένα συγκεκριμένο directory. Συνεπώς, μπορείς να βάλεις όλα τα αρχεία της άσκησης σε ένα συγκεκριμένο path (έστω σε έναν φάκελο files μέσα στο working directory σου), να πάρεις μία λίστα με τα filenames σου μέσω της dirs = os.listdir('./files') και μετά σε ένα for-loop να επεξεργάζεσαι το κάθε αρχείο ξεχωριστά, τύπου:

for filename in dirs: x = np.load('./files/'+filename) ......

Καλή συνέχεια, Χρήστος

DimLiak commented 4 years ago

Ωραια, αυτό το κομμάτι το υλοποίησα! Στην συνέχεια όμως μου παρουσιάστηκε και άλλο πρόβλημα: στο σημείο υπολογισμού των ΜΤΕ οι προσπελάσεις στην μνήμη είναι υπερβολικά πολλές (120+120+40) για τα acc, gyr, hrm αντίστοιχα, 117 παραθυρώσεις των σημάτων (μήκους 400 δειγμάτων) και τα 25 φιλτρα με αποτέλεσμα μόνο για τον υπολογισμό των ΜΤΕ των acc χρειάζονται 12011725*400 =~140 millions προσπελάσεις στην μνήμη και έτσι χρειάζεται υπερβολική διάρκεια για την ολοκλήρωση του. Προσπάθησα να εκτελέσω μέσα στα εμφωλευμενα λοοπς όλες τις πράξεις για τον υπολογισμό των ΜΤΕ έτσι ώστε να χρησιμοποιώ λιγότερο μέρος μνήμης αλλά και πάλι δεν είδα εμφανή διαφορά. Τι προτείνετε να κάνω για να μην χρειάζεται 1 και 2 ώρες για την ολοκλήρωση του υπολογισμου?

cgaroufis commented 4 years ago

Θεωρητικά, αν υλοποιήσεις όλο το κομμάτι 2 της άσκησης ως μία συνάρτηση (με εισόδους σήμα, αριθμό φίλτρων, fs, win length + win overlap) με 2 for loops (ένα για το χειρισμό του κάθε παραθυρου, ένα για το φιλτράρισμα), το συνολικό runtime θα παίζει στα 5-10min για όλο το feature extraction - απο εκεί και πέρα, δεν ξέρω...

Χρήστος

EDIT: Κάτι που μπορείς να κάνεις για να μην περιμένεις 1 και 2 ώρες σε κάθε rerun, αν δε λυθεί το παραπάνω πρόβλημα, είναι να αποθηκεύσεις σε ένα npz file τα features σου, και να τα φορτώνεις πριν την εφαρμογή των επόμενων βημάτων (pca/kmeans)

DimLiak commented 4 years ago

Καλησπέρα, ουσιαστικά έτσι το είχα κάνει αλλά σε loops, βέβαια λύθηκε εν μέρη το πρόβλημα! Σε κάθε κλήση καλούσα της gaborfilt() που της είχα βάλει να σχηματίζει εσωτερικά ένα plot κάθε φορά, και όταν το αφαίρεσα μειώθηκε αρκετα ο χρόνος καθυστέρησης. Βεβαια ο χρόνος αναμονής ειναι περίπου στα 20 min για την κατασκευή όλου του πινακα γιατι για κάθε γραμμή του θέλει 5sec. Θέλετε στο παραδοτέο πέρα από τον κώδικα να φτιάξω και ένα αρχείο που να περιέχει τον πίνακα αυτόν, έτσι ώστε αν τον τρέξετε να μην καθυστερήσει τόσο?

cgaroufis commented 4 years ago

Όχι, δεν είναι απαραίτητο - ειδικά δεδομένου του πιθανου μεγέθους του αρχείου (οπότε μπορεί το παραδοτέο να υπερβαίνει σε μέγεθος το όριο του mycourses).

Καλή συνέχεια, Χρήστος