官方详细的教程地址https://github.com/AlexEMG/DeepLabCut/blob/master/examples/Demo_labeledexample_MouseReaching.ipynb
本博客主要内容:
--导入相关库
--加载demo数据(官方提供)
--训练网络
--评估网络
--分析一个新的视频
--创建一个自动标记的视频
--绘制分析视频的轨迹
--提取异常帧
--手动注释异常值帧
--合并数据集并更新训练集
--再次训练网络
导入相关库
#激活环境
source activate deeplabcut-py36
#进入python交互环境
python
#导入相关库
import tensorflow as tf
import deeplabcut
import os
from pathlib import Path
加载demo数据:
加载之前的文件的文件结构是这样的:
#定义一个变量来设置config.yaml地址,也就是说找到config.yaml的地址,然后交给path_config_file
path_config_file = os.path.join(os.getcwd(),''Reaching-Mackenzie-2018-08-30/config.yaml')
print(path_config_file)
#加载数据
deeplabcut.load_demo_data(path_config_file)
#检查数据标签
deeplabcut.check_labels(path_config_file)
加载之后文件的变化:
训练数据:
deeplabcut.train_network(path_config_file,shuffle=1,saveiters=300,displayiters=10)
#训练大约 30分钟后,ctrl+c手动停止训练
训练期间,可以查看 GPU 状态:
文件结构变化:主要两点:一是 trian 文件夹中文件的增加;二是新增 reachingvideo1_labeled 文件,里面是照片。
评估训练网络:
deeplabcut.evaluate_network(path_config_file,plotting=True)
# 此函数用于评估特定训练状态(快照)或所有状态下特定随机播放/随机播放的训练模型。
# 在数据集(图像)上对网络进行评估,并将结果作为.csv文件存储在评估结果下的子目录中
根据设置,有时会出现一些“matplotlib错误,但这些错误并不重要。现在你可以去看看照片了。因为需要大约20分钟。
分析视频
#创建新的视频路径
videofile_path = os.path.join(os.getcwd(),'Reaching-Mackenzie-2018-08-30/videos/reachingvideo1.avi')
# 注意保存视频的目录下选择一个视频即可
print("Start Analyzing the video!")
#分析视频,需要大概10分钟……
deeplabcut.analyze_video(path_config_file,[videofile_path])
对应的新增文件:
创建一个自动标记的视频
这个函数是创建带有预测标签的.mp4视频。这个视频与未标记的视频保留在一个目录下
deeplabcut.create_labeled_video(path_config_file,[videofile_path], draw_skeleton=True)
绘制轨迹
此函数绘制整个视频中所有身体部位的轨迹。每个身体部位都有一种独特的颜色。底层函数可以很容易地定制
%matplotlib notebook
deeplabcut.plot_trajectories(path_config_file,[videofile_path],showfigures=True)
此时结束后,多了两个文件:
提取异常帧
这一步骤是可选择步骤,当结果不太令人满意且需要更多的样本时,使用这个函数来提取错误预测标签的帧。
deeplabcut.extract_outlier_frames(path_config_file,videofile_path,outlieralgorithm='uncertain',p_bound=.2)
此时,新增一个文件夹,里面保存的新增提取的帧
手动更改标签:
此步骤是让用户更正提取帧中的标签。
deeplabcut.refine_label(path_config_file)
此时会弹出GUI窗口,手动更改标签:
合并数据集:
deeplabcut.merge_datasets(path_config_file)
创建训练数据集的新迭代,检查并训练...(现在剩下的步骤便是重复上面的步骤,在新的数据集上训练)
# 检查标签
deeplabcut.check_labels(path_config_file)
# 创建训练数据集
deeplabcut.create_training_dataset(path_config_file)
重新训练
# 在新的数据集重新训练
deeplabcut.train_network(path_config_file)