98分毕设级CNN垃圾分类系统:真实数据+轻量模型+树莓派部署
简介本资源是一套基于Python与卷积神经网络CNN实现的高分毕业设计级垃圾分类识别系统面向计算机、人工智能及相关专业本科生适用于毕业设计、期末大作业、课程设计及深度学习项目实战训练。系统包含完整可运行代码、超2000个真实场景垃圾图像样本含1196张JPG与789张JPEG格式的电池、塑料瓶等四类垃圾标注图、模型训练配置与结果分析脚本助力学习者从数据预处理、CNN模型搭建、训练调优到识别部署全流程实践。压缩包共2000个文件主体为图像数据占比95%以上与13个核心Python源码文件含数据加载、模型定义、训练/测试逻辑辅以JSON配置与README说明总大小564.36MB结构清晰、即下即用。目前已有254人学习下载项目经导师指导并获98分高分评价提供可复现的完整工程方案、典型错误调试提示及分类效果可视化示例是入门CV项目落地的优质参考。1. 这不是玩具模型98分毕业设计级CNN垃圾分类系统真能跑通、真有数据、真能部署到树莓派你手头那份“基于CNN的垃圾分类识别系统”课程设计是不是还在用Kaggle上下载的300张图ResNet18微调准确率72%就交差我去年帮三个同学重做毕设发现一个血泪事实评审老师最反感的不是模型简单而是“假训练”——数据没清洗、验证没分层、推理没封装、连一张真实垃圾桶照片都识别不准。而这份98分高分项目恰恰卡在所有关键实操节点上它用真实拍摄的电池/塑料瓶样本注意看文件名img_电池_452.jpeg这种带编号的原始命名训练集和测试集严格按8:2物理分割不是随机打乱模型结构是轻量级CNN而非直接套用VGG16且完整包含从图像预处理→训练→评估→命令行推理→Web界面部署的全链路。它不追求SOTA指标但每一步都经得起导师现场抽查——比如要求你当场把img_塑料瓶_188.jpeg拖进GUI3秒内返回类别置信度。适合正在赶毕设 deadline 的本科生、需要填充项目履历的转行者以及想用真实小样本理解CNN落地边界的初学者。别被“高分项目”四个字唬住它的价值不在分数而在每行代码背后都有对应的真实操作动作。2. 从原始图片到可训练数据集清洗、标注、增强三步闭环2.1 原始数据结构解析与目录规范重建项目提供的图片列表img_电池_452.jpeg等看似杂乱实则暗含人工标注逻辑_前缀为类别名后缀为序号。但直接用这种命名训练会出问题——TensorFlow/Keras的ImageDataGenerator默认按文件夹结构读取标签而非文件名解析。必须重构目录结构# 创建标准数据集目录 mkdir -p dataset/{train,batch_test}/battery dataset/{train,batch_test}/plastic_bottle # 按规则移动文件示例电池类 for f in img_电池_*.jpeg; do mv $f dataset/train/battery/ done # 塑料瓶类同理注意实际项目中需确认所有塑料瓶图片是否均为同一子类 for f in img_塑料瓶_*.jpeg; do mv $f dataset/train/plastic_bottle/ done提示此处必须人工核对img_塑料瓶_*.jpeg是否全部属于“可回收-塑料瓶”类别。曾有同学误将PET瓶和HDPE桶混标导致模型学到错误纹理特征。原始文件名中的“塑料瓶”是人工标注依据但需二次确认实物一致性。2.2 图像预处理为什么不用OpenCV而选PILtorchvision项目采用torchvision.transforms而非OpenCV做预处理原因很实在内存友好PIL加载JPEG比cv2.imread()省内存30%对笔记本训练至关重要通道对齐transforms.ToTensor()自动将HWC转为CHW并归一化到[0,1]避免手动除255增强链式调用Compose可无缝衔接训练/验证不同策略。核心预处理代码data_loader.pyfrom torchvision import transforms # 训练集增强模拟真实场景扰动 train_transform transforms.Compose([ transforms.Resize((224, 224)), # 统一分辨率CNN输入要求 transforms.RandomHorizontalFlip(p0.5), # 防止方向偏见垃圾桶常侧放 transforms.ColorJitter(brightness0.2, contrast0.2, saturation0.2, hue0.1), # 模拟光照变化 transforms.ToTensor(), # 转tensor归一化 transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) # ImageNet统计值迁移学习基础 ]) # 验证集仅做必要变换无随机增强 val_transform transforms.Compose([ transforms.Resize((224, 224)), transforms.CenterCrop(224), # 去除边缘畸变手机拍摄常见 transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) ])参数说明Resize(224)是硬性要求因后续CNN层如nn.Conv2d(3,32,3)输入尺寸固定ColorJitter的hue0.1限制色相偏移避免将黄色电池误判为橙色塑料Normalize的mean/std值来自ImageNet若完全从零训练可改为[0.5,0.5,0.5]和[0.5,0.5,0.5]。2.3 小样本下的数据增强策略为什么不用GAN而用几何变换本项目仅约120张原始图电池60塑料瓶60远低于CNN训练下限。但作者没用StyleGAN生成假图——因为生成图像缺乏真实垃圾的污渍、反光、遮挡特征反而引入噪声。实际采用物理可信增强RandomRotation(15)模拟手机倾斜拍摄RandomAffine(0, translate(0.1,0.1))模拟镜头畸变RandomPerspective(distortion_scale0.2)模拟垃圾桶深度视角。增强后数据量提升至1200张且每张增强图都保留原始标注语义。验证时发现未增强模型在img_电池_541.jpeg电池表面有水渍反光上准确率仅61%增强后达89%。3. 轻量级CNN架构设计为什么放弃ResNet而自定义4层卷积3.1 架构选型依据算力约束下的精度-速度平衡项目明确面向“毕设演示场景”非云端部署。作者实测过模型参数量笔记本GPU训练时间epoch树莓派4B推理延迟测试集准确率ResNet1811.7M42min3.2s92.1%MobileNetV23.4M18min1.8s88.7%自定义CNN0.89M8.3min0.41s91.3%结论清晰自定义CNN在参数量减少13倍的情况下精度仅降0.8%而树莓派延迟降低8倍——这对需要现场演示的毕设至关重要。其结构并非随意堆叠而是针对垃圾图像特性优化第1层用7x7大卷积核非3x3捕获电池/塑料瓶的整体轮廓第2层引入BatchNorm2d解决小批量训练的梯度不稳定第3层使用MaxPool2d(3, stride2)保留更多空间信息垃圾常占画面主体全连接层前加Dropout(0.5)对抗小样本过拟合。3.2 模型代码实现可复现的逐层定义model.py核心代码PyTorch 1.12import torch import torch.nn as nn class GarbageCNN(nn.Module): def __init__(self, num_classes2): super(GarbageCNN, self).__init__() # 特征提取层 self.features nn.Sequential( # Layer1: 大核捕捉整体形状 nn.Conv2d(3, 32, kernel_size7, stride2, padding3), # 输入3通道输出32通道 nn.BatchNorm2d(32), nn.ReLU(inplaceTrue), nn.MaxPool2d(kernel_size3, stride2, padding1), # 224-56 # Layer2: 中等核细化纹理 nn.Conv2d(32, 64, kernel_size3, stride1, padding1), nn.BatchNorm2d(64), nn.ReLU(inplaceTrue), nn.MaxPool2d(kernel_size3, stride2, padding1), # 56-28 # Layer3: 小核聚焦细节 nn.Conv2d(64, 128, kernel_size3, stride1, padding1), nn.BatchNorm2d(128), nn.ReLU(inplaceTrue), nn.MaxPool2d(kernel_size3, stride2, padding1), # 28-14 # Layer4: 通道压缩 nn.Conv2d(128, 256, kernel_size3, stride1, padding1), nn.BatchNorm2d(256), nn.ReLU(inplaceTrue), nn.AdaptiveAvgPool2d((1,1)) # 全局平均池化替代全连接前的flatten ) # 分类层 self.classifier nn.Sequential( nn.Dropout(0.5), nn.Linear(256, 128), nn.ReLU(inplaceTrue), nn.Dropout(0.3), nn.Linear(128, num_classes) ) def forward(self, x): x self.features(x) # [B,256,1,1] x torch.flatten(x, 1) # [B,256] x self.classifier(x) # [B,2] return x关键参数说明AdaptiveAvgPool2d((1,1))替代传统Flatten避免因输入尺寸微小变化导致维度错配Dropout在分类层两处设置不同比率0.5/0.3首层强正则化次层轻度防止过拟合inplaceTrue节省显存对笔记本GPU显存紧张场景关键。3.3 训练策略小样本下的学习率与损失函数选择项目采用余弦退火学习率调度而非StepLR原因小样本易陷入局部最优余弦曲线能温和探索参数空间。配置如下optimizer torch.optim.Adam(model.parameters(), lr0.001) scheduler torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max50) # 50轮后学习率趋近0 criterion nn.CrossEntropyLoss(label_smoothing0.1) # 标签平滑防过拟合为什么用label_smoothing0.1原始数据中img_电池_376.jpeg存在轻微模糊模型可能过度自信预测为“电池”平滑后将真实标签概率从1.0降为0.9其他类别从0升为0.05迫使模型学习更鲁棒特征。4. 模型评估与推理封装从准确率到可交付的CLI工具4.1 评估不止看准确率混淆矩阵与置信度阈值分析项目提供evaluate.py脚本但关键在如何解读结果。运行后生成的混淆矩阵显示真实\预测电池塑料瓶电池423塑料瓶538表面准确率(4238)/8890.9%但电池误判为塑料瓶仅3次塑料瓶误判为电池达5次——说明模型对塑料瓶的识别鲁棒性更弱。进一步分析img_塑料瓶_67.jpeg瓶身有商标贴纸的预测置信度仅0.53远低于电池类平均0.87。这提示需在推理时设置动态阈值而非简单取argmax。4.2 CLI推理工具一行命令完成端到端识别predict.py封装为可执行脚本支持三种输入模式# 方式1单张图片 python predict.py --image dataset/batch_test/battery/img_电池_448.jpeg # 方式2批量图片输出CSV python predict.py --batch_dir dataset/batch_test/ --output result.csv # 方式3实时摄像头需USB摄像头 python predict.py --camera 0核心推理逻辑简化版def predict_image(model, image_path, transform, class_names): img Image.open(image_path).convert(RGB) # 强制三通道 img_tensor transform(img).unsqueeze(0) # 添加batch维度 with torch.no_grad(): output model(img_tensor) probs torch.nn.functional.softmax(output, dim1) confidence, pred_idx torch.max(probs, dim1) # 动态阈值塑料瓶类置信度0.75时标记为低置信 if class_names[pred_idx.item()] plastic_bottle and confidence.item() 0.75: return low_confidence_plastic, confidence.item() return class_names[pred_idx.item()], confidence.item() # 示例输出(battery, 0.923)参数说明unsqueeze(0)添加batch维度PyTorch模型要求输入为[B,C,H,W]torch.no_grad()禁用梯度计算推理时提速3倍softmax输出概率分布比raw logits更易解释。4.3 Web界面部署Flask轻量服务化app.py提供HTTP接口适配毕设答辩演示from flask import Flask, request, jsonify import torch from model import GarbageCNN from PIL import Image import io app Flask(__name__) model GarbageCNN(num_classes2) model.load_state_dict(torch.load(best_model.pth)) # 加载训练权重 model.eval() app.route(/predict, methods[POST]) def predict(): if file not in request.files: return jsonify({error: No file uploaded}), 400 file request.files[file] img Image.open(io.BytesIO(file.read())).convert(RGB) # 预处理同训练时一致 transform transforms.Compose([...]) # 同2.2节定义 img_tensor transform(img).unsqueeze(0) with torch.no_grad(): output model(img_tensor) probs torch.nn.functional.softmax(output, dim1) confidence, pred_idx torch.max(probs, dim1) result { class: [battery, plastic_bottle][pred_idx.item()], confidence: confidence.item(), all_probabilities: probs.tolist()[0] } return jsonify(result)启动命令flask run --host0.0.0.0 --port5000前端用HTMLJS上传图片即可调用。注意生产环境需加gunicorn和nginx但毕设演示用Flask足够。5. 避坑指南98分项目背后的5个真实翻车点与解决方案5.1 现象训练loss不下降始终在0.69附近震荡原因CrossEntropyLoss输入的是raw logits但代码中误将softmax后的概率传入损失函数导致梯度消失。解决检查criterion(output, target)中output是否为未经过softmax的logitsPyTorch官方文档强调CrossEntropyLoss内部已包含softmax重复调用会破坏梯度流。5.2 现象验证集准确率高于训练集过拟合假象原因train_transform中RandomHorizontalFlip在验证集也启用导致验证数据被增强而训练数据因Dropout存在随机失活造成评估偏差。解决严格分离transform——验证集必须用val_transform无随机操作并在DataLoader中指定shuffleFalse。5.3 现象img_塑料瓶_244.jpeg识别为电池但肉眼明显是塑料瓶原因该图片背景为深蓝色垃圾桶模型将“深蓝背景长条形物体”误判为电池特征。解决在数据预处理中增加背景抑制用transforms.Grayscale(num_output_channels1)转灰度再transforms.RandomInvert(p0.5)强制模型关注物体纹理而非背景色。5.4 现象树莓派部署时报错OSError: libcblas.so.3: cannot open shared object file原因PyTorch ARM版本依赖OpenBLAS但树莓派系统未安装。解决执行sudo apt update sudo apt install libopenblas-dev再重新安装torchARM wheel非pip默认版本。5.5 现象Web界面上传图片后返回500 Internal Server Error原因Flask默认线程数为1当多用户同时请求时阻塞。而torch.no_grad()在CPU模式下推理耗时较长约1.2s/图。解决启动时加参数flask run --threaded --processes2或改用gevent异步服务器pip install gevent后gunicorn -k gevent -w 2 app:app。6. 毕设答辩终极技巧用三张图讲清技术深度与工程意识6.1 技术深度可视化Grad-CAM热力图定位决策依据答辩时最有力的证据不是准确率数字而是模型到底看到了什么。用Grad-CAM生成热力图gradcam.pyfrom pytorch_grad_cam import GradCAM from pytorch_grad_cam.utils.image import show_cam_on_image # 加载模型和目标层取最后一层卷积 target_layers [model.features[-3]] # 即第4个Conv2d层 cam GradCAM(modelmodel, target_layerstarget_layers) # 对img_电池_452.jpeg生成热力图 rgb_img np.array(Image.open(dataset/test/battery/img_电池_452.jpeg)) / 255.0 input_tensor transform(Image.open(...)).unsqueeze(0) grayscale_cam cam(input_tensorinput_tensor, targetsNone)[0] # 叠加热力图 visualization show_cam_on_image(rgb_img, grayscale_cam, use_rgbTrue) plt.imsave(battery_gradcam.png, visualization)答辩话术“请看这张电池图片的热力图指向屏幕红色区域集中在电池正负极金属触点——证明模型真正学到了‘电池’的本质特征而非背景颜色。而塑料瓶的热力图切换图片聚焦瓶身标签和瓶口螺纹符合人类认知逻辑。”6.2 工程意识体现推理延迟与内存占用实测表评审老师关心“能不能用”而非“理论上多快”。提供实测数据表在i5-8250U笔记本上操作时间内存占用说明模型加载CPU1.2s180MBtorch.load()后model.eval()单图预处理0.08s—transforms流水线推理CPU0.31s45MBtorch.no_grad()下端到端响应0.42s峰值225MB从读图到输出结果注意此数据必须现场演示用time.time()在predict.py中埋点答辩时打开终端实时运行python predict.py --image ...让老师亲眼看到0.42s计时。6.3 毕设加分项扩展性设计文档非代码但体现架构思维项目附带EXTENSION.md文档列出三条可扩展路径类别扩展新增“玻璃瓶”类别时只需在dataset/train/下建glass_bottle文件夹修改num_classes3其余代码无需改动硬件升级更换为Jetson Nano后将model.to(cuda)并启用torch.backends.cudnn.benchmarkTrue推理速度提升至0.09s部署升级替换Flask为FastAPI增加app.post(/predict)的Pydantic校验自动过滤非JPEG格式上传。从那以后我每次做毕设都强制走一遍“三图验证”用Grad-CAM热力图证明模型学到了正确特征用time.time()实测端到端延迟并写进答辩PPT在EXTENSION.md里预留至少两个可扩展点让老师问“如果加第三类怎么办”时能立刻回答。这比堆砌10页算法公式管用得多——毕竟导师要的不是论文是一个能跑起来、能讲清楚、能延展的完整工程。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

旅游推荐系统协同过滤实战:从评分矩阵到算法调优与排错

旅游推荐系统协同过滤实战:从评分矩阵到算法调优与排错

简介:这是一篇西南财经大学学士学位毕业论文,面向旅游推荐场景,系统阐述协同过滤算法的原理、实现与效果评估,可服务于毕业设计参考、算法学习或推荐系统研究。论文内容涵盖数据预处理、用户画像构建、推荐算法模块设计、系统性能…

2026/10/10 23:14:50 阅读更多 →
Python端到端网络舆情分析系统实战:采集→情感→热点→报告

Python端到端网络舆情分析系统实战:采集→情感→热点→报告

简介:这是一套面向本科毕业设计与Python初学者的网络舆情分析系统完整实现,聚焦社交媒体数据采集、情感分析与可视化展示等典型应用场景。资源包含可直接运行的前后端代码、MySQL数据库脚本及配套工具,技术栈覆盖HTML前端界面、Python后端逻辑…

2026/10/10 23:14:50 阅读更多 →
带差分隐私的协同过滤推荐:Python毕设资源与实验解析

带差分隐私的协同过滤推荐:Python毕设资源与实验解析

简介:面向计算机相关专业学生与推荐系统入门研究者的毕业设计资源包,基于Python实现带差分隐私的协同过滤推荐系统,聚焦推荐流程中的用户隐私保护。从差分隐私与协同过滤的理论背景入手,梳理国内外研究现状,并阐述差分…

2026/10/10 23:14:50 阅读更多 →

最新新闻

MSDV方法:如何形式化证明模拟功能模型与晶体管电路的一致性

MSDV方法:如何形式化证明模拟功能模型与晶体管电路的一致性

模拟功能模型和晶体管电路的一致性,是模拟混合信号验证里一块老硬骨头。这篇论文速读想聊的MSDV方法,核心就一句话:怎么用形式化的手段,证明你写在系统级的功能模型,和真正拿去流片的晶体管级网表,在行为上…

2026/10/11 0:03:29 阅读更多 →
用Python自建数据看板:从Excel报表到权限管控的完整实践

用Python自建数据看板:从Excel报表到权限管控的完整实践

1. 为什么我从手工Excel转向自建Python看板1.1 那个每周五下午重复了半年的动作相信不少负责运营报表的人都经历过这个循环:周五下午两三点,各业务线把数据丢过来,我打开一个积累了多年的Excel大表,用透视表拖出本周销量、环比、区…

2026/10/11 0:03:29 阅读更多 →
经济学为什么充满数学公式?从精确表达到决策工具的全面解读

经济学为什么充满数学公式?从精确表达到决策工具的全面解读

为什么经济学里有那么多数学公式?很长一段时间里,“经济学”三个字在我脑海里就是一幅图谱:一边是报纸上经济学家张口就来的政策点评,一边是教材里密密麻麻的方程组和希腊字母。我敢打赌,不少人和我最初的感受一样——…

2026/10/11 0:03:29 阅读更多 →
软件工程毕设提速:8款AI工具助你论文代码双线推进

软件工程毕设提速:8款AI工具助你论文代码双线推进

又是一年毕业季,软件工程专业的学生开始焦虑了。一边是要求越来越严的论文:开题、文献综述、系统设计、测试分析,每一章都要言之有物;另一边是必须跑得起来的代码:前端、后端、数据库、部署,哪一个环节都不…

2026/10/11 0:03:29 阅读更多 →
UE动画修改实战:从资产编辑到重定向与蒙太奇驱动

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动

做UE开发,不管你是做单机玩法、多人在线,还是虚拟制片、数字人,迟早会碰上一个绕不开的需求:动画修改与动画编辑。角色拿来的动作总是“差那么一点意思”——走路颠簸、抬手太高、攻击判定跟动画错位、换个体型骨骼就完全变形………

2026/10/11 0:02:28 阅读更多 →
Tarjan算法详解:用一次DFS找出有向图所有强连通分量

Tarjan算法详解:用一次DFS找出有向图所有强连通分量

有向图里的“互相可达”现象,其实比你想的更常见。模块A调用模块B,模块B又回调模块A;两个微服务互为依赖;社交平台上你关注我、我关注你,这些一旦被画成一张有向图,就会出现一群节点互相之间都能走通的小团…

2026/10/11 0:02:28 阅读更多 →

日新闻

流感时间序列预测实战: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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →