
人工智能深度学习计算机视觉科研【免费下载链接】DeepLabCutOfficial implementation of DeepLabCut: Markerless pose estimation of user-defined features with deep learning for all animals incl. humans项目地址https://gitcode.com/gh_mirrors/de/DeepLabCut点击查看免费下载本文围绕 DeepLabCut 的deeplabcut.create_project.new.create_new_project函数其 API 文档入口为 docs/api/deeplabcut.create_new_project.rst系统讲解如何从零初始化一个姿态估计项目包括项目目录结构、config.yaml 配置文件生成、视频导入与 crop 信息采集、单/多动物项目差异以及底层源码实现与测试验证。读完本文你将能够独立完成项目的创建、配置修改与视频管理并理解每一步背后的代码机制。一、create_new_project 是什么项目生命周期的起点在 DeepLabCut 的完整工作流创建项目 → 抽帧标注 → 训练 → 评估 → 分析视频中create_new_project是第一步。它负责在指定工作目录下创建项目根目录及四个标准子目录扫描并导入视频复制、符号链接或移动自动探测每个视频的可裁剪区域crop bounding box生成一份带默认值的config.yaml项目配置文件。该函数定义在 deeplabcut/create_project/new.py其 API 文档由 Sphinx 的autofunction指令动态渲染自函数 docstring因此 docs/api/deeplabcut.create_new_project.rst 中的全部技术细节都直接来源于这个函数的签名、参数说明与示例代码。二、函数签名与完整参数解析def create_new_project( project: str, experimenter: str, videos: list[str | Path], working_directory: str | Path | None None, copy_videos: bool False, video_extensions: str | Sequence[str] | None None, multianimal: bool False, individuals: list[str] | None None, ) - Path | Literal[nothingcreated]:2.1 必选参数参数类型说明projectstr项目名称会与实验者名、创建日期一起拼成项目目录名experimenterstr实验者标注者名称将作为config.yaml中的scorer字段videoslist[str \| Path]视频文件或视频目录的完整路径列表。若传入目录则按扩展名扫描其中视频非递归仅一层2.2 可选参数参数类型默认值说明working_directorystr \| Path \| None当前工作目录.项目创建的目标目录copy_videosboolFalseTrue时复制视频到项目videos/目录False时优先创建符号链接链接失败如 exFAT 文件系统不支持则退回为复制再失败则移动video_extensionsstr \| Sequence[str] \| NoneNone视频扩展名过滤规则详见 2.3multianimalboolFalse是否创建多动物项目DLC 2.2 起引入individualslist[str] \| NoneNone仅multianimalTrue时生效未指定时默认为[individual1, individual2, individual3]2.3 video_extensions 的过滤语义该参数在 deeplabcut/create_project/new.py 的 docstring 中明确了三种行为其底层由collect_video_paths定义于 deeplabcut/utils/auxfun_videos.py实现None默认文件路径原样接受不做扩展名过滤目录则扫描识别出的视频扩展名SUPPORTED_VIDEOS avi, mp4, mov, mpeg, mpg, mpv, mkv, flv, qt, yuv。str或Sequence[str]如mp4或[mp4, avi]文件路径与目录内容都按给定扩展名过滤。空字符串按None处理向后兼容已废弃。需要注意目录内容在extensionsNone时始终按SUPPORTED_VIDEOS过滤并默认应用DEFAULT_EXCLUDE_PATTERNS排除规则收集结果会去重且按排序输出以保证确定性。2.4 返回值与异常返回值新建项目的config.yaml的绝对路径Path类型当没有找到任何有效视频时返回字符串nothingcreated。异常FileNotFoundError——当videos中传入不存在的路径时抛出。版本兼容video_extensions参数由旧参数videotype经renamed_parameter装饰器重命名而来since 3.0.0旧写法依然可用但会收到弃用提示。三、项目目录结构与命名规则创建项目时源码deeplabcut/create_project/new.py按如下逻辑组织文件系统date dt.today() # 形如 2026-10-03 d Oct3 # 月份三字母缩写 日用于 config.yaml 的 date 字段 project_name f{project}-{experimenter}-{date} # 例reaching-task-Linus-2026-10-03 project_path wd / project_name生成的目录树working_directory/project-experimenter-YYYY-MM-DD/ ├── config.yaml # 项目主配置文件核心产物 ├── videos/ # 视频副本/符号链接/移动后的视频 ├── labeled-data/ # 每个视频一个子目录存放标注帧png h5 csv │ └── video_name/ # 以视频文件名不含扩展名命名 ├── training-datasets/ # 训练数据集含 shuffle 划分 └── dlc-models/ # 训练出的模型权重需要注意两个边界行为已存在项目处理若project_path已存在非 DEBUG 模式函数不会覆盖而是直接打印Project ... already exists!并返回现有config.yaml路径deeplabcut/create_project/new.py。空视频清理若最终video_sets为空函数会静默删除刚创建的整个项目目录并返回nothingcreated并提示检查视频文件deeplabcut/create_project/new.py。labeled-data/video_name/子目录按每个视频的文件名Path.stem逐个创建deeplabcut/create_project/new.py为后续extract_frames的标注数据存放做好准备。四、视频导入的三种策略copy、symlink 与 fallbackcopy_videos参数控制视频进入项目的物理方式其完整逻辑在 deeplabcut/create_project/new.pycopy_videosTrue调用shutil.copy将每个视频复制到videos/目录config.yaml中的video_sets键记录的是新位置的绝对路径。copy_videosFalse默认先尝试Path.symlink_to创建符号链接若抛OSError如 Windows 无权限或 exFAT 文件系统则尝试通过subprocess.check_call(mklink ...)用系统命令创建若再失败打印Symlink creation impossible ... copying the video instead并退回复制。注意此时videos destinations会把导入后的新路径写入配置。无论哪种策略若目标路径已存在且非 DEBUG 模式会抛出FileExistsError(fVideo {dst} exists already!)防止重复导入覆盖。4.1 crop 信息的自动探测每个导入的视频都会通过VideoReader来自 deeplabcut/utils/auxfun_videos.py打开读取其边界框vid VideoReader(os.fspath(video_key)) video_sets[os.fspath(video_key)] {crop: , .join(map(str, vid.get_bbox()))}get_bbox()返回形如(0, 640, 277, 624)的元组最终写入config.yaml的video_sets条目形如video_sets: /path/to/project/videos/mouse1.avi: crop: 0, 640, 277, 624如果VideoReader打开视频失败抛OSError该视频会被跳过并从项目中移除Path(video).unlink()同时发出Cannot open the video file! Skipping to the next one...警告deeplabcut/create_project/new.py。测试 tests/create_project/test_video_set_configuration.py 中的test_invalid_video_removed_from_project正是验证了这一行为当 mock 的VideoReader抛出OSError时函数返回nothingcreated。五、config.yaml 的生成单动物与多动物两种模板配置写入的核心流程是先由auxiliaryfunctions.create_config_template(multianimal)获取带默认值的模板字典实现在 deeplabcut/core/config/utils.py内部基于ProjectConfig构建并保留字段顺序再由create_new_project覆盖业务相关字段最后由write_config落盘为 YAML。5.1 单动物项目multianimalFalse的默认字段cfg_file[multianimalproject] False cfg_file[bodyparts] [bodypart1, bodypart2, bodypart3, objectA] cfg_file[skeleton] [[bodypart1, bodypart2], [objectA, bodypart3]] cfg_file[default_augmenter] default cfg_file[default_net_type] resnet_50默认标注 4 个部位3 个身体部位 1 个物体骨架连接bodypart1–bodypart2与objectA–bodypart3。这些占位符需要用户在标注前手动修改。5.2 多动物项目multianimalTrue的默认字段cfg_file[multianimalproject] True cfg_file[identity] False cfg_file[individuals] individuals or [individual1, individual2, individual3] cfg_file[multianimalbodyparts] [bodypart1, bodypart2, bodypart3] cfg_file[uniquebodyparts] [] cfg_file[bodyparts] MULTI! # 哨兵值表示由 multianimalbodyparts 决定 cfg_file[skeleton] [[bodypart1, bodypart2], [bodypart2, bodypart3], [bodypart1, bodypart3]] cfg_file[default_track_method] ellipse多动物项目还根据config.yaml中已配置的engine推理/训练引擎分支设置不同的默认值deeplabcut/create_project/new.pyPyTorch 引擎Engine.PYTORCH.aliasesdefault_augmenter albumentationsdefault_net_type resnet_50TensorFlow 引擎Engine.TF.aliasesdefault_augmenter multi-animal-imgaugdefault_net_type dlcrnet_ms5其他引擎值则抛出ValueError(fUnknown or undefined engine {engine})。从源码结构看engine参数经由 deeplabcut/core/engine.py 的Engine枚举统一管理这是 DLC 3.0 前后端解耦设计的体现。5.3 单/多动物共用的公共字段cfg_file[Task] project # 项目任务名 cfg_file[scorer] experimenter # 标注者名 cfg_file[video_sets] video_sets # 视频路径 → crop 字典 cfg_file[project_path] project_path cfg_file[date] d # 如 Oct3 cfg_file[cropping] False # 分析时是否启用裁剪 cfg_file[start], cfg_file[stop] 0, 1 cfg_file[numframes2pick] 20 # 每个视频默认抽取的标注帧数 cfg_file[TrainingFraction] [0.95] # 训练集划分比例 cfg_file[iteration] 0 # 数据集迭代号 cfg_file[snapshotindex] -1 # 使用最新模型快照 cfg_file[detector_snapshotindex] -1 cfg_file[x1], cfg_file[x2] 0, 640 cfg_file[y1], cfg_file[y2] 277, 624 cfg_file[batch_size] 8 # 视频分析推理时的批大小 cfg_file[detector_batch_size] 1 cfg_file[corner2move2] (50, 50) cfg_file[move2corner] True cfg_file[skeleton_color] black # 骨架绘制颜色 cfg_file[pcutoff] 0.6 # 预测置信度截断阈值 cfg_file[dotsize] 12 # 绘图标记大小 cfg_file[alphavalue] 0.7 # 标记透明度 cfg_file[colormap] rainbow # 绘图配色其中x1/x2/y1/y2的默认值0, 640, 277, 624恰好与VideoReader.get_bbox()返回的默认边界框一致体现了先探测、再写入的设计闭环。六、可运行示例从 API 到命令行6.1 Python API 调用Linux/macOS 基础用法三个视频文件import deeplabcut deeplabcut.create_new_project( projectreaching-task, experimenterLinus, videos[ /data/videos/mouse1.avi, /data/videos/mouse2.avi, /data/videos/mouse3.avi ], working_directory/analysis/project/, )按扩展名批量导入目录目录/data/videos下所有.mp4deeplabcut.create_new_project( projectreaching-task, experimenterLinus, videos[/data/videos], video_extensions.mp4, )Windows 用法注意原始字符串r...与双反斜杠deeplabcut.create_new_project( reaching-task, Bill, [rC:\yourusername\rig-95\Videos\reachingvideo1.avi], copy_videosTrue, )多动物项目deeplabcut.create_new_project( projectsocial-interaction, experimenterAna, videos[/data/videos/session1.mp4, /data/videos/session2.mp4], working_directory/analysis/, multianimalTrue, individuals[mouseA, mouseB, mouseC], )6.2 命令行入口create_new_project同时暴露为 CLI 子命令deeplabcut/cli.py入口脚本为仓库根目录的 dlc.py# 在当前目录创建项目不复制视频创建符号链接 python3 dlc.py create_new_project reaching-task Tanmay \ /data/videos/mouse1.avi /data/videos/mouse2.avi \ /data/videos/mouse3.avi -d /analysis/project/ # 复制视频到项目目录 python3 dlc.py create_new_project reaching-task Tanmay \ /data/videos/mouse1.avi /data/videos/mouse2.avi /data/videos/mouse3.avi \ -d /analysis/project/ --copy_videosCLI 关键点project、experimenter为位置参数videos通过nargs-1接收任意多个视频路径-d/--wdworking_directory指定创建目录默认cwd()--copy_videos/--dont_copy_videos为 flag 开关注意 CLI 默认值为True与 Python API 默认False不同命令最终委托给new.create_new_project(*args, **kwargs)。6.3 创建成功后的后续步骤函数完成时会打印项目路径并给出两条关键提示deeplabcut/create_project/new.py修改config.yaml中的参数以适应项目需求最重要的是bodyparts、skeleton等标注相关字段使用extract_frames抽取用于标注的帧可选在任何阶段用add_new_videos实现在 deeplabcut/create_project/add.py向项目追加新视频。七、测试验证源码行为的三重保障仓库在 tests/create_project/test_video_set_configuration.py 中为create_new_project提供了完整的单元测试覆盖了以下关键行为可作为理解函数语义的权威参考测试用例验证点test_project_directory_creation_basic四个标准子目录videos/、labeled-data/、training-datasets/、dlc-models/全部创建test_single_video_file参数化copy_videos单视频导入后videos/下存在文件或符号链接复制模式下内容逐字节一致test_video_directory参数化传入目录 video_extensions.avi时只导入.avi忽略.txt等无关文件test_mixed_video_files_and_directories文件与目录混合传入时全部正确导入test_empty_video_directory空目录返回nothingcreated或产生警告test_valid_video_included_in_configvideo_sets写入配置且键路径正确解析到项目内视频test_invalid_video_removed_from_projectVideoReader打开失败 → 视频移除 → 返回nothingcreatedtest_config_file_video_sets_formatvideo_sets为 dict每项含字符串类型crop字段测试中通过patch(deeplabcut.create_project.new.VideoReader, ...)对VideoReader进行 mockget_bbox返回(0, 640, 277, 624)与真实实现中的默认裁剪坐标完全对应。八、常见问题与最佳实践nothingcreated 返回值通常意味着没有找到有效视频。排查顺序视频路径是否存在 → 扩展名是否被video_extensions过滤掉 → 视频能否被VideoReader正常打开解码器问题会触发OSError。符号链接失败默认copy_videosFalse依赖符号链接。跨平台部署尤其 exFAT 格式的移动硬盘时建议显式设置copy_videosTrue避免意外触发先链接、失败后复制的隐式行为。重复创建同名项目同 project experimenter 日期已存在时不会重新生成而是复用现有config.yaml适合在迭代中反复调用。占位符字段务必修改默认的bodypart1/2/3、objectA与individual1/2/3只是模板占位符标注前必须在config.yaml中改为真实部位与个体名称否则模型将无法学到有意义的语义。版本注意videotype参数在 3.0.0 起更名为video_extensions旧代码仍可运行但会触发弃用警告新代码应直接使用新参数名。九、小结create_new_project用一次函数调用完成了 DeepLabCut 项目中目录初始化 视频导入 配置生成的全部工作working_directory决定落盘位置copy_videos与video_extensions控制视频的物理存储与筛选multianimal与individuals决定配置模板的形态而自动探测的crop信息与全套默认参数则让生成的config.yaml开箱即可编辑使用。理解这些参数的底层实现deeplabcut/create_project/new.py、deeplabcut/core/config/utils.py与测试保障tests/create_project/test_video_set_configuration.py是高效开展后续抽帧、标注与训练的第一步。赞分享人工智能深度学习计算机视觉科研【免费下载链接】DeepLabCutOfficial implementation of DeepLabCut: Markerless pose estimation of user-defined features with deep learning for all animals incl. humans项目地址https://gitcode.com/gh_mirrors/de/DeepLabCut点击查看免费下载相关推荐isomorphic-git 分支创建指南git.branch 参数详解与底层实现原理isomorphic git 分支创建指南git.branch 参数详解与底层实现原理 本文以 isomorphic git 官方 1.x 文档 branch开发工具Formily createForm 全解析Form 实例创建、IFormProps 配置与底层实现原理Formily createForm 全解析Form 实例创建、IFormProps 配置与底层实现原理 导读 createForm 是 Formily 核心前端UI组件Velero v0.5.0 ark restore create 命令详解恢复创建参数、默认值与底层实现原理Velero v0.5.0 ark restore create 命令详解恢复创建参数、默认值与底层实现原理 Velero 在 0.5.0 版本中 CLI 命云原生灾备存储后端上一篇3个核心机制IDM激活脚本如何实现永久试用下一篇DooTask核心功能详解从任务分配到文档协作的完整生态创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考