Skip to content

pmpakos/LRCN_ActivityRecognition_Project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Long-term Recurrent Convolutional Networks for Visual Recognition and Description.

Useful links :


  1. To dataset που χρησιμοποιούμε είναι το UCF-101. Κατέβασμα dataset (frames & flow images) και εκτέλεση των scripts extraction_{frames,flow} Η χρήση flow images θα αποδειχθεί στη συνέχεια χρήσιμη γιατί μαθαίνει features που μέσω των rgb εικόνων δεν μπορούν να συλληφθούν.

  2. Tα αρχεία .py περιέχουν βοηθητικές συναρτήσεις που θα χρησιμοποιηθούν αργότερα στα .ipynb notebooks.

Στο custom_models.py ορίζονται τα δίκτυα που δοκίμασα, με τα πιο σημαντικά εξ αυτών να είναι το CaffeDonahueFunctional και το LSTMCaffeDonahueFunctional.

Στο image_processing.py υπάρχουν συναρτήσεις προεπεξεργασίας των frames και των flow_images.

Στο inception_utils.py ορίζεται το δίκτυο που βασίζεται στο έτοιμο δίκτυο InceptionV3 του Keras, με freeze των κατάλληλων layers κάθε φορά. Χρησιμοποείται μόνο στο SingleFrameTraining_Inception_RGB.ipynb.

Στο LR_SGD.py ορίζεται ο ένας βελτιωμένος SGD optimizer, με τις αλλαγές που πρότεινε το δίκτυο του Caffenet.

Στο LRN2D.py ορίζεται το Local Response Normalisation layer, το οποίο είχε αφαιρεθεί από τις τελευταίες εκδόσεις του Keras.

Στο utils.py ορίζονται κάποιες συναρτήσεις που φορτώνουν τα βάρη από το ένα δίκτυο στο άλλο, κατά τη μετάβαση από το single frame network στο lstm με τα time-distributed layers. Επίσης η συνάρτηση που αναλαμβάνει το compile του μοντέλου με τον custom SGD optimizer.

Στο video_processing.py ορίζονται οι συναρτήσεις προεπεξεργασίας των video για το LSTM network.

Στο results_functions.py ορίζονται οι συναρτήσεις παρουσίασης των τελικών αποτελεσμάτων.


Single Frame Network

Το συγκεκριμένο δίκτυο προέκυψε από το CaffeNet, με τροποποιήσεις στα layers. Αρχικά υπάρχουν 5 convolutional layers, σε συνδυασμό με max-pooling layers, ενώ στη συνέχεια 3 dense layers, με το απαραίτητο dropout ανάμεσα τους για αποφυγή overfitting.

  1. Notebooks SingleFrameTraining_Caffenet_RGB & SingleFrameTraining_Caffenet_FLOW. Στα συγκεκριμένα γίνεται το training του δικτύου που παίρνει ξεχωριστά frames κάθε video, και εκπαιδεύεται να τα αναγνωρίζει. Λόγω του περιορισμένου μεγέθους στο dataset, κάθε frame crop-άρεται τυχαία, και προκύπτουν διαφορετικές "εκδοχές" κάθε τέτοιας εικόνας.

Το δίκτυο που προκύπτει θα χρησιμεύσει αργότερα σαν pretrained δίκτυο για το πιο πολύπλοκο LSTM network που θα αναλάβει να συλλάβει και χρονικές συσχετίσεις μεταξύ των frames.

  1. Notebook SingleFrameTraining_Inception_RGB. Εξετάζεται ένα διαφορετικό δίκτυο, που βασίζεται σε έτοιμη υλοποίηση του Keras, και σε single frame δίνει καλύτερα αποτελέσματα ταξινόμησης. Δεν υπάρχει υλοποίηση για FLOW, καθώς το training θα απαιτούσε πολύ περισσότερες επαναλήψεις από το RGB.

  2. Notebook SingleFramePredictions. Δοκιμές διαφορετικών συνδυασμών των frame και flow networks, δίνοντας μεγαλύτερη βαρύτητα σε ένα δίκτυο κάθε φορά. Χρησιμοποείται η τεχνική late fusion, δηλαδή κάθε δίκτυο δίνει δική του πρόβλεψη και στη συνέχεια γίνεται averaging των προβλέψεων. Παρατηρούμε ότι ο καλύτερος συνδυασμός δίνεται για 2/3 flow, 1/3 rgb προβλέψεις, δίνοντας μεγαλύτερη βαρύτητα δηλαδή στο τι προβλέψεις δίνονται από flow images. Για συνδυασμό με το inception rgb ο καλύτερος συνδυασμός είναι 1/2 flow, 1/2 rgb.


LRCN Network

Το νέο δίκτυο εφαρμόζει ένα LSTM layer πάνω από το πρώτο dense layer του single frame network. Στο paper παρατήρησαν ότι δεν άξιζε να παραμείνει και το δεύτερο dense layer, καθώς δεν ανέβαζε αισθητά την ακρίβεια στο validation set. Όσο αυξάνεται το πλήθος των lstm units (από 256 έως 1024), τόσο καλύτερα αποτελέσματα δίνει, με πιο "βαρύ" δίκτυο όμως.

  1. Notebooks VideoTraining_LSTM_RGB & VideoTraining_LSTM_FLOW. Γίνεται εκπαίδευση του δικτύου αυτού με random 16-frames clips από το dataset, βοηθώντας έτσι και στο augmentation του dataset.

  2. Notebook VideoTraining_LSTM_FLOW_1024. Γίνεται εκπαίδευση του δικτύου για flow images με 1024 αντί για 512 lstm units.

  3. Notebook VideoSequencePredictions. Λαμβάνονται 16-frame clips από κάθε video, με stride 8. Παίρνοντας το average των προβλέψεων για κάθε τέτοιο clip, λαμβάνουμε την συνολική πρόβλεψη για το video.


  1. Στο app.py γίνεται αξιολόγηση των διαφόρων ταξινομητών και συνδυασμών αυτών για ένα βίντεο ξεχωριστά.

  2. Στο Final_Results γίνεται παρουσίαση διαφόρων αποτελεσμάτων.

  3. Στο φάκελο Results παρουσιάζονται τα αποτελέσματα που παράγονται κατά τη διάρκεια του testing στα notebooks SingleFramePredictions & VideoSequencePredictions. Εκεί υπάρχουν αναλυτικά ανά μοντέλο και συνδυασμό αυτών:

a) Οι προβλέψεις για κάθε video του test set

b) Confusion Matrices που οπτικοποιούν το πόσο "καλό" είναι κάθε μοντέλο

c) Πόσα video ανά κατηγορία προέβλεψε σωστά κάθε μοντέλο.


Τα αποθηκευμένα βάρη των εκπαιδευμένων μοντέλων μπορούν να βρεθούν εδώ.

  1. pretrained_model : Τα βάρη που στο paper χρησιμοποιούν σαν initialization για το single frame network, pretrained στο ILSVRC-2012 dataset.

  2. caffenet_single_rgb

  3. caffenet_single_flow

  4. inception_rgb

  5. lstm_rgb

  6. lstm_flow

  7. lstm_flow_1024

About

Activity Recognition Project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published