3.24
想在浓烟环境人体识别赛题中加几个创新点,先想了一个自适应烟雾感知,通过烟雾密度估计网络动态调整去烟强度
import cv2 import numpy as np import torch import torch.nn as nn import torch.nn.functional as F class SmokeDensityEstimator(nn.Module): """创新点1:烟雾密度估计网络""" def __init__(self): super().__init__() self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1) self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1) self.conv3 = nn.Conv2d(32, 1, kernel_size=3, padding=1) self.pool = nn.MaxPool2d(2) def forward(self, x): x = F.relu(self.conv1(x)) x = self.pool(x) x = F.relu(self.conv2(x)) x = self.pool(x) x = torch.sigmoid(self.conv3(x)) return x class AdaptiveDehazeNet(nn.Module): """创新点2:自适应去烟网络""" def __init__(self): super().__init__() # 编码器 self.encoder = nn.Sequential( nn.Conv2d(3, 32, kernel_size=3, padding=1), nn.ReLU(), nn.Conv2d(32, 64, kernel_size=3, padding=1), nn.ReLU(), nn.MaxPool2d(2) ) # 带注意力机制的解码器 self.decoder = nn.Sequential( nn.ConvTranspose2d(64, 32, kernel_size=2, stride=2), nn.ReLU(), nn.Conv2d(32, 16, kernel_size=3, padding=1), nn.ReLU(), nn.Conv2d(16, 3, kernel_size=3, padding=1), nn.Sigmoid() ) self.smoke_estimator = SmokeDensityEstimator() def forward(self, x): smoke_density = self.smoke_estimator(x) x = self.encoder(x) # 创新点:烟雾密度引导的特征增强 x = x * (1 + smoke_density.mean()) # 根据烟雾浓度动态调整 x = self.decoder(x) return x, smoke_density def preprocess_image(image_path): """图像预处理""" img = cv2.imread(image_path) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = img.astype(np.float32) / 255.0 img = torch.from_numpy(img).permute(2, 0, 1).unsqueeze(0) return img # 使用示例 model = AdaptiveDehazeNet() input_img = preprocess_image("smoky_scene.jpg") output_img, density_map = model(input_img)