变化检测的精度评价,别用一个总体精度
变化检测这块,我见过最多的做法是:跑完算法,算一个总体精度,写进报告。数字通常还挺好看,经常九十几。
问题就出在这个九十几上。
先定清楚什么算"变化"
在谈精度之前,有件事必须先定:你把什么算作变化。
这句听着像废话,但实际项目里十次有八次是把这步跳过去的。跳过去的后果是,你在评价一个边界模糊的东西——算出来的精度没有意义,因为"对"和"错"本身都没定义。
我现在习惯先设闸门,再谈精度。闸门至少三档:
幅度闸门,变化量要超过一个阈值,低于阈值的当噪声或者物候波动处理;面积闸门,设最小变化图斑面积,碎斑一律不要,不然误检会炸;持续性闸门,变化得保持若干期,把单期异常排掉。
闸门定完,剩下的才叫"候选变化",再拿它去跟参考比。这时候算出来的精度才是可比的,也才能被第三方复算。
为什么 OA 在这儿基本没用
真实变化通常只占整幅图的百分之几。
这意味着一个什么都不做、把全图判成"未变化"的模型,总体精度轻松上 95%。它一个变化都没找出来,但报告上那个数字比认真干的还漂亮。
所以变化检测里,OA 这个指标不是"不够准",是"可以刷"。凡是拿 OA 当主要指标的变化检测报告,基本可以判定作者没想清楚这件事。
真正要分开报的是两个数:漏检率和误检率。
这两个数不能合
漏检是"真的变了,你没检出来"。误检是"没变,你判成变了"。
这两种错误在工程上的代价完全不对称,而且方向相反。
农业保险场景里,漏检的代价通常高于误检——该赔的没赔,出的是纠纷和合规问题;误检是成本问题,钱赔多了。所以阈值要往"宁可多报"的方向调。
换成资源调查或者生态监测,可能就得反过来:多报一个假变化,要派人去核,人力成本压不住。
代价结构不同,最优阈值就不同。所以这两个数必须分开报,不能用一个总分把两种性质完全不同的错误混在一起——那样既骗自己,也骗甲方。
伪变化才是大头
变化检测精度差,八成不是算法不行,是伪变化没清干净。
这块最阴的地方是它不报错。算法照常跑完,出图很干净,你完全看不出来结果已经被整体带偏了,最后还会以为是那块地真的退化了。
常见的几个来源:
物候错位。 两期影像不在同一个生育期。这个坑我踩过一次,有一批影像比计划的晚了十二天,玉米已经抽雄,冠层结构和叶面积跟原计划那期差得很远。前后一比,整片被标成"长势下降"。数据没错,算法没错,就是时相不对。后来要么严格对齐生育期,要么做物候归一化,没别的办法。
辐射基准差异。 不同批次的影像,反射率可能带着系统性偏移。这个最容易被忽略,因为两批数据单看都正常,混在一起才出问题。我遇到过两批 S2 L2A,一批做了 +1000 的 BOA 偏移,另一批没有。直接混用,NDVI 会整体压低 0.25 到 0.30——足够让一片正常的地看起来像出了事。
跨批次做变化检测之前,先确认两批数据的处理基线一致,偏移量对不对得上。这一步花十分钟,能省后面一周的返工。
配准误差。 亚像元的错位,会在地块边界上产生条带状的假变化。看着特别像真的——因为形状正好是边界。先配准到亚像元级,再谈检测。
云、阴影、雪。 局部整片"变化"。用质量波段做掩膜,SCL 那层就是干这个的。
样本怎么抽
这步错了,前面全白做。
最常见的错误是只在变化区域抽样。这样算出来的漏检率是假的——你根本没看未变化的地方,怎么知道有没有漏。
正确做法是变化和未变化都要抽,而且未变化要按真实比例占多数。再稳一点用分层随机抽样:变化层和未变化层分别抽,最后按面积加权回推总体。
我自己的习惯是:变化图斑 100% 目视核查,未变化区域随机抽。原因是变化图斑数量通常可控,全查能兜住系统性错误;未变化区域面积太大,全查不现实,抽样控制工作量。
我实际报哪几个数
漏检率、误检率,这两个必须分开;F1,变化检测里比 OA 靠谱得多,因为变化本身是小类;IoU,评图斑边界,出矢量成果时必报;面积一致性,检出变化面积除以参考变化面积,这是业务终局;图斑检出率,按个数算,看大块变化有没有漏。
交付给甲方的通常不是一个图,是一个面积数。所以业务级那个数才是终局,前面几层都只是过程。
说句实在的:变化检测的精度评价,本质是三件事——先把变化定义清楚,再把代价想明白,最后把两类错误分开报。
漏检和误检从来不是一回事。把它们塞进一个总体精度里,是这几年我见过最普遍、也最难被发现的自欺。