Open Rob174 opened 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).
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/)
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
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
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):
lien du git: https://github.com/Rob174/c3d-keras.git
4. Vous devriez avoir:
4. You should have:
La vidéo suivante est analysée par l'algorithme: https://www.youtube.com/watch?v=dM06AMFLsrc
Et les probabilité obtenues sont:
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
Sources:
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 🔴
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
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 ?
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
https://drive.google.com/file/d/1VBbEpWDkMj7cCfL1WQHD2GZZQIDkDbJA/view?usp=sharing
Refaire le réseau