1. 背景:为什么需要生成复杂场景裂缝图像?

道路裂缝检测是智慧交通、基础设施巡检和道路养护中的重要任务。近年来,基于深度学习的裂缝检测与分割方法取得了较大进展,但在真实道路场景中仍然面临明显的泛化问题。

真实道路图像往往存在阴影、反光、车道线、路面污渍、植被、建筑物遮挡等复杂干扰。同时,裂缝本身也具有形态细长、尺度变化大、纹理不稳定、对比度弱等特点。这使得模型在标准数据集上训练后,迁移到复杂场景时容易出现漏检、误检和边界不准确等问题。

因此,影响模型泛化能力的关键因素不仅是标注数据数量不足,更重要的是现有数据集中裂缝形态、背景纹理和成像条件的模式多样性不足。如何构建具有复杂场景多样性的裂缝数据,是提升道路裂缝检测鲁棒性的关键问题之一。

2. 工作简介:DiffCrack 解决什么问题?

为了解决复杂场景裂缝样本不足和数据模式单一的问题,我们提出了DiffCrack:一种面向复杂场景裂缝图像生成的语义–结构可控扩散框架。

DiffCrack的目标不是简单生成“看起来像裂缝”的图像,而是希望实现三个方面的可控生成能力:

  1. 结构可控:通过裂缝 mask 控制裂缝的空间位置和几何形态;
  2. 语义可控:通过文本描述控制裂缝的宽度、深度、颜色、纹理等外观属性;
  3. 场景真实:在复杂道路背景中生成更加自然、真实且具有多样性的裂缝样本。

通过这种方式,可以用于构建更丰富的缺陷训练数据,从而提升下游裂缝检测和分割模型在复杂场景下的泛化能力。

3. 方法核心:语义控制与结构控制解耦

DiffCrack的核心思想是将裂缝生成过程中的“结构信息”和“外观语义信息”进行解耦。传统生成方法往往将裂缝的几何结构和视觉外观混合建模,容易出现裂缝位置不可控、形态不稳定、背景融合不自然等问题。DiffCrack 则将生成过程拆分为两个控制条件:

3.1 结构控制:利用掩码约束裂缝空间形态

DiffCrack 使用二值裂缝 mask 作为结构条件,用于控制裂缝在图像中的位置、走向和几何形态。这样可以保证生成裂缝与给定结构先验保持一致,避免生成结果出现明显的位置漂移或结构失真。

3.2 语义控制:利用HPA调控裂缝外观属性

在语义控制方面,DiffCrack设计了Hierarchical Prompt Attention, HPA 模块,用于对裂缝的宽度、深度、颜色和纹理等属性进行层级化控制。

例如,同一张真实裂缝掩码可以通过不同的 prompt 生成不同外观的裂缝结果:

  • thin / wide crack;
  • shallow / deep crack;
  • dark / light crack;
  • rough / smooth texture。

这种设计使得模型不仅能够保持裂缝结构稳定,还能够生成具有丰富外观变化的裂缝样本。

4. 数据集:Normal 与 Complex Scene

为了验证方法在真实道路场景中的有效性,我们构建并整理了 Normal 和 Complex Scene 两类数据。

其中,Complex Scene 主要关注真实道路图像中的复杂干扰因素,包括:

类型 示例
光照相关干扰 阴影、反光、亮度不均
路面表面干扰 车道线磨损、标线重叠、路面纹理干扰
结构性背景干扰 路边标志、植被、建筑物等

这些复杂场景能够更真实地反映道路巡检任务中模型所面临的挑战,也更适合用于评估生成数据对下游检测模型鲁棒性的提升作用。

5. 代码仓库结构

目前我们已经开源了 DiffCrack 的官方实现,代码仓库包含模型源码、数据预处理脚本、训练脚本、推理示例和预训练权重说明。

项目结构如下:

DiffCrack/
├── assets/        # 方法示意图与展示图
├── configs/       # 训练和推理配置文件
├── data/          # 数据组织示例
├── scripts/       # 训练、推理、评估脚本
├── src/           # 核心模型代码
├── tools/         # 数据预处理、训练、推理、评估入口
├── requirements.txt
└── README.md

6. 环境配置

首先克隆代码仓库:

git clone https://github.com/tq307/DiffCrack.git
cd DiffCrack

创建并激活 conda 环境:

conda create -n diffcrack python=3.10 -y
conda activate diffcrack

安装依赖:

pip install -r requirements.txt

7. 数据格式

DiffCrack 使用 JSONL 格式组织训练、验证和测试数据。每一行对应一个样本,包含目标图像、结构 mask、背景图像和文本 prompt。

示例格式如下:

{"target":"targets/0001.png","source":"masks/0001.png","background":"backgrounds/0001.png","prompt":"A deep dark crack with rough texture"}

其中:

  • target:目标裂缝图像;
  • source:裂缝结构 mask;
  • background:背景道路图像;
  • prompt:裂缝外观描述文本。

8. 数据预处理

可以使用项目中的预处理脚本生成训练所需的 JSON 文件:

python tools/preprocessing.py \
  --background_folder ./data/backgrounds \
  --crack_folder ./data/crack_templates \
  --output_json ./data/train.json \
  --mode training \
  --random_mode

如果不使用 --random_mode,则需要指定本地 Qwen2.5-VL 模型路径或模型名称,用于生成 prompt。

9. 模型训练

使用如下命令启动训练:

python tools/train.py --config configs/train.yaml

也可以使用脚本启动:

bash scripts/train.sh

多卡训练可以使用 accelerate:

NUM_PROCESSES=4 bash scripts/train.sh multi

10. 模型推理

单图或批量推理可以使用:

python tools/infer.py --config configs/infer.yaml

或者:

bash scripts/infer.sh

当没有指定 --image_path 时,程序会根据配置文件中的测试数据进行批量推理。

11. 结果评估

推理完成后,可以使用如下命令进行评估:

python tools/evaluate.py --config configs/infer.yaml --pred_path outputs/predictions.json

或者:

bash scripts/eval.sh

12. 项目地址

GitHub 项目地址:

https://github.com/tq307/DiffCrack

欢迎大家使用和交流。如果在数据集、代码运行或预训练权重方面有问题,也欢迎通过GitHub或论文中提供的联系方式进行讨论。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐