需要JoVE订阅才能观看此内容。 请登录或开始免费试用

方法文章

DeepBehavior 深度学习工具箱用于自动化行为分析的逐步实现

8.9K 次观看

DOI:

10.3791/60763

2020年2月6日

本文内容

摘要

本实验方案的目的是利用预构建的卷积神经网络实现行为追踪的自动化,并进行详细的行为分析。行为追踪可应用于任何视频数据或图像序列,且可推广用于追踪任何用户自定义的对象。

摘要

理解行为是真正理解驱动行为的脑内神经机制的第一步。传统的行为分析方法往往无法捕捉自然行为本身所具有的丰富性。本文提供了我们近期开发的方法 DeepBehavior 的详细分步操作指南及可视化说明。DeepBehavior 工具箱采用基于卷积神经网络的深度学习框架,可快速处理和分析行为视频。本实验方案展示了三种不同的框架:单目标检测、多目标检测以及三维(3D)人体关节姿态追踪。这些框架可返回行为视频每一帧中目标对象的笛卡尔坐标。通过 DeepBehavior 工具箱采集的数据比传统行为分析方法包含更丰富的细节,能够深入揭示行为动态特征。DeepBehavior 以稳健、自动化且精确的方式量化行为任务。在完成行为识别后,本文还提供了后处理代码,用于从行为视频中提取信息并生成可视化结果。

引言

对行为进行详细分析是理解大脑与行为关系的关键。近年来,在以高时间分辨率记录和操控神经元群体的方法上已取得许多令人振奋的进展,然而行为分析方法的发展却未能同步,仍局限于间接测量和还原论方法1。最近,基于深度学习的方法已被开发用于实现自动化且详细的行为分析2,3,4,5。本实验方案为 DeepBehavior 工具箱提供了逐步实施的操作指南。

传统的行为分析方法通常包括由多名评估者手动标注数据,这导致实验人员对行为的定义存在差异6。手动标注数据需要耗费大量时间和资源,且其投入与所收集数据量不成正比。此外,人工标注的数据将行为结果简化为类别化测量,无法充分反映行为的丰富性,且更具主观性。因此,当前的传统方法在捕捉自然行为细节方面可能存在局限性。

DeepBehavior 工具箱提供了一种基于深度学习的精确、详细、高时间分辨率且自动化的动物行为分析解决方案。随着开源工具和软件包的普及,深度学习已迅速为所有研究者所广泛获取。卷积神经网络(CNN)在物体识别与追踪任务中已被证实具有极高的有效性7,8。借助现代卷积神经网络和高性能图形处理器(GPU),可快速且高精度地处理大规模图像和视频数据集7,9,10,11。在 DeepBehavior 中,集成了三种不同的卷积神经网络架构:TensorBox、YOLOv3 和 OpenPose2

第一个框架 Tensorbox 是一个多功能框架,整合了多种不同的卷积神经网络(CNN)架构用于目标检测12。TensorBox 最适合每张图像仅检测一个目标类别。其输出结果为感兴趣目标的边界框(图1)以及边界框的笛卡尔坐标。

第二种CNN框架是YOLOv3,即"You Only Look Once"13。当需要分别追踪多个感兴趣目标时,YOLOv3具有优势。该网络的输出包括带有相应目标标签类别的边界框,以及目标在视频帧中的边界框笛卡尔坐标(图2)。

前两种框架适用于从动物受试者的标准实验室实验中收集的广义行为数据。最后一种卷积神经网络(CNN)框架是OpenPose14,15,16,用于人体关节姿态估计。OpenPose可检测图像中人体、手部、面部和足部的关键点。该框架的输出结果包括标注后的人体受试者图像,以及身体25个关键点和每只手21个关键点的坐标(图3)。

本详细分步指南介绍了我们近期开发的开源 DeepBehavior 工具箱的实施方法,该工具箱采用先进的卷积神经网络来追踪动物行为(例如爪子的运动)或人类行为(例如伸手任务)。通过追踪行为,可从中提取有用的动力学参数,如位置、速度和加速度。本实验方案详细说明了每种卷积神经网络架构的安装方法,演示了如何创建训练数据集、如何训练网络、如何在训练好的网络上处理新视频、如何从新视频中提取网络输出数据,以及如何对输出数据进行后处理,以便用于进一步分析。

访问受限。请登录或开始试用以查看此内容。

方案

1. GPU 和 Python 环境配置

  1. GPU 软件
    首次为深度学习应用配置计算机时,应安装适用于 GPU 的软件和驱动程序,这些软件和驱动程序可在相应 GPU 的官方网站上找到。(参见本研究中使用的材料,请见材料表)。
  2. Python 2.7 安装
    在您的机器上打开命令行提示符。
    命令行: sudo apt-get install python-pip python-dev python-virtualenv

2. TENSORBOX

  1. Tensorbox 设置
    1. 为 Tensorbox 创建虚拟环境
      命令行: cd ~
      命令行: virtualenv --system-site-packages ~/tensorflow
      注意:'~/tensorflow' 是环境的名称,可任意指定
    2. 激活环境
      命令行: source ~/tensorflow/bin/activate
  2. Tensorbox 安装
    我们将使用 GitHub 从 http://github.com/aarac/TensorBox 克隆 TensorBox 并将其安装到本地机器上,同时安装其他依赖项。
    命令行: cd ~
    命令行: git clone http://github.com/aarac/TensorBox
    命令行: cd TensorBox
    命令行: pip install -r requirements.txt
  3. 标注数据
    1. 创建行为图像文件夹
      ffmpeg 等开源工具可用于将视频转换为单帧图像。我们建议从行为帧的广泛分布中选取至少 600 张图像用于训练,并将这些图像放入一个文件夹中。
    2. 启动标注图形用户界面
      命令行: python make_json.py <图像文件夹路径> labels.json
      要标注一张图像,首先点击目标对象(例如爪子)的左上角,然后点击其右下角(图 4)。检查边界框是否完整包含目标对象。按“撤销”可重新标注同一图像,或按“下一个”进入下一帧。
  4. 训练 TensorBox
    1. 将训练图像链接到网络超参数文件
      在 tensorbox 文件夹内,使用文本编辑器打开以下文件:
      /TensorBox/hypes/overfeat_rezoom.json。找到 data 下名为 train_idl 的属性,将文件路径从 ./data/brainwash/train_boxes.json 更改为 labels.json 的文件路径。保存更改。
    2. 开始训练脚本
      命令行: cd ~/TensorBox
      命令行: python train.py --hypes hypes/overfeat_rezoom.json --gpu 0 --logdir output
      网络将开始进行 600,000 次迭代训练。在 output 文件夹中,将生成卷积神经网络的训练权重文件。
  5. 对新图像进行预测
    用于图像标注:
    命令行: cd ~/TensorBox
    命令行: python label_images.py --folder <图像文件夹路径> --weights output/overfeat_rezoom_<时间戳>/save.ckpt-600000 --hypes /hypes/overfeat_rezoom.json --gpu 0
    获取边界框坐标:
    命令行: cd ~/TensorBox
    命令行: python predict_images_to_json.py --folder <图像文件夹路径> --weights
    output/overfeat_rezoom_<时间戳>/save.ckpt-600000 --hypes
    /hypes/overfeat_rezoom.json --gpu 0
  6. TensorBox 的 MATLAB 后处理
    已提供额外的 MATLAB 代码,用于从模型生成的 JSON 坐标文件中提取运动学数据并生成可视化结果。
    运行 "Process_files_3Dreaching_mouse.m" 脚本,以进行单颗粒食物抓取任务的三维运动学分析。

3. YOLOv3

  1. 安装 YOLOv3
    命令行: cd ~
    命令行: git clone cd darknet
    若使用 GPU,打开“Makefile”并修改以下行:GPU=1;CUDNN=1。
    命令行: make
  2. 使用 Yolo_mark 标注训练数据
    命令行: cd ~
    命令行: git clone cd ~/Yolo_Mark
    命令行: cmake .
    命令行: make
    将训练图像放入 ~/Yolo_mark/data/obj 文件夹中
    命令行: chmod +x ./linux_mark.sh
    命令行: ./linux_mark.sh
    在图形用户界面中逐个标注图像(图 5)。建议的图像数量约为 200 张。
  3. 训练 YOLOv3
    1. 配置配置文件
      命令行: cd ~/Yolo_mark
      命令行: scp -r ./data ~/darknet
      命令行: cd ~/darknet/cfg
      命令行: cp yolov3.cfg yolo-obj.cfg
    2. 修改配置文件
      打开 yolo-obj.cfg 文件并修改以下行:batch=64,subdivision=8,classes=(待检测类别的数量),并对每个 yolo 层之前的卷积层修改 filter=(classes+5)x3。有关这些修改的详细信息,请参见 https://github.com/aarac/darknet/blob/master/README.md
    3. 下载网络权重
      https://www.dropbox.com/s/613n2hwm5ztbtuf/darknet53.conv.74?dl=0 下载网络权重
      将下载的权重文件放入 ~/darknet/build/darknet/x64 目录中
    4. 运行训练算法
      命令行: cd ~/darknet
      命令行: ./darknet detector train data/obj.data cfg/yolo-obj.cfg darknet53.conv.74
    5. YOLOv3 评估
      当训练完成指定迭代次数(ITERATIONNUMBER)后,可通过以下命令查看结果:
      命令行: ./darknet detector test data/obj.data cfg/yolo-obj.cfg backup/yolo-obj_ITERATIONNUMBER.weights <IMAGE>.jpg
  4. 对新视频进行预测并获取坐标
    运行以下命令可获取新视频中标签的坐标:
    命令行: ./darknet detector demo data/obj.data cfg/yolo-obj.cfg backup/yolo-obj_ITERATIONNUMBER.weights VIDEO.avi -ext_output <VIDEO.avi> FILENAME.txt
  5. 在 MATLAB 中进行 YOLOv3 后处理
    将 FILENAME.txt 文件导入 MATLAB,运行 "Process_socialtest_mini.m" 脚本以进行双小鼠社交互动测试。结果见 图 2

4. OpenPose

OpenPose 非常适合用于追踪人体受试者的多个身体部位。其设置和安装过程与之前的两个框架非常相似。但由于该网络已经使用人类数据完成训练,因此无需进行训练步骤。

  1. OpenPose 安装
    访问 https://github.com/aarac/openpose,并按照其中的安装说明进行操作。
  2. 处理视频
    ./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
    如果不需要高精度检测,可省略 --net_resolution、--scale_number、--scale_gap、--hand_scale_number 和 --hand_scale_range 参数(这将减少处理时间)。
  3. OpenPose 后处理
    在 MATLAB 文件夹中,请使用 'process_files_human3D.m' 脚本运行代码,需先添加包含来自相机 1 和相机 2 的 json 文件的相应文件夹,以及校准文件。该脚本将生成一个 "cell" 文件,其中包含所有关节的 3D 姿态数据,并生成 3D 骨骼视图的视频。关于相机校准,请参考以下链接中的说明:http://www.vision.caltech.edu/bouguetj/calib_doc/

访问受限。请登录或开始试用以查看此内容。

结果

按照本方案操作时,每种网络架构的数据应与以下结果相似。TensorBox 会输出围绕目标物体的边界框。在本示例中,我们使用了食物颗粒抓取任务的视频,并对右前爪进行标注以追踪其运动轨迹。如图1所示,右前爪在前视图和侧视图摄像机中均能在不同位置被检测到。经过摄像机标定的后处理后,可获得抓取动作的三维轨迹(图1B)。

在 Yolov3 中,由于存在多个目标,输出结果也为多个边界框。如图 2B所示,感兴趣目标周围存在多个边界框,这些边界框可能对应身体的各个部位。

在 OpenPose 中,网络会检...

访问受限。请登录或开始试用以查看此内容。

讨论

本文提供了我们近期开发的基于深度学习的动物与人类行为成像数据分析工具箱 DeepBehavior 的逐步实施指南2。我们详细说明了每种网络架构框架的安装步骤,并提供了开源依赖项的安装链接,以确保这些框架能够正常运行。我们演示了如何安装这些工具、如何创建训练数据、如何训练网络,以及如何在训练好的网络上处理新的视频文件。此外,我们还提供了后处理代码,用于提取进一步分析所需的基本信息。

对于单个目标检测,我们推荐使用 TensorBox。如果目标是同时追踪多个目标,则推荐使用 YOLOv3。最后,为了获取人体运动学数据,我们推荐使用 OpenPose。在本方案中,我们已证明深度学习方法能够在以高精度追踪目标的同时,处理数十万帧图像。通过使用所提供的后处理代码,我们可以得出有意义的方法来分析所关注的追踪行为。这提供了一种更详细的行为捕捉方式,同时也提供了一种可自动化、稳健且可推广至多种不同类型行为任务的行为定义方法。

在使用新的虚拟环境或从互联网下载的代码时,出现“ModuleNotFo...

访问受限。请登录或开始试用以查看此内容。

披露

作者无任何利益冲突需要披露。

致谢

我们感谢赵平平和Peyman Golshani提供原始论文中使用的双小鼠社交互动实验的原始数据2。本研究得到了美国国立卫生研究院(NIH)NS109315项目和NVIDIA GPU基金(AA)的支持。

访问受限。请登录或开始试用以查看此内容。

材料

本文使用的材料清单
姓名公司目录编号评论
CUDA v8.0.61NVIDIAn/aGPU 软件
MATLAB R2016bMathworksn/aMatlab
Python 2.7Pythonn/aPython 版本
Quadro P6000NVIDIAn/aGPU 处理器
Ubuntu v16.04Ubuntun/a操作系统

参考文献

  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).

访问受限。请登录或开始试用以查看此内容。

重印与许可

标签

DeepBehavior 工具箱卷积神经网络单目标检测多目标检测人体姿态追踪TensorBox 配置YOLOv3 安装OpenPose 处理MATLAB 后处理