为快速深刻的理解 DeepLabCut,本文按照官方给出的案例做相关的讲解,具体的实践步骤在文件 DeepLabCut/examples/Demo_labeledexample_MouseReaching.ipynb 给出,如有兴趣,可直接参考官方文档。图片是DeepLabCut 的整体流程结构。
本博客主要内容:
--绘制标记图像
--训练网络
--评估网络
--分析一个新的视频
--创建一个自动标记的视频
--绘制轨迹
--识别异常值框架
--手动注释异常值帧
--合并数据集并更新训练集
--训练网络
注意:此笔记本从已初始化的带有标记数据的项目开始。
(限于篇幅只讲解了流程,但没有对文件结构变化及相关的具体含义进行解释说明,有时间续写......)
# 激活环境
source activate deeplabcut-py36
# python 交互环境
python
import deeplabcut
import tensorflow as tf
import os
from pathlib import Path
加载数据前的文件结构
# 路径
path_config_file = os.path.join(os.getcwd(),'DeepLabCut-Felix/examples/Reaching-Mackenzie-2018-08-30/config.yaml')
# 加载数据
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)
# 建议训练半小时即可, ctrl+C 停止训练
训练期间,可以查看 GPU 状态:(本人电脑配置低,处于满负荷运转)
文件结构变化:(一个截屏呈现有点小,两个截屏)主要两点:一是 trian 文件夹中文件的增加;二是新增 reachingvideo1_labeled 文件,里面是照片。
# ctrl + c 停止训练
# 开始评估模型
deeplabcut.evaluate_network(path_config_file,plotting=True)
# 此函数用于评估特定训练状态(快照)或所有状态下特定随机播放/随机播放的训练模型。
# 在数据集(图像)上对网络进行评估,并将结果作为.csv文件存储在评估结果下的子目录中。
对应的新增文件:
# 创建路径
videofile_path = ['/home/DeepLabCut-Felix/examples/Reaching-Mackenzie-2018-08-30/videos/MovieS2_Perturbation_noLaser_compressed.avi']
# 注意保存视频的目录下有两个视频,但不是同一个视频。
# 一个用于训练,一个(MovieS2_Perturbation_noLaser_compressed.avi)用于分析
# 分析视频
print("Start Analyzing the video!")
deeplabcut.analyze_videos(path_config_file, videofile_path )
# 需要较长的时间分析
新增两个文件:
deeplabcut.create_labeled_video(path_config_file,videofile_path)
(此功能用于可视化目的,可用于创建带有预测标签的.mp4格式视频。此视频保存在(未标记的)视频所在的同一目录中。)即基于训练的效果,在之前用于分析的视频创建标签。
新增的标签视频目录:
(此函数绘制整个视频中所有身体部位的轨迹。每个身体部位都有一种独特的颜色。底层函数可以很容易地定制)新增的四幅图片在 videos 文件夹下的子文件夹 plot-poses。此时由上一步的 17 directories, 87 files 变成 19directories, 91 files。
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_labels(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)