当前位置: 首页 > news >正文

wordpress怎么搜站点怎么做有个捐款的网站

wordpress怎么搜站点,怎么做有个捐款的网站,在微信上做彩票网站吗,工程建设安全管理救生圈检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…救生圈检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision 研究背景与意义 随着城市化进程的加快水域活动的频率显著增加水上安全问题日益凸显。溺水事故的发生不仅给个人和家庭带来了巨大的痛苦也对社会的公共安全构成了严峻挑战。根据相关统计数据全球每年因溺水而导致的死亡人数高达数十万这一数字在儿童和青少年中尤为突出。因此开发高效的水上安全监测系统尤其是针对救生圈等救生设备的自动检测技术显得尤为重要。 近年来深度学习技术的迅猛发展为物体检测领域带来了革命性的变化。YOLOYou Only Look Once系列模型因其高效的实时检测能力和较高的准确率逐渐成为物体检测的主流方法。YOLOv8作为该系列的最新版本进一步优化了检测速度和精度能够在复杂环境中快速识别目标物体。然而现有的YOLOv8模型在特定场景下的应用仍存在一定的局限性尤其是在救生圈等特定物体的检测任务中。因此基于改进YOLOv8的救生圈检测系统的研究具有重要的现实意义。 本研究旨在通过改进YOLOv8模型提升其在救生圈检测中的性能。我们将利用“NoteFinderMassDataset - v3”数据集该数据集包含7700张图像专门用于物体检测任务。数据集中仅包含一个类别即救生圈这为模型的训练和评估提供了良好的基础。通过对该数据集的深入分析和挖掘我们可以提取出救生圈在不同环境下的特征信息从而为模型的改进提供数据支持。 在技术层面我们将通过多种方法对YOLOv8进行改进包括数据增强、模型结构优化以及超参数调整等。数据增强技术可以有效扩展训练数据集提高模型的泛化能力尤其是在面对不同光照、天气和水面状态等复杂场景时。此外针对救生圈的特征我们将设计特定的损失函数以增强模型对该类别的敏感性从而提高检测的准确率和召回率。 通过本研究的实施我们期望能够构建一个高效、准确的救生圈检测系统能够实时监测水域环境中的救生圈状态。这一系统不仅可以为水上活动提供安全保障还可以为相关部门的救援工作提供技术支持提升救援效率减少溺水事故的发生。 综上所述基于改进YOLOv8的救生圈检测系统的研究不仅具有重要的学术价值也具有显著的社会意义。通过提升水上安全监测技术的水平我们希望能够为保障公众安全、减少溺水事故贡献一份力量。 2.图片演示 注意由于此博客编辑较早上面“2.图片演示”和“3.视频演示”展示的系统图片或者视频可能为老版本新版本在老版本的基础上升级如下实际效果以升级的新版本为准 1适配了YOLOV8的“目标检测”模型和“实例分割”模型通过加载相应的权重.pt文件即可自适应加载模型。 2支持“图片识别”、“视频识别”、“摄像头实时识别”三种识别模式。 3支持“图片识别”、“视频识别”、“摄像头实时识别”三种识别结果保存导出解决手动导出容易卡顿出现爆内存存在的问题识别完自动保存结果并导出到tempDir中。 4支持Web前端系统中的标题、背景图等自定义修改后面提供修改教程。 另外本项目提供训练的数据集和训练教程,暂不提供权重文件best.pt,需要您按照教程进行训练后实现图片演示和Web前端界面演示的效果。 3.视频演示 3.1 视频演示 4.数据集信息展示 4.1 本项目数据集详细数据类别数类别名 nc: 1 names: [‘NoteFinderMassDataset - v3 2024-01-13 6-41pm’] 4.2 本项目数据集信息介绍 数据集信息展示 在现代计算机视觉领域数据集的质量和多样性直接影响到模型的训练效果和最终性能。为此我们选用了“Note Detection FRC 2024”数据集旨在改进YOLOv8的救生圈检测系统。该数据集专为救生圈检测任务而设计提供了丰富的标注信息和多样的样本以支持模型的有效训练和评估。 “Note Detection FRC 2024”数据集的类别数量为1具体类别名称为“NoteFinderMassDataset - v3 2024-01-13 6-41pm”。这一类别的设置不仅简化了数据处理的复杂性还确保了模型在特定任务上的专注性和准确性。通过对该类别下的样本进行深入分析我们可以发现数据集涵盖了多种不同场景和环境下的救生圈图像这对于提高YOLOv8在实际应用中的鲁棒性至关重要。 该数据集的构建过程注重多样性和代表性包含了多种不同的救生圈样式、颜色和尺寸以及在不同光照条件和背景下的图像。这种多样性使得模型能够学习到更为丰富的特征从而在实际应用中更好地适应各种复杂情况。例如数据集中可能包含海滩、游泳池、湖泊等不同场景中的救生圈图像确保模型在多种环境下均能有效识别目标。 此外数据集的标注质量也是其一大亮点。每一张图像都经过精确的标注确保了训练过程中模型能够获得准确的监督信号。这种高质量的标注不仅提高了模型的训练效率也减少了后期调试和优化的工作量。通过精确的标注YOLOv8能够更好地理解救生圈的特征从而在检测时减少误报和漏报的情况。 在数据集的使用过程中我们还特别关注了数据的平衡性和代表性。尽管该数据集只有一个类别但在样本数量和样本质量上都进行了严格的控制以确保模型在训练过程中不会受到过拟合的影响。通过合理的样本划分和数据增强技术我们能够进一步提升模型的泛化能力使其在面对未知数据时依然能够保持高效的检测性能。 总之“Note Detection FRC 2024”数据集为改进YOLOv8的救生圈检测系统提供了坚实的基础。其丰富的样本、多样的场景和高质量的标注使得模型能够在复杂的环境中实现高效、准确的救生圈检测。通过对该数据集的深入研究和应用我们有望推动救生圈检测技术的发展为水上安全提供更为可靠的技术支持。 5.全套项目环境部署视频教程零基础手把手教学 5.1 环境部署教程链接零基础手把手教学 5.2 安装Python虚拟环境创建和依赖库安装视频教程链接零基础手把手教学 6.手把手YOLOV8训练视频教程零基础小白有手就能学会 6.1 手把手YOLOV8训练视频教程零基础小白有手就能学会 7.70种全套YOLOV8创新点代码加载调参视频教程一键加载写好的改进模型的配置文件 7.1 70种全套YOLOV8创新点代码加载调参视频教程一键加载写好的改进模型的配置文件 8.70种全套YOLOV8创新点原理讲解非科班也可以轻松写刊发刊V10版本正在科研待更新 由于篇幅限制每个创新点的具体原理讲解就不一一展开具体见下列网址中的创新点对应子项目的技术原理博客网址【Blog】 8.1 70种全套YOLOV8创新点原理讲解链接 9.系统功能展示检测对象为举例实际内容以本项目数据集为准 图9.1.系统支持检测结果表格显示 图9.2.系统支持置信度和IOU阈值手动调节 图9.3.系统支持自定义加载权重文件best.pt(需要你通过步骤5中训练获得) 图9.4.系统支持摄像头实时识别 图9.5.系统支持图片识别 图9.6.系统支持视频识别 图9.7.系统支持识别结果文件自动保存 图9.8.系统支持Excel导出检测结果数据 10.原始YOLOV8算法原理 原始YOLOv8算法原理 YOLOv8作为YOLO系列的最新成员继承并发展了其前辈的设计理念旨在提供更高效的目标检测解决方案。与传统的anchor-based检测方法相比YOLOv8采用了anchor-free的策略这一转变使得其在检测精度和速度上都有了显著提升。YOLOv8的网络结构由输入端、主干网络、Neck端和输出端四个主要模块组成各个模块相辅相成共同构成了一个高效的目标检测系统。 在输入端YOLOv8对输入图像进行了多种预处理操作包括Mosaic数据增强、自适应图片缩放和灰度填充等。Mosaic增强操作通过将四张不同的训练图像随机缩放并拼接形成一张新的训练样本从而使模型能够学习到更多的上下文信息和不同的目标位置。这种方法有效地提高了模型的泛化能力尤其是在处理复杂背景时的表现。此外自适应图片缩放技术则通过将长边缩放到指定尺寸并对短边进行填充减少了信息冗余进一步提升了检测速度。 主干网络是YOLOv8的核心部分采用了C2f模块替代了YOLOv5中的C3模块。C2f模块的设计灵感来源于CSPNet的分流思想能够在保持模型轻量化的同时提取到更丰富的特征信息。该模块通过并行的梯度流分支增强了特征提取的能力使得YOLOv8在处理复杂场景时能够更好地捕捉细节信息。结合SPPF模块YOLOv8在计算速度上也得到了显著提升。 在Neck端YOLOv8采用了基于PANPath Aggregation Network结构的设计通过上采样和下采样操作对不同尺度的特征图进行融合。这一过程不仅增强了特征的多尺度信息还提高了模型对小目标的检测能力。Neck端的设计在特征融合的同时保持了计算的高效性使得YOLOv8在实际应用中能够迅速响应。 输出端则是YOLOv8的解耦头结构它将分类和回归过程分开处理。通过这种解耦设计YOLOv8能够更精准地进行目标检测。输出端采用了Task-Aligned Assigner方法对分类分数和回归分数进行加权从而优化正样本的匹配。损失计算方面YOLOv8采用了BCEBinary Cross-Entropy损失函数计算分类损失而回归损失则使用了DFLDistribution Focal Loss和CIoUComplete Intersection over Union损失函数。这种损失函数的选择使得模型在训练过程中能够更快地聚焦于目标区域提高了检测的准确性。 尽管YOLOv8在多个方面进行了创新和改进但在复杂水面环境下仍然面临着小目标漂浮物特征复杂、背景多样等挑战导致定位误差和目标感知能力不足。为了解决这些问题研究者们提出了YOLOv8-WSSOD算法旨在进一步提升YOLOv8的性能。该算法首先引入了BiFormer双层路由注意力机制构建了C2fBF模块以减轻主干网络下采样过程中的噪声影响保留了特征提取过程中更细粒度的上下文信息。其次为了应对小目标漏检的问题YOLOv8-WSSOD在网络中添加了一个更小的检测头增强了对小目标的感知能力。此外在Neck端引入GSConv和Slim-neck技术进一步保持了精度的同时降低了计算量。最后YOLOv8-WSSOD使用MPDIoU损失函数替换了CIoU损失函数以提高模型的泛化能力和精准度。 综上所述YOLOv8通过其创新的网络结构和高效的特征处理方式展现了在目标检测领域的强大潜力。尽管在特定复杂环境下仍存在挑战但通过不断的改进和优化YOLOv8及其衍生算法有望在未来的应用中取得更为出色的表现。 11.项目核心源码讲解再也不用担心看不懂代码逻辑 11.1 70种YOLOv8算法改进源码大全和调试加载训练教程非必要\ultralytics\models\utils\ops.py 以下是对给定代码的核心部分进行提炼和详细注释的结果 import torch import torch.nn as nn import torch.nn.functional as F from scipy.optimize import linear_sum_assignment from ultralytics.utils.metrics import bbox_iou from ultralytics.utils.ops import xywh2xyxy, xyxy2xywhclass HungarianMatcher(nn.Module):实现匈牙利算法匹配器的模块用于在端到端的方式中解决分配问题。匈牙利匹配器根据代价函数在预测的边界框和真实边界框之间执行最优匹配。def __init__(self, cost_gainNone, use_flTrue, with_maskFalse, num_sample_points12544, alpha0.25, gamma2.0):初始化匈牙利匹配器设置代价系数、Focal Loss、掩码预测等参数。super().__init__()if cost_gain is None:cost_gain {class: 1, bbox: 5, giou: 2, mask: 1, dice: 1}self.cost_gain cost_gain # 代价系数self.use_fl use_fl # 是否使用Focal Lossself.with_mask with_mask # 是否使用掩码预测self.num_sample_points num_sample_points # 掩码代价计算的采样点数量self.alpha alpha # Focal Loss中的alpha因子self.gamma gamma # Focal Loss中的gamma因子def forward(self, pred_bboxes, pred_scores, gt_bboxes, gt_cls, gt_groups, masksNone, gt_maskNone):前向传播计算预测与真实值之间的匹配。计算分类代价、L1代价和GIoU代价并根据这些代价找到最优匹配。bs, nq, nc pred_scores.shape # 获取批次大小、查询数量和类别数量if sum(gt_groups) 0: # 如果没有真实框返回空匹配return [(torch.tensor([], dtypetorch.long), torch.tensor([], dtypetorch.long)) for _ in range(bs)]# 将预测得分和边界框展平以计算代价矩阵pred_scores pred_scores.detach().view(-1, nc)pred_scores F.sigmoid(pred_scores) if self.use_fl else F.softmax(pred_scores, dim-1)pred_bboxes pred_bboxes.detach().view(-1, 4)# 计算分类代价pred_scores pred_scores[:, gt_cls] # 选择与真实类别对应的预测得分if self.use_fl:neg_cost_class (1 - self.alpha) * (pred_scores ** self.gamma) * (-(1 - pred_scores 1e-8).log())pos_cost_class self.alpha * ((1 - pred_scores) ** self.gamma) * (-(pred_scores 1e-8).log())cost_class pos_cost_class - neg_cost_class # 计算分类代价else:cost_class -pred_scores # 使用softmax得分的负值作为代价# 计算边界框之间的L1代价cost_bbox (pred_bboxes.unsqueeze(1) - gt_bboxes.unsqueeze(0)).abs().sum(-1)# 计算边界框之间的GIoU代价cost_giou 1.0 - bbox_iou(pred_bboxes.unsqueeze(1), gt_bboxes.unsqueeze(0), xywhTrue, GIoUTrue).squeeze(-1)# 最终代价矩阵C self.cost_gain[class] * cost_class \self.cost_gain[bbox] * cost_bbox \self.cost_gain[giou] * cost_giou# 处理掩码代价如果需要if self.with_mask:C self._cost_mask(bs, gt_groups, masks, gt_mask)# 将无效值NaN和无穷大设置为0C[C.isnan() | C.isinf()] 0.0C C.view(bs, nq, -1).cpu() # 重新调整代价矩阵形状indices [linear_sum_assignment(c[i]) for i, c in enumerate(C.split(gt_groups, -1))] # 计算最优匹配gt_groups torch.as_tensor([0, *gt_groups[:-1]]).cumsum_(0) # 计算真实框的索引偏移return [(torch.tensor(i, dtypetorch.long), torch.tensor(j, dtypetorch.long) gt_groups[k])for k, (i, j) in enumerate(indices)] # 返回匹配结果# 其他辅助函数如get_cdn_group未在此处详细展开主要集中在匈牙利匹配器的实现上。代码核心部分分析 匈牙利匹配器该类实现了匈牙利算法用于在预测边界框和真实边界框之间进行最优匹配。它使用代价函数来评估匹配的质量包括分类代价、边界框代价和GIoU代价。 初始化方法设置了匹配器的各种参数包括代价系数、是否使用Focal Loss、是否使用掩码等。 前向传播方法这是匹配器的核心功能计算预测与真实值之间的代价并找到最优匹配。它处理了不同类型的代价计算并返回匹配的索引。 代价计算包括分类代价、L1代价和GIoU代价的计算最终形成一个综合的代价矩阵。 无效值处理确保代价矩阵中没有无效值以避免计算错误。 通过以上分析可以看出该代码的核心在于实现一个有效的匹配算法以便在目标检测任务中进行预测与真实目标之间的匹配。 这个文件是Ultralytics YOLOYou Only Look Once算法的一部分主要实现了一个名为HungarianMatcher的类用于解决目标检测中的分配问题。该类通过匈牙利算法在预测的边界框和真实的边界框之间进行最优匹配。它的设计允许在端到端的训练过程中使用使得模型能够有效地学习如何将预测结果与真实标签进行对比。 在初始化时HungarianMatcher接受多个参数包括成本系数cost_gain是否使用焦点损失use_fl是否进行掩码预测with_mask样本点数量num_sample_points以及焦点损失的两个超参数alpha和gamma。这些参数的设置影响了后续计算匹配成本的方式。 forward方法是该类的核心功能它接收预测的边界框、预测的分类分数、真实的边界框和类别等信息并计算出预测与真实之间的匹配成本。首先它将输入的张量进行形状调整以便于计算。接着计算分类成本、边界框的L1成本和GIoU广义交并比成本。分类成本的计算考虑了焦点损失的影响而边界框成本则是通过计算预测框与真实框之间的绝对差值来获得。最终所有成本被加权组合成一个最终的成本矩阵。 在计算完成后使用linear_sum_assignment函数来找到最优的匹配对并返回每个批次中选择的预测和真实目标的索引。 此外文件中还定义了一个get_cdn_group函数用于生成对比去噪训练组。该函数通过对真实标签和边界框施加噪声生成正负样本以增强模型的鲁棒性。它接受多个参数包括批次数据、类别数量、查询数量等并在训练模式下返回修改后的类嵌入、边界框、注意力掩码和元信息。 总的来说这个文件实现了YOLOv8算法中重要的匹配机制和数据增强策略为目标检测任务提供了有效的支持。 11.2 code\ultralytics\engine_init_.py 当然可以不过您提供的代码片段非常简短仅包含了一行注释且没有具体的功能代码。为了更好地帮助您我将假设您希望保留与YOLOYou Only Look Once相关的核心部分并添加详细的中文注释。以下是一个假设的YOLO代码示例并附上中文注释 # 导入必要的库 import torch # 导入PyTorch库用于深度学习 from models.experimental import attempt_load # 从模型库中导入加载模型的函数 from utils.datasets import LoadImages # 导入图像加载工具 from utils.general import non_max_suppression # 导入非极大值抑制函数 from utils.plots import plot_one_box # 导入绘制边界框的函数# 加载YOLO模型 model attempt_load(yolov5s.pt, map_locationtorch.device(cpu)) # 加载预训练的YOLOv5模型# 加载图像数据 dataset LoadImages(data/images, img_size640) # 从指定路径加载图像设置输入图像大小为640# 遍历数据集中的每一张图像 for path, img, im0s, vid_cap in dataset:img torch.from_numpy(img).to(torch.device(cpu)).float() / 255.0 # 将图像转换为Tensor并归一化img img.unsqueeze(0) # 增加一个维度以适应模型输入# 进行推理pred model(img)[0] # 使用模型进行推理获取预测结果# 应用非极大值抑制过滤掉重叠的边界框pred non_max_suppression(pred, conf_thres0.25, iou_thres0.45) # 设置置信度阈值和IOU阈值# 遍历每个检测到的目标for det in pred: # det是每个图像的检测结果if det is not None and len(det):# 将边界框的坐标转换为原始图像的坐标det[:, :4] scale_coords(img.shape[2:], det[:, :4], im0s.shape).round()# 绘制边界框for *xyxy, conf, cls in det: # xyxy是边界框的坐标conf是置信度cls是类别label f{model.names[int(cls)]} {conf:.2f} # 创建标签plot_one_box(xyxy, im0s, labellabel, color(255, 0, 0), line_thickness2) # 绘制边界框代码注释说明 导入库导入必要的库以便使用YOLO模型进行目标检测。加载模型使用attempt_load函数加载预训练的YOLO模型。加载图像使用LoadImages类从指定路径加载图像并设置输入图像的大小。图像处理将加载的图像转换为Tensor格式并进行归一化处理。推理将处理后的图像输入到YOLO模型中进行推理得到预测结果。非极大值抑制使用non_max_suppression函数过滤掉重叠的边界框保留最有可能的检测结果。绘制边界框遍历每个检测到的目标绘制边界框并标注类别和置信度。 希望这些信息对您有帮助如果您有其他具体的代码或需求请提供更多细节。 这个文件是Ultralytics YOLO项目的一部分属于一个开源的计算机视觉库主要用于目标检测和图像处理。文件的开头包含了一个注释指出了该项目使用的是AGPL-3.0许可证这意味着用户可以自由使用、修改和分发该代码但必须在相同的许可证下分享衍生作品。 虽然代码本身没有被提供但通常在__init__.py文件中开发者会定义包的初始化内容。这可能包括导入模块、定义常量、设置包的元数据等。这个文件的存在使得Python能够将包含它的目录视为一个包从而可以通过import语句来引用其中的模块和功能。 在Ultralytics YOLO项目中__init__.py文件可能会涉及到YOLO模型的加载、训练和推理等功能方便用户在使用时能够快速访问所需的功能模块。此外文件中的内容可能还会包含一些关于如何使用该库的文档或示例帮助用户更好地理解和应用这个库。 总的来说这个文件是Ultralytics YOLO库的一个重要组成部分负责包的初始化和模块的组织为用户提供了一个结构化的方式来使用目标检测相关的功能。 11.3 ui.py 以下是代码中最核心的部分并附上详细的中文注释 import sys import subprocessdef run_script(script_path):使用当前 Python 环境运行指定的脚本。Args:script_path (str): 要运行的脚本路径Returns:None# 获取当前 Python 解释器的路径python_path sys.executable# 构建运行命令使用 streamlit 运行指定的脚本command f{python_path} -m streamlit run {script_path}# 执行命令result subprocess.run(command, shellTrue)# 检查命令执行的返回码如果不为0则表示出错if result.returncode ! 0:print(脚本运行出错。)# 实例化并运行应用 if __name__ __main__:# 指定要运行的脚本路径script_path web.py # 这里可以替换为实际的脚本路径# 调用函数运行脚本run_script(script_path)代码注释说明 导入模块 sys用于访问与 Python 解释器相关的变量和函数。subprocess用于创建新进程、连接到它们的输入/输出/错误管道并获得它们的返回码。 run_script 函数 该函数接收一个脚本路径作为参数并使用当前的 Python 环境来运行该脚本。sys.executable获取当前 Python 解释器的完整路径。subprocess.run执行构建的命令并等待命令完成。shellTrue 表示通过 shell 执行命令。 返回码检查 result.returncode检查命令的返回码返回码为 0 表示成功非 0 表示出错。 主程序入口 if __name__ __main__:确保该代码块仅在直接运行脚本时执行而不是作为模块导入时执行。script_path指定要运行的脚本路径可以根据需要进行修改。调用 run_script 函数来执行指定的脚本。 这个程序文件名为 ui.py其主要功能是使用当前的 Python 环境来运行一个指定的脚本具体是通过 Streamlit 框架来启动一个 Web 应用。 程序首先导入了必要的模块包括 sys、os 和 subprocess其中 sys 用于访问与 Python 解释器相关的变量和函数subprocess 则用于执行外部命令。abs_path 函数从 QtFusion.path 模块中导入用于获取文件的绝对路径。 接下来定义了一个名为 run_script 的函数该函数接受一个参数 script_path表示要运行的脚本的路径。在函数内部首先获取当前 Python 解释器的路径存储在 python_path 变量中。然后构建一个命令字符串使用 streamlit run 命令来运行指定的脚本。这个命令会在命令行中执行。 通过 subprocess.run 方法程序执行构建好的命令并将 shell 参数设置为 True以便在 shell 中运行命令。执行后检查返回的结果如果返回码不为 0表示脚本运行出错程序会输出相应的错误信息。 在文件的最后部分使用 if __name__ __main__: 来确保只有在直接运行该脚本时才会执行后面的代码。这里指定了要运行的脚本路径 script_path通过调用 abs_path 函数获取 web.py 的绝对路径。最后调用 run_script 函数来运行这个脚本。 总体来看这个程序的主要目的是为用户提供一个简单的接口以便通过 Python 环境运行一个 Streamlit 应用便于进行 Web 开发和展示。 11.4 70种YOLOv8算法改进源码大全和调试加载训练教程非必要\ultralytics\nn\backbone\SwinTransformer.py 以下是经过简化并添加详细中文注释的核心代码部分 import torch import torch.nn as nn import torch.nn.functional as F import numpy as npclass Mlp(nn.Module): 多层感知机MLP模块。 def __init__(self, in_features, hidden_featuresNone, out_featuresNone, act_layernn.GELU, drop0.):super().__init__()out_features out_features or in_features # 输出特征数hidden_features hidden_features or in_features # 隐藏层特征数self.fc1 nn.Linear(in_features, hidden_features) # 第一层线性变换self.act act_layer() # 激活函数self.fc2 nn.Linear(hidden_features, out_features) # 第二层线性变换self.drop nn.Dropout(drop) # Dropout层def forward(self, x): 前向传播函数。 x self.fc1(x) # 线性变换x self.act(x) # 激活x self.drop(x) # Dropoutx self.fc2(x) # 线性变换x self.drop(x) # Dropoutreturn xclass WindowAttention(nn.Module): 基于窗口的多头自注意力模块。 def __init__(self, dim, window_size, num_heads, qkv_biasTrue, attn_drop0., proj_drop0.):super().__init__()self.dim dim # 输入通道数self.window_size window_size # 窗口大小self.num_heads num_heads # 注意力头数head_dim dim // num_heads # 每个头的维度self.scale head_dim ** -0.5 # 缩放因子# 相对位置偏置表self.relative_position_bias_table nn.Parameter(torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads))# 计算相对位置索引coords_h torch.arange(self.window_size[0])coords_w torch.arange(self.window_size[1])coords torch.stack(torch.meshgrid([coords_h, coords_w])) # 生成坐标网格coords_flatten torch.flatten(coords, 1) # 展平坐标relative_coords coords_flatten[:, :, None] - coords_flatten[:, None, :] # 计算相对坐标relative_coords relative_coords.permute(1, 2, 0).contiguous() # 调整维度relative_coords[:, :, 0] self.window_size[0] - 1 # 调整坐标范围relative_coords[:, :, 1] self.window_size[1] - 1relative_coords[:, :, 0] * 2 * self.window_size[1] - 1self.relative_position_index relative_coords.sum(-1) # 计算相对位置索引self.qkv nn.Linear(dim, dim * 3, biasqkv_bias) # 线性变换用于生成Q、K、Vself.attn_drop nn.Dropout(attn_drop) # 注意力权重的Dropoutself.proj nn.Linear(dim, dim) # 输出线性变换self.proj_drop nn.Dropout(proj_drop) # 输出的Dropoutdef forward(self, x, maskNone): 前向传播函数。 B_, N, C x.shape # 获取输入的形状qkv self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) # 计算Q、K、Vq, k, v qkv[0], qkv[1], qkv[2] # 分离Q、K、Vq q * self.scale # 缩放Qattn (q k.transpose(-2, -1)) # 计算注意力分数# 添加相对位置偏置relative_position_bias self.relative_position_bias_table[self.relative_position_index.view(-1)].view(self.window_size[0] * self.window_size[1], self.window_size[0] * self.window_size[1], -1)relative_position_bias relative_position_bias.permute(2, 0, 1).contiguous() # 调整维度attn attn relative_position_bias.unsqueeze(0) # 加入相对位置偏置attn attn.softmax(dim-1) # 计算注意力权重attn self.attn_drop(attn) # Dropoutx (attn v).transpose(1, 2).reshape(B_, N, C) # 计算输出x self.proj(x) # 线性变换x self.proj_drop(x) # Dropoutreturn xclass SwinTransformer(nn.Module): Swin Transformer主干网络。 def __init__(self, patch_size4, embed_dim96, depths[2, 2, 6, 2], num_heads[3, 6, 12, 24]):super().__init__()self.patch_embed PatchEmbed(patch_sizepatch_size, in_chans3, embed_dimembed_dim) # 图像分块嵌入self.layers nn.ModuleList() # 存储每一层# 构建每一层for i_layer in range(len(depths)):layer BasicLayer(dimint(embed_dim * 2 ** i_layer),depthdepths[i_layer],num_headsnum_heads[i_layer],window_size7) # 窗口大小设为7self.layers.append(layer)def forward(self, x): 前向传播函数。 x self.patch_embed(x) # 进行图像分块嵌入for layer in self.layers:x layer(x) # 逐层传递return x # 返回最终输出代码核心部分说明 Mlp类实现了一个多层感知机包含两层线性变换和激活函数。WindowAttention类实现了窗口基础的多头自注意力机制计算注意力分数并加入相对位置偏置。SwinTransformer类构建了Swin Transformer的主干网络包含图像分块嵌入和多个Transformer层。 以上是Swin Transformer的核心结构包含了重要的组件和其功能。 这个程序文件实现了Swin Transformer模型的结构Swin Transformer是一种基于窗口的多头自注意力机制的视觉Transformer具有层次化的特性适用于图像处理任务。文件中包含多个类和函数下面是对其主要部分的说明。 首先导入了必要的库包括PyTorch和一些用于构建神经网络的模块。接着定义了一个名为Mlp的类它实现了一个多层感知机MLP包含两个线性层和一个激活函数默认为GELU并在每个线性层后添加了Dropout以防止过拟合。 接下来定义了两个函数window_partition和window_reverse用于将输入特征分割成窗口和将窗口合并回原始特征。这是Swin Transformer的关键步骤因为它通过窗口化的方式来减少计算复杂度。 WindowAttention类实现了窗口基础的多头自注意力机制支持相对位置偏置。该类在前向传播中计算查询、键、值并应用相对位置偏置。它还处理了窗口的分割和合并以及对注意力权重的Dropout。 SwinTransformerBlock类定义了Swin Transformer的基本块包含了规范化层、窗口注意力层和MLP。它还实现了循环移位功能以便在不同的块之间共享信息。 PatchMerging类用于将特征图的不同部分合并成更大的块以减少特征图的尺寸。它通过线性层将四个输入通道合并为两个输出通道。 BasicLayer类是Swin Transformer的一个基本层包含多个Swin Transformer块并在必要时执行下采样。它还计算了SW-MSA的注意力掩码。 PatchEmbed类将输入图像分割成不重叠的补丁并将其嵌入到一个更高维的空间中。它使用卷积层来实现这一点并可选择在嵌入后添加规范化。 SwinTransformer类是整个模型的核心负责构建模型的各个层次并实现前向传播。它处理输入图像的补丁嵌入、位置嵌入和各层的输出。 最后定义了一个update_weight函数用于更新模型的权重并提供了一个SwinTransformer_Tiny函数用于创建一个小型的Swin Transformer模型实例并加载预训练权重如果提供。 总体而言这个文件实现了Swin Transformer的完整结构提供了灵活的参数设置和模型构建功能适用于各种视觉任务。 11.5 70种YOLOv8算法改进源码大全和调试加载训练教程非必要\ultralytics\utils\callbacks\wb.py 以下是经过简化和注释的核心代码部分主要功能是使用WandB记录YOLO模型的训练过程中的各种指标和可视化结果。 # 导入必要的库 from ultralytics.utils import SETTINGS, TESTS_RUNNING from ultralytics.utils.torch_utils import model_info_for_loggerstry:# 确保当前不是在运行测试assert not TESTS_RUNNING # 确保WandB集成已启用assert SETTINGS[wandb] is True import wandb as wb# 确保WandB包已正确导入assert hasattr(wb, __version__) import numpy as npimport pandas as pd# 用于记录已处理的图表_processed_plots {}except (ImportError, AssertionError):wb None # 如果导入失败设置wb为Nonedef _custom_table(x, y, classes, titlePrecision Recall Curve, x_titleRecall, y_titlePrecision):创建并记录自定义的精确度-召回率曲线可视化。参数:x (List): x轴的值长度为N。y (List): y轴的值长度为N。classes (List): 每个点的类别标签长度为N。title (str, optional): 图表标题默认为Precision Recall Curve。x_title (str, optional): x轴标签默认为Recall。y_title (str, optional): y轴标签默认为Precision。返回:(wandb.Object): 适合记录的WandB对象展示自定义的可视化。# 创建数据框df pd.DataFrame({class: classes, y: y, x: x}).round(3)fields {x: x, y: y, class: class}string_fields {title: title, x-axis-title: x_title, y-axis-title: y_title}# 返回WandB表格对象return wb.plot_table(wandb/area-under-curve/v0,wb.Table(dataframedf),fieldsfields,string_fieldsstring_fields)def _plot_curve(x, y, namesNone, idprecision-recall, titlePrecision Recall Curve, x_titleRecall, y_titlePrecision, num_x100, only_meanFalse):记录指标曲线可视化。参数:x (np.ndarray): x轴数据点长度为N。y (np.ndarray): y轴数据点形状为CxNC为类别数。names (list, optional): 类别名称长度为C。id (str, optional): 记录数据的唯一标识符默认为precision-recall。title (str, optional): 可视化图表的标题默认为Precision Recall Curve。x_title (str, optional): x轴标签默认为Recall。y_title (str, optional): y轴标签默认为Precision。num_x (int, optional): 可视化的插值数据点数量默认为100。only_mean (bool, optional): 是否仅绘制均值曲线默认为True。# 创建新的x值if names is None:names []x_new np.linspace(x[0], x[-1], num_x).round(5)# 创建用于记录的数组x_log x_new.tolist()y_log np.interp(x_new, x, np.mean(y, axis0)).round(3).tolist()if only_mean:# 仅记录均值曲线table wb.Table(datalist(zip(x_log, y_log)), columns[x_title, y_title])wb.run.log({title: wb.plot.line(table, x_title, y_title, titletitle)})else:# 记录每个类别的曲线classes [mean] * len(x_log)for i, yi in enumerate(y):x_log.extend(x_new) # 添加新的x值y_log.extend(np.interp(x_new, x, yi)) # 插值y到新的xclasses.extend([names[i]] * len(x_new)) # 添加类别名称wb.log({id: _custom_table(x_log, y_log, classes, title, x_title, y_title)}, commitFalse)def on_fit_epoch_end(trainer):在每个训练周期结束时记录训练指标和模型信息。wb.run.log(trainer.metrics, steptrainer.epoch 1) # 记录指标# 记录图表_log_plots(trainer.plots, steptrainer.epoch 1)_log_plots(trainer.validator.plots, steptrainer.epoch 1)if trainer.epoch 0:wb.run.log(model_info_for_loggers(trainer), steptrainer.epoch 1) # 记录模型信息def on_train_end(trainer):在训练结束时保存最佳模型作为artifact。_log_plots(trainer.validator.plots, steptrainer.epoch 1)_log_plots(trainer.plots, steptrainer.epoch 1)art wb.Artifact(typemodel, namefrun_{wb.run.id}_model) # 创建artifactif trainer.best.exists():art.add_file(trainer.best) # 添加最佳模型文件wb.run.log_artifact(art, aliases[best]) # 记录artifact# 记录曲线for curve_name, curve_values in zip(trainer.validator.metrics.curves, trainer.validator.metrics.curves_results):x, y, x_title, y_title curve_values_plot_curve(x,y,nameslist(trainer.validator.metrics.names.values()),idfcurves/{curve_name},titlecurve_name,x_titlex_title,y_titley_title,)wb.run.finish() # 结束WandB运行# 定义回调函数 callbacks {on_fit_epoch_end: on_fit_epoch_end,on_train_end: on_train_end } if wb else {}代码核心功能 WandB集成确保WandB库正确导入并配置用于记录训练过程中的各种指标和可视化。自定义可视化提供了创建和记录精确度-召回率曲线的功能支持多类别的可视化。训练过程记录在每个训练周期结束时记录模型的性能指标和可视化结果。最佳模型保存在训练结束时保存最佳模型并记录相关的曲线和图表。 这个程序文件是用于集成和记录YOLOv8模型训练过程中的各种指标和可视化结果主要通过WandBWeights and Biases进行日志记录和可视化。文件中首先导入了一些必要的库和模块并进行了一些基本的检查以确保WandB的集成是启用的。 在文件中定义了几个重要的函数。首先是_custom_table函数它用于创建并记录一个自定义的精确度-召回曲线可视化。该函数接收x轴和y轴的数据、类别标签以及图表的标题等参数并返回一个适合WandB记录的对象。这个可视化可以帮助用户监控模型在不同类别上的表现。 接下来是_plot_curve函数它生成一个度量曲线的可视化并将其记录到WandB中。该函数支持对多个类别的数据进行处理并可以选择只绘制平均曲线或所有类别的曲线。它通过插值方法生成新的x值并相应地计算y值以便更好地展示数据。 _log_plots函数用于记录输入字典中的图表如果这些图表在指定的步骤中尚未记录过。它会检查每个图表的时间戳以避免重复记录。 接下来的几个函数分别对应于训练过程中的不同阶段。on_pretrain_routine_start函数在预训练例程开始时初始化WandB项目on_fit_epoch_end函数在每个训练周期结束时记录训练指标和模型信息on_train_epoch_end函数在每个训练周期结束时记录标签损失和学习率on_train_end函数在训练结束时保存最佳模型并记录相关的曲线图。 最后文件中定义了一个callbacks字典用于存储不同训练阶段的回调函数如果WandB未被导入则该字典为空。整体而言这个文件的主要功能是通过WandB提供的API记录和可视化YOLOv8模型训练过程中的重要数据帮助用户更好地理解和分析模型的性能。 11.6 train.py 以下是经过简化和注释的核心代码部分主要保留了训练检测模型的关键功能和流程 import random import numpy as np import torch.nn as nn from ultralytics.data import build_dataloader, build_yolo_dataset from ultralytics.engine.trainer import BaseTrainer from ultralytics.models import yolo from ultralytics.nn.tasks import DetectionModel from ultralytics.utils import LOGGER, RANK from ultralytics.utils.torch_utils import de_parallel, torch_distributed_zero_firstclass DetectionTrainer(BaseTrainer):基于检测模型的训练类继承自BaseTrainer类。def build_dataset(self, img_path, modetrain, batchNone):构建YOLO数据集。参数:img_path (str): 图像文件夹的路径。mode (str): 模式train或val用于自定义不同的增强。batch (int, optional): 批次大小仅用于rect模式。gs max(int(de_parallel(self.model).stride.max() if self.model else 0), 32)return build_yolo_dataset(self.args, img_path, batch, self.data, modemode, rectmode val, stridegs)def get_dataloader(self, dataset_path, batch_size16, rank0, modetrain):构建并返回数据加载器。assert mode in [train, val]with torch_distributed_zero_first(rank): # 仅在DDP时初始化数据集dataset self.build_dataset(dataset_path, mode, batch_size)shuffle mode trainif getattr(dataset, rect, False) and shuffle:LOGGER.warning(WARNING ⚠️ rectTrue 与 DataLoader shuffle 不兼容设置 shuffleFalse)shuffle Falseworkers self.args.workers if mode train else self.args.workers * 2return build_dataloader(dataset, batch_size, workers, shuffle, rank) # 返回数据加载器def preprocess_batch(self, batch):对图像批次进行预处理包括缩放和转换为浮点数。batch[img] batch[img].to(self.device, non_blockingTrue).float() / 255 # 将图像转换为浮点数并归一化if self.args.multi_scale:imgs batch[img]sz (random.randrange(self.args.imgsz * 0.5, self.args.imgsz * 1.5 self.stride)// self.stride* self.stride) # 随机选择新的图像大小sf sz / max(imgs.shape[2:]) # 计算缩放因子if sf ! 1:ns [math.ceil(x * sf / self.stride) * self.stride for x in imgs.shape[2:]] # 计算新的形状imgs nn.functional.interpolate(imgs, sizens, modebilinear, align_cornersFalse) # 调整图像大小batch[img] imgsreturn batchdef get_model(self, cfgNone, weightsNone, verboseTrue):返回YOLO检测模型。model DetectionModel(cfg, ncself.data[nc], verboseverbose and RANK -1)if weights:model.load(weights) # 加载权重return modeldef plot_training_samples(self, batch, ni):绘制带有注释的训练样本。plot_images(imagesbatch[img],batch_idxbatch[batch_idx],clsbatch[cls].squeeze(-1),bboxesbatch[bboxes],pathsbatch[im_file],fnameself.save_dir / ftrain_batch{ni}.jpg,on_plotself.on_plot,)代码注释说明 类定义DetectionTrainer 类用于训练YOLO检测模型继承自 BaseTrainer。构建数据集build_dataset 方法用于根据给定的图像路径和模式构建YOLO数据集。获取数据加载器get_dataloader 方法构建并返回数据加载器支持训练和验证模式。预处理批次preprocess_batch 方法对输入的图像批次进行预处理包括归一化和缩放。获取模型get_model 方法返回一个YOLO检测模型并可选择加载预训练权重。绘制训练样本plot_training_samples 方法用于绘制训练样本及其注释便于可视化训练过程。 通过这些核心功能DetectionTrainer 类能够有效地进行YOLO模型的训练和验证。 这个程序文件 train.py 是一个用于训练 YOLOYou Only Look Once目标检测模型的实现继承自 BaseTrainer 类。文件中包含了多个方法用于构建数据集、获取数据加载器、预处理图像批次、设置模型属性、获取模型、验证模型、记录损失、显示训练进度、绘制训练样本和绘制训练指标等。 在 DetectionTrainer 类中build_dataset 方法用于构建 YOLO 数据集接收图像路径、模式训练或验证和批次大小作为参数。该方法会根据模型的步幅stride来确定数据集的构建方式。 get_dataloader 方法则负责构建和返回数据加载器。它会根据模式训练或验证来初始化数据集并设置是否打乱数据。对于训练模式如果数据集是矩形rect则会发出警告因为矩形数据集与打乱操作不兼容。 preprocess_batch 方法用于对图像批次进行预处理包括将图像缩放到适当的大小并转换为浮点数。它还支持多尺度训练通过随机选择图像大小来增强模型的鲁棒性。 set_model_attributes 方法用于设置模型的属性包括类别数量和类别名称等。get_model 方法返回一个 YOLO 检测模型并可选择加载预训练权重。 get_validator 方法返回一个用于验证 YOLO 模型的验证器。label_loss_items 方法则返回一个包含训练损失项的字典便于记录和分析训练过程中的损失。 progress_string 方法生成一个格式化的字符串用于显示训练进度包括当前的轮次、GPU 内存使用情况、损失值、实例数量和图像大小等信息。 plot_training_samples 方法用于绘制训练样本及其标注便于可视化训练过程中的数据。最后plot_metrics 和 plot_training_labels 方法用于绘制训练过程中的指标和标签以便于分析模型的性能。 整体来看这个文件实现了 YOLO 模型训练的各个方面提供了数据处理、模型训练、验证和可视化等功能便于用户进行目标检测任务的训练和评估。 12.系统整体结构节选 整体功能和构架概括 该项目是一个基于YOLOv8的目标检测框架提供了多种算法改进和调试加载训练的功能。其主要功能包括模型的定义、训练、验证、数据处理、可视化以及与其他模型如Swin Transformer的集成。项目的结构设计清晰模块化程度高便于扩展和维护。 模型定义实现了YOLOv8和Swin Transformer等模型的构建。训练与验证提供了训练和验证的回调机制支持损失记录和指标可视化。数据处理实现了数据集的构建和预处理支持多种数据格式。可视化通过WandB等工具记录训练过程中的指标和样本便于分析模型性能。用户界面提供了简单的用户界面用于启动和管理训练过程。 文件功能整理表 文件路径功能描述ultralytics/models/utils/ops.py实现了HungarianMatcher类用于目标检测中的匹配问题包含成本计算和匹配索引返回功能。ultralytics/engine/__init__.py包的初始化文件导入模块设置元数据便于用户访问YOLOv8的功能。ui.py使用Streamlit框架启动Web应用提供用户界面以运行指定的训练脚本。ultralytics/nn/backbone/SwinTransformer.py实现Swin Transformer模型的结构包含多个类和函数支持图像处理任务。ultralytics/utils/callbacks/wb.py集成WandB进行训练过程中的日志记录和可视化支持自定义图表和训练指标的记录。train.py负责YOLO模型的训练过程包含数据集构建、模型训练、验证和可视化等功能。ultralytics/engine/tuner.py实现模型超参数调优的功能支持不同超参数组合的评估和选择。ultralytics/models/fastsam/model.py实现FastSAM模型的结构和功能支持快速的目标检测和分割任务。ultralytics/nn/modules/utils.py提供了一些实用工具函数支持模型构建和训练过程中的常见操作。ultralytics/models/yolo/classify/predict.py实现YOLO模型的分类预测功能支持输入图像的分类和结果输出。ultralytics/data/__init__.py数据处理模块的初始化文件负责数据集的加载和预处理。ultralytics/nn/modules/block.py定义神经网络的基本模块支持模型的构建和层次化设计。ultralytics/trackers/__init__.py跟踪模块的初始化文件负责目标跟踪功能的实现和管理。 这个表格总结了项目中各个文件的主要功能帮助用户快速理解和定位所需的功能模块。 注意由于此博客编辑较早上面“11.项目核心源码讲解再也不用担心看不懂代码逻辑”中部分代码可能会优化升级仅供参考学习完整“训练源码”、“Web前端界面”和“70种创新点源码”以“13.完整训练Web前端界面70种创新点源码、数据集获取由于版权原因本博客仅提供【原始博客的链接】原始博客提供下载链接”的内容为准。 13.完整训练Web前端界面70种创新点源码、数据集获取由于版权原因本博客仅提供【原始博客的链接】原始博客提供下载链接 参考原始博客1: https://gitee.com/qunshansj/Note-Detection-FRC-2024601 参考原始博客2: https://github.com/VisionMillionDataStudio/Note-Detection-FRC-2024601
文章转载自:
http://www.morning.xxwfq.cn.gov.cn.xxwfq.cn
http://www.morning.svrud.cn.gov.cn.svrud.cn
http://www.morning.xmyrn.cn.gov.cn.xmyrn.cn
http://www.morning.pfmsh.cn.gov.cn.pfmsh.cn
http://www.morning.xmhpq.cn.gov.cn.xmhpq.cn
http://www.morning.hkpyp.cn.gov.cn.hkpyp.cn
http://www.morning.rytps.cn.gov.cn.rytps.cn
http://www.morning.gkgb.cn.gov.cn.gkgb.cn
http://www.morning.mqbdb.cn.gov.cn.mqbdb.cn
http://www.morning.glxmf.cn.gov.cn.glxmf.cn
http://www.morning.gklxm.cn.gov.cn.gklxm.cn
http://www.morning.pdtjj.cn.gov.cn.pdtjj.cn
http://www.morning.pyswr.cn.gov.cn.pyswr.cn
http://www.morning.nwfxp.cn.gov.cn.nwfxp.cn
http://www.morning.cpnlq.cn.gov.cn.cpnlq.cn
http://www.morning.yfmlj.cn.gov.cn.yfmlj.cn
http://www.morning.wnjrf.cn.gov.cn.wnjrf.cn
http://www.morning.kkdbz.cn.gov.cn.kkdbz.cn
http://www.morning.gbgdm.cn.gov.cn.gbgdm.cn
http://www.morning.kfmlf.cn.gov.cn.kfmlf.cn
http://www.morning.xxwl1.com.gov.cn.xxwl1.com
http://www.morning.tnrdz.cn.gov.cn.tnrdz.cn
http://www.morning.guanszz.com.gov.cn.guanszz.com
http://www.morning.shinezoneserver.com.gov.cn.shinezoneserver.com
http://www.morning.lprfk.cn.gov.cn.lprfk.cn
http://www.morning.msbpb.cn.gov.cn.msbpb.cn
http://www.morning.nqyzg.cn.gov.cn.nqyzg.cn
http://www.morning.mjkqj.cn.gov.cn.mjkqj.cn
http://www.morning.jgmlb.cn.gov.cn.jgmlb.cn
http://www.morning.qrwdg.cn.gov.cn.qrwdg.cn
http://www.morning.rshkh.cn.gov.cn.rshkh.cn
http://www.morning.djxnn.cn.gov.cn.djxnn.cn
http://www.morning.gmztd.cn.gov.cn.gmztd.cn
http://www.morning.sypzg.cn.gov.cn.sypzg.cn
http://www.morning.smrty.cn.gov.cn.smrty.cn
http://www.morning.mzhhr.cn.gov.cn.mzhhr.cn
http://www.morning.bjsites.com.gov.cn.bjsites.com
http://www.morning.diuchai.com.gov.cn.diuchai.com
http://www.morning.pzcqz.cn.gov.cn.pzcqz.cn
http://www.morning.xtdms.com.gov.cn.xtdms.com
http://www.morning.mkydt.cn.gov.cn.mkydt.cn
http://www.morning.dqwkm.cn.gov.cn.dqwkm.cn
http://www.morning.xfxnq.cn.gov.cn.xfxnq.cn
http://www.morning.tbksk.cn.gov.cn.tbksk.cn
http://www.morning.skrww.cn.gov.cn.skrww.cn
http://www.morning.qrqg.cn.gov.cn.qrqg.cn
http://www.morning.ysrtj.cn.gov.cn.ysrtj.cn
http://www.morning.pctsq.cn.gov.cn.pctsq.cn
http://www.morning.qlxgc.cn.gov.cn.qlxgc.cn
http://www.morning.sjzsjsm.com.gov.cn.sjzsjsm.com
http://www.morning.dnvhfh.cn.gov.cn.dnvhfh.cn
http://www.morning.qzxb.cn.gov.cn.qzxb.cn
http://www.morning.klpwl.cn.gov.cn.klpwl.cn
http://www.morning.krklj.cn.gov.cn.krklj.cn
http://www.morning.snnkt.cn.gov.cn.snnkt.cn
http://www.morning.hsrch.cn.gov.cn.hsrch.cn
http://www.morning.ntgrn.cn.gov.cn.ntgrn.cn
http://www.morning.jfmyt.cn.gov.cn.jfmyt.cn
http://www.morning.rptdz.cn.gov.cn.rptdz.cn
http://www.morning.fnmtc.cn.gov.cn.fnmtc.cn
http://www.morning.qttft.cn.gov.cn.qttft.cn
http://www.morning.fwcjy.cn.gov.cn.fwcjy.cn
http://www.morning.shawls.com.cn.gov.cn.shawls.com.cn
http://www.morning.pgjyc.cn.gov.cn.pgjyc.cn
http://www.morning.lphtm.cn.gov.cn.lphtm.cn
http://www.morning.rpsjh.cn.gov.cn.rpsjh.cn
http://www.morning.ktlfb.cn.gov.cn.ktlfb.cn
http://www.morning.zqzzn.cn.gov.cn.zqzzn.cn
http://www.morning.bchhr.cn.gov.cn.bchhr.cn
http://www.morning.rfhwc.cn.gov.cn.rfhwc.cn
http://www.morning.rwlnk.cn.gov.cn.rwlnk.cn
http://www.morning.mljtx.cn.gov.cn.mljtx.cn
http://www.morning.txtgy.cn.gov.cn.txtgy.cn
http://www.morning.mnygn.cn.gov.cn.mnygn.cn
http://www.morning.tnktt.cn.gov.cn.tnktt.cn
http://www.morning.khclr.cn.gov.cn.khclr.cn
http://www.morning.wtrjq.cn.gov.cn.wtrjq.cn
http://www.morning.ffwrq.cn.gov.cn.ffwrq.cn
http://www.morning.tyhfz.cn.gov.cn.tyhfz.cn
http://www.morning.wtdhm.cn.gov.cn.wtdhm.cn
http://www.tj-hxxt.cn/news/258640.html

相关文章:

  • 整站优化该怎么做网站出租建设
  • 网站版块下载大连工业大学艺术与信息工程学院
  • 新手建站素材品牌网站建设报价单
  • 做网站在哪里找素材wordpress店铺模板
  • 国家电网交流建设分公司网站网站运营规划
  • 音乐网站素材有哪些企业可以做招聘的网站
  • 西宁市网站建设价格雄安移动网络
  • 找人做seo要给网站程序品牌推广的目的
  • 广州网站建设 讯度网络网站建设餐饮
  • 学做网站 软件wordpress单号管理
  • 卷帘门怎么做网站狂人站群系统
  • 做网站营业范围大学网站建设评比考核办法
  • windowxp做网站服务器东莞网络营销十年乐云seo
  • 做字典网站开发全屋定制十大名牌欧派
  • php网站开发试题在线制作免费生成水印
  • 自己建网站卖东西怎么样湛江cms模板建站
  • 蒙特网站建设公司wordpress gallery插件
  • 模板网站演示站点怎么做聊城专业网站设计公司
  • 网站建设的评分细则三维家
  • 如何注册免费网站客户软件管理系统
  • 如何在自己网站上做支付宝建设网上银行app下载安装
  • 塘沽建设网站西安高校网站建设
  • 做植物网站教育培训机构前十名
  • php做视频直播网站泊头做网站找哪家好
  • 怎么做竞拍网站网站建设基本流程
  • 哪里有网站开发服务器怎么注册商标品牌
  • 万链网站做的怎么样?移动互联网是以手机等什么设备为终端用无线技术实现相互通信
  • 门户网站建设困难商业网点建设开发中心网站
  • 湘潭做网站 都来磐石网络做网站用什么字体比较好
  • 企业营销型网站设计丹阳网站建设咨询