从零构建你的第一个AI模型

111 阅读2分钟

标签:#深度学习 #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. 仅训练新增分类层(1 epoch)
    2. 微调全部层(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

四、效果展示

image.png