FlowNet2实战:从零搭建稠密光流估计与视频处理应用
光流估计这件事我在做视频插帧和运动分析的项目里绕不开。早期用过块匹配和Lucas-Kanade那套经典方法小位移还行一旦物体动得快一点、边缘纹理弱一点结果就糊成一片。后来接触到FlowNet系列尤其是FlowNet2才算是真正把稠密光流的质量拉到了能用的水平。这篇就聊聊怎么从零把FlowNet2跑起来生成一张光流图中间踩过的坑、环境配置的细节、推理参数的取舍我都会摊开讲。如果你手头有视频处理、运动估计、自动驾驶感知或者视频编辑的需求想找一个靠谱的稠密光流方案这篇应该能帮你省下不少折腾的时间。1. 先搞清楚FlowNet2到底解决了什么问题1.1 从传统光流到深度学习光流的转折传统光流方法的核心思路是找对应点。以Lucas-Kanade为例它假设一个小窗口内的像素运动是一致的然后通过求解亮度恒定约束方程来估计位移。这个假设在纹理丰富、运动平缓的场景下成立但现实视频里充满了大位移、遮挡、光照变化窗口一放大假设就崩了。Horn-Schunck加了全局平滑约束能出稠密光流但边缘保持得不好物体边界处经常拖出一条尾巴。FlowNet是第一批用卷积神经网络直接回归光流的工作。它的思路很直接把两张连续帧堆叠起来送进网络让网络自己学像素级的位移。FlowNetS用编码器-解码器结构FlowNetC引入相关层correlation layer显式计算两帧特征之间的匹配代价。但初代FlowNet的精度还是打不过当时最好的传统方法尤其是小位移和细节区域。FlowNet2的关键改进在于堆叠和迭代精化。它把多个FlowNet子网络串起来第一个网络出粗略光流后续网络基于前一级的光流和图像特征做残差修正。同时它引入了图像扭曲warping操作把第二帧按照当前估计的光流扭曲到第一帧的坐标系下这样后续网络只需要学习残差难度大大降低。这个设计思路和后来很多光流网络如PWC-Net、RAFT是一脉相承的。1.2 FlowNet2的精度和速度到底什么水平官方在FlyingChairs和FlyingThings3D数据集上训练在Sintel和KITTI基准上评测。以Sintel Final为例FlowNet2的端点误差EPE大约在1.5到2.0像素之间而初代FlowNet在3.0以上。传统方法里表现最好的DeepFlow、EpicFlow大概在1.5到2.5之间FlowNet2已经能持平甚至超越。在KITTI 2015上FlowNet2的Fl-all指标光流误差大于3像素且相对误差大于5%的像素占比能压到10%以内这个水平对于很多实际应用已经够用了。速度方面FlowNet2因为堆叠了多个子网络参数量大在1080Ti上处理一对512x384的图像大约需要0.1到0.2秒也就是5到10 FPS。如果输入分辨率更高时间线性增长。这个速度不算快但比很多迭代优化类的传统方法比如DeepFlow动辄几十秒已经快了几个数量级。如果你的场景对实时性要求极高可能需要考虑FlowNet2的轻量版本或者后来的PWC-Net。1.3 为什么现在还要用FlowNet2你可能会问RAFT、PWC-Net这些后起之秀精度更高、速度更快为什么还要折腾FlowNet2我的实际体会是第一FlowNet2的预训练模型非常成熟官方提供了多个变体的权重开箱即用的稳定性好第二它的代码结构清晰依赖相对简单适合作为学习光流网络的入门跳板第三很多工业场景的模型是几年前部署的FlowNet2仍然是基线你需要复现和对比第四FlowNet2的Caffe实现和PyTorch复现都有选择灵活。所以即便到了今天把FlowNet2跑通仍然是一个有价值的技能点。2. 环境搭建那些官方文档不会告诉你的细节2.1 硬件和基础软件的选择FlowNet2官方代码是基于Caffe的后来有PyTorch复现版本。如果你走Caffe路线需要NVIDIA GPU和CUDA。我实测下来CUDA 9.0或10.0配合cuDNN 7.x比较稳太新的CUDA版本比如11.x在编译Caffe时容易遇到兼容性问题。GPU显存建议至少4GB因为FlowNet2的堆叠结构在推理时中间特征图占用不小512x384的输入大概需要2GB左右如果输入更大就要相应增加。操作系统方面Ubuntu 16.04或18.04是官方测试过的环境CentOS也能跑但依赖库版本需要自己对齐。如果你用WindowsCaffe的编译会比较痛苦建议直接用PyTorch版本或者WSL。Python版本推荐3.6到3.7太新的3.9在装一些老依赖时会有问题。PyTorch路线的话PyTorch 1.0到1.4之间的版本兼容性最好因为很多复现代码是基于这个时期写的。torchvision版本要对应一般0.2到0.4。如果你用更新的PyTorch 2.x可能需要手动改一些API调用比如torch.nn.functional.grid_sample的参数顺序和默认值有变化。2.2 Caffe版本的编译陷阱Caffe编译是最大的拦路虎。首先Makefile.config的配置要仔细。USE_CUDNN : 1要打开CUDA_ARCH要根据你的GPU计算能力设置比如1080Ti是6.1V100是7.0。如果设错了编译能过但运行时会报no kernel image is available。其次Boost、Protobuf、Glog、Gflags这些依赖的版本要匹配。我遇到过Protobuf 3.6和Caffe自带代码不兼容的情况报错是一堆关于RepeatedPtrField的模板错误。解决办法是降级到Protobuf 3.5或者用Caffe自带的./scripts/proto重新生成。Glog在0.4版本之后改了APIgoogle::InitGoogleLogging的调用方式有变如果编译报错就换0.3.5。还有一个坑是OpenCV版本。Caffe默认用OpenCV 2.4的API如果你系统装的是OpenCV 3.x或4.xcv::imread的返回类型和CV_LOAD_IMAGE_COLOR这些常量名都变了。要么改代码适配要么在Makefile里指定OpenCV 2.4的路径。我建议直接用OpenCV 3.4然后手动改几处调用工作量不大。2.3 PyTorch版本的依赖安装PyTorch版本省去了编译Caffe的麻烦但依赖也不少。核心是numpy、scipy、opencv-python、matplotlib。scipy用来做图像扭曲和插值opencv-python用来读写图像和可视化光流。版本上numpy不要超过1.19因为老代码里有些np.float的用法在新版被移除了。opencv-python用3.4.x或4.1.x都行但4.5改了cv2.findContours的返回值如果代码里用到要注意。如果你要用官方的预训练权重需要下载.pth文件。这些文件通常几百MB下载后放到指定目录。注意权重的键名要和模型定义完全对应如果是从Caffe转换过来的权重键名可能有module.前缀或者层名不一致需要写脚本做键名映射。我一般会先打印模型state_dict的键再和权重文件的键做对比找出差异后手动改。3. 数据准备与输入格式的讲究3.1 图像对的要求FlowNet2的输入是两张连续帧通常命名为frame_0001.png和frame_0002.png。图像格式支持PNG、JPG但建议用PNG避免压缩伪影因为光流对高频细节敏感JPG的块效应会干扰匹配。图像尺寸最好是32的倍数因为网络里有多次下采样如果尺寸不是32的倍数在解码器上采样时会出现尺寸不匹配。我一般会先把图像resize到最近的32倍数比如1280x720就resize到1280x736或者直接裁剪。图像的内容也有讲究。如果两帧之间亮度变化剧烈比如闪光灯、曝光调整光流质量会下降因为亮度恒定假设被破坏了。如果场景里有大面积无纹理区域比如白墙、天空光流在这些地方会不可靠网络只能靠平滑先验去猜。这些是光流方法的固有局限不是FlowNet2独有的问题但你在评估结果时要心里有数。3.2 预处理归一化和尺寸调整FlowNet2的输入图像需要归一化到[0,1]或者[-1,1]范围具体取决于训练时的设置。官方Caffe版本通常用均值减法均值是ImageNet的均值或者数据集自己的均值。PyTorch版本一般直接除以255。如果你不确定可以看模型定义里的transform部分或者试两种方式看哪种输出更合理。尺寸调整我建议用双线性插值不要用最近邻因为最近邻会引入锯齿影响匹配。如果原始图像很大比如4K直接送进网络会爆显存需要先缩小。缩小的比例要记录因为输出的光流是在缩小后的尺度上的如果要映射回原图需要按比例放大光流值。比如缩小了2倍光流值也要乘以2。3.3 批量推理的组织方式如果你要处理视频逐帧推理效率低。可以把连续帧组成多个图像对批量送进网络。但要注意FlowNet2的堆叠结构对批量大小敏感批量太大会爆显存太小则GPU利用率低。我一般用批量大小4到8具体看显存。另外图像对之间如果有重叠比如帧1-2、帧2-3、帧3-4可以共享一些计算但FlowNet2的代码通常不直接支持需要自己改。数据加载器方面PyTorch的DataLoader配合num_workers可以加速但num_workers设太大反而会因为进程间通信开销拖慢。我一般设4到8。如果图像已经预加载到内存num_workers可以设0避免多进程拷贝开销。4. 模型加载与推理的核心步骤4.1 模型定义的关键参数FlowNet2的模型定义里有几个关键参数需要理解。rgb_max是输入图像的亮度最大值通常是255.0用来做归一化。div_flow是输出光流的缩放因子官方设置是20.0意思是网络输出的原始值要除以20才是真实光流。这个参数在训练时确定推理时必须一致否则光流值会差20倍。网络结构上FlowNet2由FlowNet2C、FlowNet2S、FlowNet2CS、FlowNet2CSS、FlowNet2SD等多个子网络组成。FlowNet2CS是C和S的串联FlowNet2CSS是C、S、S的串联FlowNet2SD是S和SD的串联。不同的组合精度和速度不同FlowNet2默认用CSS组合精度最高但最慢。如果你追求速度可以用FlowNet2S或FlowNet2CS。4.2 权重加载的常见报错与修复加载权重时最常见的报错是键名不匹配。比如权重文件里的键是module.conv1.weight而模型定义里的键是conv1.weight差一个module.前缀。这是因为权重是在DataParallel或DistributedDataParallel下保存的。解决办法是遍历权重字典把module.前缀去掉再加载。另一个报错是形状不匹配。比如权重里的卷积核是[64, 3, 7, 7]而模型定义里是[64, 3, 5, 5]说明模型版本和权重版本不对应。这时候要么换权重要么改模型定义。我一般会先打印两边的键和形状用集合操作找出差异然后决定是改代码还是换权重。还有一种情况是权重文件是Caffe格式.caffemodel需要转换成PyTorch格式。转换脚本通常需要Caffe环境或者用caffe2pytorch这类工具。转换时要注意Caffe的卷积核布局是[out_channels, in_channels, h, w]和PyTorch一致但全连接层的布局可能不同需要转置。4.3 推理流程的代码骨架推理的核心流程是读入两张图像归一化转成Tensor送进模型得到光流输出乘以div_flow然后可视化或保存。下面是一个简化的代码骨架import torch import cv2 import numpy as np from model import FlowNet2 # 初始化模型 model FlowNet2(rgb_max255.0, div_flow20.0) model torch.nn.DataParallel(model).cuda() model.load_state_dict(torch.load(FlowNet2_checkpoint.pth.tar)[state_dict]) model.eval() # 读入图像 img1 cv2.imread(frame_0001.png) img2 cv2.imread(frame_0002.png) # 预处理 img1 cv2.resize(img1, (512, 384)) img2 cv2.resize(img2, (512, 384)) img1 img1[:, :, ::-1].astype(np.float32) # BGR to RGB img2 img2[:, :, ::-1].astype(np.float32) # 转Tensor img1 torch.from_numpy(img1).permute(2, 0, 1).unsqueeze(0).cuda() img2 torch.from_numpy(img2).permute(2, 0, 1).unsqueeze(0).cuda() # 推理 with torch.no_grad(): flow model(img1, img2) # 后处理 flow flow.squeeze(0).permute(1, 2, 0).cpu().numpy()这段代码里rgb_max和div_flow要和权重训练时一致。permute的顺序是[C, H, W]因为PyTorch的卷积要求通道在前。unsqueeze(0)是加批量维度。推理时用torch.no_grad()关闭梯度省显存。4.4 光流可视化颜色编码的细节光流的可视化通常用颜色编码色相Hue表示方向饱和度Saturation表示大小亮度Value固定为255。OpenCV的HSV空间里H范围是0到179对应角度0到360度。所以要把光流角度映射到H通道大小映射到S通道。具体做法是先计算光流的幅值和角度角度转成H值幅值归一化到0到255作为S值V全设255然后转成BGR显示。注意角度要映射到0到179因为OpenCV的H通道是0到179。另外幅值归一化时可以用最大幅值或者固定阈值固定阈值的好处是不同图像之间可比但可能过曝或欠曝。def flow_to_color(flow): h, w flow.shape[:2] hsv np.zeros((h, w, 3), dtypenp.uint8) mag, ang cv2.cartToPolar(flow[:,:,0], flow[:,:,1]) hsv[:,:,0] ang * 180 / np.pi / 2 hsv[:,:,1] cv2.normalize(mag, None, 0, 255, cv2.NORM_MINMAX) hsv[:,:,2] 255 return cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)这段代码里cartToPolar把x和y方向的光流转成幅值和角度。角度乘以180/pi/2是因为OpenCV的H通道是0到179而角度是0到360度所以除以2。normalize把幅值拉到0到255。最后cvtColor转成BGR方便显示。5. 实测中的意外情况与排查思路5.1 输出光流全黑或全灰第一次跑通代码后我遇到输出光流图全黑的情况。排查下来有几个可能原因。第一div_flow没乘网络输出的原始值很小因为训练时除以了20不乘回来就接近0。第二图像归一化不对如果输入是0到255的原始值而模型期望0到1网络会输出异常。第三权重没加载成功模型用的是随机初始化输出自然是噪声。排查时可以先打印光流的数值范围正常应该在-100到100之间对于512x384的图像如果全是0或者NaN就是上述问题。5.2 光流方向反了有一次我发现光流方向整体反了180度物体向右动光流却指向左。原因是图像对的顺序搞反了。FlowNet2估计的是从第一帧到第二帧的光流如果你把img1和img2传反了光流方向就反了。检查方法是找视频里一个明显向右移动的物体看光流颜色是不是偏红假设你的颜色编码里右是红。如果偏青就是反了。5.3 边缘区域光流噪声大图像边缘的光流经常很乱这是因为卷积网络在边界处有padding边界像素的感受野不完整。另外如果物体移出了画面边界处没有对应点光流本身就不定义。缓解办法是在边缘留出一定margin或者用图像修复把边界补全。我在做视频稳定时会先把图像边缘裁掉10到20像素只用中间区域的光流。5.4 显存溢出与批量大小调整显存溢出是常见问题。FlowNet2的堆叠结构在推理时中间特征图很多512x384的输入大概需要2GB1024x768就要8GB以上。如果显存不够可以减小输入尺寸、减小批量大小或者用torch.cuda.empty_cache()手动清理缓存。另外DataParallel在多卡推理时会复制模型到每张卡显存占用翻倍如果只有一张卡就不要用DataParallel。6. 从光流到实际应用的衔接6.1 光流用于视频插帧的注意事项视频插帧是光流最直接的应用。基本思路是估计帧1到帧2的光流然后按照时间比例t扭曲帧1和帧2再融合。但直接扭曲会有遮挡问题物体移开后露出的背景在帧1里没有帧2里有物体移入遮挡的区域在帧1里有帧2里没有。处理遮挡的常见方法是计算前向和后向光流做一致性检查不一致的区域标记为遮挡然后用图像修复或者只用一个方向的光流。FlowNet2估计的光流在遮挡边界处会有误差因为网络没见过遮挡区域的对应关系。我一般会加一个后处理用前向-后向一致性检查把不一致的像素的光流置零或者用邻域中值滤波。这样插帧的伪影会少很多。6.2 光流用于运动检测的阈值选择运动检测里光流的幅值超过阈值就认为是运动区域。阈值的选择很关键太小会把噪声当运动太大会漏掉慢速运动。我的经验是先统计光流幅值的分布取95%分位数作为阈值或者用Otsu方法自动找。另外光流的方向一致性也可以用来过滤如果一片区域的光流方向杂乱可能是噪声或者非刚性运动可以进一步用聚类或者连通域分析。6.3 光流用于视频压缩的运动补偿视频压缩里光流可以用来做运动补偿预测。编码器估计当前块相对于参考帧的运动只编码残差。FlowNet2的稠密光流比块匹配的稀疏运动矢量更精细但计算量大通常只在离线编码或者高质量场景用。实际部署时可以把光流下采样到块级别或者只用光流做初始搜索再用传统方法精化。7. 一些让结果更稳的实操技巧7.1 多尺度推理与结果融合FlowNet2本身是多尺度的但如果你对某些区域的结果不满意可以尝试多尺度推理把图像缩放到不同尺寸分别估计光流然后上采样到原尺寸做融合。融合时可以用中值滤波或者加权平均权重根据光流的一致性来定。这个方法对细节区域的光流提升明显但计算量翻倍。7.2 前后向一致性检查的实现前后向一致性检查是提升光流可靠性的常用手段。具体做法是估计帧1到帧2的光流flow_f再估计帧2到帧1的光流flow_b然后把flow_b按照flow_f扭曲到帧1的坐标系计算flow_f warp(flow_b)的幅值如果超过阈值比如1到3像素就认为该像素的光流不可靠。不可靠的像素可以用邻域中值替换或者标记为无效。def forward_backward_check(flow_f, flow_b, threshold1.0): # 扭曲flow_b到帧1坐标系 flow_b_warped warp_flow(flow_b, flow_f) # 计算一致性误差 diff flow_f flow_b_warped mag np.sqrt(diff[:,:,0]**2 diff[:,:,1]**2) # 标记不可靠区域 mask mag threshold return maskwarp_flow函数用cv2.remap实现根据光流把每个像素映射到新位置。注意映射时坐标要归一化到[-1,1]或者用像素坐标取决于remap的参数。7.3 光流平滑与边缘保持的平衡光流后处理里平滑可以去掉噪声但会模糊边缘。我一般用双边滤波或者引导滤波它们能在平滑的同时保持边缘。双边滤波的参数空间sigma设2到5颜色sigma设10到30具体看图像噪声水平。引导滤波用原图作为引导半径设4到8epsilon设0.01到0.1。实测下来引导滤波的边缘保持比双边滤波更好但计算稍慢。7.4 保存光流的格式选择光流保存格式有.flo、.png、.npy等。.flo是Middlebury标准格式用二进制存储包含魔数、宽高和浮点数据适合和其他光流工具交换。.png只能存可视化结果不能存原始浮点值。.npy是numpy格式方便后续处理。我一般同时存.flo和.npy.flo用于对比.npy用于自己的流程。.flo的写入要注意字节序Middlebury格式是小端。写入时先写魔数PIEH浮点数202021.0的十六进制然后写宽高int32然后写光流数据float32先x后y。读取时反过来。如果字节序搞错读出来的宽高会是天文数字。8. 关于FlowNet2的局限和替代方案FlowNet2虽然经典但局限也明显。第一它假设亮度恒定对光照变化敏感。第二它在大位移和遮挡区域表现一般。第三它的速度在实时场景下不够。如果你需要更高精度可以看RAFT它用迭代更新和相关性金字塔在Sintel和KITTI上都比FlowNet2好而且代码更简洁。如果你需要实时可以看PWC-Net或者LiteFlowNet它们用轻量级结构速度能到30 FPS以上。不过FlowNet2的价值在于它的稳定性和成熟度。很多工业场景的模型是几年前部署的FlowNet2仍然是基线。而且它的代码结构清晰适合作为学习光流网络的入门。我建议你先用FlowNet2跑通整个流程理解光流的输入输出、可视化、后处理然后再迁移到更新的模型。这样你对光流问题的理解会更扎实遇到新模型时也能快速上手。最后分享一个小技巧如果你在调试光流质量可以先用合成数据比如人为平移一张图像来验证。平移是已知的光流应该等于平移量。如果估计的光流和真实平移差很多说明流程有问题。这个方法能快速定位是模型问题还是数据问题。

相关新闻

从零搭建Flownet2:深度学习光流估计实战与调优指南

从零搭建Flownet2:深度学习光流估计实战与调优指南

1. 从零开始:使用Flownet2生成optical flow光流(optical flow)这个词,第一次听到的人多半会觉得抽象。说白了,它描述的就是视频里相邻两帧之间,每个像素从上一帧“跑”到了下一帧的哪个位置。你可以把它想象…

2026/10/17 3:54:58 阅读更多 →
STM32解析SBUS串口协议:从反相波形到位打包的完整实现

STM32解析SBUS串口协议:从反相波形到位打包的完整实现

简介:面向STM32F407等Cortex-M4平台的S.BUS协议解析与编码源码包,适用于无人机、机器人、遥控设备等开发场景,帮助开发者快速掌握并移植多通道遥控信号传输功能。源码完整覆盖S.BUS帧处理流程:配置250Kbps串口与DMA自动接收&#…

2026/10/17 3:54:58 阅读更多 →
Keras-bert实战ALBERT:文本分类、多标签与序列标注统一微调

Keras-bert实战ALBERT:文本分类、多标签与序列标注统一微调

1. 为什么要在 Keras 生态里死磕 ALBERT做 NLP 工程落地的朋友大概率都经历过这个纠结:BERT 效果好但太沉,RoBERTa 精度高但显存吃紧,蒸馏出来的小模型又经常在业务数据上掉点。ALBERT 刚出来那阵子我其实没太在意,觉得无非又是一…

2026/10/17 3:54:58 阅读更多 →

最新新闻

金融数据服务中台架构实战:从多源聚合到实时推送全解析

金融数据服务中台架构实战:从多源聚合到实时推送全解析

先交代下背景。我最近在负责一个代号叫financial-services的内部项目,说白了就是一套面向金融场景的数据服务中台:上游接行情源、资讯源、账户流水,下游对接移动端、Web 和量化脚本。这个项目名字看起来很简单,但真正落地的时候牵…

2026/10/17 4:42:13 阅读更多 →
CLI-Anything:命令行的可观测性操作系统

CLI-Anything:命令行的可观测性操作系统

1. CLI-Anything 不是又一个命令行包装器,它是 CLI 生态的“操作系统级抽象层”你有没有试过在终端里敲下git commit -m "fix: typo",却突然意识到——这行命令背后其实调用了至少 4 层抽象:Shell 解析器 → Git 二进制入口 → lib…

2026/10/17 4:42:13 阅读更多 →
从51万行泄露代码看大模型AI工程架构与安全底线

从51万行泄露代码看大模型AI工程架构与安全底线

这两天 AI 圈最热闹的事,莫过于某头部 AI 实验室的代码库被曝大规模泄露,媒体标题一个比一个刺激:“51万行代码”“底裤被扒干净”。吃瓜群众盯着“翻车”两个字看热闹,但作为一个常年泡在模型训练和工程基建里的人,我…

2026/10/17 4:42:13 阅读更多 →
自动驾驶产业链全景图谱:从传感器到商业运营的关键逻辑

自动驾驶产业链全景图谱:从传感器到商业运营的关键逻辑

聊到自动驾驶,很多人第一时间想到的是无人驾驶出租车,或者是某款新车宣传片里的自动变道。但真正在产业链里跑过一圈的人都知道,自动驾驶根本不是“一辆车”的事情,它是一条从芯片、传感器、底盘,到系统集成、运营调度…

2026/10/17 4:42:13 阅读更多 →
Unity伤害数字系统实战:对象池与飘字动画优化方案

Unity伤害数字系统实战:对象池与飘字动画优化方案

1. 为什么一个伤害数字值得单独拿出来做做Unity项目的人,尤其是做动作类、RPG类或者塔防类玩法的,几乎都会碰到同一个需求:角色挨打或者打出伤害时,屏幕上要飘出一个数字,告诉玩家这一下打了多少。听起来特别简单&…

2026/10/17 4:42:13 阅读更多 →
云原生功能测试实践:容器与微服务特性适配关键点

云原生功能测试实践:容器与微服务特性适配关键点

1. 项目背景与测试定位:容器化之后,功能测试到底测什么做云原生应用测试,最怕的就是一上来就扎进细节里。我接手这份“云原生应用软件功能测试报告:容器与微服务特性适配”的时候,第一反应不是急着列用例,而…

2026/10/17 4:41:13 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →