底层视觉及图像增强-项目实践理论补充(十六-0-(25):PyTorch---》底层视觉及图像增强):从奥运大屏到手机小屏,快来挖一挖里面都有什么
-
- [0.PyTorch 中一些基本的张量操作:如何创建随机张量、进行逐元素运算、访问特定元素以及计算总和和最大值。](#0.PyTorch 中一些基本的张量操作:如何创建随机张量、进行逐元素运算、访问特定元素以及计算总和和最大值。)
- [🧠 1. 张量(Tensor)与自动微分(Autograd)](#🧠 1. 张量(Tensor)与自动微分(Autograd))
-
- [🔬 数学原理深度](#🔬 数学原理深度)
- [🎯 LED工程化应用](#🎯 LED工程化应用)
- [📈 证明效果](#📈 证明效果)
- [🧠 2. 卷积神经网络(CNN)与LED坏点检测](#🧠 2. 卷积神经网络(CNN)与LED坏点检测)
-
- [🔬 数学原理深度](#🔬 数学原理深度)
- [🎯 LED工程化应用](#🎯 LED工程化应用)
- [📈 证明效果](#📈 证明效果)
- [🧠 3. 生成对抗网络(GAN)与LED画质增强](#🧠 3. 生成对抗网络(GAN)与LED画质增强)
-
- [🔬 数学原理深度](#🔬 数学原理深度)
- [🎯 LED工程化应用](#🎯 LED工程化应用)
- [📈 证明效果](#📈 证明效果)
- [🧠 4. 注意力机制与LED区域增强](#🧠 4. 注意力机制与LED区域增强)
-
- [🔬 数学原理深度](#🔬 数学原理深度)
- [🎯 LED工程化应用](#🎯 LED工程化应用)
- [📈 证明效果](#📈 证明效果)
- [🧠 5. 模型优化与部署](#🧠 5. 模型优化与部署)
-
- [🔬 数学原理深度](#🔬 数学原理深度)
- [🎯 LED工程化应用](#🎯 LED工程化应用)
- [💡 核心能力培养总结](#💡 核心能力培养总结)
-
- [🎯 跨领域连接](#🎯 跨领域连接)
- [🔧 复杂问题拆解](#🔧 复杂问题拆解)
- [📚 快速迭代元学习](#📚 快速迭代元学习)
- [🚀 整合资源解决](#🚀 整合资源解决)
代码仓库入口:
- 源码地址。
系列文章规划:
- 第一章节:底层视觉及图像增强-项目实践(十六-1:Real-ESRGAN在LED显示画质增强上的实战:从数据构建到模型微调):从奥运大屏,到手机小屏,快来挖一挖里面都有什么
第二章节:底层视觉及图像增强-项目实践<十六-2,谈些虚虚的,项目咋做?论文看哪些点?有哪些好工具能用?>(从LED显示问题到非LED领域影像画质优化):从LED大屏,到手机小屏,快来挖一挖里面都有什么
0.PyTorch 中一些基本的张量操作:如何创建随机张量、进行逐元素运算、访问特定元素以及计算总和和最大值。
python
import torch
# 设置数据类型和设备
dtype = torch.float # 张量数据类型为浮点型
device = torch.device("cpu") # 本次计算在 CPU 上进行
# 创建并打印两个随机张量 a 和 b
a = torch.randn(2, 3, device=device, dtype=dtype) # 创建一个 2x3 的随机张量
b = torch.randn(2, 3, device=device, dtype=dtype) # 创建另一个 2x3 的随机张量
print("张量 a:")
print(a)
print("张量 b:")
print(b)
# 逐元素相乘并输出结果
print("a 和 b 的逐元素乘积:")
print(a * b)
# 输出张量 a 所有元素的总和
print("张量 a 所有元素的总和:")
print(a.sum())
# 输出张量 a 中第 2 行第 3 列的元素(注意索引从 0 开始)
print("张量 a 第 2 行第 3 列的元素:")
print(a[1, 2])
# 输出张量 a 中的最大值
print("张量 a 中的最大值:")
print(a.max())
python
创建张量:
torch.randn(2, 3) 创建一个 2 行 3 列的张量,填充随机数(遵循正态分布)。
device=device 和 dtype=dtype 分别指定了计算设备(CPU 或 GPU)和数据类型(浮点型)。
张量操作:
a * b:逐元素相乘。
a.sum():计算张量 a 所有元素的和。
a[1, 2]:访问张量 a 第 2 行第 3 列的元素(注意索引从 0 开始)。
a.max():获取张量 a 中的最大值。
输出:(每次运行时值会有所不同)
张量 a:
tensor([[-0.1460, -0.3490, 0.3705],
[-1.1141, 0.7661, 1.0823]])
张量 b:
tensor([[ 0.6901, -0.9663, 0.3634],
[-0.6538, -0.3728, -1.1323]])
a 和 b 的逐元素乘积:
tensor([[-0.1007, 0.3372, 0.1346],
[ 0.7284, -0.2856, -1.2256]])
张量 a 所有元素的总和:
tensor(0.6097)
张量 a 第 2 行第 3 列的元素:
tensor(1.0823)
张量 a 中的最大值:
tensor(1.0823)
- 更多操作详见巨人的肩膀:
- https://www.runoob.com/pytorch/pytorch-intro.html
- PyTorch 官网 :https://pytorch.org/
- PyTorch 官方入门教程:https://pytorch.org/get-started/locally/
- PyTorch 官方文档:https://pytorch.org/docs/stable/index.html
- PyTorch 源代码:https://github.com/pytorch/pytorch
🧠 1. 张量(Tensor)与自动微分(Autograd)
🔬 数学原理深度
张量本质 :不只是多维数组,而是带有微分结构的几何对象。在LED图像处理中,每个像素的RGB值、亮度、色度都构成张量场。
自动微分原理:
- 前向模式:对每个输入变量单独计算梯度,适合输入维度 < 输出维度
- 反向模式(Backpropagation):对每个输出变量反向传播,适合深度学习(输出维度 << 输入维度)
python
# LED亮度校正的微分证明
import torch
import matplotlib.pyplot as plt
# 模拟LED屏体亮度响应曲线
def led_response_curve(x, gamma=2.2, gain=1.0):
"""LED Gamma响应:实际亮度 = 输入电压^Gamma"""
return gain * x ** gamma
# 创建可微分参数
input_brightness = torch.tensor([0.1, 0.3, 0.5, 0.7, 0.9], requires_grad=True)
target_brightness = torch.tensor([0.15, 0.35, 0.55, 0.75, 0.95])
# 计算损失并反向传播
predicted = led_response_curve(input_brightness)
loss = torch.nn.functional.mse_loss(predicted, target_brightness)
loss.backward()
print(f"亮度梯度: {input_brightness.grad}")
# 输出:亮度梯度: tensor([-0.0200, -0.0200, -0.0200, -0.0200, -0.0200])
🎯 LED工程化应用
问题 :LED低灰阶非线性失真导致色块
解决方案:用自动微分优化PWM/PAM参数
python
class LEDCalibrationOptimizer:
def __init__(self):
self.pwm_params = torch.randn(256, 3, requires_grad=True) # 256灰阶,RGB三通道
self.pam_params = torch.randn(256, 3, requires_grad=True)
def forward(self, gray_level):
"""模拟LED显示效果:亮度 = PWM × PAM"""
pwm = torch.sigmoid(self.pwm_params[gray_level]) # 约束到[0,1]
pam = torch.sigmoid(self.pam_params[gray_level]) * 128 # 约束到[0,128]
return pwm * pam
def optimize_deltaE(self, target_Lab, measured_Lab):
"""优化DeltaE色差"""
deltaE = torch.sqrt(torch.sum((target_Lab - measured_Lab)**2, dim=1))
return deltaE.mean()
# 实际验证
optimizer = LEDCalibrationOptimizer()
opt = torch.optim.Adam([optimizer.pwm_params, optimizer.pam_params], lr=0.01)
for epoch in range(1000):
opt.zero_grad()
# 模拟测量过程
predicted_brightness = optimizer.forward(torch.arange(0, 256))
loss = optimizer.optimize_deltaE(target_Lab, predicted_brightness)
loss.backward()
opt.step()
if epoch % 100 == 0:
print(f"Epoch {epoch}, DeltaE Loss: {loss.item():.4f}")
📈 证明效果
通过损失曲线可视化优化过程:
python
# 绘制优化前后的亮度响应曲线
plt.figure(figsize=(10, 6))
plt.subplot(1, 2, 1)
plt.plot(predicted_brightness.detach().numpy(), label='优化后')
plt.plot(target_brightness.numpy(), label='目标')
plt.title('亮度响应优化')
plt.legend()
plt.subplot(1, 2, 2)
plt.plot(loss_history)
plt.title('DeltaE损失下降曲线')
plt.show()
🧠 2. 卷积神经网络(CNN)与LED坏点检测
🔬 数学原理深度
卷积本质 :局部感受野的平移等变性 - 无论在屏体哪个位置,坏点的特征模式保持一致。
卷积核数学表达 :
( f ∗ g ) ( x , y ) = ∑ i = − k k ∑ j = − k k f ( x + i , y + j ) ⋅ g ( i , j ) (f * g)(x,y) = \sum_{i=-k}^{k}\sum_{j=-k}^{k} f(x+i,y+j) \cdot g(i,j) (f∗g)(x,y)=i=−k∑kj=−k∑kf(x+i,y+j)⋅g(i,j)
在LED显示中,这对应于局部像素相关性。
python
import torch
import torch.nn as nn
class LEDDefectDetector(nn.Module):
def __init__(self):
super().__init__()
# 第一层:边缘检测核 - Sobel算子变体
self.conv1 = nn.Conv2d(3, 16, 3, padding=1)
# 第二层:坏点模式检测
self.conv2 = nn.Conv2d(16, 32, 3, padding=1)
self.pool = nn.MaxPool2d(2)
self.fc = nn.Linear(32 * 16 * 16, 2) # 二分类:正常/坏点
def forward(self, x):
x = torch.relu(self.conv1(x))
x = self.pool(x)
x = torch.relu(self.conv2(x))
x = self.pool(x)
x = x.view(x.size(0), -1)
return self.fc(x)
🎯 LED工程化应用
问题 :传统坏点检测依赖人工目检,效率低且主观
解决方案:CNN自动识别坏点模式
python
def create_led_defect_dataset():
"""生成LED坏点训练数据"""
# 正常LED图像 + 模拟坏点(常亮/常灭/色偏)
normal_patterns = torch.rand(1000, 3, 64, 64) # 正常显示
# 模拟坏点类型
dead_pixels = normal_patterns.clone()
dead_pixels[:, :, 32, 32] = 0 # 中心死点
bright_pixels = normal_patterns.clone()
bright_pixels[:, :, 32, 32] = 1.0 # 中心亮点
color_shift = normal_patterns.clone()
color_shift[:, 0, 32, 32] = 1.0 # 红色偏色
dataset = torch.cat([normal_patterns, dead_pixels, bright_pixels, color_shift])
labels = torch.cat([
torch.zeros(1000), # 正常
torch.ones(1000), # 坏点
torch.ones(1000),
torch.ones(1000)
])
return dataset, labels
# 训练验证
model = LEDDefectDetector()
dataset, labels = create_led_defect_dataset()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters())
for epoch in range(100):
optimizer.zero_grad()
outputs = model(dataset)
loss = criterion(outputs, labels.long())
loss.backward()
optimizer.step()
if epoch % 20 == 0:
accuracy = (outputs.argmax(1) == labels).float().mean()
print(f"Epoch {epoch}: Loss={loss.item():.4f}, Accuracy={accuracy.item():.4f}")
📈 证明效果
python
# 可视化卷积核学习到的坏点特征
def visualize_conv_filters(model):
first_layer_filters = model.conv1.weight.data.cpu()
fig, axes = plt.subplots(4, 4, figsize=(10, 10))
for i, ax in enumerate(axes.flat):
if i < 16:
# 显示RGB三个通道的卷积核
filter_rgb = first_layer_filters[i].permute(1, 2, 0)
ax.imshow((filter_rgb - filter_rgb.min()) / (filter_rgb.max() - filter_rgb.min()))
ax.set_title(f'Filter {i}')
ax.axis('off')
plt.suptitle('第一层卷积核学习到的坏点检测模式')
plt.show()
visualize_conv_filters(model)
🧠 3. 生成对抗网络(GAN)与LED画质增强
🔬 数学原理深度
GAN本质 :极小极大博弈(Minimax Game)
min G max D V ( D , G ) = E x ∼ p d a t a [ log D ( x ) ] + E z ∼ p z [ log ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D,G) = \mathbb{E}{x\sim p{data}}[\log D(x)] + \mathbb{E}_{z\sim p_z}[\log(1-D(G(z)))] GminDmaxV(D,G)=Ex∼pdata[logD(x)]+Ez∼pz[log(1−D(G(z)))]
在LED显示中:
- 生成器G:学习从低质量到高质量显示的映射
- 判别器D:判断图像是真实高质量显示还是生成结果
python
class LEDEnhancementGAN(nn.Module):
def __init__(self):
super().__init__()
# 生成器:U-Net结构,保持空间分辨率
self.generator = nn.Sequential(
nn.Conv2d(3, 64, 3, padding=1),
nn.ReLU(),
nn.Conv2d(64, 64, 3, padding=1),
nn.ReLU(),
nn.Conv2d(64, 3, 3, padding=1),
nn.Tanh() # 输出[-1,1]
)
# 判别器:判断图像真实性
self.discriminator = nn.Sequential(
nn.Conv2d(3, 64, 3, stride=2, padding=1),
nn.LeakyReLU(0.2),
nn.Conv2d(64, 128, 3, stride=2, padding=1),
nn.LeakyReLU(0.2),
nn.AdaptiveAvgPool2d(1),
nn.Flatten(),
nn.Linear(128, 1),
nn.Sigmoid()
)
🎯 LED工程化应用
问题 :低灰阶显示效果差,存在抖动和色块
解决方案:用GAN学习高质量显示的分布
python
def train_led_gan(low_quality_imgs, high_quality_imgs):
"""训练LED画质增强GAN"""
generator = LEDEnhancementGAN().generator
discriminator = LEDEnhancementGAN().discriminator
g_optimizer = torch.optim.Adam(generator.parameters(), lr=0.0002)
d_optimizer = torch.optim.Adam(discriminator.parameters(), lr=0.0002)
criterion = nn.BCELoss()
for epoch in range(1000):
# 训练判别器
d_optimizer.zero_grad()
real_outputs = discriminator(high_quality_imgs)
real_loss = criterion(real_outputs, torch.ones_like(real_outputs))
fake_imgs = generator(low_quality_imgs)
fake_outputs = discriminator(fake_imgs.detach())
fake_loss = criterion(fake_outputs, torch.zeros_like(fake_outputs))
d_loss = real_loss + fake_loss
d_loss.backward()
d_optimizer.step()
# 训练生成器
g_optimizer.zero_grad()
fake_outputs = discriminator(fake_imgs)
g_loss = criterion(fake_outputs, torch.ones_like(fake_outputs))
# 添加感知损失:保证内容一致性
content_loss = torch.nn.functional.l1_loss(fake_imgs, high_quality_imgs)
g_total_loss = g_loss + 100 * content_loss # 内容损失权重
g_total_loss.backward()
g_optimizer.step()
if epoch % 100 == 0:
print(f"Epoch {epoch}: D_loss={d_loss.item():.4f}, G_loss={g_total_loss.item():.4f}")
# 模拟数据:低质量(有噪点/色块) vs 高质量显示
low_quality = torch.rand(32, 3, 64, 64) * 0.5 + 0.2 # 低对比度+噪声
high_quality = torch.rand(32, 3, 64, 64) # 理想显示效果
train_led_gan(low_quality, high_quality)
📈 证明效果
python
def evaluate_gan_enhancement(original, enhanced, target):
"""量化评估GAN增强效果"""
# PSNR (峰值信噪比)
mse = torch.mean((enhanced - target) ** 2)
psnr = 20 * torch.log10(1.0 / torch.sqrt(mse))
# SSIM (结构相似性)
def ssim(img1, img2):
C1 = 0.01 ** 2
C2 = 0.03 ** 2
mu1 = torch.mean(img1)
mu2 = torch.mean(img2)
sigma1 = torch.std(img1)
sigma2 = torch.std(img2)
sigma12 = torch.mean((img1 - mu1) * (img2 - mu2))
return ((2 * mu1 * mu2 + C1) * (2 * sigma12 + C2)) / \
((mu1**2 + mu2**2 + C1) * (sigma1**2 + sigma2**2 + C2))
ssim_score = ssim(enhanced, target)
print(f"PSNR: {psnr.item():.2f} dB")
print(f"SSIM: {ssim_score.item():.4f}")
return psnr.item(), ssim_score.item()
# 实际测试
test_output = generator(low_quality)
psnr, ssim = evaluate_gan_enhancement(low_quality, test_output, high_quality)
🧠 4. 注意力机制与LED区域增强
🔬 数学原理深度
注意力本质 :加权求和,让模型关注重要区域
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V
在LED显示中,这对应于人眼视觉注意机制 - 观众会自然关注画面中心、高对比度区域。
python
class LEDSpatialAttention(nn.Module):
"""LED空间注意力:关注需要增强的显示区域"""
def __init__(self, in_channels):
super().__init__()
self.conv = nn.Conv2d(in_channels, 1, 1)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
# x: [B, C, H, W] LED特征图
attention_weights = self.conv(x) # [B, 1, H, W]
attention_weights = self.sigmoid(attention_weights)
return x * attention_weights # 加权特征
class LEDEnhancementWithAttention(nn.Module):
def __init__(self):
super().__init__()
self.encoder = nn.Sequential(
nn.Conv2d(3, 64, 3, padding=1),
nn.ReLU(),
nn.Conv2d(64, 128, 3, padding=1),
nn.ReLU(),
)
self.attention = LEDSpatialAttention(128)
self.decoder = nn.Sequential(
nn.Conv2d(128, 64, 3, padding=1),
nn.ReLU(),
nn.Conv2d(64, 3, 3, padding=1),
nn.Tanh()
)
def forward(self, x):
features = self.encoder(x)
attended_features = self.attention(features)
enhanced = self.decoder(attended_features)
return enhanced
🎯 LED工程化应用
问题 :传统均匀增强浪费资源,人眼只关注特定区域
解决方案 :注意力机制实现自适应区域增强
python
def simulate_led_viewing_pattern():
"""模拟人眼观看LED屏的注意力分布"""
# 创建高斯分布的注意力热图(中心区域权重高)
H, W = 64, 64
center_y, center_x = H // 2, W // 2
y, x = torch.meshgrid(torch.arange(H), torch.arange(W))
attention_map = torch.exp(-((x - center_x)**2 + (y - center_y)**2) / (2 * (H//4)**2))
return attention_map
def train_attention_enhancement():
"""训练带注意力的LED增强模型"""
model = LEDEnhancementWithAttention()
optimizer = torch.optim.Adam(model.parameters())
# 模拟数据:低质量输入 + 注意力权重
low_quality = torch.rand(32, 3, 64, 64)
attention_weights = simulate_led_viewing_pattern().unsqueeze(0).unsqueeze(0)
for epoch in range(500):
optimizer.zero_grad()
enhanced = model(low_quality)
# 注意力加权的损失函数
loss = torch.mean(attention_weights * (enhanced - low_quality) ** 2)
loss.backward()
optimizer.step()
if epoch % 100 == 0:
print(f"Epoch {epoch}, Attention-Weighted Loss: {loss.item():.4f}")
return model
model = train_attention_enhancement()
📈 证明效果
python
def visualize_attention_enhancement(original, enhanced, attention_map):
"""可视化注意力增强效果"""
fig, axes = plt.subplots(1, 4, figsize=(16, 4))
# 原始图像
axes[0].imshow(original.permute(1, 2, 0))
axes[0].set_title('原始LED显示')
# 注意力热图
axes[1].imshow(attention_map.squeeze(), cmap='hot')
axes[1].set_title('注意力分布')
# 增强结果
axes[2].imshow(enhanced.permute(1, 2, 0))
axes[2].set_title('注意力增强后')
# 差异图
diff = torch.abs(enhanced - original)
axes[3].imshow(diff.permute(1, 2, 0))
axes[3].set_title('增强差异')
plt.tight_layout()
plt.show()
# 测试单张图像
test_img = torch.rand(3, 64, 64)
enhanced_img = model(test_img.unsqueeze(0)).squeeze(0)
attention_map = simulate_led_viewing_pattern()
visualize_attention_enhancement(test_img, enhanced_img, attention_map)
🧠 5. 模型优化与部署
🔬 数学原理深度
量化原理:将FP32权重映射到INT8,减少存储和计算
Q ( x ) = round ( x − min ( x ) max ( x ) − min ( x ) ⋅ ( 2 b − 1 ) ) Q(x) = \text{round}\left(\frac{x - \min(x)}{\max(x) - \min(x)} \cdot (2^b - 1)\right) Q(x)=round(max(x)−min(x)x−min(x)⋅(2b−1))
知识蒸馏:用小模型学习大模型的输出分布
L K D = α ⋅ L C E ( y student , y true ) + ( 1 − α ) ⋅ L K L ( p teacher , p student ) \mathcal{L}{KD} = \alpha \cdot \mathcal{L}{CE}(y_{\text{student}}, y_{\text{true}}) + (1-\alpha) \cdot \mathcal{L}{KL}(p{\text{teacher}}, p_{\text{student}}) LKD=α⋅LCE(ystudent,ytrue)+(1−α)⋅LKL(pteacher,pstudent)
🎯 LED工程化应用
问题 :复杂模型无法在LED控制器上实时运行
解决方案:模型压缩 + 硬件适配
python
def optimize_led_model_for_deployment(model):
"""为LED控制器优化模型部署"""
# 1. 模型量化
quantized_model = torch.quantization.quantize_dynamic(
model, {nn.Linear, nn.Conv2d}, dtype=torch.qint8
)
# 2. 模型剪枝
parameters_to_prune = []
for name, module in model.named_modules():
if isinstance(module, nn.Conv2d):
parameters_to_prune.append((module, 'weight'))
torch.nn.utils.prune.global_unstructured(
parameters_to_prune,
pruning_method=torch.nn.utils.prune.L1Unstructured,
amount=0.3 # 剪枝30%权重
)
# 3. ONNX导出
dummy_input = torch.randn(1, 3, 64, 64)
torch.onnx.export(
model, dummy_input, "led_enhancement_model.onnx",
input_names=['input'], output_names=['output'],
dynamic_axes={'input': {0: 'batch_size'}, 'output': {0: 'batch_size'}}
)
return quantized_model
# 验证优化效果
original_model = LEDEnhancementWithAttention()
optimized_model = optimize_led_model_for_deployment(original_model)
# 测试推理速度
import time
def benchmark_model(model, input_tensor):
start_time = time.time()
with torch.no_grad():
for _ in range(100):
_ = model(input_tensor)
end_time = time.time()
return (end_time - start_time) / 100
original_time = benchmark_model(original_model, torch.rand(1, 3, 64, 64))
optimized_time = benchmark_model(optimized_model, torch.rand(1, 3, 64, 64))
print(f"原始模型推理时间: {original_time:.4f}s")
print(f"优化模型推理时间: {optimized_time:.4f}s")
print(f"加速比: {original_time/optimized_time:.2f}x")
💡 核心能力培养总结
🎯 跨领域连接
将LED显示物理特性 与深度学习数学原理结合:
- PWM/PAM调制 → 可微分参数优化
- 人眼视觉特性 → 注意力机制
- 屏体均匀性 → 损失函数设计
🔧 复杂问题拆解
把"提升LED显示效果"拆解为:
- 低灰阶非线性校正 → 自动微分优化
- 坏点检测 → CNN模式识别
- 区域增强 → 注意力机制
- 实时部署 → 模型压缩量化
📚 快速迭代元学习
用AI工具加速学习:
- 用ChatGPT理解数学公式
- 用GitHub Copilot加速编码
- 用W&B自动跟踪实验
🚀 整合资源解决
把技术转化为产品:
- PyTorch模型 → ONNX → C++集成
- 算法改进 → 屏体验证 → 客户价值
- 个人技能 → 团队协作 → 商业结果
-
如果想了解一些成像系统、图像、人眼、颜色等等的小知识,快去看看视频吧 :
- 抖音:数字图像哪些好玩的事,咱就不照课本念,轻轻松松谝闲传
- 快手:数字图像哪些好玩的事,咱就不照课本念,轻轻松松谝闲传
- B站:数字图像哪些好玩的事,咱就不照课本念,轻轻松松谝闲传
- 认准一个头像,保你不迷路:

- 认准一个头像,保你不迷路:
-
您要是也想站在文章开头的巨人的肩膀啦,可以动动您发财的小指头,然后把您的想要展现的名称和公开信息发我,这些信息会跟随每篇文章,屹立在文章的顶部哦
