news 2026/10/11 0:21:10

5G网络切片资源隔离性验证:测试框架设计与pytest自动化实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5G网络切片资源隔离性验证:测试框架设计与pytest自动化实践

去年做运营商5G专网验证项目时,客户提了一个相当刁钻的需求:两个网络切片必须做到“绝对隔离”,而且要用数据证明,不能拍脑袋。场景是工业园区混合组网,自动化产线走uRLLC切片,办公区刷视频走eMBB切片。客户最担心的是:一个员工刷4K视频,会不会把机械臂的控制时延从5ms拉到30ms。这个问题一听很简单,真正验证起来却牵引出一整套测试框架的设计问题。

这篇内容就把“5G网络切片资源隔离性验证的测试框架与方法”完整拆开讲,从隔离性到底测什么、指标怎么定,到为什么选择pytest作为自动化测试框架支撑整套验证流程,再到用例设计、脚本实现和实战中踩过的坑。适合在运营商、设备商或第三方测试机构做5G端到端测试的同学参考,也适合刚入行想系统理解切片验证全流程的通信工程师阅读。本文不谈太多3GPP协议标准条文,重点放在“测试这件事具体怎么做才能拿到可信结果”,毕竟客户只看最终交付的测试报告。

1. 网络切片资源隔离性到底是什么

1.1 切片资源隔离的三层含义

网络切片(Network Slicing)本质上是在同一张物理5G网络上,用虚拟化方式切分出多张逻辑网络,每张逻辑网络按需分配无线资源、承载资源和核心网资源,服务不同业务。3GPP把典型场景分成三大类:eMBB(增强移动宽带,视频、AR/VR)、uRLLC(超可靠低时延通信,工业控制、远程驾驶)和mMTC(海量机器连接,智能抄表、传感器)。每个切片对应一个S-NSSAI标识,其中SST字段标明切片类型,SD字段用来区分同一类型下的不同切片实例。

刚接触切片项目时,团队最容易犯的错是把“隔离性”当成一个整体概念去讨论。实际拆开来看,资源隔离性至少包含三层:

性能隔离:当某个切片负载升高时,另一个切片的性能指标(吞吐量、时延、丢包率)不会发生不可接受的劣化。比如eMBB切片流量跑满时,uRLLC切片的P99时延依然达标。

故障隔离:某个切片内部出现拥塞、信令风暴,甚至代码缺陷导致容器崩溃时,其他切片不受波及,仍能正常建立PDU会话和转发数据。

安全隔离:切片A的用户无法访问切片B的用户面数据或控制面信息,数据通道、接口地址、服务化接口之间互相不可达。

打个比方:切片就像同一栋楼里的几部电梯。性能隔离是说楼上某家公司装修占着货梯,你的客梯照样能在合理时间内到达;故障隔离是说货梯坏了不能把客梯也拖停;安全隔离是说货梯里运送的物品,走客梯的人不能顺手拿走。三件事看着相关,但验证方法和结论完全不同,测试报告里不能混为一谈。

1.2 隔离性验证的业务价值

切片隔离性直接决定运营商敢不敢把不同SLA要求的客户塞进同一张物理网络。一个园区里,一边是uRLLC切片承载自动化产线,时延要求5ms以内,一边是eMBB切片供办公人员刷视频。如果两者资源隔离没做透,一个员工刷4K视频,就可能让机械臂的控制时延从5ms飙到30ms。

这还不是“网络卡一点”的问题。对工业客户来说,30ms时延意味着一个工艺循环的时间窗口错过,整条产线的控制指令失效,设备进入安全急停,废掉一批工件。运营商在切片售前方案里承诺了99.999%的可靠性,交付时就要拿出实测数据证明这个承诺在混合负载条件下依然成立。

所以从业务视角看,资源隔离性验证的本质,是在验证“运营商对客户的SLA承诺是否可被证明”。现在集团客户招标,明确要求提供切片隔离性验证报告,组网方案不是画个架构图就能通过,要有实测数据作为支撑。这个趋势在5G组网与运维相关竞赛和功能验证需求里也越来明显。

1.3 隔离性验证的技术难点

理论上一套切片方案可以讲得天花乱坠,真正执行验证时会发现难点不在“怎么配置”,而在“怎么证明”。第一个难点是无线侧资源共享下的隔离不可控。空口资源本质上共享,即使给每个切片划分不同PRB集合,调度优先级、信道变化、MCS调制等级变化依然会带来性能互扰。第二个难点是端到端资源有多层联动。RAN侧调度、承载网转发、核心网UPF队列,任何一个环节资源受限,都会传导成隔离性劣化,问题定位时很难一刀切。第三个难点是测试环境难复现。无线信道条件每天不同,同一套测试场景跑三天,数据可能差一个量级,结论就不可信。

这些难点决定了必须有一套可重复、可量化、可自动化执行的测试框架,靠“登录网管看看计数”这种方式下结论,客户是不可能签字的。

2. 测试框架整体设计与工具选型

2.1 被测对象分层与测试范围

设计框架前先把被测对象拆开。端到端切片的资源隔离涉及下面几层:

  • 无线接入网(RAN)层:gNB调度器如何在不同切片间分配PRB,切片级QoS调度策略是否生效,小区级的资源预留是否到位。
  • 承载网层:FlexE硬隔离管道是否真正实现物理带宽隔离,SRv6软隔离在拥塞时是否按优先级保证目标切片。
  • 核心网用户面:UPF的转发资源、队列调度、限速策略。这是流量汇聚和转发的咽喉,也是最容易暴露隔离短板的地方。
  • 核心网控制面:AMF和SMF对切片实例的选择逻辑、信令处理能力、切片内信令风暴是否影响其他切片。
  • 切片管理面:NSMF/NSSMF编排配置的正确性和下发一致性。

实际项目中,多数验证工作集中在RAN侧和UPF层。原因很简单,这两个位置是用户面数据真正经过的路径,也是资源最容易争抢的地方。控制面管理面的隔离验证多为功能验证和编排一致性校验,很少做大规模压力测试。测试框架在规划时要明确“分层测”和“端到端测”两套视角,分层测用来定位问题,端到端测用来证明客户关心的最终SLA。

2.2 自动化框架选型:为什么选择pytest

自动化框架选型在团队内部有过争论。有些人建议沿用Java接口自动化测试框架,理由是网元南向接口多用RESTCONF、NETCONF、gRPC,Java生态成熟。最后还是选了pytest为主体的Python框架,核心原因有四个。

第一,pytest的fixture机制非常适合测试前置准备和环境清理。切片测试的每一项用例都需要“配置切片参数-建立会话-打流-采集-清理”,fixture可以把这个流程固化成模块级或类级依赖,避免用例耦合。

第二,parametrize参数化能力让多负载等级、多切片组合的用例展开变得极其简洁。一个干扰等级从0到100%的测试,用参数化一次性声明,代码量只是原来的几分之一。

第三,pytest的mark标记机制方便做用例分类。冒烟用例、回归用例、长时间稳定性用例可以灵活编排,跑测试时用-m参数选择执行范围,不跑废时间的用例。

第四,Python本身在数据分析和对接开源工具链上有天然优势。流量发生器、抓包工具、网管北向接口的SDK大量支持Python,写测试脚本时不用来回切语言。通信测试工程师会Python已经成为基本能力,团队上手成本低,后续维护也更顺。

2.3 系统架构与关键组件

整套测试框架按逻辑分层可以拆成这样:

  • 流量发生器:商用仪表可用Spirent或IXIA,开源方案可用TRex、DPDK-pktgen。用于向目标切片和干扰切片发送可控的流量模型。
  • 终端模拟器:模拟多个UE接入不同切片,验证真实用户会话下的隔离表现。
  • 探针与采集器:通过交换机镜像端口抓包,或通过网元Telemetry接口周期性读取性能计数,也可以直接用NetFlow/IPFIX取流量特征。
  • 控制与编排脚本层:Python+pytest负责调度流量发生器、下发切片配置、执行测试用例、汇总结果。
  • 结果报告层:pytest-html生成HTML测试报告,自定义summary脚本输出指标趋势Excel。

系统连接关系上,流量发生器端口接到gNB回传接口或核心网UPF的N3/N6口,探针通过交换机镜像口观察QoS Flow的速率和时延,控制脚本通过网络管理北向接口下发切片参数和策略。整个框架形成“编排-执行-采集-分析”的闭环,人可以从中解放出来,只做结果判断和异常介入。

这套架构的优势是每一层都可以替换。今天用商用仪表,明天换开源TRex,不需要动脚本主体。探针侧同理,今天抓包,明天读Telemetry,采集层做一个适配封装即可。框架稳定是长期跑稳定性测试的前提,这一点后面会反复强调。

3. 核心测试指标与用例设计

3.1 五大核心指标的定义与计算公式

资源隔离性验证必须有量化指标,不然报告没说服力。测试中我们主要关注以下指标:

指标定义测量方式典型判据
吞吐量目标切片在稳定状态下用户面可达速率流量发生器收包统计达到规划带宽的90%以上
平均时延UE到UPF出口的报文单向时延打时间戳或探针抓包计算基线值的1.5倍以内
P99时延99%分位时延全量报文时延排序uRLLC切片有硬性要求
抖动相邻报文的时延差变化RFC1889抖动算法基线值2倍以内
丢包率丢失报文与总发送报文的比值仪表统计数据低于0.1%

除以这些基础指标外,还有一个更关键的合成指标:性能衰减率。计算公式为:

性能衰减率 = (无干扰时目标切片性能 - 有干扰时目标切片性能)/ 无干扰时目标切片性能 × 100%

这个指标直接衡量隔离效果。我们在项目里定的判据是:目标切片在干扰切片满载时,衰减率小于5%认为隔离良好;5%到10%认为可以接受但需要优化;超过15%直接判定不达标,打回网络优化团队重新调整资源策略。不同行业客户对这个阈值的接受度不一样,工业客户通常要求比消费客户严格得多。

还有一个容易被忽略的指标:恢复时间。当干扰撤掉后,目标切片性能返回基线水平所需的时间。这个指标反映调度系统和拥塞控制机制恢复是否及时,项目里我们一般要求30秒内恢复到基线的95%以上。

3.2 用例设计:从基线到风暴场景

资源隔离性验证的用例不是随便排几组流量就行,而是要有清晰的递进逻辑:

用例编号用例名称前置条件核心步骤通过标准
TC-01单切片基线性能测试无干扰流量目标切片单独满载运行30分钟,记录指标建立性能基线
TC-02双切片共存性能对比两切片均正常eMBB负载50%,测量uRLLC指标衰减率≤5%
TC-03eMBB全负载对uRLLC时延干扰eMBB满载持续压满eMBB 30分钟,测uRLLC P99P99衰减率≤10%
TC-04突发流量冲击目标切片运行中30秒内从0拉到100%突发流量无掉话,恢复时间≤30秒
TC-05长时间混合负载稳定性双切片混合负载连续运行48小时,监控指标波动无累积劣化趋势
TC-06切片内拥塞时的故障隔离uRLLC内部拥塞在uRLLC内制造拥塞,观察eMBBeMBB不受影响
TC-07跨切片数据面不可达两切片建立会话从切片A向切片B地址发探测包无任何报文可达

这里有一个容易被误解的地方:TC-01看起来不是隔离性测试,但它是所有结论的“锚点”。没有准确的基线,干扰后的指标就没有对比依据。前期我们吃过亏,基线没测准,后面整组数据作废。基线数据的采集至少要重复三轮、每轮取稳定期的中位数,不能拿一次性数据当基线。

TC-06和TC-07常常被遗漏,但客户在后评估时往往最关心这两项。因为“故障隔离”和“安全隔离”是运营商敢不敢把危险业务放进切片的前提。这两类用例涉及信令风暴注入和跨切片访问探测,需要和网管侧协作完成,测试脚本要留好故障注入的接口。

3.3 干扰流量的设计与负载模型

干扰流量设计是整个测试里最讲究的部分。很多人觉得干扰流量就是“发一大波数据过去”,这是错误的。干扰流必须贴近真实业务模型,否则验证结果没有代表性。

设计干扰流量时注意几个要点。第一,eMBB干扰切片用大包UDP流或模拟视频流的恒定速率流,不能用TCP短连接一拥一挤的方法——后面排查章节会细说原因。第二,uRLLC切片作为干扰源时,用64字节小包、固定间隔的周期性模型,模拟工业控制报文的特征。第三,不同负载等级要按实际带宽占比计算,比如物理带宽500Mbps,eMBB干扰流量按0%、30%、60%、90%、100%五档递进,每个档位稳定运行至少30分钟再采集数据。

参数计算举个例子。目标uRLLC切片规划带宽100Mbps,业务模型为64字节小包、0.5ms间隔,单路业务速率约1Mbps,需要100路并发的目标业务流。eMBB干扰切片按100路4Mbps的视频流设计,总干扰流量约400Mbps,对应500Mbps物理带宽的80%负载。这样在报告里写清楚流量模型,客户复核时才能还原测试过程,测试本身才具备可追溯性。

另外,干扰方式要分两种:持续负载和突发冲击。持续负载验证系统的稳态隔离能力,突发冲击验证调度器的瞬态响应。突发冲击测试时,流量发生器要用支持瞬时突发的模式,在100ms内从0拉满,观察目标切片的时延尖峰和丢包情况。

4. 自动化实现与实操记录

4.1 环境初始化与前置检查

自动化不是上来就写脚本跑用例,环境准备阶段做的事情决定了后面数据是否可信。在项目里,每次开始测试前严格执行以下几步:

  • 时钟同步:所有测试节点、被测网元、探针设备统一启用NTP或PTP。时延测试对时间基准极其敏感,不同步的后果是数据全是假的,哪怕只差几十毫秒,对uRLLC切片就是灾难性误差。
  • 版本与配置核对:记录核心网和基站的软件版本号,确认切片模板版本、S-NSSAI、QoS参数已正确下发。特别要对照网管侧配置和报文侧实际承载的映射关系,避免“手填的和生效的不一致”。
  • 资源基线校准:外场测试时,每天开测前先跑一轮不加干扰的基线,确认当天无线环境没有异常偏移。如果当天基线数值和前一晚相差超过5%,先排查环境因素再继续测试。
  • 信道一致性保障:尽量固定在干扰小的时段做对比测试,比如凌晨2点到6点。多轮测试之间不要移动测试天线位置,射频线缆连接牢固性要检查。

这些前置检查看着琐碎,但自动化框架里应该固化为一个环境自检模块。环境不合格直接中止执行,不让测试流程继续跑下去。宁可花20分钟做检查,也不要跑了三天三夜最后发现数据因为时钟漂移全部作废。

4.2 自动化脚本的核心逻辑

脚本层是整套框架的“指挥中枢”。下面这段代码是核心测试用例的骨架,展示了整个流程的控制逻辑:

import pytest import time @pytest.fixture(scope="module") def slice_env(): # 连接网管北向接口,备份当前配置 # 下发测试所需S-NSSAI和QoS模板 # 初始化流量发生器、探针和终端模拟器 env = prepare_test_environment() yield env # 清理流量、恢复配置、释放资源 teardown_test_environment(env) def measure_performance(target_slice, duration=30): """向目标切片发送UDP流并采集吞吐、时延、抖动、丢包率""" ... @pytest.mark.parametrize("load_level", [0, 30, 60, 90, 100]) def test_embb_interference_on_urllc(slice_env, load_level): # 1. 启动uRLLC目标业务,记录基线P99时延 baseline_p99 = measure_performance("urllc").p99 # 2. 按load_level启动eMBB干扰流 start_interference("embb", load_level) # 3. 等待系统进入稳态 time.sleep(300) # 4. 测量uRLLC切片指标 measured = measure_performance("urllc") # 5. 计算衰减率并断言 degradation = (baseline_p99 - measured.p99) / baseline_p99 * 100 assert degradation < 10, f"P99 degradation {degradation:.2f}% exceeds threshold"

这段代码是简化过的框架示意,实际项目中每个函数体内部会有大量API调用和数据采集逻辑。设计几个关键点需要留意。

流量启动和测量之间要设置合理的稳定时间。切片调度器和QoS队列需要时间从当前负载状态收敛到新的稳态,项目里我们统一设置的300秒,这个值根据设备不同可能需要调整。太短数据不稳定,太长影响整体测试周期。

测量函数本身要把“打流”和“采集”分离。打流负责持续发送测试报文,采集负责周期性读取吞吐和时延指标,两者不是同一套数据。探针采集的报文时延最准确,仪表统计的吞吐量最准确,两套数据汇总后交叉校验,一旦发现两边差异过大,优先怀疑数据采集链路本身有问题。

判定逻辑不要只依赖一次测量。每个负载等级下做三轮测量,取中位数用于断言计算,最大最小值之间的波动范围记录到报告里。这样既避免偶发网络波动误判结论,又能在报告里体现数据的稳定度。

4.3 结果采集、判定与报告

结果采集的准确性直接决定报告质量。项目里我们用三层采集方式互相印证:

  • Telemetry周期性数据:通过网管北向接口读取UPF和gNB的性能计数器,每5秒采样一次,记录整个测试周期的变化趋势。
  • 探针抓包统计:在核心网N3或N6口镜像抓包,用报文时间戳计算真实时延和抖动,按QoS Flow ID过滤出目标切片的数据流。
  • 仪表测试结果:流量发生器本身的统计功能,关注吞吐量、丢包率、连接状态。

三层数据用于交叉验证,不匹配时以探针抓包为准,因为抓包数据是直接观测到的网络行为,不受网管计数器某些定时刷新机制的干扰。

判定逻辑层面,我们额外引入了统计显著性判断。性能衰减率要基于至少三轮测试结果进行t检验,确认差异不是随机波动造成的。这个步骤很容易被忽略,却是堵住“客户质疑测试数据可重复性”的一道重要防线。

报告生成可以自动化为两条线:一条是pytest-html生成的用例执行报告,记录每条用例的通过/失败/运行时长;另一条是自定义summary脚本自动汇总指标表格,输出每个负载等级下目标切片的P99时延、衰减率、恢复时间等关键数据,并生成趋势图。最终交付给客户的测试报告,由这个自动化汇总结果加上人工撰写的结论分析组成。

5. 常见问题与实战避坑清单

5.1 我在项目中踩过的坑

踩坑记录是最有价值的分享。以下四个问题都是我们在项目里真实遇到过的,写出来帮大家少走弯路。

第一个坑:时钟不同步导致时延假象。刚开始跑uRLLC切片时,P99时延基线全都在漂移,从8ms一路飘到20ms,还找不到规律。排查了一天,最后发现探针服务器和核心网设备之间没有做NTP同步,时钟偏差超过几十毫秒。数据完全不可信。解决办法是全网统一NTP/PTP对时,并定时核查各节点的时钟源状态。这个问题特别隐蔽,因为网络层面一切正常,问题出在测量基础设施上。

第二个坑:TCP干扰流测了个寂寞。用TCP做干扰流跑eMBB切片,调到一定速率后拥塞窗口自动收缩,TCP协议自己做了流量整形,干扰强度再也上不去。测出来的结果是eMBB和uRLLC完美隔离,数据好得不可思议。后来换成UDP打流,绕过拥塞控制,才真正压出问题。TCP适合模拟真实用户业务,但要做压力干扰,必须用UDP加指定速率,不然永远造不出真正的负载高峰。

第三个坑:流量打到了错误的切片。排查一个“目标切片在干扰后性能反而提升”的奇怪现象时发现,干扰流通过DSCP到切片模板的映射配置配错了,干扰流量全走了目标切片的通道。两个业务流叠加后带宽利用率上去了,效率提升反映成了性能变好。这个问题再次强调配置核对的重要性,每个切片关联的S-NSSAI、QoS模板、DSCP标记、路由策略必须逐项核对。

第四个坑:无线空口波动造成假阳性。白天测出来的隔离性结果惨不忍睹,凌晨测又全部达标。原因是白天园区有大量业务流量、车辆移动、人员走动,无线环境干扰波动大。后来统一把对比测试安排在凌晨固定时段,并且多轮重测取中位数,数据才稳定下来。外场测试一定要意识到:空口环境不是实验室,天然有噪声,测试时间窗的选择和重复测量策略同样重要。

5.2 问题排查思路与速查表

把常见问题整理成速查表,项目里排查问题时按表逐项对照,效率翻倍:

现象可能原因排查方法
目标切片时延在干扰后无变化干扰流量未真正进入干扰切片;QoS限速提前生效检查S-NSSAI/DSCP映射、QoS流标识,查看网管实时流量统计
结果重复性差空口环境波动、时钟不同步、存在未知背景流量固定测试时段,全网NTP/PTP对时,多轮重测取中位数
性能衰减率远超预期调度策略抢占、PRB资源池划分不当、UPF限速未生效查看gNB调度统计,检查UPF队列配置,核对PRB资源预留
长时间稳定性测试中断仪表连接超时、脚本异常、资源泄漏加长超时参数,脚本增加断点重连和守护进程
抓包数据与仪表数据不一致镜像口带宽不足丢包、探针时间戳精度不够检查镜像端口容量,换用高精度时间戳采集方式
干扰流量一加就整网劣化承载网FlexE管道带宽预留不足检查承载网切片通道配置,确认转发面隔离策略生效

排查时还有一个通用技巧:先看数据链路,再看配置,最后才怀疑性能。很多“隔离性问题”其实都是测量链路本身的时钟、抓包、统计口径问题。先把环境问题排除干净,再去找网络策略的缺陷,能节省大量时间。

5.3 经验体会与后续进阶方向

切片隔离性验证做到一定深度,你会发现测的核心其实是整个测试框架的工程能力。数据采集的准确性、环境的可复现性、脚本的稳定性,每一项都必须比被测系统本身更可靠,最终报告才经得起客户和评审专家的反复质询。前期在环境校准和配置核对上多花的时间,都会在后续的数据可信度上回报回来。

这个框架还可以继续扩展。往切片生命周期走,可以做从创建、激活、修改到释放的全流程验证,把资源隔离性测试嵌入到每个生命周期阶段的入口检查里。往故障演练走,可以接入混沌工程工具,注入UPF容器重启、gNB板卡故障、承载网路由震荡,验证切片隔离在真实故障场景下的韧性边界。结果数据沉淀下来之后,也可以训练异常识别模型,在混合负载下自动分析资源隔离的风险点。方向很多,但底子还是那一套“环境可控、指标量化、过程可复现”的工程方法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 0:10:50

Python机器学习全套代码:从数据预处理到模型评估的完整流程

简介&#xff1a;面向数据建模与机器学习初学者的Python代码资源包&#xff0c;系统覆盖广义可加模型GAM、梯度提升决策树GBDT、分类回归树CART、BP神经网络和深度神经网络DNN等常用算法&#xff0c;每个模型都附带独立数据集&#xff0c;并配有从数据读取、训练到验证的完整代…

作者头像 李华
网站建设 2026/10/11 0:01:41

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里&#xff0c;有A同学跑来问我&#xff1a;选什么毕设题目最稳妥&#xff0c;既能让评审老师觉得工作量够&#xff0c;又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

作者头像 李华
网站建设 2026/10/10 23:52:11

Java实现冰岛人家族关系判断:五代以内共同祖先算法与PTA满分代码

PTA团体程序设计天梯赛的L2-030《冰岛人》是一道看似简单、实则边界极多的家族关系判断题&#xff0c;尤其在Java提交时&#xff0c;稍不注意就会超时或者被“五代以内”这个说法带偏。这篇文章把我从读题、设计数据结构、到最终Java满分通过的全过程完整拆开&#xff0c;重点说…

作者头像 李华
网站建设 2026/10/10 23:51:56

土豆目标检测数据集:YOLO与VOC双格式实战指南

简介&#xff1a;本资源是面向农业AI与目标检测初学者及实践者的土豆目标检测专用数据集&#xff0c;适用于YOLO系列、Faster R-CNN等主流检测模型的训练与验证&#xff0c;可支撑智能分拣、田间监测、品质分级等实际场景建模。压缩包共310个文件&#xff0c;含152张JPEG图像、…

作者头像 李华
网站建设 2026/10/10 23:42:36

小狗情绪图像识别数据集:工业级小样本视觉训练闭环

简介&#xff1a;本资源是一套专为图像分类任务设计的小狗情绪识别数据集&#xff0c;面向计算机视觉初学者与深度学习实践者&#xff0c;解决细粒度动物情绪分类建模中的数据获取与可视化验证难题。压缩包共2000个文件&#xff0c;含1998张JPG格式情绪图像&#xff08;按angry…

作者头像 李华