1. Deeplabcut安装
1.1 下载安装文件
进入安装地址后,选择step2中的下载链接点击,下载DEEPLABCUT.yaml文件
1.2 创建环境并安装
选择Anaconda目录下的Anaconda Navigator
依次点击Enviroments—Import—选择DEEPLABCUT.yaml文件的下载目录
选中后点击import即可安装DEEPLABCUT
2. 模型训练
2.1 训练前准备
使用Anaconda Navigator进入
选择安装好的环境,选择Open with IPython
在命令框中输入 进入操作界面
import deeplabcut
deeplabcut.launch_dlc()
如果没有GPU的话,会出现下面的error,可以直接无视
此处输入任务的名称和操作者的名字,新的文件夹将以这两者的名字命名,为减少报错可能,尽量用英文+数字,不要使用汉字,设置完成后点击OK
2.2 模型标注
创建成功后,会进入下面的界面
抽取关键帧
上一步完成后,会在下图所示的目录中创建一个config.yaml文件,这个文件中包含了整个训练过程的所有主要设置,后面还会用到
由于输入的是连续的视频,此处需要定义抽取关键帧的方法,用于后续的标注
这里可以选择手动或自动提取(一般自动就可以 手动需要一帧帧挑有点麻烦)
并可以选择自动抽帧的方法(kmeans和uniform),由于我用的视频背景比较简单,没有仔细对比过这两种方法的差别
设置完成后点击OK 这里需要一点时间来读入视频和提取关键帧
关键点标注设置
点击OK后,选择Label Data进入到下面的界面
进入config.yaml所在的目录,并使用记事本打开config.yaml文件
这里的bodyparts和skeleton分别代表了需要在图中标识的关键点和关键点间可能的联系
如果和默认的关键点定义不一样,直接删掉修改就可以
修改完的文件如下
这里需要注意skeleton的写法,当点比较多的时候,写成这样会比较方便
另外,针对不同的场景,设置关键点的大小也非常重要
然后回到界面,选择Label frames
按顺序选择待标注图像所在的文件,就可以进入标注界面
然后就可以开始愉快的标注了,如果前面导入了多段视频的话,每个视频会生成一个文件夹,需要对每个文件夹分别标注
在标注完成后,回到主页面,并选择Check Labels,就可以看到在任务文件夹下的labled-data文件中找到一个带有-labeled的文件,点进去后可以看到标注的点和骨架已经被绘制在了图中
然后就可以点击Creaete Training Dataset进入到创建训练集的部分(如果用服务器训练的可以直接跳过这部分)
此处可以选择特征提取网络,主要影响后续的运算速度和精度,配置好的可以选择resnet家族的,配置一般的可以选择mobilenet
还可以选择数据增强的方法,这里我也没对比过几种有什么差别
全部选完后就可以点击OK
然后会在IPython中看到创建成功的提示
2.3 正式训练
然后就是正式训练的过程,这里由于我自己的电脑性能比较拉,所以选择了使用服务器训练,有条件的可以直接进入主界面中的train来训练
下面是我的租用配置,怕麻烦的可以直接copy
我的训练是在矩池云上进行的,这个配置可以直接在镜像里找到,简单是挺简单,但这个平台确实是贵……
首先当然需要在服务器上安装deeplabcut
然后把整个文件 就是那个由任务名+人名组成的文件打包上传
然后进入网盘,解压,用Jupyter打开文件
在目录下新建一个.ipynb文件 效果如下
接下来的事情就很简单了
# 设置
ProjectFolderName = 'dog-S10ow-2022-03-09'
VideoType = 'mp4'
#这里不需要修改
videofile_path = ['./videos/test.mp4'] #Enter the list of videos or folder to analyze.
videofile_path
import os
os.environ["DLClight"]="True"
import deeplabcut
#设置config.yaml的位置
path_config_file = '/mnt/dog-S10ow-2022-03-09/config.yaml'
#创建训练集
deeplabcut.create_training_dataset(path_config_file, net_type='resnet_50', augmenter_type='imgaug')
#开始训练 displayiters=多久展示一次结果;saveiters=多久保存一次结果
#需要注意的是,这里的训练是持续进行的,自己觉得OK了就点停止
deeplabcut.train_network(path_config_file, shuffle=1, displayiters=10,saveiters=500)
#测试网络
deeplabcut.evaluate_network(path_config_file,plotting=True)
#分析视频
deeplabcut.analyze_videos(path_config_file,videofile_path, videotype=VideoType)
#在视频上绘制关键点
deeplabcut.plot_trajectories(path_config_file,videofile_path, videotype=VideoType)