基于pymoo与NSGA-II的多目标优化实战:从原理到ZDT1问题求解
1. 项目概述从单目标到多目标的思维跃迁在工程和科研领域我们常常面临“既要…又要…”的困境。比如设计一辆车我们希望它油耗最低同时又希望它的加速性能最强开发一个推荐系统既要点击率高又要用户满意度高。这些目标往往是相互冲突的油耗低可能意味着动力弱点击率高可能源于“标题党”而损害长期满意度。这就是典型的多目标优化问题。传统的单目标优化我们总能找到一个“最优解”但在多目标的世界里没有唯一的“最好”只有一群“还不错”的折衷方案我们称之为“帕累托最优解集”。过去解决这类问题要么靠工程师的经验手动调参要么将多个目标加权求和强行变回单目标问题。但权重怎么设这本身又成了一个玄学问题。NSGA-II非支配排序遗传算法 II的出现为这类问题提供了优雅的自动化解决方案。它不需要你预先设定目标的权重而是通过模拟生物进化的过程直接找出一系列分布均匀的帕累托最优解把选择的权力交还给决策者。而pymoo这个Python库让这一切变得触手可及。它封装了包括NSGA-II在内的众多前沿多目标优化算法接口清晰文档友好极大地降低了我们实践的门槛。今天我就以一个经典的测试问题——ZDT1为例手把手带你走通用pymoo和NSGA-II解决一个多目标优化问题的完整流程。你会发现从问题定义到结果可视化代码可能比你想象的要简洁得多。2. 环境搭建与pymoo核心概念解析2.1 创建专属的Python环境我强烈建议为这个项目创建一个独立的虚拟环境。这能避免与你系统中已有的其他Python包产生版本冲突保持环境的纯净。这里我使用conda来管理如果你习惯用venv或pipenv原理相通。# 创建一个名为 pymoo_demo 的新环境并指定Python版本为3.8或更高 conda create -n pymoo_demo python3.8 # 激活这个环境 conda activate pymoo_demo环境激活后命令行提示符前通常会显示环境名(pymoo_demo)。接下来安装核心库# 安装pymoo这是我们的主角 pip install pymoo # 安装科学计算和可视化必备的库 pip install numpy matplotlib pandas注意pymoo的某些高级功能或最新特性可能需要额外的依赖比如用于高性能计算的cython。对于本次入门实战上述基础安装已完全足够。如果安装缓慢可以考虑使用国内的镜像源例如清华源pip install pymoo -i https://pypi.tuna.tsinghua.edu.cn/simple。2.2 理解pymoo的“问题”与“算法”范式pymoo的设计非常清晰它将优化过程抽象为两个核心对象问题和算法。问题你需要定义一个类继承自pymoo.core.problem.Problem。在这个类里你必须明确三件事n_var: 决策变量的个数。比如你要优化一个函数f(x1, x2)那么n_var2。n_obj: 目标函数的个数。我们解决的就是多目标问题所以这里至少是2。_evaluate: 这是核心方法。你在这里实现你的目标函数计算逻辑。输入是一群候选解种群输出是这群候选解对应的目标函数值。算法pymoo.algorithms模块提供了许多现成的算法比如我们今天要用的NSGA2。你只需要用几行代码初始化它并设置一些关键参数如种群大小、迭代代数等。求解器pymoo.optimize.minimize函数是连接问题和算法的桥梁。你把定义好的问题和算法传给它它就会执行优化过程并返回一个结果对象里面包含了找到的最优解集、目标值等所有信息。这种“定义问题 - 选择算法 - 调用求解”的模式是pymoo最基本也是最强大的工作流。接下来我们就用代码来具象化这个流程。3. 实战演练定义并求解ZDT1测试问题3.1 问题定义实现ZDT1问题类ZDT1是一个经典的多目标优化测试函数它有两个目标常用于验证算法的性能。它的特点是帕累托前沿是凸的且连续的理论上的最优解集是已知的便于我们验证结果。它的数学定义是决策变量x是一个长度为n的向量其中x_i在[0,1]区间内。目标1f1(x) x1目标2f2(x) g(x) * h(f1, g)其中g(x) 1 9 * (sum(x2...xn) / (n-1))h(f1, g) 1 - sqrt(f1/g)目标同时最小化f1和f2。下面我们在pymoo的框架下实现它import numpy as np from pymoo.core.problem import Problem class ZDT1(Problem): 定义ZDT1多目标优化问题。 该问题有两个需要最小化的目标函数决策变量默认维度为30维。 def __init__(self, n_var30): # 调用父类初始化 # n_var: 决策变量个数这里默认30 # n_obj: 目标函数个数ZDT1是2目标问题 # xl: 决策变量下界每个变量都是0 # xu: 决策变量上界每个变量都是1 super().__init__(n_varn_var, n_obj2, xl0, xu1) def _evaluate(self, X, out, *args, **kwargs): 核心评估函数。 X: 一个二维数组形状为 (种群大小, n_var)代表当前种群的所有个体。 out: 一个字典我们必须把计算出的目标值存入 out[F]。 # 计算第一个目标 f1 x1 f1 X[:, 0] # 取所有个体的第一个变量 # 计算g(x)函数1 9 * (x2 x3 ... xn) / (n-1) # X[:, 1:] 取所有个体从第二个变量开始的所有变量 g 1 9 * np.mean(X[:, 1:], axis1) # 计算第二个目标 f2 g * h # h 1 - sqrt(f1 / g) # 为防止除零错误加一个极小值eps eps 1e-10 h 1 - np.sqrt(f1 / (g eps)) f2 g * h # 将两个目标函数值按列堆叠存入 out[F] # out[F] 的形状应为 (种群大小, n_obj) out[F] np.column_stack([f1, f2])代码解读与注意事项_evaluate方法是问题的灵魂。pymoo在优化过程中会反复调用这个方法传入一批解X你需要返回这批解对应的目标值。X是一个二维numpy数组。pymoo以向量化方式运行这意味着你的计算也应该尽量使用numpy的向量化操作如np.mean,np.sqrt避免使用低效的Python循环这对大规模问题至关重要。out[‘F’]必须被赋值且其形状必须是(len(X), self.n_obj)。np.column_stack是一个方便的工具用于将多个一维数组合并成一个二维数组。在计算h时我们添加了一个极小值eps以防止g为0时出现除零错误。虽然在这个问题中g理论上大于等于1但出于数值稳定性的考虑这是一个好习惯。3.2 算法配置与执行优化定义好问题后我们就可以选择算法并开始优化了。NSGA-II有几个关键参数需要设置from pymoo.algorithms.moo.nsga2 import NSGA2 from pymoo.optimize import minimize from pymoo.operators.crossover.sbx import SBX from pymoo.operators.mutation.pm import PM from pymoo.operators.sampling.rnd import FloatRandomSampling # 1. 实例化我们刚刚定义的问题 problem ZDT1(n_var30) # 2. 配置NSGA-II算法 algorithm NSGA2( pop_size100, # 种群大小。一般设为决策变量数的10-20倍但不宜过大以免计算过慢。 n_offsprings100, # 每一代产生的子代数量通常等于种群大小。 samplingFloatRandomSampling(), # 采样方法在边界内随机生成初始种群。 crossoverSBX(prob0.9, eta15), # 模拟二进制交叉prob交叉概率eta分布指数控制子代与父代的相似度。 mutationPM(prob1.0/problem.n_var, eta20), # 多项式变异每个变量变异的概率为1/n_vareta是分布指数。 eliminate_duplicatesTrue # 消除重复个体保持种群多样性。 ) # 3. 执行优化 res minimize(problem, # 我们定义的问题 algorithm, # 配置好的算法 (n_gen, 250), # 终止条件运行250代 seed1, # 随机种子设为固定值可使结果可复现 verboseTrue, # 打印优化过程日志 save_historyTrue # 保存历史记录便于后续分析 ) # 4. 打印关键结果 print(优化完成) print(f找到的帕累托解个数{len(res.X)}) print(f第一个解的目标值{res.F[0]}) print(f最后一个解的目标值{res.F[-1]})参数选择心得pop_size种群大小这是最重要的参数之一。太小算法探索能力不足容易陷入局部前沿太大计算开销剧增。对于30维的ZDT1100是个合理的起点。对于更复杂、更高维的问题可能需要增加到200或300。n_gen迭代代数需要足够让算法收敛。你可以先设置一个值如250然后通过观察目标函数值的变化曲线来判断是否收敛。如果后面几十代目标值几乎没有改进就可以停止了。crossover和mutationSBX和PM是实数编码遗传算法的黄金组合。prob0.9意味着90%的个体都会参与交叉。变异概率通常设为1/n_var确保每个变量都有一定的变异机会但整体变异强度不大。seed强烈建议设置一个随机种子。这能确保你的实验是完全可复现的对于调试和对比不同算法配置至关重要。当verboseTrue时你会在控制台看到类似下面的输出它展示了算法每一代最优解的目标值范围帮助你监控进程 n_gen | n_eval | f1_opt | f2_opt 1 | 100 | 0.00000000E00 | 6.32786277E00 2 | 200 | 0.00000000E00 | 6.32786277E00 ... 250 | 25100 | 0.00000000E00 | 6.32786277E004. 结果分析与可视化洞察帕累托前沿优化完成后res对象包含了所有结果。最重要的属性是res.X: 找到的帕累托最优解集决策空间。res.F: 对应的帕累托前沿目标空间。4.1 绘制帕累托前沿图对于两目标问题最直观的方式就是将其绘制在二维平面上。import matplotlib.pyplot as plt # 绘制帕累托前沿散点图 plt.figure(figsize(8, 6)) plt.scatter(res.F[:, 0], res.F[:, 1], s30, edgecolorsblue, facecolorsnone, labelNSGA-II Pareto Front) plt.xlabel(Objective 1 (f1), fontsize12) plt.ylabel(Objective 2 (f2), fontsize12) plt.title(Pareto Front of ZDT1 Problem, fontsize14) plt.grid(True, linestyle--, alpha0.7) plt.legend() plt.tight_layout() plt.show()这张图展示了所有找到的非支配解。每个点代表一个可行的折衷方案。左下角的点f1和f2都较小是更优的区域。你可以看到解沿一条曲线分布这就是帕累托前沿。理想情况下点应该在这条曲线上均匀分布。4.2 绘制迭代过程动画可选为了更直观地理解NSGA-II的进化过程我们可以利用保存的history来制作动画展示帕累托前沿是如何一代代改进的。import matplotlib.animation as animation from IPython.display import HTML # 从历史记录中提取每一代的最优前沿 hist res.history gen_frames [] for algo in hist: # 获取该代算法找到的非支配解最优解集 opt algo.opt if opt is not None and len(opt.F) 0: gen_frames.append(opt.F) # 保存该代的前沿目标值 # 创建动画 fig, ax plt.subplots(figsize(8,6)) ax.set_xlabel(Objective 1 (f1)) ax.set_ylabel(Objective 2 (f2)) ax.set_title(Evolution of Pareto Front) ax.grid(True, linestyle--, alpha0.5) scat ax.scatter([], [], s30, edgecolorsblue, facecolorsnone) def update(frame): 动画更新函数 data gen_frames[frame] scat.set_offsets(data) # 更新散点数据 ax.set_title(fEvolution of Pareto Front - Generation {frame1}) return scat, # 创建动画对象每代间隔200毫秒 ani animation.FuncAnimation(fig, update, frameslen(gen_frames), interval200, blitTrue) plt.close(fig) # 防止重复显示静态图 # 在Jupyter Notebook中显示动画 # HTML(ani.to_jshtml()) # 如果要保存为GIF需要安装pillow # ani.save(nsga2_evolution.gif, writerpillow, fps5)注意生成动画可能需要较多内存如果历史代数很多可以每隔若干代取一帧。ani.to_jshtml()适用于Jupyter环境。如果想在脚本中运行并保存使用ani.save()并指定合适的fps帧率。4.3 性能指标计算如何定量评价我们找到的解集的质量pymoo提供了丰富的性能指标。这里介绍两个最常用的GD (Generational Distance): 衡量找到的解集与真实帕累托前沿之间的平均距离。越小越好。IGD (Inverted Generational Distance): 衡量真实帕累托前沿上的点在找到的解集中的分布情况。同时考虑了收敛性和多样性。越小越好。由于ZDT1有理论上的真实帕累托前沿我们可以计算这些指标。from pymoo.indicators.igd import IGD from pymoo.indicators.gd import GD # 首先生成ZDT1的真实帕累托前沿参考点集 # 对于ZDT1当g(x)1时f2 1 - sqrt(f1)。f1在[0,1]之间均匀采样。 pf_f1 np.linspace(0, 1, 1000) pf_f2 1 - np.sqrt(pf_f1) true_pareto_front np.column_stack([pf_f1, pf_f2]) # 计算GD和IGD indicator_gd GD(true_pareto_front) indicator_igd IGD(true_pareto_front) gd_value indicator_gd(res.F) igd_value indicator_igd(res.F) print(f生成距离 (GD): {gd_value:.6e}) print(f反转生成距离 (IGD): {igd_value:.6e})解读指标如果GD和IGD的值都非常小例如1e-3或更小说明算法找到的解集非常接近真实前沿且分布良好。如果GD小但IGD大说明解集收敛到了前沿上的某个局部区域但多样性不足。这两个指标结合能较全面地评估算法性能。5. 进阶技巧与避坑指南5.1 处理带约束的多目标问题现实问题往往带有约束。pymoo处理约束非常方便。你只需要在定义问题类时设置n_constr约束个数并在_evaluate方法中计算约束违反值G。from pymoo.core.problem import Problem import numpy as np class MyConstrainedProblem(Problem): def __init__(self): super().__init__(n_var2, n_obj2, n_constr2, # 有两个不等式约束 xlnp.array([-5, -5]), xunp.array([5, 5])) def _evaluate(self, X, out, *args, **kwargs): # 计算目标值 f1 X[:, 0]**2 X[:, 1]**2 f2 (X[:, 0] - 1)**2 (X[:, 1] - 1)**2 out[F] np.column_stack([f1, f2]) # 计算约束违反值 G # 约束形式为 G 0。如果计算出的g0则表示违反了约束。 g1 X[:, 0] X[:, 1] - 1 # 约束1: x1 x2 1 g2 X[:, 0] - X[:, 1] - 2 # 约束2: x1 - x2 2 out[G] np.column_stack([g1, g2])在优化过程中NSGA-II会自动处理这些约束优先选择满足约束或约束违反小的的解。5.2 算法参数调优实战心得种群大小pop_size是杠杆当你发现算法收敛后的前沿解分布稀疏、不连续时首先考虑增大pop_size。这给了算法更大的探索空间。代价是单代计算时间变长。交叉和变异的eta参数SBX和PM中的eta分布指数控制子代与父代的相似度。eta值越大子代离父代越近搜索更精细eta值越小子代变化越大探索更激进。通常crossover的eta设在10-20mutation的eta设在15-30是比较稳健的起点。提前终止除了固定代数pymoo支持更智能的终止条件。例如可以设置在连续多少代最优解没有显著改进后停止。from pymoo.termination import get_termination # 设置终止条件连续40代目标空间变化小于0.001则停止 termination get_termination(n_gen, 500) # 最大500代或满足下面条件 # 或者使用目标空间变化终止准则需结合具体算法 # from pymoo.termination.default import DefaultMultiObjectiveTermination # termination DefaultMultiObjectiveTermination(period50, n_max_gen500)5.3 常见报错与排查out[‘F’]形状错误错误信息ValueError: ...或F must have shape (n, n_obj)原因_evaluate中计算出的目标值数组形状不对。检查确保out[‘F’]是二维数组且第二维等于self.n_obj。使用np.column_stack或np.vstack进行组合时注意维度。算法不收敛或结果很差检查决策变量边界确保xl和xu设置正确。不合理的边界会让算法在无效区域搜索。检查目标函数尺度如果两个目标函数的数值量级相差巨大如一个在0~1一个在0~10000算法可能会被大数值目标主导。考虑对目标进行归一化处理。增加迭代次数和种群大小对于复杂问题默认参数可能不够。可视化时图形空白或奇怪检查数据打印res.F看看是否包含nan或inf值。这通常源于目标函数计算中的数学错误如除零、对负数开方。检查绘图坐标轴使用plt.xlim()和plt.ylim()手动设置合理的坐标范围确保数据点落在可视区域内。5.4 性能优化技巧向量化计算这是提升_evaluate速度最关键的一点。确保所有运算都使用numpy的数组操作彻底避免Python层的for循环。并行评估如果每个个体的评估是独立的且计算昂贵可以利用pymoo的并行化功能。在问题定义中设置elementwise_evaluationFalse默认就是False表示向量化评估并考虑使用ThreadPool或ProcessPool。对于计算密集型评估ProcessPool通常更有效。from pymoo.core.problem import Problem from concurrent.futures import ProcessPoolExecutor import numpy as np class MyExpensiveProblem(Problem): def __init__(self, **kwargs): super().__init__(**kwargs) # 初始化一个进程池 self.executor ProcessPoolExecutor(max_workers4) def _evaluate(self, X, out, *args, **kwargs): # 这里假设_evaluate_individual是计算单个个体的昂贵函数 # 注意传递给进程池的函数和参数需要是可序列化的picklable futures [self.executor.submit(self._evaluate_individual, x) for x in X] results [f.result() for f in futures] out[F] np.array(results)* **使用缓存**对于确定性且可能被重复评估的相同输入可以考虑使用缓存如functools.lru_cache但要注意内存开销和向量化评估的适配性。 从定义问题到执行优化再到结果分析和可视化我们完成了一个完整的pymoo多目标优化流程。关键在于理解“问题”和“算法”分离的思想以及如何正确实现_evaluate方法。NSGA-II的参数虽有默认值但针对具体问题微调种群大小和迭代代数总能获得更好的效果。最后别忘了用GD、IGD等指标和可视化工具来客观评价你的解集质量。多目标优化没有标准答案它提供的是一个丰富的“候选方案池”最终的决策依然需要结合你的领域知识和业务逻辑来做出。

相关新闻

跨境电商独立站搭建工具贝贝:无代码快速建站与运营指南

跨境电商独立站搭建工具贝贝:无代码快速建站与运营指南

这次我们来看一个独立站搭建工具"贝贝",这是一个专门为跨境电商卖家设计的建站解决方案。从项目信息来看,这个工具主打快速搭建独立站,特别适合没有技术背景的卖家快速上手。对于跨境电商从业者来说,独立站的重要性不言…

2026/7/28 18:49:17 阅读更多 →
计算机毕业设计之基于SpringBoot的贷款审批系统

计算机毕业设计之基于SpringBoot的贷款审批系统

本文介绍了一款使用SpringBoot和Vue开发的贷款审批系统,及其设计与实现过程。根据软件工程对软件系统开发定制的规则和标准,详细的介绍了系统的分析与设计过程,并且详细的概括了系统的开发与测试过程。本文的管理系统使用了java进行系统的后端…

2026/7/28 18:49:17 阅读更多 →
bq2026评估套件实战指南:从硬件连接到EPROM编程

bq2026评估套件实战指南:从硬件连接到EPROM编程

1. 项目概述与核心价值 如果你正在开发一个需要存储少量关键配置参数、唯一序列号或状态信息的嵌入式硬件项目,比如智能电池包、资产追踪标签或者需要版本管理的工业模块,那么你很可能正在寻找一种可靠、低成本且易于集成的非易失性存储方案。bq2026就是…

2026/7/28 18:49:17 阅读更多 →

最新新闻

Claude Opus ARC-AGI-3突破:从记忆型到推理型AI的智能评估转向

Claude Opus ARC-AGI-3突破:从记忆型到推理型AI的智能评估转向

上周,当 Claude Opus 在 ARC-AGI-3 基准上达到新的 SOTA(State-of-the-Art)成绩时,我并没有感到意外。真正让我停下来思考的,是这条消息背后一个更根本的变化:我们可能正在见证通用人工智能评估方式的一次重…

2026/7/28 18:59:20 阅读更多 →
10大开源AI Agent平台实战指南:从LangChain到Dify的落地应用

10大开源AI Agent平台实战指南:从LangChain到Dify的落地应用

最近在尝试将AI Agent落地到实际业务中,发现一个有趣的现象:市面上宣传得天花乱坠的“智能体平台”很多,但真正能让业务逻辑顺畅跑起来、成本可控、还能根据需求深度定制的,往往是那些开源方案。从简单的自动化脚本到复杂的多智能体协作系统,开源生态提供了从“夯”(基础…

2026/7/28 18:59:20 阅读更多 →
DeepSeek说“我先去吃饭了“——AI学会摸鱼了,我们该笑还是该慌?

DeepSeek说“我先去吃饭了“——AI学会摸鱼了,我们该笑还是该慌?

全网热搜数千万阅读抖音/微博双平台爆火 2026年7月27日,一件匪夷所思的事发生了。 多名用户在使用国产大模型DeepSeek进行代码编译和耗时任务时,AI没有弹出常规的"正在处理"或"系统繁忙",而是淡定地回复了一句:"我先去吃饭了",然后自动暂…

2026/7/28 18:58:20 阅读更多 →
2018 宁夏  F. Moving On

2018 宁夏 F. Moving On

给个图,有边权和点权,多组询问只能经过点权小于等于K的点的 两点之间的最短距离 先将点按照点权排序,从小到大枚举每个点作为中间的点,跑 floyd ,询问只需要找到最大的小于等于K的点权的那层图,直接输出就…

2026/7/28 18:58:20 阅读更多 →
终极Adobe破解指南:GenP 3.0免费解锁完整教程

终极Adobe破解指南:GenP 3.0免费解锁完整教程

终极Adobe破解指南:GenP 3.0免费解锁完整教程 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 还在为Adobe Creative Cloud昂贵的订阅费用而烦恼吗&#…

2026/7/28 18:58:20 阅读更多 →
STM32C562定时器输入捕获实现高精度频率测量技术详解

STM32C562定时器输入捕获实现高精度频率测量技术详解

在嵌入式开发中,频率测量是一个常见需求,无论是检测传感器输出、电机转速还是通信信号,都需要准确获取频率信息。STM32系列微控制器内置了强大的定时器模块,通过输入捕获功能可以高效实现频率测量。本文将基于STM32C562芯片&#…

2026/7/28 18:58:20 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻