水下目标图像语义分割数据集详解:加载、增强与避坑指南
简介面向水下目标语义分割任务这份资料提供完整的八分类图像分割训练与验证数据图像为640×480分辨率的水下场景前景覆盖人类、海草、珊瑚、岩石、鱼等典型目标背景简洁、标注质量较好适合入门级语义分割模型训练、调参与算法对比。数据已做随机旋转等预处理并按训练集与测试集划分训练集含1525张原图与1525张掩码标签测试集含110张原图与110张掩码标签可直接用于模型训练和性能评估。压缩包共2000个文件整体约159MB其中JPG为原始水下图像BMP为彩色语义分割标签另附一个Python可视化脚本可随机抽取样本并生成原图、GT图及GT叠加蒙版图方便快速检查标注与预测效果。目前已有1081人学习这一资源适合需要现成水下分割数据集的研究者、学生或开发者也可用于课程设计、算法验证及论文实验的基准数据。1. 图像分割数据集这份水下目标8分类资源到底能做什么水下图像分割一直比陆地上难做原因不只是光线衰减光是数据集就不好找。通用分割数据集里几乎没有水下场景而水下机器人和水下视觉的项目又恰恰需要这类标注数据来做语义分割验证。这份资源是一套完整的水下目标图像语义分割数据集训练集1525张图加1525张mask测试集110对分辨率640x480前景标注了人类、海草、珊瑚、岩石、鱼等8个类别背景为0。它还附带了可视化代码能把原图、GT和叠加图一次生成出来检查标注质量非常直观。适合正在跑语义分割模型、需要一个干净且带预处理的数据集来验证算法效果的从业者也适合做水下目标检测与分割的课程设计和横向项目。数据本身做了随机旋转等预处理背景相对简单前景区域丰富标注质量在同类开源数据里算不错的。我拿到手第一反应是先用可视化脚本确认标签语义再做一套标准的数据加载管线。下面把目录结构、读取方式、训练前处理和踩过的坑一次说清楚。2. 数据集结构与标签体系8个前景类别与彩色mask的读取逻辑2.1 目录结构与文件命名train/test划分与bmp格式这套数据的组织方式很常规train和test两个大目录各自下面再拆images和masks。训练集1525张图像配1525张mask测试集110张配110张文件一一对应没有多余文件。dataset_root/ ├── train/ │ ├── images/ │ │ ├── d_r_617_.bmp │ │ ├── d_r_51_.bmp │ │ └── ... │ └── masks/ │ ├── d_r_617_.bmp │ ├── d_r_51_.bmp │ └── ... └── test/ ├── images/ └── masks/目录数量格式内容train/images1525bmp640x480 水下原图train/masks1525bmp与images同名的彩色masktest/images110bmp640x480 水下原图test/masks110bmp与images同名的彩色mask图像和mask的文件名完全一致只有根目录不同训练时按文件名拼接路径即可。bmp格式是未压缩位图读取时不会遇到jpg的压缩失真问题颜色信息保留得完整这对后面做颜色到类别的映射很关键。文件名里d_r_这种前缀我理解是数据集编号加rotation标记说明这批数据已经做过旋转增强所以你看到的重复场景会以不同角度出现。这不影响训练反而相当于扩大了数据分布。2.2 调色板mask与RGB彩色mask不同的读取方式决定训练对不对mask是调色板格式的彩色图像0是背景前景区域用调色板渲染成不同颜色方便人眼区分。这里有一个非常容易翻车的点用PIL打开mask时它的模式是P也就是每个像素只存一个索引值显示的时候通过调色板映射成RGB。而用cv2.imread直接读会得到一个三通道的BGR数组索引值被渲染成了彩色像素。这两种读法没有对错之分用途不同。显示和可视化时用RGB模式训练当标签用时用P模式索引。如果训练时把三通道彩色mask直接当标签送入CrossEntropyLoss模型会崩溃——类别数变成三通道的数值组合而不是你预期的8类或9类。我的建议是把mask读取统一封装成一个函数默认保持P模式返回索引数组需要展示时再单独转RGB。这样训练代码里就不会出现通道数对不上的问题。另外注意数据集里背景0是确定存在的前景类别如果按1到8组织那么标签数组的类别总数是9包含背景计算类别权重时要按9去算。3. 加载与增强全链路把1525张训练图送进语义分割模型3.1 图像与mask同步加载分辨率、通道与数据类型对齐拿到数据后第一步不是写模型而是把加载函数写对。图像转成RGB浮点数组范围归一到0到1mask保持整数索引范围不动。这两个数组的尺寸必须一致都是640x480但实际训练时往往要缩放到模型输入尺寸缩放时两者的插值方式不能混用。from PIL import Image import numpy as np def load_pair(image_path, mask_path, target_size(512, 512)): # 图像统一转RGBmask保持P模式 image Image.open(image_path).convert(RGB) mask Image.open(mask_path) # 图像用双线性插值mask必须用最近邻 image image.resize(target_size, Image.BILINEAR) mask mask.resize(target_size, Image.NEAREST) # 图像归一化到0-1mask保留类别索引 img_np np.array(image, dtypenp.float32) / 255.0 mask_np np.array(mask, dtypenp.int64) return img_np, mask_np这里有几个关键点。第一mask打开后不要convert(RGB)P模式直接转numpy数组拿到的就是索引省去颜色映射这一步。第二resize两个图时插值方式必须不同图像用BILINEAR保留细节mask用NEAREST保证不会插出新的类别值比如边缘生出个5.7之类的非法索引。第三mask转成int64是因为PyTorch的CrossEntropyLoss要求标签必须是LongTensor类型提前转好避免后面再报类型错误。如果你的模型输入不是512x512把target_size改成8的倍数即可。语义分割模型一般要求输入尺寸能被下采样倍数整除U-Net这类编码器结构对尺寸要求相对宽松但像DeepLabV3用的ASPP模块输入长宽最好是16的倍数否则特征图对齐会有偏差。3.2 数据增强随机旋转与翻转必须保证图像和mask做一模一样的变换原始数据已经做了离线旋转增强但训练自己的模型时往往还想再叠加在线增强。这里最大的坑是图像增强库和mask增强库行为不一致。我曾经见过有人用imgaug对图像做旋转、对mask用cv2.warpAffine单独旋转角度随机数分别生成结果训练到一半发现mask和图像错位模型怎么调都收敛不了。import random from PIL import Image def sync_transform(image, mask, angle_list(90, 180, 270)): # 随机水平翻转 if random.random() 0.5: image image.transpose(Image.FLIP_LEFT_RIGHT) mask mask.transpose(Image.FLIP_LEFT_RIGHT) # 随机旋转90/180/270度 angle random.choice(angle_list) image image.rotate(angle, resampleImage.BILINEAR) mask mask.rotate(angle, resampleImage.NEAREST) return image, mask这套写法用PIL自带的transpose和rotate图像和mask在同一个函数里做同样的变换不会出现随机种子不一致的问题。翻转用FLIP_LEFT_RIGHT旋转用rotate注意mask的resample参数必须是Image.NEAREST。之前有人为了让mask旋转更平滑用了BILINEAR结果边缘出现灰度过渡值这些值在计算损失时全成了额外类别mIoU直接往下掉。如果追求更强的增强常见做法是把albumentations的Compose拆成两个pipeline一个处理image一个处理mask共享同一个random seed。albumentations内部本身就支持同步增强key建议用image和mask两个参数传进去而不是只传image然后手动复制参数——后者是大多数人踩坑的地方。3.3 类别权重计算水下场景背景占比高损失函数要加权水下图像里背景通常占大面积鱼、海草这类前景目标只占一小部分。如果不做类别加权模型很容易陷入全预测背景的局部最优mIoU难看。这里用逆频率加权背景像素多权重大前景像素少权重高等于把损失函数的注意力往小目标上拽。import numpy as np import torch def compute_class_weights(mask_paths, num_classes9): counts np.zeros(num_classes, dtypenp.int64) for mask_path in mask_paths: mask Image.open(mask_path) idx np.array(mask).flatten() counts np.bincount(idx, minlengthnum_classes) # 逆频率加权后归一化让权重均值为1 weights 1.0 / np.maximum(counts, 1) weights weights / weights.sum() * num_classes return torch.tensor(weights, dtypetorch.float32)这里num_classes按9传因为背景0加上8个前景类别。如果你的数据集不含背景索引改成对应的类别数即可。np.bincount的minlength参数必须设置否则当某张mask里缺少某个类别时counts数组长度会变短加和时直接报shape不匹配。实际训练时把weights传给CrossEntropyLoss的weight参数模型就会自动加权。我在这个数据集上试过加权重和不加权重mIoU能差5到8个点差距非常明显。对前景占比更小的类别比如珊瑚这样的小目标还可以把权重再乘一个常数放大效果更激进但要注意别让模型过度偏向某几类而忽略其他。4. 可视化代码验证mask与原图对齐的快速手段4.1 原图、GT、GT叠加原图三图并排输出这套可视化是直接抄作业就能用的。核心理念是把原始图像、GT mask、GT在原始图像上的半透明叠加图并列展示用一张图就能看出标注边界是否贴合目标轮廓、类别有没有错标、有没有漏标的小目标。import matplotlib.pyplot as plt from PIL import Image def visualize_triplet(image_path, mask_path, save_path): # 显示场景统一转RGB不要用P模式索引直接imshow image Image.open(image_path).convert(RGB) mask Image.open(mask_path).convert(RGB) # 叠加图用半透明混合alpha控制透明度 overlay Image.blend( image.convert(RGBA), mask.convert(RGBA), alpha0.5 ) fig, axes plt.subplots(1, 3, figsize(15, 5)) axes[0].imshow(image) axes[0].set_title(Original) axes[1].imshow(mask) axes[1].set_title(GT Mask) axes[2].imshow(overlay) axes[2].set_title(Overlay) for ax in axes: ax.axis(off) plt.tight_layout() plt.savefig(save_path, dpi150, bbox_inchestight) plt.close(fig)这里的要点是mask显示前必须convert(RGB)。P模式的图像在matplotlib里直接imshow显示效果取决于调色板是否被正确识别很多时候会出现全黑或者配色错乱的情况。convert(RGB)以后每个像素被渲染成实际颜色显示结果和你在文件管理器里看到的一致。Image.blend要求两个图像模式相同且尺寸相同所以要先把原图转成RGBA、mask也转成RGBA再混合。alpha取0.5是折中值原图和mask都能看清如果mask类别颜色浅可以适当调到0.6或0.7。4.2 从可视化结果能看出什么三个检查维度可视化不只是为了发效果图更是标注质量检查工具。我每次拿到新数据集都会随机抽几十张图跑一遍重点看三件事。第一边界贴合度mask边缘是否沿着物体轮廓走如果出现明显的锯齿或者偏差超过几个像素说明标注不够精细。第二小目标完整性鱼这种小目标有没有被漏标海草这种大面积目标有没有被断成几段。第三类别混淆岩石和珊瑚颜色相近很容易标串叠加图里能看得很清楚。环节使用格式说明可视化展示RGB三通道imshow前convert(RGB)模型训练P模式索引np.array直接得到类别ID叠加混合RGBAImage.blend前统一转换另外一个实用技巧是用掩码蒙版叠加的方式检查背景和前景区分。原图和水下场景光照不均匀一些暗部区域肉眼看不清是背景还是岩石这时候把GT叠加成黑白模式只保留mask不为0的像素拉大对比度边界问题就暴露得明显。5. 常见问题与避坑mask错位、Loss不降、全背景预测5.1 mask与原图错位增强不同步是最大元凶现象训练中途打印几张预测图发现mask边缘和原图目标轮廓错开错位量不等有的地方差几个像素有的地方差几十像素。原因最常见的两个一是图像和mask用了不同的随机种子做增强几何变换不一致二是resize或旋转时mask用了双线性插值导致边缘像素值被平滑掉读取后的索引值和原图位置对不上。解决把图像和mask放进同一个transform函数用同一个随机状态。PIL实现可以用我上面写的sync_transformalbumentations则直接用Compose同时传image和mask。如果已经用了不同种子训练了一部分直接从检查点重新加载但关闭随机seed重新训练几轮就能恢复。5.2 mask读取后全黑或全白P模式被当成RGB模式处理现象加载mask并转成numpy数组后打印出来全是0或者min是0、max是255。原因用cv2.imread读取调色板mask之后又被convert成RGB索引值被查表变成三通道颜色值再转灰度看的时候就变成了非0即255的模式看起来像全黑全白。解决回到P模式读取。用PIL的Image.open后不要调convert直接转数组。检查一下mask.mode如果是P那么np.array拿到的就是类别索引如果是RGB需要用颜色映射表反查类别索引。5.3 Loss异常高甚至跑到NaN标签里有非法类别值现象训练刚开始loss值就比正常高一个数量级或者训练几千步之后直接变成NaN模型参数输出全是nan。原因mask里存在超出num_classes范围的索引值。这个数据集本身标注是干净的但有可能你在resize时对mask用了BILINEAR插值插值在边缘产生了介于两个类别之间的浮点值四舍五入后可能变成超出范围的类别比如出现25、76这种不该出现的值。CrossEntropyLoss遇到class index超出class num时会直接报错或产生NaN梯度。解决加载mask后先执行np.unique看标签集合确认最小最大值没超出预期。如果发现异常值做一个clip操作把非法索引全部映射到0但要先确认它不是真实的标注信息。训练代码里最好加一个断言打印唯一值数量出现异常直接终止而不是带病训练。5.4 验证集指标虚高但可视化全是背景类别不平衡的假象现象验证集accuracy能到90%以上但把预测结果可视化出来前景区域全被预测成背景只有个别大目标偶尔被识别出来。原因水下数据背景占比太高像素级accuracy只需要预测全部为背景就能拿到高分但这对分割任务没有任何意义。语义分割的核心指标是mIoU尤其是前景类别的IoU只看accuracy会被背景主导。解决评估指标换成每个类别的IoU和mIoU盯着前景类别单独看。训练时的损失函数用类别权重或者换Focal Loss把难分前景样本的权重拉高。这个数据集的测试集只有110张mIoU的计算结果会受单张图影响比较大建议把验证集拆成3折取平均值或者直接用全部训练集的最后10%做验证。5.5 旋转后mask边缘出现杂色点插值方式选错现象旋转90度之后mask边缘出现不属于任何类别的像素值训练时loss在某个batch突然跳动。原因mask.rotate时用了默认的resample参数PIL里默认是BICUBICBICUBIC会基于邻近像素做平滑在两个类别区域交界处产生一个插值出来的中间值。99这个索引在预测结果里完全没有意义。解决mask的所有几何变换统一设置resampleImage.NEAREST包括rotate和resize。图像则用BILINEAR保持视觉细节两者插值策略不同是语义分割数据增强的通识。6. 进阶彩色mask转单通道训练标签的两种方案6.1 RGB颜色映射法从彩色mask反向解析类别ID如果某些mask读出来已经是RGB模式或者你想把mask重新整理成一份单通道的png文件就需要把颜色值映射回类别ID。做法是先统计数据集里所有出现的颜色建立颜色到类别ID的字典然后逐像素替换。import numpy as np from PIL import Image def build_color_map(mask_paths): color_map {} for mask_path in mask_paths: mask np.array(Image.open(mask_path).convert(RGB)) pixels mask.reshape(-1, 3) unique_colors np.unique(pixels, axis0) for color in unique_colors: key (int(color[0]), int(color[1]), int(color[2])) if key not in color_map: color_map[key] len(color_map) return color_map这个build_color_map会把所有mask里出现过的颜色按出现顺序编号。问题在于同一个颜色如果出现在不同语义区域就会映射错所以更稳妥的做法是先用P模式读取原始mask拿到索引再反向确认索引0是背景、其他索引对应哪些颜色然后把颜色表和类别ID对应表保存成json后续训练直接查表。6.2 调色板索引法直接用P模式索引当标签这个数据集本身就是调色板格式所以最简单的方式是别转RGB直接取P模式索引。用np.array读取就是单通道标签完全不需要颜色映射。这里有个实用小技巧用PIL的getpalette方法把调色板颜色打印出来确认每个索引对应的RGB值能帮你建立索引到类别的可视化映射。mask Image.open(train/masks/d_r_617_.bmp) print(mask.mode) # 应该是 P print(mask.getpalette()[:24]) # 前8个颜色的RGB值 label np.array(mask) # 直接得到HxW索引数组6.3 转换后验证确保标签类别数符合预期无论用哪种转换方式写完转换代码后都建议跑一遍全量校验。检查所有mask转换后np.unique的结果是否一致类别数量是否等于背景加前景的总数是否有孤立噪点。对转换后的mask再做一次可视化确认边界没有出现异常的环形值。这一步虽然费时间但能避免训练一整天后才发现数据有问题。这个数据集我拆过一遍之后养成了一个习惯不管拿到什么新分割数据集都先强制走一遍读图、读mask、打印unique值、可视化并排比较的四步检查确认标签语义没问题再写训练脚本。数据没问题训练才不会变成玄学。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Java Socket聊天室实战:TCP连接、多线程与Swing UI协同开发

Java Socket聊天室实战:TCP连接、多线程与Swing UI协同开发

简介:本资源是《Java程序设计实训》课程配套的多人聊天室项目报告,面向计算机专业初学者及Java入门学习者,聚焦多线程、GUI与Socket网络编程三大核心能力训练。报告完整覆盖C/S架构下终端版与GUI版双实现:含服务器监听与多线程客户…

2026/10/10 12:37:16 阅读更多 →
学生信息管理系统需求分析指南:从数据字典到E-R图

学生信息管理系统需求分析指南:从数据字典到E-R图

简介:《学生信息管理系统软件需求说明书》是一份面向学校管理员、普通用户、项目经理、开发测试及维护人员的完整需求分析文档。它围绕基于B/S架构、采用JAVA WEB与SQL数据库的学生信息管理场景,详细规定了学生注册、信息查询修改、选课管理、课程表与教…

2026/10/10 12:37:15 阅读更多 →
从兴趣到竞赛:海口青少儿编程课程选择与机构参考

从兴趣到竞赛:海口青少儿编程课程选择与机构参考

为什么现在要聊编程培训? 少儿编程正从“兴趣点缀”走向长期能力培养。Scratch降低入门门槛,机器人编程把代码与硬件结合,Python、C则承接竞赛与科创需求。海口本地机构数量增长,课程体系、师资稳定性、服务细节差异明显。对家长而…

2026/10/10 12:36:14 阅读更多 →

最新新闻

Harness 工程安全基线:为 AI Agent 编写 SECURITY.md 安全策略文件

Harness 工程安全基线:为 AI Agent 编写 SECURITY.md 安全策略文件

【免费下载链接】learn-harness-engineering Harness engineering beginner tutorial, from 0 to 1 项目地址: https://gitcode.com/gh_mirrors/le/learn-harness-engineering 点击查看 免费下载 SECURITY.md 是面向 Agent 的仓库(agent-first reposito…

2026/10/10 14:07:49 阅读更多 →
ponyc 0.57.1 修复 x86 macOS 上 Xcode 15 链接 Pony 程序失败问题解析

ponyc 0.57.1 修复 x86 macOS 上 Xcode 15 链接 Pony 程序失败问题解析

编程语言编译器语言运行时 【免费下载链接】ponyc Pony is an open-source, actor-model, capabilities-secure, high performance programming language 项目地址: https://gitcode.com/gh_mirrors/po/ponyc 点击查看 免费下载 导读 ponyc 0.57.1 是一次聚焦单一…

2026/10/10 14:07:49 阅读更多 →
LeetCode 139 单词拆分全解析:动态规划、剪枝优化与 Trie 加速

LeetCode 139 单词拆分全解析:动态规划、剪枝优化与 Trie 加速

刷 LeetCode 的人,几乎都会被一道叫“单词拆分”的题拦住过。它排在热门 100 题的中段,题干看起来非常简单:给一个字符串和一个字典,问这个字符串能不能被字典里的单词完整拼出来。但第一次动手写的时候,很容易在贪心、…

2026/10/10 14:07:49 阅读更多 →
每日热门skill-半年228K星,ECC凭什么让AI编程Agent长出肌肉记忆:TaoToken统一Key接入Claude Code与Cursor的配置实录

每日热门skill-半年228K星,ECC凭什么让AI编程Agent长出肌肉记忆:TaoToken统一Key接入Claude Code与Cursor的配置实录

/* 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 14:07:49 阅读更多 →
GGUF 十四个量化版本翻车实录:0731 版本地部署炸显存/掉速的坑全在这

GGUF 十四个量化版本翻车实录:0731 版本地部署炸显存/掉速的坑全在这

GGUF 十四个量化版本翻车实录:0731 版本地部署炸显存/掉速的坑全在这 【免费下载链接】DeepSeek-V4-Flash-0731 项目地址: https://ai.gitcode.com/hf_mirrors/deepseek-ai/DeepSeek-V4-Flash-0731 DeepSeek-V4-Flash-0731 官方发布后,社区里最热…

2026/10/10 14:07:49 阅读更多 →
STM32F423RH与PJ85718DM的HVAC温度监测方案

STM32F423RH与PJ85718DM的HVAC温度监测方案

1. 项目背景与核心需求拆解温度监测这件事,看起来简单,真要做到“本地能看、远程能查、长期稳定”,里面门道不少。我最近在做一个嵌入式和 HVAC(暖通空调)场景下的温度采集方案,主控用的是 STM32F423RH&…

2026/10/10 14:06:48 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* 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 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* 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 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* 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 11:14:58 阅读更多 →

月新闻

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