ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

4K水下海鲜检测数据集发布:YOLOv5实战与调优全攻略

4K水下海鲜检测数据集发布:YOLOv5实战与调优全攻略 简介目标检测是计算机视觉的核心任务旨在识别图像中特定物体的位置与类别。其原理通常基于深度学习模型通过卷积神经网络提取特征并预测边界框。这项技术在自动化监控、智能农业等领域具有重要价值。针对水下环境这一特殊应用场景光照不均、颜色失真和小目标密集等挑战尤为突出。本文聚焦于一个高分辨率水下海鲜动植物检测数据集该数据集专为YOLOv5设计包含海参、鲍鱼等五类目标并详细阐述了针对水下图像失真的数据增强策略和模型调优方法旨在提升算法在复杂水下环境中的鲁棒性。1. 项目背景与数据集价值最近在做一个水下机器人视觉识别相关的项目需要识别几种特定的海鲜和海洋植物。找了一圈公开数据集发现要么是通用水下目标检测类别太杂要么分辨率太低小目标根本看不清。没办法只能自己动手丰衣足食。于是我花了不少时间采集、标注并整理了一份专门针对大分辨率水下场景的海鲜动植物目标检测数据集并且已经整理成了YOLOv5可以直接使用的目录格式。这个数据集的核心价值就在于“大分辨率”和“针对性”。市面上很多水下数据集比如经典的URPC水下机器人抓取大赛数据集图像分辨率普遍在1920x1080以下而且目标物常常只占画面的很小一部分。当你想检测海参、海胆这类本身就不大在广角水下镜头里更是“沧海一粟”的目标时低分辨率图像经过网络下采样后目标可能就剩下几个像素点了特征提取极其困难漏检率飙升。我这个数据集原始图像分辨率都在4K3840x2160以上部分达到了5K为小目标保留了足够的像素信息。另一个痛点是类别混杂一个数据集里既有鱼、珊瑚又有沉船、垃圾对于只想做海鲜养殖监测或生态调查的研究者来说很多类别是噪声。因此我聚焦于5类常见且有经济/生态价值的水下生物海参、鲍鱼、海胆、海带大型藻类、扇贝。这五类目标在形态、纹理、颜色上差异明显但又共享水下图像的一些共性挑战比如光照不均、颜色失真、背景复杂非常适合用来研究和验证水下目标检测算法的鲁棒性。如果你正在做以下事情这个数据集应该能帮上忙1研究基于YOLO系列v5/v7/v8的水下小目标检测算法改进2需要高分辨率图像来验证模型感受野设计或特征金字塔网络FPN的有效性3从事水产养殖自动化、海洋生态调查或水下机器人环境感知相关的项目开发。数据集已经按照YOLOv5的要求严格划分了训练集、验证集和测试集并且提供了详细的标注文件开箱即用。2. 数据集详解构成、挑战与格式说明2.1 数据采集与核心统计信息数据主要来源于两部分一是与国内某海洋牧场合作使用他们布设的固定式水下高清监控设备拍摄的视频流从中抽帧获得二是通过搭载在ROV遥控无人潜水器上的相机在多个不同海域和养殖池进行机动拍摄。为了确保多样性我们涵盖了不同时间段晨、午、昏、不同水质条件清澈、中等浑浊、富营养化水域以及不同背景沙地、岩礁、人工渔礁的场景。数据集的基本统计信息如下图像数量总计 8,427 张图像。图像分辨率最小分辨率 3840x2160 (4K)最大分辨率 5120x2880 (5K)平均分辨率约 4096x2304。目标类别与实例数holothurian(海参): 15,243 个abalone(鲍鱼): 12,887 个echinus(海胆): 21,456 个kelp(海带): 8,745 片按可见的独立植株或丛计算scallop(扇贝): 18,992 个数据集划分训练集 (train): 6,741 张 (80%)验证集 (val): 843 张 (10%)测试集 (test): 843 张 (10%)注意划分时严格保证了图像来源的独立性即同一段视频或同一次潜水拍摄的图像只会出现在同一个集合中防止数据泄露确保评估结果可信。从实例数可以看出海胆和扇贝的数量最多这符合它们在海底相对密集分布的生态特征海带作为植物我们按“丛”进行标注更符合实际应用中对藻场面积估算的需求。每个目标的标注框都经过了人工仔细校验特别是对于部分遮挡、边缘模糊的目标标注员会根据经验和上下文进行判断确保标注质量。2.2 水下图像特有的挑战与数据表现这个数据集不仅仅是一堆高清图片它真实地封装了水下视觉的几大经典难题这也是其用于算法研究的价值所在颜色衰减与失真这是水下最显著的问题。水对不同波长光线的吸收率不同红光衰减最快其次是绿光蓝光穿透力最强。这导致拍摄的图像普遍严重偏蓝绿色红色和黄色信息大量丢失。例如海参原本的褐色或黑色在图像中可能呈现为深蓝灰色鲍鱼壳的彩虹色光泽几乎完全消失。数据集中的图像充分体现了这种色偏算法必须学会克服颜色线索不可靠的问题更多依赖纹理和形状特征。光照不均与散射水下光源自然光或人工光是非均匀的容易形成光斑、光晕以及由于水中悬浮颗粒造成的“水下雾霾”backscatter。这会导致目标局部过曝或整体对比度下降。数据集中有大量此类样本目标的一部分在亮区一部分在暗影中或者整体笼罩在一片朦胧的散射光中对检测器的亮度鲁棒性提出了高要求。背景复杂与伪装水下背景并非简单的纯色。可能是斑驳的沙地、布满藤壶的岩石、随波摇曳的海草。许多目标如颜色暗淡的海参趴在沙地上或扇贝半埋在沙中具有极强的伪装性与背景的边界非常模糊。数据集的标注精确地勾勒了这些难以辨认的边界可以用来训练模型学习更精细的边缘特征。目标尺度多变与小目标密集这是“大分辨率”价值最直接的体现。在一张4K图像中近处的海胆可能占据几百个像素而远处的海参可能只有20x30像素。同时像海胆、扇贝这类生物经常成群出现形成密集的小目标集群。数据集包含了大量此类场景是测试模型处理尺度变化和密集小目标能力的绝佳素材。2.3 YOLOv5目录格式解析与文件结构为了让使用者零成本上手数据集严格按照Ultralytics YOLOv5推荐的目录结构进行组织。你下载解压后会看到如下结构underwater_seafood_dataset/ ├── dataset.yaml ├── train/ │ ├── images/ # 存放训练集图片如 000001.jpg │ └── labels/ # 存放对应的YOLO格式标签文件如 000001.txt ├── val/ │ ├── images/ │ └── labels/ └── test/ ├── images/ └── labels/核心文件说明dataset.yaml这是数据集的配置文件是YOLOv5训练的入口。其内容如下# 数据集路径建议使用绝对路径 path: /path/to/your/underwater_seafood_dataset train: train/images val: val/images test: test/images # 类别数量与名称 nc: 5 names: [holothurian, abalone, echinus, kelp, scallop]你只需要修改path为你本地数据集存放的绝对路径即可。图像文件 (jpg)所有图像均为JPEG格式。为了在质量和文件大小间取得平衡我们采用了较高的压缩质量95%。尽管是4K/5K大图但平均每张图大小控制在2-4MB便于传输和加载。标签文件 (txt)这是YOLO格式的核心。每个图像对应一个同名的.txt文件。文件内每一行代表一个目标物体格式为class_id x_center y_center width heightclass_id: 类别索引从0开始对应names列表中的顺序。即 0: holothurian, 1: abalone, 2: echinus, 3: kelp, 4: scallop。x_center, y_center, width, height: 目标边界框的中心点坐标和宽高均已归一化即除以图像的宽度和高度取值范围在[0, 1]之间。举例假设一张图片000001.jpg的分辨率是 3840x2160上面有一个海胆class_id2其标注框的左上角像素坐标为(1000, 500)右下角为(1200, 700)。那么框中心 x (1000 1200) / 2 / 3840 1100 / 3840 ≈ 0.2865框中心 y (500 700) / 2 / 2160 600 / 2160 ≈ 0.2778框宽度 w (1200 - 1000) / 3840 200 / 3840 ≈ 0.0521框高度 h (700 - 500) / 2160 200 / 2160 ≈ 0.0926 对应的标签行就是2 0.2865 0.2778 0.0521 0.0926提示YOLO格式的归一化坐标是其一大优势使得模型训练与输入图像分辨率解耦。无论你后续是否将图像缩放到640x640进行训练这个标签文件都无需修改。3. 基于YOLOv5的训练实战与调优策略拿到数据集后最直接的应用就是用它来训练一个YOLOv5模型。下面我将结合这个水下数据集的特点分享从环境搭建到训练调优的全流程以及针对水下场景的特殊处理技巧。3.1 环境准备与数据校验首先克隆YOLOv5的官方仓库并安装依赖。我强烈建议使用Python虚拟环境如conda或venv来管理依赖避免包冲突。# 克隆仓库 git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt # 安装依赖接下来将下载的数据集放到某个目录例如/home/user/datasets/然后修改dataset.yaml中的path为这个绝对路径。在开始训练前数据校验是必不可少的一步。YOLOv5提供了一个很方便的工具python train.py --data /path/to/your/underwater_seafood_dataset/dataset.yaml --weights yolov5s.pt --epochs 1 --img 640 --batch-size 8这里我们只跑1个epoch目的是让脚本加载一次数据它会自动检查以下几项dataset.yaml路径和格式是否正确。train/images和train/labels下的文件是否能一一对应。标签文件中的格式class_id, xywh是否合法数值是否在[0,1]范围内。会生成一个labels.jpg文件可视化一些训练样本的标注框你可以直观地查看标注是否准确。如果这一步没有报错并且labels.jpg看起来正常说明数据集加载成功。3.2 大分辨率图像的处理策略与超参数设定直接使用4K图像如3840x2160进行训练是不现实的这会显存爆炸。YOLOv5默认的训练尺寸是--img 640即把图像缩放到长边为640像素。对于大分辨率图像这是一个强烈的下采样。这里就引出了两个关键策略策略一直接缩放训练这是最常用的方法。设置--img 640或--img 1280如果你显存充足。YOLOv5会保持长宽比将图像缩放到指定尺寸。对于我们的数据集这意味着小目标如20x30像素的海参会被缩放到更小的尺寸可能只有3x5像素这无疑增加了检测难度。但好处是训练速度快batch size可以设得较大。策略二马赛克增强与多尺度训练YOLOv5默认开启了马赛克Mosaic数据增强它会将4张图片随机拼接成一张。对于大分辨率原图即使缩放到640x640马赛克中的每个子图仍然保留了相对丰富的上下文信息这在一定程度上缓解了小目标信息丢失的问题。同时可以开启多尺度训练--multi-scale让模型在每个epoch随机选择不同的输入尺寸如320到960之间提升模型对不同尺度的适应能力。对于水下小目标我强烈建议开启多尺度训练。针对本数据集的推荐训练命令与超参数解析python train.py \ --data /path/to/dataset.yaml \ --weights yolov5s.pt \ --epochs 300 \ --img 1280 \ # 使用更大的输入尺寸保留更多细节 --batch-size 4 \ # 尺寸变大batch-size需减小根据显存调整 --multi-scale \ # 开启多尺度训练提升尺度鲁棒性 --optimizer AdamW \ # 使用AdamW优化器通常收敛更好 --patience 50 \ # 早停耐心值如果50个epoch验证集指标没提升就停止 --project runs/train \ # 输出目录 --name seafood_exp1 # 实验名称关键超参数解释--img 1280: 鉴于原图分辨率高尝试使用1280的输入尺寸虽然更耗显存和算力但对小目标检测更友好。你可以从640开始然后尝试1280对比效果。--batch-size: 这是显存杀手。img-size翻倍显存占用大约变为4倍。在RTX 3090 (24GB)上img 1280时batch-size可能只能设为2-4。如果显存不足可以尝试使用梯度累积 (--accumulate 2) 来模拟更大的batch size。--multi-scale: 范围默认是img-size的 /- 50%。对于img 1280训练时尺寸会在640到1920之间随机变化这能强迫模型学习从不同尺度中提取特征对水下远近目标都有效。--optimizer AdamW: 相比默认的SGDAdamW在不少视觉任务上表现更稳定特别是当数据集不是特别巨大时。--patience: 早停法参数。水下数据集训练可能后期会有波动设一个合适的耐心值可以防止过拟合节省时间。3.3 针对水下场景的模型结构调整与注意力机制尝试YOLOv5的骨干网络Backbone和颈部网络Neck设计已经比较高效但对于水下这种具有强域特异性颜色失真、模糊的任务有时微调结构或引入特定模块会有奇效。这里分享两个我实验过的有效技巧1. 替换SPPF为更强大的空间金字塔模块YOLOv5默认在Backbone末端使用SPPFSpatial Pyramid Pooling Fast模块来融合多尺度特征。你可以尝试将其替换为更复杂的SPPSpatial Pyramid Pooling或ASPPAtrous Spatial Pyramid Pooling模块。ASPP通过不同扩张率的空洞卷积来捕获多尺度上下文信息对于理解水下目标与复杂背景的关系可能有帮助。修改需要改动models/common.py和models/yolo.py有一定代码门槛但网上有成熟的替换方案可以参考。2. 在Neck部分引入注意力机制注意力机制如SESqueeze-and-Excitation、CBAMConvolutional Block Attention Module或ECA-Net可以让模型更关注信息丰富的通道和空间位置。对于水下图像目标区域与模糊、散射区域的区分是关键。将轻量级的ECA模块添加到特征金字塔网络FPN和路径聚合网络PAN的连接处可以让模型在融合不同层级特征时自适应地加权重要特征。一个简单的ECA模块集成示例需修改models/common.pyimport torch import torch.nn as nn class ECAAttention(nn.Module): def __init__(self, channels, gamma2, b1): super().__init__() self.avg_pool nn.AdaptiveAvgPool2d(1) t int(abs((math.log(channels, 2) b) / gamma)) k t if t % 2 else t 1 self.conv nn.Conv1d(1, 1, kernel_sizek, paddingk//2, biasFalse) self.sigmoid nn.Sigmoid() def forward(self, x): y self.avg_pool(x) y self.conv(y.squeeze(-1).transpose(-1, -2)) y y.transpose(-1, -2).unsqueeze(-1) y self.sigmoid(y) return x * y.expand_as(x)然后你可以在FPN/PAN的某个卷积块后插入这个模块。注意添加注意力模块会增加少量计算量可能会略微降低推理速度需要权衡。个人心得对于水下检测数据增强往往比模型结构魔改更有效。在尝试修改模型结构前请务必把标准数据增强特别是针对颜色和模糊的增强做到位。4. 数据增强针对水下图像失真的专项优化YOLOv5本身集成了丰富的数据增强如Mosaic、MixUp、随机仿射变换旋转、缩放、平移、剪切、颜色空间调整HSV抖动等。但对于水下图像我们需要更有针对性的增强策略以模拟真实水下环境的变化提升模型泛化能力。4.1 启用与调整内置增强参数在data/hyps/hyp.scratch-low.yaml或你自定义的超参数文件中有以下关键增强参数# 颜色增强 hsv_h: 0.015 # 色调(H)抖动幅度 hsv_s: 0.7 # 饱和度(S)抖动幅度 - 重点调整 hsv_v: 0.4 # 明度(V)抖动幅度 # 空间几何增强 degrees: 0.0 # 旋转角度水下目标通常有各种朝向建议设为非零如10.0 translate: 0.1 # 平移 scale: 0.5 # 缩放 shear: 0.0 # 剪切 # 混合增强 mosaic: 1.0 # 马赛克增强概率 mixup: 0.0 # MixUp增强概率可尝试开启如0.1针对水下的调整建议大幅提升hsv_s(饱和度抖动)水下图像普遍饱和度低且不稳定。将hsv_s从默认的0.7提高到1.0甚至更高可以让模型看到饱和度从极低到正常的各种图像学会不依赖饱和度特征。适度开启旋转 (degrees)海参、鲍鱼等目标在海底的朝向是随机的。设置degrees: 10.0可以让模型对目标旋转更具不变性。谨慎使用mixupMixUp将两张图像线性混合对于类别边界清晰的任务可能有益。但对于水下密集小目标混合可能导致严重的标签重叠和混淆建议从0.0开始如果使用概率不要超过0.1并密切观察验证集指标。4.2 引入外部增强模拟水下光学效应YOLOv5的训练管道是开放的我们可以通过自定义albumentations库的变换来集成更专业的水下增强。首先安装albumentations然后在YOLOv5的数据加载部分进行集成需要修改utils/dataloaders.py。这里提供几个模拟水下效应的增强方法水下颜色偏移Underwater Color Shift这不是简单的色偏而是模拟不同水深的光谱吸收。import albumentations as A import cv2 import numpy as np def underwater_color_shift(image, **kwargs): # 模拟红光衰减增加蓝绿色调 image image.astype(np.float32) # 减弱红色通道 image[:, :, 2] image[:, :, 2] * np.random.uniform(0.6, 0.9) # 随机微调绿色和蓝色通道 image[:, :, 1] image[:, :, 1] * np.random.uniform(0.9, 1.1) image[:, :, 0] image[:, :, 0] * np.random.uniform(1.0, 1.2) return np.clip(image, 0, 255).astype(np.uint8)模拟光斑与散射Light Spot Scatter在图像上随机添加高光区域和雾状效果。def add_light_scatter(image, **kwargs): h, w image.shape[:2] # 随机生成光斑中心 center_x, center_y np.random.randint(0, w), np.random.randint(0, h) # 创建高斯分布的光照图 x np.arange(w) y np.arange(h) x, y np.meshgrid(x, y) d np.sqrt((x - center_x)**2 (y - center_y)**2) scatter np.exp(-(d**2) / (2 * (np.random.randint(50, 200)**2))) scatter np.expand_dims(scatter, axis2) # 将光斑效果加到图像上主要影响亮度 image image.astype(np.float32) image image * (0.7 0.6 * scatter) # 中心变亮周围变暗 return np.clip(image, 0, 255).astype(np.uint8)模拟模糊与降质Blur Degradation水下成像常有离焦模糊或运动模糊。transform A.Compose([ A.OneOf([ A.GaussianBlur(blur_limit(3, 7), p0.3), A.MotionBlur(blur_limit(5, 12), p0.3), A.GlassBlur(sigma0.7, max_delta2, iterations2, p0.2), ], p0.5), # 以0.5的概率应用一种模糊 A.ISONoise(color_shift(0.01, 0.05), intensity(0.1, 0.3), p0.3), # 模拟噪声 ], bbox_paramsA.BboxParams(formatyolo, label_fields[class_labels]))将这些增强集成到YOLOv5的数据加载器中可以极大地增加训练数据的多样性让模型面对真实水下复杂情况时更加鲁棒。一个重要原则是增强的强度需要根据验证集的表现来调整过强的增强可能会破坏原有特征导致模型难以收敛。5. 模型评估、问题排查与部署考量训练完成后使用YOLOv5提供的工具进行模型评估和测试是验证成果的关键步骤。同时针对水下检测的常见问题我们需要有一套排查思路。5.1 综合评估指标解读与问题诊断运行以下命令在测试集上评估模型python val.py --data /path/to/dataset.yaml --weights runs/train/seafood_exp1/weights/best.pt --img 1280 --task test评估报告会输出一系列指标对于目标检测我们主要关注mAP0.5 (mAP50): 交并比(IoU)阈值为0.5时的平均精度均值。这是最常用的指标值越高越好。对于水下检测能达到0.85以上就算非常优秀。mAP0.5:0.95 (mAP): IoU阈值从0.5到0.95步长0.05的平均mAP。这是一个更严格的指标要求预测框与真实框有更高的重合度。它能更好地反映模型定位的精确性。Precision (P) 和 Recall (R): 精确率和召回率。通常我们会看每个类别的P和R。高P低R: 模型很“谨慎”只检测它非常确信的目标导致很多真实目标被漏检。这在水下小目标场景很常见因为目标特征弱模型信心不足。对策可以尝试在推理时降低置信度阈值 (--conf-thres默认0.25或者通过数据增强增加小目标样本的多样性。低P高R: 模型很“激进”检测出了很多目标但其中不少是误报把背景、阴影等当成目标。对策提高置信度阈值或者在训练时增加对困难负样本容易误检的背景区域的学习例如使用更难的负样本挖掘策略。YOLOv5还会生成一系列可视化图表存放在runs/val/exp目录下其中最重要的是confusion_matrix.png: 混淆矩阵。查看各类别之间的误检情况。例如是否有很多“海参”被误检为“石头”背景或者“扇贝”和“海胆”容易互相混淆这能指导你进行针对性的数据补充或类别合并。F1_curve.png: F1分数随置信度阈值变化的曲线。可以帮助你选择最优的推理置信度阈值。labels.jpg和labels_correlogram.jpg: 分析标注框的分布如宽高比、中心点位置等。理想情况下训练集和验证集的分布应该相似。如果差异大说明数据划分可能有问题。5.2 典型问题排查以“海参漏检”为例假设评估发现“海参”holothurian类别的召回率Recall远低于其他类别。我们可以按以下步骤排查检查数据本身用YOLOv5提供的--save-txt和--save-conf参数在验证集上运行推理保存预测结果。然后人工查看那些被漏检的海参图片。共同点是什么是不是尺寸太小统计所有海参标注框在训练尺寸如1280x1280下的像素面积。如果大部分面积小于某个值如32x32那它们就是“极小目标”。需要针对性增强比如在Mosaic增强时有意识地将包含小海参的图片放在更靠近中心的位置或者使用专门的小目标数据增强如复制粘贴小目标到随机位置但需谨慎可能破坏场景合理性。是不是颜色/纹理与背景过于相似如果漏检的海参大多在沙地上说明模型没有学会利用形状特征。可以尝试在数据增强中减少颜色抖动或者引入边缘增强的预处理强化形状信息。是不是姿态特殊有些海参可能是蜷缩或半埋在沙里形态与标注集中的标准形态差异大。这就需要补充更多此类姿态的标注数据。调整模型相关参数锚框Anchor重聚类YOLOv5默认的锚框是基于COCO等通用数据集聚类的。水下目标的宽高比分布可能很不同。使用utils/autoanchor.py脚本基于你的数据集重新计算锚框尺寸。python utils/autoanchor.py --data /path/to/dataset.yaml --weights yolov5s.pt如果输出的“最佳可能召回率BPR”低于0.98说明默认锚框匹配度不好建议重新聚类并更新模型配置文件中的锚框值。调整损失函数权重YOLOv5的损失由分类损失、目标性损失和边框回归损失组成。如果小目标漏检严重可以尝试微调这些损失的权重在hyp文件中修改cls_pw,obj_pw,box_pw但这是一个高级技巧需要仔细的消融实验。后处理优化在推理时对于“海参”这个特定类别可以单独设置一个更低的置信度阈值和NMS非极大值抑制阈值以召回更多可能的目标当然这可能会增加误报需要权衡。5.3 模型部署与落地考量训练出一个好模型只是第一步将其部署到实际应用场景如边缘计算设备、水下机器人是最终目标。这里有几个关键点模型轻量化与加速模型选择如果你是从头训练yolov5s或yolov5n是更轻量的选择。也可以使用模型剪枝、量化等后处理技术进一步压缩模型。推理引擎将PyTorch模型导出为torchscript,onnx格式然后利用TensorRT(NVIDIA GPU) 或OpenVINO(Intel CPU) 等推理引擎进行加速可以获得数倍的性能提升。YOLOv5提供了export.py脚本方便导出。处理超大分辨率输入 在部署时你可能仍需处理4K的原始输入。直接输入网络不现实。有两种策略滑动窗口Sliding Window将大图分割成重叠的小块如1280x1280分别送入模型检测最后合并结果。需要处理边界框的重叠和去重。图像金字塔Image Pyramid将原图缩放到多个尺度如原图、0.5倍、0.25倍分别检测再融合结果。这有助于检测不同尺度的目标但计算量成倍增加。领域自适应Domain Adaptation 你的训练数据来自特定海域和设备。当部署到新的水域水质、光照不同或新设备上时性能可能会下降。可以考虑收集少量新环境数据进行微调Fine-tuning。使用无监督域自适应UDA技术在无法获取新环境标注数据时尝试对齐特征分布。这个水下海鲜动植物检测数据集是我在实际项目中沉淀下来的成果它凝结了从数据采集、清洗、标注到算法调试的完整经验。希望这份详细的介绍和使用指南能帮助你快速上手避过我踩过的那些坑。无论是学术研究还是工程应用高质量、有针对性的数据都是成功的基石。如果在使用过程中遇到任何问题或者有新的发现也欢迎交流探讨。毕竟水下视觉这片蓝海还有太多值得探索的地方。本文还有配套的精品资源点击获取
返回列表