自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 快速排序学习 l方法 h方法

这个是这个思想,要注意的就是开始是一个都没,如果这个元素小于,那么就i+=1跟j位置的元素换位置,把大的换到后面,下的换到前面,一直换到j索引=high-1的位置为止,那么作为分割的那个元素就可以和i+1的位置的元素呼唤,因为I+1位置的元素肯定是更大的。就是i=low-1 j=low pivot=arr[high] 然后如果j对应的元素小于pivot那么i+=1,让i位置的元素等于j位置的元素 然后遇到大的就过去,遇到小的就交换,这样的话就可以让小的在左边,大的在右边。为什么不需要带上i<j的条件。

2026-01-09 21:38:06 666

原创 英语学习 下班学会儿英语

我的分析是这样的:应该是发布一个道歉声明让生气的顾客平息怒火 那么我觉得是 confront inform是通知 pacify和deceive的意思我忘记了,confront的意思应该是安抚 请你告诉我其余两个单词的含义。欧克完全错误 首先 negligible的意思是微不足道的 defendant的意思是:被告 defend:保卫 然后这句话的意思是 尽管有 的证据,陪审团认为被告无罪。模棱两可的 压倒性的 重要的 浮于表面的 那我觉得是D。然后stagnant的意思是稳定的、不流动的。

2026-01-09 19:57:13 276

原创 代码学习 手敲代码

然后就可以了 现在我的字典内容是这样的:{'3': 'image_001.jpg', '7': 'image_002.jpg', '2': 'image_003.jpg'} 然后现在就是根据map映射文件 将数字改为对应的类别名字。然后我发现一个问题就这会根据number的名字来排序,而我是希望根据一开始的name的顺序进行排序的。我现在就是需要扫描这个的每一行,如果number对上了,那么就将number替换为后面的label。number = parts[1]#得到图片的名字的对应的索引。

2026-01-08 22:15:00 528

原创 下班学会英语 写阅读和一些选择题

formidable 强大的,令人敬畏的 impetus 动力,推动力 lavish 奢华的,慷慨给予(是形容词也是动词) prioritize:优先处理,优先考虑 suffice 足够、足以 tenured 终身的。E:动词,忘记啥意思了 J :不知道啥意思,应该是名词 因素?32名词选M 33动词原形我选E 34 动词原形,选L 35 35形容词 选N 长久维持吧。29动词s形式 好的 选A 30形容词选I 感觉意思是很大的问题 31 选副词 选H。A 貌似是动词,促进?

2026-01-08 20:45:00 421

原创 看会儿代码。。。没招了 代码全不会写了

冒泡排序就是 最大的放在后面,从第一个元素开始进行比较相邻的,前面的大的话就进行交换,这样最后一个就是最大的,然后开始进行比较前面的n-1个元素。flag=False#这里不对,这样下去就全部都是true了 根本改不了,应该在每一轮交换之后改为false才对 这样交换了才改,不然就一直都是true。现在这里有一组数组,然后从第二个开始,如果比前一个小,就换位置,然后从第三个开始小就换位置,一直往前找,找到比自己大的。就一直往后移动,然后把元素放在应该放的位置的,记得j是要进行修改的。写一个简单的冒泡排序。

2026-01-08 20:37:40 252

原创 翻译 翻译这个就行了

宇航员 astronaut 空间生命科学 space life sciences 太空研究 space research。52 通过他的调查 追求准则是 因为后果失望?直接跟随 更长远的确信?竟然错两个 啊哦啊哦对 开始的时候甚至将近十年觉得很好,调查之后发现不好了 很有问题了。51 作者建议做啥 最好的工作 关于职业 接受建议?做他们想做的 我觉得是D。53转变爱好追求为稳定高收入的工作最重要的是 我看着好像是跟金钱有关的 我选D。54 当人们被鼓励追求爱好的时候会发生什么我选B。

2026-01-07 20:27:25 704

原创 下班之后学习一会儿英语

26我觉得是aesthetic吧 我也不认识27我觉得选chronic 28我觉得是Infriengement 29我觉得是environment 30我觉得是 juvenile我觉得没其他形容词合适了 31我觉得是vibrations 32我觉得是ed形式 我觉得是contaminated 33是个名词,猜是emissions 34是个动词原形,那就outlet 35是动名词形式那就是weeding hamper我知道是不好的词。44:除了是一个信息提供者,图书馆在社会也有其他重要的服务 这是B。

2026-01-06 20:00:57 899

原创 今天下班之后学习了一会儿英语

人工智能在刑事司法、医疗和招聘等高风险领域的应用,已引发严重的伦理担忧。尽管算法系统宣称具备客观性和高效性,但它们往往继承、甚至。例如,面部识别技术在女性和有色人种身上的错误率明显更高,可能导致歧视性后果。despite 尽管虽然 尽管有大量的努力,但是还是因为缺乏计划和组织失败了。deploy 展开,调度,使用。remote work不要翻译为遥远的工作,要翻译为远程工作。organizational 组织的,机构的。disparity 差异,不平等,悬殊。coordination 协同。

2026-01-05 21:32:25 856

原创 exp的内容阅读

size = (int(32 * size), 32 * int(size * size_factor)) 32乘以这个数字 到 这个数字乘以宽高比例再乘以32 size在这个范围内 这是高度 和 宽度。size_factor = self.input_size[1] * 1.0 / self.input_size[0] 计算宽高比例 这是前面的self.input_size。tensor[0] = size[0]#tensor[0]是第一个 数字 高。

2025-12-16 15:31:08 741

原创 分析bytetrack代码 exps/example/mot/中的

batch_size = batch_size // dist.get_world_size()#batch_size等于 原来的batch_size除以卡的数目 这叫做数据并行分布式训练 world_size=进程总数=GPU数量。val_loader = self.get_eval_loader(batch_size, is_distributed, testdev=testdev)#对于get_eval_loader得到的return val_loader。

2025-12-16 10:48:48 939

原创 some 知识点 knowledge

num_warmup_steps=500,#学习率这样持续500个step 注意step和epoch的区别 训练一次就能看出来了 epoch是多个step。早停机制 :当模型在验证集上不再变好时,提前终止训练, 在每个epoch 或者是n个step 在验证集上评估指标 如果连续 m个epoch没有提升,就停止训练。输出 查看模型结构 使用print(model) model.name_module() model.named_parameters()等方式查看层级结构。微调的时候 不同模块用不同的学习率。

2025-12-15 19:32:19 396

原创 测评一张图像是属于什么类别的,

siglip_path=siglip_model_path, 使用这个初始化vit 主干结构+预训练权重 此时模型包括:vit主干(来自siglip)加载的是siglip_model_path对应的原始预训练权重 分类头 (nn.linear)随机初始化 即使后面会加载全参微调的权重,这一步仍然必须提供siglip_model_path 因为siglipclassifier的构造函数依赖它来构建vit网络结构(层数、维度等)

2025-12-15 11:47:54 545

原创 看模型结构 分析模型结构

用 3×3 RGB 输入,卷积核大小 16、步幅 16,(卷积核大小和步长大小相同)相当于把图像按照 16×16 的不重叠 patch 切分并对每个 patch 做线性投影(这是很多 ViT 实现常用的 trick,用 conv 实现 patch embedding)。:这是一个自定义激活,名字暗示可能是结合了 GELU 与 tanh 的形式,或是某种带有 tanh 缓和的 GELU 风格激活(不是标准的,但用途类似于 GELU 提供非线性)。把 768 维输入线性变换成 Q、K、V,维度仍是 768。

2025-12-11 17:26:34 595

原创 evaluate_on 线上测试 线上模型测试代码

这里是Jsonl文件 {"errcode": 0, "errmsg": "", " ": {"cls": 0, "conf": 0.8998573422431946, "label": "其他", "model": "irregular", "time_cost_ms": 14.0}} jsonl文件中的一条是这样的。pred_cid = label_to_class_id.get(pred_label, "unknown")#有这个pred_label的话 去字典找对应的id 确认有这个id。

2025-12-05 16:08:29 885

原创 代码阅读,从四个文件中 找到下载链接下载

r'irregular:([^:,]+):' 正则表达式解析 字面匹配字符串 “inregular" 捕获组 是括号部分,[^:,]表示除去: ,之外的任意字符 + 表示至少一个: 字面匹配结尾的冒号 因为其实基本是这样的 就是inregular开头 然后中文 表示类别 后面跟上一个冒号 所以提取类别名还是很简单的。parsed = urlparse(url)#使用urllib.parse.urlparse解析URL。"""从行中提取 irregular:xxx: 的 xxx 部分"""

2025-12-04 17:29:57 685

原创 代码分析 关于看图像是否包括损坏

每次迭代返回三个值,当前遍历到的目录路径 _ 当前目录下的子目录列表(这里表示不关心,不需要,因为我只看文件夹中的图像是否有损坏) files当前目录下的文件列表。bad_images.append((img_path, str(e)))#这个就是将坏图像存在bad_images列表中。#img.load加载图像的全部像素数据,会触发图像完整性的检查,如果图像文件是截断的(或者结构损坏) 会抛出oserror。#下面这部分就是打印前三个坏图像信息,如果没坏图像,就打印绿色对号。#对于每一个列表中的。

2025-12-04 15:51:28 427

原创 detr论文基础阅读

给定一个固定的小集合学习的物体查询,detr通过推理物体之间的关系和全局图像上下文,直接并行输出最终的预测集合。二分图匹配:模型输出的是一个无序的集合,真实标注也是无序的集合,我们需要知道哪个预测对应哪个真实框/使用 匈牙利算法来做最优二分图匹配,将N个预测框和M个真实框匹配,使得总匹配代价最小 匹配代价=分类损失+边界框回归损失。相关工作:我们的工作建立在先前的研究之上,用于集合预测的二分图匹配损失,基于transformer的编码器-解码器架构、并行解码机制,以及已有的目标检测方法 (我写的很乱)

2025-12-02 18:28:11 953

原创 代码分析

with Pool(processes=num_workers) as pool:,pool.map将filepaths中的每个路径分配给一个子进程,调用process_single_file(filepath)并收集所有返回结果。OUTPUT_ROOT = "output" # 所有结果的根目录,表示生成的所有文件存放在当前目录下的output/文件夹中。entities["英文名.txt"].append(word)entities["地名.txt"].append(word)

2025-11-24 18:10:13 380

原创 代码分析 长音频分割为短音频

关键功能就是 audiosegment.from_wav("file.wav") 加载wav文件,audio[start_ms:end_ms]按毫秒切片 clip.export("out.wav",format="wav")导出音频。safe_key = key.replace(".wav", "") # 避免重复 .wav。parser.add_argument("jsonl_file", help="输入的 .jsonl 文件路径")# print(f" ✅ 保存: {filename}")

2025-11-24 17:13:16 744

原创 cosyvoice克隆音色代码分析

sys.path.append 将tired_party/Matcha-TTS目录加入python模块搜索路径,让python能找到该目录下的模块 Matcha-TTs是一个开源tts框架 这是实现cosyvoice的子模块 (我没细看也没修改这部分代码,直接是看输出Log中有下载这个东西的部分)和音频中的保持一致 然后那个instruct2?#然后保存生成的语音波形,输出路径 tts_speech是模型返回的语音波形数据 sample-rate是模型输出音频的采样率 也就是上面的16000khz。

2025-11-24 16:25:59 936

原创 代码分析分析分析分析

,,,,,,吗,妈能吗那家伙你和你妹妹吗hgvggvyyhuiujiuuuuookoikpopoolllo/'lvc存储w's'de'f'r's'w'd'f's'w'd'f'r's'z'z's'z。# 这行代码的意思是为models列表中的每一个模型,创建一个独立的一步信号量 semaphore,设置最大并发数是2,并将这些信号量组织成一个字典,键是模型名称,值是对应的信号量对象)print(f"\n[{idx}/{len(words)}] 处理单词: {word}")

2025-11-24 15:14:05 496

原创 分析代码 分析分析分析分析

读取并排序音频 os.listdir 列出real_audio_dir目录下的所有文件和文件夹名字 只保留.wav结尾的文件 然后sorted 按照之前定义的extract_prefix函数对文件名排序。#如果p是数字的话 就返回int(p),将其转化为整数,这样排序的时候2会在10前面,而不是按照字符串排序 10 <2。#选取_之前的数字 split('_', 1)的意思是最多切一刀,将字符串按照第一个_分成两部分。#audio_files是之前已经按照前面的数字排好顺序的,排在一个数组当中。

2025-11-21 17:45:41 594

原创 双线性插值学习

最近邻法实际上是不需要计算新图像矩阵中的点的数值的,直接找到原图像中对应的点,将数值赋值给新图像矩阵中的点,根据对应关系找到原图像中的对应的坐标,这个坐标可能不是整数,这时候找最近的点进行插值。插值指的是利用已知的点来猜未知的点,图像领域插值常用在修改图像尺寸的过程,由旧的图像矩阵中的点计算新图像矩阵中的点并插入,不同的计算过程就是不同的插值算法。别管这个截图中的新图中的某个点了,肯定是整数,但是在原图中,要根据变换的方式去映射,映射到的位置可能是小数。双线性插值就不是找最近的那个点,而是找最近的四个点。

2025-11-21 14:44:43 322

原创 讲讲如何能够下载数据,下载huggingface数据

HF_ENDPOINT=https://hf-mirror.com ./hfd.sh ESpeech/ESpeech-webinars2 --dataset --revision e64b560be813b41c465531a7e8fd4fa7c811dc79 --local-dir .直接一行搞定,确实是可以正确下载了。给的教程是:wget https://hf-mirror.com/hfd/hfd.sh chmod a+x hfd.sh 这个是下载hfd。下载模型:./hfd.sh gpt2。

2025-11-21 10:26:53 598

原创 retinex理论及应用

一是眼睛凑的很近,眯着眼睛细看,这个时候你只能看到很小一块区域的细节。不同的Retinex算法对L的·估计·方式不同,但基本思路相似,照射光L通常是平滑、缓慢变化的,而反射物R则包含了图像的细节和边缘(因为不同物体的交界处会发生变化)I =L*R I是人眼或传感器感知到的图像强度,L是照射光的光强和颜色 R是物体本身的反射属性(物体在不同波长下的反射率,决定了它的本色)因此算法的主要任务就是从一个图像I中,估计出一个平滑的、能够代表整体光照的L,然后用I减去这个L,得到增强后的、去除光照影响的R。

2025-11-20 23:42:03 589

原创 什么是clahe

clip limitde的作用就是:设定一个阈值,限制每个灰度级的最大像素频率,超过这个阈值的像素会被剪掉,然后均匀分配到其他灰度级。什么叫做均匀分配,意思是如果我限制了频率是40%,而这块图像中的灰度级为50的像素频率是80%,那么我就会裁剪掉40%,将这些概率分给其他不到40%的像素,是均分。如果只是做每块的直方图均衡化,但如果某个灰度值在某块中出现的太多,就会导致:局部对比度过强、噪声被放大、图像出现不自然的亮斑或暗斑。双线性插值的作用是:在title之间的交接区域,根据相邻块的均衡结果进行插值。

2025-11-20 18:55:39 240

原创 什么是直方图均衡化?

(什么是灰度级,标准的直方图均衡化主要是针对灰度图像进行的,因为灰度图像每个像素只有一个亮度值(灰度值),非常适合用直方图来分析和调整。构建映射函数,将每个原始灰度值rk映射为新的灰度值sk,(注意rk表示的是第k个灰度值本身,k是灰度值的索引,rk是灰度值)直方图均衡化的完整处理流程是:计算灰度直方图,统计图像中的每个灰度级(0-255)出现的像素数量,得到一个灰度频率分布图。对概率分布进行累加,得到每个灰度值以下像素的累计概率(看范围是到k,也就是从像素级为0到像素级为k这个数值的概率的累加)

2025-11-20 17:45:51 180

原创 学习记录记录记录记录

意思就是 rect=true的时候,workers:用于数据加载的工作线程数(每个rank,如果是多GPU训练)影响数据预处理和输入模型的速度,在多GPU设置中。time 最长训练时间,设置此参数,将覆盖epochs参数,允许训练在指定时长后自动停止,适用于时间受限的训练场景。mosaic数据增强是一种图像拼接技术,将四张不同的图片随机组合为一张新图像,以增强训练数据的多样性和模型的鲁棒性。data 数据集配置文件的路径,此文件包含数据集特定的参数,包括训练和验证数据的路径,类别名称和类别数量。

2025-11-18 10:11:17 834

原创 学习记录记录记录记录

c++支持的最基本的三种程序运行结构:顺序结构,选择结构(依据条件是否满足,有选择地执行相应功能),循环结构(根据条件是否满足,循环多次执行某段代码)前置++i 先自增,再返回新值.返回的是自增后的引用 int i=5;后置 i++先返回原值,再自增,返回的是自增前的副本 int i=5;后置 i--先返回i的当前值(副本),再将i减1 int i=5;前置--i 先自减,再返回新值,int i=5;两个小数相除,结果也可以是小数,如果是整除的话,那么结果就是整数。:not,取反,一元运算符,优先级很高。

2025-11-04 14:57:02 696

原创 学习笔记记录记录

SQUARE(x)是宏的名字和参数,可以传入一个值x,((x)*(x))是宏的替换内容,表示将传入的x替换进去,计算它的平方。c语言提供了一个可以将复杂类型名重新命名为简单名称的关键字typedef typedef 已有类型名 新类型名;// 替换为 ((a)*(a)) → ((5)*(5)) → 25。条件编译 :#if #ifdef #else #elif #endif等。不带参数的宏定义:#define 宏名(参数列表) 替换内容。宏定义一般分为两种,不带参数的宏定义和带参数的宏定义。

2025-11-03 18:20:27 164

原创 写一些学习的记录

为确保跨系统对齐的可靠性及多源转录的有效整合,必须统一不同自动语音识别系统(ASR)的输出格式。为确保对异常假设的鲁棒性,我们引入了候选过滤模块,该模块通过计算各系统输出与另外两个系统的平均转写结果之间的编辑距离来筛选候选。(对于A的输出,计算它与B,C的平均结果之间的编辑距离,如果A的结果差太多,被排除)(被排除是B,C很权威吗?多系统·集成策略:使用三个语音识别模型,每个语音得到三个不同的转录结果,这三个转录结果会送到Recognizer Output Voting(识别结果投票)。

2025-10-31 17:11:05 587

原创 c++学习学习学习学习

数据类型:整型(整数 short(短整型):2字节 int(整型):4字节 long(长整型):windows为4字节,linux为4字节,8字节;c++规定给标识符(变量、常量)命名时:标识符不可以是关键字、标识符只能由字母、数字、下划线组成;const修饰的变量 const 数据类型 常量名=常量值。c++定义常量的两种方式 #define 宏常量:#define 常量名 常量值。枚举常量,适用于一组相关常量。注意如果创建的是字符,char 变量名='字符',没有【】,并且是单引号,不是双引号。

2025-10-30 10:24:02 344

原创 c++学习学习学习

面向对象编程的核心思想是将现实世界中的事物抽象为程序中的对象,每个对象包含数据(属性)和行为(方法)。通过对象之间的交互来完成程序的功能四大基本特性:封装:将数据(属性)和操作数据的方法(函数)捆绑在一起,并对外隐藏内部实现细节。通常通过访问控制(public,private,protected)来实现继承:允许一个(子类)基于另一个类(父类)来创建,自动获得父类的属性和方法,并可以扩展或重写多态:同一个接口或方法在不同对象中可以有不同的实现方法。例如,父类定义一个方法,子类各自提供具体实现。

2025-10-28 11:43:10 716

原创 数据结构学习,一些知识点

线性表的顺序存储又称为顺序表,用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。顺序表中的任意一个数据元素都是可以随机存取的,所以线性表的顺序存储架构是一种随机存取的存储结构,通常用高级程序设计语言中的数组来描述线性表中的顺序存储结构。ListDelete(&L,i,&e) 删除操作,删除表L中第i个位置的元素,并用e返回删除元素的值。GetElem(L,i)按位查找操作,获取表L中第i个位置的元素的值。表中元素都是数据元素,每个元素都是单个元素。

2025-10-27 20:38:17 252

原创 强化学习-ppo简单自学

针对于这两点,可以修改公式,首先对reward求和,不是对整个tragectory进行求和,而是从当前到结束的reward的求和,第二点是引入衰减因子,距离当前t越远,当前动作对reward的影响越小,呈指数衰减。那么一个策略的概率,就是在这个策略中的所有的state和这个state下给出的action的概率的连乘。优势函数,做出某一个具体动作得到的回报,比这个状态的期望回报的差值,表示这个动作相对于其他动作的优势。action就是agent做出的动作,根据当前的state和策略做出动作,前上跳之类的。

2025-10-24 19:01:01 940

原创 强化学习---随便看看,

这是一个递归关系,当执行动作a之后,会以概率p(s'|s,a)到达不同的下一个状态s 在这个过程中,会得到即时奖励,在s'中继续采取最优动作。贝尔曼公式:价值函数的递推关系,当前状态的价值=即时奖励+未来状态的折扣价值(今天持仓的价值=今天的收益+明天持仓价值*折扣系数)策略函数:智能体的行动指南,定义在某个状态下选择不同动作的概率(比如在股价上涨5%的状态下,60%的概率卖出,40%的概率持仓)下一个状态的最大价值函数。是真正的折扣因子,如果有|s|个状态,|A|个动作,那么有|s|*|A|个未知的。

2025-10-23 20:26:03 613

原创 简单读论文,看看关于语料处理过程

wenetspeech-pipe ,针对于大规模语音语料库的集成处理流程。包括六个模块:音频采集,说话人属性标注,语音质量标注,自动语音识别,文本后处理及识别结果投票。(此外发布语料库和粤语基准测试集,测试集包括两个组件:WSYue-ASR-eval用于在短句、长句、代码切换及多种声学条件下评估ASR性能的人工标注数据集和WSYue-TTs-eval:包含基线和覆盖子集,用于标准和泛化能力测试)无论是长音频、还是代码切换(混杂其他国家或地区的语音)、场景(对话访谈新闻)、多标签,拥有丰富的标注信息。

2025-10-22 15:23:42 653

原创 链表题目练习--排序链表

然后就是进行归并,也就是使得两个链表合并为一个链表,这是两个需要写的函数。思路就是先写一个找中间点的函数、合并链表的函数 然后在sortlist中使用找中间点函数,然后再对于找到的进行分开,分开递归完之后最后合并。就跟数组排序一样,我们可以将数组排序的那些想法应用到链表排序上面,我们先试一个最简单的:简单选择排序。思路就是:通过快慢指针找到中点,然后递归地进行排序,最后将两个半链表合并为一个.那我们来写代码。#传入的是两个链表,这个是两个链表进行合并。#没有节点或者只有一个节点。#然后再分别进行排序。

2025-10-21 16:02:17 803

原创 链表简单题 练习练习

然后我看到一个特别好的方法是:弄两个指针,一个先移动n,然后两个同时移动。我开始写的就是直接计算有多少个节点,然后倒数第n个就是正着数第m-n个,我会创建一个dummy节点,之后是Head,这样可以删除到head。这个简单,就是设置一个dummy节点后面是Head,然后画图看看是咋交换的,保证是不断开链就行,然后不断移动要进行交换的开始节点的位置就可以。ne_l=ne_l.next#往后面传递。

2025-10-21 10:58:56 886

原创 一些简单的链表题目

两个链表如果是相交的,那么后面的就都是一样的,所以看链条长的那个多几个,先走那几个,剩下的一起走,如果遍历完也没有指针相等,那就是没有交集‘#两个链表如果是相交的,那么后面的就都是一样的,所以看链条长的那个多几个,先走那几个,剩下的一起走,如果遍历完也没有指针相等,那就是没有交集。这个方法绝对是不行的,然后上个题不是使用了反转链表了,其实可以先使用快慢指针,找到链表的中间部分,然后将后半段部分反转,反转之后指针同时走,进行比较。代码就是这样,我开始还以为奇数个链表点和偶数个不一样呢,结果是一样的情况。

2025-10-20 14:48:33 602

空空如也

空空如也

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

TA关注的人

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