pacnet
pacnet 是一个基于深度学习的开源项目,核心实现了“像素自适应卷积神经网络”(PACNN)。传统卷积神经网络在处理图像时,通常使用固定的卷积核在空间上滑动,难以灵活适应图像中复杂的局部结构变化。pacnet 通过引入引导特征(guidance features),让卷积核的形状和权重能够根据输入图像的每个像素位置动态调整。这种机制有效解决了传统方法在图像超分辨率、去噪、光流估计等任务中细节恢复不足的问题,显著提升了处理结果的清晰度和边缘保持能力。
该项目主要面向计算机视觉领域的研究人员和开发者,特别是那些希望复现 CVPR 2019 获奖论文成果,或在 PyTorch 框架下探索自适应卷积应用的团队。pacnet 提供了完整的 PyTorch 模块实现,包括标准卷积、转置卷积、池化以及条件随机场(CRF)推理等多种变体层(如 PacConv2d、PacCRF 等),并支持灵活的核类型配置与预计算接口。其代码结构清晰,文档详尽,便于用户快速集成到现有的深度学习工作流中进行实验或二次开发,是推动自适应卷积技术落地的重要工具。
使用场景
某医疗影像算法团队正在开发一套肺部 CT 扫描超分辨率重建系统,旨在将低剂量扫描得到的模糊图像恢复为清晰的高清影像,以辅助医生精准诊断微小结节。
没有 pacnet 时
- 传统卷积神经网络(如使用标准
Conv2d)在处理图像边缘和纹理细节时,往往采用固定的卷积核权重,导致重建后的肺结节边缘出现模糊或伪影。 - 为了保留细节,开发者不得不引入复杂的后处理步骤或堆叠更多网络层,这不仅增加了模型参数量,还显著拖慢了推理速度。
- 在低对比度区域,模型难以区分真实的组织纹理与噪声,容易造成过度平滑,丢失关键的病理特征。
- 调整网络结构以适应不同尺度的特征融合非常困难,通常需要大量手动实验来寻找最佳的上采样策略。
使用 pacnet 后
- 利用
PacConv2d层,模型能根据输入的引导特征(如原始高分辨率结构图)动态生成像素级的自适应卷积核,使重建出的结节边缘锐利且自然。 - 借助
PacConvTranspose2d进行上采样时,无需堆叠深层网络即可实现高质量的特征恢复,大幅减少了参数量并提升了实时推理性能。 - 通过像素自适应机制,模型在去噪的同时完美保留了微弱的纹理细节,有效避免了关键病灶信息的丢失。
- 开发者可以直接替换标准卷积层,利用其灵活的接口轻松构建多尺度特征融合架构,显著缩短了模型迭代周期。
pacnet 通过引入像素自适应卷积机制,让 AI 模型在处理医学影像等对细节极其敏感的任务时,实现了清晰度与效率的双重突破。
运行环境要求
- 未说明
需要支持 CUDA 的 NVIDIA GPU(具体型号和显存未说明),需安装带 CUDA 支持的 PyTorch
未说明

快速开始
像素自适应卷积神经网络
项目页面 | 论文 | 视频
像素自适应卷积神经网络
苏航、瓦伦·詹帕尼、孙德清、奥拉齐奥·加洛、埃里克·勒恩德-米勒以及扬·考茨。
CVPR 2019。
许可证
版权所有 © 2019 NVIDIA Corporation。保留所有权利。 根据 CC BY-NC-SA 4.0 许可证授权(https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode)。
安装
- 确保您已安装 Python>=3.5(我们建议使用 Conda 环境)。
- 将项目目录添加到您的 Python 路径中。
- 安装依赖项:
- PyTorch v0.4-1.1(包括 torchvision)并支持 CUDA:请参阅 PyTorch 安装说明。
- 其他库:
pip install -r requirements.txt
- (可选)验证安装:
python -m unittest
层目录
我们实现了 5 种类型的 PAC 层(作为 PyTorch Module):
PacConv2d:标准变体PacConvTranspose2d:用于上采样的转置(分数步长)变体PacPool2d:池化变体PacCRF:条件随机场的均场推断PacCRFLoose:条件随机场的均场推断,其中均场步骤不共享权重
关于每种层的更多详细信息如下。
PacConv2d
PacConv2d 是 nn.Conv2d 的 PAC 对应版本。它接受大多数标准的 nn.Conv2d 参数(包括 in_channels、out_channels、kernel_size、bias、stride、padding、dilation,但不包括 groups 和 padding_mode),并且我们确保在使用相同参数时,PacConv2d 和 nn.Conv2d 具有完全相同的输出尺寸。
此外,还有一些可选参数:
参数(除 Conv2d 的参数外):
kernel_type(str):'gaussian' | 'inv_{alpha}_{lambda}[_asym][_fixed]'。默认值:'gaussian'
smooth_kernel_type(str):'none' | 'gaussian' | 'average_{sz}' | 'full_{sz}'。默认值:'none'
normalize_kernel(bool):默认值:False
shared_filters(bool):默认值:False
filler(str):'uniform'。默认值:'uniform'
注意:
- kernel_size 只能为奇数
- padding 不得大于 :math:`dilation * (kernel_size - 1) / 2`
当用于构建计算图时,该层接受两个输入张量并生成一个输出张量:
in_ch, out_ch, g_ch = 16, 32, 8 # 输入、输出和引导通道的数量
f, b, h, w = 5, 2, 64, 64 # 滤波器大小、批次大小、输入高度和宽度
input = torch.rand(b, in_ch, h, w)
guide = torch.rand(b, g_ch, h, w) # 引导特征(见论文公式3中的'f')
conv = nn.Conv2d(in_ch, out_ch, f)
out_conv = conv(input) # 标准空间卷积
pacconv = PacConv2d(in_ch, out_ch, f)
out_pac = pacconv(input, guide) # PAC
out_pac = pacconv(input, None, guide_k) # 替代接口
# guide_k 是预先计算的'K'(见论文公式3)
# 形状为[b, g_ch, f, f, h, w]。可以使用 packernel2d 来创建它。
请使用 pacconv2d(结合 packernel2d)以获得其功能接口。
PacConvTranspose2d
PacConvTranspose2d 是 nn.ConvTranspose2d 的 PAC 对应版本。它接受大多数标准的 nn.ConvTranspose2d 参数(包括 in_channels、out_channels、kernel_size、bias、stride、padding、output_padding、dilation,但不包括 groups 和 padding_mode),并且我们确保在使用相同参数时,PacConvTranspose2d 和 nn.ConvTranspose2d 具有完全相同的输出尺寸。
此外,还有一些可选参数:
参数(除 ConvTranspose2d 的参数外):
kernel_type(str):'gaussian' | 'inv_{alpha}_{lambda}[_asym][_fixed]'。默认值:'gaussian'
smooth_kernel_type(str):'none' | 'gaussian' | 'average_{sz}' | 'full_{sz}'。默认值:'none'
normalize_kernel(bool):默认值:False
shared_filters(bool):默认值:False
filler(str):'uniform' | 'linear'。默认值:'uniform'
注意:
- kernel_size 只能为奇数
- padding 不得大于 :math:`dilation * (kernel_size - 1) / 2`
与 PacConv2d 类似,PacConvTranspose2d 也提供两种使用方式:
in_ch, out_ch, g_ch = 16, 32, 8 # 输入、输出和引导通道的数量
f, b, h, w, oh, ow = 5, 2, 8, 8, 16, 16 # 滤波器大小、批次大小、输入高度和宽度
input = torch.rand(b, in_ch, h, w)
guide = torch.rand(b, g_ch, oh, ow) # 引导特征,注意它需要与输出的空间尺寸匹配
convt = nn.ConvTranspose2d(in_ch, out_ch,f,stride=2,padding=2,output_padding=1)
out_convt = convt(input) # 标准转置卷积
pacconvt = PacConvTranspose2d(in_ch,out_ch,f,stride=2,padding=2,output_padding=1)
out_pact = pacconvt(input,guide) # PAC
out_pact = pacconvt(input,None,guide_k) # 替代接口
# guide_k 是预先计算的'K'
# 形状为[b,g_ch, f,f,oh,ow]。
# 可以使用 packernel2d 来创建它。
请使用 pacconv_transpose2d(结合 packernel2d)以获得其功能接口。
PacPool2d
PacPool2d 是 nn.AvgPool2d 的 PAC 对应版本。它接受大多数标准的 nn.AvgPool2d 参数(包括 kernel_size、stride、padding、dilation,但不包括 ceil_mode 和 count_include_pad),并且我们确保在使用相同参数时,PacPool2d 和 nn.AvgPool2d 具有完全相同的输出尺寸。
此外,还有一些可选参数:
参数:
kernel_size、stride、padding、dilation
kernel_type(str):'gaussian' | 'inv_{alpha}_{lambda}[_asym][_fixed]'。默认值:'gaussian'
smooth_kernel_type(str):'none' | 'gaussian' | 'average_{sz}' | 'full_{sz}'。默认值:'none'
channel_wise(bool):默认值:False
normalize_kernel(bool):默认值:False
out_channels(int):对于 channel_wise 的 'inv_*'(非固定)核,必须指定。默认值:-1
注意:
- kernel_size 只能为奇数
- padding 不得大于 :math:`dilation * (kernel_size - 1) / 2`
与 PacConv2d 类似,PacPool2d 也提供两种使用方式:
in_ch, g_ch = 16, 8 # 输入和引导特征的通道数
stride, f, b, h, w = 5, 2, 64, 64 # 步幅、卷积核大小、批次大小、输入高度和宽度
input = torch.rand(b, in_ch, h, w)
guide = torch.rand(b, g_ch, h, w) # 引导特征
pool = nn.AvgPool2d(f, stride)
out_pool = pool(input) # 标准的空间卷积
pacpool = PacPool2d(f, stride)
out_pac = pacpool(input, guide) # PAC
out_pac = pacpool(input, None, guide_k) # 另一种接口
# guide_k 是预先计算好的 'K'
# 形状为 [b, g_ch, f, f, h, w]。可以使用 packernel2d 来创建它。
请使用 pacpool2d(结合 packernel2d)的功能性接口。
PacCRF 和 PacCRFLoose
这些层提供了一种便捷的方式,可以在密集预测网络的末尾添加 CRF 组件。它们在底层执行近似的均值场推理。可用的参数包括:
Args:
channels (int): 类别数量。
num_steps (int): 均值场更新的步数。
final_output (str): 'log_softmax' | 'softmax' | 'log_Q'。默认值:'log_Q'
perturbed_init (bool): 是否对初始化进行扰动。默认值:True
native_impl (bool): 默认值:False
fixed_weighting (bool): 是否对一元项/二元项使用固定权重。默认值:False
unary_weight (float): 默认值:1.0
pairwise_kernels (dict 或 list): 二元核,详情请参见 add_pairwise_kernel()。默认值:None
使用示例:
# 创建一个针对 21 类、使用 5 步均值场推理的 CRF 层
crf = PacCRF(21, num_steps=5, unary_weight=1.0)
# 添加一个与一元项权重相等的二元项
crf.add_pairwise_kernel(kernel_size=5, dilation=1, blur=1, compat_type='4d', pairwise_weight=1.0)
# 提供了一个便捷函数,用于根据像素颜色和位置创建二元特征
edge_features = [paccrf.create_YXRGB(im, yx_scale=100.0, rgb_scale=30.0)]
output = crf(unary, edge_features)
# 注意,我们这里使用了常量值作为 unary_weight、pairwise_weight、yx_scale 和 rgb_scale,但它们也可以是张量,并通过反向传播进行学习。
实验
联合上采样
NYU Depth V2 上的联合深度上采样
训练/测试划分由 Li 等 提供
使用我们预训练的模型之一进行测试:
python -m task_jointUpsampling.main --load-weights weights_depth/x8_pac_weights_epoch_5000.pth \ --download \ --factor 8 \ --model PacJointUpsample \ --dataset NYUDepthV2 \ --data-root data/nyu4x 8x 16x 双线性插值RMSE: 5.43 RMSE: 8.36 RMSE: 12.90 PacJointUpsampleRMSE: 2.39 | 下载 RMSE: 4.59 | 下载 RMSE: 8.09 | 下载 PacJointUpsampleLiteRMSE: 2.55 | 下载 RMSE: 4.82 | 下载 RMSE: 8.52 | 下载 DJIFRMSE: 2.64 | 下载 RMSE: 5.15 | 下载 RMSE: 9.39 | 下载 从头开始训练:
python -m task_jointUpsampling.main --factor 8 \ --data-root data/nyu \ --exp-root exp/nyu \ --download \ --dataset NYUDepthV2 \ --epochs 5000 \ --lr-steps 3500 4500有关完整的命令行选项,请参阅
python -m task_jointUpsampling.main -h。
Sintel 上的联合光流上采样
训练/验证划分(
1- 训练,2- 验证)在 meta/Sintel_train_val.txt 中给出(原始来源):- 验证集:133 对
ambush_6(全部 19 对)bamboo_2(最后 25 对)cave_4(最后 25 对)market_6(全部 39 对)temple_2(最后 25 对)
- 训练集:剩余的 908 对
- 验证集:133 对
使用我们预训练的模型之一进行测试:
python -m task_jointUpsampling.main --load-weights weights_flow/x8_pac_weights_epoch_5000.pth \ --download \ --factor 8 \ --model PacJointUpsample \ --dataset Sintel \ --data-root data/sintel4x 8x 16x 双线性插值EPE: 0.4650 EPE: 0.9011 EPE: 1.6281 PacJointUpsampleEPE: 0.1042 | 下载 EPE: 0.2558 | 下载 EPE: 0.5921 | 下载 DJIFEPE: 0.1760 | 下载 EPE: 0.4382 | 下载 EPE: 1.0422 | 下载 从头开始训练:
python -m task_jointUpsampling.main --factor 8 \ --data-root data/sintel \ --exp-root exp/sintel \ --download \ --dataset Sintel \ --epochs 5000 \ --lr-steps 3500 4500有关完整的命令行选项列表,请参阅
python -m task_jointUpsampling.main -h。
语义分割
使用预训练模型之一进行测试:
python -m task_semanticSegmentation.main --data-root data/voc \ --exp-root exp/voc \ --download \ --load-weights fcn8s_from_caffe.pth \ --model fcn8s \ --test-split val11_sbd \ --test-crop -1miou (val / test) 模型名称 权重 主干网络 (FCN8s) 65.51% / 67.20% fcn8s下载 PacCRF 68.90% / 69.82% fcn8s_crfi5p4d5641p4d5161下载 PacCRF-32 68.52% / 69.41% fcn8s_crfi5p4d5321下载 PacFCN(热插拔) 67.44% / 69.18% fcn8spac下载 PacFCN+PacCRF 69.87% / 71.34% fcn8spac_crfi5p4d5641p4d5161下载 请注意,最后两个模型需要使用参数
--test-crop 512。生成预测
使用
--eval pred模式来保存预测结果,而不是报告分数。预测结果将保存在exp-root/outputs_*_pred 目录下,可用于 VOC 评估服务器:python -m task_semanticSegmentation.main \ --data-root data/voc \ --exp-root exp/voc \ --load-weights fcn8s_paccrf_epoch_30.pth \ --test-crop -1 \ --test-split test \ --eval pred \ --model fcn8s_crfi5p4d5641p4d5161 cd exp/voc mkdir -p results/VOC2012/Segmentation mv outputs_test_pred results/VOC2012/Segmentation/comp6_test_cls tar zcf results_fcn8s_crf.tgz results请注意,由于 VOC 的测试集没有公开的下载链接,因此在使用测试集时,需要从官方网站手动下载数据文件。只需将下载的 VOC2012test.tar 文件放置在数据根目录下并解压即可。
训练模型
以下以 PacCRF 的两阶段训练为例:
# 第一阶段:仅训练 CRF,冻结主干网络 python -m task_semanticSegmentation.main \ --data-root data/voc \ --exp-root exp/voc/crf_only \ --load-weights-backbone fcn8s_from_caffe.pth \ --train-split train11 \ --test-split val11_sbd \ --train-crop 449 \ --test-crop -1 \ --model fcn8sfrozen_crfi5p4d5641p4d5161 \ --epochs 40 \ --lr 0.001 \ --lr-steps 20 # 第二阶段:联合训练 CRF 和主干网络 python -m task_semanticSegmentation.main \ --data-root data/voc \ --exp-root exp/voc/joint \ --load-weights-backbone fcn8s_from_caffe.pth \ --load-weights exp/voc/crf_only/weights_epoch_40.pth \ --train-split train11 \ --test-split val11_sbd \ --train-crop 449 \ --test-crop -1 \ --model fcn8s_crfi5lp4d5641p4d5161 \ --epochs 30 \ --lr 0.0000001 \ --lr-steps 20有关完整的命令行选项列表,请参阅
python -m task_semanticSegmentation.main -h。
引用
如果您在研究中使用了此代码,请考虑引用我们的论文:
@inproceedings{su2019pixel,
author = {苏航、瓦伦·詹帕尼、孙德清、奥拉齐奥·加洛、埃里克·勒恩德-米勒、扬·考茨},
title = {像素自适应卷积神经网络},
booktitle = {IEEE计算机视觉与模式识别会议(CVPR)论文集},
year = {2019}
}
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
n8n
n8n 是一款面向技术团队的公平代码(fair-code)工作流自动化平台,旨在让用户在享受低代码快速构建便利的同时,保留编写自定义代码的灵活性。它主要解决了传统自动化工具要么过于封闭难以扩展、要么完全依赖手写代码效率低下的痛点,帮助用户轻松连接 400 多种应用与服务,实现复杂业务流程的自动化。 n8n 特别适合开发者、工程师以及具备一定技术背景的业务人员使用。其核心亮点在于“按需编码”:既可以通过直观的可视化界面拖拽节点搭建流程,也能随时插入 JavaScript 或 Python 代码、调用 npm 包来处理复杂逻辑。此外,n8n 原生集成了基于 LangChain 的 AI 能力,支持用户利用自有数据和模型构建智能体工作流。在部署方面,n8n 提供极高的自由度,支持完全自托管以保障数据隐私和控制权,也提供云端服务选项。凭借活跃的社区生态和数百个现成模板,n8n 让构建强大且可控的自动化系统变得简单高效。
AutoGPT
AutoGPT 是一个旨在让每个人都能轻松使用和构建 AI 的强大平台,核心功能是帮助用户创建、部署和管理能够自动执行复杂任务的连续型 AI 智能体。它解决了传统 AI 应用中需要频繁人工干预、难以自动化长流程工作的痛点,让用户只需设定目标,AI 即可自主规划步骤、调用工具并持续运行直至完成任务。 无论是开发者、研究人员,还是希望提升工作效率的普通用户,都能从 AutoGPT 中受益。开发者可利用其低代码界面快速定制专属智能体;研究人员能基于开源架构探索多智能体协作机制;而非技术背景用户也可直接选用预置的智能体模板,立即投入实际工作场景。 AutoGPT 的技术亮点在于其模块化“积木式”工作流设计——用户通过连接功能块即可构建复杂逻辑,每个块负责单一动作,灵活且易于调试。同时,平台支持本地自托管与云端部署两种模式,兼顾数据隐私与使用便捷性。配合完善的文档和一键安装脚本,即使是初次接触的用户也能在几分钟内启动自己的第一个 AI 智能体。AutoGPT 正致力于降低 AI 应用门槛,让人人都能成为 AI 的创造者与受益者。
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。