DEAP情绪识别实战:从数据加载到模型复现的完整指南
简介这份资源围绕DEAP数据集展开情绪识别与分类实践面向从事情感计算、人机交互或生理信号分析的学生与开发者帮助解决多模态情绪数据如何组织、特征提取与模型训练的问题。压缩包共38个文件约5.79MB以28个Java源码为主体另含5个train训练数据文件、README说明文档及工程配置文件整体结构便于直接导入开发环境运行与二次修改。资源标签涵盖DEAP情绪识别、数据集分类与下载等方向已有1127人学习下载。读者可从中获得基于DEAP四类情绪标签的监督学习实现思路结合心率、皮肤电导等生理指标完成特征工程与分类建模并借助训练数据文件快速复现实验流程适合作为课程设计或科研入门的参考工程。1. DEAP 情绪识别落地从 sentimentclassify-master 到可复现的脑电分类DEAP 数据集是情绪识别方向绕不开的公开数据40 个被试、每人 40 段一分钟音乐视频诱发下的 32 通道脑电加外周生理信号标签是 valence、arousal、dominance、liking 四个维度的 1 到 9 自评打分。很多人拿到sentimentclassify-master这类工程目录后第一反应是直接跑结果卡在数据加载、标签二值化、被试划分这三步上模型准确率在 50% 上下晃怀疑数据有问题。其实问题不在数据在于 DEAP 的标签是连续打分而情绪分类任务通常要把它切成高低两类切分阈值、划分方式、预处理顺序任何一步不同结果都会差出十几个点。这篇笔记按「数据怎么拿 → 特征怎么提 → 模型怎么搭 → 坑在哪」的顺序把一条能复现的 DEAP 情绪识别链路讲清楚适合刚接触生理信号分类、想拿 DEAP 做 baseline 的工程师。2. DEAP 数据集下载与结构解析先搞清楚你拿到的是什么2.1 官方申请流程与文件构成DEAP 数据集不在公开镜像站随便下官方入口是 Queen Mary University of London 的 DEAP 项目页需要填一份使用协议表说明用途、单位、联系人通过后拿到下载链接。常见做法是走学术邮箱申请一般几个工作日内回复。拿到的是data_preprocessed_python压缩包解压后是 40 个.dat文件命名s01.dat到s40.dat每个文件对应一个被试。每个.dat文件用 pickle 序列化加载后是一个字典关键键值如下键名含义形状data预处理后的生理信号(40, 40, 8064)labels四维自评标签(40, 4)data的三个维度分别是 trial40 段视频、channel40 通道、sample8064 个采样点。40 通道里前 32 个是 EEG按国际 10-20 系统布置后 8 个是外周信号眼电、肌电、皮电、呼吸、血容量脉搏、体温等。采样率 128Hz每段 63 秒去掉 3 秒基线后正好 60 秒60×1287680加上基线前 3 秒共 8064。这个数字对不上会导致后面切片全错先记住。labels四列依次是 valence、arousal、dominance、liking取值 1 到 9 的连续整数。做二分类时通常取 valence 或 arousal以 5 为界大于 5 为高、小于等于 5 为低。也有用中位数做被试内划分的后面会讲区别。2.2 用 Python 加载单个被试并验证形状先写一段最小加载代码确认文件能读、形状对得上再谈建模。import pickle import numpy as np # DEAP 的 .dat 是 pickle 协议 2 序列化Python3 读取需指定 encoding with open(data_preprocessed_python/s01.dat, rb) as f: subject pickle.load(f, encodinglatin1) data subject[data] # (40, 40, 8064) labels subject[labels] # (40, 4) print(data shape:, data.shape) print(labels shape:, labels.shape) print(valence range:, labels[:, 0].min(), labels[:, 0].max()) # 取第一个 trial 的前 32 通道作为 EEG eeg data[0, :32, :] # (32, 8064) print(eeg shape:, eeg.shape)逻辑说明encodinglatin1是 DEAP 用 Python2 pickle 存的历史遗留不指定会报UnicodeDecodeError。data[0, :32, :]取的是第一个 trial 的 EEG 部分后 8 通道是外周信号做纯 EEG 分类时先切掉。参数上如果你要做多模态融合就把:32改成:但要注意外周信号量纲和 EEG 差很多得单独标准化。验证通过后把 40 个被试循环读进来拼成一个列表或大数组。内存够的话直接np.stack40×40×40×8064 的 float64 大约 4GB建议用 float32 省一半。2.3 标签二值化的两种口径标签处理是第一个分水岭。常见两种做法第一种全局阈值 5。所有被试所有 trial 的 valence 大于 5 记 1否则 0。优点是简单缺点是 DEAP 里多数人打分偏中性5 附近样本密集边界噪声大。第二种被试内中位数划分。对每个被试的 40 个 valence 打分取中位数高于中位数的记 1。这样每个被试高低样本各半缓解了个体打分尺度差异。代价是标签含义变成「相对自己偏高」跨被试可比性下降。我一般做被试独立划分subject-independent时用全局阈值做被试内划分时用中位数。两种口径下准确率能差 5 到 10 个点论文里不写清楚就没法比。def binarize_global(labels, col0, thresh5.0): # col0 是 valencecol1 是 arousal return (labels[:, col] thresh).astype(np.int64) def binarize_per_subject(labels, col0): med np.median(labels[:, col]) return (labels[:, col] med).astype(np.int64)参数说明thresh用 5 是 DEAP 自评量表的中点也有工作用 4.5 或 5.5 做敏感性分析。col选 0 还是 1 决定你做 valence 还是 arousal两者难度不同arousal 通常更好分一些。3. 特征提取与预处理DEAP 分类效果的分水岭3.1 为什么原始时序直接喂模型容易翻车把 32×8064 的原始 EEG 直接丢进 SVM 或全连接网络结果往往接近随机。原因有三个一是 EEG 信噪比低眼电、肌电、工频干扰混在里面二是 8064 维对 40 个 trial 来说维度爆炸小样本高维必然过拟合三是情绪相关的信息主要在频段功率和节律变化里不在原始幅值波形上。所以主流做法是先做带通滤波再提频域或时频特征。DEAP 官方给的已经是预处理过的数据做了 4 到 45Hz 带通和降采样但没做伪迹剔除。眼电和肌电还在尤其是前额通道。常见做法是加一步独立成分分析ICA去眼电或者简单点把 Fp1、Fp2 这些前额通道直接丢掉。我一般先不丢用 ICA 试效果不好再丢通道对比。3.2 频段功率特征DEAP 上最稳的 baselineEEG 情绪研究里最经典的特征是五个频段的功率谱密度delta1-4Hz、theta4-8Hz、alpha8-13Hz、beta13-30Hz、gamma30-45Hz。对每个通道每个频段算平均功率32 通道×5 频段160 维再加一些通道间不对称特征比如 frontal alpha asymmetry这是情绪效价研究里的老牌指标。from scipy.signal import welch import numpy as np def band_power_features(eeg, fs128): # eeg: (32, 8064) bands {delta: (1, 4), theta: (4, 8), alpha: (8, 13), beta: (13, 30), gamma: (30, 45)} feats [] for ch in range(eeg.shape[0]): freqs, psd welch(eeg[ch], fsfs, nperseg256) for name, (lo, hi) in bands.items(): idx np.logical_and(freqs lo, freqs hi) feats.append(np.trapz(psd[idx], freqs[idx])) return np.array(feats) # (160,)逻辑说明welch用分段平均周期图估计功率谱nperseg256在 128Hz 下对应 2 秒窗频率分辨率 0.5Hz够分五个频段。np.trapz对频段内 PSD 积分得到绝对功率。参数上nperseg调大分辨率高但方差大调小反之256 是常用折中。如果你要做微分熵特征把np.trapz换成对 PSD 取对数再积分那是另一套常用特征DEAP 上表现接近。160 维特征对 40 个 trial 还是偏多通常再降维。常见做法是只保留 alpha、beta、gamma 三个和情绪最相关的频段降到 96 维或者用 PCA 降到 20 到 30 维。3.3 被试划分subject-dependent 和 subject-independent 别混这是 DEAP 实验设计里最容易出错的地方。subject-dependent 是同一个人的数据一部分训练一部分测试准确率能到 70% 以上甚至 90%subject-independent 是留出几个被试完全不参与训练只用他们的数据测试准确率通常掉到 55% 到 65%。两者差距巨大论文里不注明划分方式数字没有意义。from sklearn.model_selection import LeaveOneGroupOut # groups 是每个样本对应的被试编号 logo LeaveOneGroupOut() for train_idx, test_idx in logo.split(X, y, groupssubject_ids): # 每次留一个被试做测试 X_train, X_test X[train_idx], X[test_idx] y_train, y_test y[train_idx], y[test_idx] # 训练和评估逻辑说明LeaveOneGroupOut按groups分组每次留一组做测试是 subject-independent 的标准做法。参数上groups必须和样本一一对应长度等于样本数。如果你做 subject-dependent就用train_test_split按 trial 随机分但要注意同一被试的 trial 之间有相关性随机分会导致乐观偏差更严谨的是按时间块分。提示DEAP 只有 40 个被试做 subject-independent 时留一法要训 40 次每次训练集 39 人、测试集 1 人评估指标波动大建议报告平均准确率和标准差不要只报一次结果。4. 分类模型搭建从 SVM 到 CNN 的选型与调参4.1 传统机器学习 baselineSVM 和随机森林怎么设特征提完后SVM 是 DEAP 上最常用的 baseline。核函数选 RBFC和gamma用网格搜索。经验上C在 1 到 100 之间gamma在 0.001 到 0.1 之间。随机森林作为对照n_estimators设 200 到 500max_depth不设或设 10 到 20防止过拟合。from sklearn.svm import SVC from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline from sklearn.model_selection import GridSearchCV pipe Pipeline([ (scaler, StandardScaler()), (svm, SVC(kernelrbf, probabilityTrue)) ]) param_grid { svm__C: [1, 10, 50, 100], svm__gamma: [0.001, 0.005, 0.01, 0.05] } grid GridSearchCV(pipe, param_grid, cv5, scoringaccuracy, n_jobs-1) grid.fit(X_train, y_train) print(best params:, grid.best_params_)逻辑说明StandardScaler必须放在 pipeline 里因为频段功率量纲差异大不标准化 SVM 会被大数值特征主导。GridSearchCV的cv5是内层调参外层还有留一被试的循环两层嵌套别搞混。参数上C越大容错越小容易过拟合gamma越大核函数越窄也容易过拟合。DEAP 上常见最优在C10、gamma0.01附近。4.2 深度学习方案EEGNet 和 1D-CNN 的输入组织深度学习在 DEAP 上不是必须但如果你想做端到端或者多模态EEGNet 是个轻量选择。它的输入是(batch, channels, samples)对 DEAP 就是(batch, 32, 8064)。EEGNet 用深度可分离卷积参数量小适合小样本。import torch import torch.nn as nn class EEGNet(nn.Module): def __init__(self, n_channels32, n_samples8064, n_classes2, F18, D2, F216, kernel64, dropout0.5): super().__init__() self.block1 nn.Sequential( nn.Conv2d(1, F1, (1, kernel), padding(0, kernel//2), biasFalse), nn.BatchNorm2d(F1), nn.Conv2d(F1, F1*D, (n_channels, 1), groupsF1, biasFalse), nn.BatchNorm2d(F1*D), nn.ELU(), nn.AvgPool2d((1, 4)), nn.Dropout(dropout) ) self.block2 nn.Sequential( nn.Conv2d(F1*D, F2, (1, 16), padding(0, 8), biasFalse), nn.BatchNorm2d(F2), nn.ELU(), nn.AvgPool2d((1, 8)), nn.Dropout(dropout) ) self.fc nn.Linear(F2 * (n_samples // 32), n_classes) def forward(self, x): # x: (batch, 1, channels, samples) x self.block1(x) x self.block2(x) x x.flatten(1) return self.fc(x)逻辑说明第一个卷积沿时间轴提取频率特征第二个卷积用groupsF1做深度卷积跨通道融合空间信息这是 EEGNet 的核心设计。F18、D2、F216是原论文在小数据上的推荐值kernel64对应 128Hz 下 0.5 秒。参数上dropout0.5对小样本很关键调低容易过拟合。输入要 reshape 成(batch, 1, 32, 8064)并且做逐样本标准化。训练时学习率用 1e-3Adam 优化器batch size 16 或 32早停 patience 设 10 到 15 轮。DEAP 上 subject-independent 能到 60% 左右subject-dependent 能到 75% 以上。4.3 多模态融合EEG 加外周信号怎么拼DEAP 的后 8 通道外周信号皮电、心率、呼吸等对 arousal 的区分有补充作用。常见做法是分别提特征再拼接EEG 提频段功率外周提统计量均值、方差、斜率然后一起送分类器。def peripheral_features(periph): # periph: (8, 8064) feats [] for ch in range(periph.shape[0]): x periph[ch] feats.extend([x.mean(), x.std(), x.max() - x.min()]) return np.array(feats) # (24,) # 拼接 X_eeg band_power_features(eeg) # (160,) X_periph peripheral_features(periph) # (24,) X np.concatenate([X_eeg, X_periph]) # (184,)逻辑说明外周信号采样率和 EEG 一样是 128Hz但量纲差异大拼接前要各自标准化。参数上统计量特征简单但有效也可以加频域特征。融合后维度 184比纯 EEG 多 24 维arousal 任务上通常有 2 到 5 个点提升valence 提升不明显。5. DEAP 情绪识别避坑清单五个真实翻车点5.1 标签和 trial 顺序对不上现象模型准确率始终 50%换模型换特征都没用。原因DEAP 的data和labels是按 trial 顺序对应的但有人预处理时对data做了排序或筛选忘了同步labels。解决任何对 trial 的增删排序都要用同一个索引同时操作data和labels最好封装成一个函数别手动切。5.2 标准化用了全局统计量导致数据泄漏现象subject-independent 准确率虚高换一批被试就崩。原因在划分训练测试之前就对全体数据做了标准化测试集的均值方差泄漏进了训练。解决标准化必须放在划分之后用训练集的均值和方差去变换测试集。用 sklearn 的 pipeline 能自动避免这个问题手写的话要显式fit训练集、transform测试集。5.3 把基线段当有效信号现象特征里混入大量低频漂移分类器学到的是基线差异。原因DEAP 每段 8064 点里前 384 点是 3 秒基线有人直接整段提特征。解决切片时从第 384 点开始取或者显式做基线校正用后 7680 点减前 384 点的均值。这个细节不处理alpha 功率会被基线漂移污染。5.4 被试划分和标签划分混用现象报告准确率 85%复现不出来。原因做 subject-independent 时标签二值化用了全体被试的中位数测试被试的标签分布被训练数据影响。解决subject-independent 下标签阈值只能用训练集算或者干脆用固定阈值 5。被试内划分才用被试自己的中位数。5.5 忽略类别不平衡直接看准确率现象准确率 65%但混淆矩阵一边倒。原因DEAP 里高 valence 和低 valence 样本数不一定均衡尤其全局阈值 5 时。解决看 F1 和 AUC别只看 accuracy。训练时加class_weightbalanced或者对少数类过采样。评估用分层交叉验证保证每折类别比例一致。6. 让 DEAP 结果可复现的三个进阶习惯第一个习惯是固定随机种子并记录。PyTorch、numpy、sklearn 的随机性来源不同torch.manual_seed、np.random.seed、random.seed都要设还要设torch.backends.cudnn.deterministic True。我一般把种子写进配置文件每次实验存一份不然两周后自己都复现不出来。第二个习惯是报告被试级别的结果分布。DEAP 只有 40 个被试平均准确率会被个别极端被试拉偏。我习惯画一张每个被试准确率的箱线图标出中位数和四分位距比一个平均数有信息量得多。如果某个被试准确率只有 45%看看是不是他的标签全在中性附近这种被试可以考虑剔除或单独分析。第三个习惯是用同一套评估协议对比不同特征。频段功率、微分熵、自回归系数这些特征在 DEAP 上的排名会随被试划分方式变别拿 subject-dependent 的微分熵结果去比 subject-independent 的频段功率结果。我踩过这个坑白白调了两周参后来统一到留一被试协议下重跑才发现之前结论站不住。最后一个具体技巧如果你要做 valence 和 arousal 的多任务学习共享底层特征、分开两个分类头比单独训两个模型稳定。DEAP 上两个任务相关但不完全重叠共享表示能起到正则作用尤其在小样本下。实现上就是在 EEGNet 的fc前分叉两个Linear头损失是两路交叉熵加权求和权重各 0.5 起步再调。这个改动不大但在我手上的数据里多任务比单任务在 arousal 上稳定高 2 到 3 个点valence 持平。做生理信号分类很多时候提升不来自更复杂的模型来自把数据边界和评估协议抠清楚。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

链表反转详解:迭代三指针、递归与头插法的实现与避坑

链表反转详解:迭代三指针、递归与头插法的实现与避坑

很多人在写链表反转时容易卡住,不是没记住代码,而是没想明白那三根指针到底在干什么。你是第一次接触这道题也好,还是刷过几轮又忘了也罢,只要把“就地”两个字理解透,把指针的每一步在纸上画一遍,这个经典…

2026/10/11 11:40:12 阅读更多 →
CNN-BiLSTM光伏功率预测:多变量多步预测与Matlab实现

CNN-BiLSTM光伏功率预测:多变量多步预测与Matlab实现

简介:针对光伏功率预测任务,一份融合CNN-BiLSTM的多变量多步预测Matlab源码与配套数据集可供使用,覆盖数据输入、模型训练、误差计算等完整流程,适合计算机、电子信息工程、数学等专业学生用于课程设计、期末大作业或毕业设计。压…

2026/10/11 11:40:12 阅读更多 →
Qwen-Image-2.1图像编辑完全教程:5个代码示例,从换背景到多主体合成

Qwen-Image-2.1图像编辑完全教程:5个代码示例,从换背景到多主体合成

【免费下载链接】Qwen-Image-2.1 Qwens most powerful open-source image generation model 项目地址: https://gitcode.com/gh_mirrors/qw/Qwen-Image-2.1 点击查看 免费下载 Qwen-Image-2.1 是 Qwen 家族最强大的开源图像生成与图像编辑模型:视觉生成…

2026/10/11 11:40:12 阅读更多 →

最新新闻

H5红包扫雷系统开发:数据结构、金额拆分与并发抢包实战

H5红包扫雷系统开发:数据结构、金额拆分与并发抢包实战

简介:这份资源是H5红包扫雷最新版源码包,采用虎年主题UI设计,面向有前端开发基础、希望研究或二次开发互动红包类H5小游戏的开发者与个人站长。包内实现红包可发、可抢、可控的核心玩法逻辑,适合用于节日活动、社群互动或营销场景…

2026/10/11 13:23:56 阅读更多 →
C#调用Fanuc FOCAS实现上位机通信的实战指南

C#调用Fanuc FOCAS实现上位机通信的实战指南

简介:这是一套基于C#开发的FANUC数控机床上位机管理系统,面向工业自动化工程师、CNC设备运维人员及熟悉.NET平台的工控软件开发者,用于实现对多台车削类FANUC机床的集中监控、数据采集、故障报警与刀具寿命管理。系统支持与FAUNC控制器通信&a…

2026/10/11 13:23:56 阅读更多 →
你每天在用的射频连接器,背后其实经历了这些变化

你每天在用的射频连接器,背后其实经历了这些变化

从雷达到口袋设备:一个高频信号的迁徙射频连接器最初并不是为消费者准备的。它诞生于无线通信、雷达和测试仪器对高频信号稳定传输的需求——当电流的频率高到一定程度,普通的金属接触点就会带来信号反射、衰减和干扰,于是人们需要一种能在高…

2026/10/11 13:23:56 阅读更多 →
AIHOT 双评判稿刷屏,但“AI 编辑“能过内容审核这关吗

AIHOT 双评判稿刷屏,但“AI 编辑“能过内容审核这关吗

AIHOT 双评判稿刷屏,但"AI 编辑"能过内容审核这关吗 【免费下载链接】AIHOT 一个自己找热点、自己写日报的网站框架。把信源和精选标准换成你的,它就是你的行业热点站。 项目地址: https://gitcode.com/gh_mirrors/ai/AIHOT 过去一周&a…

2026/10/11 13:23:56 阅读更多 →
AI辅助测试实战:人机协作的边界与平衡之道

AI辅助测试实战:人机协作的边界与平衡之道

我上个月在项目里试了一轮AI辅助测试的完整流程,先说结论:AI确实能写用例、能维护脚本、能分析日志,而且做得比我预期好;但真正拦住线上故障的,还是人补进去的那几条边界用例和一句"这里业务上不可能出现这种状态…

2026/10/11 13:23:56 阅读更多 →
Tock Core WG 会议纪要深度解读:2026-01-28 技术议题全景

Tock Core WG 会议纪要深度解读:2026-01-28 技术议题全景

操作系统嵌入式嵌入式OS 【免费下载链接】tock A secure embedded operating system for microcontrollers 项目地址: https://gitcode.com/gh_mirrors/to/tock 点击查看 免费下载 本文基于 Tock 嵌入式操作系统核心工作组(Core Working Group&#xff…

2026/10/11 13:22:56 阅读更多 →

日新闻

流感时间序列预测实战: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/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 阅读更多 →