DeepDNAshape安装使用指南:DNA序列形状特征预测从入门到实战

如果你手里刚拿到一批DNA序列,想给区域注释上DNA局部空间形状特征,那么“DeepDNAshape安装和使用”这一步几乎是绕不开的。它不是什么大而全的基因组分析平台,而是一个针对性很强的深度学习预测工具,核心就是把碱基序列翻译成“这段DNA螺旋怎么弯、小沟宽不宽、扭转角度多少”这类结构指标。功能听起来很明确,但真正动手装的时候,环境依赖、模型权重、输入格式这几关会拦掉不少人。

我第一次用这个工具也是在某次转录因子结合位点分析里,当时想给SNP位点附近的序列加上形状特征,看能不能解释突变为什么影响结合。试了一圈现成工具,最后落在DeepDNAshape上,原因很简单:它对短序列的支持好、预测速度快、输出字段干净,适合批量跑完再丢进下游统计。这篇文章就按我实际折腾的顺序写一遍,从环境准备到出结果,中间踩过的坑一并说清楚,给刚开始接触的人省点时间。

1. DeepDNAshape 是做什么的

1.1 一句话理解它的功能

DNA的一级序列是A、T、C、G排成的字符串,但真实DNA双螺旋里每个碱基对并不是一样的。一个碱基对处的“小沟宽度”、“螺旋扭转程度”、“碱基对之间的卷曲角度”都会随序列变化。这些变化就是DNA形状特征,在多蛋白质-DNA结合预测里非常关键。

传统做法是从已知晶体结构中去量这些几何参数,但结构数据有限、覆盖不到任意序列。DeepDNAshape的思路是换一条路:用深度学习模型在大量已知结构数据上学出“序列到形状”的映射,之后你给它一条任意序列,它直接输出对应的形状特征。对你来说,输入文件就是FASTA,出来的是一张表格,中间不需要调用外部结构数据库。

它适合谁来用?我之前觉得只有做结构生物信息学的人才需要,后来发现做功能基因组学的也经常用,比如解释变异位点、做转录因子结合 motif 的上下文特征、给机器学习分类器构造特征集。只要你的流程里需要把“序列的一维信息”扩展成“多维结构信息”,这个工具就比手工查结构库省事得多。

1.2 为什么单独写安装和使用

按理说这类工具发布后应该有清晰的安装文档,但实际用起来会发现几个麻烦:第一,项目不一定发布成一键安装的包,你经常要先从源码仓库拉下来,再手动安装依赖;第二,模型权重文件通常是单独存放的,代码仓库里不一定带完整模型;第三,依赖库版本有讲究,装新不装旧很容易碰出版本不兼容。

所以与其在网上搜零碎记录,不如把一个流程串起来:环境怎么隔离、下载什么文件、命令怎么敲、输出怎么读。这篇就是干这个用的。

1.3 和 DNAshape 等经典工具的区别

用DNA形状特征的人应该也听过传统 DNAshape 程序,那套工具基于几何规则,使用方便,但有些特征只覆盖五核苷酸上下文,预测范围有限。DeepDNAshape这类深度学习方法理论上能捕捉更长范围的序列上下文,而且对批量数据的吞吐更好。

当然不是说深度学习就一定全面胜出。它的优点是端到端、不需要调结构模板;代价是模型本身像个黑盒,如果输入序列分布和训练数据差太远,输出可能会飘。后面我会说怎么避免这种问题。

2. 安装前的环境准备

2.1 先想清楚要跑 CPU 还是 GPU

很多人一上来就想找GPU服务器,实际先别急。DeepDNAshape的预测推理并不严重依赖GPU,除非你一次要跑几百万条序列。我最初是在一台没有GPU的普通工作站上跑的,一次处理几千条短序列完全能接受,也就是几分钟的事。

如果只是验证安装、跑小数据集,CPU环境足够。只有当你要做全基因组级别的扫描,序列条数达到几十万甚至百万级,再用GPU批次推理把排队时间压下来。所以环境准备的第一步不是凑硬件,而是想清楚你的数据规模。

2.2 用虚拟环境隔离依赖

DeepDNAshape依赖的深度学习框架和数值计算库,很可能和你机器上已有的旧版本冲突。我建议不要直接装到系统Python,别嫌虚拟环境麻烦。一个不小心把系统环境里某个库的版本覆盖了,整个机器上其他脚本都会跟着遭殃。

我用的是Python自带的虚拟环境,一条命令就能建好:

python -m venv ddn_env source ddn_env/bin/activate

以后在这个终端里安装的包都落在 ddn_env 里,不会污染系统级环境。

有些习惯用 conda 的同学也可以继续用 conda 建环境,逻辑一样。我不对工具选型做强行推荐,只要满足“隔离 + 可删除重建”就行。

2.3 提前准备基础依赖

DeepDNAshape 代码仓库里通常会带一个依赖清单文件,比如 requirements.txt。里面会写明需要哪些Python包以及建议版本。不要自己凭感觉从网上逐个安装最新版,不同版本的深度学习框架API有差异,直接抄仓库里的固定版本是最稳的做法。

我习惯先升级一下包管理工具,再统一安装依赖:

pip install --upgrade pip pip install -r requirements.txt

这里我的建议是安装时盯着命令行输出,如果某个包在编译扩展,等它编译完成不要中途打断。有些包是包含C扩展的,中断后再装,轻则重新下载,重则留下半成品,后面导入时报错还让你摸不着头脑。

3. 安装实操步骤

3.1 获取代码和模型权重

第一步是把项目源码拿到本地。正规开源仓库一般支持 git clone:

git clone <官方源码仓库地址> cd DeepDNAshape

先别急着执行安装,看一眼目录结构。常见布局大概是这样:代码文件在最外层,examples目录放示例数据,checkpoints目录存放模型权重,doc目录放文档。没有统一标准,但“先看README”一定不会错。

重点注意README里关于权重文件的部分。代码仓库有时代码和权重分开,你需要额外下载模型权重,再放到指定目录。常见问题是:权重没下载或者放错目录,程序不报“文件不存在”,而是等你跑到一半才报加载模型失败。所以这里我建议,拿到仓库后先把README中关于模型下载的那段截下来,一步一步照做。

3.2 创建环境并安装依赖

假设你已经解压或 clone 完代码,现在开始建环境。

python -m venv ddn_env source ddn_env/bin/activate pip install --upgrade pip pip install -r requirements.txt

如果你机器上同时存在多个Python版本,最好先确认版本。DeepDNAshape这类深度学习项目通常对Python版本有下限要求,比如3.7或者3.8以上。用python --version先看一眼,版本太老建议换新一点的环境。

依赖安装这一环节,我遇到过最荒唐的问题是:基础库安装列表和实际 import 的包名不一致。导致pip list里看着明明有,跑代码却提示找不到。解决办法是看导入语句,顺着导入语句的包名去查它属于哪个分发名,这种情况经常发生在某些库改名后。

3.3 验证安装是否成功

装完别急着跑正式数据,先执行一个最简单的自检。很多项目会提供一个--help入口:

python run_deepdnashape.py --help

能正常打印出参数说明,说明代码环境基本没毛病。然后跑一下仓库里的示例数据,通常是 examples 目录下的小文件:

python run_deepdnashape.py \ --input examples/sample.fa \ --output examples/sample_output.tsv \ --model checkpoints/model.h5

如果示例能跑通,安装这关才算真正过了。我在这一步吃过亏,第一次自检时只运行了--help,觉得没问题就上了真实数据,结果真实数据列数多、序列长,程序跑到一半内存占用暴涨,被系统直接终止。后来才明白:示例数据体积小,实际数据不一定,正式跑前要提前做批量拆分。

4. 第一次运行:从序列到形状特征

4.1 准备一份最小输入

DeepDNAshape 的输入一般是FASTA格式。FASTA内容长什么样大家应该都知道,但我还是提醒一句:序列名和序列内容之间不要有额外空格,多条序列用唯一的序列名区分,不要出现空行夹在记录中间。

最小输入示例:

>seqA ACGTACGTACGTACGTACGT >seqB TCGATCGATCGATCGATCGA

序列长度方面,建议每条至少20个碱基以上。太短的序列算出来的边界区域特征可靠性差,因为模型需要一定的上下文窗口。准备数据时还要检查字符,DeepDNAshape处理的是标准DNA字符,如果文件里有“U”或者小写之外的奇怪字符,最好在预处理阶段做清洗或者直接丢弃。

4.2 设置参数

不同版本参数名可能略有差别,但核心参数是固定的。我示范一个常见调用方式:

python run_deepdnashape.py \ --input your_seqs.fa \ --output your_seqs_shape.tsv \ --features roll helt mgw prot \ --batch_size 64 \ --model checkpoints/model.h5
  • --input:输入FASTA路径。
  • --output:输出结果路径。
  • --features:指定需要输出的形状特征,多个特征用空格分隔。
  • --batch_size:控制批量大小,越大越快但内存占用越高。
  • --model:模型权重文件路径。

刚开始不熟的时候,参数尽量少,先用默认输出所有特征,完整跑通一次,再按需裁剪。

4.3 看懂输出文件

程序输出的通常是制表符分隔的表格,命名类似 .tsv。我打开文件之后大概长这样:

seq_id position base roll helt mgw prot seqA 1 A 7.21 35.8 4.12 -9.54 seqA 2 C 5.38 36.1 3.98 -8.87

每一行对应一条序列的一个碱基位置。序列多、位置多时,行数等于所有序列长度之和。所以如果有1万条100bp的序列,输出就是100万行,不算大,但用Excel打开会很吃力,建议用脚本处理。

特征列的含义可以简单记:一个转转的角度特征,一个描述螺旋形状,一个和小沟宽度有关,一个与碱基对平面扭转有关。到底哪个对应哪个,以你下载版本的输出列顺序和文档为准。

我一般拿到这张表后,会先看感兴趣的 motif 区域,比如把 motif 上下游各几十个碱基的行抽出来求均值,再和对照组比;也可以直接作为特征送入机器学习模型。关键是先确定你要用哪一列,而不是一股脑全塞进去,以免信息冗余。

5. 实际项目中的坑

5.1 请把序列清洗一遍

这里一定要说,因为很多人最后输出结果不可信,问题不是出在工具,而是出在输入。

DeepDNAshape对输入字符敏感。如果FASTA里混入了IUPAC简并碱基符号,比如“R”、“Y”、“N”,千万别指望程序自动忽略。有的版本会直接报错,有的版本会生成固定值,看起来像正常输出,实际会把异常字符位置标记成边界。我踩过最简单的坑是FASTA文件里混入了“U”,程序把U当成异常字符,跑出来那一行数值明显偏离。

所以我的习惯是,先用一个简单的清洗步骤,只保留A、C、G、T,遇到其他字符整条删除或者只保留纯标准片段。不要觉得多此一举,这一步能排除一半以上的诡异结果。

5.2 一次不要塞太多序列

我把全基因组某个feature对应的区域导出成FASTA,一次导入几万条,结果程序跑着跑着内存撑不住。DeepDNAshape虽然单条序列预测时计算量不大,但批量加载还是会吃内存。

解决办法是拆分输入。可以一条条地拆,可以按染色体拆,也可以每5000条拆成一个文件,循环调用程序。批量大小控制也一样,改小--batch_size,内存峰值会明显下降。速度不一定慢很多,因为模型推理本身不是瓶颈,数据读写和预处理往往更耗时。

5.3 序列越短,边界伪影越严重

模型默认看到的是有限上下文,如果你输入的序列刚好和训练数据长度差不多,或者只有20bp,那序列首尾部分预测值可能不如中间区域可靠。

不是说短序列不能用,而是分析时要注意边界区域。比如序列有50bp,我在看第49、50位的预测值时会更谨慎。如果非要比较多个样本的首尾碱基,建议在每条序列上下各加一段相同的填充序列,输出后去掉边界,再比较原始区域的形状特征。这种方法能尽量让所有位置都处于可靠的上下文范围内。

注意,这里的填充序列要随机或取一个中性序列,不要所有样本都硬加同一个“G”的重复,否则填充本身会引入固定模式,结果越修越偏。

5.4 模型权重路径尽量用绝对路径

有一次我在不同工作目录下运行命令,明明权重文件就在原目录里,却报“找不到模型文件”。查了半天,才发现问题出在相对路径上。程序启动时拼接模型路径,路径解析基准变了,相对路径自然失效。

自己的项目里最好固定一个习惯:

export DDN_MODEL="/绝对路径/to/checkpoints/model.h5" python run_deepdnashape.py \ --input your_seqs.fa \ --output your_seqs_shape.tsv \ --model $DDN_MODEL

写成脚本时也尽量用绝对路径。这样换目录、换机器、加定时任务都不容易出问题。

5.5 CPU环境常见初始化问题

有些机器上没装GPU驱动,或者装的是CPU版深度学习框架,但项目默认代码会尝试调用GPU设备,结果报错中止。处理方式不难:如果不需要GPU,就确保安装的是CPU版本框架,不要为了省事装上GPU版再跑到无GPU机器上。

如果是需要GPU但你只有一张显卡,碰到显存不足,那就老老实实把batch_size调小,必要时降到一两条。我当时跑一组较大的全基因组区域,把batch_size从默认值降到16,才在8G显存的卡上顺利跑完。

6. 常见问题速查表

问得最多、重复率最高的问题,我直接整理成一张表:

现象概率原因解决办法
安装依赖时报错,某个包编译失败Python版本不匹配切换项目指定的Python版本,重建虚拟环境
程序启动后提示找不到模型权重文件没下载或路径错检查README中的下载说明,用绝对路径指定模型路径
运行时报非法字符FASTA里有非A/C/G/T字符清洗输入序列,删除含异常字符的片段
输出结果全是NaN或数值异常序列过短或含大量异常字符加长序列、清洗数据、剔除边界区域
内存占用过高被系统杀输入文件过大或batch_size太高拆分输入文件,调小batch_size
GPU版本报错“无法找到设备”驱动不匹配或框架版本不对安装CPU版框架,或不强制调用GPU

这张表不能覆盖所有情况,但覆盖了大多数新手会遇到的坑。根据我的经验,真正需要深入查源码的问题很少,绝大多数都是由“环境不干净”、“输入不干净”、“路径不明确”三件事引起的。

7. 后续扩展思路

如果你已经能把单个FASTA跑出形状特征,再进一步可以做两件事。

第一,把输出特征整合进下游建模。比如将每个motif位点周围的形状特征取窗口均值,拼到原有序列特征后面,作为分类模型的输入。这种方式在实践中很常见,因为DNA序列本身的k-mer编码在很多任务上会遇到特征稀疏问题,形状特征相当于把空间信息补充进来。

第二,如果预测结果波动大,可以试试对同一条序列做多次重复预测,观察模型输出稳定程度。不同框架、不同随机种子下,有些模型会出现细微差异,这在深度学习工具里不奇怪。关键是用一套固定参数来跑完整项目,不要在中间随意换版本。

我在做批量分析时的建议是:第一次一定用一个小数据集完完整整地跑通,确认输出列名、顺序、单位都和预期一致,再铺开全量。因为大任务一旦跑错,回头补救的成本很高。

最后,分享一个经验:环境里保留一份成功跑通过的记录,记录当时Python版本、依赖版本和调用参数。等哪天升级系统或者换机器,直接照着这份记录重建环境,会比对着报错逐条排查快得多。我就靠这个习惯,第二次在另一台机器上部署时,前后不到半小时就把整个流程跑完了。

相关新闻

智能制造与机器人工程:人才缺口480万,起薪15万怎么拿?

智能制造与机器人工程:人才缺口480万,起薪15万怎么拿?

1. 缺口480万&#xff1a;这个数字是怎么被市场“逼出来”的这几年只要你打开招聘平台的年度就业报告&#xff0c;几乎都能在显眼位置看到同一个专业方向出现在榜首&#xff1a;人才缺口480万&#xff0c;平均月薪排名第一&#xff0c;应届生入职年薪15万起。这三个数据放在一起…

2026/10/20 23:05:20 阅读更多 →
括号匹配实战:用栈实现健壮的字符串校验

括号匹配实战:用栈实现健壮的字符串校验

简介&#xff1a;本资源是一份面向JavaScript初学者与算法入门者的括号匹配问题实战代码包&#xff0c;聚焦栈数据结构在字符串有效性校验中的典型应用。资源通过简洁高效的JS实现&#xff0c;解决LeetCode经典题型——判断含()[]{}的字符串是否满足左右括号类型一致、顺序闭合…

2026/10/20 23:05:20 阅读更多 →
游戏Agent九月观察:大模型与强化学习融合,多智能体协作迈向实战

游戏Agent九月观察:大模型与强化学习融合,多智能体协作迈向实战

9月这个节点&#xff0c;游戏Agent这个圈子突然热闹起来了。前几个月大家还在争论大模型能不能替代传统行为树&#xff0c;这个月已经有不止一支团队把可复现的Demo、训练代码和评测数据放了出来。作为一个一直在这块折腾的人&#xff0c;我能明显感觉到节奏变了&#xff1a;从…

2026/10/20 23:05:20 阅读更多 →

最新新闻

AF_XDP 实战指南:Ubuntu 24.04 上基于 eBPF 的高性能包处理

AF_XDP 实战指南:Ubuntu 24.04 上基于 eBPF 的高性能包处理

1. 项目概述&#xff1a;AF_XDP 到底解决什么问题碰上 AF_XDP 这个技术点的人&#xff0c;多半是已经在 Linux 上做高性能包处理&#xff0c;或者被 DPDK 的运维成本折腾过之后&#xff0c;想在内核生态里找个折中方案。AF_XDP 不是一个框架&#xff0c;而是 Linux 内核提供的地…

2026/10/20 23:41:33 阅读更多 →
用Unity打造桌面精灵:透明窗口、鼠标穿透与动画实战

用Unity打造桌面精灵:透明窗口、鼠标穿透与动画实战

简介&#xff1a;这是一份基于Unity引擎开发桌面精灵的完整工程资源&#xff0c;面向希望实现类似QQ宠物透明浮动桌面形象的Unity开发者。资源围绕窗口无边界设置、透明材质渲染、UI布局、Animator动画控制以及鼠标交互事件等关键技术点组织&#xff0c;适合有一定Unity基础、想…

2026/10/20 23:41:33 阅读更多 →
GLSL变量与类型系统详解:从标量到矩阵的Shader避坑指南

GLSL变量与类型系统详解:从标量到矩阵的Shader避坑指南

如果你写过一段时间的着色器&#xff0c;大概率遇到过这种时刻&#xff1a;shader编译失败&#xff0c;错误信息指向某个变量&#xff0c;你盯着那一行看了很久&#xff0c;愣是没发现哪里有问题。我印象最深的一次是在某个延迟渲染demo里&#xff0c;片元着色器把法线数据当成…

2026/10/20 23:41:33 阅读更多 →
C语言是什么?从底层原理到上手路径的全面解析

C语言是什么?从底层原理到上手路径的全面解析

编程这行干久了&#xff0c;总会被外行朋友或刚入行的新人问到同一个问题&#xff1a;“C语言到底是什么&#xff1f;” 每次被问到&#xff0c;我都会愣一下&#xff0c;因为这个问题看似简单&#xff0c;真要一两句话说清楚还挺难。它不像Java能“写安卓APP”&#xff0c;也不…

2026/10/20 23:41:33 阅读更多 →
好写作AI如何用游戏化设计破解写作恐惧,养成写作习惯

好写作AI如何用游戏化设计破解写作恐惧,养成写作习惯

1. 好写作AI到底在做什么&#xff1a;把“写作”变成“练级”1.1 它解决了什么问题&#xff1a;写作恐惧不是懒&#xff0c;是“防御”我见过太多人说自己“不会写”“写不出来”&#xff0c;包括我自己也曾是这样。面对一个空白文档&#xff0c;光标一开一合&#xff0c;脑子里…

2026/10/20 23:41:33 阅读更多 →
华三AC WX5560H AP信道优化实战:解决信号满格却卡顿

华三AC WX5560H AP信道优化实战:解决信号满格却卡顿

前阵子在某园区处理无线投诉时&#xff0c;我碰到一个很典型的场景&#xff1a;AP 装了一堆、信号显示也是满格&#xff0c;但视频会议就是动不动卡成 PPT。当时很多人第一反应是带宽不够&#xff0c;可跑到华三 AC WX5560H 上一看&#xff0c;控制器负载很低&#xff0c;出口带…

2026/10/20 23:40:32 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →