文章转自:https://zhuanlan.zhihu.com/p/644945254
DeepLabCut(DLC)是一个开源的深度学习工具,旨在实现姿态估计和运动分析。
http://www.mackenziemathislab.org/deeplabcutwww.mackenziemathislab.org/deeplabcut
DeepLabCut的主要目标是通过对图像和视频数据进行深度学习训练,来识别和跟踪特定动物或物体的关键点。
它可以应用于各种领域,如神经科学、生物学、生物医学研究、行为学、动作分析等:
GitHub地址:
https://github.com/DeepLabCut/DeepLabCutgithub.com/DeepLabCut/DeepLabCut
这篇文章会用DeepLabCut官方提供的Open field数据:
00:08
演示Deeplabcut GUI的使用:
- 安装DeepLabCut
- 设置基本参数
- 数据标注
- 模型训练
- 结果生成
一、安装GPU dependency
参考官方说明:
二、安装DeepLabCut
(1)创建一个新的conda环境
conda create --name deeplabcut
(2)激活该环境:
conda activate deeplabcut
(3)安装DeepLabCut GUI:
pip install 'deeplabcut[gui,tf]'
(4)运行GUI
python -m deeplabcut
三、基础参数设置
(1)新建项目
建立一个新的project,输入Project、Experimenter和Location,Location默认是在桌面,可以修改。
然后Browse videos,选择视频所在的文件夹。
项目创建后,可以在Location所在文件夹,看到如下的文件夹和一个config文件:
(2)修改config文件
创建项目后,上面一栏会出现依次要做的步骤:
点击Edit config.yaml,修改config文件:
这里最主要修改bodyparts这一参数,这一参数定义了后续需要标注多少点,每一个点的名称。
这里只标注nose, left_ear, right_ear, tail_base,4个点。
如要增加或者减少标注的点,可以右键Insert或delete。
四、数据标注
(1)提取关键帧
为了通过标注少量的数据,来很好的效果。我们要选择那些变化较大、比较有特点的帧。
Deeplabcut有不同的算法来提取这些关键帧,这里采用默认的参数,点击Extract Frames,提取关键帧进行后续标注。
提取完成后会提示:
(2)标注关键帧
点击Label Frames:
选择labeled-data文件夹下的视频所在的文件夹:
弹出基于napari的数据标注窗口:
选择Add points,依次标注nose, left_ear, right_ear, tail_base,4个点:
依次标注完提取的19个关键帧后,点击File -> Save Selected Layer(s)...,即可保存标注数据:
同时,在labeled-data文件夹下,会生成两个标注数据的文件:
标注完成后,关闭napari窗口。
五、模型训练
(1)生成训练集
这里可以选择用哪个深度学习模型,怎样做数据增强以及Shuffle,这里采用默认参数。
然后点击Create Training Dataset。
生成完成后会提示:
(2)模型训练
这里需要设置:
多少iteration显示保存一次,最多迭代多少iteration,保存几个checkpoint:
点击Train Network,在Terminal可以看到iteration的数量,以及loss:
如果没有调用GPU,可以尝试在deeplabcut的conda环境中,运行:
conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1.0
训练完成,或者loss稳定在较小的数值后,可以control+C停止训练。
六、结果生成
(1)模型评估
点击Evaluate Network,可以生成网络的评估结果:
点击Plot 3 test maps,可以大概看一下效果:
(2)完整视频追踪
在Analyze videos中,添加想要分析的视频,勾选Save results as csv,这样每个点的坐标都会导出,可以进行后续分析:
可以在项目文件夹中的videos文件夹中,找到csv文件:
(3)标记视频生成
为了直观地看到模型的效果,可以生成带有标记点的视频,在Create videos下:
点击Create videos,生成带有标记点的视频:
后面会介绍怎样去修正预测错误,优化整个网络,利用DeepLabCut得到更好的结果。