Une implémentation étape par étape de DeepBehavior, Deep Learning Toolbox pour l’analyse automatisée du comportement

Behavior

Your institution must subscribe to JoVE's Behavior section to access this content.

Fill out the form below to receive a free trial or learn more about access:

 

Summary

Le but de ce protocole est d’utiliser des filets neuronaux convolutionnels préconstruits pour automatiser le suivi du comportement et effectuer une analyse détaillée du comportement. Le suivi du comportement peut être appliqué à toutes les données vidéo ou séquences d’images et est généralisable pour suivre n’importe quel objet défini par l’utilisateur.

Cite this Article

Copy Citation | Download Citations | Reprints and Permissions

Shukla, S., Arac, A. A Step-by-Step Implementation of DeepBehavior, Deep Learning Toolbox for Automated Behavior Analysis. J. Vis. Exp. (156), e60763, doi:10.3791/60763 (2020).

Please note that all translations are automatically generated.

Click here for the english version. For other languages click here.

Abstract

Comprendre le comportement est la première étape pour vraiment comprendre les mécanismes neuronaux dans le cerveau qui le conduisent. Les méthodes traditionnelles d’analyse comportementale ne saisissent souvent pas la richesse inhérente au comportement naturel. Ici, nous fournissons des instructions détaillées étape par étape avec des visualisations de notre méthodologie récente, DeepBehavior. La boîte à outils DeepBehavior utilise des cadres d’apprentissage profond construits avec des réseaux neuronaux convolutionnels pour traiter et analyser rapidement les vidéos comportementales. Ce protocole démontre trois cadres différents pour la détection d’objets uniques, la détection d’objets multiples et le suivi tridimensionnel (3D) des articulations humaines. Ces cadres renvoient les coordonnées cartésiennes de l’objet d’intérêt pour chaque image de la vidéo comportementale. Les données recueillies à partir de la boîte à outils DeepBehavior contiennent beaucoup plus de détails que les méthodes traditionnelles d’analyse du comportement et fournissent des informations détaillées sur la dynamique du comportement. DeepBehavior quantifie les tâches de comportement d’une manière robuste, automatisée et précise. Après l’identification du comportement, le code de post-traitement est fourni pour extraire des informations et des visualisations des vidéos comportementales.

Introduction

Une analyse détaillée du comportement est essentielle pour comprendre les relations cérébrales et comportementales. Il ya eu de nombreux progrès passionnants dans les méthodologies pour l’enregistrement et la manipulation des populations neuronales avec une résolution temporelle élevée, cependant, les méthodes d’analyse du comportement n’ont pas développé au même rythme et sont limités à des mesures indirectes et une approche réductionniste1. Récemment, des méthodes basées sur l’apprentissage profond ont été développées pour effectuer une analyse de comportement automatisée et détaillée2,3,4,5. Ce protocole fournit un guide d’implémentation étape par étape pour la boîte à outils DeepBehavior.

Les méthodes traditionnelles d’analyse comportementale comprennent souvent l’étiquetage manuel des données par plusieurs évaluateurs, ce qui entraîne une variance dans la façon dont les expérimentateurs définissent un comportement6. L’étiquetage manuel des données exige du temps et des ressources qui augmentent de façon disproportionnée par rapport à la quantité de données recueillies. En outre, les données étiquetées manuellement réduisent les résultats de comportement en mesures catégoriques qui ne capturent pas la richesse du comportement, et seront plus subjectives. Ainsi, les méthodes traditionnelles actuelles peuvent être limitées dans la capture des détails dans les comportements naturels.

La boîte à outils DeepBehavior présente une solution précise, détaillée, hautement temporelle et automatisée utilisant l’apprentissage profond pour l’analyse comportementale. L’apprentissage profond est rapidement devenu accessible à tous grâce à des outils et des forfaits open source. Les réseaux neuronaux convolutionnels (CNN) se sont avérés très efficaces dans la reconnaissance d’objets et les tâches de suivi7,8. À l’aide de CNN modernes et d’unités de traitement graphique haute performance (GPU), les grands ensembles de données d’image et de vidéo peuvent être traités rapidement avec une grande précision7,9,10,11. Dans DeepBehavior, il existe trois différentes architectures neuronales convergentes, TensorBox, YOLOv3, et OpenPose2.

Le premier cadre, Tensorbox, est un cadre polyvalent qui intègre de nombreuses architectures CNN différentes pour la détection d’objets12. TensorBox est le mieux adapté pour détecter une seule classe d’objets par image. Les extrants qui en résultent sont des boîtes délimitées de l’objet d’intérêt (figure 1) et les coordonnées cartésiennes de la boîte de délimitation.

Le deuxième cadre CNN est YOLOv3, qui signifie "You Only Look Once"13. YOLOv3 est avantageux lorsqu’il existe plusieurs objets d’intérêt qui doivent être suivis séparément. La sortie de ce réseau comprend la boîte de délimitation avec la classe d’étiquette d’objet associée ainsi que les coordonnées cartésiennes de la boîte de délimitation de l’objet dans le cadre vidéo (Figure 2).

Les deux cadres précédents sont avantageux pour les données comportementales généralisées recueillies à partir d’expériences de laboratoire standard chez des sujets animaux. Le dernier cadre de CNN est OpenPose14,15,16 qui est utilisé pour l’estimation de pose conjointe humaine. OpenPose détecte les points clés du corps, de la main, du visage et du pied sur les images. Les sorties du cadre sont étiquetées images du sujet humain ainsi que les coordonnées de tous les 25 points clés dans le corps et 21 points clés de chaque main (Figure 3).

Ce guide détaillé étape par étape pour la mise en œuvre de notre boîte à outils DeepBehavior open-source récemment développée utilise des filets neuronaux convolutionnels de pointe pour suivre le comportement des animaux (par exemple le mouvement d’une patte) ou le comportement humain (par exemple, atteindre les tâches). En suivant le comportement, la cinématique utile peut être dérivée du comportement tel que la position, la vitesse et l’accélération. Le protocole explique l’installation de chaque architecture CNN, montre comment créer des jeux de données de formation, comment former les réseaux, comment traiter de nouvelles vidéos sur le réseau formé, comment extraire les données du réseau sur les nouvelles vidéos, et comment après le traitement des données de sortie pour les rendre utiles pour une analyse plus approfondie.

Subscription Required. Please recommend JoVE to your librarian.

Protocol

1. Configuration GPU et Python

  1. Logiciel GPU
    Lorsque l’ordinateur est d’abord mis en place pour les applications d’apprentissage en profondeur, gPU-approprié logiciel et les pilotes doivent être installés qui peuvent être trouvés sur le site Web respectif du GPU. (voir le Tableau des matériaux pour ceux utilisés dans cette étude).
  2. Python 2.7 Installation
    Ouvrez une invite de ligne de commande sur votre machine.
    Ligne de commande: sudo apt-get installer python-pip python-dev python-virtualenv

2. TENSORBOX

  1. Configuration Tensorbox
    1. Créer un environnement virtuel pour Tensorbox
      Ligne de commande: cd
      Ligne de commande : virtualenv --system-site-packages '/tensorflow'
      REMARQUE : ' ''''tensorflow' est le nom de l’environnement et est arbitraire
    2. Activer l’environnement
      Ligne de commande : source /tensorflow/bin/activate
  2. Tensorbox Installation
    Nous allons utiliser GitHub pour cloner TensorBox à partir de http://github.com/aarac/TensorBox et l’installer sur notre machine ainsi que l’installation de dépendances supplémentaires.
    Ligne de commande: cd
    Ligne de commande : clone de git http://github.com/aarac/TensorBox
    Ligne de commande: cd TensorBox
    Ligne de commande: pip install -r requirements.txt
  3. Données d’étiquette
    1. Créer un dossier d’images de comportement
      Les outils open source tels que ffmpeg sont utiles pour accomplir la conversion de vidéos en images individuelles Nous recommandons d’étiqueter au moins 600 images à partir d’une large distribution de cadres de comportement pour la formation. Mettez ces images dans un dossier.
    2. Lancement de l’interface utilisateur graphique d’étiquetage
      Ligne de commande: python make_json.py 'lt;path to image folder’gt; labels.json
      Pour étiqueter une image, cliquez d’abord sur le coin supérieur gauche de l’objet d’intérêt (c.-à-d. patte), puis cliquez sur le coin inférieur droit de l’objet d’intérêt (Figure 4). Inspectez que la boîte de délimitation capture l’objet d’intérêt entier. Appuyez sur 'défaire' pour réétiqueter la même image ou appuyez sur 'suivant' pour passer à l’image suivante.
  4. Train TensorBox
    1. Lier les images de formation au fichier d’hyperparamètres réseau
      Dans le dossier tensorbox, ouvrez le dossier suivant dans un éditeur de texte :
      /TensorBox/hypes/overfeat_rezoom.json. Naviguez vers l’attribut sous les données nommées train_idl et remplacez le chemin de fichier de ./data/brainwash/train_boxes.json au filepath labels.json. Enregistrer les modifications à déposer.
    2. Commencer le script de formation
      Ligne de commande : cd /TensorBox
      Ligne de commande: python train.py --hypes hypes/overfeat_rezoom.json --gpu 0 --logdir sortie
      Le réseau commencera alors la formation pour 600 000 itérations. Dans le dossier de sortie, les poids formés résultantdus du réseau neuronal convolutionnel seront générés.
  5. Prédire sur les nouvelles images
    Pour l’étiquetage de l’image :
    Ligne de commande : cd /TensorBox
    Ligne de commande: python label_images.py --folder 'lt;path to image folder 'gt; --weights output/overfeat_rezoom_'lt;timestamp’gt;/save.ckpt-600000 --hypes /hypes/overfeat_rezoom.json --gpu 0
    Pour obtenir les coordonnées des boîtes de délimitation :
    Ligne de commande : cd /TensorBox
    Ligne de commande: python predict_images_to_json.py --folder 'lt;path to image folder 'gt; --weights
    sortie/overfeat_rezoom_-lt;timestamp-gt;/save.ckpt-600000 --hypes
    /hypes/overfeat_rezoom.json --gpu 0
  6. MATLAB Post-Processing pour TensorBox
    Un code MATLAB supplémentaire a été fourni pour extraire la cinématique et les visualisations des coordonnées à l’aide du fichier de coordonnées JSON résultant du modèle
    Exécutez le script "Process_files_3Dreaching_mouse.m" pour l’analyse cinématique 3D de la tâche d’atteinte de granule de nourriture unique.

3. YOLOv3

  1. Installer YOLOv3
    Ligne de commande: cd
    Ligne de commande: git clone cd darknet
    Pour l’utilisation du GPU, ouvrez 'Makefile' et modifiez les lignes suivantes : GPU 1; CUDNN1.
    Ligne de commande: faire
  2. Étiquetage des données de formation à l’aide de Yolo_mark
    Ligne de commande: cd
    Ligne de commande : git clone cd à Yolo_Mark
    Ligne de commande: cmake .
    Ligne de commande: faire
    Placez les images de formation dans le dossier ''Yolo_mark/'data/obj
    Ligne de commande : chmod x ./linux_mark.sh
    Ligne de commande: ./linux_mark.sh
    Étiquetez les images une par une dans l’interface utilisateur graphique (Figure 5). La quantité recommandée d’images est d’environ 200.
  3. Formation YOLOv3
    1. Fichier de configuration de configuration
      Ligne de commande : cd et Yolo_mark
      Ligne de commande: scp -r ./data '/darknet
      Ligne de commande : cd /darknet/cfg
      Ligne de commandement: cp yolov3.cfg yolo-obj.cfg
    2. Modifier le fichier de configuration
      Ouvrez le dossier yolo-obj.cfg et modifiez les lignes suivantes : lot 64, subdivision 8, classes (classe à détecter), et pour chaque couche convolutionnelle avant qu’une couche de yolo ne modifie le filtre (classes 5)x3. Vous trouverez des détails sur ces changements à https://github.com/aarac/darknet/blob/master/README.md
    3. Télécharger les poids du réseau
      Téléchargez les poids réseau à partir de https://www.dropbox.com/s/613n2hwm5ztbtuf/darknet53.conv.74?dl=0
      Placez le fichier de poids téléchargé dans le fichier de poids téléchargé dans le fichier de poids //darknet/build/darknet/x64
    4. Exécuter l’algorithme de formation
      Ligne de commande : cd /darknet
      Ligne de commande: ./darknet détecteur train data/obj.data cfg/yolo-obj.cfg darknet53.conv.74
    5. Évaluation YOLOv3
      Une fois la formation terminée en fonction d’un nombre d’itérations(ITERATIONNUMBER),vous pouvez les consulter
      Ligne de commande: ./darknet détecteur de données de test /obj.data cfg/yolo-obj.cfg backup/yolo-obj_ITERATIONNUMBER.weights 'lt;IMAGE’gt;jpg
  4. Prédire sur de nouvelles vidéos et obtenir des coordonnées
    Cette commande peut être exécuté pour obtenir les coordonnées des étiquettes dans la nouvelle vidéo :
    Ligne de commande: ./darknet détecteur demo data/obj.data cfg/yolo-obj.cfg backup/yolo-obj_ITERATIONNUMBER.weights VIDEO.avi -ext_output 'lt;VIDEO.avi’gt; FILENAME.txt
  5. YOLOv3 PostProcessing dans MATLAB
    Prenez le fichier FILENAME.txt à MATLAB, et exécutez le script "Process_socialtest_mini.m" pour deux souris test d’interaction sociale. Voir les résultats de la figure 2

4. OpenPose

OpenPose est idéal pour suivre plusieurs parties du corps dans un sujet humain. Les processus de configuration et d’installation sont très similaires aux deux cadres précédents. Cependant, il n’y a pas d’étape de formation car le réseau est déjà formé sur les données humaines.

  1. OpenPose Installation
    Naviguez vers https://github.com/aarac/openpose et suivez les instructions d’installation.
  2. Vidéo du processus
    ./build/examples/openpose/openpose.bin --video VIDEONAME.avi --net_resolution "1312x736" --scale_number 4 --scale_gap 0.25 --hand --hand_scale_number 6 --hand_scale_range 0.4 --write_json JSONFOLDERNAME --write_video RESULTINGVIDEONAME.avi
    Ici, les poignées --net_resolution, -scale_number, --scale_gap, --hand_scale_number et --hand_scale_range peuvent être omises si une détection de haute précision n’est pas nécessaire (ce qui diminuerait le temps de traitement).
  3. OpenPose Post-Traitement
    Dans le dossier MATLAB, veuillez utiliser le script ' process_files_human3D.m’pour exécuter le code après l’ajout du dossier approprié contenant les fichiers json des caméras 1 et 2, ainsi que le fichier d’étalonnage. Cela créera un fichier "cellule" avec toutes les poses 3D des articulations. Il fera également un film de la vue squelettique 3D. Pour l’étalonnage de la caméra, veuillez suivre les instructions à ce lien : http://www.vision.caltech.edu/bouguetj/calib_doc/

Subscription Required. Please recommend JoVE to your librarian.

Representative Results

Lorsque le protocole est suivi, les données de chaque architecture de réseau doivent être similaires à celles qui suivent. Pour TensorBox, il produit une boîte de délimitation autour de l’objet d’intérêt. Dans notre exemple, nous avons utilisé des vidéos à partir d’une tâche d’atteinte de granule alimentaire, et étiqueté les pattes droites pour suivre leur mouvement. Comme on le voit dans la figure 1, la patte droite peut être détectée dans différentes positions à la fois dans la vue avant et les caméras de vue latérale. Après le post-traitement avec l’étalonnage de la caméra, des trajectoires 3D de la portée peuvent être obtenues (Figure 1B).

Dans Yolov3, comme il ya plusieurs objets, la sortie est également plusieurs boîtes de délimitation. Comme on le voit dans la figure 2B, il existe de multiples boîtes de délimitation autour des objets d’intérêt. Il peut s’agit de parties du corps.

Dans OpenPose, le réseau détecte les positions communes comme on le voit dans la figure 3A. Après le post-traitement avec l’étalonnage de la caméra, un modèle 3D du sujet peut être créé (Figure 3B).

En conclusion, ces résultats représentatifs présentent les détails riches du comportement qui peuvent être capturés à l’aide de la boîte à outils DeepBehavior.

Figure 1
Figure 1 : Boîtes délimitées avec TensorBox vues sur les pattes des cadres vidéo lors d’une tâche d’atteinte chez la souris. (Adapté d’Arac et coll. 2019). Veuillez cliquer ici pour voir une version plus grande de ce chiffre.

Figure 2
Figure 2 : Boîtes délimitées avec Yolov3 vues sur les régions d’intérêt pour les cadres vidéo lors d’un test d’interaction sociale à deux souris (Une image brute, image analysée B). (Adapté d’Arac et coll. 2019). Veuillez cliquer ici pour voir une version plus grande de ce chiffre.

Figure 3
Figure 3 : Détection de pose humaine avec OpenPose dans deux vues de caméra (A) et modèle 3D créé à partir de ces deux images (B). (Adapté d’Arac et coll. 2019). Veuillez cliquer ici pour voir une version plus grande de ce chiffre.

Figure 4
Figure 4 : L’interface graphique make_json de TensorBox utilisée pour étiqueter les données de formation. Veuillez cliquer ici pour voir une version plus grande de ce chiffre.

Figure 5
Figure 5 : Guidisme de Yolo_Mark pour étiqueter les images dans un format acceptable pour Yolov3. Veuillez cliquer ici pour voir une version plus grande de ce chiffre.

Subscription Required. Please recommend JoVE to your librarian.

Discussion

Ici, nous fournissons un guide étape par étape pour la mise en œuvre de DeepBehavior, notre boîte à outils basée sur l’apprentissage profond récemment développé pour l’analyse des données d’imagerie du comportement animal et humain2. Nous fournissons des explications détaillées pour chaque étape pour l’installation des cadres pour chaque architecture de réseau, et fournissons des liens pour l’installation des exigences open-source pour être en mesure d’exécuter ces cadres. Nous démontrons comment les installer, comment créer des données de formation, comment former le réseau, et comment traiter de nouveaux fichiers vidéo sur le réseau formé. Nous fournissons également le code de post-traitement pour extraire les informations de base nécessaires pour une analyse plus approfondie.

Pour la détection d’objets uniques, nous vous recommandons d’utiliser TensorBox. Si l’objectif est de suivre plusieurs objets à la fois, nous vous recommandons d’utiliser YOLOv3. Enfin, pour obtenir des données cinétiques humaines, nous vous recommandons d’utiliser OpenPose. Dans ce protocole, nous avons montré que les méthodes d’apprentissage profond sont capables de traiter des centaines de milliers d’images tout en traquant les objets avec un haut degré de précision. En utilisant le code de post-traitement fourni, nous pouvons trouver des moyens significatifs d’analyser le comportement d’intérêt suivi. Cela fournit un moyen plus détaillé de capturer le comportement. Il fournit également un moyen automatisé et robuste de définir un comportement qui est généralisable à de nombreux types de tâches comportementales.

Il est assez fréquent d’obtenir un 'ModuleNotFoundError' en commençant par un nouvel environnement virtuel ou un code qui a été téléchargé à partir d’Internet. Dans le cas où cela se produit, ouvrez votre terminal, activez l’environnement source et tapez 'pip install 'lt;missing module name 'gt;'. Si le problème persiste, vous devrez vérifier votre version python ainsi que d’autres paquets de dépendance.

Les limites de cette technique incluent le dépannage technique pour configurer correctement les unités de traitement GPU compatibles avec le code open-source. Il est avantageux d’avoir une expérience de programmation passée dans un environnement linux pour configurer correctement les dépendances et les environnements de projet nécessaires qui sont compatibles avec le matériel de l’ordinateur.

Nous démontrons les installations DeepBehavior boîte à outils et le traitement de dans un environnement linux, cependant, cette boîte à outils peut également être exécuté sur un Windows et Mac machines avec GPU en suivant les guides d’installation respectifs sur github.

L’utilisation de méthodes d’apprentissage profond pour l’analyse des données d’imagerie est un moyen très efficace d’automatiser l’analyse de comportement. Par rapport aux méthodes traditionnelles d’analyse du comportement, DeepBehavior capte beaucoup plus d’informations pour quantifier, automatiser et évaluer le comportement d’une manière plus précise et temporellement détaillée. Avec les progrès dans le domaine de l’apprentissage profond, l’utilisation et l’étendue de l’utilisation de cette technologie dans l’analyse du comportement continueront probablement à s’améliorer. Les applications de DeepBehavior peuvent être étendues au-delà des tâches d’atteinte démontrées pour identifier les objets d’intérêt dans toutes les images comportementales. Dans ce protocole, nous fournissons des instructions détaillées pour mettre en œuvre trois réseaux neuronaux pour l’analyse du comportement. Avec ce genre de méthodes automatisées et impartiales d’analyse de comportement, nous l’espérons, le domaine des neurosciences sera en mesure de faire plus d’analyse de comportement en détail.

Subscription Required. Please recommend JoVE to your librarian.

Disclosures

Les auteurs n’ont rien à révéler.

Acknowledgments

Nous tenons à remercier Pingping Zhao et Peyman Golshani d’avoir fourni les données brutes pour les tests d’interaction sociale à deux souris utilisés dans le document original2. Cette étude a été appuyée par les subventions du NIH NS109315 et du GPU NVIDIA (AA).

Materials

Name Company Catalog Number Comments
CUDA v8.0.61 NVIDIA n/a GPU Software
MATLAB R2016b Mathworks n/a Matlab
Python 2.7 Python n/a Python Version
Quadro P6000 NVIDIA n/a GPU Processor
Ubuntu v16.04 Ubuntu n/a Operating System

DOWNLOAD MATERIALS LIST

References

  1. Krakauer, J. W., Ghazanfar, A. A., Gomez-Marin, A., MacIver, M. A., Poeppel, D. Neuroscience Needs Behavior: Correcting a Reductionist Bias. Neuron. 93, (3), 480-490 (2017).
  2. Arac, A., Zhao, P., Dobkin, B. H., Carmichael, S. T., Golshani, P. DeepBehavior: A Deep Learning Toolbox for Automated Analysis of Animal and Human Behavior Imaging Data. Front Syst Neurosci. 13, 20 (2019).
  3. Pereira, T. D., Aldarondo, D. E., Willmore, L., Kislin, M., Wang, S. S., Murthy, M., et al. Fast animal pose estimation using deep neural networks. Nat Methods. 16, (1), 117-125 (2019).
  4. Mathis, A., Mamidanna, P., Cury, K. M., Abe, T., Murthy, V. N., Mathis, M. W., et al. DeepLabCut: markerless pose estimation of user-defined body parts with deep learning. Nat Neurosci. 21, (9), 1281-1289 (2018).
  5. Stern, U., He, R., Yang, C. H. Analyzing animal behavior via classifying each video frame using convolutional neural networks. Sci Rep. 5, 14351 (2015).
  6. Tinbergen, N. On aims and methods of ethology. Zeitschrift für Tierpsychologie. 20, 410-433 (1963).
  7. LeCun, Y., Bengio, Y., Hinton, G. Deep Learning. Nature. 521, (7553), 436-444 (2015).
  8. Zhao, Z., Zheng, P., Xu, S., Wu, X. Object Detection With Deep Learning: A Review. IEEE Transactions on Neural Networks and Learning Systems. 1-21 (2019).
  9. He, K., Zhang, X., Ren, S., Deep Sun, J. Residual Learning for Image Recognition. arXiv. eprint (2015).
  10. Krizhevsky, A., Sutskever, I., Hinton, G. E. ImageNet classification with deep convolutional neural networks. Proceedings of the 25th International Conference on Neural Information Processing Systems. 1, Curran Associates Inc. Lake Tahoe, Nevada. 1097-1105 (2012).
  11. Szegedy, C., Wei, L., Yangqing, J., Sermanet, P., Reed, S., Anguelov, D., et al. Going deeper with convolutions. 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 7-12 (2015).
  12. Stewart, R., Andriluka, M., Ng, A. Y. End-to-End People Detection in Crowded Scenes. 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 27-30 (2016).
  13. Redmon, J., Farhadi, A. YOLOv3: An Incremental Improvement. arXiv. eprint (2018).
  14. Cao, Z., Simon, T., Wei, S. E., Sheikh, Y. Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields. arXiv. (2017).
  15. Simon, T., Joo, H., Matthews, I., Sheikh, Y. Hand Keypoint Detection in Single Images using Multiview Bootstrapping. arXiv. eprint (2017).
  16. Wei, S. E., Ramakrishna, V., Kanade, T., Sheikh, Y. Convolutional Pose Machines. arXiv. eprint (2016).

Comments

0 Comments


    Post a Question / Comment / Request

    You must be signed in to post a comment. Please or create an account.

    Usage Statistics