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)

 

posted @ 2025-04-09 11:02  Code13  阅读(13)  评论(0)    收藏  举报