transfomer深度学习实战水果识别

打印 上一主题 下一主题

主题 1003|帖子 1003|积分 3009


  本文采用RT-DETR作为核心算法框架,结合PyQt5构建用户界面,利用Python3举行开发。RT-DETR以其高效的实时检测本领,在多个目标检测使命中展现出卓越性能。本研究针对水果数据集举行训练和优化,该数据集包含丰富的水果图像样本,为模型的正确性和泛化本领提供了有力保障。通过深度学习技能,模型可以或许自动提取水果的特征并举行分类识别。PyQt5界面设计简洁直观,便于用户操纵和实时查看检测结果。本研究不但进步了水果识别的自动化水平,还为智能交通系统的构建提供了有力支持,具有重要的理论应用代价。

     RT-DETR实战水果识别
  

  

研究背景


1.媒介

1.1 RT-DETR系列:目标检测领域的璀璨明星

  在实时目标检测的算法星空中,RT-DETR 系列无疑是最为耀眼的星座之一。在性能、速度与正确度上实现了超过式的提升。RT-DETR,作为这一系列的最新杰作,依附其更为深邃复杂的网络架构以及精妙绝伦的训练本领,将检测的正确性与速度推向了新的高峰。尤其在应对动态视频流中的水果检测使命时,它宛如一位技艺博识的舞者,展现出了令人惊叹的卓越性能。这些明显的改进,如同强盛的引力,使得 RT-DETR系列在水果检测领域的应用版图不断拓展,愈发完美方单合了实时性与正确性的双重严苛要求。
多元算法共筑水果标志检测的坚固堡垒
  除了光芒四射的RT-DETR系列,其他深度学习算法,诸如 Faster R - CNN、SSD 以及基于 Transformer 的 DETR 等,也纷纷在水果佩带检测的舞台上崭露锋芒。它们各具独特的优势,恰似一群才华横溢的艺术家,在差异的领域绽放光彩。Faster R - CNN 以其在检测精度上的非凡体现,如同一位精雕细琢的工匠,刻画着每一个细节;而 SSD 则在速度方面具备明显优势,恰似一阵疾风,敏捷而敏捷。最新的研究恰似一场永不绝歇的探索之旅,不断挖掘这些算法的改进版本,力图在速度与正确性之间找到那最为完美的平衡点,如同在钢丝上寻找平衡的舞者,追求极致的和谐。
1.2 Transformer与注意力机制:为目标检测注入新活力

  Transformer 在视觉使命中的应用,如同一颗璀璨的新星划破夜空,吸引了广泛的关注,其中视觉 Transformer(ViT)更是备受瞩目。ViT 通过巧妙引入自注意力机制,仿佛为模型赋予了一双敏锐的眼睛,可以或许精准捕捉图像中的长间隔依赖关系,这在中国水果形态复杂多样且背景纷繁复杂的情况下,显得尤为关键。相较于传统的卷积神经网络(CNN),ViT 在处理图像全局信息时展现出了更为卓越的本领,如同一位宏观把控的大师,为中国水果检测开发了一片极新的天地,提供了全新的解决思路。
注意力机制,作为 Transformer 的核心瑰宝,已如同星星之火,在各种深度学习模型中形成燎原之势,在中国水果检测领域更是大放异彩。它赋予了模型对图像特定部分的 “专注” 本领,如同为模型戴上了一副神奇的眼镜,使其可以或许在复杂的背景或多变的中国水果形态中,依然清晰地定位并正确识别目标,即便在干扰信息如潮水般涌来的情况中,也能稳如泰山,保持较高的检测正确率。
1.3 水果检测技能:迎接挑战,砥砺前行

当前,中国水果检测技能正置身于布满挑战的浪潮之中,亟待进步检测的实时性、正确性以及在多变情况下的适应性,如同在波涛汹涌的大海中航行的船只,必要不断调整航向,迎接风浪的挑战。为了超过这些难关,研究人员们宛如勇敢的探险家,不断探索新的算法和技能。比方,通过深度学习模型的轻量化设计,如同为船只减轻负重,进步算法的运行服从,使其在复杂的情况中更加灵活敏捷;利用创新的数据加强技能和自适应学习方法,仿佛为船只加固船身,提升模型的泛化本领和鲁棒性,使其可以或许在各种未知的海域中妥当前行。
1.4 RT-DETR算法在水果检测系统中的精彩演绎

  本博客致力于基于 RT-DETR 算法构建一个水果检测系统,并全方位展示其魅力。我们将呈现系统精致的界面结果,如同揭开一幅漂亮画卷,让您领略其独特风采;深入阐述其算法原理,恰似探秘一座秘密城堡,为您揭示其中的奥秘;毫无保留地提供代码实现,仿佛为您递上一把开启知识宝库的钥匙;详细分享该系统的实现过程,如同陪伴您走过一段精彩旅程,让您切身段验其中的艰苦与高兴。希望本博客的倾慕分享能如同一盏明灯,为读者照亮前行的门路,给予您深刻的启示,进而推动更多相关研究的发达发展。本文的核心内容重要涵盖以下几个方面:

  • RT-DETR 算法的卓越应用与性能对比
      本文不但详细介绍了基于 RT-DETR 算法的中国水果检测系统的构建历程,如同讲述一个精彩的创业故事,而且还深入细致地比较了 YOLOv7、YOLOv6、YOLOv5 等早期版本的性能差异,仿佛展开一场猛烈的武林高手对决。这一全面深入的比较研究,恰似一本权威的指南,为中国水果检测技能的选型提供了坚固有力的参考依据。特别是 RT-DETR 算法在服从和精准度方面所展现出的明显优势,如同一座明亮的灯塔,为 水果检测指明了一条更为高效、更为正确的技能路径。
  • PyQt5 打造的友爱用户界面
      通过 Python 的 PyQt5 库经心打造的水果检测系统,不但具备高效卓越的检测本领,如同一位内功深厚的武林高手,更提供了直观便捷、令人赏心悦目标用户操纵界面,仿佛为用户搭建了一座温馨的故里。这种贴心的设计,使得水果检测变得更加亲切友爱,如同一位热情好客的主人,有助于广泛推广 RT-DETR 算法的应用,同时也为水果检测技能的普及和实用化注入了强盛的动力,如同春风化雨,滋润着这片技能的田野。
  • RT-DETR 模型的深度研究与性能剖析
      
    RT-DETR(Real-Time Detection Transformer)是一种目标检测模型,具有高效、正确的特点,以下是对它的详细介绍:
    核心设计理念

    • 高效的肴杂编码器:设计了一个高效的肴杂编码器(Hybrid Encoder),它通过解耦标准内特征交互(AIFI)和跨标准特征融合(CCFM)来高效处理多标准特征。这种设计可以或许在保持较高检测精度的同时,降低模型的计算复杂度,进步模型的运行速度。
    • IOU感知的查询选择:提出了IOU感知的查询选择机制(IOU-Aware Query Selection),用于优化解码器查询的初始化。该机制考虑了预测框与真实框之间的IOU信息,使得模型可以或许选择更优质的查询,从而进步检测的正确性,尤其是对于那些分类分数和IOU不一致的情况,该机制可以或许提供更高质量的解码器特征。
    • 灵活的推理速度调整:支持利用差异的解码器层来灵活调整推理速度,而不必要重新训练。这使得模型可以根据差异的硬件装备和应用场景,在保证一定检测精度的条件下,选择合适的推理速度,方便了模型的实际应用。
      模型结构
    • Backbone:采用了经典的ResNet和百度自研的HGNet-V2两种骨干网络,而且骨干网络是可缩放的,有差异的版本以适应差异的需求。与其他DETR类检测器利用末了4个阶段输出差异,RT-DETR为了提速只利用末了3个阶段的输出。
    • Neck:即上述的肴杂编码器,相当于DETR中的编码器,雷同于经典检测模型常用的FPN(Feature Pyramid Network)结构。通过对编码器的改进,淘汰了计算量的冗余,进步了特征提取的服从。
    • Transformer:名为RT-DETR Transformer,是基于Dino Transformer中的解码器改动而来,改动相对不大。
    • Head和Loss:与Dino Head基本一样,整个模型的颈部(Neck)、Transformer和检测头(Head)构成了一个完整的Transformer结构。
      性能体现
    • 在速度方面,RT-DETR体现出色,比方RT-DETR-L在COCO val2017数据集上可以或许到达114FPS的速度,而RT-DETR-X则能到达74FPS的速度。
    • 在精度方面,RT-DETR也具有较高的检测精度,如RT-DETR-L在COCO val2017上实现了53.0%的AP(Average Precision),RT-DETR-X实现了54.8%的AP,在速度和精度的综合体现上优于相同规模的YOLO检测器。

总的来说,RT-DETR是一种创新的目标检测模型,在实时目标检测使命中具有很大的优势,为目标检测领域提供了一种新的思路和方法。
2.水果数据集介绍

  水果数据集包含15种常见水果类别,在数据预处理阶段,采取了几项关键步骤以确保数据集的质量。首先,全部图像都经过了自动方向校正。接着,全部图像都被统一调整至640x640像素,通过拉伸的方式来适配这一分辨率。


3.界面结果演示

3.1 图像测试


3.2 视频测试


3.3 摄像头测试


3.4 资源获取


4. RT-DETR 原理

4.1.RT-DETR整体网络结构


4.2. backbone模块

backbone之一是对ResNet的魔改,命名为presnet,其重要修改包含两个方向:


  • 第一,把开始阶段的7x7卷积改为三组3x3卷积,通过调整步长使得输出shape与原来的7x7保持一致,这样可以更好地提取特征。
  • 第二,把resnetblock中1x1,步长为2的池化模块更换为步长为2的全局池化,然后1x1调整通道数,这样做的目标是原来的下采样方式会丢失信息,修改后更多地保留信息。

4.3. encode模块



  • encode对应结构图中efficient hybrid encoder


  • AIFI编码器TransformerEncoderLayer

  • CCFM可以以为就是个PAFPN。

  • Fusion模块

4.4. decode模块



  • decode部分比encode复杂很多,整合多种detr相关技能

  • 剖析get_decoder_input() : IOU-aware+decode输入,解决类别置信度与位置置信度体现不一样的题目.

  • decoder模块模块来自Deformable DETR.
    – memory_mask: 哪写memory中的query是pading出来的.
    – score_head: ModuleList, 对每个docoder层输出举行类别预测
    – bbox_head: ModuleList, 对每个docoder层输出举行坐标预测

  • 剖析layer层重要模块Multi-scale Deformable-Attention

5 模型训练

模型训练重要分为如下几步:
5.1 Conda情况构建

  新人安装Anaconda情况可以参考博主写的文章Anaconda3与PyCharm安装配置保姆教程
5.2 底子情况构建

  新人安装PyTorch GPU版本可以参考博主写的文章基于conda的PyTorch深度学习框架GPU安装教程
5.3 安装RT-DETR情况

  1. conda create -n RT-DETR python=3.8
  2. conda activate RT-DETR
复制代码
5.4 构建水果检测模型

  水果检测系统,分别为
  1. names:  {0: '黄瓜', 1:'苹果', 2:'猕猴桃',
  2.                  3:'香蕉', 4:'橙子', 5:'椰子', 6:'桃子', 7:'樱桃',
  3.                  8:'梨', 9:'石榴', 10:'菠萝', 11:'西瓜', 12:'甜瓜', 13:'葡萄', 14:'草莓'}
复制代码
  水果数据集训练集一共15,887左右,验证集4,641张,标注格式采用yolo格式构造
  1.         images
  2.                 train
  3.                         image1.jpg
  4.                         image2.jpg
  5.                         ...
  6.                 val
  7.                         image11.jpg
  8.                         image22.jpg
  9.                         ...
  10.         labels
  11.                 train
  12.                         image1.txt
  13.                         image2.txt
  14.                         ...
  15.                 val
  16.                         image11.txt
  17.                         image22.txt
  18.                         ...
复制代码
  我们开启训练之旅的第一步是导入一系列不可或缺的模块,其中涵盖了 os 模块,它如同一把全能钥匙,为我们处理各种文件路径相关的操纵提供了便利;torch 模块恰似一台强盛的引擎,助力我们高效地执行各类数值计算使命;yaml 模块则如同一位精准的翻译官,可以或许资助我们轻松剖析配置文件中的各种信息;另有专门的 RTDETR类,它是我们构建模型的关键基石,为实例化模型奠定了底子。
  紧接着,我们动手确定训练过程所依托的计算装备。在这个环节中,我们秉持优先选择的战略,将眼光聚焦于 GPU(cuda:0),由于它具备强盛的并行计算本领,可以或许极大地加快训练过程。然而,若 GPU(cuda:0)不可用,我们也做好了充分的应对准备,即退而求其次,选择利用 CPU 来继承我们的训练使命。尽管 CPU 的计算速度相对较慢,但它依然可以或许确保训练工作的顺遂举行,为我们的研究提供一连的支持。
  1. import os
  2. import torch
  3. import yaml
  4. from models import RTDETR# 导入RTDETR模型
  5. device = "cuda:0" if torch.cuda.is_available() else "cpu"
复制代码
  接下来,我们对一些基本的训练参数举行了设定,其中包罗工作进程数以及批次大小。随后,明白了数据集的名称与路径,而且借助 abs_path 函数获取到了配置文件的绝对路径。这样做可以或许保证在差异的运行情况下路径具有一致性,同时也提升了代码的可移植性。
  1. workers = 1
  2. batch = 8
  3. data_name = "fruit"
  4. data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type='current')  # 数据集的yaml的绝对路径
  5. unix_style_path = data_path.replace(os.sep, '/')
  6. # 获取目录路径
  7. directory_path = os.path.dirname(unix_style_path)')
复制代码
  在加载数据配置文件之前,必须先读取并剖析 YAML 格式的配置文件。这一环节极为重要,原因在于该配置文件中涵盖了训练过程所需的关键信息,比方类别标签以及数据集路径等等。我们对配置文件中的“path”键值举行修改,以此确保模型可以或许正确无误地找到训练和验证数据。
  1. # 读取YAML文件,保持原有顺序
  2. with open(data_path, 'r') as file:
  3.     data = yaml.load(file, Loader=yaml.FullLoader)
  4. # 修改path项
  5. if 'path' in data:
  6.     data['path'] = directory_path
  7.     # 将修改后的数据写回YAML文件
  8.     with open(data_path, 'w') as file:
  9.         yaml.safe_dump(data, file, sort_keys=False)
复制代码
  接着,我们加载了预先训练好的 RT-DETR 模型,进而开启了训练进程。RTDETR类的 train 方法采取了众多参数,其中有数据路径、装备、工作进程数、输入图像的尺寸、训练周期以及批次大小。在此处,name参数为训练使命赋予了标识,便于后续举行追踪与分析。
  1. model = RTDETR(abs_path('./weights/pre.pt'), task='detect')  # 加载预训练的RT-DETR模型
  2. results = model.train(  # 开始训练模型
  3.     data=data_path,  # 指定训练数据的配置文件路径
  4.     workers=0,  
  5.     imgsz=640,  # 指定输入图像的大小为640x640
  6.     epochs=100,  # 指定训练100个epoch
  7.     batch=batch,  # 指定每个批次的大小为8
  8.     name='train_rtdetr_' + data_name  # 指定训练任务的名称
  9. )
复制代码
  训练30个epoch输出如下

  在性能指标这一方面,metrics/precision、metrics/recall、metrics/mAP50 以及 metrics/mAP50 - 95 的图表展现出了模型性能的稳步上升。正确率(Precision)与召回率(Recall)随着训练周期的增加而不断增长,这就意味着模型在识别正样本方面变得更为正确,同时也可以或许接纳更多的正样本。mAP(mean Average Precision)属于目标检测中极为重要的评估指标之一,metrics/mAP50 和 metrics/mAP50 - 95 的提升表明模型针对差异 IoU 阈值的检测性能均在进步。mAP50 是指在 IoU 为 0.5 时的平均精度,而 mAP50 - 95 则表如今 IoU 从 0.5 到 0.95 差异阈值下的平均精度,它可以或许更为全面地反映出模型在各种重叠度下的体现。观察到这些指标的稳步提升,便可以说明模型在整个训练过程中的体现是在一连优化的。
  在机器学习领域当中,F1 分数是一个极为关键的性能指标,它对模型的正确率和召回率举行了综合考虑,为我们提供了有关模型分类性能的全面视角。这个指标尤其适用于正负样本分布不平衡的情况,可以或许助力我们理解模型在检测难以区分的类别时的具体体现。



6 系统实现

6.1架构设计

   MainWindow 类的核心目标是打造一个用户友爱的交互式中国水果检测系统。为了告竣这一目标,采用了将界面、媒体处理与模型举行集成的设计理念。通过对象组合的手段,把差异的处理器和模型整合在一起,使得每个功能模块都可以独立运作。与此同时,还运用信号和槽机制来实现模块之间的交互以及数据的传递。
   我们的系统设计理念以三层架构作为核心,分别是处理层、界面层以及控制层。在系统设计过程中,我们将重点置于确保各个组件可以或许协同运作的同时,保持充分的模块独立性,以便于将来举行维护和升级。

   处理层(Processing Layer):通过运用模块化的处理层,我们对 RT-DETRDetector 类所实现的深度学习模型予以封装。如此一来,图像处理与目标检测的复杂性对于其他系统组件而言是不可见的。这种封装不但提升了系统的可靠性,还使得将来更换或升级模型变得更为容易。
   界面层(UI Layer):在界面层方面,我们借助 PyQt5 库构建出一套完整的用户界面,提供了直观的操纵按钮、状态标签以及实时的图像表现。该界面不但可以或许对用户的操纵做出相应,还能实时反馈模型的检测结果,进而进步用户的操纵便利性与系统的交互性。界面的设计目标在于降低用户的学习曲线,即便是没有技能背景的用户也可以或许轻松把握。
   控制层(Control Layer):控制层是连接用户界面与后端处理模块的桥梁。在这一层中,MainWindow 类肩负着相应用户交互、控制视频流处理以及展示模型预测结果的重任。通过信号和槽机制,我们可以或许将用户的操纵转化为系统的相应,比方启动和停止视频流、调整检测设置等。这样的设计不但进步了系统反应的及时性,还加强了用户的控制感。

6.2 系统流程


  当用户启动我们的应用步伐时,系统会首先对 MainWindow 类举行实例化。该类不但负责初始化用户界面,设定窗口大小以及展示地区,还会准备好后续处理所需的各类参数。用户界面作为与系统交互的重要桥梁,为用户提供了选择视频输入源的机会。输入源的灵活性可谓此系统的一大亮点,用户可以或许选择实时视频流、预录视频文件或者单张图片作为检测的媒介。
  一旦输入源被用户选定,系统就会开始调用内置的媒体处理器来举行数据的读取与处理。这个过程涵盖了摄像头的实时捕获设置、视频文件的解码读取以及图像数据的加载至内存等环节。这些环节均是自动举行的,无需用户举行手动配置,充分彰显了智能化的设计理念。
  接下来,系统将进入一连的处理循环,一连对实时获取的帧数据举行分析。在预处理阶段,系统会通过一系列的图像处理技能,比方缩放、色彩转换等,让每帧图像符合 RT-DETR 模型的输入标准。这一步骤对于提升模型的识别服从与正确度起着至关重要的作用。
  紧接着,经过预处理的图像会被送入经过训练的 RT-DETR 模型举行实时检测。模型可以或许快速地在图像中定位中国水果,并对它们举行分类,其结果将用于后续的界面更新。我们的系统设计答应在用户界面上实时表现检测框,标注目标类别,并在界面上实时展示检测的统计数据。这种即时的反馈为用户提供了清晰的视觉指引,有助于他们相识当前情况的安全状态。
6.3 代码实现

  在今世计算机视觉领域中,把深度学习模型应用于实时图像处理使命已然成为一项关键技能。在本博客里,我们会详细阐述怎样运用 RT-DETR 算法,并结合 PyQt5 来创建一个实时目标检测系统。这个系统可以或许在视频流中识别并标注特定对象,好比 水果检测。
(1)引入必要的库:
  首先,系统的构建从导入必要的 Python 模块开始。sys 模块是 Python 内置的模块,它提供了诸多与 Python 表明器精密相关的功能。比方,sys.argv 可用于获取命令行参数,这在启动应用步伐时非常重要。time 模块答应我们获取当前时间,这对于性能评估以及监控推理时间起着至关重要的作用。OpenCV 库(cv2)是图像处理的核心,它提供了一系列强盛的功能来捕捉和处理图像数据。
  1. import cv2
  2. import numpy as np
  3. from PyQt5.QtCore import QTimer, Qt, pyqtSignal, QThread
  4. from PyQt5.QtGui import QImage, QPixmap, QPalette
  5. from PyQt5.QtWidgets import QMainWindow, QFileDialog, QDesktopWidget
  6. from ui_mainwindow import Ui_MainWindow
  7. from utils import image_read_from_chinese_path
  8. from models import RTDETR
复制代码
(2)设置主窗口:
  构建用户界面(UI)是实现系统的关键一步。我们借助 PyQt5 库构建了图形用户界面。QMainWindow 作为我们窗口的基类,为展示处理后的图像提供了一个画布。
  1. class MyMainWindow(QMainWindow):
  2.     def __init__(self, parent=None):
  3.         # 调用父类构造函数,创建窗体
  4.         super().__init__(parent)
  5.         # 创建UI对象
  6.         self.ui = Ui_MainWindow()
  7.         # 构造UI界面
  8.         self.ui.setupUi(self)
  9.         self.set_centre()
  10.         self.image_file_path = None
复制代码
(3)初始化模型
  1. self.model = RTDETR('./weights/best.pt')     
复制代码
(4)界面信号槽绑定
  1. self.ui.comboBox_source.currentIndexChanged.connect(self.comboBox_source_slot)
  2. self.ui.toolButton_fileOpen.clicked.connect(self.toolButton_fileOpen_slot)
  3. self.ui.pushButton_infer.clicked.connect(self.pushButton_infer_slot)
  4. self.ui.pushButton_infer_stop.clicked.connect(self.pushButton_infer_stop_slot)
  5. self.ui.doubleSpinBox_conf.valueChanged.connect(self.doubleSpinBox_conf_slot)
  6. self.ui.horizontalSlider_conf.valueChanged.connect(self.horizontalSlider_conf_slot)
  7. self.ui.doubleSpinBox_iou.valueChanged.connect(self.doubleSpinBox_iou_slot)
  8. self.ui.horizontalSlider_iou.valueChanged.connect(self.horizontalSlider_iou_slot)
复制代码
(5)图像表现
  1. @staticmethod
  2. def show_image(img_src, label):
  3.     try:
  4.         # img_src = cv2.resize(img_src, None, fx=0.5, fy=0.5)
  5.         ih, iw, _ = img_src.shape
  6.         w = label.geometry().width()
  7.         h = label.geometry().height()
  8.         # 保持纵横比
  9.         # 找出长边
  10.         if iw > ih:
  11.             scal = w / iw
  12.             nw = w
  13.             nh = int(scal * ih)
  14.             img_src_ = cv2.resize(img_src, (nw, nh))
  15.         else:
  16.             scal = h / ih
  17.             nw = int(scal * iw)
  18.             nh = h
  19.             img_src_ = cv2.resize(img_src, (nw, nh))
  20.         frame = cv2.cvtColor(img_src_, cv2.COLOR_BGR2RGB)
  21.         img = QImage(frame.data, frame.shape[1], frame.shape[0], frame.shape[2] * frame.shape[1],
  22.                      QImage.Format_RGB888)
  23.         label.setPixmap(QPixmap.fromImage(img))
  24.     except Exception as e:
  25.         print(repr(e))
复制代码
安装与资源说明

离线安装配置文件说明

总结与预测

  在本博客当中,我们对一个基于 RT-DETR 模型的实时水果检测系统举行了详细的介绍。该系统采用模块化的设计方式,充分运用了合理的架构设计,从而具备良好的可维护性与可扩展性。它的用户界面十分友爱,可以或许实时展示水果检测和识别的结果。
  此系统支持摄像头、视频、图像以及批量文件等多种输入源,可以或许满足用户在差异场景下的需求。后续可以添加更多的预训练模型,以增加检测和识别的种类;对用户界面举行优化,加强个性化设置;而且积极谛听用户反馈,期望不断改进系统,从而更好地满足用户的需求。
结束语

   由于博主本领有限,博文中提及的方法纵然经过试验,也难免会有疏漏之处。希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈如今大家面前。同时如果有更好的实现方法也请您不吝赐教。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万有斥力

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表