深度学习农作物病虫害识别系统设计与实现全攻略
简介一套基于深度学习的常见农作物病虫害识别系统毕业设计资料包面向计算机视觉方向学生、毕业设计选题者与智慧农业研究者。项目已获导师指导并通过压缩包内含281个文件整体约522.63MB覆盖Python源码、Vue前端页面、PDF论文、图片数据集与各类文本文件等py脚本承载模型训练与预测逻辑vue/js构成系统交互界面jpg/png为病害图像样本pdf/docx为论文与技术路线文档。内容预览中的论文目录显示该课题涵盖绪论、数据收集与处理、深度学习云训练等章节并附有查重修改版论文和支撑材料整套资源从数据清洗、模型构建到前端展示形成完整闭环便于学习者复用关键代码或参考毕业设计整体结构。已有2898人学习适合需要系统了解作物病虫害识别、搭建演示系统或完善毕设文档的用户。1. 这套深度学习农作物病虫害识别毕设把源码、教程和论文串成了一条产线准备用深度学习做农作物病虫害识别毕业设计的同学最常遇到的情况是代码从 GitHub 拉下来能跑通但数据集怎么清洗没人讲训练完怎么部署没人管等到写论文时又是一片空白。这套基于深度学习的常见农作物病虫害识别系统正好把源码、教程、论文三样东西一次性配齐。它不只是一个识别模型而是一条完整链路从 PlantVillage 图像数据预处理开始到 ResNet50 迁移学习训练再到 FastAPI 接口封装和 Web 页面上传识别最后落到毕业论文的章节框架。适合两类人一类是时间紧张、希望迅速跑通全流程的同学另一类是想要一份能扛住答辩追问、每个模块都能讲出设计依据的参考工程。接下来我会按实际复现顺序拆解这套东西包括参数怎么调、坑在哪、论文怎么填。2. 数据准备把叶片图像清洗成模型能直接吃的 Tensor2.1 数据集目录结构与类别不平衡检查这套源码默认使用的数据集是公开的 PlantVillage常见做法是保留 38 类左右的数据或者按作物进一步筛选成 1015 类来做毕业设计。无论哪种数据集在硬盘上的目录结构必须满足 torchvision 的ImageFolder格式外层是分类文件夹里面直接放图片。data/ PlantVillage/ Tomato___Early_blight/ 001.jpg 002.jpg Tomato___Late_blight/ 001.jpg Potato___Early_blight/ 001.jpg我在复现时第一件事不是写训练代码而是先统计每个类别的图片数量。很多公开数据集各类别数量差距很大比如番茄早疫病可能有 1500 张而某些小众病害只有 400 张这种不平衡如果直接喂给模型训练出来的分类器会对样本量大的类别严重偏向。# count_classes.py from pathlib import Path src Path(data/PlantVillage) for cls_dir in sorted(src.iterdir()): if not cls_dir.is_dir(): continue n len(list(cls_dir.glob(*.jpg))) len(list(cls_dir.glob(*.JPG))) print(f{cls_dir.name}: {n})这段代码的作用是遍历每个类别文件夹统计 jpg 和 JPG 后缀的图片数量并打印出来。我一般会额外加一步把所有类别数量排序如果发现数量差距超过 3 倍就在训练脚本里给CrossEntropyLoss传weight参数或者先做欠采样。数据是小项目最容易翻车的地方这一步不值得省。2.2 按 7:1.5:1.5 划分训练集、验证集、测试集划分数据集看起来简单但很多人会在这里留下隐患不固定随机种子导致每次划分结果不同或者把所有图片放在一个大文件夹里训练时再临时切分复现实验时发现前后结果对不上。源码里提供了一个split_dataset.py脚本我建议你也这样固定下来。# split_dataset.py import random import shutil from pathlib import Path random.seed(42) src Path(data/PlantVillage) out Path(data/split) for split_name in [train, val, test]: (out / split_name).mkdir(parentsTrue, exist_okTrue) for cls_dir in src.iterdir(): if not cls_dir.is_dir(): continue imgs list(cls_dir.glob(*.jpg)) list(cls_dir.glob(*.JPG)) random.shuffle(imgs) n_total len(imgs) n_train int(n_total * 0.7) n_val int(n_total * 0.15) train_imgs imgs[:n_train] val_imgs imgs[n_train:n_train n_val] test_imgs imgs[n_train n_val:] for split_name, split_imgs in [(train, train_imgs), (val, val_imgs), (test, test_imgs)]: dst out / split_name / cls_dir.name dst.mkdir(parentsTrue, exist_okTrue) for img in split_imgs: shutil.copy(img, dst / img.name)代码逻辑是按类别逐个处理每个类别内部随机打乱后取前 70% 作为训练集中间 15% 作为验证集最后 15% 作为测试集。这样做的关键好处是每个类别都能保证在三个集合里都有分布不会出现某个类别在测试集里完全消失的情况。random.seed(42)保证可复现哪怕你换一台机器重新跑划分结果也一致。如果你的数据量很大比如单个类别超过 5000 张可以改成 8:1:1训练集多一点对收敛有帮助。2.3 训练集数据增强与验证集预处理数据增强是这套系统里最影响最终准确率的一环。源码里的增强策略做得比较克制没有用 MixUp 或 CutMix 之类的高级方案而是用经典组合这很适合毕设答辩时解释。# transforms.py from torchvision import transforms train_transform transforms.Compose([ transforms.RandomResizedCrop(224, scale(0.7, 1.0)), transforms.RandomHorizontalFlip(p0.5), transforms.ColorJitter(brightness0.2, contrast0.2, saturation0.2), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) ]) val_transform transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) ])参数说明RandomResizedCrop(224, scale(0.7, 1.0))表示随机裁剪出一块区域并缩放到 224×224scale控制裁剪面积占原图的 70% 到 100%模拟叶片在画面中大小不一的真实情况ColorJitter的三个系数控制亮度、对比度、饱和度的扰动强度0.2 是相对安全的取值调太大训练时验证集准确率会一直上不去。最关键的一点是验证集和测试集不能用与训练集相同的增强方式。验证集只用Resize(256)加CenterCrop(224)保证评估时输入是稳定的。我在批改类似项目时见过不少错误做法——验证集里也加了随机翻转导致每轮验证结果忽高忽低白白浪费时间。3. 模型训练ResNet50 迁移学习与超参数调优3.1 为什么是 ResNet50而不是从零搭 CNN这套源码选择 ResNet50 做迁移学习我认为这是最符合毕业设计场景的选型。首先ResNet50 有 ImageNet 预训练权重收敛速度比从零训练快得多其次它的模型结构有残差连接答辩时讲原理比 VGG 这种简单堆叠更容易展开再者ResNet50 参数量约 2500 万在单张 1080Ti 甚至 CPU 训练时都能负担不至于出现硬性环境门槛。从零训练一个大网络在这类数据集上是很亏的。PlantVillage 里的病害特征病斑、颜色、纹理在很多浅层特征上与 ImageNet 的通用特征重叠预训练模型相当于已经学会了识别边缘、纹理、颜色渐变我们只需要换掉最后的分类头让模型重新学习叶片具体类别的高层语义。这里需要提醒的是不要在models.resnet50()里什么都不传。新版本的 torchvision 里应该显式加载预训练权重源码里写的是weightsmodels.ResNet50_Weights.IMAGENET1K_V2这比旧版pretrainedTrue更规范也会在加载时自动检查权重文件的完整性。3.2 训练脚本核心代码与参数解析源码训练脚本是用 PyTorch 写的核心结构我摘出来这套东西可以直接放到你的深度学习环境里跑。# train.py import torch import torch.nn as nn from torchvision import models, datasets from torch.utils.data import DataLoader NUM_CLASSES 10 # 根据你的类别数改 BATCH_SIZE 32 EPOCHS 30 LR 0.001 model models.resnet50(weightsmodels.ResNet50_Weights.IMAGENET1K_V2) model.fc nn.Linear(model.fc.in_features, NUM_CLASSES) if torch.cuda.is_available(): model model.cuda() train_data datasets.ImageFolder(data/split/train, transformtrain_transform) val_data datasets.ImageFolder(data/split/val, transformval_transform) train_loader DataLoader(train_data, batch_sizeBATCH_SIZE, shuffleTrue, num_workers4) val_loader DataLoader(val_data, batch_sizeBATCH_SIZE, shuffleFalse, num_workers4) criterion nn.CrossEntropyLoss() optimizer torch.optim.SGD(model.parameters(), lrLR, momentum0.9, weight_decay1e-4) scheduler torch.optim.lr_scheduler.StepLR(optimizer, step_size10, gamma0.1) best_acc 0.0 for epoch in range(EPOCHS): model.train() running_loss 0.0 for inputs, labels in train_loader: inputs, labels inputs.cuda(), labels.cuda() optimizer.zero_grad() outputs model(inputs) loss criterion(outputs, labels) loss.backward() optimizer.step() running_loss loss.item() * inputs.size(0) scheduler.step() model.eval() correct 0 total 0 with torch.no_grad(): for inputs, labels in val_loader: inputs, labels inputs.cuda(), labels.cuda() outputs model(inputs) _, preds torch.max(outputs, dim1) correct (preds labels).sum().item() total labels.size(0) val_acc correct / total if val_acc best_acc: best_acc val_acc torch.save(model.state_dict(), best_resnet50.pth) print(fepoch [{epoch1}/{EPOCHS}] loss{running_loss/len(train_data):.4f} val_acc{val_acc:.4f})训练逻辑说明每个 epoch 里先用model.train()切换到训练模式遍历训练集计算 loss 并反向传播每个 epoch 结束后切换到model.eval()在验证集上算准确率只有验证准确率创新高才保存权重。torch.no_grad()在验证阶段很重要它可以关闭梯度计算节省显存并加速推理。关键超参数我复现时调整过一轮结论是SGD 比 Adam 在 30 个 epoch 内更容易得到稳定的最高准确率Adam 前期收敛快但后期容易出现验证集抖动学习率 0.001 配合 StepLR 比固定学习率效果好在第 10 和第 20 个 epoch 后分别降为原来的 0.1 倍。weight_decay1e-4是 L2 正则化防止模型在训练后期过拟合。num_workers4在 Windows 下如果报错改成 0 即可。3.3 训练过程监控与断点续训训练不是一次就能成功的所以源码里带了断点续训的逻辑这在我实际跑的时候帮了大忙。完整版脚本里除了保存最优权重best_resnet50.pth还会保存最近的last_resnet50.pth包含模型权重和 optimizer 的状态。# checkpoint.py torch.save({ epoch: epoch, model_state_dict: model.state_dict(), optimizer_state_dict: optimizer.state_dict(), val_acc: val_acc, }, last_resnet50.pth) # 恢复训练 checkpoint torch.load(last_resnet50.pth) model.load_state_dict(checkpoint[model_state_dict]) optimizer.load_state_dict(checkpoint[optimizer_state_dict]) start_epoch checkpoint[epoch] 1恢复训练时要注意把scheduler.step()的起点也对齐否则学习率会错位。简单做法是从恢复的 epoch 重新初始化 StepLR 的last_epoch参数。如果你只想要最终结果不需要断点续训那best_resnet50.pth是唯一需要的文件。4. 识别系统落地把训练好的模型封装成 Web 服务4.1 FastAPI 推理接口设计与模型加载模型训练完成后下一步是让识别系统真正可用。源码用的 Web 框架是 FastAPI我个人也很推荐原因有两点一是异步性能好二是自带/docs接口文档演示时可以直接打开浏览器展示比 Flask 显得更专业。推理接口核心代码如下。# app.py from fastapi import FastAPI, UploadFile, File from PIL import Image import torch from torchvision import models, transforms NUM_CLASSES 10 CLASS_NAMES [Tomato Early Blight, Tomato Late Blight, Potato Early Blight, ...] app FastAPI() model models.resnet50() model.fc torch.nn.Linear(model.fc.in_features, NUM_CLASSES) model.load_state_dict(torch.load(best_resnet50.pth, map_locationcpu)) model.eval() inference_transform transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) ]) app.post(/predict) async def predict(file: UploadFile File(...)): image Image.open(file.file).convert(RGB) tensor inference_transform(image).unsqueeze(0) with torch.no_grad(): output model(tensor) prob, idx torch.softmax(output, dim1).max(dim1) return { class_id: int(idx), class_name: CLASS_NAMES[int(idx)], confidence: round(float(prob), 4) }这个接口做了三层关键处理Image.open(file.file).convert(RGB)强制把用户上传的 PNG、JPEG 甚至带透明通道的图片统一转成 RGB避免通道数不一致导致推理崩溃unsqueeze(0)把单张图变成 batch size 为 1 的张量torch.softmax(output, dim1)把 logits 转成概率分布后再取最大值。返回结果同时包含类别 ID、类别名和置信度前端可以直接渲染。这里最容易踩的坑是加载权重时报size mismatch原因是你改了model.fc的类别数而保存的权重也来自改过的模型理论上不会错但如果加载时忘了重新定义model.fc预训练模型默认分类头是 1000 类和保存的权重对不上。解决办法就是严格按照上面的顺序先改 fc 层再load_state_dict。4.2 HTML 前端上传图片并展示识别结果源码的前端没有用复杂框架就是一个 HTML 页面加一点原生 JavaScript。这个选择很聪明因为作为毕业设计演示越简单越不容易在答辩现场出问题。!-- templates/index.html -- !DOCTYPE html html langzh head meta charsetUTF-8 title农作物病虫害识别系统/title /head body h2上传叶片图片识别病虫害/h2 input typefile idfileInput acceptimage/* button onclickupload()开始识别/button p识别结果span idresult/span/p img idpreview width300 styledisplay:none; margin-top: 12px; script async function upload() { const fileInput document.getElementById(fileInput); const file fileInput.files[0]; if (!file) return; const preview document.getElementById(preview); preview.src URL.createObjectURL(file); preview.style.display block; const formData new FormData(); formData.append(file, file); const resp await fetch(/predict, { method: POST, body: formData }); const data await resp.json(); document.getElementById(result).textContent data.class_name 置信度 data.confidence; } /script /body /html这段前端逻辑简单直接用户选图后会在页面上预览点击按钮后把图片封装成FormData通过 POST 传给后端/predict接口收到 JSON 后把类别名和置信度显示在页面上。注意fetch的 url 是相对路径/predict前端和后端跑在同一台机器上时没有问题如果你把前端单独部署到 Nginx 而 FastAPI 跑在 8000 端口这里就要改成完整的接口地址。FastAPI 这边还需要把 HTML 页面挂载到应用中否则访问根路径会 404。一般会在同一个app.py里加一行静态页面挂载逻辑用FileResponse返回页面文件。4.3 毕业论文框架六个章节该填什么这套资源里的论文部分是最多同学关心的。源码附带的论文框架是标准的六章结构我的建议是不要改动大框架但每一章的内容要和自己做的实验对齐。论文章节需要写的内容从源码里可以直接拿的素材绪论研究背景、国内外研究现状公开数据集 PlantVillage 的病害分类统计相关技术介绍CNN 原理、残差结构、迁移学习ResNet50 网络结构图、训练曲线截图数据集与预处理数据来源、类别分布、增强策略split_dataset.py划分逻辑、增强参数表模型设计与实验模型结构、训练超参数、实验环境训练脚本超参数表、准确率曲线实验结果与分析不同模型对比、消融实验、错误样例ResNet50 与对比模型准确率表、Grad-CAM 图总结与展望结论、不足、未来方向实际识别错误的图片分析表格里的实验环境建议写清 PyTorch 版本、Python 版本、GPU 型号和显存大小这能增加论文的可信度。如果你想加一个对比实验最划算的做法是让 ResNet50 和 ResNet18 都在相同数据上跑 20 个 epoch然后把准确率和参数量放进表格答辩时这就是一个非常扎实的加分项。5. 避坑指南数据、训练、部署和答辩里的高频翻车点5.1 训练阶段最常见的三个问题现象一训练 loss 一直在降验证集准确率却长期不涨。这类情况在复现时最容易让初学者崩溃。原因通常是训练增强过强尤其是ColorJitter的扰动系数设置太大模型在训练集上每轮看到的颜色变化过于剧烈学不到稳定特征另一个常见原因是验证集 transform 错误地包含了随机翻转或随机裁剪。解决办法是把ColorJitter的系数从 0.2 降到 0.1确认验证集只用确定性变换如果还不行就降低初始学习率到 0.0005。现象二模型在测试集上准确率很高但换了其他来源的图片立刻失效。这是因为训练集和测试集都来自 PlantVillage背景、光照、拍摄设备高度一致模型学到的是「拍摄风格」而不是「病害特征」。解决思路有两种如果只是想提高答辩说服力可以从网上额外下载几十张真实农田叶片图做一次小规模测试想根治就得用风格迁移或对抗训练做域泛化但对毕设而言前者更务实。现象三训练时 GPU 显存不足或者训练速度奇慢。batch_size32对 ResNet50 来说在 8GB 显存下是安全值但如果你用的是 4GB 显存的显卡就把它降到 16 甚至 8。还要注意num_workers在 Windows 下设置大于 0 会触发多进程报错直接改成 0 是最省事的方式。如果是 CPU 训练把batch_size降到 830 个 epoch 可能需要跑 6 到 10 小时建议先把 epoch 数改成 5 验证流程通畅后再跑完整训练。5.2 部署与答辩环节的避坑细节现象一本地测试图片全部正常但启动 Web 服务后上传图片必报错。这个问题的出现频率极高主要原因有二一是推理脚本里的 transform 与训练脚本不一致比如训练时用了RandomResizedCrop但在推理时没有使用固定的Resize CenterCrop组合二是用户上传了 RGBA 格式的 PNG如果convert(RGB)漏写在Image.open后面模型输入通道会变成 4 通道。解决办法是严格对照val_transform写推理 transform并且把所有入口图片强制 RGB。现象二答辩展示时访问/predict接口提示 404 或 405。原因一般是路由方法写错了比如前端用 POST 请求但后端写成了app.get。还有一类情况是 FastAPI 的接口路径带了末尾斜杠前端没有对齐。解决办法是在启动后先打开http://127.0.0.1:8000/docs页面在 Swagger UI 里直接测试接口这个方法比反复刷新页面调试快得多。现象三论文里贴的训练曲线很漂亮但答辩老师问「你对比过哪些模型」时答不上来。严格来说这不算 bug但确实是很多同学丢分的点。即使你不打算完整训练对比模型也可以在测试集上把 ResNet18、ResNet50、MobileNetV2 各跑 5 个 epoch 做一个快速对比表说明参数量、推理时间和准确率的关系这比只贴一张训练曲线有说服力得多。源码里其实也包含了一部分实验记录模板填数字进去就能用。6. 进阶技巧用 Grad-CAM 可视化让模型识别结果更可信6.1 Grad-CAM 代码实现模型训练完、Web 端能跑通之后很多同学觉得系统就算完成了。但实际上还有一个成本极低、答辩加分明显的步骤用 Grad-CAM 可视化模型到底在看叶片的哪个区域。这一步对评阅老师来说非常直观尤其是当模型判断某张叶片患有早疫病时你可以展示模型关注的是叶片上的病斑区域而不是背景土壤。# grad_cam.py import torch from torchvision.models import resnet50 model resnet50() model.fc torch.nn.Linear(model.fc.in_features, NUM_CLASSES) model.load_state_dict(torch.load(best_resnet50.pth, map_locationcpu)) model.eval() # 找到 ResNet50 最后一个卷积层 last_conv_layer model.layer4[2].conv3 def grad_cam(input_tensor, target_class): input_tensor.requires_grad_(True) output model(input_tensor) score output[0, target_class] model.zero_grad() score.backward() conv_output last_conv_layer.output grads last_conv_layer.weight.grad # 对梯度做全局平均池化得到每个通道的权重 weights grads.mean(dim(2, 3), keepdimTrue) cam (weights * conv_output).sum(dim1, keepdimTrue) cam torch.relu(cam) return cam这段代码的核心逻辑是对目标类别的输出分数反向传播提取最后一个卷积层的梯度和输出特征图梯度全局平均池化得到每个通道的重要度权重再与特征图加权求和最后用 ReLU 去掉负值区域得到的就是模型重点关注的区域热力图。把热力图叠到原图上就能直观看到模型识别病害时的决策依据。6.2 在论文和答辩中怎么展示Grad-CAM 图放在论文实验分析部分通常配一段这样的话从热力图中可以看出模型对早疫病的判断主要聚焦于叶片边缘的坏死区域而对健康叶片几乎无响应说明模型学到了具有判别性的病理特征而非背景干扰。答辩时如果老师追问「你的模型会不会只学了背景信息」直接展示 Grad-CAM 就是最扎实的回应。从那以后我每次跑完新模型都会强制走一遍 Grad-CAM 可视化哪怕准确率很高也要确认模型不是因为数据集本身的拍摄风格巧合做出了正确判断。这个习惯帮我避开了至少两次测试集过拟合导致的误判。把这套系统从头到尾复现下来你手里其实已经握着一份能讲清楚数据、模型、部署、论文全流程的完整毕设素材希望这套调试顺序和避坑记录能帮到你少走几趟弯路。本文还有配套的精品资源点击获取

相关新闻

函数柯里化深入解析:从本质到实战,解决重复传参问题

函数柯里化深入解析:从本质到实战,解决重复传参问题

很少有一个概念像函数柯里化这样,听过的人多,真正用起来的人少。你在面试题里看过add(1)(2)(3),可能在某个工具函数里瞟见过curry(),但如果追问一句“函数柯里化到底解决了什么问题”,不少人会愣住。我最早意识到柯里化…

2026/10/11 21:06:56 阅读更多 →
sklearn高级用法:从Pipeline到模型持久化的完整工程化指南

sklearn高级用法:从Pipeline到模型持久化的完整工程化指南

1. 为什么很多人的sklearn代码还停留在“调包侠”阶段聊这个话题之前,我想先说说我自己的观察。这两年带过不少新人,也看过大量线上线下的项目代码,我发现一个很有意思的现象:很多人学sklearn,花了两三天就把LinearReg…

2026/10/11 21:06:56 阅读更多 →
Oracle 12c SQL查询实战:从v$session到AWR追溯历史执行记录

Oracle 12c SQL查询实战:从v$session到AWR追溯历史执行记录

刚接手一个Oracle 12c库,最常被问到的问题就是:“你帮我看看现在数据库里在跑什么SQL?”或者“这个SQL昨天跑了多少次?”说实话,这类需求我处理过太多回了,但每次在技术群里看到答案还是有人只会贴一个v$se…

2026/10/11 21:06:56 阅读更多 →

最新新闻

单细胞测序+机器学习:肾癌微环境分析完整流程指南

单细胞测序+机器学习:肾癌微环境分析完整流程指南

1. 单细胞机器学习:肾癌研究的新视角先聊一个背景。透明细胞肾癌(ccRCC)是肾癌里最常见也最狡猾的类型,长期以来肿瘤免疫治疗的有效率一直徘徊在三成左右。为什么同样的分期、同样的治疗方案,有的患者能稳定多年&#…

2026/10/11 21:58:44 阅读更多 →
Android Studio计算器开发实战:从GridLayout布局到表达式求值

Android Studio计算器开发实战:从GridLayout布局到表达式求值

简介:PDF格式的技术说明文档,面向Android开发入门者,系统讲解使用Android Studio实现简单计算器功能的完整过程。内容基于具体案例展开,从新建项目、设计界面到编写逻辑逐步推进:利用GridLayout网格布局搭建6行4列的计…

2026/10/11 21:58:44 阅读更多 →
RIME霜冰算法优化LSTM超参数:多变量时序预测调参实战

RIME霜冰算法优化LSTM超参数:多变量时序预测调参实战

做过多变量时序预测的朋友,应该都有过这种经历:数据清洗干净了、LSTM也搭起来了,然后卡在“隐层单元设多少、学习率填多少、batch 拿多大”这类问题上没完没了。我不止一次手动试参数试到怀疑人生。后来我把霜冰算法(RIME&#xf…

2026/10/11 21:58:44 阅读更多 →
MATLAB实现稳定FDTD仿真的核心约束与工程优化

MATLAB实现稳定FDTD仿真的核心约束与工程优化

简介:本资源是一套基于MATLAB实现的FDTD(时域有限差分)电磁场仿真完整代码集,面向电磁仿真初学者、光电/微波方向本科生及工程实践者,用于理解并动手复现一维至三维FDTD核心算法原理与动态演化过程。压缩包共10个文件&…

2026/10/11 21:58:44 阅读更多 →
YOLO交通违章检测与流量统计实战:轻量模型端到端部署指南

YOLO交通违章检测与流量统计实战:轻量模型端到端部署指南

简介:本资源是一套基于YOLO算法的交通流量统计与违章行为检测毕业设计实战项目,面向人工智能、计算机视觉方向的本科生及课程设计学习者,聚焦智慧交通场景下的目标检测落地应用。压缩包共119个文件,含46个Python源码(含…

2026/10/11 21:58:44 阅读更多 →
ResNet50迁移学习实战:308张实拍图实现水瓶水位图像分类

ResNet50迁移学习实战:308张实拍图实现水瓶水位图像分类

简介:基于水位的机器学习水瓶图像分类项目提供一套完整可复现的卷积神经网络训练方案,面向希望掌握图像分类实战流程的机器学习学习者、计算机视觉研究人员,以及需要构建水位识别功能的数据科学从业者。压缩包共488个文件,包含429…

2026/10/11 21:57:44 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →