找回密码
 会员注册
查看: 31|回复: 0

深度学习环境完整安装(Python+Pycharm+Pytorchcpu版)

[复制链接]

3

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2024-9-12 18:25:55 | 显示全部楼层 |阅读模式
在这里,我们将引导您逐步完成深度学习环境的完整安装,助您踏上从Python到PyTorch的探索之旅。通过本博客,您将轻松掌握如何设置Python环境、使用Pycharm进行开发以及安装Pytorch,成为一名具备完整深度学习环境的实践者。让我们一起开始吧!文章目录(如果有会的可以略过)一、Python安装(一)Python下载(二)Python安装(三)Python验证二、PyCharm安装(一)PyCharm下载(二)PyCharm安装(三)PyCharm配置三、PyTorch安装(一)PyTorch安装(二)PyTorch验证四、深度学习案例:YOLOv5训练数据集、图像检测与识别(一)YOLOv5下载及解压 (二)YOLOv5训练数据集1.准备工作(新建文件夹)        (1)新建VOCData        (2)新建Annotation、images2.使用labelImg标注图片        (1)安装labelImg        (2)使用labelImg        (3)相关问题     ①Nomodulenamed'sip'报错        ②Nomodulenamed'libs.resources'报错3.划分数据集及配置文件修改(1)划分训练集、验证集及测试集(2)xml格式转txt格式(3)配置文件4.模型训练(1)开始训练(2)训练过程(3)训练时间(4)相关问题(5)检测效果五、参考链接一、Python安装        ython是一种流行的高级编程语言,以其易学易用、可读性强和强大的标准库而受到广泛欢迎。Python支持多种编程范式,包括面向对象、过程式和函数式编程,可以用于开发各种类型的应用程序。Python的简洁语法和动态类型系统使其成为快速原型开发和数据分析的理想选择。此外,Python还具有丰富的第三方库支持,可以轻松地与其他编程语言集成。无论您是初学者还是经验丰富的开发人员,Python都是一种功能强大且易于使用的编程语言。(一)Python下载     ython官网,显示下面这个界面。        因为大家都是都是初级程序员,学习的环境都还是比较新手的windows系统,将鼠标光标移动到 Downloads ,点击Windows ,意思就是选择Python安装在你的电脑上的系统类型,之后显示下面这个界面。    看到这个界面有很多很多的版本,给大家简单介绍一下,这里的LatestPython3Release-Python3.11.5,表明的意思是最新的Python3版本3.11.5,如果大家说噢我就想要最新的,那就无脑冲这个版本!        点击链接之后,等待网页响应,滑到网页最下面,可以看到以下界面。    这里有很多个不同配置的Python安装包,博主这边主要给大家介绍自动安装的安装包。        点击 Windowsinstaller(64-bit) ,就可以下载Python33.11.5版本的安装包。    因为这是在Python官网加载的链接并下载,下载速度会比较慢,大家也可以点击我这里的链接去下载。有网盘链接和迅雷种子文件。    初次之外,博主个人还建议使用Python33.8.10版本,这个版本相对其他版本来说比较稳定。 ython33.11.5安装包    ython33.8.10安装包(二)Python安装    大家下载好后,双击安装包 ,就显示以下界面。    勾选 AddPython3.8toPATH ,并点击下面的 Customizeinstallation ,显示以下界面。    继续点击 Next 。            这里要更改一下安装目录,因为之后要安装深度学习的环境会占比较大的空间,安装在C盘是不切实际的做法,这里我选择安装在D盘目录下的Python文件夹下,可以按照我下面的图进行操作。    修改好后的界面是这样子的。    然后点击 Install ,就可以等待程序自动安装完毕。    当显示这个界面,就说明安装成功,点击 Close 就可以关闭界面了。(三)Python验证    ython安装完毕后,大家可以在Windows命令终端输入命令去验证自己的Python环境是否搭建成功。    首先,键盘按住 Win+R键(大家可能不知道Win键是哪个,在键盘上是在左侧下方Alt旁边,呈现四个方框的那一个),打开 运行界面 。    在输入框内,输入 cmd ,点击 确定/回车 ,即可打开Windows终端界面。    输入命令 python--version ,并回车,如果显示以下界面即安装完毕。二、PyCharm安装        yCharm是一种流行的集成开发环境(IDE),专门为Python开发人员设计。它提供了强大的代码编辑器、调试器、自动代码完成和语法高亮等功能,帮助开发人员更高效地编写、测试和调试Python代码。PyCharm支持多种Python虚拟环境,可以轻松进行项目管理和跨平台开发。其丰富的插件库还可以扩展支持其他编程语言和工具,使得PyCharm成为Python开发人员的首选工具之一。(一)PyCharm下载    我们先找到PyCharm官方网站:JetBrains,我这里是根据网页提示显示了中文翻译,原本是英文界面的,大家跟着我的步骤去一步一步来。    点击头部的 DeveloperTools ,展开一个很大的界面是这样的,点击 yCharm 进入介绍界面。    进入后点击界面正中间的 DOWNLOAD 。    进入后,有PyCharmProfessional(Pycharm专业版)和PyCharmCommunityEdition(Pycharm社区版)选择,博主这边建议初学者以社区版为起步,首先是因为社区版是免费的,不需要付费激活,其次专业版功能较为齐全,有很多的功能初学者暂时用不上。博主这里就以社区版为例。点击这里的 Download 即可开始下载    博主这里也附上个人的百度网盘下载链接供大家下载。PyCharm社区版安装包(二)PyCharm安装 下载好后鼠标双击打开安装包。    点击 Next 。    这里还是像刚刚那样点击 Browse 去修改安装路径。博主这边仍然是建议大家安装在D盘目录下的JetBrains文件夹下,如下图所示,选择好后点击 确定 。    到这里后继续点击 Next ,勾选下图中所有的选项,继续点击 Next 。    到如下图界面后即可点击 Install 进行安装。        当出现以下界面即安装成功,点击 Finish 即可关闭安装界面。    在桌面此电脑中,找到刚刚安装Pycharm的文件夹,博主这里的目录是 D:\JetBrains\PyCharmCommunityEdition2023.2.1 ,进入目录下的bin文件夹,右箭选择下面图上箭头指示的可执行文件pycharm64.exe,选择 发送到->桌面快捷方式 ,这样就可以把PyCharm放到桌面,方便使用。    打开Pycharm后,显示以下界面,勾选Donotimportsettings,如果点击OK后有弹窗防火墙的一些相关提示,可以直接 点击允许访问 。    这样子咱们就正式进入Pycharm编辑器的使用了。(三)PyCharm配置    首先先点击界面上的 lugins ,在 Type/toseeoptions 方框内输入“ chinese ”,在搜索后的结果中选择一个以“ 汉 ”字为图标的插件,然后再点击 Install ,等待一会之后我们的PyCharm界面就已经全部汉化了。(如果有不想汉化的网友们可以跳过这一步)    安装好汉化包并重新打开PyCharm后,点击新建项目。    之后,就显示了很多参数能够自定义我们的项目。首先博主这里修改了一下位置,改成了D盘目录下的Study文件夹(大家可以先去创建一下Study文件夹),然后就到配置Python解释器。一定要勾选先前配置的解释器!!!一定要勾选先前配置的解释器!!!一定要勾选先前配置的解释器!!!        重要的事情强调三遍,因为我们之前有安装过Python的环境,如果选择“ 使用此工具新建环境 ”,那么表示的意思就是你要用PyCharm编辑器自己去帮你安装另一个Python,这样子虽然说少去了先前下载安装Python的环节,但是坏处就是难以很好的去管理我们的Python环境,所以这也是博主大费周章跟大家讲前面Python的安装教程的原因。    博主这里是Pycharm软件有自动识别到我的Python环境目录,如果大家点解释器后面的下拉框没有像博主这样子的选项,可以点击 右侧的添加解释器 ,选择 添加本地解释器 ,然后就会出现这样子的界面。        勾选现有,再点击 右侧的...框框 ,然后找到我们的Python安装目录,选择目录下的python.exe并点击确认。    然后再点击创建就配置好python环境了。三、PyTorch安装        yTorch是一个广泛使用的开源机器学习框架,由Facebook人工智能研究院(FAIR)开发并维护。它支持动态计算图,使得模型的构建和调试更加直观,同时也提供了高效的GPU加速功能,使得深度学习应用的训练和推理速度更快。PyTorch具有广泛的社区支持和丰富的文档资源,方便开发人员学习和使用。它支持多种操作系统和编程语言,如Python、C++等,并提供了丰富的预训练模型库和工具,使得开发人员可以快速构建和优化深度学习模型。PyTorch已经成为机器学习领域的流行框架之一,被广泛应用于计算机视觉、自然语言处理、语音识别等领域。(一)PyTorch安装    首先我们先进入PyTorch官网:PyTorch         往下滑找到下图这个界面,并且按博主这样子一样的选择。        博主这里也直接给出命令。pip3installtorchtorchvisiontorchaudio     然后在我们的Pycharm界面下方点击 Terminal(如果是中文的就像博主这样叫终端)    然后输入刚刚的安装代码,回车即可进行Pytorch安装。下载安装会比较久,请耐心等待一下噢~~~有出现Successfullyinstalled...的字眼,就说明已经安装成功啦。补充:这里出现了黄色的提示,意思就是我们的pip版本是21.1.1版本,最新版本23.2.1允许安装,博主这里也给出命令共大家去升级自己的pip(pip类似是一个python内置的一个命令,用于安装、卸载等)。python.exe-mpipinstall--upgradepip(二)PyTorch验证    博主这里以个人的专业版Pycharm作为演示(大家的社区版也是一样的)。    首先右箭我们的Study目录->新建->点击Python文件,输入Study作为python文件的名字,然后回车就创建好一个名为Study的python文件。    在我们的编辑器下输入以下代码。importtorchprint(torch.__version__)    然后点击右上角绿色向右的箭头,即可运行当前Python文件中的代码。     如果运行结束后显示如下图就说明大家的PyTorch已经安装成功啦。四、深度学习案例:YOLOv5训练数据集、图像检测与识别        YOLOv5是一种目标检测模型,用于在视频或图像中识别和定位物体。它是YOLO算法的最新版本,在YOLOv4的基础上进行了改进。        YOLOv5由美国加州大学伯克利分校的研究者AlexeyBochkovskiy和Chien-YaoWang开发。YOLOv5使用了一个新的骨干网络,即CSPNet,该网络可以更好地提取特征。另外,YOLOv5也采用了更高效的训练技术,如自适应训练、数据增强和多尺度训练,从而使得它在实际应用中具有更好的性能表现。        YOLOv5可以检测多种物体,并且可以在不同的硬件上运行,包括CPU、GPU和TPU等。(一)YOLOv5下载及解压         YOLOV5源码网址:https://github.com/ultralytics/yolov5    在此,因为github这个网站对于国内用户去访问会有时候连接不上,博主给大家一个访问github网站的加速器,这样子大家访问起来就比较顺畅。FastGitHub压缩包        大家下载好这个加速器并解压、运行后,就可以直接挂着在后台了。(建议大家不访问的时候还是关闭着好一些哦)。    来到YOLOv5源码网址,点击右边的 Code,再点击下面的 DownloadZIP 就可以开始下载YOLOv5源码的压缩包了。    这里博主也放上压缩包和种子文件供大家下载。YOLOv5压缩包        下载好后,解压到我们刚刚的Study目录下,如下图所示。(二)YOLOv5训练数据集1.准备工作(新建文件夹)        (1)新建VOCData        在yolov5文件目录下,新建一个空白文件夹VOCData(博主习惯这样子命名,大家可以自定义命名)。        (2)新建Annotation、images        在VOCData文件夹下再新建两个空白文件夹 Annotations 和 images(建议尽量不要修改文件名,否则会有一些路径上的错误)。    这里给大家说明一下这两个文件夹的用途:Annotations:用于存放图片标注后产生的内容(以XML格式存放)images:用于存放要标注的图片(虽然YOLO开始训练的时候会检测并自动更正格式,但是仍然建议以jpg格式存放)2.使用labelImg标注图片        (1)安装labelImg    labelImg下载:https://github.com/HumanSignal/labelImg    附上本人百度网盘链接:labelImg    这里还是照上文YOLOv5下载及解压一样的方法去操作,解压到yolov5的文件目录下。​       (2)添加/修改标签(方便标注)       这块内容博主今天(5月4日)才发现没有添加,这里给大家说明一下。         在labelImg的data目录下有一个predefined_classes,里面存储着标注数据的时候用的标签,大家一定要修改这个。博主这里之前就在第一行添加了“ripe”,其他的没动。        (3)使用labelImg    首先,双击鼠标左键 进入到labelImg文件夹下。​    然后,鼠标左键点击 顶部的输入框,按退格键清除掉原有内容,并 输入cmd,然后回车 ,弹出以下两个图片就算成功在该文件夹路径下打开Windows命令终端。​​    之后,输入以下命令并回车 就可以打开我们的标注程序labelImg。pythonlabelImg.py    来到labelImg的使用界面后,左侧的打开目录对应存放标注图片的文件夹(images),改变存放目录对应标注图片产生的xml数据文件夹(Annotations)。    大家点击左侧的创建区块即可进行标注。    博主这里给大家整理一下labelImg使用的快捷键以方便大家进行大数据量的图片标注。Ctrl+u从一个目录加载所有图像d下一张图片Ctrl+r更改默认的注释目标目录a上一张图片Ctrl+s保存del删除选中的矩形框Ctrl+d复制当前标签和矩形框Ctrl++放大Ctrl+Shift+d删除当前图像Ctrl--缩小Space将当前映像标记为已验证↑→↓←键盘箭头移动选定的矩形框w创建一个矩形框(3)相关问题     ①Nomodulenamed'sip'报错​    这是因为我们的Python环境下没有PyQt5包里面的sip包,这时候只需在 yCharm终端 或者 Windows命令终端 输入以下代码即可解决问题。pipinstallPyQt5        ②Nomodulenamed'libs.resources'报错​    这是因为我们下载下来的labelImg文件夹下的包库里面没有resources.py,大家可以在labelImg文件夹下去运行以下命令。Pyrcc5-oresources.pyresources.qrc      运行后会在当前目录生成一个 resources.py 文件,将这个文件剪切/复制到当前目录下的 libs 文件夹下即可解决问题。3.划分数据集及配置文件修改(1)划分训练集、验证集及测试集        在VOCData目录下创建python程序 split_train_val.py并运行,代码如下(不用修改代码)。importosimportrandomimportargparseparser=argparse.ArgumentParser()#xml文件的地址,根据自己的数据进行修改xml一般存放在Annotations下parser.add_argument('--xml_path',default='Annotations',type=str,help='inputxmllabelpath')#数据集的划分,地址选择自己数据下的ImageSets/Mainparser.add_argument('--txt_path',default='ImageSets/Main',type=str,help='outputtxtlabelpath')opt=parser.parse_args()trainval_percent=1.0#训练集和验证集所占比例。这里没有划分测试集train_percent=0.9#训练集所占比例,可自己进行调整xmlfilepath=opt.xml_pathtxtsavepath=opt.txt_pathtotal_xml=os.listdir(xmlfilepath)ifnotos.path.exists(txtsavepath)s.makedirs(txtsavepath)num=len(total_xml)list_index=range(num)tv=int(num*trainval_percent)tr=int(tv*train_percent)trainval=random.sample(list_index,tv)train=random.sample(trainval,tr)file_trainval=open(txtsavepath+'/trainval.txt','w')file_test=open(txtsavepath+'/test.txt','w')file_train=open(txtsavepath+'/train.txt','w')file_val=open(txtsavepath+'/val.txt','w')foriinlist_index:name=total_xml[i][:-4]+'\n'ifiintrainval:file_trainval.write(name)ifiintrain:file_train.write(name)else:file_val.write(name)else:file_test.write(name)file_trainval.close()file_train.close()file_val.close()file_test.close()        运行完毕后,会生成 ImagesSets/Main 文件夹,且在其下生成测试集、训练集、验证集来存放图片的名字(都是纯名字,没有文件格式后缀.jpg)。    由于没有分配测试集,所以测试集为空。若要分配,更改12,13这两行代码,更改所在比例即可。(2)xml格式转txt格式        在VOCData目录下创建python程序 xml_to_yolo.py并运行,代码如下(需要修改代码)。    这里需要修改的 第6行classes=["light","post"] ,要把中括号内的标签名就改成你自己需要的,比如博主个人有标有 classes=["ripe"] ;除此之外还要修改的地方就是像 第24、25、53、54、55、57、58、63行 中出现的类似'D:/Yolov5/yolov5/VOCData/Annotations/%s.xml',这里大家就需要把它改成自己的路径,比如博主个人的路径是 D:/Study/yolov5/VOCData/Annotations ,大家就直接复制粘贴就好(注意:最好只修改 D:/Study/yolov5/VOCData/ 这一段,因为这些路径多多少少是有一些不同,博主也是出于方便才特意说明)。importxml.etree.ElementTreeasETimportosfromosimportgetcwdsets=['train','val','test']classes=["light","post"]#改成自己的标签类别abs_path=os.getcwd()print(abs_path)defconvert(size,box):dw=1./(size[0])dh=1./(size[1])x=(box[0]+box[1])/2.0-1y=(box[2]+box[3])/2.0-1w=box[1]-box[0]h=box[3]-box[2]x=x*dww=w*dwy=y*dhh=h*dhreturnx,y,w,hdefconvert_annotation(image_id):in_file=open('D:/Yolov5/yolov5/VOCData/Annotations/%s.xml'%(image_id),encoding='UTF-8')out_file=open('D:/Yolov5/yolov5/VOCData/labels/%s.txt'%(image_id),'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.iter('object'):difficult=obj.find('difficult').text#difficult=obj.find('Difficult').textcls=obj.find('name').textifclsnotinclassesorint(difficult)==1:continuecls_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))b1,b2,b3,b4=b#标注越界修正ifb2>w:b2=wifb4>h:b4=hb=(b1,b2,b3,b4)bb=convert((w,h),b)out_file.write(str(cls_id)+""+"".join([str(a)forainbb])+'\n')wd=getcwd()forimage_setinsets:ifnotos.path.exists('D:/Yolov5/yolov5/VOCData/labels/')s.makedirs('D:/Yolov5/yolov5/VOCData/labels/')image_ids=open('D:/Yolov5/yolov5/VOCData/ImageSets/Main/%s.txt'%(image_set)).read().strip().split()ifnotos.path.exists('D:/Yolov5/yolov5/VOCData/dataSet_path/')s.makedirs('D:/Yolov5/yolov5/VOCData/dataSet_path/')list_file=open('dataSet_path/%s.txt'%(image_set),'w')#这行路径不需更改,这是相对路径forimage_idinimage_ids:list_file.write('D:/Yolov5/yolov5/VOCData/images/%s.jpg\n'%(image_id))convert_annotation(image_id)list_file.close()        运行后会生成如下labels文件夹和dataSet_path文件夹。        其中labels中为不同图像的标注文件,每个图像对应一个txt文件,文件每一行为一个目标的信息,包括class,x_center,y_center,width,height格式,这种即为yolo_txt格式。        dataSet_path 文件夹包含三个数据集的txt文件,train.txt等txt文件为划分后图像所在位置的路径,如train.txt就含有所有训练集图像的路径(博主这里的路径和大家的不一样,需要注意一下)。(3)配置文件        在yolov5目录下的data文件夹下 新建一个myvoc.yaml文件(可以自定义命名)并用记事本打开,输入以下内容。    给大家解释一下,这里的内容是 训练集以及验证集(train.txt和val.txt)的路径(可以改为相对路径)以及目标的类别数目(nc)和类别名称(name) 。注意:这里的类别名称顺序和 xml_to_yolo.py 中的类别名称顺序得一致,如果训练的结果是反的,这里修改重新训练;还有,冒号后面都需要加一个空格。train:/Yolov5/yolov5/VOCData/dataSet_path/train.txtval:/Yolov5/yolov5/VOCData/dataSet_path/val.txt#numberofclassesnc:2#classnamesnames:["light","post"]        接下来修改模型配置文件,选择一个模型,在yolov5目录下的model文件夹下是模型的配置文件,有n、s、m、l、x版本,逐渐增大(随着架构的增大,训练时间也是逐渐增大),博主这里放上一些官方数据。Modelsize(pixels)mAPbox50-95mAPmask50-95SpeedCPUb1(ms)SpeedV100b1(ms)SpeedV100b32(ms)params(M)FLOPs@640(B)YOLOv5n-seg64027.623.4456.30.61.94.5YOLOv5s-seg64037.631.7986.40.97.216.5YOLOv5m-seg64045.037.12248.21.721.249.0YOLOv5l-seg64049.039.943010.12.746.5109.1YOLOv5x-seg64050.741.476612.14.886.7205.7     博主这里就选用 yolov5s.yaml 并使用记事本打开,更改标注类别数目nc。4.模型训练(1)开始训练    使用PyCharm打开yolov5目录下的train.py程序,我们可以多看看这些参数使用。常用参数解释如下:weights:权重文件路径cfg:存储模型结构的配置文件data:存储训练、测试数据的文件epochs:指的就是训练过程中整个数据集将被迭代(训练)了多少次,显卡不行你就调小点。batch-size:训练完多少张图片才进行权重更新,显卡不行就调小点。img-size:输入图片宽高,显卡不行就调小点。device:cudadevice,i.e.0or0,1,2,3orcpu。选择使用GPU还是CPUworkers:线程数。默认是8。    在我们的yolov5目录下打开Windows命令终端。训练命令如下:pythontrain.py--weightsyolov5s-seg.pt--cfgmodels/yolov5s.yaml --datadata/myvoc.yaml--epoch100--batch-size1--img640 --devicecpu--weights:这个选择yolov5s-seg.pt文件作为预训练的权重文件--cfg:选择models目录下的yolov5s.yaml模型。--data:选择data目录下的myvoc.yaml数据源,也就是在上文配置文件那里创建的文件。--epoch:训练100次。--batch-size:训练1张图片后进行权重更新。--img:图片训练尺寸为640。--device:使用CPU训练。如果出现问题,查看后面相关问题说明!注意,这里给大家附上下载yolov5的预训练的权重文件链接。很重要!很重要!很重要!之前忘记把这个放出来了Releases·ultralytics/yolov5·GitHub打开界面之后,往下稍稍滑动一下,看到以下界面,例如使用yolov5n-seg去训练,点击即可下载最后将下载好的文件放在yolov5文件目录下即可使用(2)训练过程    博主这边暂时没有时间去找数据集以及标注和训练,就对大家也说一声抱歉没法给出训练的图片。    训练好的模型会被保存在yolov5目录下的runs/train/exp/weights/下(注意:如果重复执行命令训练,会产生多个exp,注意区别就好)。如果出现问题,查看后面相关问题说明!(3)训练时间    博主这里就跟大家说一下我的个人的实际经验吧,之前训练过单标签,--epoch200,--batch-size1,--devicecpu训练了大概8个小时,大概一张图片训练一次2-3s,我也用过GPU去训练,是桌面级RTX3050Ti,训练一张图片大概0.5s,快了好几倍,所以建议大家还是选择GPU训练。(4)相关问题出现缺少模块(类似Nomodulenamed'cv2')可以在PyCharm终端或者Windows命令终端去pipinstallopencv-python,这里的opencv-python是举一个例子,大家要看自己环境缺什么就安装什么。页面太小,无法完成操作虚拟内存不足,调小--batch-size,降低--epoch,可以多尝试尝试,直到成功不报错为止。(5)检测效果我们使用刚刚训练出的最好的模型best.pt来测试,在yolov5目录下的runs/train/exp/weights pythondetect.py--weightsruns/train/exp/weights/best.pt--sourcevideo/VID_20211106_160222.mp4          博主在这里给大家解释一下:runs/train/exp/weights/best.pt:意思是选择刚刚我们训练好的模型best.pt来检测。--sourcevideo/VID_20211106_160222.mp4:意思是要检测的视频是yolov5目录下的VID_20211106_160222.mp4视频,如果大家要检测的是图片,救修改--source后的路径就好。    这里附上之前做过一个火龙果识别的视频。五、资源整合    因为本文篇幅有点长,博主在这里将所有用到的资源全部放到这里。Python33.11.5安装包        Python33.8.10安装包        PyCharm社区版安装包        FastGitHub压缩包        YOLOv5压缩包        labelImg      .pt权重文件如果大家觉得有用的话,就拜托点点赞咯!大家有什么问题都可以在反馈评论区哦!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-26 01:44 , Processed in 0.331161 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表