ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

无人机+AI分割:建筑外立面缺陷检测系统落地全流程解析

无人机+AI分割:建筑外立面缺陷检测系统落地全流程解析

建筑外立面检测这行,这几年悄悄变了天。过去一栋二十层的旧楼做一次全面立面巡检,最传统的做法是搭脚手架或者用吊篮,工人带着安全绳爬到几十米高空,一块砖一块砖地敲击听声,一天下来也就检查一面墙。风险高、效率低,而且很多细微缺陷用肉眼根本发现不了。现在我和团队做的这套系统,就是直接把这条流程从根上换掉。

整套系统只干三件事:第一,无人机按预设航线贴着建筑立面飞行拍照,把整栋楼的外表面全部覆盖下来;第二,用专门训练过的AI分割模型逐像素识别剥落、空鼓、开裂、渗水、锈渍等多类缺陷;第三,根据识别结果自动统计缺陷数量、面积、位置和风险等级,生成一份可以直接交付业主的外立面检测报告。全套流程跑下来,剥落缺陷的召回率可以做到98%,也就是说真实存在的100处剥落,系统最多漏过2处。

这也是我认为这类项目最有价值的地方——检测类系统,衡量成败的关键不是功能清单多漂亮,而是漏检率低不低。剥落这种东西,高层外墙上掉下来一块就是安全事故,宁可多标一些让人工复核,也不能视而不见。如果你正在做建筑检测服务、物业管理、无人机航拍,或者正在研究图像分割算法如何在工程场景落地,这篇文章值得看完。我会把采集参数、训练细节、指标权衡、报告生成,以及落地过程中踩过的坑,都摊开来说。

1. 项目核心需求与系统整体架构

1.1 先想清楚:这套系统到底要解决什么问题

做任何系统之前,别急着堆技术。这类外立面检测项目,根子上的需求只有两个字:安全。

建筑外墙剥落是城市里非常现实的风险源,尤其是保温层外贴砖的老旧小区,或者经历冻融循环的北方建筑。一块瓷砖从二十层掉下来的冲击力足够造成重伤,所以检测的目的不是生成一张看着专业的图,而是支撑一个判断:哪些地方需要立即维修,哪些地方可以在计划内处理。围绕这个目标,系统必须有四个能力,缺一不可:

  • 全立面覆盖:建筑四个立面加屋顶局部都必须拍到,不能只看采集人员感兴趣的几个角度,否则漏检就是必然的。
  • 缺陷定位:检测出来还不够,还要知道缺陷出现在哪一栋楼的哪一个立面、大约哪一层,报告才能指导维修施工。
  • 面积与尺度估算:剥落面积多大、裂缝延伸多长,直接决定维修方案和预算,业主问的第一句话往往就是“多大面积”。
  • 可复查性:每一条检测结果都必须能回溯到原始照片,供人工复核和存档,这是检测报告具备法律效力的基础。

所以整个项目从设计第一天就采用了一个解耦架构:数据采集、AI识别、报告输出三个模块相互独立,只通过标准接口传递数据。这样做的直接好处,是某个环节做技术升级时,不用把整套系统推倒重来。

1.2 系统分层思路与模块间关系

整套系统的数据流向大概是这样的:

无人机采集原始图像 → 图像预处理与筛选 → AI分割模型推理 → 缺陷结果清洗与统计 → 报告生成

第一层是采集层,核心是无人机平台和相机参数控制。这个环节决定图片质量上限,如果照片虚了、过曝了或者角度不对,后面所有环节的算法努力都会被拉低。

第二层是数据预处理层。无人机一次飞行会产生几百上千张图,里面有大量重复帧、模糊帧、角度不佳的偏移帧,先要筛掉不符合要求的像元,再把有效图像按飞行记录中的位置关联到建筑立面信息上。

第三层是AI推理层,也是整套系统最核心的技术环节。我们用的核心是一个全卷积分割模型,输入单张立面照片,输出一张和原图等尺寸的预测图,图中每个像素都会被标成某一类缺陷或者背景类别。

第四层是报告输出层,也是最体现工程能力的地方。把AI输出的像素级结果换算成缺陷块的个数、面积占比、风险等级,再挂载到楼层坐标上,最终导出为可交付的检测评估文件。

值得先说清楚的是,标题里的98%召回率指标,不是模型单独一个数字,而是采集、推理、后处理三者共同作用的结果:采集阶段拍得够清晰、重叠够充分,模型才有素材可识别;推理阶段把召回率调到很高,会带上一些误检;后处理阶段再用规则去掉明显不合理的孤立区域。这三个环节彼此纠偏,才最终得到可用的工程结果。

2. 无人机采集环节:做不好这条,AI再强也白搭

2.1 采集设备与基本参数选择

先讲硬件。我们在实际项目中用过普通四旋翼和工业级机型,体验下来,如果只是拍十层以下的小楼,改装的普通四旋翼加一台高像素相机完全够用;如果要跑高层和复杂立面,建议还是上支持实时动态载波相位差分定位的工业级机型,一是因为高层楼体容易遮挡卫星信号,二是因为需要按测区规划复杂航线时,地面站的控制稳定性差距非常明显。这里不展开具体品牌,讲几个更本质的原则:

  • 相机像素建议不低于2000万。像素越低,同样的拍摄距离下单块缺陷占到的像素数越少,小目标的召回率直接受损。
  • 镜头建议选择等效焦距在24mm到35mm之间的广角镜头。等效焦距太广会有明显桶形畸变,导致立面边缘的缺陷位置偏移;太窄则单张覆盖面积小,拍摄张数翻倍。
  • 优先选支持机械快门的机型,比纯电子快门更适合飞行采集。快速飞行时电子快门容易出现果冻效应,也就是移动物体像被扭曲的果冻,这对后期像素级分割非常不友好。

2.2 航线规划策略:不是随便飞一圈就行

航线规划是采集环节最见功力的地方。不同高度和造型的建筑,最优策略完全不同,照搬一种思路就会出事。

对于十层以下、形态方正的楼,适合用网格航线。让无人机在立面前方平行移动,像扫描仪一样一行一行扫过整个面。这时候航带之间必须留重叠,前后重叠率我建议放在80%左右,旁向重叠率在70%左右。如果你觉得这个数字高得离谱,我解释一下原因:外立面不像地面航测那样纹理平滑统一,窗户、装饰线、雨篷、阴影都会造成视觉断层。重叠率不够,AI在相邻两张照片里看到的同一个缺陷容易对不上,后处理阶段的合并与定位都会出问题。

对于十层以上的高层建筑,更适合分层环绕拍法。把建筑立面按垂直方向切成若干层段,无人机固定在一个高度上绕建筑一圈拍摄;然后升高一个层段,再绕一圈。这种策略下每层都保证有足够重叠的连续影像,也方便后期把缺陷映射到具体楼层区间。实际经验是每层段高度控制在10到15米,既保证影像分辨率,又不会让航带数量太多。

还有个经常被忽略的细节是云台角度。镜头正对墙面是理想状态,但高层绕飞、阳台凸起、立面内凹都会让墙面产生倾角。为了保证近似正视的拍摄,云台需要支持一定范围的俯仰微调。我们的做法是根据建筑外轮廓划分拍摄区域,每个区域单独设置云台角度,而不是整栋楼一镜到底。

2.3 光照条件和拍摄时机的讲究

这一节是外立面拍摄被新手忽略最多的地方。简单说,最好的拍摄窗口是阴天的上午或下午,光线均匀,墙面几乎没有硬阴影,也不会产生大量高光反射。实测下来,阴天数据的分割IoU普遍比晴天直射光数据高3到5个百分点,原因就四个字:纹理干净。

正午大晴天是灾难。阳光直射下,玻璃幕墙变成大面积镜面,墙体明暗对比夸张,剥落边缘会同时出现阴影和过曝,人眼都难分辨,机器更困难。如果实在只能在晴天拍,尽量选择顺光方向,避开阳光直射反射角。雨后天晴空气通透但墙体可能有水渍,反而容易造成渗水误检,也要注意。

拍摄距离也影响AI表现。实际测试下来,距离墙面8到12米是最舒服的区间,单张照片既保留足够空间分辨率,又不会因为过近导致缺陷被裁成碎片、增加拼接混乱。5米以内的特写虽然细节清楚,但会带来大量定位难题;超过15米后,细小裂缝会溶解在像素里,分割结果明显变差。

2.4 数据量估算与任务规划数字

举一个实际测过的例子:一栋立面面积约五千平方米的十二层办公楼。按旁向重叠70%、航带间距8米、镜头正视墙面的参数计算,单面外墙大概需要260张有效照片,四个立面加屋顶局部,总计在1100到1300张。每张原图按2000万像素、压缩后5MB存储,一次任务总数据量约6GB。

这里我要提醒一句,别被无人机遥控器上的录像功能诱惑。从视频里抽帧看上去省事,但抽出来的帧多数带着运动模糊和叶片残影,比专门拍的单帧照片质量差很多。我们在一期试验里用过4K视频抽帧做对比,同样的模型在抽帧数据上Recall掉了5个百分点。后来老老实实回到“飞到位、停稳、拍照”的间隔拍摄模式。

采集环节之所以值得花这么多篇幅,就是因为大量项目最后死在数据质量上。模型训练得再好,喂进去的测试照片是糊的、过曝的、角度歪的,输出必然不可用。这个教训,希望读者在项目启动阶段就记住。

3. AI分割模型:剥落检测 Recall 98% 是怎么练出来的

3.1 为什么选语义分割而不是目标检测

标题里写的是“AI分割”,这个选择不是顺手,而是外立面缺陷任务的性质决定的。

如果只是知道“这面墙有剥落”,用目标检测画个框就够了。但检测报告里必须写清楚剥落面积是多少平方米、裂缝延伸了多长、一片剥落区域的边界在哪里,这些信息只有像素级分割才能给出来。画框的方式会让缺陷形状和矩形框之间夹带大量背景像素,面积统计失真,维修方也没法直接拿框去指导施工。

语义分割本质上是一个逐像素分类任务。模型对输入图片的每个像素,都输出它属于背景、剥落、空鼓、开裂、渗水、锈蚀等类别的置信度概率。输出是一张和原图同尺寸的分割掩码图,同一种颜色代表同一类缺陷。有了像素掩码,计算面积就变成“数像素个数乘以单像素对应物理面积”,直接且可控。

3.2 数据准备:标注规范比模型结构更重要

训练数据来自此前多个检测项目积累的立面影像,配合人工逐张做像素级多边形标注。前后整理下来,有标注的图像大约八千多张,覆盖剥落、空鼓、开裂、渗水、锈蚀、起泡六类。坦白讲,这个规模在缺陷检测里不算大,但质量是关键,标注规范的细致程度最终决定了模型能学到什么。

标注规范定得非常细。比如剥落类,必须出现明显露出基层或断裂边缘才算正样本,仅仅表面颜色变暗但结构完好的旧墙皮不算。裂缝类,只标连续长度超过十厘米的主裂缝,发丝粗细的细小裂纹不纳入统计。渗水类,必须能看到水渍与原始墙面的边界,一整片均匀变色的旧污染不算。这个规矩不立好,模型学到的全是噪音。

类别不均衡是外立面数据里最头疼的问题。剥落和渗水样本相对多,空鼓和开裂样本少,尤其高层外立面开裂往往又细又浅。直接用原始分布训练,模型会把注意力全放在剥落上。我用了三种手段均衡:

  • 对少数类图像做针对性增强,比如把开裂区域做随机旋转、拉伸、加亮暗变化,让模型看到更多这个类别的变化形态;
  • 按类别比例做重采样,让样本少的类别在每次迭代中出现的频率更高;
  • 在损失函数里给少数类更高的权重,不让优化方向被大类别样本带偏。

3.3 模型结构与训练策略细节

模型主体采用编码器-解码器结构,编码器部分用预训练的分类骨干网络,解码器逐步恢复空间分辨率,中间加入注意力模块,帮助网络更关注缺陷边缘和局部纹理区域。现在很多分割任务都在走这个路子,细节不展开,只说几个直接影响结果的调优点。

第一,输入分辨率。我们最终用1024×1024的输入切片。分辨率太小对小裂缝不友好,太大导致显存不足、推理速度骤降。大图推理时会切成四分之一重叠的滑窗块,预测后按位置拼回原图尺寸,重叠区域取两次预测的平均值,能明显减少切割边缘的伪影。

第二,训练轮次与早停。分割模型很容易过拟合,尤其是数据量不大时。我盯验证集的mIoU和逐类Recall做早停,一般二十到四十轮之间验证指标就不再上升,这时候立刻保存最优权重,而不是死跑满固定轮数。

第三,推理时做多尺度预测。同一张图分别用0.8倍、1.0倍、1.2倍分辨率推理,再把三份概率图按像素平均。多尺度带来的绝对提升不大,但很稳定,尤其是裂缝这种细长目标,不同尺度下连续性表现更好,误断的概率会降低。

3.4 评估指标与98%召回率的实现逻辑

检测类任务里,行业习惯先看召回率,再看精度,再看IoU。召回率衡量“真实缺陷里有多少被识别出来了”,精度衡量“识别结果里有多少是真缺陷”。在墙面剥落这个场景里,我们选择把Recall作为第一指标。

剥落检测召回率做到98%,核心是调低了每个像素被判定为剥落的概率阈值。模型输出概率图后,默认情况下概率大于0.5才认作缺陷,我们把这个阈值往下调到0.3左右。阈值一降,更多轻微、模糊、边缘不清晰的剥落区域会被标出来,必然伴随一定比例的误检。策略就是“宁可误检,不可漏检”,因为误检可以交给后处理规则和人工复核过滤,而漏检直接带来安全风险。

为了让98%这个数字真实可信,验证集必须和训练集完全隔离,而且专门挑了一批此前没有参与标注的楼来做验证。跨楼验证的分数一般比同楼验证低几个点,这个现象很正常——建筑风格、外墙材质、光照条件一变,数据分布就偏移。所以实际交付时,我们还会在目标项目现场采集少量数据做快速校核,看指标掉点幅度,再决定是否补充标注做二次精调。

后处理也有一层关键工序。分割输出的掩码常有细碎噪声,比如把窗户胶缝误认成裂缝。先用开运算去掉孤立噪点,再按面积阈值过滤,小于五十像素的小孤立区域直接清除;同时用闭运算把相邻同类像素连成完整块状,避免同一个剥落区域被拆成几十个碎片。这套简单规则跑完,缺陷个数和面积统计都会干净很多。

4. 自动报告生成:把AI结果变成能交付的文件

4.1 从像素掩码到缺陷实体的换算

模型输出的是像素级掩码,但业主和施工方要的不是一张彩色标记图,而是一句话:“东立面第8层附近,发现一处剥落,面积约1.2平方米,风险等级高”。所以后处理阶段除了清洗噪声,还要完成像素到物理尺度的换算。

换算逻辑不复杂,关键是先知道采集时的单像素物理尺寸。假设拍摄距离墙面10米,用35mm等效焦距,传感器宽度23.5mm,单张图横向分辨率5472像素,那么单像素对应的墙面宽度大约是传感器宽度乘以拍摄距离再除以焦距,最后再除以横向像素数。代入数字算下来约1.2毫米,也就是一百个像素的跨度对应12厘米左右。有了这个换算关系,缺陷像素块就能转成平方米面积。

这个计算虽然简单,实际却容易出错,因为楼体不是理想平面,阳台、装饰线、转角会让同一张图中不同部位的物理尺度产生偏差。我们的处理是按立面分区预先校正,尽量选用正视拍摄的照片做面积统计,不规则的部位备注为估算值,并标注误差范围,避免给施工方造成过度精确的误导。

4.2 报告模板结构与风险等级划分

自动报告不是简单贴几张图,而是形成一套符合检测行业惯例的文档。我们最终固化的报告模板包括这些部分:

  • 封面:项目名称、检测日期、报告编号、检测单位。
  • 总体结论:在显著位置写清“存在高风险剥落N处,建议7日内安排维修”之类的摘要信息。
  • 缺陷一览表:列出全部缺陷的编号、立面位置、预估楼层、类别、面积和风险等级。
  • 分布总图:把建筑立面展开,叠加缺陷位置标记,让人一眼看出整栋楼最危险的是哪片区域。
  • 局部详图:每个缺陷配一张原始照片、一张分割掩码图、一段文字描述。
  • 附录:原始采集数据清单和存档目录。

风险等级分三档。高风险对应剥落已露出基层且面积大于0.5平方米,或者裂缝宽度大且可能贯通墙体;中风险对应剥落面积小于0.5平方米,或有明显鼓包但尚未破裂;低风险对应渗水痕迹、轻微粉化、细裂缝。分档标准跟业主的维修计划直接绑定,拿到的不是一份模糊的“问题列表”,而是可以直接排班施工的清单。

4.3 报告生成自动化的工程实现

报告生成的自动化,基础是把数据层、渲染层、导出层分开设计。

数据层是AI结果清洗后的结构化文件,每条缺陷包含编号、类别、多边形坐标、面积、楼层估算、置信度字段。渲染层负责把结构化数据转换成可视化内容。我们最终采用基于HTML模板转文件导出的方案,好处是一套模板代码可以同时生成在线预览版和正式交付版,排版统一、维护成本低。一栋楼的数据量导出响应时间控制在十几秒内,服务器压力可以忽略不计。

这里面有个容易被忽视的点:报告里所有图片文件必须规范命名,原始图、掩码图、叠加图三组文件用同一个序号体系挂在缺陷编号下。这样不管谁拿报告去复核,都能在存档目录里快速找到原始证据,避免出现“报告写了但查无实据”的尴尬。

5. 落地过程中的常见问题与排查

5.1 数据质量引发的模型误检

项目上线初期,我们遇到过一轮典型的“误检风暴”。现象是报告里大面积标出渗水,但现场复核发现那其实是外墙材料本身的深浅条纹。深入排查后发现,采集那几天选错了时机,午后阳光斜照让墙面产生大量明暗缓变条纹,模型把阴影梯度误判成了水渍边界。

这个问题的修复不是靠加数据,靠的是采集规范。我们定了几条铁律:阴天优先,午后13点到15点不飞,拍摄前看直方图校准曝光,确保墙面纹理既不过曝也不欠曝。同时还在推理管线里对高光区域做了掩膜排除,把亮度接近过曝的像素从后处理中剔除。

5.2 误差控制与人工复核机制

召回率做到98%,反过来必然有精度损失。工程现场复核成本高,不能指望人工全量复查每一处标记。我们建立了两级复核机制。

第一级是规则复核。后处理时但凡缺陷面积小于阈值、或由孤立噪点形成的小区域直接清除。第二级是抽样人工复核。对每栋楼按高风险全查、中风险抽检的方式,人工在原始图像中确认缺陷位置,确认后再盖电子章归档。这套机制跑下来,既能保证高风险缺陷不被遗漏,又不会让人工淹没在低风险标记里。

复核过程中,我发现最容易出错的是楼层估算。无人机没接入楼内标高,仅靠高度传感器换算楼层时会有偏差。后来我们引入立面特征点校正:在报告生成前,自动识别照片中的楼层分割线、窗户阵列这类周期性结构,用这些结构对楼层高度做局部纠正。这样报告里写的“第8层”才真正贴近现场的第8层,而不是一个近似值。

5.3 采集与推理的效率优化建议

最后说效率。一栋五千平米的楼,从起飞到拍完四个立面加屋顶局部,飞行时间大约一个半小时,加上电池更换和航线切换,半天内可以完成。AI推理用单卡GPU跑一千张左右的图,分割推理加后处理大约半小时。报告导出不到一分钟。整个链路从无人机起飞到拿到报告,半天到一天内能完成。过去同样一栋楼,人工吊篮检测加手工出报告,通常要三到五天。

分享几张我们在实际项目中遇到的问题速查表,给同行参考:

常见现象可能原因处理方式
分割结果出现大量细碎噪点拍摄距离过远或压缩率过高提高重叠率、降低图片压缩比、后处理加大最小面积阈值
墙面阴影被识别成裂缝晴日强光下硬阴影干扰改为阴天采集、调整云台角度、在校验集中加入暗场景样本
楼层定位偏差一层以上高度传感器误差累积引入窗户阵列等周期性特征做楼层校正
模型在新建筑上Recall明显下降新楼材质或风格分布偏移采集少量当地样本做快速校验并二次精调
报告导出图片找不到原始图文件命名不规范建立“原始图-掩码-叠加图”编号关联规则

5.4 部署与交付环节的几个隐藏坑

这套系统不只是一个算法Demo,真正交付时会遇到不少工程层面的坑。比如客户现场电脑性能不足,模型推理一张一千二百万像素的照片要几十秒,根本跑不动。我们在交付时统一做了模型轻量化,把骨干网络换成更小的版本,并且对推理框架做了优化,让千张图的处理时间控制在半小时内。

又如离线环境部署。不少检测项目现场网络条件很差,客户要求所有数据不出内网。这意味着依赖模型和推理组件必须在离线状态下完整运行,不能每次启动都去云上拉库。我们在项目交付包里预置了全部依赖组件,做了完整离线安装验证,确保现场环境一键部署。

还有照片隐私与数据安全。无人机采集的图像会包含周边道路、行人、车辆,交付给业主前必须做定位脱敏处理,并注明数据留存期限。这个环节容易被开发团队忽略,但在合规层面却是硬要求,处理不当会给客户带来麻烦。

6. 写在最后:经验与扩展方向

做完这个项目,我个人的经验体会是,检测类系统的目标函数必须是“漏检最小化”,而不是追求一个漂亮的平均分数。98%的召回率背后,是采集规范、模型调优、后处理规则、人工复核四层机制协作的结果,任何单独一环都撑不起这个数字。你如果准备在自己的项目里做类似系统,我的建议是:不要一上来就买最贵的无人机,先把最关心的几类缺陷的标注规范定下来;不要急着追求高精度模型,先把采集规范写死;报告模板最好在项目启动时就找业主确认,而不是等模型做完了再补。

扩展方向上,现在这套系统还只在可见光范围内工作。下一步可以考虑加入红外热成像模块用于空鼓检测和渗水路径分析。空鼓区域和正常墙体的热惯量差异在红外图上往往非常清晰,这是可见光暂时做不到的。另一个有意思的方向是做三维病害地图,把二维分割结果投影到三维建筑模型表面,直接在数字孪生体上查看整栋楼的健康状态,这对大型物业集团和城市级巡检都很有价值。

最后再分享一个实用小技巧:如果团队是从零开始做,别贪心,先选定一种缺陷类型,在一个立面上把链路跑通,再逐步扩展类别和建筑范围。我见过太多项目死在“什么都要做”的初期设计上,而把小范围试点做扎实,反而是最快见到成果的路径。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进