简介:本资源是面向深度学习目标检测任务的路面积水识别专用数据集,适用于交通感知、智慧城市及自动驾驶等场景下的积水风险预警模型训练,特别适配YOLO系列(v5至v10)、Faster R-CNN、SSD等主流检测框架。数据集共4524张真实场景图像,已按标准比例划分为训练集、验证集与测试集,并提供YOLO格式(.txt)与VOC格式(.xml)双标签体系,配套类别定义清晰的.yaml配置文件,开箱即用。压缩包含2000个文件,以1999个标注文本文件为主,辅以1个关键yaml配置文件,整体大小281.43MB,结构规整、路径明确,支持直接载入训练流程。目前已有1009人学习下载,涵盖高校研究者、算法工程师及智能交通方向开发者,可快速支撑积水检测模型的端到端训练、验证与部署验证。 开车最怕什么?不是堵车,是路面积水。特别是下暴雨的时候,水面盖住路面,你以为是个水坑,结果是个没井盖的深洞。作为长期做计算机视觉落地的工程狗,我这两年一直在跟“用摄像头识别路面积水”这个需求打交道。一开始走了不少弯路,光靠公开数据集根本不够用,最后只能自己拉数据、定标准、标标注、调模型,才把整个流程跑通。
这篇文章就把我做路面积水识别目标检测数据集的完整过程复盘一遍,从类别体系设计、数据采集、标注规范,到YOLOv8训练、部署实测,全部摊开讲。里面所有的坑都是我实际踩过的,写出来就是为了让你少走弯路。
1. 路面积水检测:为什么目标检测方案优先于语义分割和其他办法
1.1 业务场景和真实需求
路面积水识别,听上去是个很垂直的小场景,但实际需求方非常多:
- 智慧交通:城市下穿隧道、低洼路段的积水预警,联动LED屏和广播提示。
- 自动驾驶:辅助驾驶系统需要提前感知前方严重积水,避免误入深水区导致熄火甚至电池包进水。
- 环卫与市政:暴雨后快速巡查城市道路积水点,辅助排水调度。
- 保险与车联网:灾害天气下,对涉水车辆进行图像取证和定损依据提取。
这些场景要求的不只是“有没有水”,更要求“水在哪、面积多大、淹到多深”。所以选型时,我几乎没怎么犹豫就定了目标检测方案,而不是语义分割,也不是图像分类。
1.2 目标检测对比语义分割、图像分类的优劣势
做一个积水识别任务,三种主流视觉方案我都评估过,下面直接说结论:
| 方案 | 优势 | 劣势 | 适合场景 |
|---|---|---|---|
| 图像分类 | 简单、样本量需求小 | 无法给出位置,无法判断有几处积水 | 只要判断“有没有积水”的粗粒度预警 |
| 语义分割 | 像素级边缘,对积水边界刻画精细 | 标注成本极高(每张图要逐像素描),模型推理慢,落地成本高 | 水位线和水面边界需要精确测算的场景 |
| 目标检测 | 能定位、能计数、能框选积水区域,标注成本居中 | 矩形框会包含一些背景,边缘不如分割精细 | 绝大多数工程落地场景 |
我做这个项目时,甲方需求是“知道哪些位置有积水,并把积水区分出严重等级”。目标检测框选出来的位置信息,搭配积水框的面积占比,已经足够支撑后续的等级判断。如果将来要精确计算积水面积和海拔,可以在检测框基础上再加一个轻量分割头二次处理,没必要一上来就上全分割模型。
1.3 为什么不用“水位传感器+图像”的融合方案
还有一个方向是传感器方案,比如雷达式水位计、电子水尺。这类方案精度高、误报少,但问题是覆盖密度不够。一套水位传感器的硬件加安装成本并不低,一座城市不可能在每一个路段都装一套。而图像识别方案可以复用现有的监控摄像头,尤其是城市里已有的卡口和交通监控,软件迭代就能实现“广覆盖+低成本”的积水排查。
所以路面积水识别数据集的核心价值,就是让现有的摄像头网络具备“看见积水”的能力。做这个数据集的定位不是跟传感器抢精度,而是做前端的广域筛查和辅助预警。
2. 数据集构成:类别体系设计是决定模型上限的第一步
2.1 积水类别体系:应该分几类才合理
数据集工程的第一个坑,就是类别怎么定。一开始我也踩过“一刀切”的坑,把所有水都归成一类,训练出来的模型一塌糊涂:水渍反光也报,洗地车喷水也报,模型根本不知道你要什么。
后来我把路面积水重新梳理成四类,这个分类逻辑在实际训练和部署中表现非常稳定:
- 危险深积水:颜色深、水面有明显淹没路缘石或轮胎深度感的积水,属于需要立即预警的类别。
- 浅积水/水洼:路面低洼处形成的浅水坑,反光明显但深度较小,属于提示类。
- 下水道口/井盖返水:水从下水道口涌出或井盖被顶开,这类积水往往伴随安全隐患,需要特别关注。
- 隧道/下穿道积水:隧道内或下穿道路的低洼处积水,光照条件差,反光复杂,单独一类有利于后续策略处理。
这里有个细节:类别数量不是越多越好,小类别容易导致样本不均衡。比如“井盖返水”样本本来就少,如果硬要拆成“井盖翻水”和“管道涌水”,每个子类的样本量会更少,模型学习不到区分特征,反而拉低整体指标。建议起步阶段控制在3-4类,跑通之后再逐步细化。
2.2 数据采集渠道与版权注意事项
数据来源是数据集质量的根本。我整理一下实际用过的采集渠道:
- 自有设备采集:雨天派专人、专车到城区不同路段,用行车记录仪、手机、运动相机同步采集。这是最可控的数据来源,版权完全自有,而且能针对性地覆盖目标场景。
- 监控视频抽帧:和当地交管或市政部门合作,获取公开监控视频片段,按秒抽帧形成图片。注意隐私合规问题,处理时要对人脸、车牌做脱敏。
- 网络公开图片:从图片网站、社交平台爬取公开分享的积水图片,需要逐张确认授权协议。这个渠道适合补充罕见场景,比如极端暴雨、海水倒灌。
- 公开数据集的二次利用:部分自动驾驶公开数据集里含有积水和湿滑路面标注,可以作为补充样本,但要注意数据分布的偏差,不能完全依赖。
数据采集的核心原则就一条:采集环境要贴近真实部署场景。如果部署场景是固定摄像头(俯视视角),却大量用行车记录仪(平视视角)采集,那么模型在部署时会出现巨大的域差异。
2.3 样本量估算:最少需要多少张图
很多初学者问“我要标多少张?”这个问题没有标准答案,但有一个可用的估算公式:
基础样本量 = 每类目标的最少实例数 × 类别数 × 场景多样性系数
以路面积水为例:
- 每类目标建议最少500个有效标注实例(这是模型能学到类内差异的下限)。
- 四类合计需要2000个标注框。
- 每张图平均出现1-2个目标,那么至少需要1000-1500张图。
- 场景多样性系数一般取2-3(涵盖不同道路材质、天气、光照、时段、拍摄角度)。
综合下来,一个可用的起步数据集大约需要3000-5000张图片。这个数字对目标检测来说不算大,但足够训练出一个mAP50在70-80%左右的基线模型。
我在实践中还总结了一个经验:与其一次性追求几万张图,不如先做3000张高质量图,训练验证迭代一次,再去针对性补数据。数据集工程是迭代式开发,不是一次到位的“大水漫灌”。
3. 标注规范:整个数据集成败的关键环节
3.1 标注框规则:不是随便一个框就行
目标检测标注看起来简单,就是拉个框,但积水场景有几个特殊问题:
问题一:反光区算不算积水?
积水表面往往有强反光,反光区能映射出路灯、树木、天空。我的标注规范是:只要反光区域在形态上被水面包裹,并且肉眼能判断出下方有积水,就应纳入框内。如果只是一片独立的路面反光(比如湿沥青反光),不标。
问题二:水面边界不清晰怎么办?
雨天路面上,积水水面和湿路面的边界常常很模糊。这里我定的规则是:以水面的实际连续区域为准,不扩大、不缩小。宁可框得保守一点,也不要包含大面积干燥路面,否则会引入大量背景噪声。
问题三:框要横平竖直还是可以旋转?
普通目标检测用水平矩形框(HBB),但对狭长型的积水(比如沿路缘延伸的水带),水平框会包含大量非目标区域。我当时用了两个方案对比:
- 方案A:全部用HBB,简单直接,兼容性最好。
- 方案B:对狭长积水用旋转框(OBB),需要引入mmrotate等旋转目标检测框架。
实测下来,第一版数据集先做HBB完全够用,旋转框是第二个迭代版本再考虑的优化方向,不建议一上来就上旋转框,因为标注成本和模型复杂度都高不少。
3.2 标注工具选型:LabelImg还是X-AnyLabeling
标注工具我前后对比过几个:
| 工具 | 优点 | 缺点 | 适合阶段 |
|---|---|---|---|
| LabelImg | 轻量、上手快、支持Pascal VOC/YOLO格式 | 功能单一,没有辅助标注 | 小样本起步阶段 |
| X-AnyLabeling | 支持SAM辅助分割、自动标签、多格式导出 | 配置略复杂,依赖较多 | 中大规模数据标注 |
| Label Studio | 多人协作、任务分配、数据管理一体 | 部署成本高,适合团队 | 团队项目 |
我个人的经验是:个人项目用LabelImg就够了,团队项目直接上Label Studio。如果标注量特别大,可以在LabelImg里先做初标,再用X-AnyLabeling加载一个预训练检测模型做预标注,人工修正,效率能提升30%-50%。
3.3 多人协作标注的质量控制流程
多人标注比单人标注更容易出现一致性问题。我踩过的坑是:两个人标同一张图,一个把反光区全框进去了,另一个只框深色水面。这种不一致直接导致训练出来的模型边界漂移。
解决方案是建立三层质检流程:
- 规范文档先行:写一份详细的标注指南,包括框选定义、边界处理规则、类别判定标准,配大量示例图。标注员开工前必须通读并考试过关。
- 抽检复核:每批次标注完成后,负责人随机抽检10%-20%的图片,针对边界框的准确性复核。错误率超过3%,整批打回重标。
- 一致性测试:在标注集里混入预先设计好的“测试图”,这些图提前由资深标注员标注过一次,如果多人标注结果与原标注偏差过大,说明规范没有落地,需要重新培训。
这套流程看上去繁琐,但能省下后面大量的模型调优时间。标注质量直接影响模型上限,这个投入非常值得。
4. 数据增强与样本平衡:模型泛化能力的催化剂
4.1 针对积水场景的特殊增强策略
常规的目标检测数据增强包括翻转、旋转、缩放、色彩抖动、MixUp等,这些我都用了,但真正让模型效果提升的,是几个积水场景专属增强:
模拟雨滴/镜头水珠增强:城市监控摄像头在下雨时经常被雨滴或水珠覆盖,画面模糊。用OpenCV生成随机的雨滴纹理叠加上去,模拟雨天摄像头被淋湿的状态,模型在真实雨天监控画面上的表现会明显提升。
import cv2 import numpy as np def add_rain_drops(image, num_drops=10): h, w, _ = image.shape result = image.copy() for _ in range(num_drops): x, y = np.random.randint(0, w), np.random.randint(0, h) radius = np.random.randint(2, 8) cv2.circle(result, (x, y), radius, (255, 255, 255), -1) # 高斯模糊模拟镜头水珠效果 x1, y1 = max(0, x-2*radius), max(0, y-2*radius) x2, y2 = min(w, x+2*radius), min(h, y+2*radius) roi = result[y1:y2, x1:x2] roi = cv2.GaussianBlur(roi, (15, 15), 0) result[y1:y2, x1:x2] = roi return result水面颜色扰动:积水的颜色受水质和光照影响极大,有清透的浅蓝色、浑浊的土黄色、沥青倒影的灰黑色。我在HSV空间对色相和饱和度做随机扰动,模拟不同水质条件下的积水表现。
雨夜中的光斑增强:夜间积水最难识别,因为路灯、车灯在水面的反射会形成复杂的光斑。通过叠加随机亮点和高斯光斑,可以模拟夜间的反光噪声。
4.2 小目标与难样本挖掘
路面积水数据集中,最让人头疼的是小目标。远处的水洼可能只有十几个像素,人眼都要仔细分辨,模型更容易漏检。
解决小目标问题,我的做法是:
- 切图训练:把大图切成带重叠的patch(比如把1920x1080切成640x640),让模型在小图上训练,放大特征。推理时再按patch拼接结果。
- 复制粘贴增强(Copy-Paste):把样本中出现的小目标积水区域裁剪出来,粘贴到其他没有积水的路面上,同时处理好边缘过渡和阴影,制造更多小目标训练样本。
- 小目标下采样:对整图做多尺度缩放,让模型看到不同大小的积水目标。
难样本挖掘是指主动去找模型会认错的图。第一轮模型训练完,拿到测试集上预测失败的图,加回训练集重新标注,或者专门去采集类似场景的图像。这个“失败驱动”的迭代方式,比盲目增加随机样本的效率高好几倍。
4.3 处理类别不均衡:井盖返水类样本太少怎么办
在我四类积水的设计里,“下水道口/井盖返水”出现的频率远低于“浅积水”。一开始训练,模型很容易把所有水都预测成浅积水,井盖返水的召回率极低。
这个问题的处理思路:
- 复制粘贴增强:把井盖返水区域从原图中抠出来,粘贴到其他路面上,同时做旋转、缩放、平移,量产该类别的新样本。
- 重采样:训练时对该类别的样本提升采样概率,在YOLOv8里可以通过自定义dataset的采样权重实现。
- 保留难例:把井盖返水的难例(被遮挡、光线暗、形态不完整)只增加不删除,避免模型学到过于理想的特征。
也要警惕过拟合风险:复制粘贴出来的样本如果数量超过真实样本的50%,模型可能会对合成样本产生过拟合。我的经验是合成样本占比控制在30%以内,并且用真实样本做验证集来把关。
5. 基于YOLOv8的训练与评估:从数据集到可用模型
5.1 模型选型:YOLOv8还是其他
在模型选型上,我对比过YOLOv8、RT-DETR、FCOS、以及带旋转头的mmrotate组合,最终选定YOLOv8作为主力方案。理由非常实际:
- 训练生态成熟:ultralytics的封装做得很好,config、训练、导出、量化一条龙,工程化效率极高。
- 部署方便:支持导出ONNX、TensorRT、CoreML,后端集成省事。
- 性价比高:在同等精度下,YOLOv8的推理速度和显存占用对边缘设备很友好。
- 社区活跃:遇到问题搜一搜基本都有解决方案,不至于卡死在一个冷门bug上。
如果你是新手,直接用YOLOv8起步;如果要处理大量狭长型积水、需要更精细的框,再研究mmrotate或者DOTA协议下的OBB方案,这是后话。
5.2 训练参数与数据配置
数据集按7:2:1划分训练集、验证集、测试集。这里要特别注意:划分尽量按视频片段分,而不是按单帧分。同一段视频连续帧之间的相关性很高,如果随机分帧,模型会在验证集上看到“训练集的孪生帧”,指标虚高,部署时立刻露馅。
训练配置的参考参数(基于YOLOv8m,单卡RTX 4090):
# dataset.yaml train: dataset/images/train val: dataset/images/val test: dataset/images/test nc: 4 names: ['danger_deep_water', 'shallow_puddle', 'sewer_backflow', 'underpass_water']训练命令参考:
yolo detect train \ data=dataset/water.yaml \ model=yolov8m.pt \ epochs=150 \ imgsz=640 \ batch=16 \ optimizer=AdamW \ lr0=0.001 \ cos_lr=True \ warmup_epochs=3 \ patience=20 \ augment=True \ mosaic=1.0 \ mixup=0.2几个参数的个人理解:
- imgsz=640是默认值,但对小目标偏多的积水场景,可以尝试提到768或896,代价是训练和推理速度变慢,收益是mAP50可能提升1-3个点。需要实测取舍。
- mosaic增强对积水场景非常有效,因为它会把四张图拼在一起,等于同时给模型看多个环境、多种光照,鲁棒性会增强。但mosaic太强会让小目标畸变,起步可以设0.8-1.0。
- MixUP设置为0.2,低一点更稳。积水目标的边缘特征本来就弱,过强的mixup会让模型更难学边界。
5.3 评估指标:只看mAP远远不够
常规的目标检测评估我们都看mAP50和mAP50-95,但在路面积水识别这个任务上,我强烈建议再加两个维度的评估:
按尺寸分层评估:把测试集按目标面积分成小目标(<32x32像素)、中目标(32x32到96x96)、大目标(>96x96),分别看AP。你会发现小目标的AP可能比大目标低20-30个点,这个差异才是更值得关注的事情。
误检分析(False Positive Analysis):把模型预测的错误框全部导出,人工分类:是标错了位置?还是把反光误认为积水?还是把湿路面当成水?这些错误类别会直接决定下一步是补数据还是调后处理逻辑。
我当时第一版模型mAP50已经有82%,但部署后误报非常多——晴天上午,桥面阴影被误报成危险深积水。后来分析误检样本,八成都是深色沥青阴影。我专门采集了300张晴天的阴影弧线图加入训练集,并把“深色阴影”单独做成负样本样例,第二版模型误报率降低了60%。
5.4 消融实验的经验参考
我跑过一组消融实验,验证不同增强策略的贡献:
| 策略 | mAP50 | mAP50-95 | 说明 |
|---|---|---|---|
| 只用基础增强 | 74.1 | 45.2 | 基线 |
| +雨滴纹理增强 | 76.8 | 47.5 | 雨天场景提升明显 |
| +水面颜色扰动 | 78.2 | 49.3 | 水质多样性能提升 |
| +复制粘贴增强 | 80.5 | 51.8 | 小目标提升最明显 |
| +强制负样本 | 82.1 | 53.0 | 误检显著下降 |
这组实验证明了一个道理:在路面积水这类强场景依赖的任务里,场景专属增强的收益比盲目堆通用增强更大。通用增强做的是“防止过拟合”,场景专属增强做的是“教模型认识真实世界”,后者才是提分的关键。
6. 部署实测:从离线测试集到真实道路的最后一公里
6.1 摄像头视角差异:最容易被忽视的问题
在实验室里训练和验证,模型指标再好,部署到真实场景还是会翻车。我遇到的最大问题是视角偏差。
训练数据大量来自行车记录仪(水平视角),但真实部署的摄像头很多是立杆俯视(比如路口的球机,朝下45-60度)。同一片积水,水平看是浅浅的水膜,俯视看是边界清晰的深色色块。模型在俯视画面上的检测率直接掉到训练时的60%。
解决思路有两种:
- 采集视角对齐:部署环境是俯视摄像头,训练数据至少要有50%以上是俯视视角拍摄。可以在雨天用无人机搭配棒灯或者长杆相机模拟立杆高度拍摄。
- 测试时增强(TTA):推理时把图片翻转、缩放多次,取投票结果。这个方法能提升一点泛化能力,但会拖慢速度,对实时性要求高的场景慎用。
6.2 实时推理:边缘设备的性能瓶颈
路面积水识别如果要部署在交通监控的摄像头边缘节点上(比如海康的AI盒子或Jetson Orin),计算资源非常有限。我的部署目标是在Jetson Orin Nano 8G上跑出实时效果。
实测性能记录:
| 模型 | 精度(FP32) | 推理耗时 | 是否够用 |
|---|---|---|---|
| YOLOv8n | 0.8 TOPS | 18ms | 勉强实时 |
| YOLOv8s | 0.5 TOPS | 28ms | 实时边缘 |
| YOLOv8m | 0.3 TOPS | 52ms | 不推荐 |
最终选型是YOLOv8s + TensorRT FP16,在Orin Nano上实测15ms左右一帧,配合摄像头25fps的码流能做到实时检测。再把检测框面积映射到像素占比,换算成路面面积,可以做简单的积水程度分级——这就是后处理的事情了。
6.3 误检的经典场景与对策
部署一段时间后,我整理出了误检率最高的三个场景,每个都是踩过坑才解决的:
场景一:深色沥青接缝。路面修补后的深色接缝在视觉上和水面高度相似,模型很容易误判。对策:在训练集里加入大量道路接缝、裂缝、轮胎痕迹的负样本。负样本不一定要标注,让模型在背景里“见过”这些模式就有效。
场景二:桥面/树荫阴影。大面积的阴影在俯视画面里是一片深色区域,和积水几乎没有视觉差异。对策:结合摄像头朝向和时间信息做后处理,比如持续N帧检测到同一位置积水才上报,而不是单帧触发。另外阴影的边缘比较“生硬”,积水边缘则有一圈过渡,把边缘平滑度作为一个后处理特征能过滤一部分阴影误报。
场景三:雨天玻璃反光。车载摄像头在雨天挡风玻璃上的反光,会形成类似积水面的运动区域。对策:如果是用车载摄像头,可以在硬件层面加偏振片滤光;如果是软件层面,就把画面下三分之一区域(通常是引擎盖和玻璃反光区)设为忽略区域。
6.4 模型量化与蒸馏:进一步压缩体积
在边缘设备上,模型体积和速度都需要优化。我的做法是量化:
from ultralytics import YOLO model = YOLO('runs/detect/train/weights/best.pt') model.export(format='engine', imgsz=640, half=True, device='nvidia')TensorRT FP16量化后,模型大小从原来的40MB压缩到约12MB,推理速度提升了1.8倍,mAP50只掉了0.5个百分点。如果你更追求体积,可以试试INT8量化,但需要准备校准数据集,否则精度回退会比较严重。
这里有个经验:量化前一定要重新在验证集上评估,不能只看FPS提升。我试过一次INT8量化,mAP50从82%掉到70%,后来发现是校准集太单一、缺少夜间积水样本导致。换了一个包含昼夜混合的校准集后,才恢复到78%。
7. 从数据集到持续迭代:路面积水识别项目的长期演进
7.1 建立数据回流闭环
数据集做到第五个版本后,我最大的感悟是:数据集不是一次做出来,而是持续“养”出来的。
我搭建了一个数据回流闭环:线上模型部署后,每7天从真实视频流中抽取一批低置信度预测结果(比如置信度0.2-0.5的框),人工去复核这些结果,挑出真正被漏检的正样本和真正的负样本,送入下一轮训练。这个机制让模型每周都能接触到最新的季节变化、路况变化、摄像头老化带来的画面退化。
要注意的是,回流的数据一定要做好版权和隐私合规审核。不要小看这一步,数据合规做不好,再好的模型也上线不了。
7.2 水位深度估算:检测框之外的扩展
目标检测只给了位置,但业务方常常还想要“这滩水有多深”。这是积水识别数据集下一步必须回答的问题。
一个工程化的方法是:结合检测框的高度和面积,用单应性变换(Homography)把像素坐标映射到路面物理坐标。标定一组监控画面里的参考点(已知实际距离的路面点),建立映射矩阵,就能估算积水框的实际面积。配合水深-面积的统计模型(比如积水面积占比和深度的回归关系),可以粗略分级。
这个方案不需要额外硬件,部署代价低,但对标定精度要求高,且视角变化时需要重新标定。它适合做辅助参考,不能作为精确测量的依据。
7.3 多视角融合与网格化监测
积累了一段时间数据后,我发现一个更值得做的方向:把多路摄像头的数据融合起来,形成一个片区的积水热力图。单路摄像头只能看一个点,但城市需要的是面。
方案是:每个摄像头独立推理路面积水,把检测框映射到GPS坐标系下的路面网格,上报积水等级。后端汇总各路数据,生成片区的积水态势图。这个方向对数据集提出了新要求:需要更丰富的摄像头位姿标注、更大范围的多点位采集。这也是我下一个数据集版本的主要扩展方向。
8. 最后一段:做这个数据集几个月,我学到的三件事
回头复盘整个路面积水识别数据集的建设过程,最大的收获不是模型精度提升了多少,而是对“数据集建设”这件事本身有了更深的理解。
第一件事是类别设计决定了项目的天花板。类别体系不是拍脑袋随便写的,它要同时兼顾业务需要、数据可得性和模型能力。设计得不好,后面所有工作都是在错误的方向上狂奔。
第二件事是标注规范值得投入最大心力。标注的混乱会在模型训练时被无限放大,一个不统一的标注规则,直接让模型学出“平均值”式的错误框。宁可多花一周做规范和培训,也不要草率开工。
第三件事是数据集和模型是共同进化、缺一不可的关系。脱离场景的公开数据集合做得再大,部署时照样误报一堆;脱离模型的纯数据集建设,又缺乏试错反馈。最理想的状态是:建数据集、训练模型、部署实测、回流数据、再迭代数据集——形成闭环。
如果你也在做类似的路面积水识别、或者其他特定场景的目标检测,我建议你从第一天就把数据集质量当作和模型性能同等重要的事情来对待。把类别体系设计清楚、把标注规范定死、把增强策略针对场景定制、把部署反馈闭环建起来,剩下的只是时间的问题。
本文还有配套的精品资源,点击获取