基于cnn的通用图像分类项目

背景

项目上需要做一个图像分类的工程。本人希望这么一个工程可以帮助学习ai的新同学快速把代码跑起来,快速将自己的数据集投入到实战中!

代码仓库地址:imageClassifier: 图片分类器

数据处理

自己准备的分类图像,按照文件夹分类,放在dataset目录下。

运行一下data_partitioning的方法,会自动按照比例将数据划分为训练集和测试集。存放在data目录下。

执行完之后可以看到data文件夹下出现了train文件夹和test文件夹,这两个文件夹下按照分类也做了数据划分。

模型训练

在train_model.py里面首先是超参数设置。这里面的数值都有默认值,根据数据集不同,经常修改的值通常是批次大小和轮数。

举例:如果需要将训练轮次设置为50轮,批次大小设置为64的话,只需要按照下图所示,在ide的运行配置里加上即可。注意,不同的配置字段之间用空格隔开。

关于轮次大小和批次大小的设置,这里建议:

  1. 第一次训练时可以将轮次调整为一个较大的值,数据量越大建议轮数越高。由于代码里存在早停机制,所以即使轮数大到过于夸张,在训练后期由于准确率提升不明显,训练流程会自动停止。
  2. 第一次训练可以将批次大小调整为一个较小的值。由于训练期间同一批次的数据会一起放入显存中,所以批次过大容易出现爆显存的现象。当训练期间发现显存没有被占满时,可以提高批次大小,提升训练速度。

执行以上方法就可以开始训练了。图像分类的类别通过文件夹数量获取即可,不需要人为设置。

训练后参数文件会保存在dict文件夹下面。

模型测试

在训练完成后,到model_test.py文件里运行代码即可,会把在测试集中的数据完整验证一遍,计算出准确率,并打印出每条数据的预测值与真实值。

模型推理

推理过程我们要做的是,导入一张图片,经过模型运算得出其分类类型。在model_inference.py里面,我们需要指定一张用来推理的图片。图片的路径放在inference目录下,图片名称可以改成真实的图片名称。

运行model_inference.py的方法,即加载模型->加载图片->模型推理->得出预测值。

示例

在master分支上是一个猫狗分类的项目。其中dog文件夹里有4999张狗的图片,cat文件夹里有4990张猫的图片。

下图为训练100轮次的loss变化与准确率变化。由于训练阶段中也会切分训练-验证数据集,所以通常是通过val-acc来观察实际的准确率,可以看到最后准确率约达到90%。

运行模型测试代码,得出准确率为93.8%。

在inference文件夹里放入一个猫/狗图片,注意这张图片不要来自于训练数据。

运行推理程序,得出分类类型为cat。

相关推荐
taxunjishu26 分钟前
DeviceNet 转 Profinet:西门子 S7 - 1500 PLC 与欧姆龙伺服电机在汽车焊装生产线夹具快速切换定位的通讯配置案例
人工智能·区块链·工业物联网·工业自动化·profinet·devicenet·总线协议转换网关
脑极体1 小时前
华为,让金融智能体月映千江
人工智能·华为·金融
万俟淋曦2 小时前
【ROS2】通讯机制 Topic 常用命令行
人工智能·ai·机器人·ros·topic·ros2·具身智能
武汉唯众智创2 小时前
基于边缘计算的智能家居综合实训室设计方案
人工智能·智能家居·边缘计算·智能家居实训室·智能家居综合实训室·智能家居实验室·智能家居综合实验室
倔强青铜三2 小时前
苦练Python第52天:一口气吃透Python的“七脉神剑”:生命周期+字符串魔术方法全解析
人工智能·python·面试
RIDDLE!2 小时前
Python-OpenCV图像边缘检测算法全解析
人工智能·opencv·计算机视觉
格林威2 小时前
机器视觉选Halcon还是OpenCV?
人工智能·数码相机·opencv·yolo·计算机视觉·视觉检测·制造
ISACA中国3 小时前
《第四届数字信任大会》精彩观点:腾讯经验-人工智能安全风险之应对与实践|从十大风险到企业级防护架构
人工智能·安全·架构·漏洞案例·大模型越狱·企业级防护
James. 常德 student3 小时前
华为 ai 机考 编程题解答
java·人工智能·华为
居然JuRan3 小时前
Qwen3-8B vLLM 部署调用
人工智能