标签:#深度学习 #fastai #图像分类
一、代码全景解析
1. 整体架构
from fastai.vision.all import *
from fastai.vision.core import PILImage
from pathlib import Path
def setup_data():...
def create_model(dls):...
def train_model(learn):...
def predict_image(learn, img_path):...
def main():...
代码采用模块化设计,包含数据准备、模型构建、训练和预测四大核心模块,体现了标准的深度学习工作流程。
二、核心代码详解
1. 数据准备(setup_data)
dls = ImageDataLoaders.from_folder(
current_file,
valid_pct=0.2, # 20%作为验证集
seed=42, # 固定随机种子确保可复现性
batch_size=8, # 适合显存较小的配置
num_workers=0, # Windows系统兼容设置
item_tfms=[ToTensor(), Resize(224)], # 基础预处理
batch_tfms=[*aug_transforms(size=224, min_scale=0.75)] # 数据增强
)
关键技术点:
- 自动划分验证集(valid_pct)
- 数据增强策略(aug_transforms)
- 图像标准化处理(ToTensor)
2. 模型构建(create_model)
learn = vision_learner(dls, resnet18, pretrained=True)
模型选择:
- 使用ResNet18预训练模型
- 自动适配分类头(基于数据集类别数)
- 迁移学习策略(冻结底层参数)
3. 模型训练(train_model)
learn.fine_tune(3)
训练策略:
-
两阶段训练:
- 仅训练新增分类层(1 epoch)
- 微调全部层(2 epochs)
-
自动学习率调整
-
内置最佳实践(如权重衰减、动量参数)
4. 预测功能(predict_image)
pred, pred_idx, probs = learn.predict(img)
return {
'prediction': pred,
'probability': float(probs[pred_idx])
}
输出解析:
- 返回最高概率预测结果
- 概率值转换为Python原生float类型
- 支持单张图像推理
三、关键知识点总结
1. 迁移学习实践
- 使用ImageNet预训练模型
- 冻结底层卷积参数
- 仅微调最后全连接层
2. 数据增强策略
| 增强方式 | 作用 | 参数配置 |
|---|---|---|
| 随机旋转 | 提升方向不变性 | max_rotate=10 |
| 亮度调整 | 增强光照鲁棒性 | max_lighting=0.2 |
| 透视变换 | 模拟不同拍摄角度 | max_warp=0.1 |
3. 学习率自动调整
fastai采用Leslie Smith提出的1cycle策略,自动寻找最佳学习率范围。
4. 预测流程优化
- 使用PILImage处理输入
- 自动适配模型输入尺寸(224×224)
- 概率值格式化输出(保留两位小数)
5. 开发环境注意事项
- Windows系统需设置
num_workers=0 - 路径处理使用
pathlib库 - 显存不足时可减小batch_size