图像描述生成经典论文解读:CNN+LSTM端到端模型原理与实现
1. 首先搞清楚这篇论文到底解决了什么问题先说点大实话。如果你第一次接触“图像描述生成”这个词可能会觉得“不就是让AI看图说话吗这有什么难的”但真往前倒十几年这件事的难度远超想象。那时候主流的图像理解任务基本就是分类、检测、分割——输出一个标签或者画一个框。可你让AI输出一句完整的“一只戴帽子的狗坐在蓝色的椅子上”这就涉及到两个完全不同性质的数据形态图像是二维的像素网格文本是一维的离散序列。怎么把两者无缝接起来长期没有一个通用解法。“Show and Tell: A Neural Image Caption Generator”这篇论文解决的就是这个核心难题。它提出了一套端到端的神经网络结构输入一张图片直接输出一句完整的、自然的英文描述。整个流程不需要人为设计中间规则不需要先做目标检测再填模板而是让模型自己从大量“图片-文本对”里学出映射规律。用一句话概括它的做法先用卷积神经网络把图片“看”成一串浓缩的特征向量再用LSTM把这些特征向量“翻译”成一串自然语言词汇。这篇论文在领域内的地位非常高。它几乎是后来所有“视觉-语言”任务比如视觉问答、图文检索、多模态对话的基石。如果你正打算入门多模态学习、做图像理解相关的项目或者只是好奇“AI是怎么描述一张照片的”这篇论文都是绕不开的必修课。这篇文章就是写给新手看的超详细拆解我不堆公式不拽术语尽量用大白话把里面的关键技术点讲透顺便把我自己复现和解读过程中的经验一起放进来。2. 模型整体思路拆解为什么非要用“编码器-解码器”这套框架要说清楚这篇论文先得理解2014年前后大家是怎么碰壁的。当时很多研究者想做一个“看图说话”系统脑子里最常见的思路是先检测图片里的物体狗、人、椅子然后识别物体之间的关系坐在、戴着、在旁边最后拼装成句子。这个思路听上去顺理成章但工程上极其痛苦。因为真实世界的图片千奇百怪光照、遮挡、角度、物体形态都无限变化你根本写不完所有的规则模板。就算勉强在某个小数据集上跑通换一个场景就彻底失灵。另一种想法是把图像描述当成“图像分类的延伸”。先对图片提取一堆标签再把这些标签通过语言模型拼成句子。但标签的反应粒度太粗组合方式也无法体现空间关系和属性信息最后生成的句子会特别生硬。比如“一个女孩和一个男孩和一个球”这种废话。这篇论文的作者团队跳出了这个思维定式。他们的灵感核心来源于机器翻译领域。机器翻译是什么把一种语言的句子翻译成另一种语言的句子。这本质上是“序列到序列”的映射。那图像描述呢图像可以看作是一种非结构化的“视觉语言”而描述句子是结构化的“自然语言”。能不能也把它当成“序列到序列”的任务于是就有了经典的Encoder-Decoder编码器-解码器框架。2.1 三大核心模块的分工这套框架在图像描述任务里具体化为三个模块。第一个模块图像编码器。论文使用的图像编码器是卷积神经网络CNN。CNN这个词你可能听得耳朵起茧了但这里得强调一点它在这里的角色不是一个分类器而是一个“特征提取器”。CNN接收原始图片像素经过一系列卷积、池化操作最后输出一个高维特征向量。这个向量浓缩了图片中的语义信息比如什么物体、什么颜色、大致布局。论文里用的是当时在大规模图像分类数据集上预训练好的CNN网络比如那种很深很经典的网络把最后的分类层去掉留下中间层输出的特征再通过一个线性变换投射到LSTM合适的输入维度。这个过程相当于把图片“压缩打包”成一个模型能读懂的向量。第二个模块句子解码器。解码器用的是RNN家族里的LSTM长短期记忆网络。为什么不用普通RNN因为RNN在长序列上容易发生梯度消失或梯度爆炸生成句子较长时前面的信息很容易丢。LSTM内部有遗忘门、输入门、输出门这三个门控机制可以更精细地控制信息流动把“图片信息”和“已经生成的词”长期保存在记忆里。当你生成一个句子的时候LSTM其实是在做一件事每一步都根据“图片特征”“上一步生成的词”“自身的隐藏状态”这三个信息来预测下一个最可能的词是什么。第三个模块目标函数和训练流程。整个模型是端到端优化的输入一张图和它的参考描述输出词汇表上每个词的条件概率分布。用交叉熵损失来衡量预测分布与真实词之间的差距然后反向传播更新整个网络中的所有参数。这里必须划一个重点虽然CNN部分是预训练的但在训练图像描述模型时CNN参数也是会跟着更新的至少在论文的设定里整个网络是一起优化的。很多人误以为预训练完CNN后就可以冻结那是错的。2.2 为什么说“端到端”这三个字很金贵端到端这个词现在已经被说滥了。但在当年这是一种极具魄力的选择。端到端的对面是“管道式系统”先用目标检测模型切出候选区域再用属性分类器给区域贴标签最后用语言模板拼接。每个环节独立训练误差会一级一级往下传递前一步的错没法靠后面修正。而端到端系统是“一条龙”式的中间没有明确的人工规则模型自己决定提取哪些特征、如何在词与词之间建立依赖、如何把视觉信息动态融合到语言生成过程中。这就像学做菜。管道式做法是导师教你每个步骤的严格规矩盐放多少克、油温多少度、翻炒多少下换个菜谱就不行。端到端做法是给你看大量成品菜和对应原料图片你自己总结出“什么样的原料配什么样的火候”虽然中间过程不可控但适应性强得多。当然端到端也有代价需要海量数据和足够大的模型容量否则难以收敛。这篇论文在当时的硬件条件下能跑通也是占了不少深度学习技术成熟的红利。3. 核心细节解析目标函数、训练策略和推理策略很多新手看论文直接跳过公式这很可惜。这篇论文的数学并不难但核心思想全藏在目标函数里。3.1 最大似然估计到底在最大化什么论文的训练目标用大白话说就是我们要找一组模型参数使得“给定图片I模型生成正确句子S的概率”最大。句子S不是一个词而是一个序列比如S0句首符、S1、S2……直到句尾。LSTM生成的每一步其实都是在输出一个条件概率在当前图片I、已经生成的词S0到S(t-1)的情况下下一个词等于S(t)的概率是多少。整句话的概率就等于每一步概率的连乘。但连乘容易造成数值下溢所以通常取对数变成连加。模型训练就是不断调参数让这个对数似然值往上涨。如果你仔细观察每一步的条件会发现它包含了两个信息源图片I和前面已经生成的词。这意味着LSTM不是死板地“背句子”而是一个会持续观察图片的“视觉条件语言模型”。这个设计保证了生成的句子既符合语法又不至于偏离图片内容。3.2 训练细节SGD、学习率、过拟合与Text Preprocessing论文在训练设置上有几个值得关注的点。优化器用的是SGD随机梯度下降而不是现在流行的Adam。SGD在合适的初始化下往往能收敛到更平滑的极值点泛化性能更好。学习率用的是比较稳健的初始值并且配合固定策略逐步衰减。批大小设置适中不能太大也不能太小太大会让损失曲线太平滑缺乏探索性太小则梯度噪声太大。更关键的是正则化手段。LSTM是一种很容易过拟合的模块尤其在图像描述数据集规模不大只有几万张图的情况下。论文的做法是在LSTM层和词嵌入层上都加了Dropout。Dropout原理很简单每次训练时随机让一部分神经元“关闭”不参与本次前向传播和反向传播这迫使模型不能过度依赖某几个神经元从而提升泛化能力。还有一个小细节是输入预处理。图片需要缩放到固定尺寸比如224x224或者227x227并做像素归一化。文本需要构建词汇表低频词通常会被替换成“未知词”UNK符号句子两端会加上特殊的起始符和结束符方便模型知道什么时候开始生成、什么时候收尾。3.3 推理阶段的解码策略Greedy vs Beam Search训练完成后模型的实际使用是另一回事。训练时每一步都用正确答案作为输入这叫Teacher Forcing强制教学但真正推理时没有正确答案模型必须自己一个词接一个词地生成。最简单的方法是贪心解码每一步只挑概率最高的词。这在很多任务里效果还行但容易导致“局部门槛最优、全局遗憾”——比如开头挑了一个不恰当的词后面再怎么顺都没法弥补因为根本没有回头路。论文里用的主力解码策略是束搜索Beam Search。束搜索的思路是每一步不只保留一个候选而是保留K个候选。假设K等于3那么第一步保留概率最高的3个词第二步基于这3个词分别扩展词典里的所有词得到一大堆候选序列然后按累积概率排序只保留总概率最高的3个继续往下走。这样最后你能得到3个完整句子挑概率总分最高那个输出。K越大搜索空间越大结果通常越好但计算量也成倍增长。论文实验里束宽从2增加到3时有明显收益再继续增加就开始边际递减。这个结论也是后来无数复现实验的共识。4. 数据、实验和评价指标怎么判断模型真的在“说人话”模型做出来不能自嗨得放到标准数据集上跑用统一的指标跟别人比。4.1 当时的主流数据集论文实验使用了两个主流公开数据集。一个是Flickr30k大约3万张图片每张图配5句人工描述规模较小适合快速验证另一个是COCO数据集一个面向物体检测与图像描述的大规模数据集有超过30万张图片每张图同样配约5句人工描述场景更加多样是检验模型稳定性的硬标准。论文的重点实验基本都在这两个数据集上进行。4.2 BLEU指标怎么看评估时最常用的指标是BLEU。BLEU源于机器翻译核心逻辑是数“n-gram重合度”。所谓n-gram就是连续n个词组成的小片段。比如句子“a dog is running”的2-gram包括“a dog”“dog is”“is running”。如果生成句子与参考句子在多个n-gram级别上重合度高就认为翻译质量好。BLEU简单易懂但它有一个非常明显的缺陷它只看表面词汇匹配不理解语义。假设参考句写的是“a dog is running”生成句写的是“the dog is sprinting”语义几乎一样但n-gram重合度不高BLEU分就会偏低。所以在看论文实验结果时不要只看BLEU数字还得结合METEOR、CIDEr等指标来看。METEOR除了n-gram还引入同义词匹配CIDEr则更注重对图像描述中信息点的覆盖程度。论文在多份实验表中同时列出这些指标算是给读者一个相对全面的参考。4.3 实验结果透露出的信息实验结果显示这种端到端模型在BLEU指标上大幅超过了当时的非神经网络基线方法尤其在高阶n-gram上比如BLEU-4优势非常明显。这说明模型生成的句子不再是碎片化词语的堆砌而是有更完整的结构。从纸面结果看模型确实能一定程度上描述图片内容能捕捉主体对象人、狗、车能描述简单动作坐在、站在、骑还能给物体加上属性红色、戴帽子的。当然翻车案例也不少比如把“斑马”误判成“马”、把“拿球拍的人”描述成“拿着网球拍的人”等。在我看来这篇论文最重大的意义不是做到了100%准确而是它证明了纯粹的神经网络结构从零开始学“像素到句子”的映射是完全可行的。这一点直接给后来的研究者打开了一条新路。5. 实操视角如果我想亲手复现一个简化版模型读论文永远比写代码轻松。但真正打开编辑器开始复现时你才会发现论文里藏着大量细节。下面我把自己踩过的坑和推荐的做法分享出来。5.1 核心模块的伪代码结构无论你用哪种深度学习框架核心的三大模块是逃不掉的图像特征提取器、LSTM解码器、训练循环。我花了很长时间把论文的核心逻辑压缩成了下面这段伪代码风格上尽量跟论文思路保持一致# 伪代码示例展示图像描述模型的核心训练逻辑 import torch import torch.nn as nn class ImageCaptionModel(nn.Module): def __init__(self, cnn, vocab_size, embed_size, hidden_size): super().__init__() self.cnn cnn # 使用预训练CNN去掉分类层 self.img_proj nn.Linear(cnn_feature_dim, hidden_size) self.embedding nn.Embedding(vocab_size, embed_size) self.lstm nn.LSTMCell(embed_size cnn_feature_dim, hidden_size) self.fc nn.Linear(hidden_size, vocab_size) def forward(self, images, captions): # images: [batch, 3, H, W] # captions: [batch, seq_len] features self.cnn(images) # [batch, cnn_feature_dim] features features.unsqueeze(1) # 保持维度方便拼接 features features.expand(-1, captions.size(1), -1) # 每一步都拼一份特征 word_embeds self.embedding(captions) # [batch, seq_len, embed_size] inputs torch.cat([features, word_embeds], dim2) # 特征和词向量拼起来 h torch.zeros(images.size(0), hidden_size) c torch.zeros(images.size(0), hidden_size) logits [] for t in range(inputs.size(1)): h, c self.lstm(inputs[:, t, :], (h, c)) logits.append(self.fc(h)) return torch.stack(logits, dim1)这个伪代码里有个细节图像特征被展开后与每个时间步的词向量拼接在一起再一起送入LSTM。这确保LSTM在每个时刻都能看到图片特征而不仅仅是拿图片特征初始化一下隐藏状态。这是这篇论文架构的关键也是最容易被新手忽略的地方。5.2 踩过的坑图像特征注入方式我第一次复现时误以为“图片特征只需要作为LSTM的初始输入”于是在第一步之后就不再传入图片特征了。实验结果很快教我做人——生成的句子严重偏离图片内容基本变成了一个纯语言模型在胡扯。后来重新读论文才注意到真实的做法是在每一个时间步都把图片特征向量和词向量拼接起来作为LSTM的输入。这是一个非常关键的区别。简单来说模型需要“时时刻刻盯着图片说话”而不是“看一眼图片后闭眼背书”。5.3 训练时最容易遇到的三个问题第一个问题是损失下降不明显。这通常是学习率设置不合适引起的。我的建议是不要盲目使用某些框架默认的1e-3学习率可以先做一个小的学习率范围测试比如从1e-4到1e-2看哪一段曲线更稳定。第二个问题是过拟合。模型在训练集上损失很低但验证集上BLEU不高。解决办法很简单增加Dropout比例、对输入图片做随机裁剪/翻转等数据增强、以及适当减小模型容量。第三个问题是生成的句子重复词特别多。比如出现“a dog and a dog and a dog”。这一般是LSTM的隐藏状态容量不足或者训练轮数不够导致的。尝试增大hidden_size或者加入惩罚重复n-gram的后处理逻辑会有一定改善。6. 这篇论文的局限与后续研究给我带来的启发这篇论文很经典但它绝不是终点。站在今天的视角回看它的局限性也非常明显。最明显的一点是缺乏注意力机制。模型虽然每一步都“看着”图片特征但看的是整张图的全局特征。当图片场景非常复杂时模型容易被背景信息带偏或者忽略小目标。后来很多研究者发现在生成每一个词时模型应该把视觉注意力聚焦在图片的某个局部区域上——比如生成“dog”这个词时注意力分布应该集中在图中狗所在的位置。这种注意力机制的引入让图像描述效果上了一个大台阶。另一个局限是LSTM本身的结构限制。LSTM本质上是从左往右逐词生成无法对整句话做全局上的长度控制或者主题规划。生成的句子有时候不够简练有时候重点不突出。后来的Transformer模型通过多头自注意力机制可以让模型直接看到句子中所有词的关系并实现并行计算极大地提升了序列建模能力。这篇文章给我的最大启发是真正有价值的突破往往不是发明一个全新模块而是把两个不同领域的成熟技术用一种优雅且端到端的方式组合起来。CNN是视觉领域的熟面孔RNN是文本领域的常用工具作者把两者拼接并设计了统一目标函数就开辟了一个新方向。这种“跨界拼接”的思路在科研和工业落地中同样适用。7. 新手阅读建议和常见误区速查如果你要亲自去啃原论文我建议按下面这个顺序来先读摘要和结论搞清楚论文在做什么、效果如何再翻模型架构图对着图看文字描述然后读公式把每个符号对应到具体模块接着看实验设置和结果对比最后回头补读相关工作。千万不要上来就深陷公式推导很容易劝退。我整理了新手最容易踩的几个理解误区做成了速查表误区实际情况以为CNN只是特征提取器训练时固定不变CNN在端到端训练中也会微调更新预训练只是提供好起点以为LSTM只看图片特征LSTM每个时间步的输入是“词向量图像特征”的拼接以为BLEU高分等于模型真正理解图像BLEU只是词汇匹配指标语义正确但用词不同也会导致低分以为束搜索束宽越大越好束宽增大会带来计算开销且收益递减过大的束宽可能引入更多不自然句子以为图像描述需要两步走先检测物体再组织语言端到端模型直接从像素学映射中间没有显式规则还有一个非常常见的实践误区有人复现时直接把LSTM输出层的维度设为词表大小而词表可能有几千甚至上万个词这会很大程度上增加参数规模和训练难度。记得先对词表做频次过滤去除低频词然后用嵌入层把词ID映射到低维稠密向量。写在最后的一点个人经验我前前后后带过不少人读这篇论文大家的反馈惊人地一致之前觉得图像描述很神秘读完之后发现核心思想其实并不复杂就是要找到一条路径把图像的特征表示和文本的序列生成连起来。但“容易理解”不等于“容易复现”真正动手写代码时才会发现细节决定成败——特征怎么融合、Dropout放哪里、学习率怎么调、束宽怎么选每一个都值得反复实验。我的建议很简单先读通理论再跑通代码最后再回头重读论文。每一次重读你都会发现之前没注意到的细节。这篇论文就像一栋大楼的地基地基打得稳不稳直接决定你后来在里面怎么装修。希望这份超详细解读能帮你把这块地基看得清清楚楚。如果你在复现中遇到问题别急着怀疑自己的智商先检查我前面提到的几个细节多半是那里出了岔子。

相关新闻

基于Java的超市管理系统设计与实现全流程解析

基于Java的超市管理系统设计与实现全流程解析

做超市管理系统这个题目,我不是第一次遇到了。不管是课程设计、毕业设计,还是帮朋友的小店做一套内部管理系统,“基于Java的超市管理系统”这个名字都算得上是经典常客。我自己也完整从零实现过同类型的系统,开发编号正好是11865&…

2026/10/16 2:25:52 阅读更多 →
yoinks 入门指南:终端里粘贴链接,3 步下载视频或 MP3

yoinks 入门指南:终端里粘贴链接,3 步下载视频或 MP3

yoinks 入门指南:终端里粘贴链接,3 步下载视频或 MP3 【免费下载链接】yoinks yoink any video from your terminal. no shady ads. 项目地址: https://gitcode.com/GitHub_Trending/yo/yoinks 看过网页下载器的朋友都懂:满屏假下载按…

2026/10/16 2:25:52 阅读更多 →
Buzz 离线语音转文字|录音不出本地,3 步拿到 SRT 字幕

Buzz 离线语音转文字|录音不出本地,3 步拿到 SRT 字幕

Buzz 离线语音转文字|录音不出本地,3 步拿到 SRT 字幕 【免费下载链接】buzz Buzz transcribes and translates audio offline on your personal computer. Powered by OpenAIs Whisper. 项目地址: https://gitcode.com/GitHub_Trending/buz/buzz …

2026/10/16 2:24:52 阅读更多 →

最新新闻

ECharts 世界地图不显示?GeoJSON 注册与调优指南

ECharts 世界地图不显示?GeoJSON 注册与调优指南

简介:面向需要在地理数据可视化中集成世界地图的前端开发者,这份ECharts世界地图JS资源提供了可直接引用的地图组件与配套脚本。无论是数据大屏、全球业务分析还是地理信息展示,都能借助它快速生成可交互的矢量地图。资源包含ECharts核心库、…

2026/10/16 3:15:02 阅读更多 →
新一代Node中间层开发模式:从胶水层到模块化架构的工程实践

新一代Node中间层开发模式:从胶水层到模块化架构的工程实践

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

2026/10/16 3:15:02 阅读更多 →
手艺人专属个人项目管理系统:从灵感到作品归档的轻量数字化方案

手艺人专属个人项目管理系统:从灵感到作品归档的轻量数字化方案

artcraft这个名字,字面拆开就是art加craft——艺术和手艺。它不是一个装修风格,也不是某个文创品牌,而是一套我自己从零搭建的、面向手工艺创作者的个人项目管理系统。说白了,就是给做木工、陶艺、皮具、编织、首饰、模型涂装这些…

2026/10/16 3:15:02 阅读更多 →
最长公共子序列(LCS)动态规划详解:从暴力递归到滚动数组优化

最长公共子序列(LCS)动态规划详解:从暴力递归到滚动数组优化

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

2026/10/16 3:15:02 阅读更多 →
读懂Product Hunt每日热榜:产品趋势与选型实操方法

读懂Product Hunt每日热榜:产品趋势与选型实操方法

每天早上固定时间打开 Product Hunt 已经成了我的习惯,最近在复盘 2 月 19 日那期每日热榜时,发现一个很有意思的现象:榜单上没有那种“一眼就觉得会改变世界”的炸裂产品,但恰恰是这种看起来平淡的榜单,最能反映当下真…

2026/10/16 3:15:02 阅读更多 →
自定义表单设计器-教学讲解

自定义表单设计器-教学讲解

自定义表单设计器 - 教学讲解目标读者:第一次接触本项目自定义表单设计器的同学 阅读时长:约 20 分钟 学完之后,你能完整说清楚下面这 3 件事: 设计器中间"手机壳"里的控件预览,到底是怎么画出来的&#xff…

2026/10/16 3:14:02 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →