轻量化U-Net在混凝土裂缝检测中的工程实践与优化

发布时间:2026/5/26 16:04:31

轻量化U-Net在混凝土裂缝检测中的工程实践与优化 1. 项目概述当深度学习遇见混凝土裂缝检测在土木工程和基础设施维护领域混凝土结构的裂缝检测是一项既常规又至关重要的任务。过去这项工作高度依赖工程师的肉眼观察和手动测量不仅耗时费力而且检测结果极易受到个人经验、疲劳程度和环境光线的影响主观性强难以实现标准化和量化。随着无人机、巡检车和智能手机等设备采集到的图像数据呈爆炸式增长如何从海量图像中自动、精准地识别出裂缝成为了行业数字化转型的迫切需求。深度学习尤其是卷积神经网络CNN和语义分割技术为这一难题提供了革命性的解决方案。其核心原理是模仿人脑的视觉皮层通过构建多层神经网络自动从原始像素中学习并提取从边缘、纹理到复杂形状的层次化特征。在裂缝检测任务中这意味着模型能够学会区分裂缝的蜿蜒纹理与混凝土背景的粗糙表面、污渍阴影等干扰信息最终实现像素级的精确分割——即对图像中的每一个像素点进行分类明确标注出“裂缝”与“非裂缝”区域。然而将前沿的深度学习模型直接部署到工程一线常常会遇到“理想丰满现实骨感”的挑战。许多在学术数据集上表现优异的模型如经典的U-Net及其变体往往参数量巨大、计算复杂需要强大的GPU服务器才能运行。这对于需要现场作业、使用移动设备或边缘计算单元的工程师来说几乎是不可行的。模型“轻量化”因此成为打通实验室研究到工程应用“最后一公里”的关键。本文要分享的正是我们团队在这一交叉领域的一次实践基于轻量化U-Net的混凝土裂缝自动识别系统LEU-Net。我们的目标很明确在保持高精度分割能力的前提下大幅压缩模型体积和计算量让一个强大的裂缝检测AI能够跑在一台普通的、仅配备6GB显存的笔记本电脑上甚至为未来嵌入到无人机或手持巡检设备中奠定基础。接下来我将详细拆解我们是如何思考、设计并实现这个方案的其中包含大量的工程细节、选型考量和实战中踩过的坑。2. 核心思路与方案选型为什么是轻量化U-Net面对“高精度”与“轻量化”这对看似矛盾的需求我们的设计思路必须非常清晰。首先需要选择一个强大且适应性强的基准网络架构然后针对其计算瓶颈进行精准的“瘦身”手术同时还要想办法弥补“瘦身”可能带来的性能损失。2.1 基准架构选择为何锚定U-Net家族在语义分割领域U-Net是一个里程碑式的架构。它的结构对称优美形似字母“U”左侧是编码器Encoder通过卷积和池化层层下采样提取图像的抽象特征右侧是解码器Decoder通过上采样和跳跃连接Skip Connection逐步恢复空间细节最终输出与输入图像同尺寸的分割图。注意跳跃连接是U-Net的灵魂。它将编码器中同尺度的特征图直接传递到解码器对应层这使得解码器在“还原”图像时能同时利用高层语义信息知道“裂缝是什么”和底层细节信息知道“裂缝的精确边缘在哪里”对于裂缝这种细小、蜿蜒的目标至关重要。我们最初复现了经典U-Net它在我们的裂缝数据集上表现尚可但对于复杂背景如密集纹理、水渍下的细微裂缝分割效果不够精细存在断裂或误检。于是我们将目光投向了U-Net家族中更先进的成员IS-Net。IS-Net最初为高精度二值图像分割如抠图设计它在U-Net的基础上引入了更深的嵌套U型结构类似U²-Net和中间监督策略在多个公开数据集上达到了顶尖水平。然而直接将IS-Net拿来用是不现实的。它的网络深度和中间监督机制带来了巨大的计算开销和参数量。我们的实验证实在消费级显卡上训练IS-Net非常缓慢且推断速度无法满足实时性要求。但这恰恰给了我们一个绝佳的起点IS-Net强大的特征提取能力证明了U型嵌套结构的有效性我们的任务就是为其“减肥增效”。2.2 轻量化策略的权衡与抉择模型轻量化不是简单地减少层数或通道数那会直接损害模型能力。我们主要从两个层面进行优化优化卷积操作标准卷积是计算和参数的大户。我们引入了两种替代方案深度可分离卷积DWConv它将标准卷积拆分为两步先进行深度卷积每个输入通道单独卷积再进行1x1点卷积通道融合。这样能大幅减少计算量。例如对于一个输入通道为M、输出通道为N、卷积核为KxK的操作计算量可从M * N * K * K降至M * K * K M * N。空间与通道重建卷积SCConv这是一个更精巧的设计。它包含两个单元空间重建单元SRU先评估特征图的重要性通过“交叉重建”策略增强信息流减少空间冗余通道重建单元CRU则对通道进行拆分、变换和融合减少通道冗余。SCConv能自适应地压缩冗余信息保留关键特征。优化注意力机制自注意力机制如Transformer中的能捕捉长距离依赖提升模型对裂缝整体形态的理解但其计算复杂度随图像尺寸平方增长。我们采用了分组多轴哈达玛积注意力模块GHPA。它将特征图在通道维度分组并在不同的轴高度-宽度、通道-高度、通道-宽度上分别计算轻量化的注意力最后合并结果。这相当于用多个“小型望远镜”从不同角度观察特征既获得了多维度信息又避免了全局注意力带来的计算爆炸。精简网络设计我们果断移除了IS-Net中的中间监督部分。虽然它在原始任务中有助于训练深层网络但在我们的裂缝检测任务中实验表明其带来的精度提升微乎其微却显著增加了训练时的显存消耗和计算图复杂度。对于轻量化目标这是一个性价比很低的组件因此被剔除。最终的LEU-Net架构可以这样理解我们保留了IS-Net强大的嵌套U型主干但对其内部的“砖瓦”卷积层进行了替换和升级。在编码器的每个初始层使用DWConv降低计算成本在网络深处和底部等关键位置嵌入SCConv模块像“智能压缩器”一样去除冗余在中间层引入GHPA模块让网络能更好地理解裂缝的复杂形态。同时我们采用了一种混合损失函数BCE Loss Dice Loss SSIM Loss IoU Loss来指导训练以应对裂缝像素与背景像素极度不平衡的问题并让模型更关注裂缝的结构完整性和边界清晰度。3. 实战构建从数据准备到模型训练理论设计完成后接下来就是繁重但至关重要的工程实现环节。一个AI项目的成功一半取决于模型结构另一半则取决于数据与训练。3.1 数据集构建与处理的实战细节我们使用了两个数据集来确保模型的泛化能力公开桥梁裂缝数据集约1800张1024x1024图像包含不同光照、角度和背景的桥梁裂缝。自采混凝土路面裂缝数据集使用道路检测车3D激光扫描采集包含3300多张2048x2000的高分辨率图像背景更复杂噪声更多如沥青纹理、污渍、划痕。实操心得数据标注是“脏活累活”但决定模型上限。我们采用人工像素级标注裂缝为黑色255背景为白色0。这里有几个关键点一致性必须由多人标注后交叉校验统一对“发丝裂缝”、“模糊裂缝边缘”的判断标准。数据增强仅靠原始数据容易过拟合。我们使用了随机水平/垂直翻转、亮度对比度微调、添加高斯噪声等增强手段。特别注意避免使用旋转90度以上或弹性形变等过强的几何变换因为现实中的裂缝图像视角相对固定过度变换会引入不真实的样本。预处理将所有图像统一缩放到512x512输入网络。虽然损失了部分原图细节但这是平衡计算资源和精度的必要妥协。我们尝试过更大的输入尺寸但模型显存占用增长过快推断速度下降明显。3.2 模型训练的超参数配置与技巧训练环境配置如下表所示这是一套性价比较高的个人深度学习工作站配置组件配置说明GPUNVIDIA GeForce RTX 3090 (24GB)核心算力大显存方便调试CPUAMD Ryzen 9 5900X负责数据加载与预处理内存64GB DDR4确保大数据集加载流畅框架PyTorch 1.12.1 CUDA 11.6主流选择社区支持好优化器AdamW相比Adam其解耦权重衰减通常带来更好的泛化训练中的几个关键技巧学习率调度我们采用带热重启的余弦退火策略。初期用一个很小的学习率“热身”warmup让模型稳定起步随后学习率像余弦曲线一样下降在训练后期降到极低值以精细调参每隔一定周期“重启”学习率帮助模型跳出可能的局部最优解。具体参数如下# 伪代码示例 warmup_epochs 1 warmup_factor 1e-3 total_epochs 300 lr_scheduler CosineAnnealingWarmRestarts(optimizer, T_050, T_mult2, eta_min1e-6)损失函数配比混合损失L BCE Dice SSIM IoU。这里的关键是平衡。BCE Loss是基础但单独使用会导致模型偏向于占多数的背景像素。Dice Loss直接优化分割区域的重叠度对不平衡数据友好。SSIM Loss让模型学习保持裂缝的结构相似性。IoU Loss则是我们最终评估指标的直接优化。在训练初期我们给所有损失项同等权重中后期可以微调权重例如略微提升Dice和IoU的权重以进一步优化分割质量。批量大小与迭代我们设置batch_size8。更大的批次可能使训练更稳定但受限于显存。epoch300是基于早期实验确定的观察到损失在250轮后基本收敛。4. 核心模块代码级解析与实现这里深入到几个核心模块的代码实现层面看看我们是如何将理论转化为PyTorch代码的。4.1 深度可分离卷积DWConv模块实现DWConv并非简单调用PyTorch的nn.Conv2d我们需要显式地将其分解为深度卷积和点卷积两步。import torch import torch.nn as nn class DepthwiseSeparableConv(nn.Module): 深度可分离卷积模块 Args: in_channels (int): 输入通道数 out_channels (int): 输出通道数 kernel_size (int): 卷积核大小默认为3 stride (int): 步长默认为1 padding (int): 填充默认为1保持尺寸 def __init__(self, in_channels, out_channels, kernel_size3, stride1, padding1): super().__init__() # 深度卷积groupsin_channels 确保每个输入通道独立卷积 self.depthwise nn.Conv2d( in_channels, in_channels, kernel_sizekernel_size, stridestride, paddingpadding, groupsin_channels, biasFalse ) # 批归一化和激活函数 self.bn1 nn.BatchNorm2d(in_channels) self.relu1 nn.ReLU(inplaceTrue) # 点卷积1x1卷积负责通道融合与升维/降维 self.pointwise nn.Conv2d( in_channels, out_channels, kernel_size1, stride1, padding0, biasFalse ) self.bn2 nn.BatchNorm2d(out_channels) self.relu2 nn.ReLU(inplaceTrue) def forward(self, x): x self.depthwise(x) x self.bn1(x) x self.relu1(x) x self.pointwise(x) x self.bn2(x) x self.relu2(x) return x注意事项在DWConv后通常紧跟批归一化BatchNorm和ReLU激活函数这与标准卷积一致。groupsin_channels这个参数是实现深度卷积的关键。我们将其嵌入到U-Net的每个RSU残差U块的第一层替代部分标准卷积。4.2 空间与通道重建卷积SCConv模块实现SCConv的实现稍复杂它包含了特征重要性评估和重建的过程。class SCConv(nn.Module): 空间与通道重建卷积 (SCConv) 参考论文: SCConv: Spatial and Channel Reconstruction Convolution for Feature Redundancy def __init__(self, in_channels, out_channels, stride1): super().__init__() # 空间重建单元 (SRU) self.sru SRU(in_channels) # 通道重建单元 (CRU) self.cru CRU(in_channels, out_channels, stride) def forward(self, x): # 先进行空间重建 x self.sru(x) # 再进行通道重建 x self.cru(x) return x class SRU(nn.Module): 空间重建单元评估并压缩空间冗余 def __init__(self, channels): super().__init__() self.gn nn.GroupNorm(num_groups4, num_channelschannels) # 使用GroupNorm更稳定 self.sigmoid nn.Sigmoid() def forward(self, x): # 计算通道重要性权重 gn_out self.gn(x) # 计算每个通道的均值作为重要性指标 channel_weights torch.mean(gn_out, dim[2,3], keepdimTrue) # [B, C, 1, 1] # 通过Sigmoid和阈值0.5生成二值化掩码 importance_mask (self.sigmoid(channel_weights) 0.5).float() non_importance_mask 1 - importance_mask # 分离重要与非重要特征 important_features x * importance_mask non_important_features x * non_importance_mask # 交叉重建用重要特征增强非重要特征反之亦然简化版实际论文有更复杂操作 # 这里简化为相加实际可设计更复杂的交互 enhanced_important important_features 0.1 * non_important_features.mean(dim1, keepdimTrue) enhanced_non_important non_important_features 0.1 * important_features.mean(dim1, keepdimTrue) # 合并 out torch.cat([enhanced_important, enhanced_non_important], dim1) # 通过1x1卷积调整通道数回原样 reconstruct nn.Conv2d(channels*2, channels, kernel_size1).to(x.device) return reconstruct(out) class CRU(nn.Module): 通道重建单元压缩通道冗余 def __init__(self, in_channels, out_channels, stride): super().__init__() reduction_ratio 0.5 self.split_channels int(in_channels * reduction_ratio) # 上支路降维 - 分组卷积 - 点卷积 self.upper_branch nn.Sequential( nn.Conv2d(in_channels, self.split_channels, 1, biasFalse), nn.BatchNorm2d(self.split_channels), nn.ReLU(inplaceTrue), nn.Conv2d(self.split_channels, self.split_channels, kernel_size3, stridestride, padding1, groups2, biasFalse), # 分组卷积 nn.BatchNorm2d(self.split_channels), nn.ReLU(inplaceTrue), nn.Conv2d(self.split_channels, out_channels, 1, biasFalse) ) # 下支路降维 - 点卷积 self.lower_branch nn.Sequential( nn.Conv2d(in_channels, in_channels - self.split_channels, 1, biasFalse), nn.BatchNorm2d(in_channels - self.split_channels), nn.ReLU(inplaceTrue), nn.Conv2d(in_channels - self.split_channels, out_channels, 1, biasFalse) ) self.global_pool nn.AdaptiveAvgPool2d(1) self.channel_attention nn.Sequential( nn.Linear(out_channels * 2, out_channels // 4), nn.ReLU(inplaceTrue), nn.Linear(out_channels // 4, out_channels * 2), nn.Sigmoid() ) def forward(self, x): # 拆分特征图 upper self.upper_branch(x) lower self.lower_branch(x) # 融合并应用通道注意力 fused torch.cat([upper, lower], dim1) b, c, _, _ fused.size() attention self.global_pool(fused).view(b, c) attention self.channel_attention(attention).view(b, c, 1, 1) # 将注意力权重拆回上下支路 upper_att, lower_att torch.chunk(attention, 2, dim1) out upper * upper_att lower * lower_att return out实现要点SCConv的代码实现需要仔细对照论文中的公式。SRU中通过GroupNorm和均值计算通道权重是关键。CRU中的分组卷积groups2和最后的通道注意力融合是减少计算量和提升性能的核心。在实际插入网络时我们将其放置在U-Net解码器末端和每个RSU块的最后一层。4.3 混合损失函数的代码整合混合损失函数要求我们平衡各项代码实现如下import torch.nn.functional as F class HybridLoss(nn.Module): def __init__(self, bce_weight1.0, dice_weight1.0, ssim_weight0.5, iou_weight0.5): super().__init__() self.bce_weight bce_weight self.dice_weight dice_weight self.ssim_weight ssim_weight self.iou_weight iou_weight # 可以使用BCEWithLogitsLoss它内部包含了Sigmoid和BCE数值更稳定 self.bce_loss nn.BCEWithLogitsLoss() def dice_loss(self, pred, target): Dice系数损失对不平衡数据友好 smooth 1e-6 pred torch.sigmoid(pred) # 确保预测值在0-1之间 intersection (pred * target).sum(dim(1,2,3)) union pred.sum(dim(1,2,3)) target.sum(dim(1,2,3)) dice (2. * intersection smooth) / (union smooth) return 1 - dice.mean() def ssim_loss(self, pred, target): 结构相似性损失关注边界和结构 # 简化版SSIM计算实际可使用pytorch-msssim库 C1 0.01 ** 2 C2 0.03 ** 2 mu_x pred.mean(dim(1,2,3), keepdimTrue) mu_y target.mean(dim(1,2,3), keepdimTrue) sigma_x pred.std(dim(1,2,3), keepdimTrue) sigma_y target.std(dim(1,2,3), keepdimTrue) sigma_xy ((pred - mu_x) * (target - mu_y)).mean(dim(1,2,3), keepdimTrue) ssim ((2*mu_x*mu_y C1) * (2*sigma_xy C2)) / ((mu_x**2 mu_y**2 C1) * (sigma_x**2 sigma_y**2 C2)) return 1 - ssim.mean() def iou_loss(self, pred, target): 交并比损失直接优化评估指标 smooth 1e-6 pred torch.sigmoid(pred) intersection (pred * target).sum(dim(1,2,3)) total pred.sum(dim(1,2,3)) target.sum(dim(1,2,3)) union total - intersection iou (intersection smooth) / (union smooth) return 1 - iou.mean() def forward(self, pred, target): bce self.bce_loss(pred, target) dice self.dice_loss(pred, target) ssim self.ssim_loss(torch.sigmoid(pred), target) # 计算SSIM需要输入在[0,1] iou self.iou_loss(pred, target) total_loss (self.bce_weight * bce self.dice_weight * dice self.ssim_weight * ssim self.iou_weight * iou) return total_loss, {BCE: bce.item(), Dice: dice.item(), SSIM: ssim.item(), IoU: iou.item()}训练技巧在训练初期我们发现Dice Loss和IoU Loss的梯度可能不稳定。一个有效的策略是在训练的前10个epoch只使用BCE Loss让模型先初步收敛然后再逐渐引入其他损失项通过调整权重从0慢慢增加到目标值这样训练过程会更加平滑。5. 实验结果分析与模型对比经过充分的训练和调优我们在两个裂缝数据集上对LEU-Net进行了全面评估并与一系列主流分割网络进行了对比。5.1 定量指标对比数字说话我们采用语义分割领域两个核心指标进行评估平均交并比MIoU预测区域与真实区域交集与并集的比值对所有类别取平均。这是衡量分割精度的黄金指标值越高越好。平均像素精度MPA所有类别中被正确分类的像素所占比例的平均值。它更侧重于分类的正确率。下表展示了LEU-Net与其他SOTA模型在桥梁裂缝数据集上的性能对比模型参数量 (M)GFLOPs推理速度 (FPS)MIoU (%)MPA (%)U-Net31.04252.345.250.4691.95AttU-Net34.88265.142.753.5491.84U²-Net44.05191.238.558.8691.32IS-Net121.6329.821.362.0689.97EGE-Net0.050.8105.151.1590.21LEU-Net (Ours)20.1726.485.762.6688.71结果分析精度领先我们的LEU-Net取得了最高的MIoU62.66%甚至超过了庞大的IS-Net62.06%。这证明了我们的轻量化设计在去除冗余的同时有效保留甚至增强了特征提取能力。效率卓越LEU-Net的参数量仅为IS-Net的约1/6计算量GFLOPs不到其1/12。最直观的是推理速度LEU-Net达到85.7 FPS接近实时处理而IS-Net只有21.3 FPS。最佳权衡EGE-Net虽然极其轻量、速度最快但其精度MIoU 51.15%无法满足高精度检测需求。LEU-Net在精度、速度和模型大小三者间取得了最佳平衡。5.2 定性可视化对比眼见为实数字指标很重要但视觉结果更直观。我们选取了几张具有挑战性的测试图像进行可视化对比。场景一复杂背景下的细微裂缝。在桥梁数据集中一些裂缝与混凝土纹理、水渍混杂。U-Net和AttU-Net出现了明显的误检将部分纹理误判为裂缝。U²-Net和IS-Net效果较好但仍存在断裂。而LEU-Net能够最完整、连贯地分割出细微的裂缝且背景抑制得最好。场景二低光照路面裂缝。在自采路面数据集中图像整体较暗噪声多。大部分模型对黑暗区域的裂缝检测不完整或完全丢失。LEU-Net凭借GHPA模块对多维度特征的捕捉能力依然能较好地识别出低对比度下的裂缝轮廓。避坑指南如何看待可视化结果不要只看分割结果的二值图一定要结合预测置信度热力图来分析。有时模型预测出了裂缝但置信度不高热力图颜色浅。这可能意味着该区域特征模糊模型不确定。在实际应用中可以设置一个置信度阈值如0.7低于阈值的预测不予显示这样可以过滤掉大量假阳性噪声提升结果的可信度。我们在后期处理中就加入了这一步骤。5.3 消融实验每个模块贡献多少为了验证每个改进模块的有效性我们进行了消融实验。以原始IS-Net为Backbone逐步添加我们的模块实验配置参数量 (M)MIoU (%)提升说明Backbone (IS-Net)121.662.06基准 DWConv89.361.88参数量下降26%精度基本持平证明DWConv有效减负 DWConv SCConv47.262.41参数量骤降精度反超SCConv去冗余效果显著 DWConv SCConv GHPA20.1762.66加入注意力参数量进一步优化精度达到峰值实验清晰地表明DWConv是有效的“瘦身剂”能以极小的精度损失换取参数量大幅下降。SCConv是“精华萃取器”它不仅降低了参数量还通过智能重建提升了特征质量带来了精度增益。GHPA是“性能助推器”轻量化的注意力机制帮助模型更好地理解全局上下文最终在极致轻量化的同时实现了精度最优。6. 工程部署与优化实战模型训练好只是第一步将其部署到实际环境中并稳定运行是另一个充满挑战的环节。6.1 模型压缩与加速即使LEU-Net已经比较轻量为了在更苛刻的边缘设备上部署我们还可以进行后期优化量化将模型权重从32位浮点数FP32转换为8位整数INT8。这几乎能将模型大小减少4倍并显著提升推理速度。PyTorch提供了方便的量化API。需要注意的是量化可能会带来轻微的精度损失需要在测试集上仔细验证。# 动态量化示例后训练量化 model_fp32 LEU_Net() # 加载训练好的FP32模型 model_fp32.eval() model_int8 torch.quantization.quantize_dynamic( model_fp32, # 原始模型 {torch.nn.Linear, torch.nn.Conv2d}, # 要量化的模块类型 dtypetorch.qint8 # 量化类型 ) # 保存量化模型 torch.jit.save(torch.jit.script(model_int8), leunet_quantized.pt)TensorRT部署对于NVIDIA平台使用TensorRT进行推理优化是工业级标准。它能对网络层进行融合、选择最优内核、利用半精度(FP16)计算带来数倍的加速比。我们将PyTorch模型先转换为ONNX格式再用TensorRT解析和优化。6.2 实际应用Pipeline构建一个完整的裂缝检测系统不仅仅是模型推断。我们构建了以下Pipeline图像输入支持单张图片、批量图片或视频流来自摄像头/无人机。预处理调整尺寸至512x512归一化像素值。模型推断运行LEU-Net得到概率图。后处理二值化设定阈值如0.5将概率图转为0/1掩码。连通域分析使用OpenCV的cv2.connectedComponentsWithStats过滤掉面积过小的噪声点如10像素的斑点。形态学操作对二值图像进行轻微的闭运算先膨胀后腐蚀连接断裂的细小裂缝。结果输出可视化在原图上用红色叠加裂缝区域并生成结构化报告如裂缝总长度、平均宽度、最大宽度、位置坐标等。6.3 常见问题与排查实录在实际部署和测试中我们遇到了不少问题以下是部分记录问题现象可能原因排查与解决方案推理结果全黑/全白输入图像预处理不一致检查训练时用的归一化方式如/255.0或(x-mean)/std确保部署时完全一致。裂缝检测断裂、不连续后处理阈值过高模型对细小特征不敏感1. 降低二值化阈值如从0.5调到0.3。2. 在训练数据中增加更多细小裂缝的样本。3. 在后处理中使用形态学操作连接断点。在特定光照下误检率高训练数据光照条件单一模型过拟合1. 在数据增强中加强亮度、对比度、色彩抖动的变化范围。2. 收集更多不同光照条件下的真实数据加入训练。部署到边缘设备速度慢未使用优化后的运行时CPU推理1. 务必使用TensorRT、OpenVINO或ONNX Runtime进行优化部署。2. 考虑使用更轻量的Backbone如MobileNetV3进一步压缩模型但需重新训练。显存溢出OOM输入图像过大批量推理1. 确保输入图像尺寸与训练时一致。2. 进行批量推理时减小batch_size。3. 使用torch.cuda.empty_cache()及时清空缓存。我个人在实际操作中的体会是轻量化模型的设计和部署是一个不断权衡的艺术。没有“最好”的模型只有“最适合”当前场景的模型。如果追求极致的速度可以牺牲一点精度如果追求极高的精度就必须接受更大的模型和更慢的速度。LEU-Net的设计正是在这个光谱上找到了一个对我们土木工程检测场景非常实用的甜点。未来我们计划探索神经架构搜索NAS来自动寻找更优的轻量化结构并尝试将模型封装成手机APP或嵌入式设备SDK让一线巡检人员真正实现“随手拍即时检”。

相关新闻