import torch
import torch.nn as nn
class InputCov(nn.Module):
"""
对输入的原始图像进行卷积
"""
def __init__(self, in_channels, out_channels):
super().__init__()
self.input_cov = nn.Sequential(
nn.Conv2d(in_channels, out_channels, kernel_size=(3, 3), padding=(1, 1), stride=(1, 1)),
nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1, stride=1),
nn.ReLU(inplace=False),
nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1, stride=1),
nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=2, stride=1, dilation=2),
nn.ReLU(inplace=False),
nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=2, stride=1, dilation=2)
)
def forward(self, initial_data):
op = self.input_cov(initial_data) # (batch,C,W,H)
op_ = torch.add(op, initial_data)
return op_
class StdCovLocalResBlock(nn.Module):
"""
使用标准卷积的局部残差模块
"""
def __init__(self, in_channels, out_channels):
super().__init__()
self.std_lrb = nn.Sequential(
nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1, stride=1),
nn.ReLU(inplace=False),
nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1, stride=1)
)
def forward(self, input_map):
op = self.std_lrb(input_map) # (abtch,C,W,H)
add_map = torch.sum(input_map, dim=1) # (batch_size,W,H)
add_map__ = torch.div(add_map, input_map.shape[1])
add_map_ = add_map__.unsqueeze(1) # (batch,1,W,H)
op_ = torch.add(op, add_map_)
return op_
class DilCovLocalResBlock(nn.Module):
"""
使用空洞卷积的局部残差模块
"""
def __init__(self, in_channels, out_channels):
super().__init__()
self.dil_lrb = nn.Sequential(
nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=2, stride=1, dilation=2),
nn.ReLU(inplace=False),
nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=2, stride=1, dilation=2)
)
def forward(self, input_map):
op = self.dil_lrb(input_map) # (abtch,C,W,H)
add_map = torch.sum(input_map, dim=1) # (batch_size,W,H)
add_map__ = torch.div(add_map, input_map.shape[1])
add_map_ = add_map__.unsqueeze(1) # (batch,1,W,H)
op_ = torch.add(op, add_map_)
return op_
class LeftGlobalResBlock(nn.Module):
"""
网络左半部分的全局残差模块
"""
def __init__(self, in_channels, out_channels):
super().__init__()
self.std_cov = StdCovLocalResBlock(in_channels, out_channels)
self.dil_cov = DilCovLocalResBlock(out_channels, out_channels)
def forward(self, down_map):
std_cov = self.std_cov(down_map)
dil_cov = self.dil_cov(std_cov)
add_map = torch.sum(down_map, dim=1)
add_map__ = torch.div(add_map, down_map.shape[1])
add_map_ = add_map__.unsqueeze(1) # (batch,1,W,H)
dil_ = torch.add(dil_cov, add_map_)
return dil_
class RightGlobalResBlock(nn.Module):
"""
网络右半部分的全局残差模块
"""
def __init__(self, in_channels, out_channels):
super().__init__()
self.std_cov_1 = StdCovLocalResBlock(in_channels, out_channels)
self.std_cov_2 = StdCovLocalResBlock(out_channels, out_channels)
def forward(self, up_map):
std_cov_1 = self.std_cov_1(up_map)
std_cov_2 = self.std_cov_2(std_cov_1)
add_map = torch.sum(up_map, dim=1)
add_map__ = torch.div(add_map, up_map.shape[1])
add_map_ = add_map__.unsqueeze(1) # (batch,1,W,H)
std_ = torch.add(std_cov_2, add_map_)
return std_
class Down(nn.Module):
"""
下采样模块
"""
def __init__(self, in_channels, out_channels):
super().__init__()
self.down = nn.Conv2d(in_channels, out_channels, kernel_size=2, padding=0, stride=2)
def forward(self, input_map):
return self.down(input_map)
class Up(nn.Module):
"""
上采样模块
"""
def __init__(self):
super().__init__()
self.up = nn.PixelShuffle(2)
def forward(self, input_map, skip_map):
up = self.up(input_map)
up_map = torch.sum(up, dim=1)
up_map__ = torch.div(up_map, input_map.shape[1])
up_map_ = up_map__.unsqueeze(1) # (batch,1,W,H)
skip_ = torch.add(skip_map, up_map_)
return skip_
class OutputCov(nn.Module):
"""
输出
"""
def __init__(self, in_channels, out_channels):
super().__init__()
self.cov = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1, stride=1)
def forward(self, input_map):
return self.cov(input_map)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于全局和局部残差图像预测的红外目标检测python源码+项目使用说明+注释拉满.zip 基于全局和局部残差图像预测的红外目标检测python源码+项目使用说明+注释拉满.zip 基于全局和局部残差图像预测的红外目标检测python源码+项目使用说明+注释拉满.zip 【资源说明】 该项目是个人毕设项目源码,评审分达到95分,调试运行正常,确保可以运行!放心下载使用。 该项目资源主要针对计算机、自动化等相关专业的学生或从业者下载使用,也可作为期末课程设计、课程大作业、毕业设计等。 具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现类似其他功能。 # 项目使用方法 1.自行准备数据,放到```data```目录中,已给出示例 2.执行```train.py```开始训练 3.训练的模型保存在```model_data```目录中 4.执行```predict.py```进行测试,测试的结果在```data/test/predict```中 # 环境 - Anaconda + windows10 + pytorch 1.9 + cuda 11 以及其它必须的库 # 其它声明 - 由于论文作者没有开源,本项目为本人参考作者论文进行的复现,可能存在未知问题或者BUG,一切以作者论文为准。 - 本项目提供一个预训练模型用于测试,配置好环境后可直接执行 ```predict.py```,在```data/test/predict```中查看效果。
资源推荐
资源详情
资源评论
收起资源包目录
基于全局和局部残差图像预测的红外目标检测python源码+项目使用说明+注释拉满.zip (27个子文件)
data
val
image
0.jpg 56KB
label
0.jpg 66KB
train
image
0.jpg 56KB
label
0.jpg 66KB
test
image
0.jpg 56KB
predict
0.jpg 59KB
predict.py 3KB
runs
Nov21_17-11-31_Y7000P--res
events.out.tfevents.1637485891.Y7000P 40B
Nov21_17-11-23_Y7000P--res
events.out.tfevents.1637485883.Y7000P 40B
utils
dataset.py 1KB
__pycache__
dataset.cpython-37.pyc 1KB
dataset.cpython-38.pyc 1KB
model_data
best_model-100-1.pth 62.3MB
.idea
misc.xml 192B
inspectionProfiles
Project_Default.xml 2KB
profiles_settings.xml 174B
modules.xml 264B
.gitignore 176B
DRUNet.iml 481B
项目使用说明.md 1KB
model
DRUNet_parts.py 5KB
DRUNet_model.py 1KB
__pycache__
DRUNet_model.cpython-38.pyc 1KB
DRUNet_model.cpython-37.pyc 1KB
DRUNet_parts.cpython-37.pyc 6KB
DRUNet_parts.cpython-38.pyc 5KB
train.py 4KB
共 27 条
- 1
资源评论
manylinux
- 粉丝: 4416
- 资源: 2491
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功