Inception-v3迁移学习实战:花卉图像识别模型训练与部署复盘
接到这个图像识别项目时需求其实不复杂把一批花卉照片按品种自动分类先跑一个能用的原型出来。当时我翻了一圈模型库最终拍板用 TensorFlow 的 Inception-v3 配合迁移学习来做前后一周多点就交付了可用的 Demo。这篇文章把整个链路完整复盘一遍从为什么选 Inception-v3、环境与数据怎么准备到迁移学习训练、参数调优、推理部署都覆盖到适合有点 Python 基础、想系统跑通 TensorFlow Inception-v3 图像识别项目的朋友直接参考。1. 选型复盘为什么最后选了 Inception-v3 而不是 VGG 或 ResNet1.1 图像识别项目的第一道选择题做图像识别第一个绕不开的问题就是模型选型。现在摆在新手面前的模型实在太多VGG、ResNet、DenseNet、EfficientNet、ViT 还有各种轻量级网络每个都在 ImageNet 上刷过分。但对一个要快速落地、要部署、要维护的中小型分类任务来说选模型不能只看榜单指标还要看生态成熟度、显存开销、部署难度和社区踩坑资料的数量。我这边项目的数据规模不大大约几千张图片5 个类别训练资源也有限。这种场景根本没必要从零训一个大网络更合理的方式是拿 ImageNet 预训练权重做迁移学习把网络当成一个不错的特征提取器只训练后边接上的分类头。一旦锁定迁移学习这个方向Inception-v3 的优势就很明显了。1.2 Inception-v3 的几个关键特性Inception-v3 是 Google 在 2015 年之后逐步演进出来的卷积网络结构核心思路是在同一层里用多个不同尺寸的卷积核并行提取特征再把结果拼在一起让网络自己决定在哪个尺度上更敏感。简单说它不像 VGG 那样只会用 3x3 小卷积一层层堆而是把 1x1、3x3、5x5 卷积和池化放在一个模块里开会讨论最终输出更有表达力的特征。这个设计直接带来两个好处。第一是参数效率高Inception-v3 参数量大约 2380 万比 VGG16 的 1.38 亿少了一个量级模型文件在 90MB 上下训练和推理的压力都小很多。第二是输入分辨率高它原生要求 299x299 的输入尺寸比 VGG/ResNet 常用的 224x224 大了不少对细小纹理、花瓣边缘这类细节特征的保留更友好。另外Inception-v3 内部使用了 Batch Normalization每一层的输入都被标准化过训练收敛速度比早期模型快得多对学习率的敏感度也会低一些。做迁移学习时BN 层的 训练模式/推理模式 切换很关键这块的参数处理我在后面专门讲。1.3 和常用模型的横向对比为了说服自己我当时把几个主流模型拉了一张表模型输入尺寸参数量模型大小计算开销迁移学习友好度VGG16224x2241.38亿约500MB高结构简单但太占资源ResNet50224x224约2560万约98MB中残差结构稳定通用性强Inception-v3299x299约2380万约90MB中低BN 层细节多总体很顺手EfficientNetB0224x224约530万约20MB低效果好但社区踩坑资料相对少VGG16 虽然结构最直观但 500MB 的模型体积和巨大的计算量直接劝退。ResNet50 是个可靠的选择不过当时项目里对图像细节要求较高299x299 的 Inception-v3 更匹配。EfficientNet 在同参数量下精度确实漂亮可它依赖 Compound Scaling调参思路跟常规 CNN 不太一样遇到问题能查到的实战案例也少一些。最终选择 Inception-v3 的理由可以归纳成三句话它足够强模型不过分大遇到问题几乎都能搜到前人踩坑的记录。对一个要快速交付的原型来说这三点比什么都重要。2. 环境准备TensorFlow 版本、目录组织与数据增强2.1 TensorFlow 版本选型和安装细节项目用的是 TensorFlow 2.x我在本机选了 2.15 这个版本。这里提醒一句不要盲目追新2.16 之后 Keras 3 的 API 有一些底层变动网上很多老教程的代码直接跑会报兼容性错误。2.10 到 2.15 区间里挑一个配合官方文档和社区资料都比较好排查问题。安装方式很简单CPU 环境直接pip install tensorflow就够了有 NVIDIA GPU 的话建议安装对应的 CUDA 支持版本但千万别在安装阶段卡太久。实际操作中如果只是跑迁移学习的原型CPU 也能出结果就是慢一些。我这边用了一张普通显卡显存 8GB训练过程还算流畅显存紧张的朋友可以把 batch size 调小。装完以后建议立刻跑一段验证代码确认环境正常我习惯用一个极简测试import tensorflow as tf print(tf.__version__) print(tf.config.list_physical_devices(GPU))如果只打印版本没有 GPU 信息也没关系CPU 一样能跑后面训练慢一点而已。2.2 数据集目录组织与加载方式数据集我用了网上很常见的一个公开花卉分类数据集一共 5 个类别雏菊、蒲公英、玫瑰、向日葵、郁金香。原始图片尺寸参差不齐有的横构图有的竖构图有的还带水印。拿到数据后第一件事就是重新组织目录结构TensorFlow 的image_dataset_from_directory能直接按目录名推断标签所以目录命名和层级一定要规范data/ train/ daisy/ dandelion/ roses/ sunflowers/ tulips/ validation/ daisy/ dandelion/ roses/ sunflowers/ tulips/ test/ daisy/ dandelion/ roses/ sunflowers/ tulips/我是按大约 7:2:1 的比例把图片切到训练、验证、测试三个集合里。这里有个容易踩的认知差训练集和验证集一定要来自不同的图片不能把同一张图既放训练又放验证。数据量本来就不大如果切分不干净后面画的准确率曲线会特别好看但一上真实数据就露馅。加载代码用官方封装的 API 最省事train_ds tf.keras.preprocessing.image_dataset_from_directory( data/train, validation_split0.2, subsettraining, seed123, image_size(299, 299), batch_size32 ) val_ds tf.keras.preprocessing.image_dataset_from_directory( data/train, validation_split0.2, subsetvalidation, seed123, image_size(299, 299), batch_size32 )注意这里我直接用validation_split从训练目录里切了 20% 出来当验证集配合seed固定随机分割保证每次跑的验证集一致。image_size(299, 299)是必须写对的因为 Inception-v3 的输入尺寸就是 299x299写小了后面模型直接报形状不匹配的错误。2.3 预处理与数据增强图片读进来以后像素值范围是 0 到 255不能直接喂给预训练模型。TensorFlow 官方为 Inception 系列提供了专门的预处理函数from tensorflow.keras.applications.inception_v3 import preprocess_input这个函数会把像素值从 0~255 缩放到 -1~1 区间符合 Inception-v3 预训练时看到的数据分布。这一步千万别省也不要用自己写的x / 255.0随便替因为预训练权重的期望输入就是经过这个预处理函数处理的。数据增强我选择用 Keras 内置的增强层直接组装在模型里或者放在Dataset管道里。对于花卉分类最有用的增强是随机翻转、随机旋转和随机缩放data_augmentation tf.keras.Sequential([ tf.keras.layers.RandomFlip(horizontal), tf.keras.layers.RandomRotation(0.1), tf.keras.layers.RandomZoom(0.1), ])用的时候可以直接train_ds train_ds.map(lambda x, y: (data_augmentation(x, trainingTrue), y))或者把增强层放在模型的顶部。我个人建议放在模型顶部这样推理阶段可以关掉增强训练阶段自动开启。增强的作用是让模型见过更多畸形的图降低过拟合尤其是数据集只有几千张的情况下这个操作基本是必做的。3. 迁移学习核心流程把 Inception-v3 变成自己的分类器3.1 加载基座模型迁移学习的核心思路是ImageNet 预训练模型已经学会了识别边缘、纹理、形状等通用视觉特征这些特征对花卉分类同样有效。我们要做的不是从零教它看世界而是让它把已经练好的眼睛借给我们用。加载基座模型的代码非常简短但细节藏在参数里base_model tf.keras.applications.InceptionV3( weightsimagenet, include_topFalse, input_shape(299, 299, 3) )weightsimagenet表示加载在 ImageNet 上训练好的权重第一次运行时会自动从远程仓库下载到本地缓存。include_topFalse则是把原来 ImageNet 那 1000 类的分类头整个去掉只保留卷积基座。这一步很重要——我们的任务只有 5 类原分类头对我们毫无意义而且它的全连接层参数量巨大留着只会拖慢训练和推理。加载完以后先把整个基座冻结起来base_model.trainable False冻结的意思是这些层的权重在反向传播中不更新我们只把基座当做一个固定特征提取器训练只作用于后面新加的分类层。3.2 在基座之上拼接自定义分类器分类头的设计我参考了官方迁移学习教程的经典做法用了全局池化 Dropout 全连接三板斧inputs tf.keras.Input(shape(299, 299, 3)) x tf.keras.applications.inception_v3.preprocess_input(inputs) x base_model(x, trainingFalse) x tf.keras.layers.GlobalAveragePooling2D()(x) x tf.keras.layers.Dropout(0.2)(x) outputs tf.keras.layers.Dense(5, activationsoftmax)(x) model tf.keras.Model(inputs, outputs)GlobalAveragePooling2D把基座输出的每个特征图压缩成一个数值整个特征图组变成一个向量。这样做的优势是没有额外引入大参数量的全连接层大幅降低了过拟合风险。后面接一个 Dropout 再进 DenseDropout 同样是为了在只有几千张训练图时抑制过拟合。Dense 输出 5 个节点对应 5 类花卉激活函数用 softmax输出的是每个类别的概率分布。这里有一个容易被忽略但极其重要的细节base_model(x, trainingFalse)中的trainingFalse必须显式指定。因为 Inception-v3 内部有 Batch Normalization 层在训练模式和推理模式下行为完全不同。如果冻结基座却不传trainingFalseBN 层会按照训练模式去更新自身的统计量导致预训练特征被破坏训练过程中验证集准确率忽上忽下。3.3 两阶段训练先冻后微整个训练流程我拆成了两个阶段这也是迁移学习的标准打法。第一阶段是冻结训练只训练分类头。编译的时候优化器用 Adam学习率 0.001损失函数用sparse_categorical_crossentropy对应的标签是整数索引model.compile( optimizertf.keras.optimizers.Adam(learning_rate0.001), losssparse_categorical_crossentropy, metrics[accuracy] ) history model.fit( train_ds, validation_dataval_ds, epochs10 )第一阶段通常很快就能看到验证准确率冲到 90% 以上因为预训练基座提取的特征本来就很强分类头只是在学习这些特征到类别标签的映射。第二阶段是解冻微调。当第一阶段的准确率曲线趋于平缓后把基座的一部分层解冻用更小的学习率让整个网络适配我们的数据分布。这里做两个关键操作一是不要把整个基座全部解冻通常只解冻后 1/3 左右的层前面提取通用特征的层保持冻结二是学习率必须调低我习惯从 1e-4 开始如果验证集 loss 还在下降可以继续降到 1e-5。base_model.trainable True for layer in base_model.layers[:220]: layer.trainable False model.compile( optimizertf.keras.optimizers.Adam(learning_rate1e-4), losssparse_categorical_crossentropy, metrics[accuracy] ) model.fit( train_ds, validation_dataval_ds, epochs10 )为什么学习率必须低因为基座里囤积了千锤百炼的预训练权重如果还用 0.001 的学习率去更新它们一个 batch 就能把原有知识冲得七零八落这在领域里叫灾难性遗忘。用小学习率慢慢地调模型能在保留通用特征的前提下把后几层学到的高级语义特征往花卉这个特定任务上偏移。两个阶段加起来我在项目里大概跑了 20 到 30 个 epoch最终测试集准确率稳定在 94% 左右。对于几千张图、5 个类别的任务来说这个结果已经完全可以交付了。4. 训练日报参数记录、指标观察与五个避坑点4.1 关键训练参数速查表不同项目的参数会有所差别但以下这组参数在我验证过的几个类似任务里表现都稳定可以直接作为起点参数取值说明输入尺寸299x299x3Inception-v3 固定要求Batch Size32显存不足就降到 16初始学习率0.001仅训练分类头时使用微调学习率1e-4 到 1e-5解冻后使用必须小于初始值优化器Adam不需要额外调 momentum损失函数sparse_categorical_crossentropy标签为整数索引时的标准选择Epochs10 10先冻结 10再微调 10Dropout0.2分类头里的随机失活比例4.2 训练曲线的读法训练过程最需要关注的不是训练集准确率而是验证集准确率和验证集 loss。第一阶段的训练日志里通常会出现训练准确率一路走高、验证准确率却在一个平台期晃悠的情况。这说明分类头学得差不多了基座特征和任务之间还有一些语义鸿沟第二阶段微调就是为了弥合这个鸿沟。如果验证集 loss 在几个 epoch 后不降反升而训练集 loss 还在下降这就是过拟合的典型信号。解决手段无非几种加强数据增强、增加 Dropout、减少微调的层数、或者提前停止。不要一上来就堆数据先把增强和 Dropout 的旋钮拧到合理位置。4.3 这次踩过的五个坑和完整排查过程第一个坑是权重加载失败。第一次运行InceptionV3(weightsimagenet)时正好赶上网络不稳定权重下载中断了好几次后续每次训练都报找不到权重文件的错误。当时的排查过程是先确认缓存目录权限发现文件不完整清掉损坏缓存后换了一段稳定网络重新下载问题解决。提醒一句weightsimagenet自动下载的缓存文件在用户主目录下的.keras文件夹里损坏时把对应目录删掉重来即可别在代码层面折腾。第二个坑是输入尺寸不匹配。我一开始图省事把image_size写成了(224, 224)结果模型第一个卷积层直接报ValueError: Input 0 of layer inception_v3 is incompatible with the layer。排查思路很简单看模型期望的输入形状和实际喂进去的形状是不是一致。Inception-v3 的所有默认配置都围绕 299x299 展开尺寸是硬约束没得商量。第三个坑是显存溢出。训练中途报CUDA error: out of memory原因是 batch size 32 加上 299x299 输入太占显存。我把 batch size 降到 16同时把图像预处理和增强的算子尽量放进加载管道而不是占着 GPU 内存问题缓解。数据量小但显存也小的场景这是最实用的解法。第四个坑是 BN 层导致验证集准确率异常。冻结基座时没传trainingFalse训练阶段模型表现得很好可验证阶段准确率像过山车。后来意识到这是 BN 层统计量被训练模式污染了冻结层的模型调用统一加上trainingFalse后恢复正常。第五个坑是类别不平衡。5 类花卉里玫瑰图片明显少于其他几类模型在训练日志里对玫瑰的召回率偏低。我的处理方式是利用tf.data的rejection_resample做数据重采样让每个 batch 里各类别比例更均衡。如果不想在数据管道上折腾也可以给 model.fit 传class_weight参数效果类似。排查这些坑有一个共同的心法不要只看错误信息表面要追溯到数据流的形状、模型参数的状态、以及缓存文件的状态。大部分图像识别训练问题都逃不过这三个环节。5. 模型导出与图片推理的实战经验5.1 模型保存与加载训练完成后模型保存目前推荐用 Keras 3 的原生格式一句代码搞定model.save(flower_model.keras)如果需要部署到服务端或边缘设备SavedModel目录格式更通用model.save(saved_model_dir)会自动生成包含模型结构和权重的完整目录。不建议只存权重 h5 文件因为那样加载时必须自己重新拼模型结构容易在层名对上出问题。加载模型同样简单loaded_model tf.keras.models.load_model(flower_model.keras)加载后跑一次loaded_model.summary()确认结构完整顺便看一下最后一层输出的类别数对不对。5.2 推理代码的思路与细节实际的推理代码我需要处理一张图片从文件系统到输出概率的完整链路。这里最容易翻车的是图像打开后可能带透明通道或者被保存成非 RGB 格式。我习惯用 PIL 显式转换from PIL import Image import numpy as np import tensorflow as tf class_names [daisy, dandelion, rose, sunflower, tulip] def load_image(path): img Image.open(path).convert(RGB) img img.resize((299, 299)) arr np.array(img).astype(float32) return arr def predict_top_k(model, path, k3): img load_image(path) img tf.keras.applications.inception_v3.preprocess_input(img) img_batch np.expand_dims(img, axis0) probs model.predict(img_batch, verbose0)[0] top_indices np.argsort(probs)[::-1][:k] return [(class_names[i], round(float(probs[i]), 4)) for i in top_indices]用过preprocess_input后图片需要在 RGB 格式下进行缩放PIL 的convert(RGB)就是保证这一点。np.expand_dims把单张图片变成尺寸为(1, 299, 299, 3)的 batch因为模型要求输入带 batch 维度这是新手容易漏掉的一个细节。推理阶段亲测下来CPU 上单张图片大约 300 到 600 毫秒GPU 上几十毫秒。如果对速度敏感后续可以转 TFLite 或 ONNX我这边没有做但对实时性要求高的场景是必经之路。5.3 一个部署时的取巧建议图像识别模型交付后如果对方希望快速体验效果没有必要单独做前后端工程。直接用 Gradio 或类似工具包一层界面上传图片就能看到分类结果和各个类别的置信度对内部演示特别方便。我在这个项目里就做了这么一个演示用的界面对方拿去给业务方一看需求确认的效率明显高了很多。最后说一点实际操作中的体会跑通一个 Inception-v3 图像识别项目并不难真正的门槛在于理解每个参数为什么这么设、每个坑为什么会出现。把冻结训练、解冻微调、BN 层行为这几个关键点吃透换数据集、换分类任务时也能快速迁移。如果你正卡在某个环节对照上面的流程一步步排查应该能少走不少弯路。

相关新闻

PyTorch实现简单分类网络:MNIST手写数字识别全流程教程

PyTorch实现简单分类网络:MNIST手写数字识别全流程教程

写个简单的分类网络,没想到成了我这些年被问得最多的一篇教程。倒不是说它有多高深,而是很多刚接触PyTorch的朋友,恰恰需要这样一个“足够简单又不敷衍”的完整例子——把全流程跑通,再回头啃文档,效率高得多。这篇东西…

2026/10/13 22:20:57 阅读更多 →
PS5控制器Linux HID协议兼容性实践

PS5控制器Linux HID协议兼容性实践

我无法基于当前输入生成符合要求的博文。 原因如下: 项目标题“AnyPS5”缺乏明确指向性,未说明是硬件改装、模拟器方案、跨平台兼容层、开发工具链,还是其他技术方向; 项目正文为空,无任何功能描述、技术目标、实现…

2026/10/13 22:20:57 阅读更多 →
AnyPS5:面向PS5的轻量级增强工具链设计与实践

AnyPS5:面向PS5的轻量级增强工具链设计与实践

1. 项目概述:一个被误读的命名现象,而非技术实体“AnyPS5”这个词最近在多个内容平台频繁出现,但如果你点进去看,大概率会发现它既不是某款新发布的硬件设备,也不是索尼官方推出的软件工具,更不是某个开源社…

2026/10/13 22:20:57 阅读更多 →

最新新闻

程序员如何培养“设计师的眼睛”:从经典包豪斯栅格到日常 UI 找茬训练法

程序员如何培养“设计师的眼睛”:从经典包豪斯栅格到日常 UI 找茬训练法

在前端产研团队中,我们经常能听到这样的争论: 资深 UI 设计师走查页面时,皱着眉头说:“这个图标和旁边的文字不对劲,往上偏了 2 像素;这块卡片的投影太脏了;两个区块之间的呼吸感完全断了。”坐…

2026/10/13 23:18:21 阅读更多 →
SpringBoot 2.3+ MySQL中hibernate_sequence报错解决方案

SpringBoot 2.3+ MySQL中hibernate_sequence报错解决方案

1. 项目概述:为什么这个标题值得深挖?SpringBoot 2.3.0 是一个承前启后的关键版本——它正式移除了对 javax.* 包的默认依赖,全面转向 jakarta.* 命名空间;同时 Hibernate 5.4.17 成为默认 JPA 实现,而该版本对数据库序…

2026/10/13 23:18:21 阅读更多 →
深入理解5g<五十六>UM的接收过程

深入理解5g<五十六>UM的接收过程

5G RLC UM(Unacknowledged Mode,非确认模式)接收端的主要职责是**按序重组并向上层递交RLC SDU**,同时通过窗口机制和定时器来管理乱序、分段和丢失的PDU。其过程严格遵循3GPP TS 38.322规范。### 📦 核心状态变量与重…

2026/10/13 23:18:21 阅读更多 →
WBCE损失重写:动态加权、梯度聚焦与标签可信度建模

WBCE损失重写:动态加权、梯度聚焦与标签可信度建模

1. 项目概述:WBCE损失重写不是调参,而是对分类任务底层逻辑的重新校准“WBCE损失重写”这个标题乍看像一个技术微调动作,但实际它指向的是深度学习分类任务中一个被长期低估、却直接影响模型泛化能力与业务落地效果的核心环节——加权二元交叉…

2026/10/13 23:18:21 阅读更多 →
Python文本预处理与词频可视化:从原始文本到词云图实战

Python文本预处理与词频可视化:从原始文本到词云图实战

1. 从原始文本到可视化:为什么预处理决定了词频图的成败很多人拿到一段文本,第一反应就是直接丢进词频统计工具里跑,结果出来的图要么是一堆"的""了""是"占满画面,要么是各种标点符号和乱码混在一起…

2026/10/13 23:18:21 阅读更多 →
免费帝国插件内容流水线搭建:采集、伪原创、发布与推送全流程避坑指南

免费帝国插件内容流水线搭建:采集、伪原创、发布与推送全流程避坑指南

简介:这是一款面向站长与SEO从业者的帝国CMS配套插件,聚焦关键词采集、文章采集、伪原创改写、自动发布与搜索引擎推送等环节,帮助希望提升站点收录与排名、又缺乏持续内容产出精力的用户搭建半自动化的优化流程。资源以zip压缩包形式提供&am…

2026/10/13 23:17:20 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →