新闻详情

新闻详情

首页 / 资讯中心 / 详情

基于U-Net的红外图像非均匀性校正:从物理模型到PyTorch实现

发布时间:2026/9/29 9:32:43来源:尧图网络
基于U-Net的红外图像非均匀性校正:从物理模型到PyTorch实现
简介本资源是基于神经网络的红外图像非均匀性校正专题PDF面向从事红外成像、遥感探测及图像处理研究的科研人员、工程师与学生。内容围绕红外焦平面像元响应不均匀问题系统讲解盲元检测与补偿、双边滤波期望值提取以及结合随机梯度下降的神经网络校正模型并对比传统标定方法的适用性与优缺点。包内为1个PDF文档体积约1MB便于直接查阅与打印。该文献源自《红外技术》期刊2018年论文含完整公式、实验流程与分析结论可作为课程设计、算法复现或论文写作的专业参考。目前已有293人学习适合具备图像处理与机器学习基础、需要场景自适应校正思路的读者深入研读。1. 红外图像为什么总带着“花斑”神经网络校正到底在解决什么红外相机开机的一瞬间画面里那层固定不变的“花斑”和“竖条纹”几乎每个从业者都见过。它不是噪声而是探测器像元对相同辐射响应不一致的结果叫非均匀性。更头痛的是相机温度一变这层斑纹就跟着漂移静态校正表很快失效。传统做法是用两点校正加挡板定期刷新但高温差场景、快速变温场景里挡板一挡就是丢帧很多产线测速的活根本等不起。神经网络能做到的是把“辐射—响应”的非线性映射直接学进一组参数里让同一帧数据在校正后接近理想响应。这篇笔记面向做红外成像算法、工业测温、安防夜视以及想把标定周期拉长的人我会从物理模型讲到可跑的PyTorch流程再告诉你哪些坑是花钱买来的。2. 先看懂非均匀性的物理来源读出噪声、响应率漂移与盲元2.1 非均匀性是怎么进到图像里的红外焦平面阵列IRFPA由几十万甚至上百万个像元组成。每个像元接收同一均匀辐射时输出灰度并不一样原因分两类。第一类是响应率不一致。探测器像元的光敏面积、材料掺杂浓度、厚度在制造工艺里不可能完全一致造成每个像元对入射辐射的电压转换系数有差异。第二类是暗电流和偏置的差异。即使完全没有辐射输入各像元自身的热激发和读出电路失调电压也不同导致一个固定的暗电平偏移。从信号模型上看传统线性近似把每个像元的输出写成 y a·x bx 是入射辐射a 是增益b 是偏置。非均匀性校正要做的就是把每个像元不同的 a 和 b 拉回到同一个基准上。听起来很简单但真实探测器在宽动态范围下存在非线性项尤其低温段和高温度段响应曲线会弯。两点校正假设 a、b 恒定在工程上属于“用直线拟合弯线”温度跨度一大就露馅。另外还有一类非均匀性叫盲元——个别像元完全失效要么永远白、永远黑要么响应随机跳变。盲元不是线性校正能解决的通常单独用场景或标定数据检测出来再通过插值替代。神经网络校正方案里盲元检测往往作为预处理或网络的一部分因为盲元会污染训练数据的标签。2.2 传统校正的极限在哪里两点校正是最常见的生产线上标定方法。用两个不同温度的黑体辐射源分别采集两个灰度图像然后按公式逐像元计算校正增益和偏置G (T2 - T1) / (Y2 - Y1)O T1 - G·Y1其中 T1、T2 是两点黑体的标定温度对应的理想灰度参考值Y1、Y2 是实测灰度。这个公式至今没有被淘汰因为实现简单、计算量极小、效果立竿见影。但它有两个硬伤。硬伤一是线性假设。探测器响应率随积分时间和像元温度变化增益并非常数。硬伤二是时间漂移。探测器通电后自热、环境温度变化、读出电路增益漂移都会让原来的 G 和 O 失配。所以大多数红外系统需要定时遮挡快门重新标定这就是你常看到的“咔哒”挡板声音。多点定标可以做得更好比如把辐射源温度从 0 到 300 度分成 N 挡每个像元建立分段线性查找表。分段越多精度越高但标定耗时和存储量也线性增长。而且分段表在分段点附近不光滑图像容易出带状痕迹。还有一类基于场景的非均匀性校正像时域高通滤波、卡尔曼滤波估计它们利用图像序列中的运动信息反推非均匀性。这类方法不依赖黑体但依赖运动场景静止场景下会“冻住”或产生鬼影工程上很少单独用。2.3 神经网络要学的到底是什么映射神经网络校正的出发点很简单既然响应曲线是非线性的、时变的那么我们可以用一个带大量参数的函数去拟合“实测灰度 → 理想灰度”的逐像元映射。理想灰度来源有很多种选择。用黑体标定数据作为监督信号我们采集多个温度点的黑体图像将图像经过两点校正后的结果作为目标把原始图像作为输入让网络学习一个与温度和位置相关的校正函数。用这种方法网络能学到两点校正无法表达的残余非线性误差。用平滑性先验场景中大面积均匀区域的灰度应当平滑非均匀性表现为固定的高频空间图案。网络输入单帧或连续几帧图像输出“残差分量”让输出加上输入后满足空间平滑性。这种半监督做法不依赖黑体但需要抑制好的真实细节被当成非均匀性误删的风险。从数学场景看非均匀性校正要学习的是一个逐像元的增益和偏置场同时还要修复盲元。卷积神经网络天然适合处理空间分布模式一个卷积层如果卷积核固定它就能学习到与空间位置相关的乘法因子。不过普通 CNN 在逐像元响应上共享权重做不了每个位置不同的映射所以实际网络里会把坐标信息也拼进输入或者对特征图按通道叠加位置偏置。3. 搭建校正网络从两点标定数据到监督训练的完整流程3.1 训练数据怎么构造神经网络校正的典型落地做法是“黑体标定 数据增强 监督训练”。我们常见的黑体标定流程是让相机对准面源黑体设置若干温度点稳定后采集 100 帧左右做均值当作该温度下的原始响应图像。温度点建议从 5 到 20 个不等覆盖你实际工作的量程。构造训练对时我会把原始响应图像作为输入把该温度下经过“高质量多点标定”或“两点标定 平滑处理”的图像作为标签。为什么要高质量标签因为网络学习的上限不会超过标签质量如果你想让它比两点校正更准标签就不能也是两点校正的结果。工程上常见做法是在实验室用 10 个以上的温度点对同一相机反复标定生成一个高精度查找表然后用该表校正出的图像作为标签。训练时网络只见过原始图却能在多个温度点之间实现比简单插值更平滑的校正效果。下面是一段示意性的数据集生成伪代码用于说明处理思路import numpy as np import torch from torch.utils.data import Dataset class IRCorrectionDataset(Dataset): def __init__(self, raw_dir, ref_dir, temp_list, patch_size128): self.pairs [] for t in temp_list: raw np.load(f{raw_dir}/{t}_raw.npy) # 原始响应图形状 [H, W] ref np.load(f{ref_dir}/{t}_ref.npy) # 高精度校正后的参考图 self.pairs.append((raw, ref)) self.patch_size patch_size def __len__(self): return len(self.pairs) * 200 def __getitem__(self, idx): temp_idx idx % len(self.pairs) raw, ref self.pairs[temp_idx] h, w raw.shape # 随机裁剪小图块围绕局部区域让网络学会细节校正 y np.random.randint(0, h - self.patch_size) x np.random.randint(0, w - self.patch_size) raw_patch raw[y:y self.patch_size, x:x self.patch_size] ref_patch ref[y:y self.patch_size, x:x self.patch_size] # 归一化到 0-1保留原始范围 raw_patch (raw_patch - raw_patch.min()) / (raw_patch.max() - raw_patch.min() 1e-6) # 添加高斯噪声模拟真实读取噪声 raw_patch raw_patch np.random.normal(0, 0.005, raw_patch.shape) return (torch.from_numpy(raw_patch).float().unsqueeze(0), torch.from_numpy(ref_patch).float().unsqueeze(0))这段代码展示了两个关键点一是以温度点为单位组织样本每次迭代都从同一温度下的原图与参考图上随机裁剪同一位置的图块保证了训练时的空间对齐二是加了一点高斯噪声作数据增强避免网络对读出噪声过拟合。裁剪尺寸 128 是常用值它能在保留空间结构的同时把训练显存控制在合理范围。如果你要在 GPU 上跑这个 patch 大小可以直接用。参数说明temp_list 需要至少 3 个温度点才能学到温度相关的映射patch_size 不是越大越好太大容易把全局温度漂移当成校正对象太小则学不到空间连续性随机裁剪次数 200 是让每个温度点都生成不同空间位置样本实际迭代次数可按显存调整。3.2 网络结构怎么选针对非均匀性校正最常被拿来做基线的结构是卷积神经网络尤其是端到端的 U-Net 变体。为什么不是全连接网络因为每个像素的响应差异虽然独立但读出电路的串扰、像元之间的热耦合会带来邻域关联卷积层能高效利用这种局部先验。全连接网络是给单像素建模的不能感知空间图案。另一个选择是前馈神经网络但那只用于逐像元增益和偏置预测输入是像素灰度、像素坐标、温度等标量输出是 y_map。这种方法把校正看成“查找表拟合”好处是部署时只需要做矩阵乘法坏处是丢失了邻域信息盲元和边缘区域根本修不好。我在实际项目中看到很多以“前馈神经网络”为标题的论文走的正是这条路工程落地上其实输给了 U-Net。这里给出一个轻量 U-Net 结构用 PyTorch 搭建核心参数都标成变量import torch import torch.nn as nn class CorrectionUNet(nn.Module): def __init__(self, in_ch1, base_ch16): super().__init__() # 下采样编码器 self.enc1 nn.Conv2d(in_ch, base_ch, 3, padding1) self.enc2 nn.Conv2d(base_ch, base_ch * 2, 3, padding1) self.pool nn.MaxPool2d(2) # 上采样解码器 self.up1 nn.ConvTranspose2d(base_ch * 2, base_ch, 2, stride2) self.dec1 nn.Conv2d(base_ch * 2, base_ch * 2, 3, padding1) self.head nn.Conv2d(base_ch * 2, 1, 1) def forward(self, x): e1 torch.relu(self.enc1(x)) e2 torch.relu(self.enc2(self.pool(e1))) d1 torch.relu(self.dec1(torch.cat([self.up1(e2), e1], dim1))) residual self.head(d1) return x residual # 残差学习网络只预测校正量这里采用残差值学习输入是原始图像输出是残差图最终校正结果等于输入加残差。这样设计的好处是网络初始化为 0 输出等于没有校正训练稳定性好而且两点校正留下的残余误差通常只是原图灰度的 5% 以内残差学习让网络只需要拟合小量收敛更快。通道数 base_ch16 是轻量设计在 640×512 的红外图上推理一次能控制在毫秒级如果图片更大或者你追求更强表达可以翻倍到 32。这个网络既可以用监督训练完成黑体校正也可以在后续部署时直接感受野聚集邻域信息修正盲元。参数说明使用 3×3 卷积而不用 5×5是因为非均匀性空间频率不高5×5 容易把真实细节误伤。编码器的池化步长为 2下采样两次特征图从原尺寸降到 1/4再上采样回原尺寸保证了逐像素预测。输出层 1 代表残差通道。3.3 损失函数与训练参数训练目标不是简单做像素差的 L1 或 L2。非均匀性校正在意两点一是灰度准确二是空间平滑。灰度准确用 L1 损失能避免 L2 在强梯度处产生模糊。空间平滑性要用一个梯度一致性损失来约束校正结果与参考图像的空间细节一致。我一般用的损失函数组合是class CorrectionLoss(nn.Module): def __init__(self, lambda_smooth0.5): super().__init__() self.l1 nn.L1Loss() self.lambda_smooth lambda_smooth def gradient(self, img): gx img[:, :, :, 1:] - img[:, :, :, :-1] gy img[:, :, 1:, :] - img[:, :, :-1, :] return gx, gy def forward(self, pred, target): loss_l1 self.l1(pred, target) # 灰度准确度 gx_pred, gy_pred self.gradient(pred) gx_target, gy_target self.gradient(target) # 在细节区域允许梯度差在平坦区域惩罚梯度差 mask (torch.abs(gx_target) torch.abs(gy_target)) 0.01 loss_smooth (torch.abs(gx_pred - gx_target) * mask).mean() \ (torch.abs(gy_pred - gy_target) * mask).mean() return loss_l1 self.lambda_smooth * loss_smooth这个损失函数的关键是梯度掩膜对于目标图像中梯度很小的平坦区域我们要求校正结果也是平坦的从而打压非均匀性引入的虚假纹理而对于目标中真正的细节边缘掩膜为 0不惩罚梯度差避免细节被抹平。lambda_smooth 我通常取 0.5太小会残留条纹太大会把边缘磨掉。如果实际图片边缘较丰富可以降低到 0.2如果画面大部分是天空或墙面就升到 1.0。训练时的常用参数优化器用 Adam学习率 1e-4batch size 8训练 100 个 epoch约 10 万步。学习率用余弦退火从 1e-4 降到 1e-6。生成图像类任务不必像分类网络那样加大量数据增强随机裁剪和噪声扰动够了翻转和旋转可以加但要注意探测器的空间图案在上下翻转后会改变方向如果你训练数据里的对准标记本来就有方向性翻转反而会让网络学到错误的方向先验。这点在实验里很容易翻车用了旋转增强校正效果看起来不错但把相机倒过来装就废了。4. 避坑红外校正里那些让模型翻车的细节4.1 现象训练收敛后边缘出现水波纹伪影很多同学用 U-Net 训练完后在均匀背景上测试发现中间区域很干净图像四周却出现水波纹状的灰阶起伏越靠近边缘越明显。原因很直接红外光学系统存在渐晕效应边缘的响应率天然比中心低而且变化并不满足线性关系。网络在训练时学出了“边缘要亮一些”但训练集里的边缘区域通常被裁剪位置采样不足随机裁剪时边缘被裁进去的概率小网络对边缘的拟合不充分于是用了高频震荡来硬凑水波纹。解决方法是调整裁剪策略。不要在整张图上完全随机裁剪而是额外采样一批边缘区域补进训练集或者把整张图同时输入网络做一次全局监督再把随机裁剪作为辅助。这个我踩过后来是把数据集里的训练样本按中心区域 70%、边缘区域 30% 的比例分布效果立刻干净了。4.2 现象温度点太少网络在中间温度段出现阶跃如果你的标定温度只取了两个点比如 20 度和 80 度网络训练出来的预测在 20 到 80 度之间会强行线性插值。由于真实响应曲线是非线性的在 40 度到 50 度区间网络输出会出现一个明显的“台阶”跳变目标测温信号在这个温度区间会突然偏 2 到 3 个灰度等级。这不是过拟合是欠拟合。原因是非均匀性的温度漂移在每个温度段的变化率不一样两点信息捕捉不到曲率信息。解决办法是标定时增加中间温度点例如 20、35、50、65、80 五个点。如果没有条件做多点黑体至少要用两点校正后的残差——即两点校正后的图像在高精度标签下的残差——作为补充样本让网络学到残差的温度变化趋势。我再强调一次这东西没有后悔药前期标定温度点的数量直接决定模型上限。4.3 现象盲元没有被修复反而被放大盲元在原始图像上是一个或多或少的异常灰度值。损失函数在盲元处会造成很大的 L1 误差网络为了压小这个误差会把盲元的邻域也拉偏形成“晕”。看起来盲元没那么突出了实际上周围一圈都错了测温精度全毁。正确流程是训练前先检测盲元。用黑体在高温和低温下的响应差值判断响应率异常的像元生成盲元掩膜然后在损失函数中忽略这些位置。我通常在训练阶段把盲元位置的 loss 乘以 0同时在网络结构里加一个盲元替换层用邻域中值滤波结果替换盲元像素后再作为网络输入。网络学习的就是“滤波器修完盲元之后继续修非线性残差”两个任务分离各干各的效果稳定得多。4.4 现象同一套权重在 A 相机上表现好在 B 相机上直接崩这是最典型的工程化翻车现场。不同批次探测器虽然型号一样但响应率分布和坏点位置有差异。用一台相机采的数据训练的模型直接挪到另一台相机上非均匀性补偿完全对不上画面甚至更花。原因很好理解网络学到了该相机特有的空间图案。解决思路有两条。第一条是把坐标和相机 ID 也作为输入训练一个可以覆盖多相机的模型但工程复杂度高。第二条也是我推荐的把网络校正和两点校正结合起来做级联先把每个相机都做一次两点校正消除个体差异让网络只学两点校正后的残差这个残差在不同相机间的泛化性就好很多。具体做法在最后一章展开。4.5 现象推理时画面突然变暗或变亮但训练时没出现过有些场合相机积分时间或增益被上位机动态调整图像整体增益变了而网络是在固定增益下训练的。输入灰度范围一旦平移或缩放原先学习到的映射就失效。这是隐藏分布漂移问题不是网络错了是输入口径变了。解决方案有两种。一种是在预处理时用与训练时相同的方式归一化比如按整个图像的均值和方差归一化把动态范围变化吃掉。另一种更直接训练时对输入做随机增益扰动和偏置扰动让模型见过各种亮暗变换迫使它去学相对变化而不是绝对值。我在训练代码里加的 noise 就是出于这个考虑但它的强度要调到 0.01 量级才够有效。5. 效果验证与部署从离线指标到实时管线5.1 离线评估别只信 PSNR训练结束后要用没有参与训练的温度点和场景来验证。常见指标有 PSNR、SSIM 以及非均匀性残余量。但 PSNR 对非均匀性校正有一个陷阱如果你用 L1 或 L2 损失训练输出已经是向标签回归后的平滑版本PSNR 会偏高但人眼看反而觉得“假”。工程上我习惯追加三个指标。第一个是四角区域与中心区域的灰度偏差用来评估渐晕补偿效果。第二个是空域标准差对同一均匀黑体图像在 5×5 或 10×10 块内计算标准差非均匀性校正后各块的标准差应当显著下降但整图标准差不应降到零。第三个是时域稳定性连续采集 100 帧固定场景校正后每个像素的帧间方差要小如果出现闪烁说明网络对噪声过拟合了。下面给一段评估非均匀性残余的脚本示意def residual_nuc(images, block_size8): # images: 多帧均匀黑体图像 [N, H, W] mean_frame np.mean(images, axis0) h, w mean_frame.shape nh, nw h // block_size, w // block_size block_stats [] for i in range(nh): for j in range(nw): block mean_frame[i*block_size:(i1)*block_size, j*block_size:(j1)*block_size] block_stats.append([block.mean(), block.std()]) block_stats np.array(block_stats) # 非均匀性残余用块均值的标准差衡量 return block_stats[:, 0].std(), block_stats[:, 1].mean()这个函数的逻辑是把均匀黑体图像切成小块理想情况下每个小块的平均灰度应该一致所以块均值之间的标准差越小非均匀性校正越彻底。块内 std 反映的是随机噪声和残留纹不随校正完全消失若它过高则需要做时域滤波。评估时对同一黑体温度采集至少 10 帧平均避免单帧噪声干扰判断。5.2 推理速度与显存网络不能拖垮 25 帧红外相机输出率一般是 25 Hz 或 30 Hz非均匀性校正环节不能成为瓶颈。我以 640×51216bit 输入为例在 NVIDIA Jetson Orin 上用上面那个 16 通道的 U-Net单帧推理大约 3 到 5 毫秒完全够用。如果在嵌入式 CPU 上跑就要考虑剪枝或换成更小的残差网络。对速度影响最大的是上采样层。ConvTranspose2d 在上采样时速度慢且容易出现棋盘伪影可以换成双线性插值 卷积的组合。部署时用 TensorRT 做模型转换直接导出 FP16 引擎精度损失在 0.1% 以内速度可以再快一倍。注意要固定输入尺寸比如 640×512TensorRT 对动态 shape 支持较差动态分辨率会带来额外的显存分配和延迟。5.3 部署时的预处理一致性模型训练时用的是 float32 归一化部署时也要按完全相同的公式做。最常见的坑是训练时用(raw - min) / (max - min)归一化而部署时用的是raw / 65535。两种归一化方式会把输入分布完全错开网络在训练时见过的是 0-1 之间有具体数值分布的图像部署时灰度中位数都不一样输出自然崩。我这里强烈建议训练和部署统一使用固定缩放系数例如红外 14 bit 数据统一除以 16383而不是用动态范围归一化。原因是动态范围归一化会随场景内容变化网络输入不稳。固定缩放虽然让某些冷热极端场景的灰度范围没有占满 0-1但这是训练时可控的分布模型能适应。如果实在要动态归一化务必在部署端复刻同样的统计方式并确认场景不会导致 min 或 max 突变。6. 最后一招把神经网络和两点校正做成级联不再怕换相机我最后想分享的是一个在产线上非常有用的工程技巧不要把神经网络当成独立的“万能校正器”而是让它去学两点校正之后的残差。级联结构是“原始图像 → 两点校正 → 神经网络残差修正 → 输出”。为什么级联更强因为两点校正确实能把 90% 的非均匀性抹平剩下的是非线性残差、渐晕残差、盲元邻域残差。网络专注学小残差任务简单泛化能力强而且当相机更换时两点校正重新标定一次之前训练好的网络依然可用因为它看到的是“同一个任务形态”的残差图而不是和某台相机强绑定的原始响应图。具体实现时把训练标签改为“高精度标签与两点校正输出之差”网络输入也改成两点校正之后的图像。这样网络退化为残差预测器。推理时合起来做一次后处理速度上几乎没增加。我在产线上做过测试一台相机更换探测器后不重新训练网络只重新做两点标定校正效果仍然能保持在换探测器前的 95% 水平。这就是把神经网络的通用性和传统标定的确定性合在一起的价值。关于训练参数还有两个个人习惯。一是网络输出范围一定要用 tanh 激活限制残差在 -1 到 1 之间防止个别坏温度点把输出拉到离谱值。二是损失函数里把盲元掩膜持续作用到最后不要在最后 10 个 epoch 放开因为那会迫使网络去拟合异常值功亏一篑。这些坑都是真金白银的标定时间换来的写在这里希望你少走弯路。红外图像非均匀性校正这件事本质上没有一劳永逸的答案。神经网络带来了比传统查找表更平滑、更自适应的校正方向但它不是黑匣子魔法需要你理解物理模型、控制输入分布、尊重标定流程。希望这篇笔记能帮到你哪怕只帮你躲开一个坑也算没白写。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

用程序向你喜欢的女孩子表白吧!!!——TaoToken 统一 Key 接入 Cline 的 settings.json 配置骨架 2026/9/29 10:28:00

用程序向你喜欢的女孩子表白吧!!!——TaoToken 统一 Key 接入 Cline 的 settings.json 配置骨架

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

阅读更多 →
LuckyFrame自动化测试平台部署实践:从服务端到客户端的完整落地指南 2026/9/29 10:27:54

LuckyFrame自动化测试平台部署实践:从服务端到客户端的完整落地指南

1. 先搞清楚LuckyFrame到底是什么:一套服务端加N个客户端的测试兵团我最早接触LuckyFrame是在一次团队技术选型的时候。当时我们测试组的状态很典型:接口用例散落在Postman和Python脚本里,Web端回归靠人工点鼠标,每次发版前整个测…

阅读更多 →
ITU-T G.8273.2边界时钟测试全解析:从标准到实操 2026/9/29 10:27:47

ITU-T G.8273.2边界时钟测试全解析:从标准到实操

1. 为什么G.8273.2边界时钟测试值得单独拿出来聊做时间同步这行的朋友应该都有体会,PTP(精确时间协议)相关的标准文档一抓一大把,但真正落到测试环节,能把边界时钟(Boundary Clock,BC&#xff0…

阅读更多 →
如何安装“AI龙虾”(OpenClaw)并接入 TaoToken:从零到跑通的完整配置指南 2026/9/29 10:27:34

如何安装“AI龙虾”(OpenClaw)并接入 TaoToken:从零到跑通的完整配置指南

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

阅读更多 →
基于Dify的AI项目复盘助手:工作流编排与Prompt工程实践 2026/9/29 10:27:20

基于Dify的AI项目复盘助手:工作流编排与Prompt工程实践

“hindsight”这个项目名,我第一次看到是在一次朋友的团队复盘会上。当时他刚把一个折腾半年的产品功能推上线,效果远低于预期,大家七嘴八舌地找原因,有人说是市场环境变了,有人说是排期太紧,还有人说是当初…

阅读更多 →
AkShare又报错?Python量化这样拿数据 2026/9/29 10:27:20

AkShare又报错?Python量化这样拿数据

在进行量化工作的时候, 让人感到崩溃的情况经常发生, 而且这种崩溃往往并不是因为策略模型没有办法被编写出来, 而是因为数据的连接接口突然出现了报错信息, 字段定义出现了不一致的问题, 当请求失败之后还需要花费大量的时间和精力去重新排查代码里的错误。尤其是当人们打算将…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉