上海轨道交通建设查询网站,北京建设网站哪家好,中天建设集团有限公司山东分公司,只用wordpress 主题1.研究背景与意义
项目参考AAAI Association for the Advancement of Artificial Intelligence
研究背景与意义#xff1a;
随着电动车的普及和人们对环境保护的重视#xff0c;电动车的使用量逐渐增加。然而#xff0c;电动车的充电问题一直是一个挑战#xff0c;特别是…1.研究背景与意义
项目参考AAAI Association for the Advancement of Artificial Intelligence
研究背景与意义
随着电动车的普及和人们对环境保护的重视电动车的使用量逐渐增加。然而电动车的充电问题一直是一个挑战特别是在高层住宅区。为了解决这个问题电梯入户充电系统逐渐被广泛采用。然而电梯入户充电系统的安全性和可靠性仍然是一个重要的问题。
在电梯入户充电系统中电动车的检测是一个关键的环节。传统的电动车检测方法主要依赖于人工巡视这种方法存在人力成本高、效率低、易出错等问题。因此研发一种高效、准确的电动车电梯入户检测系统具有重要的意义。
近年来深度学习技术在计算机视觉领域取得了显著的进展。其中YOLOYou Only Look Once是一种快速而准确的目标检测算法已经被广泛应用于各种场景。然而YOLO算法在电动车电梯入户检测中仍然存在一些问题。首先YOLO算法对小目标的检测效果较差而电动车通常较小因此需要改进算法以提高检测精度。其次YOLO算法在复杂背景下容易受到干扰而电梯入户场景通常具有复杂的背景因此需要改进算法以提高鲁棒性。
为了解决上述问题本研究提出了一种改进的电动车电梯入户检测系统融合了HGNetv2和改进的YOLOv8算法。首先HGNetv2是一种高效的特征提取网络可以提取更丰富的特征信息从而提高目标检测的准确性。其次改进的YOLOv8算法在YOLOv3的基础上进行了改进通过引入注意力机制和多尺度特征融合提高了算法对小目标和复杂背景的检测能力。
本研究的意义主要体现在以下几个方面 提高电动车电梯入户检测的准确性通过融合HGNetv2和改进的YOLOv8算法可以提取更丰富的特征信息并通过注意力机制和多尺度特征融合来提高检测的准确性。这将大大减少误报和漏报的情况提高电动车电梯入户检测的可靠性。 提高电动车电梯入户检测的效率改进的YOLOv8算法具有较快的检测速度可以实时地对电动车进行检测。这将大大提高电梯入户充电系统的使用效率减少用户等待时间。 降低电梯入户充电系统的维护成本传统的人工巡视方式需要大量的人力投入而改进的电动车电梯入户检测系统可以实现自动化检测减少了人力成本。此外改进的系统还具有较低的误报率减少了维护的工作量。
综上所述改进的电动车电梯入户检测系统对于提高电梯入户充电系统的安全性、可靠性和效率具有重要的意义。该系统的研究成果将为电动车充电问题的解决提供有力的支持促进电动车的普及和环境保护的进一步推进。
2.图片演示 3.视频演示
【改进YOLOv8】电动车电梯入户检测系统融合HGNetv2改进改进YOLOv8_哔哩哔哩_bilibili
4.数据集的采集标注和整理
图片的收集
首先我们需要收集所需的图片。这可以通过不同的方式来实现例如使用现有的公开数据集DDDatasets。 labelImg是一个图形化的图像注释工具支持VOC和YOLO格式。以下是使用labelImg将图片标注为VOC格式的步骤
1下载并安装labelImg。 2打开labelImg并选择“Open Dir”来选择你的图片目录。 3为你的目标对象设置标签名称。 4在图片上绘制矩形框选择对应的标签。 5保存标注信息这将在图片目录下生成一个与图片同名的XML文件。 6重复此过程直到所有的图片都标注完毕。 由于YOLO使用的是txt格式的标注我们需要将VOC格式转换为YOLO格式。可以使用各种转换工具或脚本来实现。
下面是一个简单的方法是使用Python脚本该脚本读取XML文件然后将其转换为YOLO所需的txt格式。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-import xml.etree.ElementTree as ET
import osclasses [] # 初始化为空列表CURRENT_DIR os.path.dirname(os.path.abspath(__file__))def convert(size, box):dw 1. / size[0]dh 1. / size[1]x (box[0] box[1]) / 2.0y (box[2] box[3]) / 2.0w box[1] - box[0]h box[3] - box[2]x x * dww w * dwy y * dhh h * dhreturn (x, y, w, h)def convert_annotation(image_id):in_file open(./label_xml\%s.xml % (image_id), encodingUTF-8)out_file open(./label_txt\%s.txt % (image_id), w) # 生成txt格式文件tree ET.parse(in_file)root tree.getroot()size root.find(size)w int(size.find(width).text)h int(size.find(height).text)for obj in root.iter(object):cls obj.find(name).textif cls not in classes:classes.append(cls) # 如果类别不存在添加到classes列表中cls_id classes.index(cls)xmlbox obj.find(bndbox)b (float(xmlbox.find(xmin).text), float(xmlbox.find(xmax).text), float(xmlbox.find(ymin).text),float(xmlbox.find(ymax).text))bb convert((w, h), b)out_file.write(str(cls_id) .join([str(a) for a in bb]) \n)xml_path os.path.join(CURRENT_DIR, ./label_xml/)# xml list
img_xmls os.listdir(xml_path)
for img_xml in img_xmls:label_name img_xml.split(.)[0]print(label_name)convert_annotation(label_name)print(Classes:) # 打印最终的classes列表
print(classes) # 打印最终的classes列表
整理数据文件夹结构
我们需要将数据集整理为以下结构
-----data|-----train| |-----images| |-----labels||-----valid| |-----images| |-----labels||-----test|-----images|-----labels
确保以下几点
所有的训练图片都位于data/train/images目录下相应的标注文件位于data/train/labels目录下。 所有的验证图片都位于data/valid/images目录下相应的标注文件位于data/valid/labels目录下。 所有的测试图片都位于data/test/images目录下相应的标注文件位于data/test/labels目录下。 这样的结构使得数据的管理和模型的训练、验证和测试变得非常方便。
模型训练 Epoch gpu_mem box obj cls labels img_size1/200 20.8G 0.01576 0.01955 0.007536 22 1280: 100%|██████████| 849/849 [14:4200:00, 1.04s/it]Class Images Labels P R mAP.5 mAP.5:.95: 100%|██████████| 213/213 [01:1400:00, 2.87it/s]all 3395 17314 0.994 0.957 0.0957 0.0843Epoch gpu_mem box obj cls labels img_size2/200 20.8G 0.01578 0.01923 0.007006 22 1280: 100%|██████████| 849/849 [14:4400:00, 1.04s/it]Class Images Labels P R mAP.5 mAP.5:.95: 100%|██████████| 213/213 [01:1200:00, 2.95it/s]all 3395 17314 0.996 0.956 0.0957 0.0845Epoch gpu_mem box obj cls labels img_size3/200 20.8G 0.01561 0.0191 0.006895 27 1280: 100%|██████████| 849/849 [10:5600:00, 1.29it/s]Class Images Labels P R mAP.5 mAP.5:.95: 100%|███████ | 187/213 [00:5200:00, 4.04it/s]all 3395 17314 0.996 0.957 0.0957 0.08455.核心代码讲解
5.2 predict.py
封装为类后的代码如下
from ultralytics.engine.predictor import BasePredictor
from ultralytics.engine.results import Results
from ultralytics.utils import opsclass DetectionPredictor(BasePredictor):def postprocess(self, preds, img, orig_imgs):preds ops.non_max_suppression(preds,self.args.conf,self.args.iou,agnosticself.args.agnostic_nms,max_detself.args.max_det,classesself.args.classes)if not isinstance(orig_imgs, list):orig_imgs ops.convert_torch2numpy_batch(orig_imgs)results []for i, pred in enumerate(preds):orig_img orig_imgs[i]pred[:, :4] ops.scale_boxes(img.shape[2:], pred[:, :4], orig_img.shape)img_path self.batch[0][i]results.append(Results(orig_img, pathimg_path, namesself.model.names, boxespred))return results这个程序文件是一个名为predict.py的文件它是一个用于预测基于检测模型的类DetectionPredictor的定义。这个类继承自BasePredictor类并包含了一个postprocess方法用于后处理预测结果。在postprocess方法中预测结果经过非最大抑制处理后将返回一个Results对象的列表。这个文件还导入了一些其他的模块和函数用于处理预测结果和图像。
5.3 train.py
from copy import copy
import numpy as np
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):def build_dataset(self, img_path, modetrain, batchNone):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):dataset self.build_dataset(dataset_path, mode, batch_size)shuffle mode trainif getattr(dataset, rect, False) and shuffle:LOGGER.warning(WARNING ⚠️ rectTrue is incompatible with DataLoader shuffle, setting shuffleFalse)shuffle Falseworkers 0return build_dataloader(dataset, batch_size, workers, shuffle, rank)def preprocess_batch(self, batch):batch[img] batch[img].to(self.device, non_blockingTrue).float() / 255return batchdef set_model_attributes(self):self.model.nc self.data[nc]self.model.names self.data[names]self.model.args self.argsdef get_model(self, cfgNone, weightsNone, verboseTrue):model DetectionModel(cfg, ncself.data[nc], verboseverbose and RANK -1)if weights:model.load(weights)return modeldef get_validator(self):self.loss_names box_loss, cls_loss, dfl_lossreturn yolo.detect.DetectionValidator(self.test_loader, save_dirself.save_dir, argscopy(self.args))def label_loss_items(self, loss_itemsNone, prefixtrain):keys [f{prefix}/{x} for x in self.loss_names]if loss_items is not None:loss_items [round(float(x), 5) for x in loss_items]return dict(zip(keys, loss_items))else:return keysdef progress_string(self):return (\n %11s *(4 len(self.loss_names))) % (Epoch, GPU_mem, *self.loss_names, Instances, Size)def 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)def plot_metrics(self):plot_results(fileself.csv, on_plotself.on_plot)def plot_training_labels(self):boxes np.concatenate([lb[bboxes] for lb in self.train_loader.dataset.labels], 0)cls np.concatenate([lb[cls] for lb in self.train_loader.dataset.labels], 0)plot_labels(boxes, cls.squeeze(), namesself.data[names], save_dirself.save_dir, on_plotself.on_plot)这个程序文件是一个用于训练目标检测模型的程序。它使用了Ultralytics YOLO库并继承了BaseTrainer类来进行训练。
程序文件中的主要部分包括以下几个功能
构建YOLO数据集根据给定的图像路径和模式训练或验证构建YOLO数据集。构建数据加载器根据给定的数据集路径、批次大小、排名和模式训练或验证构建并返回数据加载器。预处理批次对一批图像进行预处理包括缩放和转换为浮点数。设置模型属性设置模型的属性包括类别数量、类别名称和超参数。获取模型返回一个YOLO检测模型。获取验证器返回一个用于YOLO模型验证的验证器。标记损失项返回一个带有标记的训练损失项的损失字典。进度字符串返回一个格式化的训练进度字符串包括当前的训练轮数、GPU内存、损失、实例数量和大小。绘制训练样本绘制带有注释的训练样本图像。绘制指标绘制来自CSV文件的指标。绘制训练标签创建一个带有标签的YOLO模型的训练图。
在程序的主函数中首先定义了一些参数然后创建了一个DetectionTrainer对象并调用其train方法进行模型训练。
5.5 backbone\EfficientFormerV2.py
import torch
import torch.nn as nn
import torch.nn.functional as F
import math
from typing import Dict
import itertools
import numpy as np
from timm.models.layers import DropPath, trunc_normal_, to_2tupleclass Attention4D(torch.nn.Module):def __init__(self, dim384, key_dim32, num_heads8,attn_ratio4,resolution7,act_layernn.ReLU,strideNone):super().__init__()self.num_heads num_headsself.scale key_dim ** -0.5self.key_dim key_dimself.nh_kd nh_kd key_dim * num_headsif stride is not None:self.resolution math.ceil(resolution / stride)self.stride_conv nn.Sequential(nn.Conv2d(dim, dim, kernel_size3, stridestride, padding1, groupsdim),nn.BatchNorm2d(dim), )self.upsample nn.Upsample(scale_factorstride, modebilinear)else:self.resolution resolutionself.stride_conv Noneself.upsample Noneself.N self.resolution ** 2self.N2 self.Nself.d int(attn_ratio * key_dim)self.dh int(attn_ratio * key_dim) * num_headsself.attn_ratio attn_ratioh self.dh nh_kd * 2self.q nn.Sequential(nn.Conv2d(dim, self.num_heads * self.key_dim, 1),nn.BatchNorm2d(self.num_heads * self.key_dim), )self.k nn.Sequential(nn.Conv2d(dim, self.num_heads * self.key_dim, 1),nn.BatchNorm2d(self.num_heads * self.key_dim), )self.v nn.Sequential(nn.Conv2d(dim, self.num_heads * self.d, 1),nn.BatchNorm2d(self.num_heads * self.d),)self.v_local nn.Sequential(nn.Conv2d(self.num_heads * self.d, self.num_heads * self.d,kernel_size3, stride1, padding1, groupsself.num_heads * self.d),nn.BatchNorm2d(self.num_heads * self.d), )self.talking_head1 nn.Conv2d(self.num_heads, self.num_heads, kernel_size1, stride1, padding0)self.talking_head2 nn.Conv2d(self.num_heads, self.num_heads, kernel_size1, stride1, padding0)self.proj nn.Sequential(act_layer(),nn.Conv2d(self.dh, dim, 1),nn.BatchNorm2d(dim), )points list(itertools.product(range(self.resolution), range(self.resolution)))N len(points)attention_offsets {}EfficientFormerV2.py是一个用于图像分类的模型文件。该文件定义了EfficientFormerV2模型的结构和各个组件的实现。
EfficientFormerV2模型是一个基于Transformer的图像分类模型它使用了一系列的Attention4D模块来提取图像特征。模型的输入是一张图像经过一系列的卷积和池化操作后得到了一个特征图。然后特征图通过多个Attention4D模块进行特征提取和特征融合最后通过全局平均池化和全连接层得到分类结果。
Attention4D模块是EfficientFormerV2模型的核心组件它使用了多头注意力机制来对特征图进行特征提取和特征融合。模块的输入是一个特征图经过一系列的卷积和池化操作后得到了多个查询、键和值。然后通过计算查询和键的相似度得到注意力权重再将注意力权重与值进行加权求和得到特征图的表示。最后通过一系列的卷积和池化操作对特征图进行进一步处理得到最终的特征表示。
除了Attention4D模块EfficientFormerV2模型还包括了其他一些组件如stem模块用于对输入图像进行初始处理LGQuery模块用于生成查询向量Embedding模块用于将输入图像转换为特征图。
总体来说EfficientFormerV2模型是一个基于Transformer的图像分类模型它通过一系列的Attention4D模块对图像特征进行提取和融合最终得到图像的分类结果。
5.6 backbone\efficientViT.py
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.utils.checkpoint as checkpoint
import itertoolsfrom timm.models.layers import SqueezeExciteimport numpy as np
import itertoolsclass EfficientViT_M0(nn.Module):def __init__(self, num_classes1000, img_size224, patch_size16, in_chans3, embed_dim768, depth12, num_heads12, mlp_ratio4.0, qkv_biasFalse, drop_rate0.0, attn_drop_rate0.0, drop_path_rate0.0):super(EfficientViT_M0, self).__init__()self.num_classes num_classesself.num_features self.embed_dim embed_dimself.patch_embed PatchEmbed(img_sizeimg_size, patch_sizepatch_size, in_chansin_chans, embed_dimembed_dim)num_patches self.patch_embed.num_patchesself.pos_embed nn.Parameter(torch.zeros(1, num_patches 1, embed_dim))self.cls_token nn.Parameter(torch.zeros(1, 1, embed_dim))self.pos_drop nn.Dropout(pdrop_rate)dpr [x.item() for x in torch.linspace(0, drop_path_rate, depth)] # stochastic depth decay ruleself.blocks nn.ModuleList([Block(dimembed_dim, num_headsnum_heads, mlp_ratiomlp_ratio, qkv_biasqkv_bias, dropdrop_rate, attn_dropattn_drop_rate, drop_pathdpr[i])for i in range(depth)])self.norm nn.LayerNorm(embed_dim)self.avgpool nn.AdaptiveAvgPool2d((1, 1))self.head nn.Linear(embed_dim, num_classes) if num_classes 0 else nn.Identity()self.init_weights()def init_weights(self):for m in self.modules():if isinstance(m, nn.Linear):nn.init.trunc_normal_(m.weight, std0.02)if isinstance(m, nn.Linear) and m.bias is not None:nn.init.constant_(m.bias, 0)elif isinstance(m, nn.LayerNorm):nn.init.constant_(m.bias, 0)nn.init.constant_(m.weight, 1.0)def forward_features(self, x):B x.shape[0]x self.patch_embed(x)cls_tokens self.cls_token.expand(B, -1, -1) # stole cls_tokens impl from Phil Wang, thanksx torch.cat((cls_tokens, x), dim1)x x self.pos_embedx self.pos_drop(x)for blk in self.blocks:x blk(x)x self.norm(x)return x[:, 0]def forward(self, x):x self.forward_features(x)x self.head(x)return x该程序文件是一个EfficientViT模型的架构用于下游任务。它定义了一系列的模块和函数包括Conv2d_BN、replace_batchnorm、PatchMerging、Residual、FFN、CascadedGroupAttention和LocalWindowAttention等。
Conv2d_BN是一个包含卷积和批归一化的序列模块。
replace_batchnorm函数用于替换模型中的批归一化层。
PatchMerging模块用于将输入的图像块进行合并。
Residual模块实现了残差连接。
FFN模块是一个前馈神经网络。
CascadedGroupAttention模块实现了级联组注意力机制。
LocalWindowAttention模块实现了局部窗口注意力机制。
该程序文件定义了多个EfficientViT模型包括EfficientViT_M0、EfficientViT_M1、EfficientViT_M2、EfficientViT_M3、EfficientViT_M4和EfficientViT_M5。
总体来说该程序文件实现了EfficientViT模型的架构包括各种注意力机制和模块用于处理图像数据的下游任务。
6.系统整体结构
整体功能和构架概述 该项目是一个电动车电梯入户检测系统主要使用了改进的YOLOv8目标检测模型并融合了HGNetv2、EfficientFormerV2、EfficientViT等不同的模型架构。该项目包含了训练、预测、导出模型、用户界面等功能模块。
下面是每个文件的功能概述
文件路径功能export.py将YOLOv8模型导出为其他格式的工具predict.py使用YOLOv8模型进行目标检测的预测工具train.py训练YOLOv8模型的程序ui.py使用YOLOv8模型进行目标检测的用户界面backbone\EfficientFormerV2.pyEfficientFormerV2模型的架构文件backbone\efficientViT.pyEfficientViT模型的架构文件backbone\fasternet.pyFasternet模型的架构文件backbone\lsknet.pyLSKNet模型的架构文件backbone\repvit.pyRepVIT模型的架构文件backbone\revcol.pyRevCol模型的架构文件backbone\SwinTransformer.pySwinTransformer模型的架构文件backbone\VanillaNet.pyVanillaNet模型的架构文件extra_modules\kernel_warehouse.py内核仓库的功能模块extra_modules\orepa.pyOREPA模块的功能模块extra_modules\rep_block.pyRepBlock模块的功能模块extra_modules\RFAConv.pyRFAConv模块的功能模块extra_modules_init_.py额外模块的初始化文件extra_modules\ops_dcnv3\setup.pyDCNv3模块的安装文件extra_modules\ops_dcnv3\test.pyDCNv3模块的测试文件extra_modules\ops_dcnv3\functions\dcnv3_func.pyDCNv3模块的函数实现文件extra_modules\ops_dcnv3\functions_init_.pyDCNv3模块函数的初始化文件extra_modules\ops_dcnv3\modules\dcnv3.pyDCNv3模块的模块实现文件extra_modules\ops_dcnv3\modules_init_.pyDCNv3模块的模块初始化文件models\common.py通用模型的实现文件models\experimental.py实验模型的实现文件models\tf.pyTensorFlow模型的实现文件models\yolo.pyYOLO模型的实现文件models_init_.py模型初始化文件utils\activations.py激活函数的实现文件utils\add_nms.pyNMS非极大值抑制的实现文件utils\augmentations.py数据增强的实现文件utils\autoanchor.py自动锚框的实现文件utils\autobatch.py自动批次的实现文件utils\callbacks.py回调函数的实现文件utils\datasets.py数据集处理的实现文件utils\downloads.py下载文件的实现文件utils\general.py通用功能的实现文件utils\google_utils.pyGoogle工具的实现文件utils\loss.py损失函数的实现文件utils\metrics.py指标计算的实现文件utils\plots.py绘图函数的实现文件utils\torch_utils.pyPyTorch工具的实现文件utils_init_.py工具初始化文件utils\aws\resume.pyAWS恢复功能的实现文件utils\aws_init_.pyAWS初始化文件utils\flask_rest_api\example_request.pyFlask REST API示例请求的实现文件utils\flask_rest_api\restapi.pyFlask REST API的实现文件utils\loggers_init_.py日志记录器初始化文件utils\loggers\wandb\log_dataset.pyWandB日志记录器的数据集日志记录实现文件utils\loggers\wandb\sweep.pyWandB日志记录器的扫描实现文件utils\loggers\wandb\wandb_utils.pyWandB日志记录器的工具实现文件
7.YOLOv8简介
YoloV8模型结构 YOLOv3之前的所有YOLO对象检测模型都是用C语言编写的并使用了Darknet框架Ultralytics发布了第一个使用PyTorch框架实现的YOLO (YOLOv3)YOLOv3之后Ultralytics发布了YOLOv5在2023年1月Ultralytics发布了YOLOv8包含五个模型用于检测、分割和分类。 YOLOv8 Nano是其中最快和最小的而YOLOv8 Extra Large (YOLOv8x)是其中最准确但最慢的具体模型见后续的图。
YOLOv8附带以下预训练模型:
目标检测在图像分辨率为640的COCO检测数据集上进行训练。 实例分割在图像分辨率为640的COCO分割数据集上训练。 图像分类模型在ImageNet数据集上预训练图像分辨率为224。 YOLOv8 概述 具体到 YOLOv8 算法其核心特性和改动可以归结为如下
提供了一个全新的SOTA模型state-of-the-art model包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于YOLACT的实例分割模型。和 YOLOv5 一样基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型用于满足不同场景需求 骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构并对不同尺度模型调整了不同的通道数属于对模型结构精心微调不再是一套参数应用所有模型大幅提升了模型性能。 Head 部分相比 YOLOv5 改动较大换成了目前主流的解耦头结构将分类和检测头分离同时也从Anchor-Based 换成了 Anchor-Free Loss 计算方面采用了TaskAlignedAssigner正样本分配策略并引入了Distribution Focal Loss 训练的数据增强部分引入了 YOLOX 中的最后 10 epoch 关闭 Mosiac 增强的操作可以有效地提升精度 8.HRNet V2简介
现在设计高低分辨率融合的思路主要有以下四种
a对称结构。如U-Net、Hourglass等都是先下采样再上采样上下采样过程对称。
b级联金字塔。如refinenet等高低分辨率融合时经过卷积处理。
c简单的baseline用转职卷积进行上采样。
d扩张卷积。如deeplab等增大感受野减少下采样次数可以无需跳层连接直接进行上采样。
bc都是使用复杂一些的网络进行下采样如resnet、vgg再用轻量级的网络进行上采样。
HRNet V1是在b的基础上进行改进从头到尾保持大的分辨率表示。然而HRNet V1仅是用在姿态估计领域的HRNet V2对它做小小的改进可以使其适用于更广的视觉任务。这一改进仅仅增加了较小的计算开销但却提升了较大的准确度。
网络结构图 这个结构图简洁明了就不多介绍了首先图2的输入是已经经过下采样四倍的feature map横向的conv block指的是basicblock 或 bottleblock不同分辨率之间的多交叉线部分是multi-resolution convolution多分辨率组卷积。
到此为止HRNet V2和HRNet V1是完全一致的。
区别之处在于这个基网络上加的一个head 图3介绍的是接在图2最后的head。a是HRNet V1的头很明显他只用了大分辨率的特征图。bc是HRNet V2的创新点b用与语义分割c用于目标检测。除此之外作者还在实验部分介绍了用于分类的head如图4所示。
多分辨率block 一个多分辨率block由多分辨率组卷积a和多分辨率卷积b组成。c是一个正常卷积的展开b的灵感来源于c。代码中a部分由Bottleneck和BasicBlock组成。
多分辨率卷积和正常卷积的区别1多分辨率卷积中每个通道的subset的分辨率都不一样。2通道之间的连接如果是降分辨率则用的是3x3的2stride的卷积如果是升分辨率用的是双线性最邻近插值上采样。
9.训练结果可视化分析
分析的后续步骤将包括
描述性统计提供数据的统计摘要以了解每个指标的分布、集中趋势和变异性。 相关性分析分析不同指标之间的关系以识别任何强相关性。 可视化创建数据的可视化表示以识别模式、趋势和异常。 深入分析详细探索数据的特定方面例如识别异常值、分析迭代趋势如果适用以及任何其他相关的深入分析. 让我们从描述性统计开始以了解数据的概况。
描述性统计提供了对数据的初步理解。以下是一些主要观察结果
第 2 列损失值
平均值0.02099 标准差0.00611 最小值0.01463 最大值0.06518 第 3 列
平均值0.00892 标准差0.01320 最小值0.00622 最大值0.23580 第 4 列
平均值0.00121 标准差0.00158 最小值0.00039 最大值0.01514 第 5 列
平均值0.03111 标准差0.01827 最小值0.02144 最大值0.31610 第 6 列和第 7 列分类参数或常量参数
第 6 列在 46 到 129 之间变化。 第 7 列是常数值 (640)。 第 8 至 14 列性能指标
与前四列相比这些列的变化较小表明它们可能是准确性、精确度、召回率等性能指标。 接下来我将进行相关性分析以了解这些指标之间的关系。随后将进行可视化以进一步阐明数据中的趋势和模式。
import pandas as pd# Attempting to load the data into a DataFrame for better analysis
# It seems the data is whitespace separated and does not have a header rowtry:df pd.read_csv(/mnt/data/results.txt, delim_whitespaceTrue, headerNone)df.head()
except Exception as e:error str(e)df if df in locals() else error 相关矩阵提供了对不同指标之间关系的深入了解
高相关性某些列对显示高相关值接近 1 或 -1表明存在很强的线性关系。例如第 8 列到第 14 列似乎彼此之间具有很强的相关性这表明它们可能是相关的性能指标。
低相关性第 2、3、4 和 5 列与其他列的相关性较低表明这些指标可能是独立的或衡量系统的不同方面性能。
负相关存在一些负相关但不是很强。这可能表明随着一个指标的增加另一个指标会减少但这种关系并不十分明显。
接下来我将创建可视化以进一步了解数据中的趋势、分布和潜在异常值。这将包括绘制迭代趋势假设第一列代表迭代或时期和关键指标的分布图。让我们从线图开始观察选定指标的迭代趋势。 线图说明了迭代过程中各种指标的趋势
第 2 列 该指标显示初始迭代次数显着减少表明早期阶段的快速改进或优化。随着迭代次数的增加趋势趋于平缓表明稳定。
第 3 列与第 2 列相比下降幅度不太明显并且在初始波动后似乎趋于稳定。
第 4 列和第 5 列这些指标在整个迭代过程中表现出相对较小的变化表明它们对迭代过程不太敏感或代表了系统更稳定的方面。
这些趋势可以表明系统在训练或优化阶段的收敛性特别是对于第 2 列和第 3 列中的指标。曲线的平坦表明随着迭代的进行系统正在达到最佳状态。
接下来我将为这些关键指标创建分布图以了解它们的变异性并识别任何潜在的异常值。这将为检测系统的性能和可靠性提供进一步的见解。 所选指标的分布图揭示了以下特征
第 2 列 此分布偏向较低值长尾向较高值延伸。这种偏度表明虽然大多数值都较低表明性能良好或错误较低但也有少数实例的值明显较高。
第 3 列 分布更加分散表明该指标存在更大的变异性。接近下端的峰的存在表明较低值的集中但在整个范围内有相当大的分布。
第 4 列该指标显示相对均匀的分布但峰值朝向下端表明值集中在较低范围内。
第 5 列 与第 4 列类似此指标也显示朝向下端的峰值表明较低值集中但在整个范围内分布。第 5 列一个
这些分布提供了对指标的可变性和一致性的深入了解。大多数指标中存在较低值的峰值可能表明整体性能或优化良好但少数情况偏离了这一趋势。
总结到目前为止的分析
迭代的趋势表明系统性能的优化和稳定。 相关性分析表明一些指标之间存在很强的关系表明它们是相关的绩效指标。 分布图揭示了指标的变异性和偏度大多数显示出集中的较低值表明性能良好。
10.系统整合
下图完整源码数据集环境部署视频教程自定义UI界面 参考博客《【改进YOLOv8】电动车电梯入户检测系统融合HGNetv2改进改进YOLOv8》
11.参考文献 [1]姚锐琳,侯卫民.基于改进YOLOv4-tiny的行人视频检测方法[J].信息技术与信息化.2021,(10).223-226.DOI:10.3969/j.issn.1672-9528.2021.10.073 .
[2]何文轩,荆洪迪,柳小波,等.基于YOLOv4-tiny的铁矿石品位识别技术研究[J].金属矿山.2021,(10).DOI:10.19614/j.cnki.jsks.202110019 .
[3]周华平,王京,孙克雷.改进的YOLOv4-tiny行人检测算法研究[J].无线电通信技术.2021,(4).DOI:10.3969/j.issn.1003-3114.2021.04.014 .
[4]卢迪,马文强.基于改进YOLOv4-tiny算法的手势识别[J].电子与信息学报.2021,(11).DOI:10.11999/JEIT201047 .
[5]丛玉华,何啸朱惠娟朱娴.基于改进Yolov4-Tiny网络的安全帽监测系统[J].电子技术与软件工程.2021,(19).121-124.
[6]化嫣然.基于YOLOv4–Tiny的航拍图像车辆检测算法研究[D].2021.
[7]Joseph Redmon.YOLO9000: Better, Faster, Stronger[C].