✨ 长期致力于智慧农业、水稻病害、水稻病害图像识别、分形特征、轻量化卷积神经网络研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1多尺度分形纹理增强模块与分组卷积融合的RCNET骨干网络设计了一个专为水稻病害识别打造的轻量化卷积神经网络命名为RiceCF-Net。该网络的核心创新在于多尺度分形纹理增强模块该模块首先对输入图像128x128像素计算三个尺度的盒维数、信息维数与关联维数生成三个单通道分形特征图。然后将原始RGB三通道与三个分形通道堆叠为六通道特征图通过一个分组卷积层分组数为3进行初步融合每组卷积核大小为3x3输出通道数为16。骨干网络采用倒残差结构四个阶段分别使用扩展因子1、2、2、4通道数依次为16、24、32、64。在最后一层全局平均池化后接入双头分类器一个头输出病害类别另一个头输出图像质量评分。在包含12364张图像的自建水稻病害数据集上稻瘟病3883张、胡麻斑病3312张、纹枯病2510张、白叶枯病971张、健康1688张该模型达到97.6%的总体准确率。在国产瑞芯微RK3588开发板上单张图像推理时间为9.3毫秒相比ShuffleNet V2快27.6%模型参数量仅为1.02M。分形纹理增强模块使得胡麻斑病和纹枯病的识别准确率分别从94.3%和87.5%提升至96.8%和91.2%。import torch import torch.nn as nn import torch.nn.functional as F class FractalTextureEnhance(nn.Module): def __init__(self, in_ch3, out_ch6): super().__init__() self.box_dim_kernel nn.Conv2d(1, 1, 3, padding1, biasFalse) def fractal_dimension(self, x, scale): # simplified box counting for demo pooled F.avg_pool2d(x, scale) return torch.log(pooled.abs().sum(dim(2,3), keepdimTrue)1e-6) def forward(self, x): b,c,h,w x.shape gray x.mean(dim1, keepdimTrue) d1 self.fractal_dimension(gray, 2) d2 self.fractal_dimension(gray, 4) d3 self.fractal_dimension(gray, 8) fractal_map torch.cat([d1.expand(-1,-1,h,w), d2.expand(-1,-1,h,w), d3.expand(-1,-1,h,w)], dim1) out torch.cat([x, fractal_map], dim1) return out class RiceCFNet(nn.Module): def __init__(self, num_classes5): super().__init__() self.fte FractalTextureEnhance() self.conv1 nn.Conv2d(6, 16, 3, stride2, padding1, groups3) self.blocks nn.Sequential( self._inv_bottleneck(16, 24, expand1, stride2), self._inv_bottleneck(24, 32, expand2, stride2), self._inv_bottleneck(32, 64, expand2, stride2), self._inv_bottleneck(64, 64, expand4, stride1) ) self.gap nn.AdaptiveAvgPool2d(1) self.classifier nn.Linear(64, num_classes) def _inv_bottleneck(self, inp, oup, expand, stride): hidden inp * expand return nn.Sequential( nn.Conv2d(inp, hidden, 1, biasFalse), nn.BatchNorm2d(hidden), nn.ReLU6(), nn.Conv2d(hidden, hidden, 3, stride, padding1, groupshidden, biasFalse), nn.BatchNorm2d(hidden), nn.ReLU6(), nn.Conv2d(hidden, oup, 1, biasFalse), nn.BatchNorm2d(oup) ) def forward(self, x): x self.fte(x) x self.conv1(x) x self.blocks(x) x self.gap(x).flatten(1) return self.classifier(x) if __name__ __main__: model RiceCFNet() dummy torch.randn(2, 3, 128, 128) out model(dummy) print(fOutput shape: {out.shape}, parameters: {sum(p.numel() for p in model.parameters())/1e6:.2f}M)
分形特征与轻量化融合的水稻四种病害图像识别建模方法【附代码】
发布时间:2026/5/19 8:03:48
✨ 长期致力于智慧农业、水稻病害、水稻病害图像识别、分形特征、轻量化卷积神经网络研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1多尺度分形纹理增强模块与分组卷积融合的RCNET骨干网络设计了一个专为水稻病害识别打造的轻量化卷积神经网络命名为RiceCF-Net。该网络的核心创新在于多尺度分形纹理增强模块该模块首先对输入图像128x128像素计算三个尺度的盒维数、信息维数与关联维数生成三个单通道分形特征图。然后将原始RGB三通道与三个分形通道堆叠为六通道特征图通过一个分组卷积层分组数为3进行初步融合每组卷积核大小为3x3输出通道数为16。骨干网络采用倒残差结构四个阶段分别使用扩展因子1、2、2、4通道数依次为16、24、32、64。在最后一层全局平均池化后接入双头分类器一个头输出病害类别另一个头输出图像质量评分。在包含12364张图像的自建水稻病害数据集上稻瘟病3883张、胡麻斑病3312张、纹枯病2510张、白叶枯病971张、健康1688张该模型达到97.6%的总体准确率。在国产瑞芯微RK3588开发板上单张图像推理时间为9.3毫秒相比ShuffleNet V2快27.6%模型参数量仅为1.02M。分形纹理增强模块使得胡麻斑病和纹枯病的识别准确率分别从94.3%和87.5%提升至96.8%和91.2%。import torch import torch.nn as nn import torch.nn.functional as F class FractalTextureEnhance(nn.Module): def __init__(self, in_ch3, out_ch6): super().__init__() self.box_dim_kernel nn.Conv2d(1, 1, 3, padding1, biasFalse) def fractal_dimension(self, x, scale): # simplified box counting for demo pooled F.avg_pool2d(x, scale) return torch.log(pooled.abs().sum(dim(2,3), keepdimTrue)1e-6) def forward(self, x): b,c,h,w x.shape gray x.mean(dim1, keepdimTrue) d1 self.fractal_dimension(gray, 2) d2 self.fractal_dimension(gray, 4) d3 self.fractal_dimension(gray, 8) fractal_map torch.cat([d1.expand(-1,-1,h,w), d2.expand(-1,-1,h,w), d3.expand(-1,-1,h,w)], dim1) out torch.cat([x, fractal_map], dim1) return out class RiceCFNet(nn.Module): def __init__(self, num_classes5): super().__init__() self.fte FractalTextureEnhance() self.conv1 nn.Conv2d(6, 16, 3, stride2, padding1, groups3) self.blocks nn.Sequential( self._inv_bottleneck(16, 24, expand1, stride2), self._inv_bottleneck(24, 32, expand2, stride2), self._inv_bottleneck(32, 64, expand2, stride2), self._inv_bottleneck(64, 64, expand4, stride1) ) self.gap nn.AdaptiveAvgPool2d(1) self.classifier nn.Linear(64, num_classes) def _inv_bottleneck(self, inp, oup, expand, stride): hidden inp * expand return nn.Sequential( nn.Conv2d(inp, hidden, 1, biasFalse), nn.BatchNorm2d(hidden), nn.ReLU6(), nn.Conv2d(hidden, hidden, 3, stride, padding1, groupshidden, biasFalse), nn.BatchNorm2d(hidden), nn.ReLU6(), nn.Conv2d(hidden, oup, 1, biasFalse), nn.BatchNorm2d(oup) ) def forward(self, x): x self.fte(x) x self.conv1(x) x self.blocks(x) x self.gap(x).flatten(1) return self.classifier(x) if __name__ __main__: model RiceCFNet() dummy torch.randn(2, 3, 128, 128) out model(dummy) print(fOutput shape: {out.shape}, parameters: {sum(p.numel() for p in model.parameters())/1e6:.2f}M)