<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>深度学习 on 随手记</title><link>https://www.bufio.cn/tags/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/</link><description>Recent content in 深度学习 on 随手记</description><generator>Hugo</generator><language>zh-cn</language><copyright>© 2026 &lt;a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener"&gt;苏ICP备2023022553号-1&lt;/a&gt;</copyright><lastBuildDate>Tue, 09 Jun 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://www.bufio.cn/tags/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/index.xml" rel="self" type="application/rss+xml"/><item><title>BiRefNet 深度解读：从图片分割到镜架边缘形态优化</title><link>https://www.bufio.cn/posts/birefnet-segmentation-decoder-morphology/</link><pubDate>Tue, 09 Jun 2026 00:00:00 +0800</pubDate><guid>https://www.bufio.cn/posts/birefnet-segmentation-decoder-morphology/</guid><description>&lt;h2 id="开头birefnet-到底在做什么"&gt;开头：BiRefNet 到底在做什么&lt;/h2&gt;
&lt;p&gt;BiRefNet 可以先粗略理解成一个高质量前景分割模型。它拿到一张图片之后，不是直接输出一张透明 PNG，而是先输出一张 mask：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;白色区域：要保留的主体
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;黑色区域：要删除的背景
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;灰色区域：边缘、不确定或半透明过渡
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果我们要做商品抠图，最终流程通常是：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;原始图片
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;BiRefNet 预测 mask
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mask 作为 alpha 通道
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;得到透明背景 PNG
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;比如一副眼镜放在白色桌面上，BiRefNet 要判断每个像素属于眼镜还是背景。真正的难点不在于“整副眼镜在哪里”，而在于鼻托、镜腿、镜框内侧边缘、镜片孔洞这些细节是否干净、连续、圆润。&lt;/p&gt;
&lt;p&gt;这篇文章按一个完全不懂深度学习的人也能理解的方式，解释 BiRefNet 的工作链路，并重点讨论一个很实际的问题：如果模型整体已经抠得很准，但镜架鼻托边缘还有毛刺和不规整，下一步应该怎么修。&lt;/p&gt;
&lt;h2 id="总览birefnet-的基本分工"&gt;总览：BiRefNet 的基本分工&lt;/h2&gt;
&lt;p&gt;可以先把 BiRefNet 拆成两个大部分：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;图片
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;backbone：提取视觉特征
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;decoder / refinement：融合特征并生成 mask
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;输出前景 mask
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;更通俗一点：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;backbone = 看图并提取证据
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;decoder = 根据证据画出最终 mask
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;backbone 不直接输出“这个像素是前景、那个像素是背景”。它输出的是很多层特征图。decoder 才负责把这些特征图融合起来，变成最终可用的分割结果。&lt;/p&gt;
&lt;h2 id="backbone不是空模型而是视觉特征提取器"&gt;Backbone：不是空模型，而是视觉特征提取器&lt;/h2&gt;
&lt;p&gt;很多人第一次听到 backbone，会以为它是一个空权重模型。其实不是。&lt;/p&gt;
&lt;p&gt;backbone 是整个网络里的视觉主干，它负责把原始 RGB 像素转换成模型内部能理解的特征。以一张 &lt;code&gt;1024x1024&lt;/code&gt; 图片为例，原始输入大概是：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[3, 1024, 1024]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里的 3 是 RGB 三个颜色通道。进入 backbone 后，它可能输出多层特征：&lt;/p&gt;</description></item><item><title>从标量、向量到张量：深度学习里的“数字容器”到底是什么？</title><link>https://www.bufio.cn/posts/scalar-vector-tensor-deep-learning/</link><pubDate>Thu, 14 May 2026 09:55:14 +0800</pubDate><guid>https://www.bufio.cn/posts/scalar-vector-tensor-deep-learning/</guid><description>&lt;p&gt;刚接触深度学习时，很多人会被一堆词劝退：标量、向量、矩阵、张量、维度、形状、通道、批次……这些词看起来像数学课，其实它们背后的核心很简单：&lt;strong&gt;深度学习处理的东西，本质上是一堆数字；这些概念只是说明数字被怎样摆放。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;你可以先把它们理解成不同大小、不同结构的“数字容器”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;标量：一个数字。&lt;/li&gt;
&lt;li&gt;向量：一排数字。&lt;/li&gt;
&lt;li&gt;矩阵：一张表格。&lt;/li&gt;
&lt;li&gt;张量：更通用的多维数字容器。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这篇文章不要求你有高等数学基础。我们只抓住一个目标：以后看到 &lt;code&gt;shape = (32, 3, 224, 224)&lt;/code&gt; 这种写法时，你知道它大概在说什么。&lt;/p&gt;
&lt;h2 id="先建立直觉模型只认识数字"&gt;先建立直觉：模型只认识数字&lt;/h2&gt;
&lt;p&gt;人看到一张猫的图片，会说“这是一只猫”。但神经网络不能直接理解“猫”这个字，也不能像人一样直接理解图像含义。它真正拿到的是数字。&lt;/p&gt;
&lt;p&gt;比如一张图片，在计算机里通常可以表示成很多像素点；每个像素点又可以用数字表示颜色。文本、声音、表格数据也一样，最后都要转成数字，模型才能计算。&lt;/p&gt;
&lt;p&gt;所以深度学习里的问题，经常会变成：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这些数字怎么组织？模型每一步拿到的数字长什么样？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这就是标量、向量、矩阵、张量这些概念的用处。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.bufio.cn/images/tensor-concepts.svg" alt="标量、向量、矩阵、张量的递进关系"&gt;&lt;/p&gt;
&lt;h2 id="标量一个单独的数字"&gt;标量：一个单独的数字&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;标量就是一个数。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0.01
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-2.7
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在深度学习中，很多结果都是标量：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;学习率 &lt;code&gt;0.001&lt;/code&gt; 是一个标量。&lt;/li&gt;
&lt;li&gt;某次训练的损失值 &lt;code&gt;1.26&lt;/code&gt; 是一个标量。&lt;/li&gt;
&lt;li&gt;一个分类结果的概率 &lt;code&gt;0.87&lt;/code&gt; 也可以是一个标量。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;标量没有方向，也没有一排、一列、几行几列这些结构。它就是一个孤零零的数字。&lt;/p&gt;
&lt;p&gt;如果用“维度”来描述，标量通常可以理解为 &lt;strong&gt;0 维&lt;/strong&gt;。这里的 0 维不是说它不重要，而是说它没有展开成列表或表格。&lt;/p&gt;
&lt;h2 id="向量一排数字"&gt;向量：一排数字&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;向量是一组按顺序排好的数字。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[170, 65, 23]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;你可以把它理解成一个人的三个特征：身高 170、体重 65、年龄 23。单个数字只能表达一个量，一排数字就可以一起描述一个对象。&lt;/p&gt;
&lt;p&gt;在机器学习里，一个样本经常会被表示成一个向量：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[面积, 卧室数量, 楼层, 距离地铁距离]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果我们要预测房价，就可以把每套房子变成这样一排数字。模型拿到的不是“这套房子不错”这种自然语言，而是一组可以计算的数。&lt;/p&gt;
&lt;p&gt;向量通常可以理解为 &lt;strong&gt;1 维&lt;/strong&gt;。这里的 1 维指的是它只有一个方向可以数：从左到右数第 1 个、第 2 个、第 3 个……&lt;/p&gt;</description></item></channel></rss>