voc技术培训课件_第1页
voc技术培训课件_第2页
voc技术培训课件_第3页
voc技术培训课件_第4页
voc技术培训课件_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VOC技术培训课件:目标检测实战全流程解析第一章:VOC技术与目标检测简介VOC数据集的历史与重要性PASCALVOC(VisualObjectClasses)挑战赛始于2005年,是计算机视觉领域的里程碑。该数据集为目标检测、图像分割和分类任务提供了标准评测基准,推动了深度学习在视觉领域的快速发展。目标检测任务中的VOC应用场景VOC数据集在自动驾驶、智能安防、机器人视觉和医疗图像分析等领域有广泛应用。作为标准数据集,它为算法性能提供了可比较的评估标准。课程目标与学习路线VOC数据集概览VOC2007与VOC2012对比VOC2007包含9,963张图像,20个类别,共24,640个标注对象。VOC2012扩展至11,530张图像,同样20个类别,但标注对象增至27,450个,并改进了一些标注质量。20类目标类别详解分为四大类:交通工具(飞机、自行车、船等)、家用物品(瓶子、椅子、桌子等)、动物(鸟、猫、狗等)和人。每类都有详细的标注指南确保一致性。数据集目录结构核心目录包括:Annotations(XML标注文件)、JPEGImages(原始图像)、ImageSets(训练/测试集划分)、SegmentationClass(分割标注)。理解这些目录是处理数据的第一步。VOC2007数据集目录结构VOC数据集采用层次化的目录结构组织数据:Annotations/包含所有图像的XML格式标注文件,每个XML对应一张图像,记录图像尺寸、物体类别、边界框坐标等信息。JPEGImages/存储所有原始图像文件,格式为JPEG,文件名与Annotations中的XML文件一一对应。ImageSets/包含Main、Layout和Segmentation子文件夹,其中Main文件夹存储训练集(train.txt)、验证集(val.txt)和测试集(test.txt)的图像索引。VOC数据集下载与准备官方下载链接与推荐工具VOC2007数据集官方链接:http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOC2012数据集官方链接:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/推荐使用迅雷等下载工具加速,或通过国内镜像站点下载以提高速度。数据集划分原则VOC数据集已预先划分为:训练集(train):用于模型学习的主要数据验证集(val):用于超参数调整和模型选择测试集(test):用于最终性能评估解压与文件合并注意事项下载后获得压缩文件需完整解压,注意保持原有目录结构。如同时使用VOC2007和VOC2012,需按照特定规则合并数据集。标注格式详解:VOCXML与YOLOTXT对比VOCXML标注结构<annotation><folder>VOC2007</folder><filename>000001.jpg</filename><object><name>dog</name><bndbox><xmin>48</xmin><ymin>240</ymin><xmax>195</xmax><ymax>371</ymax></bndbox></object></annotation>VOC使用XML格式,保存绝对坐标值(像素单位),包含丰富的图像信息。YOLO标注格式120.340.560.120.23YOLO使用简洁的TXT格式,每行表示一个对象:类别索引中心点x中心点y宽度高度所有坐标都经过归一化处理(0-1范围内),相对于图像尺寸。为什么需要格式转换?VOC标注转换实战:Python脚本解析XML解析基础使用xml.etree.ElementTree库解析VOC的XML标注文件,提取目标对象的类别和边界框坐标信息。代码示例:importxml.etree.ElementTreeasETtree=ET.parse(xml_file)root=tree.getroot()objects=root.findall('object')坐标转换函数VOC标注使用(xmin,ymin,xmax,ymax)绝对坐标,而YOLO需要归一化的(中心x,中心y,宽,高)。转换公式:x_center=(xmin+xmax)/(2*img_width)y_center=(ymin+ymax)/(2*img_height)width=(xmax-xmin)/img_widthheight=(ymax-ymin)/img_height过滤与类别映射VOC转YOLO标注核心代码importosimportxml.etree.ElementTreeasETfromglobimportglob#VOC类别列表VOC_CLASSES=['aeroplane','bicycle','bird','boat','bottle','bus','car','cat','chair','cow','diningtable','dog','horse','motorbike','person','pottedplant','sheep','sofa','train','tvmonitor']defconvert_voc_annotation(xml_file,output_path,class_names):"""将VOCXML标注转换为YOLO格式的txt文件"""tree=ET.parse(xml_file)root=tree.getroot()#获取图像尺寸size=root.find('size')width=float(size.find('width').text)height=float(size.find('height').text)#准备写入的文件out_file=open(output_path,'w')#处理每个目标对象forobjinroot.findall('object'):difficult=obj.find('difficult').textcls=obj.find('name').text#忽略difficult=1的对象(可选)ifdifficult=='1'andignore_difficult:continue#检查类别是否在列表中ifclsnotinclass_names:continue#获取类别索引cls_id=class_names.index(cls)#获取边界框坐标bbox=obj.find('bndbox')xmin=float(bbox.find('xmin').text)ymin=float(bbox.find('ymin').text)xmax=float(bbox.find('xmax').text)ymax=float(bbox.find('ymax').text)#转换为YOLO格式:归一化的中心点坐标和宽高x_center=(xmin+xmax)/(2*width)y_center=(ymin+ymax)/(2*height)w=(xmax-xmin)/widthh=(ymax-ymin)/height#写入YOLO格式:class_idx_centery_centerwidthheightout_file.write(f"{cls_id}{x_center:.6f}{y_center:.6f}{w:.6f}{h:.6f}\n")out_file.close()生成训练文件列表与标签文件1ImageSets文件解析VOC数据集的ImageSets/Main目录包含多个TXT文件,如train.txt、val.txt等,每个文件包含对应集合的图像ID列表。这些文件决定了哪些图像用于训练、验证和测试。2生成路径文件为YOLOv5训练,需要创建包含完整图像路径的TXT文件。例如:withopen('train.txt','w')asf:forlineinopen('ImageSets/Main/train.txt'):image_id=line.strip()f.write(f"./JPEGImages/{image_id}.jpg\n")文件夹结构建立为YOLO训练创建标准化的目录结构:images/train/-训练图像images/val/-验证图像labels/train/-训练标签labels/val/-验证标签配置文件修改:voc.yaml详解数据集路径配置#YOLOv5中的voc.yamlpath:../datasets/VOC#数据集根目录train:images/train#训练图像相对路径val:images/val#验证图像相对路径test:images/test#测试图像相对路径路径配置需要与实际数据存储位置一致,支持相对路径和绝对路径。类别配置#类别数量与名称nc:20#类别数量names:['aeroplane','bicycle','bird','boat','bottle','bus','car','cat','chair','cow','diningtable','dog','horse','motorbike','person','pottedplant','sheep','sofa','train','tvmonitor']类别数量(nc)和类别名称(names)必须与数据集一致,顺序也要与标签文件中的索引对应。训练与验证参数配置文件还可以包含其他参数,如图像尺寸、批量大小、学习率等,这些参数会影响训练效果和速度。根据硬件条件和数据特点进行调整。注意:确保类别名称顺序与转换标签时使用的顺序完全一致,否则会导致训练错误!YOLOv5模型简介与训练流程YOLOv5架构特点采用CSP(CrossStagePartial)骨干网络,减少计算量的同时保持准确率PANet(PathAggregationNetwork)特征融合结构,增强不同尺度特征的信息流动提供不同大小的模型版本:s/m/l/x,平衡速度与精度需求内置数据增强和自适应锚框计算,提高检测性能训练命令示例pythontrain.py--img640--batch16--epochs50--datavoc.yaml--weightsyolov5s.pt关键参数说明:--img:输入图像尺寸--batch:每批次训练的图像数量--epochs:总训练轮次--data:数据集配置文件路径--weights:预训练权重文件常见问题与解决方案显存不足:减小批次大小或图像尺寸;过拟合:增加数据增强或早停;学习率设置:使用学习率调度器(如cosinescheduler)模型性能提升策略数据增强技巧强化模型泛化能力的关键手段:几何变换:随机旋转(±10°)、水平翻转(概率0.5)、垂直翻转(适用于航拍图像)色彩调整:亮度(±25%)、对比度(±25%)、饱和度变化(±25%)图像处理:随机裁剪、马赛克增强(4图拼接)、混合增强(MixUp)采样平衡策略解决类别不平衡问题的方法:类别权重调整:为稀有类别分配更高权重过采样/欠采样:增加稀有类别样本或减少常见类别样本FocalLoss:降低易分类样本的损失权重超参数调优影响模型性能的关键参数优化:学习率:初始值0.01,使用余弦退火调度批次大小:根据GPU内存调整,通常16-64正负样本比例:控制前景-背景平衡锚框设置:使用K-means聚类优化锚框尺寸根据VOC数据集特点,特别推荐使用马赛克增强和FocalLoss,能有效提升多尺度小目标的检测性能。训练结果评估指标mAP(平均精度均值)mAP是目标检测的核心评估指标,计算过程:对每个类别,计算不同IoU阈值下的平均精度(AP)VOC评测使用IoU=0.5计算mAP,记为mAP@50COCO评测使用IoU从0.5到0.95(步长0.05)的平均值,记为mAP@50:95mAP越高,检测性能越好。优秀的YOLOv5模型在VOC数据集上可达到80%以上的mAP@50。Precision与Recall精确率(Precision):正确检测数量/总检测数量召回率(Recall):正确检测数量/总实际目标数量这两个指标通常存在权衡关系,可通过置信度阈值调整。混淆矩阵与误检分析混淆矩阵包含四个关键元素:TP(真正例):正确检测到的目标FP(假正例):错误检测的目标(误报)FN(假负例):未能检测到的目标(漏检)TN(真负例):正确未检测的背景(目标检测中较少使用)分析混淆矩阵可找出模型的薄弱环节,有针对性地改进。训练曲线分析损失函数曲线解读训练过程中,损失曲线应呈现平稳下降趋势:训练损失(train_loss):反映模型在训练集上的拟合程度验证损失(val_loss):反映模型在验证集上的泛化能力当训练损失持续下降而验证损失上升时,表明模型开始过拟合总损失由多部分组成:边界框回归损失(box_loss)、目标性损失(obj_loss)和类别损失(cls_loss)。mAP曲线特征mAP曲线通常在训练初期快速上升,然后逐渐趋于平稳:理想情况下,mAP曲线应该持续上升或稳定在高点mAP曲线波动过大表明训练不稳定,可能需要调整学习率如果mAP达到峰值后下降,说明模型开始过拟合关键策略:保存最佳mAP模型而非最后一轮模型,实现最优性能。实战案例分享:VOC2007数据集复现YOLOv53.2小时训练时长在RTX3090GPU上完成50轮训练4.2GB显存占用使用YOLOv5s模型,批次大小1682.6%mAP@50在VOC2007测试集上的表现46.5%mAP@50:95COCO评测标准下的表现实验环境与配置硬件环境:GPU:NVIDIARTX3090(24GB)CPU:Inteli9-10900K内存:64GBDDR4存储:1TBNVMeSSD软件环境:操作系统:Ubuntu20.04LTSCUDA:11.6PyTorch:1.11.0YOLOv5版本:v6.1通过实验证明,即使在中等配置的硬件上,也能在合理时间内完成VOC数据集的训练,并取得接近论文报道的性能水平。VOC技术在工业中的应用实例智能安防基于VOC训练的模型可识别监控视频中的人员、车辆和异常行为,实现24/7安全监控:周界防范系统,检测入侵者并自动报警人流密度分析,预防拥挤踩踏事件异常行为识别,如徘徊、奔跑、打架等自动驾驶VOC目标检测技术是自动驾驶感知系统的核心:实时检测行人、车辆、交通标志和信号灯多传感器融合,提高恶劣天气下的检测性能预测其他交通参与者的行为轨迹机器人视觉工业和服务机器人利用VOC训练的视觉系统:工业分拣机器人,识别并抓取各类物体质检系统,自动检测产品缺陷服务机器人,识别人类指令和环境中的物体这些应用展示了VOC技术的实用价值,通过迁移学习,VOC预训练模型可快速适应特定领域的检测任务。进阶话题:神经网络声码器(Vocoder)简介Vocoder与VOC数据集无关尽管名称相似,神经网络声码器(Vocoder)与VOC视觉数据集完全不同:Vocoder是语音合成领域的关键技术作用是将声学特征(如梅尔频谱图)转换为波形音频是文本转语音(TTS)系统的重要组成部分传统声码器与神经声码器对比传统声码器基于信号处理原理,而神经声码器采用深度学习方法:传统:STRAIGHT、WORLD等神经网络:WaveNet、WaveGlow、HiFi-GAN等神经声码器生成的语音更自然,接近人类真实发音。未来趋势神经声码器正朝着实时生成、低资源需求和多风格适应的方向发展,与计算机视觉技术融合,可能催生新的多模态人机交互体验。VOC技术培训总结数据集准备掌握VOC数据集的下载、解压和目录结构,理解训练集、验证集和测试集的划分原则,为后续处理奠定基础。标注转换熟练使用Python脚本将VOCXML格式转换为YOLOTXT格式,理解坐标系统的差异和归一化处理的必要性,处理类别映射关系。模型训练掌握YOLOv5配置文件的修改方法,了解训练命令参数的含义,学会监控训练过程和解读训练曲线,及时调整超参数。性能优化掌握数据增强、采样平衡和超参数调优等提升模型性能的关键技术,学会分析mAP、精确率和召回率等评估指标,找出模型改进方向。通过本次培训,您已掌握从数据准备到模型训练的完整流程,可以独立完成基于VOC数据集的目标检测项目开发。深度学习技术进步迅速,建议持续关注YOLOv6/v7/v8等新版本的发展,及时更新知识体系。互动环节:常见问题答疑标注格式转换失败怎么办?可能原因及解决方案:XML文件格式错误:使用XML验证工具检查文件完整性路径问题:确保使用正确的相对或绝对路径编码问题:以UTF-8格式读写文件,避免中文路径类别名称不匹配:检查类别映射字典是否完整建议:添加详细的错误日志输出,逐步排查问题训练中遇到过拟合如何处理?有效的防过拟合策略:增加数据增强强度,如更激进的裁剪、旋转和色彩变换添加正则化,如权重衰减(weightdecay)设为0.0005使用早停(earlystopping),监控验证集性能减小模型复杂度,尝试YOLOv5s而非更大的版本使用标签平滑(labelsmoothing),设置为0.1如何扩展VOC数据集类别?添加新类别的步骤:创建新类别的标注,遵循VOCXML格式修改类别列表和类别索引映射更新配置文件(voc.yaml)中的类别数量和名称重新生成所有标签文件,确保包含新类别考虑为新类别收集更多样本,保持类别平衡课后资源推荐官方数据集与代码VOC数据集官方网站:http://host.robots.ox.ac.uk/pascal/VOC/YOLOv5官方GitHub仓库:/ultralytics/yolov5MMDetection框架(支持多种检测算法):/open-mmlab/mmdetection技术博客与教程AI算法工程师手册:/UltralyticsYOLOv5官方教程:/中文计算机视觉入门教程:/DWCTOD/cv_papers进阶学习资源学术论文阅读YOLO系列原始论文,了解算法原理和演进历程:YOLOv1-v8,以及FasterR-CNN、RetinaNet等经典检测算法论文在线课程李飞飞《CS231n:计算机视觉》,吴恩达《深度学习》系列课程,实用性强且深入浅出竞赛实践参与Kaggle、天池等平台的目标检测竞赛,将所学知识应用到实际问题中附录一:VOC标注转换完整Python脚本importosimportglobimportxml.etree.ElementTreeasETfromtqdmimporttqdmimportshutil#配置信息VOC_PATH='./VOCdevkit/VOC2007'#VOC数据集路径OUTPUT_PATH='./yolov5_dataset'#输出路径CLASSES=['aeroplane','bicycle','bird','boat','bottle','bus','car','cat','chair','cow','diningtable','dog','horse','motorbike','person','pottedplant','sheep','sofa','train','tvmonitor']#创建输出目录结构os.makedirs(f'{OUTPUT_PATH}/images/train',exist_ok=True)os.makedirs(f'{OUTPUT_PATH}/images/val',exist_ok=True)os.makedirs(f'{OUTPUT_PATH}/labels/train',exist_ok=True)os.makedirs(f'{OUTPUT_PATH}/labels/val',exist_ok=True)defconvert_box(size,box):"""将VOC格式边界框转换为YOLO格式"""dw=1.0/size[0]dh=1.0/size[1]x=(box[0]+box[2])/2.0y=(box[1]+box[3])/2.0w=box[2]-box[0]h=box[3]-box[1]x=x*dww=w*dwy=y*dhh=h*dhreturn(x,y,w,h)defconvert_annotation(image_id,dataset_type):"""将一个图像的VOC标注转换为YOLO格式"""in_file=open(f'{VOC_PATH}/Annotations/{image_id}.xml')out_file=open(f'{OUTPUT_PATH}/labels/{dataset_type}/{image_id}.txt','w')tree=ET.parse(in_file)root=tree.getroot()size=root.find('size')w=int(size.find('width').text)h=int(size.find('height').text)forobjinroot.findall('object'):difficult=int(obj.find('difficult').text)cls=obj.find('name').textifclsnotinCLASSESordifficult==1:#忽略difficult=1的目标或不在类别列表中的目标continuecls_id=CLASSES.index(cls)xmlbox=obj.find('bndbox')b=(float(xmlbox.find('xmin').text),float(xmlbox.find('ymin').text),float(xmlbox.find('xmax').text),float(xmlbox.find('ymax').text))bb=convert_box((w,h),b)out_file.write(f"{cls_id}{bb[0]:.6f}{bb[1]:.6f}{bb[2]:.6f}{bb[3]:.6f}\n")#处理训练集和验证集print("正在处理训练集...")withopen(f'{VOC_PATH}/ImageSets/Main/train.txt','r')asf:train_ids=[line.strip()forlineinf.readlines()]print("正在处理验证集...")withopen(f'{VOC_PATH}/ImageSets/Main/val.txt','r')asf:val_ids=[line.strip()forlineinf.readlines()]#复制图像并转换标注print("正在复制图像并转换标注...")forimage_idintqdm(train_ids):#复制图像shutil.copy(f'{VOC_PATH}/JPEGImages/{image_id}.jpg',f'{OUTPUT_PATH}/images/train/{image_id}.jpg')#转换标注convert_annotation(image_id,'train')forimage_idintqdm(val_ids):#复制图像shutil.copy(f'{VOC_PATH}/JPEGImages/{image_id}.jpg',f'{OUTPUT_PATH}/images/val/{image_id}.jpg')#转换标注convert_annotation(image_id,'val')#创建数据集配置文件print("正在创建数据集配置文件...")withopen(f'{OUTPUT_PATH}/voc.yaml','w')asf:f.write(f"path:{os.path.abspath(OUTPUT_PATH)}\n")f.write("train:images/train\n")f.write("val:images/val\n")f.write(f"nc:{len(CLASSES)}\n")f.write("names:"+str(CLASSES))print("转换完成!数据集已保存至",OUTPUT_PATH)此脚本提供了一个完整的VOC数据集转换流程,包括目录创建、图像复制、标注转换和配置文件生成,可直接用于实际项目。附录二:YOLOv5训练命令示例基础训练命令#使用VOC数据集训练YOLOv5s模型pythontrain.py--img640--batch16--epochs50--datavoc.yaml--weightsyolov5s.pt--workers8这是最基本的训练命令,适用于单GPU环境,使用预训练的YOLOv5s模型在VOC数据集上进行50轮训练。多GPU训练示例#使用4个GPU并行训练python-mtorch.distributed.launch--nproc_per_node4train.py--img640--batch64--epochs100--datavoc.yaml--weightsyolov5m.pt--device0,1,2,3利用数据并行分布式训练,将批次数据分配到多个GPU上,加速训练过程。需要注意总批次大小应该是单GPU批次大小的倍数。断点续训方法#从上次训练中断的地方继续训练pythontrain.py--img640--batch16--epochs100--datavoc.yaml--weightsruns/train/exp5/weights/last.pt--resume当训练因意外中断时,可以使用--resume参数从最后一个保存的检查点继续训练。这对于长时间训练特别有用。高级训练选项#使用自动混合精度训练,冻结骨干网络,启用缓存加载pythontrain.py--img640--batch32--epochs50--datavoc.yaml--weightsyolov5l.pt--cache--freeze10--amp--amp:启用自动混合精度,加速训练且节省显存--freezeN:冻结前N层,适用于微调预训练模型--cache:将图像缓存到内存,减少磁盘I/O,加快训练速度附录三:常用VOC类别列表VOC数据集20个类别及索引0:'aeroplane'(飞机)1:'bicycle'(自行车)2:'bird'(鸟)3:'boat'(船)4:'bottle'(瓶子)5:'bus'(公交车)6:'car'(汽车)7:'cat'(猫)8:'chair'(椅子)9:'cow'(牛)10:'diningtable'(餐桌)11:'dog'(狗)12:'horse'(马)13:'motorbike'(摩托车)14:'person'(人)15:'pottedplant'(盆栽植物)16:'sheep'(羊)17:'sofa'(沙发)18:'train'(火车)19:'tvmonitor'(电视显示器)类别应用场景交通类(6类)飞机、自行车、船、公交车、汽车、摩托车和火车,主要用于交通场景目标检测,适用于智能交通和自动驾驶系统。动物类(4类)鸟、猫、牛、狗和马,用于动物识别应用,如野生动物监测、宠物识别和农业监控系统。家居类(5类)椅子、餐桌、盆栽植物、沙发和电视显示器,适用于室内场景分析、家居布局识别和智能家居应用。VOC类别虽然只有20个,但覆盖了日常生活中的常见物体,为更复杂的数据集如COCO(80类)奠定了基础。视觉冲击:VOC目标检测前后对比图原始图片这是包含多个目标类别的复杂场景原始图像,包括人、汽车和自行车等VOC数据集中的常见对象。模型检测结果YOLOv5模型检测结果,显示了每个识别对象的边界框、类别标签和置信度分数。注意模型如何准确区分不同类别并处理部分遮挡的目标。标注框展示对比原始图像和检测结果可以看出,训练良好的目标检测模型能够:准确定位多种类别的目标,即使在复杂背景和遮挡情况下为每个检测到的目标提供合理的置信度评分有效处理不同尺度的目标,从小型物体到大型车辆在实时或接近实时的速度下完成检测任务VOC训练的模型在实际应用中表现出色,可通过微调适应特定场景需求。VOC数据集典型目标类别示例VOC数据集包含20个常见目标类别,每个类别有数百张带标注的图像。这些图像来自真实世界场景,包含各种视角、光照条件和遮挡情况,使模型能够学习到鲁棒的特征表示。数据集的多样性是其价值的关键,每个类别都有足够的变化样本,如不同形状的飞机、各种品种的猫狗、不同款式的椅子等,帮助模型泛化到未见过的实例。VOC数据集扩展与自定义添加自定义类别扩展VOC数据集类别的步骤:定义新类别名称和索引,添加到类别列表中准备新类别的图像样本,建议每类至少100张图像使用标注工具如LabelImg为图像添加边界框标注将标注保存为VOCXML格式更新类别映射和配置文件标注规范自定义数据集标注注意事项:边界框应完全包围目标对象,不要过大或过小对于部分遮挡的对象,标注可见部分保持标注一致性,例如人的标注是否包括整个身体对难以辨认的小目标,可标记为"difficult=1"每个目标只分配一个类别,避免重复标注转换工具推荐数据集格式转换工具:CVAT:功能全面的在线标注和转换工具Roboflow:支持多种格式转换和增强labelImg:经典的图像标注工具,支持VOC格式voc2coco

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论