☰
StarNet++星点分离教程:原理、安装与星空后期实战
2026/9/29 17:49:39 网站建设 项目流程

如果你在星空摄影、深空后期或者延时摄影圈子里混过一段时间,一定绕不开“把星点从照片里分出来”这件事。在我们这个圈子里,“Starnet”几乎不是指某个星座网络或者什么公司产品,它代指的是那一类用神经网络自动分离星点的工具,社区里流传最广的开源实现叫 StarNet++。我第一次见识它,是在一个后期交流会上,有位老哥正对着屏幕用蒙版和画笔一颗颗修星点,修到一半把椅子推开,说这种脏活应该早点交给 Starnet。当时我不太理解,直到自己手动处理过一张银河片,才明白那句话的分量。

这篇文章我打算把 Starnet 好好讲透:它到底解决了什么痛点、背后的原理大致是怎么回事、怎么安装、怎么真正嵌进你的后期工作流,以及我实际使用中踩过的坑。无论你是刚刚接触星空后期的新手,还是已经在用 Photoshop、PixInsight 处理天文照片的老手,只要愿意花十分钟读完,都能把它变成自己工具箱里一个实实在在的效率利器。哪怕你对神经网络一无所知,我也会尽量用大白话把原理说清楚。

1. 它究竟解决了什么:星空后期里那个最难缠的环节

1.1 手动处理星点为什么会让人想摔键盘

想理解 Starnet 为什么被这么多人追捧,得先体验一下没有它的日子。星空后期里最让人崩溃的一步,往往就是“把星点和背景分开”。为什么要分开?因为降噪、调色、对比度这些操作对星点和背景的要求是矛盾的:星空背景适合做大刀阔斧的柔化降噪,而星点需要清晰、锐利、低噪。不分开放到一起处理,必然要牺牲一头,最后出来的图要么背景噪点爆炸,要么星点软成一团。

分开的难度在于星点情况千奇百怪。广角镜头的边缘通常有彗差,星点会被拉成小尖角;折射镜有轻微色差,星点边上带着一圈紫边;长焦深空拍摄时星点还会被大气视宁度搞得模模糊糊。这些处在画面边缘的星点恰恰是最难选中、最难单独处理的。

我在 Photoshop 里手动抠星点的经典流程是这样的:先复制一层背景,用最小值滤镜把星点压下去,再对图层做高反差保留,选出高亮区域生成蒙版。听着不难,可一旦碰上银河核心这种星点密如牛毛的区域,阈值稍微拉高一点点,银河尘埃的暗结构也跟着进了选区;阈值调低一点,到处都是残余亮点。在几千万像素的全尺寸图上,这种来回拉阈值、补蒙版、擦边缘的过程,一次就是一个多小时。最后把星点叠回背景时,还会发现星点边缘有一圈肉眼可辨的光晕,又得补一笔。熬夜修图的滋味,我真切体会过太多次,心里就一个念头:谁能把这活儿机器化。

1.2 一个卷积神经网络怎么学会认出星点

这里可能是很多新手最犯怵的地方:一个神经网络,是怎么在花花绿绿的图里分清哪是恒星、哪是银河、哪是地景的?

我用一个类比来解释。你作为人类,看到一张星空夜景,能瞬间认出星点,是因为你潜意识里收集了大量特征:星点比周围背景亮,形态紧凑,亮度向边缘平滑衰减,一般只有几个像素到十几个像素大小。而银河尘埃、暗星云、地景轮廓,虽然也有明暗起伏,但它们在空间上是连续延展的物体边缘,跟星点的“孤立小圆斑”形态完全不同。

Starnet 做的事,就是让机器自己把这些特征训练出来。开发者在海量真实星空照片上标注星点位置,把完整图像喂给卷积神经网络,让网络一遍遍学习“什么样的像素组合属于星点、什么样的不属于”。经过成千上万次迭代,网络内部的卷积核学会了识别小尺度亮度峰值、对称梯度这些典型星点模式。最终,你输入一张图,它就在内部逐层做卷积、池化和重建,输出对应的星点分离结果。

用大白话说:传统滤镜是死规则,亮度超过多少就选中、小于多少就排除,面对复杂的星空场景怎么调都有漏网之鱼;而 Starnet 是活经验,它见过太多星点长什么样,所以遇到彗差、色差、薄云、暗淡星云时能综合判断。这也是为什么它处理银河核心区域时,比任何阈值滤镜都靠谱。

1.3 一进两出:这个输入输出设计为什么关键

一句话总结它的功能:一张图进,两张图出。一张是去掉星点的纯背景图,一般以_starless结尾;另一张是只剩星点的图层,一般以_stars结尾。

这两张图意味着什么?意味着你把原本纠缠在一起的信息拆成了两个独立的图层,接下来想怎么修都行。想彻底降噪星空背景?在 starless 上用最强降噪都没关系,不会再伤到一颗星。想让星点更锐利?在 stars 图层上做反锐化或收缩处理,合回去时星点自然更精致。想清除卫星轨迹、星轨残留?直接把 starless 当干净背景用就行。想把星点和背景分开调色?独立的图层让一切变成了常规的 PS 图层操作。这套“拆分—独立处理—重新合成”的流程,是 Starnet 给后期最大的礼物,也贯穿了我后面要分享的完整工作流。

2. 工具选型与模型原理:为什么值得用它而不是别的

2.1 开源 StarNet++ 与商业工具的取舍

市面上做星点分离的工具并不少。深空后期老手可能知道 PixInsight 上有收费的 StarXTerminator 插件,也有自带的各种形态学工具;摄影后期阵营里,Topaz 系列也宣传过自动去星能力。我最后把 StarNet++ 放进主力流程,主要看中了以下几点。

第一,免费开源,完全本地运行。不需要把原图传上任何人的服务器,没有隐私隐忧,对星空摄影里那些动辄几百 MB 的 16 位原片尤其友好。第二,原生支持 16 位 TIFF。星空后期的中间文件大多保留 16 位深度,商业工具不一定都愿意处理这种大格式,但 StarNet++ 对它是第一公民,我可以光明正大把半成品 TIFF 直接丢进去,不用来回转 8 位 JPEG 损失信息。第三,命令行界面天然适合批处理。延时摄影、多张拼接素材、长时间曝光序列,一跑就是几十上百张,GUI 工具一张张点开保存费时费力,命令行里写个循环就结束了。第四,模型是开放文件。权重文件就放在本地,备份、替换、折腾都自由;官方更新时也能随时跟进,不受平台授权制约。

商业工具当然有它自己的优势,比如界面友好、升级稳定、售后服务完善。如果你预算充足且只处理个位数照片,用它们完全没问题。我的主张是:不要把工具窄化成信仰,关键是找到你自己能接受、可信赖的那套,能解决实际问题就是好工具。

2.2 模型原理的超白话版本

你要是问我 Starnet 到底怎么判断“哪一颗是星”,我一般会用一个更生活化的比方:你在看一个城市的夜景,大脑会自动把“天上的灯”和“地上的灯”分开,因为你知道天上不可能有马路和栏杆。模型也在干类似的事,它通过训练拥有了一整套“夜晚常识库”,遇到一个圆形高光斑块,它会结合上下文判断,这到底是孤立漂浮的星点,还是挂在路灯杆上的灯。

跟传统图像处理的区别就在这种判断力上。传统算法需要你手动指定亮度阈值、星点半径、形态学结构元素等参数,改一个参数整张图结果都会变;而 Starnet 的训练已经把“星点长什么样”固化进了权重,你只需要递进一张照片,它就能用训练中学到的上下文信息一次性判断。遇到薄云位置的暗星,它会更多参考周围灰度梯度决定保不保留;遇到地景上极高反差的白色点缀,它会尽量把它与星空星点区分开。这种在复杂语义下做细分的能力,是传统形态学滤镜很难做到的。

2.3 版本与模型文件的坑

这方面我必须多说一句,因为被坑过。StarNet++ 这个项目从早期到后来迭代过不少版本,有的分支带图形界面,有的只有命令行;权重文件在不同教程里长得也完全不一样。我的原则是:尽量用和你的 Python 版本、TensorFlow 版本匹配的最新主线,权重只从官方对应的发布来源下载,不同版本的网络结构不能混用。

我见过不少人在群里贴“怎么我的 Starnet 输出是全黑或者全是灰块”之类的问题,往下聊深了才发现,十有八九是权重文件下错版本或者配错了型号。网络结构一变,旧权重展开到卷积层时数值完全对不上,输出自然崩坏。所以我强烈建议:下载权重时记录版本号,配置好后先用一张测试图跑一遍,确认输出正常,再正式处理你的素材。

3. 环境准备与安装实操:从零到能跑通

3.1 拿代码、建环境、装依赖

StarNet++ 的开源代码在 GitHub 上有完整仓库。我这里以常见的命令行部署方式为例,Windows 用户对应到 PowerShell 操作即可。

# 从仓库克隆项目代码 git clone https://github.com/nvityok/starnet.git cd starnet # 创建并激活虚拟环境,避免依赖跟系统 Python 打架 python -m venv venv source venv/bin/activate # Windows 下用:venv\Scripts\activate # 安装项目依赖,TensorFlow 版本按 README 里指定的来 pip install -r requirements.txt # 下载预训练权重(若项目提供脚本;没有就按 README 手动放置) python download_weights.py

装依赖的时候有两个点容易踩。一是 TensorFlow 在 Windows 下对 CUDA/cuDNN 的版本非常敏感,建议先在 README 里确认要求的版本,不要上来就装最新;二是如果本机有多个 Python 环境,一定用虚拟环境隔离,否则库冲突会让你排查到怀疑人生。装完之后跑一句python starnet.py --help,能正常列出参数就等于环境通了。

3.2 CPU 和 GPU:速度差距能有多大

没有 GPU 能不能用 Starnet?能,只是慢。我拿一张全画幅约 4500 万像素的 16 位 TIFF 测试过,纯 CPU 模式跑一次星点分离大概要十五到二十五分钟;GPU 模式下,一块 RTX 2060 级别的显卡通常一到三分钟就能跑完。差距不只是体感上的,对于批处理几十张延时素材来说,CPU 模式基本没法接受。

如果你只有核显或者老显卡,我给两个建议:一是处理前按需把长边压到 3000 像素左右,星点分离完成后再合回原尺寸;二是先把图像转成 8 位 TIFF 再跑,虽然损失一点中间态细节,但速度提升非常明显。更极端的长焦深空片,原图本身已经裁得不大,直接原尺寸喂进去就行。

另外,GPU 模式下记得在安装依赖前就装好对应版本的 CUDA 和 cuDNN。很多朋友第一次跑 Starnet 报“找不到 CUDA 设备”,问题几乎都出在版本不匹配。如果你不愿意折腾显卡环境,CPU 模式也能用,就是要耐心一点。

3.3 命令行 vs GUI:各自适合什么场景

StarNet++ 社区里出现过带图形界面的分支,一键选文件、点按钮就能处理,对新人确实友好。我自己长期用命令行,理由很简单:批量。

批量处理延时素材时,我写一个极简脚本:

for f in frames/*.tif; do python starnet.py -i "$f" -o out --mode both done

然后把命令丢进终端,该干嘛干嘛去。GUI 一张张点开、保存,几十帧做到中途弹个窗口,前功尽弃。反过来,如果你今天只挑两三张精品图细致调参,GUI 的交互反而更直接。我的建议是:不管用哪种,先会用命令行理解参数,再用 GUI 做交互式预览,两者互补,并不冲突。

4. 实战:一条真正能复现的星点分离工作流

4.1 入口设置:喂给 Starnet 前该做什么

输入直接决定输出质量,这一步经常被忽略。我的习惯是在 Lightroom 或 Camera Raw 里先把星空照片的基础调整做完:白平衡校准、曝光拉抻、对比度微调、适当降噪,然后导出为 16 位 TIFF。

为什么要先拉伸曝光再进 Starnet?因为网络训练时看到的图像大概率不是漆黑一团的原始 RAW,而是有一定动态范围的普通照片。你把一张极暗、动态范围压缩到几乎看不见的图像直接塞进去,模型面对的完全是陌生的输入分布,星点分离效果往往会偏保守,甚至出现大面积暗部误判。相反,经过拉抻的图,星点和背景的亮度层次清晰,模型判断的余地就大。作为经验法则,我建议:喂给 Starnet 的图应该已经达到“第二眼能认出银河形态”的程度,而不是一块黑板上零星几点亮斑。这样既不丢星点,也不会糊掉背景。

4.2 跑 Starnet、检查输出文件

准备就绪后,在终端里执行:

python starnet.py -i DSC_2947.tif -o out --mode both --verbose

其中-i是输入文件,-o指定输出目录,--mode both表示同时输出 starless 和 stars 两张图,--verbose能让我看到每一步的日志。跑完后,输出目录里通常会出现类似DSC_2947_starless.tif和DSC_2947_stars.tif两个文件。

第一次跑,我建议先打开 starless 检查:银河尘埃和地面结构保留是否完整?地景有没有大窟窿?亮星核是否被连根拔起?如果没有明显问题,再检查 stars 图层:星点是否完整、亮度是否正常。确认满意后,才进入下一步合成。

4.3 Photoshop 里的重建:分离-处理-合成

我常用的重建流程大致如下。

先在 Photoshop 中打开 starless 和 stars 两张图,确保两张图的尺寸和位置完全一致。如果输入和输出分辨率有细微差异,先对齐到画布精确匹配。接着,对 starless 图层做你想要的背景优化:用 Nik Collection 的降噪插件或 Topaz Denoise 对背景做强力降噪,再对背景做色彩风格化,压低饱和度、提亮银河暗部。处理完整后,把 stars 图层拖到背景图层上方,混合模式改为“滤色(Screen)”或“线性减淡(Linear Dodge)”,星点就会自然叠回背景,同时保留背景原有的明暗层次。亮度如果太高,就调低 stars 图层的不透明度;想给星点增加一点锐利感,可以先对 stars 图层做轻微反锐化,再叠回去。

最后一步是修边。某些亮星周围的残余光晕,用图层蒙版配合软边画笔擦掉。这个操作比手动抠星简单太多了,因为它只发生在很小范围的边缘区域,几分钟就能完成。

4.4 参数参考速查表

使用场景建议输入推荐参数说明
全幅单张高分辨率16 位 TIFF、原尺寸--mode both --scaler 1质量优先,耗时可接受
大批量延时素材8 位 TIFF、长边 ≤ 4000--mode both --scaler 0.5速度优先,画质损失可控
CPU 跑长焦深空片16 位 TIFF、窄幅裁切--mode only_starless --scaler 0.5必要时只出 starless,二次合成
快速验证配置8 位 PNG、压缩到 2000px--mode both --dry-run先用 dry-run 验证图和模型

关于 scaler 参数,在 Starnet 的体系里它控制内部运算的缩放。取值 1 表示保持原始像素尺度,0.5 表示按一半缩放处理,速度更快,但对极亮星核的处理精度可能略低。我在单张精品处理时坚持用 1,批量时降到 0.5。这个取舍完全取决于图像复杂度和你的底线。

4.5 延时的批处理小技巧

延时摄影需要把几十帧甚至几百帧连续图全部做星点分离,一帧帧人肉操作绝对不现实。我的做法是:先把所有帧统一处理好基础亮度、格式和尺寸。尺寸不一致会导致前后帧合成时出现接缝闪动,所以务必先批量统一。然后跑那个循环脚本,逐帧输出。等所有帧跑完,把 starless 序列导入 LRTimelapse 或 Adobe Media Encoder 做背景序列处理,stars 序列单独保留或也合成。先处理背景视频,再决定是否叠回星点层。这样处理出来的延时,星点流畅,背景干净,也方便在后期阶段单独强化背景的云雾流动。

5. 常见问题与排查技巧实录

5.1 星点没除干净,总剩下一层淡淡的星迹

遇到这种情况,第一反应不该是找什么阈值参数,因为模型通常没有对外暴露阈值,而是检查输入是否太暗。喂给 Starnet 的图像拉伸不够时,暗部星点的相对对比度低,模型很容易把它们当背景放过。我的做法是先把整张图用曲线整体提亮半档到一档,再进模型;如果处理后仍有少量残余,就把 starless 作为主导层,手动用蒙版补除个别残余星点。

另外,如果星点外围有大面积光晕没被分离,可以考虑改用更低的 scaler。我遇到过 1.0 时星点边缘光晕明显,降到 0.5 再跑居然干净了,代价是银河核心亮部会稍微保守。这类“微调 scaler 就能解决”的场景不少,值得优先排查。

5.2 地景被误删,出现黑洞

最常见的地景误删场景是:天空和地面交接处有极高反差的城市灯景、路灯杆、车灯。这些亮点形态和星点几乎一样,模型有时会误判。解决思路有两个。

第一,预先用 Photoshop 的快速蒙版或者简单锁定图层,把地景区保护住;第二,只生成 stars 图层,不用 starless,再把保留的地景图层叠回处理结果上。因为我们要的是星空背景干净,地景本来就不是必须从图里删掉的,保住它才是最稳妥的策略。

5.3 内存溢出、程序崩溃

全分辨率 16 位 TIFF 有时单张就 300MB 以上,TensorFlow 内部处理时还会转成 float32,内存占用轻松翻倍。我最早在一台 8GB 内存的笔记本上跑,一张 4500 万像素图直接内存溢出。解决路径:

  • 先把图像转成 8 位 TIFF,内存占用直接减半;
  • 调整--scaler 0.5,内部计算图规模缩小一半;
  • 分批裁切再拼接,把图横竖各分两半,分别处理后合并,适合极端的巨图。

5.4 输出一整张灰色或全黑图

灰图或黑图基本可以断定是权重和模型不匹配。网络结构变了,权重却还是旧版,展开到卷积层时数值完全对不上,输出自然崩坏。排查步骤:确认你是否从官方来源下载了与当前代码配套的权重文件;检查 README 里的版本要求;用一张小型测试图重新跑一次并开启详细日志,日志里任何张量形状错误都会明确提示哪里不匹配。这个问题我踩过,花了两小时最后发现是权重文件下错版本,非常冤。

5.5 问题速查表

问题可能原因自查与解决办法
星点没除干净输入太暗、拉伸不足先整体提亮半档到一档再跑
星点边缘有光晕scaler 取值偏大降到 0.5 重新处理
地景区出现黑洞地景高亮点被误判保护地景蒙版,或只用 stars 层
内存溢出或崩溃图太大、内存不足转 8 位、scaler=0.5、裁剪分批
输出全灰或全黑权重版本不匹配核对版本,重新下载配套权重
每次运行速度极慢没有启用 GPU检查 CUDA/cuDNN 版本,确认 TensorFlow 识别 GPU

文章到这里,该讲的流程、原理和坑基本都覆盖了。最后想分享一个我个人的实际使用心得:Starnet 并不是万能的银弹,它的输出永远需要你在 Photoshop 里再检查、再修饰一遍,但它的确是我用过的星空后期效率提升最大的一个节点。以前修一张星空图最怕星点分离,现在最享受的恰恰是拿着 starless 和 stars 两个图层自由调整——因为那意味着所有后期主动权都回到了我手里。

再送一个小技巧:批处理之前,一定要先在单张图上把所有参数验证稳定,然后再批量跑。另外,我习惯每张输出都做一份“原图与结果对照”的拼图,方便复盘哪些参数效果好、哪些场景需要换思路。Starnet 不会替你完成创作,但它能把你从最枯燥的一环里解放出来,让你把时间和注意力花在真正决定照片气质的地方。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询