手机网站商城源码,青岛网站制作百家号,长沙航科网页制作,福州网站建设团队1. 引言#xff1a;U-Net背景及应用
1.1 U-Net的起源与发展
U-Net 是由 Olaf Ronneberger 和他的团队于2015年提出的卷积神经网络#xff08;CNN#xff09;架构。最初的设计目的是解决医学图像分割中的挑战#xff0c;尤其是在有限的训练数据下如何实现准确的分割。
在…1. 引言U-Net背景及应用
1.1 U-Net的起源与发展
U-Net 是由 Olaf Ronneberger 和他的团队于2015年提出的卷积神经网络CNN架构。最初的设计目的是解决医学图像分割中的挑战尤其是在有限的训练数据下如何实现准确的分割。
在医学图像分割中许多重要任务例如肿瘤、器官分割等往往需要大量标注数据进行训练。然而医学图像的标注是一个繁琐且昂贵的过程通常只能获得少量的标注样本。因此U-Net的设计旨在通过利用少量的训练数据来进行有效的图像分割。
U-Net 的名字源于其网络结构的形状它的架构像字母“U”一样对称——即包含一个编码器部分和一个解码器部分。这个结构帮助网络在进行图像分割时既能提取高层次特征又能恢复图像的空间细节。
1.2 U-Net的主要特点
U-Net 的主要创新之一就是它的 跳跃连接Skip Connections。跳跃连接直接将编码器层的特征图传递给解码器层。这种设计避免了在下采样过程中丢失图像的细节信息从而使得网络在解码时能够利用低层次的特征恢复更多的空间信息。
通过这些创新U-Net 在医学图像分割任务中取得了极大的成功尤其是在处理小数据集时U-Net 展现了强大的能力。 1.2 U-Net的应用领域
1.2.1 医学图像分割
U-Net 在医学图像分割中扮演着重要角色。它被广泛应用于自动化的医学图像分析任务如肿瘤分割、器官分割、血管提取等。利用 U-Net可以大大减少医学图像分析中的人工标注工作量并提高分割的准确性。
举个例子U-Net 被广泛应用于 CT 图像 和 MRI 扫描图像帮助医生自动分割病变区域从而更快、更准确地做出诊断。
1.2.2 遥感图像处理
U-Net 不仅仅局限于医学图像领域它也在遥感图像处理中取得了显著成绩。在遥感领域U-Net 常用于分割卫星图像提取地物信息如城市建筑、森林、农田等。这种技术对于环境监测、城市规划等任务至关重要。
通过 U-Net遥感图像的处理效率得到了显著提升为快速响应环境变化提供了强有力的支持。
1.2.3 自动驾驶
在自动驾驶领域U-Net 被用于图像分割任务以帮助自动驾驶系统更好地理解周围环境。例如U-Net 可以分割出道路、行人、车辆、交通标志等信息帮助自动驾驶系统做出决策。
U-Net 的高效分割能力使得它能够在实际应用中提供及时且准确的环境感知为自动驾驶的发展提供了可靠的支持。 2. U-Net 的工作原理
2.1 网络结构概述
U-Net 的结构可以分为两个主要部分编码器下采样部分和 解码器上采样部分。在这个网络中输入图像会先通过编码器进行下采样然后通过解码器恢复分辨率最终输出与输入图像大小相同的分割图。
2.1.1 编码器部分
编码器部分由多个卷积层和池化层组成每一层的卷积操作用于提取图像的特征池化操作则用来减小图像的尺寸同时保留最重要的信息。通过逐步下采样网络能够逐渐学习到更高阶的图像特征。
2.1.2 解码器部分
解码器的目标是将编码器中提取的特征恢复到原始图像的尺寸。解码器通常由上采样层和卷积层组成最终输出与原始图像大小相同的分割图。解码器通过逐步恢复图像的空间分辨率并结合跳跃连接的信息能够实现高精度的图像分割。
2.1.3 跳跃连接的作用
U-Net 最具创新性的设计之一就是其 跳跃连接。跳跃连接将编码器中每个卷积层的输出与解码器中相应层的输入进行连接。这样在上采样过程中低层次的细节信息得以保留避免了在下采样过程中丢失重要的空间信息。
图示U-Net 跳跃连接示意图
通过这种设计U-Net 在图像分割时能够捕捉到更加细腻的局部特征特别是在图像边缘和细节部分分割效果显著提升。 2.2 数学原理与公式
2.2.1 卷积操作
卷积操作是 U-Net 中的核心操作之一用于提取图像的特征。在卷积神经网络中卷积操作通常定义为 y ( x , y ) ( f ∗ g ) ( x , y ) ∑ m ∑ n f ( m , n ) g ( x − m , y − n ) y(x, y) (f * g)(x, y) \sum_m \sum_n f(m, n) g(x - m, y - n) y(x,y)(f∗g)(x,y)m∑n∑f(m,n)g(x−m,y−n)
其中( f ) 是输入图像( g ) 是卷积核(*) 表示卷积操作。
卷积操作的本质是对图像进行加权求和使得网络能够提取到局部特征如边缘、纹理等。
2.2.2 池化与上采样
池化Pooling池化操作是 U-Net 中常用的下采样操作。池化层通常采用最大池化Max Pooling它通过从每个子区域中选取最大值来减少图像的空间分辨率从而提取最显著的特征。 MaxPool ( x ) max ( x 1 , x 2 , . . . , x k ) \text{MaxPool}(x) \max(x_1, x_2, ..., x_k) MaxPool(x)max(x1,x2,...,xk)
上采样Upsampling上采样操作用于恢复图像的分辨率。在 U-Net 中常用的上采样方法有转置卷积Deconvolution或双线性插值Bilinear Interpolation。这些方法通过插值方式逐步恢复图像的尺寸使得输出图像与原始图像相同。
2.2.3 损失函数
U-Net 通常使用 交叉熵损失函数 或 Dice 系数损失函数 作为训练过程中优化的目标。 Dice 系数是一种衡量分割结果与真实标签之间重叠度的指标公式如下 Dice 2 ∣ A ∩ B ∣ ∣ A ∣ ∣ B ∣ \text{Dice} \frac{2|A \cap B|}{|A| |B|} Dice∣A∣∣B∣2∣A∩B∣
其中| A | 和 | B | 分别表示预测图和真实标签的像素集合。 3. 数学原理与公式
3.1 卷积操作
卷积操作是神经网络尤其是卷积神经网络CNN中的核心操作之一。在 U-Net 网络中卷积层用于从输入图像中提取特征。卷积操作本质上是通过一个滤波器即卷积核对输入图像进行滑动窗口式的局部加权求和。
具体的卷积操作可以用以下公式表示 y ( x , y ) ( f ∗ g ) ( x , y ) ∑ m ∑ n f ( m , n ) g ( x − m , y − n ) y(x, y) (f * g)(x, y) \sum_m \sum_n f(m, n) g(x - m, y - n) y(x,y)(f∗g)(x,y)m∑n∑f(m,n)g(x−m,y−n)
其中
( f(m, n) ) 是输入图像表示图像中像素点的位置。( g(x - m, y - n) ) 是卷积核或滤波器它决定了卷积操作的计算方式。
卷积操作的目的是提取图像中的特征如边缘、角点、纹理等。这些特征在后续的层中会被组合和加强帮助网络逐步学习图像中的高层次信息。 3.2 池化与上采样
3.2.1 池化Pooling
池化是 U-Net 中另一个重要的操作。池化层主要用于降低特征图的空间维度减少计算量同时保留图像的最重要特征。在 U-Net 中常用的池化方法是 最大池化Max Pooling其操作通过从每个子区域例如 (2 \times 2)中选取最大值来进行降维。
最大池化的数学公式为 MaxPool ( x ) max ( x 1 , x 2 , . . . , x k ) \text{MaxPool}(x) \max(x_1, x_2, ..., x_k) MaxPool(x)max(x1,x2,...,xk)
其中 ( x_1, x_2, …, x_k ) 是池化窗口中的像素值( \max ) 表示选取窗口中的最大值。池化操作能够提取出图像的显著特征减少空间维度并提高模型的鲁棒性。
3.2.2 上采样Upsampling
上采样操作用于恢复图像的空间分辨率。在解码器部分U-Net 通过上采样层将特征图的尺寸逐步恢复到原始图像的大小。常见的上采样方法包括 转置卷积Deconvolution通过学习卷积核进行反卷积操作逐步恢复图像的分辨率。 双线性插值Bilinear Interpolation通过插值方法计算新像素值适用于对图像进行平滑上采样。
转置卷积的数学表达式为 y ( x , y ) ∑ m ∑ n f ( m , n ) g ( x m , y n ) y(x, y) \sum_m \sum_n f(m, n) g(x m, y n) y(x,y)m∑n∑f(m,n)g(xm,yn)
其中 ( f(m, n) ) 是输入的特征图( g(x m, y n) ) 是转置卷积核。 3.3 损失函数
在训练 U-Net 时选择合适的损失函数对于模型的优化至关重要。U-Net 通常使用 交叉熵损失函数 或 Dice 系数损失函数 来评估模型的分割精度。
3.3.1 交叉熵损失函数
交叉熵损失函数用于计算预测结果与真实标签之间的差距。在二分类任务中交叉熵损失函数的表达式为 L CE − ( y log ( p ) ( 1 − y ) log ( 1 − p ) ) L_{\text{CE}} - \left( y \log(p) (1 - y) \log(1 - p) \right) LCE−(ylog(p)(1−y)log(1−p))
其中( y ) 是真实标签( p ) 是模型预测的概率值。对于多分类问题交叉熵损失函数可以通过扩展为每个类的概率分布来进行修改。
3.3.2 Dice 系数损失函数
Dice 系数是衡量两个样本相似度的一种方式在图像分割中Dice 系数用来衡量预测结果与真实标签的重叠度。其数学公式为 Dice 2 ∣ A ∩ B ∣ ∣ A ∣ ∣ B ∣ \text{Dice} \frac{2|A \cap B|}{|A| |B|} Dice∣A∣∣B∣2∣A∩B∣
其中 ( A ) 和 ( B ) 分别表示预测分割区域和真实标签区域。Dice 系数的值介于 0 到 1 之间值越大表示预测结果与真实标签越相似。Dice 系数损失函数通常定义为 L Dice 1 − 2 ∣ A ∩ B ∣ ∣ A ∣ ∣ B ∣ L_{\text{Dice}} 1 - \frac{2|A \cap B|}{|A| |B|} LDice1−∣A∣∣B∣2∣A∩B∣
这是一个适用于图像分割任务的常用损失函数尤其在医学图像分割中能够帮助模型在不均衡数据的情况下取得较好的效果。 4. U-Net 的变种与改进
尽管 U-Net 本身已成为图像分割任务中的经典架构但随着实际应用需求的变化许多改进和变种版本应运而生。这些改进主要是为了提升 U-Net 在不同领域的适应性和精度。
4.1 U-Net
U-Net: 论文 U-Net: 代码
U-NetU-Net: A Nested U-Net Architecture for Medical Image Segmentation是 U-Net 的一个变种旨在通过更加密集的跳跃连接dense skip pathways来增强信息流动。U-Net 在每个跳跃连接中引入了额外的卷积层从而使网络能够捕获更多的信息。这个结构能够有效避免传统 U-Net 中信息流动的瓶颈问题提升分割精度。
U-Net 的关键创新是其使用了 嵌套的跳跃连接这些跳跃连接提供了更丰富的特征信息流使得网络能够在不同层次上聚合信息从而获得更好的分割效果。
4.2 Attention U-Net
Attention U-Net: 论文 Attention U-Net: 代码
Attention U-Net 引入了 注意力机制能够自动学习哪些区域对分割任务更加重要从而重点关注这些区域。通过在跳跃连接处添加注意力模块网络能够自适应地调整关注的区域这对于复杂场景的分割尤其有效。
Attention U-Net 通过 注意力卷积 层来计算权重并动态调整卷积核的响应使得网络能够在分割时“集中注意力”在重要区域上减少无关背景对分割结果的干扰。
4.3 3D U-Net
3D U-Net: 论文 3D U-Net: 代码
3D U-Net 是 U-Net 在三维图像分割任务中的扩展尤其适用于医学图像如 CT 扫描、MRI 扫描。与传统的 2D U-Net 不同3D U-Net 使用三维卷积和池化操作可以直接处理三维数据。通过对三维图像进行分割3D U-Net 能够保留图像的空间信息从而提升三维医学图像的分割效果。
3D U-Net 的工作原理与 2D U-Net 类似区别在于其在各个层中使用三维卷积核以便在三维空间内提取特征。 5. U-Net 的应用领域
U-Net 的成功不仅仅局限于医学图像分割还广泛应用于许多其他领域。以下是一些典型的应用场景
5.1 医学图像分割
U-Net 被广泛用于肿瘤、血管、器官等医学图像的自动分割减少了人工标注的工作量并提高了分割的准确度。通过 U-Net医生能够更快速地获取高质量的图像分割结果为诊断和治疗提供重要支持。
5.2 遥感图像处理
U-Net 也在遥感图像处理中取得了显著成果。例如U-Net 可用于从卫星图像中提取地物信息如城市建筑、森林、农田等这对于环境监测、城市规划等领域至关重要。
5.3 自动驾驶
自动驾驶领域需要准确的环境感知能力而 U-Net 在图像分割中的应用可以帮助自动驾驶系统识别道路、行人、交通标志等。通过 U-Net自动驾驶系统能够更好地理解周围的环境为安全行驶提供支持。 6. U-Net 的挑战与未来发展方向
虽然 U-Net 在许多领域取得了巨大成功但仍然面临一些挑战
6.1 训练难度
U-Net 在大规模数据集上的训练非常依赖强大的计算资源。尤其是在医学图像和遥感图像中标注数据往往较为稀缺且训练过程计算复杂可能需要较长时间。
6.2 模型优化
在分割复杂场景时U-Net 仍然面临过拟合和泛化能力不足的问题。因此如何优化 U-Net 模型提升其对未知数据的适应能力仍然是当前的一个重要挑战。
6.3 跨领域应用
随着 U-Net 在医学图像分割中的成功它的应用范围逐渐拓展到其他领域如遥感图像分析、自动驾驶、机器人视觉等。在这些领域U-Net 的模型设计需要根据具体任务进行调整和优化。如何有效地迁移 U-Net 到这些新领域特别是在数据分布差异较大的情况下仍然是一个研究热点。
6.4 未来的发展方向
未来U-Net 的研究方向可能包括以下几个方面 多模态数据融合结合来自不同传感器或数据源的信息例如CT 和 MRI 图像融合进行更精确的分割。 增强学习Reinforcement Learning与自监督学习通过增强学习来优化模型训练策略或利用自监督学习从未标注的数据中学习特征减少对大量标注数据的依赖。 可解释性虽然深度学习模型包括 U-Net在图像分割任务中取得了显著的成果但它们通常被视为“黑箱”模型。未来的研究可以致力于提升 U-Net 模型的可解释性使其输出的分割结果更加透明方便医生或其他领域专家进行决策。 边缘计算随着硬件技术的发展边缘计算开始成为重要趋势。如何将 U-Net 模型优化到能够在边缘设备如智能手机、无人驾驶汽车、医疗设备等上运行将是未来的一个重要研究方向。 7. U-Net 在 PyTorch 中的实现
7.1 U-Net 模型结构
首先我们从 U-Net 的模型结构开始代码会使用 PyTorch 定义每一层并进行注释说明。
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, Dataset
import torchvision.transforms as transforms
import numpy as np
import os
from PIL import Image# U-Net 模型定义
class UNet(nn.Module):def __init__(self, in_channels3, out_channels1):super(UNet, self).__init__()# Contracting path (Encoder)self.enc1 self.conv_block(in_channels, 64) # 输入图像经过第一层卷积self.enc2 self.conv_block(64, 128) # 第二层卷积通道数增多self.enc3 self.conv_block(128, 256) # 第三层卷积self.enc4 self.conv_block(256, 512) # 第四层卷积# Bottleneckself.bottleneck self.conv_block(512, 1024) # 最深层卷积# Expansive path (Decoder)self.upconv4 self.upconv_block(1024, 512) # 上采样将分辨率恢复self.upconv3 self.upconv_block(512, 256) # 第二层上采样self.upconv2 self.upconv_block(256, 128) # 第三层上采样self.upconv1 self.upconv_block(128, 64) # 最后层上采样# Output layerself.out_conv nn.Conv2d(64, out_channels, kernel_size1) # 输出层将通道数调整为所需数量def conv_block(self, in_channels, out_channels):创建一个包含两个卷积层和一个ReLU激活函数的卷积模块block nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(out_channels, out_channels, kernel_size3, padding1),nn.ReLU(inplaceTrue))return blockdef upconv_block(self, in_channels, out_channels):创建上采样模块包含转置卷积和卷积block nn.Sequential(nn.ConvTranspose2d(in_channels, out_channels, kernel_size2, stride2), # 转置卷积上采样nn.ReLU(inplaceTrue),)return blockdef forward(self, x):# Contracting pathenc1 self.enc1(x)enc2 self.enc2(enc1)enc3 self.enc3(enc2)enc4 self.enc4(enc3)# Bottleneckbottleneck self.bottleneck(enc4)# Expansive pathdec4 self.upconv4(bottleneck)dec3 self.upconv3(dec4 enc4) # 跳跃连接skip connectiondec2 self.upconv2(dec3 enc3)dec1 self.upconv1(dec2 enc2)# Output layeroutput self.out_conv(dec1)return output7.1.1 代码解释
conv_block定义了两个卷积层和一个 ReLU 激活函数的结构。每个卷积操作后都有一个 ReLU 激活使网络能够捕捉到非线性特征。upconv_block用于上采样的转置卷积操作将特征图尺寸扩大。ConvTranspose2d 用于图像的上采样处理。跳跃连接Skip Connections通过将编码器中的输出直接连接到解码器中的相应层保持图像的空间信息。这样可以恢复更高分辨率的图像细节。 7.2 训练手册
7.2.1 数据预处理
数据预处理通常包括读取图像、标准化和数据增强。以下是如何使用 PyTorch 中的 Dataset 类来加载图像。
# 自定义数据集类用于加载图像和标签
class ImageDataset(Dataset):def __init__(self, image_dir, mask_dir, transformNone):self.image_dir image_dir # 输入图像文件夹路径self.mask_dir mask_dir # 掩膜文件夹路径self.transform transform # 数据增强或标准化# 获取所有图像文件的路径self.image_paths [os.path.join(image_dir, f) for f in os.listdir(image_dir)]self.mask_paths [os.path.join(mask_dir, f) for f in os.listdir(mask_dir)]def __len__(self):return len(self.image_paths) # 返回数据集的长度def __getitem__(self, idx):# 读取图像和标签image Image.open(self.image_paths[idx]).convert(RGB)mask Image.open(self.mask_paths[idx]).convert(L) # 假设掩膜是灰度图像if self.transform:image self.transform(image) # 应用图像预处理如归一化mask self.transform(mask) # 应用标签预处理return image, mask7.2.2 数据加载和训练准备
我们将使用 DataLoader 来批量加载训练数据进行模型训练。
# 数据增强和标准化
transform transforms.Compose([transforms.Resize((128, 128)),transforms.ToTensor(),transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]), # 归一化
])# 初始化数据集和数据加载器
train_dataset ImageDataset(image_dirtrain/images, mask_dirtrain/masks, transformtransform)
train_loader DataLoader(train_dataset, batch_size16, shuffleTrue)val_dataset ImageDataset(image_dirval/images, mask_dirval/masks, transformtransform)
val_loader DataLoader(val_dataset, batch_size16, shuffleFalse)7.2.3 损失函数与优化器
对于二元图像分割任务我们使用 二元交叉熵损失BCELoss作为损失函数并使用 Adam优化器。
# 使用二元交叉熵损失函数
criterion nn.BCEWithLogitsLoss() # 用于处理 sigmoid 输出
optimizer optim.Adam(model.parameters(), lr0.001) # Adam优化器7.2.4 模型训练过程
# 训练 U-Net 模型
num_epochs 20
for epoch in range(num_epochs):model.train() # 设置为训练模式running_loss 0.0for images, masks in train_loader:# 将图像和掩膜移动到GPU如果可用images, masks images.cuda(), masks.cuda()optimizer.zero_grad() # 清除梯度# 前向传播outputs model(images)# 计算损失loss criterion(outputs, masks.unsqueeze(1).float()) # masks.unsqueeze(1) 将标签变为1通道# 反向传播loss.backward()optimizer.step()running_loss loss.item()# 每个 epoch 打印训练损失print(fEpoch [{epoch1}/{num_epochs}], Loss: {running_loss/len(train_loader)})7.2.5 模型评估与保存
# 保存训练好的模型
torch.save(model.state_dict(), unet_model.pth)# 评估模型在验证集上
model.eval() # 设置为评估模式
with torch.no_grad():correct 0total 0for images, masks in val_loader:images, masks images.cuda(), masks.cuda()outputs model(images)preds (outputs 0.5).float() # 进行阈值处理得到预测结果correct (preds masks.unsqueeze(1).float()).sum().item()total masks.numel()accuracy correct / totalprint(fValidation Accuracy: {accuracy * 100:.2f}%)8. 总结
U-Net 自 2015 年问世以来凭借其独特的网络结构和出色的分割能力成为了图像分割领域的重要工具。其在医学图像处理中的应用尤其成功推动了智能医疗的发展。除了传统的医学图像分割U-Net 还在遥感图像处理、自动驾驶等领域展现出了强大的适应性。
虽然 U-Net 在许多实际应用中已经取得了显著成果但在面对复杂场景和跨领域任务时仍然存在一些挑战如模型的训练难度、过拟合问题以及对大规模标注数据的需求。因此U-Net 的优化和改进仍是未来研究的一个重要方向。
随着技术的发展我们可以期待 U-Net 能够在更多领域中发挥其潜力推动人工智能在各行各业的深入应用。 文章转载自: http://www.morning.tnktt.cn.gov.cn.tnktt.cn http://www.morning.nndbz.cn.gov.cn.nndbz.cn http://www.morning.xmttd.cn.gov.cn.xmttd.cn http://www.morning.zczkm.cn.gov.cn.zczkm.cn http://www.morning.fkwp.cn.gov.cn.fkwp.cn http://www.morning.bdypl.cn.gov.cn.bdypl.cn http://www.morning.lpsjs.com.gov.cn.lpsjs.com http://www.morning.flxqm.cn.gov.cn.flxqm.cn http://www.morning.rgsnk.cn.gov.cn.rgsnk.cn http://www.morning.jynzb.cn.gov.cn.jynzb.cn http://www.morning.rykn.cn.gov.cn.rykn.cn http://www.morning.zxhpx.cn.gov.cn.zxhpx.cn http://www.morning.ghssm.cn.gov.cn.ghssm.cn http://www.morning.mnkz.cn.gov.cn.mnkz.cn http://www.morning.jfbgn.cn.gov.cn.jfbgn.cn http://www.morning.blqsr.cn.gov.cn.blqsr.cn http://www.morning.xhjjs.cn.gov.cn.xhjjs.cn http://www.morning.kpgbz.cn.gov.cn.kpgbz.cn http://www.morning.qbgdy.cn.gov.cn.qbgdy.cn http://www.morning.dmzmy.cn.gov.cn.dmzmy.cn http://www.morning.pyxtn.cn.gov.cn.pyxtn.cn http://www.morning.xqbgm.cn.gov.cn.xqbgm.cn http://www.morning.xphls.cn.gov.cn.xphls.cn http://www.morning.kgsws.cn.gov.cn.kgsws.cn http://www.morning.ljbpk.cn.gov.cn.ljbpk.cn http://www.morning.bswhr.cn.gov.cn.bswhr.cn http://www.morning.xbtlt.cn.gov.cn.xbtlt.cn http://www.morning.bnmfq.cn.gov.cn.bnmfq.cn http://www.morning.tqbw.cn.gov.cn.tqbw.cn http://www.morning.nmfxs.cn.gov.cn.nmfxs.cn http://www.morning.zpstm.cn.gov.cn.zpstm.cn http://www.morning.xfjwm.cn.gov.cn.xfjwm.cn http://www.morning.mpmtz.cn.gov.cn.mpmtz.cn http://www.morning.grxbw.cn.gov.cn.grxbw.cn http://www.morning.fqqlq.cn.gov.cn.fqqlq.cn http://www.morning.xbckm.cn.gov.cn.xbckm.cn http://www.morning.btlmb.cn.gov.cn.btlmb.cn http://www.morning.rwlnk.cn.gov.cn.rwlnk.cn http://www.morning.drkk.cn.gov.cn.drkk.cn http://www.morning.qfwzm.cn.gov.cn.qfwzm.cn http://www.morning.qgmwt.cn.gov.cn.qgmwt.cn http://www.morning.jfwrf.cn.gov.cn.jfwrf.cn http://www.morning.wnjbn.cn.gov.cn.wnjbn.cn http://www.morning.tfgkq.cn.gov.cn.tfgkq.cn http://www.morning.ckxd.cn.gov.cn.ckxd.cn http://www.morning.xjnw.cn.gov.cn.xjnw.cn http://www.morning.rqlzz.cn.gov.cn.rqlzz.cn http://www.morning.lhygbh.com.gov.cn.lhygbh.com http://www.morning.qrpdk.cn.gov.cn.qrpdk.cn http://www.morning.hxxyp.cn.gov.cn.hxxyp.cn http://www.morning.jltmb.cn.gov.cn.jltmb.cn http://www.morning.npmpn.cn.gov.cn.npmpn.cn http://www.morning.rxtxf.cn.gov.cn.rxtxf.cn http://www.morning.yqqxj1.cn.gov.cn.yqqxj1.cn http://www.morning.lrskd.cn.gov.cn.lrskd.cn http://www.morning.cqrenli.com.gov.cn.cqrenli.com http://www.morning.llgpk.cn.gov.cn.llgpk.cn http://www.morning.fqlxg.cn.gov.cn.fqlxg.cn http://www.morning.bpncd.cn.gov.cn.bpncd.cn http://www.morning.nfcxq.cn.gov.cn.nfcxq.cn http://www.morning.jmmz.cn.gov.cn.jmmz.cn http://www.morning.zwtp.cn.gov.cn.zwtp.cn http://www.morning.bmbnc.cn.gov.cn.bmbnc.cn http://www.morning.bkylg.cn.gov.cn.bkylg.cn http://www.morning.caswellintl.com.gov.cn.caswellintl.com http://www.morning.brlgf.cn.gov.cn.brlgf.cn http://www.morning.pjwml.cn.gov.cn.pjwml.cn http://www.morning.fgkrh.cn.gov.cn.fgkrh.cn http://www.morning.tkyry.cn.gov.cn.tkyry.cn http://www.morning.tdzxy.cn.gov.cn.tdzxy.cn http://www.morning.lxfyn.cn.gov.cn.lxfyn.cn http://www.morning.dbsch.cn.gov.cn.dbsch.cn http://www.morning.rfrxt.cn.gov.cn.rfrxt.cn http://www.morning.tymwx.cn.gov.cn.tymwx.cn http://www.morning.rblqk.cn.gov.cn.rblqk.cn http://www.morning.rqxch.cn.gov.cn.rqxch.cn http://www.morning.rqlbp.cn.gov.cn.rqlbp.cn http://www.morning.zyrp.cn.gov.cn.zyrp.cn http://www.morning.jjsxh.cn.gov.cn.jjsxh.cn http://www.morning.hsksm.cn.gov.cn.hsksm.cn