ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

树莓派5部署YOLOv8与ncnn:实现10-20FPS边缘目标检测

树莓派5部署YOLOv8与ncnn:实现10-20FPS边缘目标检测 这次我们来看一个在树莓派5上部署YOLOv8目标检测模型并通过ncnn推理框架实现10~20fps性能的实战项目。对于嵌入式开发者和边缘AI应用来说在资源受限的设备上跑通现代视觉模型并达到可用帧率一直是个有挑战性的目标。这个组合方案直接瞄准了树莓派5的硬件潜力利用ncnn的高效推理能力让YOLOv8这类主流检测模型能在边缘侧实时运行。项目的核心价值在于提供了一套从模型转换到部署验证的完整路径。它不只是一个概念演示而是给出了具体的性能指标10-20fps让开发者能对实际效果有明确预期。如果你正在寻找将目标检测能力集成到树莓派5项目中的方法关心模型推理速度、内存占用和部署流程那么这篇文章提供的步骤和实测数据将非常关键。本文将带你完成从环境准备、模型转换、程序编译到性能测试的全过程。我们会重点关注在树莓派5的ARM架构和有限内存下如何配置ncnn、转换YOLOv8模型以及最终实现稳定帧率的推理流水线。过程中涉及的显存/内存占用、CPU利用率、以及可能遇到的编译和运行问题都会逐一说明。1. 核心能力速览在深入部署细节前我们先通过下表快速了解这个方案的核心特性和要求帮助你判断是否适合你的项目。能力项说明目标设备树莓派5 (Raspberry Pi 5)推理框架ncnn (腾讯开源的高性能神经网络前向计算框架)AI模型YOLOv8 (目标检测支持n/s/m/l/x等不同尺寸)性能目标10 ~ 20 FPS (帧每秒)具体取决于模型尺寸、输入分辨率及后处理主要编程语言C部署方式本地编译直接运行可执行文件是否支持GPU加速支持树莓派5的VideoCore VII GPU (通过ncnn的Vulkan后端)但需配置和测试是否支持CPU推理是ncnn支持ARM NEON指令集优化纯CPU也可运行是否支持摄像头实时流是可通过OpenCV等库捕获摄像头数据并送入推理管道是否支持批量任务/接口API核心为本地推理库需自行封装为服务或API支持单帧或批量帧处理适合场景嵌入式视觉、边缘计算、智能监控、机器人视觉、低功耗AI产品原型开发2. 适用场景与使用边界这个树莓派5 YOLOv8 ncnn的方案最适合那些需要在设备端进行实时目标检测且对成本、功耗和体积有严格限制的场景。它非常适合嵌入式智能设备开发如智能门铃、安防摄像头、巡检机器人需要在端侧实时分析视频流识别人员、车辆、宠物等目标。教育与原型验证学习者或创业者希望以较低硬件成本验证视觉AI想法树莓派5是理想的实验平台。边缘计算节点在分布式系统中作为靠近数据源的边缘节点执行初步的视觉感知任务减少云端传输带宽和延迟。对延迟敏感的应用需要极低响应时间的交互式应用如基于视觉的机械臂抓取本地推理能避免网络波动带来的延迟。它可能不适合需要极高检测精度或复杂场景YOLOv8-n/s等小模型在精度上必然逊于大型模型或专用模型。对于需要识别上百个细粒度类别或在极端光照、遮挡下的场景需要评估效果是否达标。超高分辨率或高帧率视频流树莓派5的计算能力有限处理1080p以上分辨率或60fps的原始流并达到20fps推理会很困难通常需要对视频流进行降采样或抽帧。即开即用的云服务需求此方案需要本地编译、部署和优化如果你需要的是像调用API一样简单的服务那么云端AI服务或已封装好的商业边缘计算盒子更合适。完全无编程经验的用户部署过程涉及Linux命令行操作、C编译、模型转换等需要一定的技术背景。重要边界与合规提醒模型版权使用的YOLOv8模型需遵守其对应的开源许可证如GPL-3.0。数据隐私在树莓派本地处理视频流数据无需上传云端有助于保护用户隐私。但在开发产品时仍需遵守相关的数据安全与隐私保护法规。应用伦理目标检测技术可用于安防、辅助驾驶等正面场景但开发者应确保其应用不用于非法监控、侵犯个人隐私等用途。3. 环境准备与前置条件开始部署前请确保你的树莓派5已准备好以下基础环境。一个干净且更新到最新的系统是成功的第一步。3.1 硬件要求树莓派5至少4GB内存版本8GB更佳能为系统和推理程序提供更多缓冲。存储卡建议32GB或以上容量的高速MicroSD卡A1/V30等级保证系统流畅和编译速度。电源必须使用官方推荐或能提供5V/5A25W以上的电源。性能模式下功耗较高供电不足会导致系统不稳定甚至损坏。散热强烈建议为树莓派5安装主动散热风扇或大型散热片。持续AI推理负载下CPU/GPU温度会快速上升过热会触发降频严重影响FPS。摄像头可选如需测试实时视频流需要搭配树莓派官方摄像头或兼容的USB摄像头。3.2 操作系统与基础软件操作系统推荐使用官方Raspberry Pi OS (64-bit)。32位系统在内存访问和某些优化库上可能存在限制。请从树莓派官网下载并刷录到SD卡。系统更新首次启动后打开终端执行以下命令更新系统sudo apt update sudo apt full-upgrade -y sudo reboot基础开发工具安装编译所需的工具链和库。sudo apt install -y build-essential cmake git wget unzip sudo apt install -y libopencv-dev python3-opencv # OpenCV用于图像读取和显示 sudo apt install -y protobuf-compiler libprotobuf-dev # 可能用于模型转换3.3 关键依赖项版本建议以下版本经过社区验证兼容性较好建议优先采用CMake: 3.16 或更高版本。GCC/G: 10 或更高版本64位系统自带版本通常满足。OpenCV: 4.5 或更高版本。通过apt安装的版本即可如需特定功能可自行编译。环境准备就绪后我们就可以进入核心的ncnn框架部署环节了。4. 安装部署与启动方式部署的核心是ncnn推理框架和YOLOv8模型。我们需要先在树莓派5上编译安装ncnn然后准备YOLOv8的ncnn格式模型最后编译并运行推理程序。4.1 编译安装 ncnnncnn的编译需要一点时间请耐心等待。克隆代码cd ~ git clone https://github.com/Tencent/ncnn.git cd ncnn获取子模块git submodule update --init创建构建目录并配置mkdir -p build cd build接下来是关键的CMake配置。为了在树莓派5上获得更好性能我们启用NEONARM SIMD指令和VulkanGPU加速支持。树莓派5的VideoCore VII GPU支持Vulkan 1.2。cmake -DCMAKE_BUILD_TYPERelease \ -DNCNN_VULKANON \ -DNCNN_SYSTEM_GLSLANGOFF \ -DNCNN_BUILD_EXAMPLESON \ -DNCNN_BUILD_TOOLSON \ -DNCNN_DISABLE_RTTIOFF \ -DNCNN_DISABLE_EXCEPTIONOFF ..-DNCNN_VULKANON开启Vulkan支持尝试利用GPU加速。-DNCNN_BUILD_EXAMPLESON编译示例程序其中包含我们需要的yolov8示例。如果编译过程中GLSLANGVulkan着色器编译器出现问题可以尝试先安装系统版本的glslang-toolssudo apt install glslang-tools或者将-DNCNN_SYSTEM_GLSLANGOFF改为ON。编译与安装make -j$(nproc) # 使用所有CPU核心加速编译 sudo make install编译过程可能需要30分钟到1小时。完成后ncnn库文件将安装在/usr/local/目录下。4.2 准备 YOLOv8 ncnn 模型ncnn不能直接使用PyTorch的.pt文件或ONNX的.onnx文件需要转换为ncnn专用的格式.param和.bin。有两种主要方式方式一使用官方转换工具推荐ncnn提供了onnx2ncnn和pnnx等工具。通常流程是YOLOv8 (.pt) - ONNX (.onnx) - ncnn (.param/.bin)。这个过程建议在x86电脑上完成因为转换工具依赖较多在树莓派上安装复杂。转换后将生成的.param和.bin文件拷贝到树莓派上。方式二使用社区预转换模型许多开源社区已经提供了转换好的YOLOv8 ncnn模型。你可以搜索“yolov8 ncnn model”等关键词下载对应模型尺寸如yolov8n, yolov8s的.param和.bin文件。假设你已经获得了yolov8n.param和yolov8n.bin文件将它们放在树莓派上的某个目录例如~/projects/yolov8_ncnn/models/。4.3 获取并编译推理示例代码ncnn的示例代码中包含了YOLOv8的检测程序这是一个极佳的起点。定位示例代码ncnn编译后YOLOv8示例代码通常在~/ncnn/build/examples/目录下或者源码的examples/目录里。我们假设它在~/ncnn/examples/。进入目录并编译cd ~/ncnn/examples/ mkdir -p build cd build cmake .. make -j$(nproc)编译成功后会在当前目录生成可执行文件例如yolov8或yolov8detect具体名称可能因ncnn版本略有不同。4.4 启动推理程序启动方式就是运行编译好的可执行文件并传入模型路径和测试图片。# 假设可执行文件名为 yolov8 模型文件在 ~/models/测试图片为 test.jpg ./yolov8 ~/models/yolov8n.param ~/models/yolov8n.bin test.jpg如果程序依赖OpenCV显示窗口请确保在桌面环境或配置了DISPLAY的远程连接下运行。程序会加载模型执行推理并在图片上画出检测框同时终端会输出推理时间。至此最基本的部署和启动就完成了。接下来我们需要对这个流程进行功能测试和效果验证。5. 功能测试与效果验证部署完成后必须进行系统性的测试以验证功能是否正常并评估其实际性能是否达到10-20fps的预期。5.1 基础图片检测测试测试目的验证模型加载、推理、后处理整个管道是否畅通。输入素材准备一张包含常见目标人、车、狗等的JPEG图片命名为test.jpg放在方便访问的目录。操作步骤进入编译好的示例程序所在目录。运行命令指定模型和图片路径。./yolov8 yolov8n.param yolov8n.bin ../test.jpg预期结果终端输出类似如下信息load model done detect time: 120 ms # 这是单次推理耗时单位毫秒 found: person, car, dog ... # 检测到的类别屏幕上会弹出一个窗口显示画有检测框和类别标签的图片。判断成功程序不报错能正确输出检测耗时和类别并显示带检测结果的图片窗口。常见失败原因Segmentation fault模型文件路径错误、模型文件损坏、或编译的ncnn库与示例程序不兼容。找不到libncnn.so等库需要设置库路径export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH或者运行sudo ldconfig。无法打开显示在无图形界面的服务器上运行需要禁用OpenCV的imshow或使用其他方式保存结果。5.2 性能基准测试FPS测量单张图片的推理时间如120ms并不直接等于FPS。FPS是每秒处理帧数需要连续处理多帧来计算。测试目的获取稳定的平均FPS评估实时性。操作步骤通常需要修改示例代码使其循环处理同一张图片或一个视频流多次例如1000次计算总时间然后求平均每帧时间。// 伪代码逻辑 double total_time 0.0; int loop_count 1000; for (int i 0; i loop_count; i) { // 1. 加载或准备图像数据 (cv::imread 只执行一次后续复用) // 2. 记录开始时间 auto start std::chrono::steady_clock::now(); // 3. 执行 ncnn 推理 extractor-input(), extractor-extract() // 4. 执行后处理 (nms, 画框等) auto end std::chrono::steady_clock::now(); double elapsed std::chrono::durationdouble, std::milli(end - start).count(); total_time elapsed; } double avg_time_per_frame total_time / loop_count; double fps 1000.0 / avg_time_per_frame; printf(Average inference time: %.2f ms, FPS: %.2f\n, avg_time_per_frame, fps);关键观察点首次推理 vs 后续推理首次推理可能因模型加载、缓存等较慢应忽略预热次数。纯推理时间 vs 端到端时间端到端时间包括图像预处理缩放、归一化、推理、后处理解码、NMS。FPS应以端到端时间为准。输入分辨率FPS与输入图片大小强相关。YOLOv8默认输入为640x640。尝试调整为320x320或480x480FPS会显著提升但精度下降。预期结果在树莓派5上使用yolov8n模型输入640x640纯CPU推理端到端时间大约在80-150ms之间对应6-12 FPS。开启Vulkan GPU加速后有望提升至10-20 FPS甚至更高但这高度依赖于Vulkan驱动的完善度和模型层的支持情况。5.3 摄像头实时视频流测试测试目的验证在真实视频流下的稳定性和实用性。操作步骤修改示例程序将静态图片输入改为从摄像头/dev/video0或视频文件读取帧。使用OpenCV的VideoCapture打开摄像头。在循环中capture.read(frame)获取一帧。将这一帧送入YOLOv8推理管道。在帧上绘制检测结果并显示。计算并显示实时FPS。判断成功摄像头画面能实时显示并且检测框能跟随物体移动FPS显示基本稳定。性能瓶颈分析如果FPS远低于纯图片测试可能是图像采集cv::imread/capture.read或显示cv::imshow耗时过多。可以考虑降低采集帧率或分辨率。使用多线程将采集、推理、显示放在不同线程。禁用或优化显示环节例如每N帧显示一次。通过以上测试你就能对这套部署方案的性能和稳定性有一个全面的认识。接下来我们看看如何将其工程化例如封装成API或处理批量任务。6. 接口API与批量任务原生的ncnn示例是一个命令行程序。在实际项目中我们可能需要将其封装成服务或处理批量图片。6.1 封装为简单的HTTP API服务你可以使用轻量级的HTTP服务器库如 Crow 、 httplib 将检测功能包装成API。服务设计POST /detect接收上传的图片返回JSON格式的检测结果类别、置信度、坐标。GET /status返回服务状态和当前平均FPS。示例代码结构#include httplib.h #include opencv2/opencv.hpp // ... 包含ncnn和YOLOv8检测头文件 YOLOv8Detector detector(models/yolov8n.param, models/yolov8n.bin); int main() { httplib::Server svr; svr.Post(/detect, [](const httplib::Request req, httplib::Response res) { // 1. 从req.body或multipart中解析图片数据 // 2. 将图片数据解码为cv::Mat // 3. 调用 detector.detect(mat, results) // 4. 将results转换为JSON字符串 // 5. res.set_content(json_str, application/json); }); svr.Get(/status, [](const httplib::Request req, httplib::Response res) { json status {{fps, current_fps}, {model, yolov8n}}; res.set_content(status.dump(), application/json); }); svr.listen(0.0.0.0, 8080); return 0; }启动方式编译该服务程序后在树莓派上运行./detection_server即可通过http://树莓派IP:8080/detect进行访问。6.2 批量图片处理任务对于需要处理大量静态图片的场景如数据集标注、历史视频抽帧分析可以编写一个批量处理程序。设计思路扫描指定输入目录input_dir下的所有图片文件.jpg,.png。依次读取每张图片进行推理检测。将检测结果可以是画框后的图片也可以是包含检测框坐标的TXT或JSON文件保存到输出目录output_dir。记录处理日志包括成功/失败的文件名和总耗时。关键优化队列与多线程如果单张图片处理时间较长可以使用生产者-消费者模型。一个线程负责读取图片到队列多个工作线程从队列取图片进行推理。资源复用避免在循环内重复加载模型。ncnn::Net和ncnn::Extractor对象应在循环外创建并复用。错误处理某张图片处理失败不应导致整个任务中止应记录错误并继续处理下一张。无论是API服务还是批量任务核心都是将我们已验证的YOLOv8ncnn推理逻辑进行封装和扩展以适应不同的应用场景。7. 资源占用与性能观察在树莓派5这样的资源受限设备上监控资源占用至关重要它直接关系到系统的稳定性和性能表现。7.1 如何观察资源占用在终端中使用以下命令进行实时监控查看整体CPU和内存占用top运行推理程序后在top界面观察该进程的%CPUCPU使用率和%MEM内存使用率。YOLOv8推理通常是CPU密集型任务%CPU可能接近100%单核或400%四核占满。查看具体进程的详细内存信息ps aux | grep yolov8找到进程PID后查看更详细的内存映射cat /proc/[PID]/status | grep -E VmPeak|VmSize|VmRSS|VmDataVmPeak进程运行期间占用过的最大虚拟内存。VmRSS进程当前实际占用的物理内存Resident Set Size。这是最关键的指标它反映了你的程序“吃掉”了多少宝贵的RAM。查看GPUVulkan使用情况树莓派5的Vulkan驱动可能不提供像nvidia-smi那样的标准工具。可以尝试使用vulkaninfo来检查驱动状态但实时监控工具较少。性能观察主要靠对比开启Vulkan前后的FPS提升。7.2 典型资源占用分析内存占用模型加载yolov8n的ncnn模型文件.bin约6MB。加载到内存后由于权重和中间激活值进程的VmRSS会增加几十MB到一百多MB。图像数据一张640x640的RGB图像在内存中约为640*640*3 ≈ 1.2MB。如果使用队列缓冲多帧内存占用会线性增加。总计一个简单的YOLOv8推理进程VmRSS通常在150MB - 300MB之间对于4GB内存的树莓派5来说完全可接受。CPU占用单次推理会充分利用一个或多个CPU核心。在纯CPU模式下单核利用率可能持续在95%以上。如果是四核可能看到总CPU利用率在250%-400%之间波动因为多线程。开启Vulkan后部分计算负载会转移到GPUCPU占用率会显著下降。温度与功耗持续高负载运行会导致SoC温度迅速升高。使用vcgencmd measure_temp命令监控温度。如果温度超过80°C系统可能会开始降频throttling导致FPS下降。这就是为什么强调必须做好散热。功耗会明显增加务必使用足额电源。7.3 性能调优建议模型尺寸选择yolov8nnano是速度和精度的最佳起点。如果FPS不达标可以尝试更小的自定义模型或使用yolov8的-p6后缀模型分辨率1280但需要向下采样。输入分辨率这是最有效的调优杠杆。将输入从640x640降到480x480或320x320FPS会有近乎线性的提升但小目标检测能力会减弱。推理后端务必测试CPU (ARM NEON)和GPU (Vulkan)两种模式。使用CMake重新编译ncnn示例时通过-DNCNN_VULKANON/OFF来控制。在代码中通过net.opt.use_vulkan_compute true/false;来开关。ncnn优化选项在创建ncnn::Net后可以设置一些优化选项ncnn::Net net; net.opt.use_vulkan_compute true; // 使用Vulkan net.opt.use_bf16_storage true; // 使用BF16存储如果硬件支持 net.opt.use_fp16_packed true; // 使用FP16 packed计算 net.opt.use_fp16_storage true; // 使用FP16存储 net.opt.num_threads 4; // 设置线程数通常设为CPU核心数注意use_fp16_*选项可以大幅减少内存占用并可能提升速度但可能会引入微小的精度损失需要测试确认。OpenCV操作优化避免在推理循环中进行不必要的图像格式转换、复制或缩放。尽量复用内存。通过密切监控和针对性调优你可以在树莓派5上榨取出每一分性能使YOLOv8推理更接近甚至超过20 FPS的目标。8. 常见问题与排查方法部署过程中难免会遇到问题下表汇总了常见问题及其排查思路。问题现象可能原因排查方式解决方案编译ncnn时出错1. 依赖库缺失。2. CMake版本过低。3. 内存不足Swap爆满。1. 检查CMake输出错误信息。2. 使用free -h查看内存和Swap使用情况。1. 根据错误信息安装对应依赖如libvulkan-dev。2. 升级CMake。3. 增加Swap空间或关闭其他程序释放内存。运行程序时报错error while loading shared libraries: libncnn.so.xxx系统未找到ncnn动态库。执行ldconfig -p | grep ncnn查看库是否注册。1. 运行sudo ldconfig刷新库缓存。2. 或将ncnn库路径加入LD_LIBRARY_PATH:export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH。Vulkan初始化失败1. Vulkan驱动未安装或损坏。2. 树莓派5的Vulkan支持不完善。1. 运行vulkaninfo看是否有输出。2. 编译时检查CMake日志中NCNN_VULKAN是否找到驱动。1. 确保系统已更新sudo apt update sudo apt upgrade。2. 尝试安装mesa-vulkan-driverssudo apt install mesa-vulkan-drivers。3.回退到纯CPU模式在代码中设置net.opt.use_vulkan_compute false;。推理结果完全错误或为空1. 模型文件.param, .bin不匹配或损坏。2. 图像预处理缩放、归一化、BGR2RGB与模型训练时不一致。3. 后处理代码解码、置信度阈值、NMS参数错误。1. 用官方工具或脚本重新转换模型。2. 对比原始PyTorch或ONNX模型在相同输入下的输出。3. 检查预处理代码确保与模型要求一致如均值、标准差。1. 使用公认可靠的预转换模型或转换流程。2. 仔细核对预处理和后处理代码参考ncnn官方示例。FPS远低于预期如51. 输入分辨率过高。2. 未使用优化编译选项如-O3。3. 代码中存在低效操作如循环内重复初始化。4. 系统因过热而降频。1. 打印每阶段耗时定位瓶颈。2. 使用vcgencmd get_throttled查看是否发生降频返回值非0表示发生过。3. 监控CPU频率watch -n 1 vcgencmd measure_clock arm。1. 降低输入分辨率。2. 确保以Release模式编译-DCMAKE_BUILD_TYPERelease。3. 优化代码移除冗余操作。4.加强散热确保CPU温度低于70°C。处理视频流时卡顿严重1.cv::imshow显示耗时过长。2. 图像采集cv::VideoCapture和解码是瓶颈。3. 未使用多线程采集、推理、显示串行执行。1. 注释掉显示代码看FPS是否大幅提升。2. 使用time命令测量各环节耗时。1. 降低显示帧率或分辨率。2. 考虑使用GStreamer后端替代OpenCV默认后端进行视频采集。3.引入多线程将采集、推理、显示流水线化。内存占用不断增长内存泄漏代码中在循环内不断分配内存而未释放。使用htop或/proc/[PID]/status观察VmRSS是否随时间持续增长。检查代码确保所有new/malloc都有对应的delete/free使用RAII对象如std::vector,cv::Mat管理资源。9. 最佳实践与使用建议基于上述部署和测试经验总结出以下最佳实践可以帮助你更稳定、高效地在树莓派5上运行YOLOv8。从最小配置开始第一次部署时使用yolov8n模型、640x640分辨率、纯CPU模式进行测试。确保基础流程跑通后再逐步尝试Vulkan加速、更小的分辨率或更大的模型。建立性能基线编写一个标准的性能测试脚本固定输入图片和循环次数记录平均推理时间。任何代码或配置的修改都应与这个基线进行比较量化性能变化。模型管理将不同尺寸和精度的模型如yolov8n, yolov8s, yolov8-tiny放在统一的models/目录下并在程序中通过配置参数动态加载便于快速切换和对比。输入输出管道优化输入对于摄像头考虑使用libcamera或GStreamer管道可能比OpenCV的VideoCapture更高效。输出如果不是必须实时显示可以考虑将检测结果框、标签保存为JSON或二进制日志而不是直接绘制在图像上可以节省大量时间。生产环境考虑服务化如第6节所述将检测功能封装成HTTP/gRPC服务并通过systemd管理进程实现开机自启、崩溃重启。看门狗编写一个简单的看门狗脚本定期检查服务进程是否存在若挂掉则自动重启。日志与监控记录重要的运行指标FPS、内存占用、温度到文件或远程监控系统便于问题追溯和性能分析。版权与合规复查在将项目用于商业产品前务必确认YOLOv8模型及其依赖库的许可证是否与你的产品分发方式兼容。使用的OpenCV、ncnn等第三方库的许可证。训练模型所用的数据集是否允许商业使用。遵循这些实践不仅能让你顺利部署还能构建一个健壮、可维护的边缘AI应用原型。在树莓派5上成功部署YOLOv8并达到10-20 FPS证明了这款小巧的开发板完全有能力承载实时的目标检测任务。整个过程的关键在于选择合适的推理框架ncnn、进行正确的模型转换、以及针对ARM平台进行细致的性能调优。虽然会遇到编译依赖、Vulkan驱动、散热等挑战但逐一解决后获得的成果——一个低成本、低功耗、可离线运行的视觉感知节点对于许多边缘计算场景具有很高的实用价值。建议你首先按照本文的步骤完成基础环境的搭建和单张图片的测试这是验证整个技术栈是否可行的第一步。之后再根据你的具体应用需求深入探索摄像头集成、多线程优化、服务封装等进阶主题。最容易踩的坑通常是环境配置和性能瓶颈多利用社区资源和本文的排查指南大部分问题都能找到解决方案。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表