YOLOv8大豆叶病检测实战:从环境配置到训练排错全指南
简介这份资源围绕Yolov8在大豆叶病目标检测中的应用展开面向希望系统学习Yolo整体框架构建的深度学习初学者与农业智能化方向开发者。内容从数据采集与预处理入手涵盖图像裁剪、缩放、归一化等标准化流程并逐步深入到网络架构设计、卷积与池化层级特征提取、模型深度与宽度权衡等关键环节最终借助PyTorch完成训练、反向传播调参与损失、准确率、召回率等指标监控形成一套可复用的目标检测实践路径。资源包共7个文件以6个Python脚本和1份Markdown说明为主脚本分别承担模型定义、数据集加载、损失计算、训练与推理等职责说明文档则梳理整体流程压缩包仅9KB轻量易读。目前已有47人学习适合作为理解Yolo框架构建与深度学习模型训练优化的入门案例。1. 大豆叶病检测为什么成了 YOLOv8 入门的“黄金练手场”大豆叶片上的褐斑、霜霉、灰斑这些病害早期靠肉眼分辨既慢又容易看走眼而一亩地动辄几千株人工巡检根本不现实。用 YOLOv8 做叶片病斑的目标检测恰好卡在一个很舒服的位置数据集规模不大、类别边界清晰、单卡就能训完但整个流程又完整覆盖了从数据标注、环境配置、模型训练到推理部署的全链路。换句话说你拿它练手练的不是“跑通一个 demo”而是 YOLO 整体框架构建的肌肉记忆。我带过几个刚入门的朋友做这个方向最大的感受是大豆叶病这个场景的容错率高但暴露问题的能力一点不弱。类别不均衡、小目标病斑、叶片重叠遮挡、光照变化这些在工业级目标检测里会反复出现的坑它一个不少。所以这篇笔记不打算停留在“调个库跑一下”的层面而是顺着大豆叶病这条线把 YOLOv8 从环境到训练到排错的完整框架拆开讲清楚让你做完这个项目之后换任何数据集都能自己搭起来。2. 从大豆叶病数据集到 YOLOv8 训练环境先把地基打对2.1 大豆叶病数据集的类别设计与标注规范动手之前先想清楚一件事你要检测的到底是“叶片”还是“病斑”。这两种标注策略直接决定后面模型学到什么。如果你的目标是判断这株大豆得了什么病常见做法是标注整片叶子的病害类别比如褐斑病、霜霉病、灰斑病各算一类框住整片叶子。但如果你想定位病斑在叶片上的具体位置和面积占比那就得框住每一个病斑区域这时候小目标问题会非常突出。我一般建议入门阶段先做整叶分类式的检测也就是一张图里框出所有叶片每片叶子标上它所属的病害类别。这样标注成本低类别数控制在 3 到 5 类模型收敛快也方便你观察 YOLOv8 的基本行为。等你把整条链路跑顺了再升级到病斑级标注。标注工具用 LabelImg 或 Roboflow 都行导出格式选 YOLO 格式也就是每张图对应一个.txt文件每行是类别id 中心x 中心y 宽 高坐标全部归一化到 0 到 1 之间。这里有个血泪经验类别 id 必须从 0 开始连续编号中间断了或者从 1 开始训练时不会报错但类别名会对不上推理结果全是错的。标注完记得写一个data.yaml# data.yaml path: ./datasets/soybean_leaf # 数据集根目录 train: images/train # 训练集图片相对路径 val: images/val # 验证集图片相对路径 nc: 4 # 类别数量必须和标注文件里的最大id1一致 names: # 类别名称顺序必须和标注id严格对应 0: healthy 1: brown_spot 2: downy_mildew 3: gray_spotnc这个参数是最容易翻车的地方。很多人标注时用了 0 到 3 四个类别但data.yaml里nc写成 5训练能跑但多出来的类别永远学不到东西验证时 mAP 会莫名其妙偏低。另一个坑是names的顺序它必须和标注文件里的数字 id 一一对应顺序错了模型学到的就是错位的类别。2.2 YOLOv8 环境配置避开 CUDA 和 PyTorch 的版本玄学环境配置这块网上教程多如牛毛但真正能一次跑通的不多。核心矛盾就一个PyTorch 版本、CUDA 版本、显卡驱动版本三者必须匹配。我一般用 conda 建一个干净环境然后按 Ultralytics 官方推荐的方式装# 创建并激活环境python版本建议3.9或3.10 conda create -n yolo_soy python3.10 -y conda activate yolo_soy # 安装PyTorch这里以CUDA 11.8为例具体版本看你的显卡驱动 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 # 安装ultralytics它会自动处理大部分依赖 pip install ultralytics # 验证安装是否成功 yolo checksyolo checks这个命令会打印出当前环境的关键信息包括 PyTorch 版本、CUDA 是否可用、显卡型号。如果 CUDA 显示不可用先别急着重装用nvidia-smi看一下驱动版本再去 PyTorch 官网查对应关系。我见过太多人在这卡一整天最后发现只是驱动太老。提示如果你用的是 GTX 1660 Ti 这类没有 Tensor Core 的卡训练速度会明显慢于 RTX 系列但完全能跑。把batch调小到 8 或 16imgsz保持 640一张卡训几千张图大概几小时能出第一版结果。环境装好之后用一行命令验证 YOLOv8 能不能正常推理yolo predict modelyolov8n.pt sourcehttps://ultralytics.com/images/bus.jpg这条命令会自动下载最小的yolov8n.pt权重对一张示例图做推理结果存在runs/detect/predict/下面。如果这一步能出图说明环境没问题可以进入训练环节。3. 用 YOLOv8 训练大豆叶病模型参数怎么设、曲线怎么看3.1 训练命令与关键参数逐项拆解训练本身一行命令就能启动但参数设不对结果天差地别。下面是我在大豆叶病数据集上常用的一套配置yolo detect train \ data./datasets/soybean_leaf/data.yaml \ modelyolov8s.pt \ epochs150 \ imgsz640 \ batch16 \ lr00.01 \ lrf0.01 \ patience30 \ device0 \ projectsoy_runs \ nameexp1model选yolov8s.pt而不是yolov8n.pt是因为大豆叶病里病斑属于中小目标n 系列的感受野和特征提取能力偏弱s 系列在速度和精度之间平衡得更好。如果你显卡显存紧张降到yolov8n.pt也能跑但 mAP 通常会掉几个点。imgsz640是 YOLOv8 的默认输入尺寸也是速度和精度的甜点区。如果你的病斑特别小可以尝试imgsz1024但显存占用会翻倍训练时间也明显拉长。batch16是 8G 显存下的安全值显存够可以往上加但要注意学习率也要相应调整。lr00.01是初始学习率lrf0.01是最终学习率因子实际最终学习率是lr0 * lrf。YOLOv8 默认用余弦退火策略这两个值配合起来控制学习率的下降曲线。如果你发现训练前期 loss 震荡厉害把lr0降到 0.005 试试。patience30是早停耐心值意思是如果验证集指标连续 30 个 epoch 没有提升就自动停止训练。这个参数能帮你省时间但也可能让你错过后期的小幅提升。我一般设 30 到 50 之间。3.2 损失函数曲线与 mAP 曲线从图里读出模型状态训练启动后runs/detect/soy_runs/exp1/目录下会生成results.csv和一系列曲线图。很多人只看最后的 mAP其实训练过程中的曲线信息量更大。results.csv里记录了每个 epoch 的train/box_loss、train/cls_loss、train/dfl_loss以及验证集的metrics/mAP50、metrics/mAP50-95。YOLOv8 的损失函数由三部分组成边界框回归损失、分类损失和 DFL 分布焦点损失。正常情况下三个 loss 都应该平滑下降如果某个 loss 突然飙升大概率是学习率太大或者数据里有脏标注。用下面这段代码可以把损失曲线和 mAP 曲线画出来import pandas as pd import matplotlib.pyplot as plt # 读取训练日志 df pd.read_csv(runs/detect/soy_runs/exp1/results.csv) df.columns df.columns.str.strip() # 列名可能有空格先清理 fig, axes plt.subplots(1, 2, figsize(14, 5)) # 损失曲线 axes[0].plot(df[epoch], df[train/box_loss], labelbox_loss) axes[0].plot(df[epoch], df[train/cls_loss], labelcls_loss) axes[0].plot(df[epoch], df[train/dfl_loss], labeldfl_loss) axes[0].set_xlabel(epoch) axes[0].set_ylabel(loss) axes[0].legend() axes[0].set_title(Training Loss) # mAP曲线 axes[1].plot(df[epoch], df[metrics/mAP50], labelmAP50) axes[1].plot(df[epoch], df[metrics/mAP50-95], labelmAP50-95) axes[1].set_xlabel(epoch) axes[1].set_ylabel(mAP) axes[1].legend() axes[1].set_title(Validation mAP) plt.tight_layout() plt.savefig(training_curves.png, dpi150)这段代码的逻辑很直接把results.csv读进来分别画损失和 mAP。重点看两个地方。第一box_loss和cls_loss是否同步下降如果cls_loss降得很慢说明类别区分度不够可能是类别本身太相似或者标注里把不同病害标混了。第二mAP50曲线是否在某个 epoch 后趋于平缓如果还在缓慢上升说明可以继续训如果开始下降就是过拟合了需要加数据增强或者提前停。注意results.csv的列名在不同 ultralytics 版本里可能有细微差异如果报 KeyError先打印df.columns看看实际列名再改。4. 大豆叶病检测的避坑与排查那些让我返工三次的问题4.1 类别不均衡导致某些病害永远检不出来现象训练完发现灰斑病的 mAP 只有 0.2其他类别都在 0.8 以上。原因灰斑病样本数量只有其他类别的十分之一模型在训练时被多数类主导少数类的梯度信号被淹没。解决在data.yaml同级目录建一个train_balanced.txt手动复制少数类样本路径多次或者用 YOLOv8 自带的copy_paste增强参数在训练命令里加copy_paste0.3。更直接的办法是离线做数据增强把少数类图片旋转、调色、加噪声后扩充到和其他类相当的数量。4.2 验证集 mAP 很高但实际推理一塌糊涂现象验证集 mAP50 到了 0.9但拿新拍的田间照片去推理框全是乱的。原因训练集和验证集来自同一批拍摄条件模型学到了背景特征而不是病斑特征。比如所有训练图都是阴天拍的模型可能把“暗色调”当成了病斑的线索。解决划分数据集时按拍摄日期或地块划分确保验证集来自不同条件。另外在训练时开启hsv_h0.015、hsv_s0.7、hsv_v0.4这些颜色增强参数强迫模型关注形状和纹理而不是颜色。4.3 小病斑被漏检imgsz 和 anchor 的取舍现象叶片上直径只有十几像素的早期病斑模型完全检不出来。原因YOLOv8 默认的 640 输入下经过多次下采样后小目标的特征在深层特征图上几乎消失。解决把imgsz提到 1024 或 1280让病斑在输入图上占据更多像素。另一个办法是改用yolov8m或yolov8l更大的模型有更强的多尺度特征融合能力。如果显存不够可以试试切片推理把大图切成小块分别检测再合并。4.4 训练 loss 正常但 mAP 始终为 0现象loss 在降但验证集 mAP 一直是 0。原因最常见的是data.yaml里的val路径写错验证集根本没加载到图片其次是标注文件里的类别 id 超出了nc的范围。解决训练启动时看日志里打印的val: Scanning...后面跟的图片数量如果是 0 就是路径问题。再检查标注文件里有没有 id 大于等于nc的行有的话直接删掉或修正。4.5 推理时框重叠严重NMS 阈值没调对现象同一片病斑被框了好几次框之间大量重叠。原因YOLOv8 默认的 NMS IoU 阈值是 0.7对于密集小目标来说太宽松了。解决推理时加iou0.5参数或者在predict里设conf0.4提高置信度门槛把低质量的重复框过滤掉。如果病斑本身就很密集可以试试agnostic_nmsTrue让不同类别之间也做 NMS。5. 从训练到部署大豆叶病模型的验证与进阶技巧模型训完之后别急着收工。我一般会做两件事来验证它是不是真的能用。第一件是拿一批完全没参与训练的田间照片手动标好真实框跑一遍yolo detect val看 mAP 和训练日志里的验证集指标差多少。如果差距超过 10 个点说明模型过拟合了得回去加数据增强或者减模型容量。第二件是可视化热力图看看模型到底在关注叶片的哪个区域。YOLOv8 本身不带热力图功能但可以用 Grad-CAM 的思路把 backbone 最后一层的特征图拿出来做加权import torch import cv2 import numpy as np from ultralytics import YOLO model YOLO(runs/detect/soy_runs/exp1/weights/best.pt) img cv2.imread(test_leaf.jpg) img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 获取模型对这张图的原始输出 results model(img_rgb, imgsz640) # 取第一个检测框的类别和位置 if len(results[0].boxes) 0: box results[0].boxes[0] cls_id int(box.cls[0]) conf float(box.conf[0]) xyxy box.xyxy[0].cpu().numpy().astype(int) print(f类别: {model.names[cls_id]}, 置信度: {conf:.2f}, 位置: {xyxy}) # 在原图上画框 cv2.rectangle(img, (xyxy[0], xyxy[1]), (xyxy[2], xyxy[3]), (0, 255, 0), 2) cv2.putText(img, f{model.names[cls_id]} {conf:.2f}, (xyxy[0], xyxy[1]-10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2) cv2.imwrite(result_leaf.jpg, img)这段代码做的是最基础的推理可视化读图、推理、取第一个框、画框、存图。关键参数是imgsz640必须和训练时保持一致否则框的位置会偏移。conf阈值默认是 0.25如果发现漏检多就降到 0.15误检多就提到 0.5。进阶一点的做法是导出 ONNX 模型用 ONNXRuntime 推理速度能比 PyTorch 原生推理快 20% 到 30%。导出命令很简单yolo export modelruns/detect/soy_runs/exp1/weights/best.pt formatonnx imgsz640导出的best.onnx可以直接丢给 OpenCV 的dnn模块或者 ONNXRuntime 加载。如果你后面想部署到 RK3588 这类边缘设备ONNX 是必经之路因为 RKNN 工具链需要先转 ONNX 再转 RKNN。不过那是另一个话题了先把 PyTorch 这条链路走通再说。最后说一个我自己的习惯每次训完模型我都会把best.pt、data.yaml、results.csv和一张推理效果图打包存到一个以日期命名的文件夹里。这个习惯救过我好几次因为过两周你回头想复现某个结果时根本记不清当时用的是哪个版本的数据和参数。模型训练这件事后悔药就是完整的实验记录。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

基于知识图谱的Python电影推荐系统毕业设计:从图谱构建到推荐融合

基于知识图谱的Python电影推荐系统毕业设计:从图谱构建到推荐融合

简介:这是一套面向计算机相关专业毕业设计场景的Python电影推荐系统源码,采用知识图谱架构,融合协同过滤算法,可有效缓解传统推荐系统的冷启动问题。项目难度中等,适合作为课程作业、学期末综合实践或自学训练素材&…

2026/10/12 0:17:07 阅读更多 →
柑橘病害检测数据集:2814张VOC+YOLO双格式

柑橘病害检测数据集:2814张VOC+YOLO双格式

简介:本资源是面向农业AI与计算机视觉初学者、科研人员及模型训练实践者的橘类果实病害检测专用数据集,聚焦黑斑病、溃疡病、健康果与绿霉病四类典型病症识别任务,适用于目标检测算法(如YOLOv5/v8、Faster R-CNN)的训练…

2026/10/12 0:17:07 阅读更多 →
LangChain 单元测试怎么写:Fake LLM、Mock 与录制回放

LangChain 单元测试怎么写:Fake LLM、Mock 与录制回放

个人主页&#xff1a;> for_ever_love__ <&#xff08;欢迎各位大佬莅临&#x1f60a;&#xff09; 其他栏目: > 大模型开发从0到1 < 其他栏目: > iOS项目总结大全 < 其他栏目: > 我想学python了 < 其他栏目: > iOS UI < 文章目录LangChain 单元…

2026/10/12 0:16:07 阅读更多 →

最新新闻

Linux下查看线程的实用方法:从ps、top到pidstat全掌握

Linux下查看线程的实用方法:从ps、top到pidstat全掌握

排查 Linux 线程问题的时候&#xff0c;最怕的不是不会用命令&#xff0c;而是用错了命令看错了对象。很多刚接触 Linux 的同学&#xff0c;一上来就问“怎么查看线程”&#xff0c;但真正到了现场&#xff0c;往往连线程和进程的关系都还没理清楚——拿ps一顿输出&#xff0c;…

2026/10/12 2:42:33 阅读更多 →
LocalAI本地AI推理实战:部署LLM、语音与文生图全攻略

LocalAI本地AI推理实战:部署LLM、语音与文生图全攻略

之前做本地 AI 推理时&#xff0c;最头疼的问题就是“换一个模型就要换一套环境”&#xff0c;有时候还要为 GPU、CUDA、Python 版本折腾一整天。后来接触到 LocalAI&#xff0c;发现它把这些碎片化的痛点统一收敛到了一个服务里&#xff1a;不管是跑大语言模型、语音识别、文字…

2026/10/12 2:42:33 阅读更多 →
本地跑AI模型新标准:LocalAI 实战部署与OpenAI兼容API接入

本地跑AI模型新标准:LocalAI 实战部署与OpenAI兼容API接入

这次我们来看一个把“本地跑 AI 模型”这件事做成统一标准的开源项目&#xff1a;LocalAI。简单说&#xff0c;LocalAI 是一个免费、开源的本地推理服务框架&#xff0c;目标是让你在普通电脑甚至树莓派这类低功耗硬件上&#xff0c;直接运行大语言模型、语音识别、语音合成、图…

2026/10/12 2:42:33 阅读更多 →
C# 斑马打印机打印 Demo 完整版:RAW 直发与驱动打印实战

C# 斑马打印机打印 Demo 完整版:RAW 直发与驱动打印实战

简介&#xff1a;这份资源是面向C#开发者的Zebra打印机集成示例项目&#xff0c;适合需要在物流、零售、医疗等场景中实现标签、收据及条形码打印的初中级开发者参考。压缩包共88个文件&#xff0c;约348KB&#xff0c;以cs源码、sample示例、resx资源、config配置、csproj工程…

2026/10/12 2:42:32 阅读更多 →
LocalAI:开源模型本地部署神器,OpenAI兼容API一键搞定

LocalAI:开源模型本地部署神器,OpenAI兼容API一键搞定

如果你手头有一台空闲的 Linux 服务器&#xff0c;或者只是一台普通的 MacBook&#xff0c;甚至一台没有独立显卡的 Windows 办公机&#xff0c;你想不想把 Qwen、Llama、Whisper、Stable Diffusion 这些开源模型统一跑起来&#xff1f;很多人第一反应是&#xff1a;本地跑模型…

2026/10/12 2:42:32 阅读更多 →
Linux ln命令硬链接与软连接的区别及实际应用场景详解

Linux ln命令硬链接与软连接的区别及实际应用场景详解

这次我们看一个Linux系统里高频出现、面试也爱问的知识点&#xff1a;ln命令下的软连接&#xff08;符号链接&#xff09;和硬链接到底有什么区别、分别怎么用。先给结论&#xff1a;ln默认创建的是硬链接&#xff0c;ln -s创建的是软连接。两者看起来都能“快捷访问同一个文件…

2026/10/12 2:41:32 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天&#xff0c;画面可以做到绝对的锐利、平滑与无瑕。然而&#xff0c;当一张秋日手账插画或拍立得照片过于“平整无瑕”时&#xff0c;往往会散发出一种冰冷生硬的“数码塑料感&#xff08;Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中&#xff0c;横排&#xff08;Horizontal Layout&#xff09;早已经成为了绝对的主流。然而&#xff0c;当我们翻开泛黄的线装古籍、宋版木刻诗集&#xff0c;或是欣赏一张茶道雅集的手写便签时&#xff0c;那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点&#xff0c;很多人心里都会悄悄亮起一盏警示灯。 在心理学上&#xff0c;这种现象有一个专门的称谓——“周日夜晚焦虑症&#xff08;Sunday Scaries&#xff09;”。明天又是周一&#xff0c;闹钟又要重新在七点响彻卧房&#xff1b;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →