ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

StarNet深度学习去星实战:深空摄影星点分离与伪影修复

StarNet深度学习去星实战:深空摄影星点分离与伪影修复 昨天在整理一批 M42 的累计影像时我突然意识到自己的后期流程出了大问题。星点已经密到几乎看不清猎户座大星云内部的暗结构而我最想展示的恰恰是那块原本就不明亮的云气。这种时候靠画笔一点点修星点肯定不现实于是我把已经压箱底的 StarNet 又翻了出来。StarNet 是天文后期圈子里流传很广的深度学习去星工具它能从一张深空照片里把恒星成分和弥漫背景分离开输出一张没有星点的“星云纯净版”图片方便我再去做拉伸、降噪和风格化处理。这篇文章是我近一年反复使用 StarNet 之后的完整记录包括模型版本怎么选、环境怎么搭、参数怎么调以及几类常见伪影的修复办法。对于经常拍发射星云、反射星云、星系、彗星的爱好者来说去星是一整套后期流程的起点StarNet 恰好是目前免费方案里最靠谱的一个。如果你也刚接触这个工具或者已经被某次去星之后的怪异伪影折磨过这篇内容应该能帮你少走几段弯路。1. 从“星点太密”说起StarNet 到底解决了什么问题1.1 深空图里的“好星点”与“碍事星点”摄影本身拍的就是星星可到了深空后期这一步星点反而是最妨碍细节呈现的东西。原因是星点一旦密集起来会在拉伸时优先抢走亮度动态范围。比如拍 IC 434 这种背景本来就暗的目标满幅星点会把云气淹没在“点点星星”里画面看着丰富但真正有价值的暗部信息全被压缩了。更麻烦的是很多窄带图像经过哈勃色映射后颜色结构非常细腻星点周围还带着一圈圈星芒和衍射环这些结构会吸引后期软件先去处理它们。注意我用了“优先”这个词。深空图像的直方图里星点集中在高光端云气集中在中间调和阴影端拉伸算法为了保住高光不溢出往往会牺牲中间调的对比度。星点越多这个问题越严重。去掉星点之后直方图一下子变得清爽整张图的可拉伸空间瞬间大了很多。1.2 去星不是删除而是两层分离新手最容易误解的一点去星工具并不是在图像上把星星抹掉。它做的是把图像拆成两层一层是尽量干净的星云背景另一层是几乎只包含星点的星点图。我推荐在后期一开始就把这两层都保存下来后面用哪层、怎么融合都有机会重新调整。如果你硬要把星点从图层里删掉再合并就会发现两个问题一是删除区域难免留下黑洞二是对星点边缘的处理会形成明显的“边界亮圈”。用分离而不是删除的思路去做星云层和星点层互相独立最后通过图层合成技术重组不仅能去掉星点还能控制最终星点的亮度、大小和颜色这种自由度是传统修图方式完全给不了的。1.3 三类最依赖去星的作品按我自己的经验最需要去星的是三类题材。第一类是目标本身较暗的反射星云比如 M78、马头星云星点会让本来就淡的反射光更难分辨。第二类是星系外延部分像 M31 盘面以外的伴星系和恒星流密布的前景星点会让旋臂细节失真。第三类是彗星摄影彗尾和彗发都是极其柔弱的信号不把星点剥离掉处理出来的彗尾就像隔着一层“星帘”。哪怕是日常的星轨片用去星层做背景降噪、再用星点层做长曝光合成也会比直接叠加整洁很多。换句话说StarNet 不是只服务深空发烧友的玩具它是一套通用的“星点分离”基础设施学会它就等于给后期流程增加了一个可反复使用的中间层。2. 理解 StarNet 的工作方式才知道它能做什么、不能做什么2.1 本质上是像素级分类网络StarNet 的技术内核并不神秘。它本质上是一个基于卷积神经网络的像素级分类器输入是 RGB 深空图像输出是一个表达了“每个像素有多大概率属于恒星”的预测。训练数据是大量真实深空图像标签由人工标注或规则算法生成。模型学习的主要内容是恒星与背景的形态差异恒星通常有集中的亮度峰值、约呈高斯状的强度分布、随波长变化的色散规律背景星云则是大尺度、低对比度、形态连续的结构。这个思路很像图像分割里的语义分割任务比如把街景图分成“人、车、路、树”四类StarNet 只是把类别换成了“星点”和“背景”两类。真正让它实用的是训练数据里的多样性。不同焦比望远镜拍出来的星点形态差异很大施密特望远镜有典型的十字芒牛顿镜有衍射尖峰折射镜的星点则更接近完美的圆形。模型见得多才能在新图上给出稳定判断。2.2 版本天差地别V1、V2 与 StarNet目前社区里主要流传三个版本原始 StarNet V1、重新训练的 V2以及优化后的 StarNet。很多人以为不过是同名工具的迭代实际差别非常大我建议优先用 V2 或 StarNet。版本训练框架小星点表现显存占用我的打分StarNet V1TensorFlow弱容易把暗星漏掉高6/10StarNet V2TensorFlow/PyTorch明显改善中8/10StarNet多尺度优化好对细小微弱星点更稳低9/10V1 最典型的问题是暗弱小星点被直接当成背景纹理丢星严重。V2 重新设计了训练集和网络结构对小星点友好很多但显存占用仍然偏高。StarNet 是我现在的主力它对画面边缘的星点也能保持不错的响应且内存控制相对好。2.3 知道模型的边界才不会乱调参StarNet 不是万能的。它最怕的是两类情况一类是非圆形星点例如严重拖线、彗差造成的羽毛状星点这类样本训练数据里偏少另一类是星点密度过高的星团中心模型为了区分每个星点会生成大量中间置信度去星效果往往不干净。理解了这些边界你就知道图像要不要先进场修正而不是拿模型硬扛。另外模型训练时以彩色 RGB 图像为主如果你的素材是纯灰度图、或者只包含窄带单通道映射后的灰度图输出质量会打个折扣。我通常会把 Ha、OIII、SII 三个通道先合成为一张彩色图再去跑去星而不是对单通道各跑一次之后再合成。3. 从安装到第一张去星图我建议的落地路线3.1 先看显卡和显存StarNet 的模型推理在 GPU 上跑得快纯 CPU 也能跑但一张 2000×2000 的彩色图在 CPU 上可能要等二十多秒到几分钟批处理几十张素材会非常煎熬。显存 4GB 以下建议跑 V24GB 以上可以直接上 StarNet。如果你完全没独显用 Google Colab 挂免费 GPU 也是跑 StarNet 的常见方案不过要把模型和图片一起打包上传。这里有个很容易被忽视的坑模型文件和图片要放在同一个读写速度快的目录里。很多人把图片放在机械硬盘的深层路径里CPU 读取反而成了瓶颈GPU 利用率一直上不去看起来像模型跑得慢实际是数据搬运慢。3.2 在 AstroPixelProcessor 里直接调用如果你主力后期工具是 AstroPixelProcessor也就是 APP在较新的版本里已经提供了调用 StarNet 的入口。常规路径是打开一张已叠加好的图像在拉伸前从菜单里找到“Remove Stars”或“StarNet”相关功能选择模型文件和输出选项点运行就会得到去星图。用 APP 的好处是它自动处理了与图像色彩空间、位深相关的转换对新手友好。一个容易踩的细节在 APP 里调用 StarNet 前务必先把图像转成非线性状态并完成基础颜色较正。线性图像直接进模型输出的背景层往往偏色原因是模型训练数据里几乎没有原始线性帧。换句话说要先做初步的自动拉伸至少让图像在屏幕上看起来“像一张正常照片”再送去星。3.3 命令行方式适合批处理我处理一批窄带素材时通常先把三通道合成后的 RGB 图存在一个目录里然后用命令行统一跑。不同的 StarNet 发行版命令结构略有差异但大体思路一致输入目录、模型路径、输出目录、是否需要同时保存星点层。以某个版本为例命令大致是starnet --input ./aligned_images/ --output ./starless_images/ --save-stars --model ./starnet_model.pb实际使用中以你拿到的版本帮助说明为准。命令行方式的好处是可以一次拖入几十张图挂机去睡觉另外建议在脚本里加入对输出文件幅面和文件名的检查避免模型尺寸不匹配时静默失败。批处理之前先用一张图试跑至少确认它能正确读入图像格式再批量丢上去。3.4 三个检查点判断模型是否生效运行结束后不要只看缩略图我一般会检查三处。第一图像四角区域是否有残留星点痕迹如果四角亮星被清掉了、暗星还在说明模型对小星点响应不够可以换 StarNet。第二星云暗部是否被误删比如云气中心出现数码感很强的“蜂窝”纹理说明模型把某些背景纹理当成了恒星。第三星点层里是否出现密集的黑色空洞出现这种说明背景层被过度预测多半是输入图像有未除尽的暗边或光晕。4. 流程调优与星点合成去星图只是半成品4.1 最完整的后期链路长什么样有了去星图和星点层之后我一般这样走完整条链路。首先对星云背景层做拉伸和灰度映射让云气的层次尽量出来。然后对背景层做针对性降噪比如多张图为单位时可以用 MMT 或小波降噪。接着单独处理星点层可以做微小的收缩、提亮和颜色增强。最后用图层混合把星点层贴回去配合蒙版保护星云核心不重叠。这个顺序里最关键的是星点层一定要在背景层已经基本定型之后再合成。很多新手把星点层直接贴在拉伸前的背景层上再整体拉伸结果星点和云气又混在一起去星等于白做。晚一步合成星点和背景都能各得其所。4.2 拉伸时防止“黑底”去星后的背景图层也就是星云层暗部往往比原图更暗有时候甚至接近纯黑。直接对这幅图做自动拉伸容易把暗部抬得过亮形成一块块“灰雾”。我会先把黑点设置在实际背景值附近再用曲线轻轻拉中间调。如果你发现暗部出现条带多半是拉伸过头了这时候回退把黑点提高一档再试。以一张 16 位 TIFF 为例原始背景中值可能在 1200 左右我会把黑点放在 900 到 1000白点放在 45000 左右先让直方图不贴左墙再用曲线把中间调抬升。这个步骤凭眼睛看很难一次到位我通常会在 StarNet 输出的 starless 层上用同样的参数试两次取更自然的那一次。4.3 星点层的保护性处理星点层不是拿回来直接合并的。它通常只有亮的星点核心周边没有过渡直接叠加会出现明显的“贴纸感”。我会先对星点层做一个半透明叠加透明度调到 30% 到 40%再用去除小尺度细节的方法把星点边缘柔化。如果星点太强可以先对星点层做一个轻微的收缩或者用蒙版把中心最亮的部分遮掉一点这样观感更自然。这一步没有标准参数因为它高度依赖原始星点的密度和亮度。我的经验是宁可让星点层偏弱也不要偏强。偏弱的星点还能让人感觉“这张图没有明显去星痕迹”偏强则会把整张图的自然感毁掉。4.4 合成时的蒙版策略合成星点时我从来不用整幅图直接加到星云层上。正确的做法是生成一个星点蒙版让星点核心区域保留星点层其余区域完全由星云层显示。蒙版生成并不难取星点层的亮度作为蒙版基础再对它做少量模糊和膨胀就能让星点层只在“星星该在的位置”起作用。如果你熟悉 Photoshop 的图层混合用“滤色”模式直接叠合星点层效果也不错。在 Python 脚本里这个公式等价于背景层 (1 - 背景层) * 星点层相当于把星点层以亮度比例加到背景上。相比普通叠加滤色模式不会破坏背景已经拉开的对比度。4.5 一次马头星云的实操顺序我最近处理马头星云时用的是如下顺序先对窄带合成彩色图做一次轻度去星得到 starless 层在 starless 层上把云气拉伸到满意程度再做多尺度降噪星点层单独做一遍颜色饱和让亮星不至于发灰最终用星点蒙版把两层合成。整套流程大概二十分钟但效果的提升非常明显尤其是马头左侧的暗云纹理在没有星点干扰后变得清晰许多。这种“先分层、后合成”的思路比我早期直接对完整图像拉伸再修星要好用得多。5. 踩坑记录伪影、彗尾、黑圈和三倍显存5.1 边缘伪影模型对边界天生迟钝用过几次 StarNet 都会发现输出图的四边容易出现奇怪的条纹或被掏空的痕迹。这是因为卷积网络处理图像边缘时缺乏上下文属于所有深度学习去星工具的先天问题。我现在会在进模型之前先给图像四周加上一圈“反射填充”把原始图像左右翻转一周之后再跑跑完把填充裁掉边缘伪影基本可以消除。反射填充不用做得太复杂四周各加原图宽度的 5% 到 10% 就够了关键是让模型在边缘附近也能看到完整的星点形态。加填充会稍微增加推理时间但相比边缘伪影给后期带来的麻烦这点开销非常划算。5.2 过曝星核导致的黑色“甜甜圈”另一类很典型的问题出现在亮星过曝时。模型对星点中心的置信度极高但如果星核已经纯白饱和模型预测结果有时会在本该是星点中心的位置留下一个黑色圆环俗称黑圈。此时最好不要期望在去星图里去修复我会在最终合成阶段把星点层做得比实际稍大一点让它把黑圈盖住这是最省事的办法。有人会尝试在线性阶段先去星避开过曝区但我测试下来效果并不好。因为线性图像里的暗弱星点几乎淹没在噪声里模型很难把它们从背景里挑出来。更好的做法是控制前期曝光避免主目标附近的亮星彻底饱和给后期留一点余量。5.3 拉线星点和彗尾误判画面里如果有卫星轨迹、流星或拉线星点StarNet 对它们通常给不出干净的预测。拉线会被拆成一段段不连续的短星点去星后留下断断续续的残迹。处理这类素材时我会先用线性修复工具把拉线处理掉再进模型。如果是极端彗差导致的彗尾状星点建议先一步做一个“去彗差”操作否则模型会把扩散的彗尾当成云气背景星点层里剩下的全是奇怪毛边。这里要特别提醒一旦发现模型把大面积暗云气误判为星点不要急着调阈值先检查图像是不是有渐晕或光晕没处理干净。这种大范围亮度梯度会严重干扰模型对“恒星”和“背景”的区分比参数问题常见得多。5.4 显存、内存与批处理中断批量处理时内存和显存同时告急的情况我遇到太多次了。有些版本的 StarNet 在加载大图时会把整张图一次性分配给显存叠加多张图以后就会爆显存进程直接闪退。我的对策是批处理前先跑单张测试记录峰值显存如果超标就把图片切块比如切成四块依次输入处理完再拼接实测可以稳定跑完一整批。切块处理有个细节要注意块与块之间必须留足够的重叠区域否则拼接处会出现明显的接缝。我一般留 64 像素重叠处理完在重叠区做一个淡入淡出过渡基本看不出边界。5.5 输出图层位深与颜色偏移StarNet 输出结果有时会让人感觉“颜色变淡了”这不一定是模型抽风而是你的输出设置把高位数图转成了 8 位或者没有保持颜色配置文件。我通常要求输出与输入保持同样的位深至少有 16 位。如果发现整个星云层颜色发灰就在合成阶段对星点层和背景层分别做一次饱和度校正再进入图层混合。6. 主流去星工具横评StarXTerminator、StarNet、GX 与我的选择6.1 常见工具参数对比StarNet 在天文后期工具链里并不孤独。PixInsight 用户熟知的 StarXTerminator、开源社区的 GX-Astronomy 等都做着类似的事。挑选工具前先看自己的后期主平台和预算。工具平台免费/付费模型速度星点保留StarNet独立程序、APP 集成免费较快较好StarXTerminatorPixInsight 插件付费快优秀GX-AstronomyPixInsight 插件免费开源一般良好StarNet V2独立程序免费较慢中等6.2 按平台选型的一点点心得如果你只在 PixInsight 里做后期且预算允许StarXTerminator 是目前省心程度最高的选择。它对星点和星云的区分更细腻而且不需要单独管理模型文件。如果你预算为零且主力平台是 APP 或者喜欢命令行那 StarNet 是毫无疑问的免费首选。GX 则适合喜欢折腾和完全开源流程的用户。我的建议是不要在工具选择上花太多时间纠结。先去网上下一个 StarNet 跑通流程等你对“去星之后该干什么”有了清晰概念再根据痛点决定要不要升级到付费工具。没有去星流程经验的人直接上 StarXTerminator反而有可能因为参数太多而不知所措。6.3 多模型对比不是折腾是理解模型特征我偶尔会把 StarNet 和 StarXTerminator 在同一张图上各跑一遍比较哪个版本对特定目标更干净。有些窄带图对 StarNet 不友好但 StarXTerminator 输出很平稳反过来也有目标在 StarNet 里能得到更自然的暗云气纹理。多工具对比不是折腾而是对不同模型特征的理解在加深。每跑完一张去星图我都会把 StarNet 输出的 starless 版本和原图同时挂进预览然后直接切到 1:1。判断标准只有一个那就是“云气纹理有没有被星点干扰”。只要这个指标过关之后无论你走哪条后期路线基础都算打牢了。这个习惯我保持了很久也算是给刚入门的朋友一句最朴素的忠告。
返回列表