自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(211)
  • 资源 (1)
  • 收藏
  • 关注

原创 【LSS: Lift, Splat, Shoot】代码的复现与详细解读

基于ubuntu复现Lift,Splat,Shoot代码,并对代码进行详细的解读和注释

2022-12-15 11:26:42 10130 21

原创 NuSences 数据集解析以及 nuScenes devkit 的使用

nuScenes数据集(发音为/nuːsiːnz/)是由Motional(前身为nuTonomy)团队开发的用于自动驾驶的公共大规模数据集。motion公司正在让无人驾驶汽车成为一个安全、可靠、方便的现实。通过向公众发布我们的一部分数据,motion旨在支持公众对计算机视觉和自动驾驶的研究。为此,我们收集了波士顿和新加坡的1000个驾驶场景,这两个城市以交通密集和极具挑战性的驾驶情况而闻名。时长20秒的场景是手动选择的,展示了一组多样而有趣的驾驶动作、交通状况和意外行为。

2022-12-13 07:15:00 29499 13

原创 【torch.nn.Module】神经网络模块类及其方法

是所有神经网络模块的基类。自定义的模型也应该子类化这个类。该模块还可以包含其他模块,允许将它们嵌套在树结构中。以这种方式分配的子模块将被注册,并且在调用to()时也将转换它们的参数,等等。根据上面的例子,在赋值给子类之前,必须对父类进行__init__()调用。参数training (bool): 布尔值表示该模块是处于训练模式还是评估模式。

2022-12-11 13:25:20 2707

原创 论文精读:《BEVFormer v2: Adapting Modern Image Backbones to Bird’s-Eye-View Recognition via Perspective 》

本文工作:提出了一种具有透视监督(perspective supervision)的新型鸟瞰(BEV)检测器,该检测器收敛速度更快,更适合现代图像骨干。现有的最先进的BEV检测器通常与VovNet等特定深度预训练的主干相连,阻碍了蓬勃发展的图像主干和BEV检测器之间的协同作用。为了解决这一限制,我们优先考虑通过引入透视图监督(perspective view supervision)来简化BEV探测器的优化。

2022-12-10 22:16:12 3086

原创 论文精读:《DETR3D: 3D Object Detection from Multi-view Images via 3D-to-2D Queries》

我们介绍了一个多摄像机三维目标检测(multi-camera 3D object detection)的框架。与现有的直接从单目图像中估计三维边界盒或利用深度预测网络从二维信息中生成用于三维目标检测的输入相比,我们的方法直接在三维空间中处理预测。具体流程:我们的架构从多个摄像机图像中提取2D特征,然后使用稀疏的3D对象查询集索引到这些2D特征中,使用摄像机变换矩阵将3D位置链接到多视角图像。最后,我们的模型对每个对象查询进行包围盒预测,使用集到集的损失来度量真实框和预测之间的差异。

2022-12-09 22:01:21 5208 2

原创 【torch.optim】优化器的使用 / 学习率的调整 / SWA策略

torch.optim是实现各种优化算法的包。大多数常用的方法都已得到支持,而且接口足够通用,因此将来还可以轻松集成更复杂的方法。

2022-12-09 20:19:25 2859

原创 【torch-Random sampling】随机采样

功能将生成随机数的种子设置为非确定性随机数。返回用于种子RNG的64位数字。返回值类型功能设置生成随机数的种子。返回一个torch.Generator的对象参数返回值类型 : 功能返回作为Python 生成随机数的初始种子**。**返回值类型 : 功能返回作为torch.ByteTensor的随机数生成器状态。返回值类型: 功能设置随机数生成器状态。参数功能从伯努利分布中抽取二元随机数(0 或者 1)。输入张量须包含用于抽取上述二元随机值的概率。 因此,输入中的所有值都必须在

2022-12-06 18:06:17 2878

原创 python 迭代器和生成器

迭代器是同时实现方法的对象。生成器Python 中,提供了两种 ,一种是,另一种是。可迭代对象,可以简单理解为可遍历对象,即能够使用 循环遍历的对象。Python中常见的可迭代对象有:对于Python中的任意对象,只要它定义了可以返回一个迭代器的 方法,或者定义了可以支持下标索引的 方法,那么它就是一个可迭代对象。对可迭代对象使用 方法后,会返回一个迭代器。我们只需要使用 即可判断给定的 是否为可迭代对象。严格来讲, 只会将有 方法的对象判断为 。换言之,仅用 方法实现的可迭代对象会被 误判

2022-12-04 20:51:48 308

原创 【torch.utils.data.sampler】采样器的解析和使用

sampler 采样器,是一个迭代器。PyTorch提供了多种采样器,用户也可以自定义采样器。所有sampler都是承 这个抽象类。顺序采样 SequentialSampler功能顺序地对元素进行采样,总是以相同的顺序。参数: 采样的数据集初始化方法仅仅需要一个Dataset类对象作为参数。对于只负责返回数据源包含的数据个数;方法负责返回一个可迭代对象,这个可迭代对象是由range产生的顺序数值序列,也就是说迭代是按照顺序进行的。例子得到下面的输出,说明Sequenti

2022-12-04 19:58:55 4170

原创 【torch.utils.data】 Dataset和Dataloader的解读和使用

Pytorch中的 提供了两个抽象类: 和 。 允许你自定义自己的数据集,用来存储样本及其对应的标签。而 则是在 的基础上将其包装为一个可迭代对象,以便我们更方便地(小批量)访问数据集。一些必备概念::整个数据集的大小; :在训练过程中,我们不可能把所有样本一次性投喂给神经网络,只能分批次投喂。每个小批量的样本个数就是 Batch Size :将一个 Batch 投喂给神经网络称为一次 Iteration; :将所有的样本(即所有 Batch)投喂给神经网络后称为一个 Epoch。

2022-12-04 18:02:43 4505 3

原创 动手学深度学习(2)—— 线性神经网络

而在机器学习领域, 我们通常使用的是高维数据集, 建模时采用线性代数表示法会比较方便。当我们的输入 包含 ddd 个特征时,我们将预测结果 y^\hat{y}y^​ (通常使用 “尖角”符号表示 yyy 的估计值)表示为:y^=w1x1+…+wdxd+b.\hat{y}=w_1 x_1+\ldots+w_d x_d+b .y^​=w1​x1​+…+wd​xd​+b.将所有特征放到向量 x∈Rd\mathbf{x} \in \mathbb{R}^dx∈Rd 中,并将所有权重放到向量w∈Rd\mathbf{

2022-12-04 16:36:11 422

原创 动手学深度学习(1)—— 基础知识

机器学习的组件每个数据集由⼀个个样本(example, sample)组成,⼤多时候,它们遵循独⽴同分布(independently and identically distributed, )。样本有时也叫做数据点(data point)或者数据实例(data instance),通常每个样本由⼀组称为特征(features,或协变量(covariates))的属性组成。机器学习模型会根据这些属性进⾏预测。在上⾯的监督学习问题中,要预测的是⼀个特殊的属性,它被称为标签(label,或⽬标(target)

2022-12-04 16:32:57 1760 1

原创 【torch.nn.Sequential】序列容器的介绍和使用

nn.Sequential是一个有序的容器,该类将按照传入构造器的顺序,依次创建相应的函数,并记录在Sequential类对象的数据结构中,同时以神经网络模块为元素的有序字典也可以作为传入参数。因此,Sequential可以看成是有多个函数运算对象,串联成的神经网络,其返回的是Module类型的神经网络对象。字典以字典的方式实例化基本操作查看结构通过打印 对象来查看它的结构索引我们可以使用索引来查看其子模块长度修改子模块删除子模块添加子模块

2022-12-04 14:40:37 4299

原创 【torch.nn.init】初始化参数方法解读

格式作用从均匀分布U(a,b)U(a,b)U(a,b)中生成值,填充输入的张量或变量。参数例子正态分布格式作用从给定均值和标准差的正态分布N(mean,std)N(mean,std)N(mean,std)中生成值,填充输入的张量或变量。参数常数分布格式作用用的值填充输入的张量或变量参数全1分布格式作用用全0填充张量参数例子全0分布格式作用用全1填充张量参数例子对角分布格式作用用单位矩阵来填充2维输入张量或变量参数dirac 分布格式作用用Dirac δ函数来填

2022-12-04 14:05:08 3635

原创 【torch.nn.Parameter 】参数相关的介绍和使用

是继承自的子类,其主要作用是作为中的可训练参数使用。它与的区别就是会自动被认为是的可训练参数,即加入到这个迭代器中去。具体格式如下:其中 为待传入的 , 默认为 True。事实上, 中提供的模块中的参数均是 类,例如:参数构造可以看作是一个类型转换函数,将一个不可训练的类型 转换成可以训练的类型 ,并将这个 绑定到这个 里面添加的参数会被添加到列表中,会被送入优化器中随训练一起学习更新此时调用 方法会显示参数。读者可自行体会以下两端代码:相当于把传入的数据包装成一个参数,如果要直接访问/使

2022-12-04 11:47:18 7220

原创 复现 MMDetection

cuda10.2官网下载地址在这一步时,一定要按键取消Driver安装,因为我们先前已经安装好了显卡驱动。( 表示不会安装,表示安装)添加如下环境变量:让环境变量生效检查是否安装成功安装CUDNN安装Cudnn安装Anaconda选择相应的版本进行下载安装Anaconda初始化环境变量启动Anaconda退出Anaconda搭建虚拟环境新建虚拟环境安装pytorchPycharm 远程连接代码同步选择→→

2022-12-03 21:01:28 1531

原创 python 文件和目录相关操作

绝对路径: 是从根目录开始描述的路径。相对路径:相对于当前目录一个点,表示的是当前文件夹;两个点表示的是上一层文件夹。在 Python 中操作文件路径,使用 os 模块,os.path 模块是 os 模块内部的一个子模块,首先导入该模块。通过os模块提供的通用变量可以获取与系统有关的信息。常用的变量有::用于获取操作系统的类型。:用于获取当前操作系统上的换行符。:用于获取当前操作系统所使用的路径分隔符。os模块提供的一些操作目录的函数把path设置为当前工作目录目录/文件操作:创建多级目录删

2022-12-03 20:43:03 1308

原创 Pytorch学习笔记 (参考官方教程)

PyTorch有两个处理数据的基本体: and 其中 存储样本及其对应的标签,在数据集周围包装一个可迭代对象。PyTorch提供了特定领域的库,如、和,所有这些库都包含数据集。在本教程中,我们将使用一个数据集。模块包含许多现实世界视觉数据的Dataset对象,如CIFAR, COCO。在本教程中,我们使用FashionMNIST数据集。每个TorchVision 包含两个参数:和,分别用于修改样本和标签。我们将作为参数传递给。它在数据集上封装了一个可迭代对象,并支持自动批处理、采样、变换和多进程数据加载

2022-11-26 19:36:13 1013 1

原创 python学习笔记(9)—— 虚拟环境和包

Python应用程序经常使用标准库之外的包和模块。有时应用程序需要特定版本的库,因为应用程序可能要求某个特定的bug已经被修复,或者应用程序可能使用过时版本的库接口编写。这意味着一个Python安装不可能满足每个应用程序的需求。如果应用程序A需要某个模块的1.0版本,而应用程序B需要2.0版本,那么这两个需求是冲突的,安装1.0或2.0版本都会导致一个应用程序无法运行。这个问题的解决方案是创建一个虚拟环境,这是一个自包含的目录树,其中包含针对特定版本Python的Python安装,以及一些额外的包。

2022-11-25 23:49:43 837

原创 python学习笔记(8)—— 标准库

模块提供了一种工具,用于扫描模块并验证嵌入在程序文档字符串中的测试。模块提供了以简单和复杂的方式操作日期和时间的类。虽然支持日期和时间算术,但实现的重点是高效的成员提取以进行输出格式化和操作。该模块还支持识别时区的对象。模块提供了一种更复杂的机制来处理命令行参数。开发高质量软件的一种方法是在开发过程中为每个功能编写测试,并在开发过程中经常运行这些测试。这将使os.open()不会遮蔽内置的open()函数,后者的操作方式非常不同。常见的实用程序脚本通常需要处理命令行参数。这些参数以列表的形式存储在。

2022-11-25 23:46:05 340

原创 python学习笔记(7)—— 类

类定义和函数定义(def语句)一样,必须在它们起作用之前执行。(您可以将类定义放在if语句的分支中,或者放在函数中。)在实践中,类定义中的语句通常是函数定义,但也允许使用其他语句,有时还很有用——我们稍后再讨论这个问题。类内部的函数定义通常有一种特殊形式的参数列表,这是由方法的调用约定规定的—同样,这将在后面解释。当输入一个类定义时,将创建一个新的名称空间,并将其用作局部作用域——因此,对局部变量的所有赋值都将进入这个新的名称空间。特别是,函数定义在这里绑定新函数的名称。

2022-11-25 23:41:59 420 1

原创 python 学习笔记(6)—— 错误和异常

程序可以通过创建一个新的异常类来命名自己的异常(有关Python类的更多信息,请参阅“类”)。异常通常应该直接或间接地从Exception类派生。可以定义异常类,让它们做任何其他类可以做的事情,但通常保持简单,通常只提供一些属性,允许异常处理程序提取有关错误的信息。大多数异常都以“Error”结尾,类似于标准异常的命名。许多标准模块定义了自己的异常,以报告可能在其定义的函数中发生的错误。try语句有另一个可选子句,用于定义在所有情况下都必须执行的清理操作。

2022-11-25 23:38:05 645

原创 python学习笔记(5)—— 输入和输出

如果文件的大小是机器内存的两倍,那就是您的问题。通常,文件是以文本模式打开的,这意味着你可以从文件读写字符串,这些字符串以特定的编码方式编码。如果您有一个非常长的格式字符串,不想拆分,那么如果您可以按名称而不是按位置引用要格式化的变量就更好了。返回一个整数,给出文件对象在文件中的当前位置,在二进制模式下表示为从文件开始的字节数,在文本模式下表示为不透明数字。通常情况下,您希望对输出的格式有更多的控制,而不是简单地打印空格分隔的值。)留在字符串的末尾,如果文件不以换行符结束,则只在文件的最后一行被省略。

2022-11-25 23:35:06 443

原创 python学习笔记(4)—— 模型

就像使用模块可以让不同模块的作者不必担心彼此的全局变量名一样,使用虚线格式的模块名可以让NumPy或Pillow等多模块包的作者不必担心彼此的模块名。因此,模块的作者可以在模块中使用全局变量,而不必担心与用户的全局变量发生意外冲突。模块中的定义可以导入到其他模块或主模块(在顶层执行的脚本中可以访问的变量集合,并以计算器模式执行)。此外,编译后的模块是平台独立的,因此可以在具有不同体系结构的系统之间共享相同的库。导入的模块名,如果放在模块的顶层(在任何函数或类之外),会添加到模块的全局命名空间中。

2022-11-25 23:30:49 928

原创 python学习笔记(3)—— 数据结构

元组是不可变的,通常包含异构的元素序列,可以通过解包(请参阅本节后面的内容)或索引(甚至在namedtuples的情况下通过属性)访问。列表是可变的,它们的元素通常是同构的,可以通过遍历列表来访问。它们的输入可以带括号,也可以不带括号,尽管通常括号是必要的(如果元组是更大表达式的一部分)。常见的应用程序是创建新的列表,其中每个元素都是应用于另一个序列或可迭代对象的每个成员的一些操作的结果,或者创建满足特定条件的这些元素的子序列。例如,混合数值类型是根据它们的数值进行比较的,例如0等于0.0,等等。

2022-11-25 23:27:40 619

原创 python学习笔记(2)—— 控制流

关键字def引入一个函数定义。它后面必须跟着函数名和圆括号括起来的形式形参列表。构成函数主体的语句从下一行开始,并且必须缩进。函数的执行会引入一个新的符号表,用于存储函数的局部变量。更准确地说,函数中所有的变量赋值都将值存储在局部符号表中。而变量引用首先会在局部符号表中查找,然后是外部函数的局部符号表,然后是全局符号表,最后是内置名称表。

2022-11-25 23:24:33 536

原创 python 学习笔记(1)—— 基础介绍

解释器就像一个简单的计算器: 你可以在它上面输入一个表达式,它就会写值。表达式语法很简单:操作符+ 、-、*和/的工作原理和大多数其他语言(例如Pascal或C)一样;括号()可用于分组。整数(如2,4,20)的类型为int,小数部分的数字(如5.0,1.6)的类型为float。除法(/)总是返回浮点数。要进行下取整除法(floor division)并得到整数结果,可以使用//操作符;要计算余数,可以使用%可以使用**运算符来计算幂等号(=)用于给变量赋值。完全支持浮点;

2022-11-25 23:21:32 263

原创 论文精读——《BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation》

研究背景:多传感器融合对于精确可靠的自动驾驶系统是必不可少的。最近的方法是基于点级融合:用摄像机特征增强LIDAR点云。然而,相机到激光雷达的投影会丢弃相机特征的语义密度(semantic density),阻碍了这种方法的有效性,尤其是对于面向语义的任务(如三维场景分割)。本文利用BEVFusion这一高效通用的多任务多传感器融合框架,打破了这一根深蒂固的惯例。它在共享鸟瞰(BEV)表示空间中统一了多模态特征,很好地保留了几何和语义信息。为了实现这一点,我们。

2022-11-24 16:27:21 6358 2

原创 论文精读——《BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotempor》

三维视觉感知任务,包括基于多摄像机图像的三维检测和地图分割,是自动驾驶系统必不可少的任务。在这项工作中,我们提出了一个新的框架Bevformer,它通过时空转换器(spatiotemporal transformer)学习统一的BEV表示来支持多个自动驾驶感知任务。简而言之,Bevformer通过预先定义的网格状BEV查询与空间和时间空间进行交互,从而利用空间和时间信息。

2022-11-24 16:17:09 1790

原创 论文精读 ——《BEVDepth: Acquisition of Reliable Depth for Multi-view 3D Object Detection》

本文工作:提出BEVDepth在这项研究中,我们提出了一种新的三维物体检测器,它具有可靠的深度估计,称为BEVDepth,用于基于摄像机的鸟瞰(camera-based BEV)三维物体检测。现有方法: 深度信息是隐式学习的通过对现有方法的深入分析,我们发现深度估计是在没有摄像机信息的情况下隐式学习的,使得它在创建伪点云时实际上采用的是假深度。BEVDepth介绍:提出矫正深度子网络和快速视图变换操作。BEVDepth利用编码的内在和外在参数获得显式的深度监督。(1) 引入。

2022-11-24 16:01:48 3544 4

原创 YOLOv5实操——检测是否戴口罩

数据集和代码的准备yolov5源码下载yolov5官方下载地址数据集的下载直接下载别人制作好的数据集Mask Wearing Dataset 下载然后将其放入与yolov5-master同级的目录下。打开MaskDataSet ,可以看到其目录结构如下:images文件夹下的图片lables文件夹下对应的同名txt文件。data.yaml : train 和val 分别制定了训练集和测试集文件夹相对于yolov5-master的路径。nc指定了标签的个数一共两个。name

2022-11-19 01:09:33 6914 4

原创 数学建模笔记

我们选择正态分布和要检验的随机变量,并对其做出QQ图,可想而知,如果要检验的随机变量是正态分布,那么QQ图就是一条直线。数模比赛中,常常需要根据已知的函数点进行数据、模型的处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法,“模拟产生”一些新的但又比较靠谱的值来满足需求,这就是插值的作用。由上面的表达式可以知道“确定系数”的正常取值范围为[0 1],越接近1,表明方程的变量对y的解释能力越强,这个模型对数据拟合的也较好。此外,分子还包括constant型。

2022-11-19 00:32:53 2528 2

原创 论文精读《BEVDet: High-Performance Multi-Camera 3D Object Detection in Bird-Eye-View》

背景介绍:二维的目标检测算法启发我们去寻找一个高效可用的三维目标检测算法自动驾驶通过感知周围环境来做出决定,这是视觉领域中最复杂的场景之一。范式创新在解决二维目标检测中的成功激励着我们去寻找一个简练的、可行的、可扩展的范例,从根本上推动该领域的性能边界。主要工作:重用2D目标检测的框架,主要改进点在于 1. 构造一个专属的数据扩充策略 2. 升级NMS方法。为了这个目的,本文提出了BEVDet范式。

2022-11-17 17:15:18 9055 4

原创 论文精读 《CaDNN: Categorical Depth Distribution Network for Monocular 3D Object Detection》

研究动机:单目3D目标检测难以预测物体的深度单目 3D 目标检测是自动驾驶领域的一个关键问题,因为它与典型的多传感器系统相比配置比较简单。单目 3D 检测的主要挑战在于准确预测物体深度,由于缺乏直接的距离测量,因此必须从物体和场景线索推断出物体深度。许多方法试图直接估计深度以辅助 3D 检测,但性能有限,深度估计不准确。主要工作: 提出CaDDN我们提出的 Categorical Depth Distribution Network(CaDDN)

2022-11-17 17:02:08 2511

原创 论文精读《LSS: Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting》

自动驾驶汽车感知的目标是从多个传感器提取语义表示,并将这些表示融合到一个单一的“鸟瞰”坐标框架中,以供运动规划使用。我们提出了一种新的端到端架构,可以直接从任意数量的摄像机中提取给定图像数据的场景鸟瞰图表示。我们方法背后的核心思想是将每个图像单独“Lift”成一个特征截锥。对于每个相机,然后将所有的截锥“Splat”到栅格化的鸟瞰网格中。

2022-11-17 16:49:20 6794 1

原创 论文精读《OFT: Orthographic Feature Transform for Monocular 3D Object Detection》

研究现状从单目图像中进行3D目标检测已被证明是一项极具挑战性的任务,其系统性能甚至还达不到基于雷达对应系统性能的10%。对这种性能差距的一种解释是,现有的系统完全处于由于基于透视图像的表示,物体的外观和规模随着深度和距离的变化而急剧变化,因此很难推断。本文工作:OFT在这项工作中,我们认为推理三维世界的能力是三维物体检测任务的一个基本元素。为此,我们引入正交法特征变换(orthographic feature transform),它使我们能够通过将基于图像的特征映射到正交3D空间,实现了对图像域的转义。

2022-11-17 16:40:48 1599

原创 ROS机器人应用(6)—— 激光雷达建图和导航

gmapping建图节点:algorithm_gmapping.launch。小车初始化节点:turn_on_wheeltec_robot.launch。可以使用键盘控制、APP遥控、PS2遥控、航模遥控进行控制小车运动。注:地图文件可以使用PhotoShop进行编辑。雷达节点:rplidar.launch。

2022-10-29 23:02:34 11354

原创 在OpenPCDet上训练KITTI数据集并进行测试和验证

在进行训练之前。

2022-10-24 00:54:11 4619 17

原创 Ubuntu18.04复现OpenPCDet

命令用于删除已安装的软件包(不保留配置文件),删除软件包,同时删除相应依赖软件包;如果使用MobaXterm,则直接将文件拖动即可完成上传。安装setup.py 里面information字段声明的包含的依赖。从下面的百度网盘上下载OpenPCDet, 并上传到服务器上。从百度网盘上下载cudnn10.2。–来自百度网盘超级会员V4的分享。其他版本的cuda下载链接参考。–来自百度网盘超级会员V4的分享。–来自百度网盘超级会员V4的分享。【方法1】:直接从官网上下载。【方法2】:从百度网盘上下载。

2022-10-24 00:52:48 1567

原创 OpenPCDet解析

OpenPCDet: Open-MMLab 面向LiDAR点云表征的3D目标检测代码库OpenPCDet的github链接OpenPCDet 是一套基于PyTorch实现的点云3D目标检测代码库。设计思想点云数据集(KITTI、NuScene、Lyft、Waymo、PandaSet等)在数据格式与3D坐标系上往往定义各不相同,各式各样的点云感知算法(point-based、 voxel-based、one-stage/two-stage等)也形态各异因此基于数据-模型分离。

2022-10-20 12:50:41 12725 11

数据库课程设计——论坛系统

基于django开发的论坛系统,包括的功能有注册,登录,发帖,内容管理,消息提示,加好友,好友私信,个人资料即编辑,修改密码等

2022-01-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除