Rob174 / PIR

1 stars 0 forks source link

Revoir publication Front Moving Object Behavior Prediction System Exploiting Deep Learning Technology for ADAS Applications #8

Open Rob174 opened 3 years ago

Rob174 commented 3 years ago

https://drive.google.com/file/d/1VBbEpWDkMj7cCfL1WQHD2GZZQIDkDbJA/view?usp=sharing

Refaire le réseau

Matthieu-Jck commented 3 years ago

Pour implémenter facilement le modèle déjà mis à jour, suivre les instructions plus bas (commentaire du 25 Mars). To implement the already up-to-date model, follow the instructions lower on this issue (comment from March 25th).

Matthieu-Jck commented 3 years ago

https://github.com/axon-research/c3d-keras Modèle du C3D

Pré-entrainé Utilise la base de donné sports-1m-dataset (https://cs.stanford.edu/people/karpathy/deepvideo/)

Matthieu-Jck commented 3 years ago

Layer (type) // Output Shape // Param #



conv1 (Conv3D) (None, 16, 112, 112, 64) 5248


pool1 (MaxPooling3D) (None, 16, 56, 56, 64) 0


conv2 (Conv3D) (None, 16, 56, 56, 128) 221312


pool2 (MaxPooling3D) (None, 8, 28, 28, 128) 0


conv3a (Conv3D) (None, 8, 28, 28, 256) 884992


conv3b (Conv3D) (None, 8, 28, 28, 256) 1769728


pool3 (MaxPooling3D) (None, 4, 14, 14, 256) 0


conv4a (Conv3D) (None, 4, 14, 14, 512) 3539456


conv4b (Conv3D) (None, 4, 14, 14, 512) 7078400


pool4 (MaxPooling3D) (None, 2, 7, 7, 512) 0


conv5a (Conv3D) (None, 2, 7, 7, 512) 7078400


conv5b (Conv3D) (None, 2, 7, 7, 512) 7078400


zeropad5 (ZeroPadding3D) (None, 2, 8, 8, 512) 0


pool5 (MaxPooling3D) (None, 1, 4, 4, 512) 0


flatten_1 (Flatten) (None, 8192) 0


fc6 (Dense) (None, 4096) 33558528


dropout_1 (Dropout) (None, 4096) 0


fc7 (Dense) (None, 4096) 16781312


dropout_2 (Dropout) (None, 4096) 0


fc8 (Dense) (None, 487) 1995239


Total params: 79,991,015 Trainable params: 79,991,015 Non-trainable params: 0


Matthieu-Jck commented 3 years ago

Le programme se lance, le modèle est généré, les poids lui sont ajoutés, la vidéo est téléchargée et on obtiens les résultats suivants avec l'analyse:

[Info] Loading a sample video... Saving class probabilitities in probabilities.png Position of maximum probability: 367 Maximum probability: 0.57881 Corresponding label: basketball

Top 5 probabilities and labels: basketball: 0.57881 volleyball: 0.15895 streetball: 0.06424 freestyle wrestling: 0.03421 greco-roman wrestling: 0.03421

La vidéo est effectivement une vidéo de basketball

Matthieu-Jck commented 3 years ago

INSTRUCTIONS IMPLEMENTATION RAPIDE C3D:

INSTRUCTIONS QUICK IMPLEMENTATION C3D:

Nous avons modifié le code pour qu'il fonctionne avec python3, avons modifié les parties du code obsolète (remplacement de caffe_np2, proto...) et mis à jour certaines lignes du code pour qu'elles s'alignent avec les changements de leurs packages.

Pour lancer le modèle sur un python notebook de Google Collab ( colab.research.google.com ). Google collab a déjà la plupart des packages installés même ceux qui sont difficilement trouvables car remplacés par d'autres versions ou fusionnés avec d'autres packages, donc je recommande son utilisation pour tester rapidement ce modèle.

1. Créer un nouveau notebook 1. Create a notebook on colab.research.google.com (helpful to have all the required packages up to date).

2. Modifier -> Paramètres du notebook -> Accélérateur matériel -> GPU 2. Modify -> Notebook parameter -> Hardware accelerator -> GPU

3. Lancer les quatre lignes de code suivantes dans l'ordre (ctrl+entree pour executer): 3. Use the four following lines of codes in order (ctrl+return to execute): image lien du git: https://github.com/Rob174/c3d-keras.git

4. Vous devriez avoir: 4. You should have: image La vidéo suivante est analysée par l'algorithme: https://www.youtube.com/watch?v=dM06AMFLsrc Et les probabilité obtenues sont: image L'algorithme reconnais bien le basket

5. Pour analyser une autre vidéo:

En principe l'algorithme reconnais bien les vidéos de sport


A faire: essayer d'adapter le modèle pour qu'il reconnaisse les posture des piétons, selon s'ils courent ou non par exemple. Le modèle fonctionne de base sur des vidéos donc il semble pratique dans notre cas

Matthieu-Jck commented 3 years ago

Tentative de faire du transfert learning (et peut-être fine-tuning si j'y arrive)

Sources:

  1. Transfert learning et fine-tuning: https://keras.io/guides/transfer_learning/
  2. Fonctionnement des couches sous keras: https://stackoverflow.com/questions/42883547/intuitive-understanding-of-1d-2d-and-3d-convolutions-in-convolutional-neural-n
  3. Site du modèle C3D: https://vlg.cs.dartmouth.edu/c3d/

A faire:

1. Passer des 487 classes de sports-1m aux 23 de NuScenes 🕥 Liste des classes de nuScenes: _animal human.pedestrian.adult human.pedestrian.child human.pedestrian.construction_worker human.pedestrian.personal_mobility human.pedestrian.police_officer human.pedestrian.stroller human.pedestrian.wheelchair movable_object.barrier movable_object.debris movable_object.pushable_pullable movable_object.trafficcone static_object.bicyclerack * vehicle.bicycle vehicle.bus.bendy vehicle.bus.rigid vehicle.car vehicle.construction vehicle.emergency.ambulance vehicle.emergency.police vehicle.motorcycle vehicle.trailer vehicle.truck

2. Trouver le format d'images pris en entrée par le modèle, le modifier ou modifier les inputs de nuscenes en fonction 🕥

Format actuel des images envoyées par l'équipe en charge des datasets: [{ "scene": "samples/CAM_FRONT/n015-2018-07-18-11-07-57", "images": ["samples/CAM_FRONT/n015-2018-07-18-11-07-57+0800CAM_FRONT1531883531412477.jpg", "samples/CAM_FRONT/n015-2018-07-18-11-07-57+0800CAM_FRONT1531883530412470.jpg", "samples/CAM_FRONT/n015- 2018-07-18-11-07-57+0800CAM_FRONT1531883532412464.jpg", "samples/CAM_FRONT/n015-2018-07-18-11-07-57+0800CAM_FRONT1531883530912460.jpg", "samples/CAM_FRONT/n015-2018-07-18-11-07-57+0800CAM_FRONT1531883535412467.jpg", "samples/CAM_FRONT/n015-2018-07-18-11-07-57+0800CAM_FRONT1531883733512463.jpg"], "categories": ["vehicle.truck", "human.pedestrian.construction_worker", "movable_object.pushable_pullable", "vehicle.construction", "movable_object.trafficcone", "human.pedestrian.adult", "movable_object.barrier", "vehicle.car", "movable_object.debris"] }]

3. Ré-entrainer le modèle 🔴

Emma-bau commented 3 years ago

Solution peut être pour passer des images (je n'ai pas encore regardé tout le code donc je ne suis pas sûre) dans test_model.py, Supprimer la ligne 156 VideoCapture dans le while, si besoin de redimensionnement, boucler sur toutes les images img = cv2.imread('image.jpg',cv2.IMREAD_COLOR) au lieu de cv2.read() ligne 160 sinon juste besoin des images sous forme d'array dans vid ligne 164

Emma-bau commented 3 years ago

Pour les labels : ligne 150 du même fichier, print("[Info] Loading labels...") with open('sports1m/labels.txt', 'r') as f: labels = [line.strip() for line in f.readlines()] print('Total labels: {}'.format(len(labels))

sports1m/labels.txt introuvable sur le git dans le dossier en tout cas, comment y accéder ?

Matthieu-Jck commented 3 years ago

Pour les labels : ligne 150 du même fichier, print("[Info] Loading labels...") with open('sports1m/labels.txt', 'r') as f: labels = [line.strip() for line in f.readlines()] print('Total labels: {}'.format(len(labels))

sports1m/labels.txt introuvable sur le git dans le dossier en tout cas, comment y accéder ?

Le fichier est téléchargé par le script "do_everything.sh" quand on l'exécute, il n'est pas de base dans le git