共计 1941 个字符,预计需要花费 5 分钟才能阅读完成。
背景介绍
AOD-Net(All-in-One Dehazing Network)是一种端到端的图像去雾深度学习模型,能够直接从带雾图像恢复出清晰图像,无需依赖传统的大气散射模型参数估计。其核心优势在于轻量化的网络结构(仅包含 20 个卷积层)和实时推理能力(1080p 图像约 50ms/ 帧)。预训练权重作为模型的知识载体,包含了在大量合成 / 真实雾天图像上学习到的去雾特征提取能力,开发者加载后可直接获得接近论文指标的 baseline 性能。

痛点分析
实际开发中获取预训练权重常遇到以下问题:
- 官方资源失效:原论文作者提供的百度云链接(2017 年)多数已过期
- 版本混淆:GitHub 上有多个第三方实现,权重格式(.pth/.ckpt/.h5)不统一
- 环境依赖:PyTorch 0.4 版本训练的权重需转换后才能在新版框架使用
- 校验缺失:直接加载损坏的权重文件会导致静默失败
可靠下载源推荐
- 官方备份(推荐)
- 地址:GitHub 搜索
AOD-Net-PyTorch的 Releases 页 - 优点:包含转换后的 PyTorch 1.6+ 兼容权重
-
注意:需手动解压密码
aod2017 -
学术镜像站
- 清华大学 OpenI 镜像:
openi.pcl.ac.cn/AAAI/AOD-Net -
特点:提供 MD5 校验文件和 torrent 下载
-
云盘备份
- 谷歌 Drive 共享链接(需梯子):包含 ONNX 格式转换版本
- 备用方案:阿里云 OSS 临时链接(时效 7 天)
代码实战
权重加载完整示例
import torch
from models import AODNet # 模型定义参考原论文实现
def load_pretrained(model, weight_path):
try:
state_dict = torch.load(weight_path, map_location='cpu')
if 'state_dict' in state_dict: # 处理多级嵌套
state_dict = state_dict['state_dict']
model.load_state_dict(state_dict)
print(f'Successfully loaded weights from {weight_path}')
except Exception as e:
print(f'Load failed: {str(e)}')
# 自动尝试修复常见的 key 不匹配问题
new_dict = {k.replace('module.', ''): v for k, v in state_dict.items()}
model.load_state_dict(new_dict, strict=False)
推理示例
import cv2
import numpy as np
# 预处理:归一化到 [0,1] 并转为 Tensor
def preprocess(img):
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = img.astype(np.float32) / 255.0
return torch.from_numpy(img).permute(2,0,1).unsqueeze(0)
# 加载测试图像
img = cv2.imread('hazy_image.jpg')
input_tensor = preprocess(img)
# 运行推理
with torch.no_grad():
output = model(input_tensor)
# 后处理:保存去雾结果
def postprocess(output):
output = output.squeeze().permute(1,2,0).numpy()
return (output * 255).astype(np.uint8)
cv2.imwrite('dehazed_result.jpg', postprocess(output))
避坑指南
环境配置
- CUDA 版本:建议使用 CUDA 11.x + PyTorch 1.8+ 组合
- 依赖冲突:注意 numpy 版本需 <1.24(避免 pickle 加载报错)
权重管理
- 路径处理 :推荐使用
pathlib替代字符串拼接from pathlib import Path weight_file = Path(__file__).parent / 'weights/aodnet.pth' - 内存优化 :加载大权重时添加
map_location='cpu'参数
性能对比
| 硬件平台 | 分辨率 | 推理时间 |
|---|---|---|
| RTX 3090 | 1080p | 18ms |
| Jetson Xavier | 720p | 110ms |
| CPU(i7-11800H) | 480p | 450ms |
结语
建议读者在 SOTS(O-HAZE)等标准测试集上验证权重效果后,尝试在自己的雾天拍摄数据集上进行微调(Fine-tuning)。可通过调整 --lr 1e-5 等参数适配新场景,通常 100-200 张标注图像即可获得明显提升。
正文完
