python
class ECANet(nn.Module):
def __init__(self, channels):
super(ECANet, self).__init__()
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.conv = nn.Conv1d(1, 1, kernel_size=3, padding=1, bias=False)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
y = self.avg_pool(x)
y = self.conv(y.squeeze(-1).transpose(-1, -2)).transpose(-1, -2).unsqueeze(-1)
y = self.sigmoid(y)
return x * y.expand_as(x)
class ResidualBlock(nn.Module):
def __init__(self, in_channels, out_channels, stride=1):
super(ResidualBlock, self).__init__()
G = 16 # group count
mid_channels = out_channels // 4
self.conv1 = nn.Conv2d(in_channels, mid_channels, kernel_size=1, stride=stride, bias=False)
self.bn1 = nn.BatchNorm2d(mid_channels)
self.gconv1 = nn.Conv2d(mid_channels, mid_channels, kernel_size=1, groups=G, bias=False)
self.gconv3 = nn.Conv2d(mid_channels, mid_channels, kernel_size=3, groups=G, padding=1, bias=False)
self.gconv5 = nn.Conv2d(mid_channels, mid_channels, kernel_size=5, groups=G, padding=2, bias=False)
self.gconv7 = nn.Conv2d(mid_channels, mid_channels, kernel_size=7, groups=G, padding=3, bias=False)
self.conv2 = nn.Conv2d(mid_channels*4, out_channels, kernel_size=1, bias=False)
self.bn2 = nn.BatchNorm2d(out_channels)
self.relu = nn.ReLU(inplace=True)
self.downsample = nn.Sequential(
nn.MaxPool2d(3, stride=2, padding=1),
nn.Conv2d(in_channels, out_channels, kernel_size=1, bias=False)
) if stride != 1 or in_channels != out_channels else None
def forward(self, x):
identity = x
out = self.conv1(x)
out = self.bn1(out)
out = self.relu(out)
g1 = self.gconv1(out)
g3 = self.gconv3(out)
g5 = self.gconv5(out)
g7 = self.gconv7(out)
out = torch.cat([g1, g3, g5, g7], dim=1)
out = self.conv2(out)
out = self.bn2(out)
if self.downsample:
identity = self.downsample(identity)
out += identity
out = self.relu(out)
return out
class LWResNet(nn.Module):
def __init__(self, num_classes=2): # Assuming Binary Classification (Disease/Not Disease)
super(LWResNet, self).__init__()
self.conv = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1, bias=False)
self.bn = nn.BatchNorm2d(16)
self.relu = nn.ReLU(inplace=True)
self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
self.stage1 = self._make_layer(16, 16, 1)
self.stage2 = self._make_layer(16, 32, 2)
self.stage3 = self._make_layer(32, 64, 2)
self.stage4 = self._make_layer(64, 128, 2)
self.ecanet1 = ECANet(16)
self.ecanet2 = ECANet(32)
self.ecanet3 = ECANet(64)
self.ecanet4 = ECANet(128)
self.avgpool = nn.AdaptiveAvgPool2d((1, 1))
self.fc = nn.Linear(128, num_classes)
self.softmax = nn.Softmax(dim=1)
def _make_layer(self, in_channels, out_channels, stride):
return ResidualBlock(in_channels, out_channels, stride)
def forward(self, x):
x = self.conv(x)
x = self.bn(x)
x = self.relu(x)
x = self.maxpool(x)
x = self.stage1(x)
x = self.ecanet1(x)
x = self.stage2(x)
x = self.ecanet2(x)
x = self.stage3(x)
x = self.ecanet3(x)
......
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于通道注意力LW-ResNet的小麦病害识别分类防治系统.zip (11个子文件)
Channel-Attention-LW-ResNet-Wheat-Disease-Recognition-Prevention-main
863470bb873879cf47bc8580e189c4fa.webp 288KB
d1892cddc01e75ed13feb64d0ed8c844.webp 1.06MB
327a337e980a54b2267d931867dc4ec1.webp 33KB
e2b037a47de909d096ece57bef1a9062.webp 926KB
11856bffff96c435cffe1593d1506669.webp 152KB
28e02d02cc96ba02b27947cf51ac2ccb.webp 178KB
model.py 4KB
train.py 2KB
ui.py 3KB
117d8db7e2fffdd36f9eb92726e15b9d.webp 968KB
d7e6755b5c1f9fd131d9dd84d0408985.webp 196KB
共 11 条
- 1
资源评论
博士僧小星
- 粉丝: 1929
- 资源: 5897
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功