从零开始构建AI训练大模型:炉石卡牌识别实战指南
快速体验
在开始今天关于 从零开始构建AI训练大模型:炉石卡牌识别实战指南 的探讨之前,我想先分享一个最近让我觉得很有意思的全栈技术挑战。
我们常说 AI 是未来,但作为开发者,如何将大模型(LLM)真正落地为一个低延迟、可交互的实时系统,而不仅仅是调个 API?
这里有一个非常硬核的动手实验:基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。

从0到1构建生产级别应用,脱离Demo,点击打开 从0打造个人豆包实时通话AI动手实验
从零开始构建AI训练大模型:炉石卡牌识别实战指南
作为一个刚接触AI的新手,选择合适的第一项目非常重要。炉石传说卡牌识别是个绝佳的入门选择,原因很简单:
- 数据获取容易:游戏内有明确卡牌图鉴,且卡牌图片格式统一
- 问题定义清晰:每张卡牌有唯一ID,属于典型分类任务
- 计算资源友好:卡牌图像尺寸小,普通显卡即可训练
- 成果可视化强:能立即看到识别效果,成就感满满
工具选型:三大框架对比
在开始前,我们先快速对比下主流框架:
-
Scikit-learn
- 优点:API简单,适合传统机器学习
- 不足:对图像任务支持有限,需要手动提取特征
-
TensorFlow
- 优点:生产部署成熟,有TF Lite移动端方案
- 不足:静态计算图调试较麻烦
-
PyTorch
- 优点:动态图易调试,社区资源丰富
- 不足:移动端部署略复杂
对于图像识别任务,PyTorch是更好的选择,特别是它的torchvision库提供了丰富的预训练模型和图像处理工具。
数据收集:高效爬取卡牌图片
我们使用BeautifulSoup从炉石官网抓取卡牌数据:
import requests
from bs4 import BeautifulSoup
import time
def scrape_hearthstone_cards():
base_url = "https://playhearthstone.com/en-us/cards"
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(base_url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
card_links = []
for card in soup.select('.card-item a'):
card_links.append(card['href'])
# 限速避免被封
for i, link in enumerate(card_links[:100]): # 示例只爬前100张
card_url = f"https://playhearthstone.com{link}"
img_url = get_image_url(card_url)
download_image(img_url, f"card_{i}.jpg")
time.sleep(1) # 礼貌爬取
# 实际项目中需要补充get_image_url和download_image实现
反爬策略:
- 设置合理的User-Agent
- 控制请求频率(1-2秒/次)
- 使用代理IP池(如果需要大量采集)
图像预处理:OpenCV实战
收集到的图片需要统一处理:
import cv2
import numpy as np
def preprocess_image(image_path, target_size=(128, 128)):
# 读取图像
img = cv2.imread(image_path)
# 转为灰度图(根据需求可选)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 归一化尺寸
resized = cv2.resize(gray, target_size)
# 归一化像素值到0-1
normalized = resized / 255.0
# 添加通道维度(PyTorch需要CHW格式)
if len(normalized.shape) == 2:
normalized = np.expand_dims(normalized, axis=0)
return normalized
模型构建:PyTorch CNN实现
基础CNN模型结构示例:
import torch
import torch.nn as nn
import torch.nn.functional as F
class CardCNN(nn.Module):
def __init__(self, num_classes):
super().__init__()
self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1)
self.fc1 = nn.Linear(64 * 32 * 32, 128)
self.fc2 = nn.Linear(128, num_classes)
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = torch.flatten(x, 1)
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
参数选择依据:
- 首层卷积使用32个3x3滤波器,平衡特征提取能力和计算量
- MaxPooling用2x2窗口,逐步降低空间维度
- 全连接层前使用Flatten展平特征
数据增强:小样本解决方案
当数据量不足时,数据增强是关键:
from torchvision import transforms
train_transform = transforms.Compose([
transforms.RandomRotation(10), # 随机旋转±10度
transforms.RandomHorizontalFlip(p=0.5), # 50%概率水平翻转
transforms.ColorJitter(brightness=0.2, contrast=0.2), # 亮度对比度微调
transforms.RandomResizedCrop(128, scale=(0.8, 1.0)), # 随机裁剪缩放
transforms.ToTensor()
])
参数建议:
- 旋转角度不宜过大(5-15度),避免破坏卡牌特征
- 缩放范围0.8-1.0保留核心内容
- 颜色扰动幅度控制在20%以内
迁移学习:使用ResNet18
利用预训练模型快速提升效果:
import torchvision.models as models
model = models.resnet18(pretrained=True)
# 替换最后一层
num_features = model.fc.in_features
model.fc = nn.Linear(num_features, num_classes)
# 只训练最后一层(可选)
for param in model.parameters():
param.requires_grad = False
model.fc.requires_grad = True
在GTX1060上训练100张卡牌(每类5张):
- 从头训练CNN:约2小时达到85%准确率
- ResNet18微调:约30分钟达到92%准确率
生产环境优化技巧
- 模型量化减小体积:
quantized_model = torch.quantization.quantize_dynamic(
model, {nn.Linear}, dtype=torch.qint8
)
torch.save(quantized_model.state_dict(), "quantized_card_model.pth")
- 增量训练应对新卡牌:
- 冻结基础层,只训练新增类别对应的头部
- 使用更小的学习率(1e-4到1e-5)
Colab环境配置
在Google Colab中快速搭建环境:
- 新建笔记本,选择GPU运行时
- 安装必要库:
!pip install torch torchvision opencv-python beautifulsoup4
- 挂载Google Drive持久化数据:
from google.colab import drive
drive.mount('/content/drive')
后续思考
完成基础模型后,可以进一步探索:
- 如何将模型集成到炉石插件中实现实时识别?
- 如何处理卡牌叠放、半透明等复杂场景?
- 怎样优化模型在移动端的推理速度?
想亲手体验完整项目?推荐尝试从0打造个人豆包实时通话AI实验,用类似思路构建语音交互AI。我在实际动手时发现,跟着步骤操作下来,即使是新手也能在两小时内跑通全流程,对理解AI应用开发帮助很大。
实验介绍
这里有一个非常硬核的动手实验:基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。
你将收获:
- 架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)
- 技能提升:学会申请、配置与调用火山引擎AI服务
- 定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”
从0到1构建生产级别应用,脱离Demo,点击打开 从0打造个人豆包实时通话AI动手实验
更多推荐

所有评论(0)