自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 人工智能之视频分割模型sam2源码解读

它是先把视频分割成图像,然后第一帧先指定要分割的那些东西,然后它就是每帧去处理,最后输出分割后的图像。ffmpeg工具可把视频分割成图像,也可图像做成视频。也许vs版本低一点也行吧,至此视频已经切成图片了。目前只提供了测试的,没训练的代码这一块。

2025-02-20 17:11:33 716

原创 人工智能扩散模型之diffusion与openai-dalle2源码解读

上图中它是相当于把256的向量,拆分成2个来,就变成(1,2,128)了;同时它将会把原来预测出来的初始化的图像512的向量也拆分成4个,就变成了(1,4,128)了,最后拼接后传入到transformer中去算关系。把方差与均值返回后我们就知道从X(t)-------->X(t-1)的分布了,也就是正态分布重采样的过程,经过重采样后会得到X(t-1)的图,公式为a*n+u,其中a是标准差,u是均值,n是噪声。上图拼接是指(1,2,128)与(1,4,128)拼接在一起,会变成(1,6,128)。

2025-02-20 16:17:18 768 1

原创 人工智能时间序列预测之informer源码解读

数据准备好了,现在就把encoder输入数据(32批次的96个序列长度下的12个特征,32批次的96个序列长度下的4个时间特征)与decoder输入数据(32批次的72个序列长度下的12个特征,32批次的72个序列长度下的4个时间特征)传入到transformer网络中去。细分为如下流程:数据----->处理------>模型(model)------>训练(train)------>保存为pth------->预测(test)。在这里的构造方法中会初始化出它的网络结构出来的,就按上图的结构。

2025-02-19 17:22:15 1304

原创 人工智能对抗生成网络之基于CycleGan图像合成源码解读

以前判别器一般是经过卷积后传入sigmoid激活函数,直接得到0----1之间的数值。但这里判别器要多做一些事情了,这里判别器一般是经过卷积后不会连sigmoid激活函数或全连接层,而是经过卷积后得到特征图(例N*N*1的矩阵),卷积后(例3*3)的感受野到原图像的某个区域(例3*3)的预测结果与标签(也是N*N)之间计算损失<即对每个Patch(即基于特征图某个点通过感受野见到原始图像中的某个区域预测结果)都要与输入进行判断(如果都是1就说明都是为真,很完美),不是整张图判别>。

2025-02-18 19:40:01 858

原创 人工智能3d点云之Pointnet++项目实战源码解读(点云分类与分割)

返回结果回去,至此query_ball_point方法结束,它每一行表示簇(例512),一簇有16个点,batchsize=8,所以它的shape就是8*512*16,这个矩阵中的值都是ID值来的,不是实际的值。上图中就是把与确定点最近的点的坐标更新到更新表(distance)中了,那未更新到的点还是保持比较大的。上面返回的cls是类别,相当于标签(Y)。上图中max是指选出某个维度中的最大值,本例中指定的是2,所以它就是说对在簇中的所有点(例16个)中取最大的一个出来就行了,类似做了下采样。

2025-02-17 22:18:28 1171

原创 人工智能之目标追踪DeepSort源码解读(yolov5目标检测,代价矩阵,余弦相似度,马氏距离,匹配与预测更新)

上图中mean[3]就是指h的值,因为对人进行跟踪时,随着运动,距离越远h值变得越小,越近h值就会变得越大,其它的x,y值是固定的,a这个长宽比也是固定的,所以说h变化比较大,那么就用基于h来做噪声矩阵。因为级联匹配是对确定状态(连续3帧都匹配上,即比较有把握的匹配了)的匹配。IOU匹配都是每一帧都会去匹配的。追踪的核心思想是当前帧track是否与检测值bbox匹配上,其中核心是代价矩阵的求解。总结:目标检测得到bbox,第一帧得到track(iou匹配),连续3帧确定的就进行级联匹配(包括iou匹配)。

2025-02-16 18:15:41 1601

原创 人工智能之姿态估计OpenPose算法源码分析(vgg19,backbone,高斯热度图,单位向量叉乘,向量累加和后求平均,感受野,多个stage纠错)

每个躯干到时候都要预测它的单位向量(即x与y二个方向),因为一个关键点(构成的特征图)没方向,那二个关键点(二张特征图)连接成的向量就有x与y方向了。在标签中标注出关键点后,我们还需要设计PAF来表示关键点之间的连接向量(这是GT),如果关键点是相交到一起时,连接这关键点时方向将如何进行?至此(5)-----(8)就把躯干标签就做好了,(3)-----(4)是做关键点的高斯标签。它本身是19个躯干的,但每种躯干都要构建2个方向的向量(x与y方向),所以就是19*2=38个躯干。

2025-02-15 18:45:43 696

原创 人工智能行为识别之slowfast源码解读

A:video名字(视频名称),B:从那一秒开始,C:x1,D:y1,E:x2,F:y2,(x1,y1,x2,y2表示一个人的框),G:表示行为标签(例站,走,说话,看,跑等对应的标签值),H:表示人的ID,指具体那个人。上图中的detectron2也是一个开源项目,它主要做检测与分割的。上图中设置好这三个值()后,就按这样计算的,它的序列是32,所以有 ((32-7+2*3)/4)+1,这值约等以8,所以到时输出shape中的序列值就由32变成8了,这样就从时间维度进入改变,使32帧变成8帧;

2025-02-14 16:46:34 909

原创 人工智能之知识图谱实战系列

治疗(诊断辅助):假设诊断出是急性支气管炎,那么从这实体出发可知它吃阿莫西林等药,而这药的副作用又关联出来,然后急性支气管炎并发症就可由概率角度来说,例5%可能转肺炎,呼吸衰竭可能性是0.5%等等。例如用借款app从这个人手机中获得它的个人信息,从这个人的基本信息出发判断,然后结合这个人的行为(例手机上安装很多借款软件或过期不还钱),又然后与它关系密切的人的情况分析,等等相关实体来综合分析,最后判断是否可借钱给他。例一张图像中的人,可对人的头,肩膀,手,脚分别做特征编码,最后把这些实体联系起来构成图模型。

2025-02-13 16:18:44 543

原创 人工智能之推荐系统实战系列(协同过滤,矩阵分解,FM与DeepFM算法)

当然现在是用矩阵分解来做,原理是 m*n的矩阵=m*k的矩阵一乘以k*n的矩阵二,例如矩阵一中k表示用三维的向量表示每个用户的特征,同理矩阵二中k表示用三维的向量表示每个歌曲的特征,这样两边矩阵的规模是一样的(shape值一致)。2)原公式中的二项式计算的时间复杂度是O(n的平方),现在只需求kn(其中n是指隐向量个数,k是维度,维度值通常不大,例k=4),就好像大矩阵mn=(小矩阵mk)*(小矩阵kn)。而通常收集的数据是用户的行为,没那么直接的,例如观看的时间,点击次数等指标,像这种就是属于隐式情况。

2025-02-12 21:10:33 1408 1

原创 人工智能图像分割之Mask2former源码解读

相比F.binary_cross_entropy函数,F.binary_cross_entropy_with_logits函数在内部使用了sigmoid函数,也就是F.binary_cross_entropy_with_logits = sigmoid + F.binary_cross_entropy。为什么它是返回(100,10)?而上图中matched_col_inds的10个索引值是对应gt标签中的索引位置,matched_row_inds是100个中匹配到损失最小的对应的10个索引。

2025-02-08 23:30:32 1789 1

原创 opencv图像处理框架

1)以前梯度算出来的边缘不算轮廓,轮廓看上去是比较大块的。1)在上面形状学中也是用卷积来算的,梯度也就是边缘信息(例如背景是黑色的,前景是白色的,白黑相交处的像素点信息),表示边缘像素点水平方向差异(卷积核右边减去左边的值<左列为负,右列为正>,例如用3行3列矩阵表示卷积核,设Gx是卷积核乘以像素点值的)与垂直方向差异(卷积核下边减去上边的值<下行为正,上行为正。例如如果背景是黑色的,前景是个白色的圆,那算水平方向的梯度后就会出现左边缘的白色信息,右边缘的信息全置为0,是黑色的。PyrUp为上采样。

2025-02-03 00:26:16 954

原创 强化学习与ai黑科技实例

图像经过图像编码器(例可用transformer,cnn等)生成图像特征向量,与图像配对的文本经过文本编码器生成文本特征向量,然后所有图像特征向量与所有文本特征向量做余弦相似度计算,计算出来的对角线上的值是正样本(相似度最高),其余的是负样本。不断学习,学习,尝试过程中,我们设置一个目标函数,若做错了就惩罚,若做对了奖励(每一步都会有奖励分,最后这样就可比较选出最优方案),它就不断努力尝试与环境交互,使最终目标函数值越高(奖励越高,惩罚越小)。它也是zero-shot,图像可以,生成视频也行。

2025-01-20 11:04:55 781

原创 对比学习与自监督

它是这样做的,首先把这些小块转成多个特征(可挡住某个特征,类似文本中的挡住某个词)组成的向量(通过beit encoder,类似transformer中的encoder),然后原理图像就再经过一个tokenizer(类似文本中的分词器<语料库>,也叫由8192个视觉特征表,它不是由rgb的256个像素值,而是8192个特征)匹配得到对应的矩阵并转成向量。对比学习例子主要有clip,它是用海量数据进行训练出来的,它是从互联网上爬取4亿对(图像与文本为一对)数据下来训练的,是openai产品。

2025-01-16 14:21:01 576

原创 CV与NLP经典大模型解读

一。llm与lora微调策略解读(1)文本大模型llama:meta开源语言模型(咱们能负担得起下游任务了)。lora:绘你模型你也得能训练的动才行(咱们也能微调下游任务)。lora+diffusion。self-instruct:下游任务得规矩些,输入与输出都得有一个标准格式。peft:将上面三个整合到huggingface中了(2)llm落地微调分析思路:把一个大模型冻住,下游任务做一个小模型,然后把大模型与小模型加起来就变成大模型功能更强大。只需训练下游任务的小模型就行。

2025-01-16 10:37:37 1150

原创 人工智能机器学习之python数据科学必备工具(Numpy,Pandas)

例如array1=np.array([[1,2,3,4,5],[10,20,30,40,50]]),如果用array1[:,1]就表示一维来说可取任意的行,二维来说是取第二列,所以array1[:,1]取到的值是[2,20]。那又例如array1[0,0:2]就表示取第一行的前二列的数据为[1,2]。array1=np.array([[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]),这样就创建了一个2维矩阵了,这个矩阵是由3行5列组成,所以叫做3行5列的二维矩阵。

2025-01-06 11:34:01 1099

原创 人工智能之机器学习算法

所有的机器学习算法都是要优化的,优化的必要条件是确定优化的目标函数(损失函数),目标函数是根据实际问题(数据)转成的数学公式。一.线性回归原理推导(1)回归问题概述在机器学习的有监督算法中,分类与回归二种情况。分类就是好像去银行贷款,它会告诉你能贷款还是不能贷款。而回归问题是告诉你可以具体贷款多少钱。例1:去银行贷款,银行会据不同年龄与工资收入的数据(两个特征),来决定给你贷款多少钱(两个特征组合得到的贷款金额)。目标:那预测银行会贷款多少钱给你(标签)。解:工资与年龄都会影响银行能贷多

2025-01-04 21:22:01 537

原创 人工智能深度学习物体检测之YOLOV7源码解读

notest:是否测试;上图的tobj只是初始化置信度的值(调用zeros_like生成全为0的值),到时候要更新的,tobj是(8,3,80,80)的矩阵来的(即8批次共42个值,3个anchors共三层就是9个anchors,80是指这一层的长与宽)(2,18)是指2个真实值(gt)分别与18个预测值求出的各自的损失值(类别损失+3倍的iou损失)。上图中的stride是一行三列组成的一维矩阵,当i=0时它的值是8,当i=1时它的值是16,当i=2时它的值是32,即stride数组是[8,16,32]

2025-01-04 00:31:49 1227 1

原创 人工智能python快速入门

这里要注意:差集的集合是有前,后之分的(即A.difference(B)表示A中有但B中没有的元素,B.difference(A)表示B中有但A中没有的元素)。也可以按创建对象方式这种写法,例如a=list([1,2,3,4,5])a=[1,'abc','13',1];或者直接这样:a=set([1,'abc','13',1]);例如a=[1,'abc',[123,456],3];例如a={1,'abc','13',1};

2024-12-26 10:26:28 319

原创 深度学习物体检测之YOLOV5源码解读

先打开common.py中的class BottleneckCSP中的代码,可看到模型BottleneckCSP的每一层定义(如conv,conv2d,batchnorm2d,leakyrelu,sequential)情况(__init__),然后计算的forward方法(主要是对__init__定义的各层之间进行怎样的先后计算,组合等)在forward_once方法中它会for每一个模型,然后会在common.py文件中调用相应的模型class,并进入这个类中的forward方法执行。

2024-12-15 18:18:21 1363

原创 人工智能必备数学知识之概率论基础

一。随机变量(1)离散型随机变量1)连续与离散型随机变量现实中的数据一般包括离散型与连续型的。连续型随机变量:有限多个的确定值表示的,例台阶数1,2,3等。离散型随机变量:不能确定貝体值,且无限个数,它不能确定是那一种归属。2)离散型概率函数(概率质量函数)p(x)=prob(X=x),由公式可知离散型概率函数(概率质量函数)就是一个概率值,其中X是随机变量的取值,p是概率了。比如扔骰子,每个点(1,2,3,4,5,6点)的概率都是1/6;又例如抛硬币,正,反面的概率值都50%。

2024-12-09 15:42:22 1363

原创 人工智能必备数学知识之线性代数

现先排除所有行向量中每行的每个元素都为0的向量(因为每个元素都为0的向量是线性相关的),假设有1个全为0的,那么下一步构造一个矩阵A,A是1行m-1列的矩阵(矩阵乘法时作为左矩阵),例A=[K1,K2,K3,Km-1],这时A*B就可以A每一行元素都分别乘以B每一列元素了,A每一行元素乘以B每一列素的和都等以0,这样可列出方程组等式出来(这样矩阵乘法变成列出方程组了),现在求解A矩阵的k每个值出来,如果K1=K2=K3=Km-1=0,那么矩阵B中就有m-1个行向量线性无关了;1)矩阵的行向量与列向量。

2024-11-26 12:07:50 1019

原创 人工智能深度学习transformer应用之一VIT源码解读(包括环境搭建,VisionTransformer)

进入Block类的forward方法后,也就主要按Block网络结构执行(x = self.attention_norm(x) -------->x, weights = self.attn(x)------->x = self.ffn_norm(x)------> x = self.ffn(x),因为self.attn(x)这一步主要是做self-attention,dropout,softmax,权重计算后会得到weights。数据量越大,模型训练也许越好,就如大模型。

2024-11-24 01:30:49 1562

原创 人工智能必备数学知识之高等数学

一。高等数学基础(1)函数1)Y=f(x),其中x是自变量,y是因变量。函数在x1处取得的值Y1=Y | (x=x1)=f(x1)2)函数分类<1>分段函数: x的不同范围下,y的表达式有所不同。<2>反函数:自变量与因变量互相调换了一下。例y=f(x)与x=f(y)<3>显函数与隐函数例y=x的平方就是显函数的例子,又例3x+y-4=0就是隐函数。3)函数的几种特性<1>奇偶性。1>偶函数:f(x)=f(-x),它是

2024-11-21 15:49:46 942

原创 人工智能深度学习之时间序列预测(informer,timesnet,time-llm)

一。informer原理解读informer发布时间是2021年(1)时间序列预测要完成的任务1)时间序列算法可用于股票预测(这个可能不准确,因为不确定因素太多了,人为或政策等),机器人动作估计,人体姿态估计,行为识别,天气预测,工厂原材料预测等等。2)informer论文需解决的问题:<1>传统时间序列预测对短期预测或趋势预测是没问题的,例如前20天天气预测出21天或22天天气是比较准确的,但是对于精准长序列预测(例如未来30天的天气)就不准了。又例如预测未来一年或半年的用

2024-11-18 11:44:56 1793

原创 人工智能深度学习之自然语言处理必备神器huggingface,nlp,rnn,word2vec,bert,gpt

1>首先指定各个训练参数(打印训练结果,保存模型路径等等),指定训练与预测数据集,mask后的内容(例上面的data_collator),指定用那个模型训练(本例直接用大佬提供的就行),然后把5个值传入到transformers的Trainer方法中。生成的模型代表就是openai的gpt了。2>按epoch次训练调了train_epoch方法,例先定义如下变量,指定忽略的index,记录整个epoch的loss的总和,每个epoch中预测正确的word数量,每个epoch中预测的word总数量等等。

2024-11-14 21:36:03 693

原创 人工智能深度学习之图神经网络实战(gnn,simgnn,vectornet)

一.图神经网络基础(1)图基本模块定义1)图的基本组成<1>组成由点(Vertex,例如交通领域任务中的每个十字路口可当作一个点),边(Edge,把每个点连在一起),图(Global,由点与边组成)。<2>点用特征向量(例如性别,身高,年龄等)表示;边也是用特征向量表示,通常表示点与点间的关系;图是全局的,也是用特征向量表示。图是由很多点与边组成,所以可对他们的所有点做加权平均得到汇总全局点向量,同样边也这样加权平均。<3>因为点,边,图都是由特征向量

2024-11-12 14:21:40 427

原创 人工智能深度学习之对抗生成网络实战(cyclegan,stargan,gan)

但这里判别器要多做一些事情了,这里判别器一般是经过卷积后不会连sigmoid激活函数或全连接层,就是得到特征图(例N*N*1的矩阵),卷积后(例3*3)的感受野到原图像的某个区域(例3*3)的预测结果与标签(也是N*N)之间计算损失。最后还有一个损失函数的定义。流程:连续语音------>预加重------>加窗分帧------>傅里叶变换‌(FFT)----->MEL滤波器组------>对数运算----->DCT。

2024-11-08 23:17:05 1190

原创 人工智能深度学习的视觉项目实战之3D点云

一。3d点云和它的应用领域分析(1)点云数据概述。激光雷达扫描出来的数据(飞机,车,房,树等)是由一个一个点组成的,每个点都由(x,y,z)构成,把这些点组成在一起就构成点云数据。点云数据与摄像头拍下来的是不一样的。点云数据一般是激光雷达得到的,它的数据特点是近密远稀。(2)点云应用领域与发展分析传统的视频或图像数据都是由(x,y)构成的二维数据,而点云数据是三维(3d)的,是可多视觉表示物体。例如在实际中可对点云数据建模,来监测各种安全性行为,违章判断等。例如:通过带激光雷达的无人机采

2024-11-05 13:55:27 1632

原创 人工智能深度学习的经典视觉项目实战之目标追踪(DeepSort,卡尔曼滤波)算法解读

4)如果满足3)的所有线的数量=n,则找到了最优分配,算法结束,否则(例是3行3列矩阵,但满足的线只有2,则3不等以2)进入5)。1)第一个核心模块就是前面求解x1与v1的公式(其中用到的状态转移矩阵),即x1=x+v*t+(1/2)*u*t,v1=v+ut转为通用矩阵形式 g=Ax+B*u,另外一个是其协方差,公式即p1=f*p0*(f的转置)+q,其中p0表示前一时刻的协方差矩阵,q是高斯分布的噪声矩阵。(就比较花的时间最少吧),例人a做任务1,2,3的时间分别为15,40,45;

2024-11-02 01:32:41 1795

原创 人工智能深度学习的经典视觉项目实战之姿态估计(OpenPose)

例如,对于向量(1,2)求单位向量,先取其模为:1的平方加上2的平方之和再开根得到根号5,它的单位向量就是(1/根号5,2/根号5)。1)姿态估计主要先做定位(即找到所有物体关健点的位置在那里,例如COCO数据集中提供人有17个关健点<例如头,眼,耳朵,鼻子,肩膀,腿,手等>,OpenPose比COCO多一个脖子点)操作,再找出关健点还要进行拼接。1)检测得到所有人的框 ,即检测出所有人所在的位置 2)对每一个框进行姿态估计,定位人的关健点(回归坐标值),关健点进行拼接(按我们定义的规则), 输出结果。

2024-10-29 21:26:38 1057

原创 人工智能深度学习的经典视觉项目实战之行为识别(slowfast与3d卷积的视频分析,动作识别)

例如按stride 16,1的平方采低频的,按stride 2,1的平方采高频的,这样输出低频的就是4*(224的平方),高频的输出大小就是16*(224的平方)。lr表示学习率的值;<2>环境与动作提取特征目的是不同的,他们用的卷积是3d的,卷积参数中第一个是表示时间维度,第二,三个表是长宽维度,例如1*7的平方表示环境特征,表示1帧的时间维度<静态的,每张图的特征丰富点,如64个>,而5*7的平方表示动作特征,表示5帧的时间维度<动态的,特征稍微没有那么丰富,因为重点关注序列中的动作,如8个>。

2024-10-28 23:41:44 1183

原创 人工智能深度学习的图像分割实战(unet,maskFormer,mask2Former)

首先图像经过backbone后得到特征后,连接到transformer decode,这里如果图像中特征只有5个,那么就是说100个工人去特征中并行学时选中其中5个工人适合干的,其他就当啦啦队吧,这里工人初始化时是0加上位置编码的(类似detr),像这种学的过程是crossattention过程。maskFormer是由N个概率对组长,例如一个图像区域中,有n=100个工人去取图像中取特征,每个工人负责一样工作(如取白菜),并且每样工作在图像中有确定的二分类概率(即这块是白菜,另外的块不是白菜)。

2024-10-28 00:07:12 1055

原创 物体检测经典算法实战(yolo,detr,deformableDetr,efficientNet,efficientDet)

一.深度学习经典检测方法概述(1)深度学习经典检测方法包括two-stage(两阶段)与one-stage(单阶段)two-stage(两阶段):faster-rcnn或mask-rcnn系列。它是通过中间先检测出结果(预选),再从这个中间结果中取最优的结果,最近比较少用了。one-stage(单阶段):yolo系列。它这边就是直接按一个算法得到结论(例如一个cnn网络就得到回归结果即可)。优势:速度非常快,适合做适时检测任务。缺点: 效果通常情况下不会太好。性能评估指标有 AP、mAP、Pre

2024-10-27 09:18:27 1468

原创 人工智能深度学习的必备核心算法之三Transformer

q表示要去查询的,k表示表示被查的,q与k是用来算权重的,v表示实际的特征信息。解码包括自身注意力机制(self-attention)----->标准化(normalize)------>Encoder-Decoder Attention------>标准化(normalize)------>前馈全连接层(feed forward)----->标准化(normalize),解码可以有多个连在一起,解码完后连接Linear和softmax最后得到分类结果。这种算权重是并行进行的,不再是串行。

2024-10-24 22:04:51 417

原创 人工智能深度学习的必备核心算法之二卷积神经网络(CNN)

那如果我们最终要做个分类,那就是要把特征图结果转为每个类别的概率,那么我们就可以在特征图与最终分类结果中加入一个全连接层(即特征图(例32*32*10)拉长成大向量(长为1024个向量,想像成1024行1列),然后大向量后加上wx+b,这时我们就设置成一组1024*5的权重参数(因为前面假设得出的1024个向量和假设最终结果是5分类))就行,这就是全连接层的思想,一般情况在对结果输出(分类或回归等)时用到这个全连接层来转换,全连接层不适合提特征。这个公式的优点是保留了数据的原始分布,但对异常值敏感。

2024-10-21 15:43:59 1110

原创 人工智能深度学习的必备核心算法之一神经网络

依线性回归思想,有3072个点(特征),那也会有3072个权重值(w1-------3072)组成,w假设是1行3072列的列向量,x是3072行1列的行向量组成,所以w1x1+w2x2+.......w3072x3072是一个值,因为1行的列向量(1行3072列)与1列的行向量(3072行1列)的内积是一个值。即损失值= -log (p),例p=0.13时,-log(p)=0.89,这里的对数log是经过(1,0)点,y值是负穷到正穷范围值的递增函数。w开始都是比较小的,是随机初始化的。

2024-10-18 10:10:25 864

空空如也

空空如也

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

TA关注的人

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