本节摘要:RGB 适合显示,不一定适合分离目标。HSV 把色相独立出来,Lab 把明度与色度分开。几何上的翻转、缩放、旋转、仿射、透视必须让图像与掩码共用同一套参数,掩码只能用最近邻插值。颜色变换只作用于图像,绝不作用于类别 id。
阅读完本节,你应当能够:
RGB 三通道高度相关:变亮时三个数一起升。用固定阈值切「红色工件」,光照一变三个通道全漂。HSV 里色相相对稳,饱和度与明度承接光照。Lab 里 L 是明度,a、b 是色度,皮肤、植被、锈迹这类「颜色成团」的目标在 a、b 平面上往往比在 RGB 立方体里好聚。
转换本身不是分割。它是让第 3 章的阈值和 K-Means 站在更合适的轴上。深度学习骨干多在 RGB 上预训练,输入侧通常保持 RGB 并做均值方差归一;传统探针分支可以走 HSV。两套并行时,不要把 HSV 的 H 通道误当成灰度给 U-Net——H 是角度,环形的,当普通灰度会在红色散开。
hsv = cv2.cvtColor(bgr, cv2.COLOR_BGR2HSV) lab = cv2.cvtColor(bgr, cv2.COLOR_BGR2Lab) # 例:按色相抠近似红色区间,需处理 0 度附近的环 h, s, v = cv2.split(hsv)
YUV、YCrCb 在视频里常见,思路相同:把亮度与色度拆开。选哪套,用一小批图在二维散点上看目标与背景是否可分,比背口诀强。
分割增强的第一戒律:几何变换是成对的。水平翻转图像,掩码必须同翻转。旋转 15 度,掩码同角度。缩放、裁切、弹性形变同理。颜色抖动、伽马、噪声、模糊只作用于图像——给掩码加噪声等于改标签。
插值:图像可用双线性或双三次,图糊一点能忍。掩码必须最近邻,或者先变换多边形再栅格化。双线性会把类别 1 和 2 的边界插成 1.4,再 round 成错误类,等于在边界制造系统噪声。
# 同一仿射矩阵作用于图和掩码,插值不同 M = cv2.getRotationMatrix2D((w / 2, h / 2), angle, 1.0) img_t = cv2.warpAffine(img, M, (w, h), flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_REFLECT) mask_t = cv2.warpAffine(mask, M, (w, h), flags=cv2.INTER_NEAREST, borderMode=cv2.BORDER_CONSTANT, borderValue=0)
透视用于文档拍斜、车道远近。估到的单应性要同时作用在图和点标注上。边界填充:图像可用反射避免黑边被当成新物体;掩码用常数 0 表示「这是填充出来的背景」,或用忽略 id 表示「这里没有监督」。把黑边当背景训练,模型会在真实黑物体上犹豫。
| 变换 | 是否改掩码 | 图像插值 | 掩码插值 |
|---|---|---|---|
| 翻转裁切缩放旋转仿射透视 | 是 | 线性类 | 最近邻 |
| 弹性形变 | 是 | 线性类 | 最近邻或先变多边形 |
| 颜色抖动伽马噪声模糊 | 否 | 按需 | 不动 |
| 归一化均值方差 | 否 | 浮点 | 不动 |
⚠️ 常见坑:先把掩码缩成网络输入大小用默认线性插值,再 round。边界类别会脏一整圈。
💡 关键直觉:增强是在复制采集时的几何与光照变化,不是在发明新类别。
阈值前:在 H 通道或 a 通道上切,比在灰度上切更稳。聚类前:用 Lab 的三个通道当特征,或只用 a、b 避免光照簇。深度学习:保持预训练的 RGB 习惯,颜色抖动在 RGB 或 HSV 做都可以,但幅度要克制,医学染色图乱抖色等于换了一种染色剂。
直方图均衡一般只动亮度通道。在 HSV 里均衡 V,在 Lab 里均衡 L,色相保持。整图 RGB 均衡会偏色,聚类会跟偏色走。
几何与颜色的组合要可复现:同一个随机种子应得到同一对。验证集通常只做确定性的尺寸对齐和归一化,不做随机翻转,否则你无法对比两次训练。测试增强(多翻转平均)是推理技巧,和训练增强分开写。

第 2.1 节的断言放在变换之后再做一次:标签仍在合法集合。随机裁切若裁空了前景,小目标任务要拒绝这次采样或降低空裁概率。透视过猛会把器官扭成不可解剖的形状,医学增强幅度通常小于自然图像。把这些写成配置而不是魔法数散落。
原文还提到平移、缩放、旋转是图像变换的基本成员。分割里它们全部继承,只是多了「成对」二字。忘了这两个字,是分割项目里最常见、也最能装成「模型不收敛」的数据 bug。
成对变换要共用一个随机源。先采样「是否翻转、角度、尺度、裁切盒」,再分别作用到图和掩码。两个独立随机源会让图转 10 度、掩码转 12 度,损失变成在学错位。调试时把种子固定,连续跑两次加载器,像素级应对上。对不上,先修随机源,再谈增强强度。
空裁:小目标随机裁切很容易裁出全背景。策略有三:拒绝重来、降低空裁概率但仍保留少量负样本、或保证裁切盒覆盖至少一个前景像素。缺陷检测需要负样本,否则模型会乱报。器官分割负样本过多会把头推向全背景。按伤害选,写进配置。
弹性形变在医学软组织上常见,幅度要用网格间距和位移标准差两个数约束。扭到解剖不可能的形状,等于教模型违反第 1.3 节的解剖约束。透视用于文档和车道,估错的单应性会让矩形变梯形过度,掩码最近邻尚可,图像已不像真实采集——那是在发明数据,不是复制采集。
可以,但必须与训练时「若用了随机裁切」的评估协议一致,且测试也同一协议。更干净的做法是验证只做可整除的缩放和填充,不裁内容。填充进掩码的区域用忽略,不算分。
颜色空间探路:在 a、b 或 H 上画目标与背景的直方图,能分开就给第 3 章阈值用。分不开,换特征或换采集,不要在 RGB 上死拧三个阈值。网络分支保持 RGB,避免 H 的环形被当成线性灰度。
H 通道在 0 与 180 或 0 与 360 处相接,红色被劈成两截。阈值或聚类前要把红区间写成两段并,或把色相旋转后再切。把 H 当普通灰度喂网络,红色物体的特征会在两端各学一套,数据少时学不拢。Lab 的 a、b 没有这种环,皮肤与植被常用。
填充:图像反射可减少假黑边物体;掩码用 0 或忽略。忽略更诚实,因为填充出来的「背景」并非采集到的背景。验证缩放后四周的垫边必须忽略,否则 mIoU 含进一圈假背景,数字被灌水。透视变换的边界更不规则,忽略掩码要跟着变,不能仍用矩形框忽略。
随机源共用之后,写一个单元测试:固定种子,连续两次加载同一对,图像与掩码像素级相等。失败先查是否有两处独立的随机调用。空裁策略按任务:缺陷检测保留少量全背景;器官分割保证盒内有前景。两种策略写在配置,不要写在某次讨论的聊天记录里。弹性形变的网格过密等于发明解剖,医学上要克制。
红色区间两段并或先旋转色相。单元测试锁种子两次加载像素级相等。空裁策略按任务写配置。验证垫边必须忽略,透视忽略掩码跟着变形。弹性网格过密视为发明解剖。H 不当线性灰度进网络。Lab 的 a、b 给探针,RGB 给预训练骨干,配置分叉写清楚,代码审查能一眼看到两条默认。
红区间测试:造一条色相靠近 0 的色带,阈值应两段合并后仍连成一块,不能在 0 处劈开。种子锁测试失败即修随机源,修完再谈强度。空裁配置按任务读,缺陷与器官不得共用默认。验证垫边忽略测试:造一张全前景再垫边,指标不应把垫边当背景正确。透视忽略掩码随变换测试用已知梯形。弹性网格上限写死,超过视为非法配置。H 进网络的代码路径应不存在,审查搜通道转换。Lab 探针与 RGB 骨干分叉在配置顶层可见。单元测试固定种子两次相等,纳入数据版本流水线。填充反射与掩码忽略的组合要在可视化里能看出垫边未被当成真实背景物体。谁把线性插值用到掩码上,测试 unique 出现非整数或非法类就应红。
反例档案:色相靠近 0 的红工件被切成两半,聚成两簇。两段合并后复原。结论:环形要处理。第二份:图转 10 度掩码转 12 度,来自两处随机。锁种子测试上线后此类事故消失。垫边不当背景的测试要进 CI。线性插值脏标签的 unique 测试保持红灯值班。
口令卡:红环两段、种子锁、空裁分任务、垫边忽略、H 不进网、掩码最近邻。CI 跑锁种子两次相等。非法 unique 红灯。透视忽略跟着变。弹性网格超上限非法配置。Lab 探针 RGB 骨干顶层分叉。
CI 锁种子、垫边忽略、非法 unique 三灯全绿才合并变换代码。红环两段测试造色带。弹性超上限直接判配置非法。H 进网络的引用搜索应为零。分叉写在配置顶层,审查一眼看到 Lab 探针与 RGB 骨干。
变换代码合并前必须绿灯:锁种子两次像素相等、红环色带仍连成一块、垫边区域走忽略、掩码 unique 无非法类、搜索不到 H 通道进骨干。五灯缺一退回。弹性网格超上限的配置文件不得进主分支。审查打开配置顶层应同时看到探针颜色空间与骨干颜色空间两个键,只看到一个键视为未分叉。
几何变换必须图与掩码同矩阵:旋转、缩放、翻转、裁切,缺一处只转图不转掩码,就是错位监督。最近邻插值给掩码,双线性给图像;反过来会把类别 2 和 3 插成 2.4,再四舍五入制造假边界。色域转换若进入训练,推理必须同色域;实验室灯下标的图,产线相机未校色就当新域,先做域声明再谈增强。仿射后立刻跑铺满与互斥断言,失败样本进隔离,不进损失。
下一节把人请进来:标注规范、收集、划分,这是管线真正的闸门。