前面的所有内容与实验,全部都是关于“推理识别(inference)”的部分,主要是为了让用户先体会到“最终结果”,包括需要花费的精力、以及最后得到的效率。由于项目提供非常多的预训练模型文件,因此我们可以很轻松地调用这些资源,去进行推理计算,并且得到相当惊人的性能。
然而,真正要完成一个深度学习的项目,还是必须完成前面阶段的模型训练部分,本文的重点就是带着大家,利用Hello AI World所提供的资源,开始进行简单的图像分类应用的模型训练。
所有深度学习的模型训练,都必须具备以下的几个元素,缺一不可:
事实上数据集的质量,直接关系到训练出来的模型质量,就如同做菜一样,如果食材不够好,再厉害的厨师也没办法做出真正的好菜。
数据集的来源主要有三个:
这个部分是深度学习的精髓,目前在几个主流神经网络模型之间,很难去评孰优孰劣,就像大餐厅的名厨一样,各有侧重点与风格。在这里,为了要能在Jetson设备上进行训练,因此我们挑选ResNet-18这个网络。
这个就是作为深度学习的模型训练与推理识别的重要工具,目前最主流的应该是Tensorflow,不过这里为了配合迁移学习(transfer learning)的特性,因此选择用pytorch这个轻量级的框架工具
事实上训练用的设备,会直接影响到网络模型与框架工具的选择。这里我们使用NVIDIA Jetson系列设备进行训练,就必须选择轻量级的网络模型与框架工具。
现在就开始我们的图像分类模型训练实验,在开始实验之前,还是有以下几个准备动作需要确认:
1 2 |
|
1 2 3 4 |
将“/mnt/4GB.swap none swap sw 0 0”加入 /etc/fstab 文件后重启 |
1 2 3 4 |
|
接下来就正式进入模型训练的环节,项目作者已经为我们提供基于pytorch的图像分类的Python训练代码,为了便于操作,先将工作目录移到代码的位置:
1 |
|
里面的train.py与onnx_export.py是这个训练过程会用到的两只程序,至于代码内容则不作说明。
接下去的任务就是获取数据集。项目作者提供了两个现成的数据集“cat_dog”与“PlantCLEF_Subset”,除了数据集本身的内容(含类别)不一样之外,其余操作过程是完全一样的,因此这里我们只演示“cat_dog”这个数据集的完整过程,将“PlantCLEF_Subset”的实验留给读者去比照办理。
为了保持指令参数的一致性,建议将数据下载到data目录下,并且将生成的模型文件制定到models路径,现在就开始执行完整的步骤:
1
2
3
4
5 |
# 下载并解压缩 cat_dog.tar.gz(758MB)
# 下载并解压缩 PlantCLEF_Subset.tar.gz(1.34GB)
|
检查看看cat_dog与PlantCLEF_Subset下面,是否都存在<test>、<train>、<val>三个目录以及一个labels.txt文件?
在cat_dog下面的test、train、val目录下,应该都有cat与dog子目录,这个子目录名称会与labels.txt内容对应上。根据这样的原则,请检视一下PlantCLEF_Subset数据集,是否也具备相同的特性?这里应该有20种植物名称分类。
接下去回到train.py与onnx_export.py工作目录下,准备开始执行模型训练任务:
1 2 |
|
由于训练程序使用了迁移学习的技巧,因此在第一次开始训练之前,会先下载合适的预训练模型,然后让这些数据在这个模型基础上进行叠加训练,一方面提高精准度,另一方面也会减少训练时间,这就是“迁移学习”的迷人之处。
系统预设使用resnet-18这个网络,这是比较适合Jetson Nano(含2GB)的轻量级模型,我们也可以使用 --arch= 去指定使用其他网络模型。如果这时候打开jetson-stats监控工具,可以看到GPU持续处于满载状态。
这个cat_dog数据集共有6200张图片,其中训练集5,000张、验证集1,000张、测试集200张,系统预设的epoch数为35,可使用--epoch=去改变epoch数。epoch数量设为多少比较合适?这个没有一定的答案,我们需要观察训练过程中Loss值的变化。
如此的数据量在Jetson Nano 2GB上的训练时间,总共花了285分钟(4小时45分钟)
现在训练完成之后,下一步就是要把这个训练的模型,使用onnx_import.py将pytorch模型文件转换成ONNX格式,以便在后面使用时很轻松地转换成TensorRT加速引擎。
1 |
|
会在models/cat_dog目录下生成“resnet18.onnx”文件,最后以这个文件为基础,调用前面所熟悉的imagenet图像分类指令,来进行推理计算任务,请执行以下代码:
1 2 3 |
--model=$NET/resnet18.onnx --labels=$DATASET/labels.txt \ #模型的文件 --input_blob=input_0 --output_blob=output_0 |
现在使用自己训练的模型来执行imagenet.py,因此需要个别给定--model、--labels的路径,以及--input_blob、--output_blob的内容,其他部分与前面讲解过的用法是一致的,可以用视频、摄像头、文件夹作为输入源,检测一下识别的效果如何?
请自行尝试PlantCLEF_Subset这个关于植物类别的数据集,按照上面完全一样的做法,自行走过一遍,这会让你更加熟悉与掌握整个“图像分类”的应用,从数据集收集、模型训练,到推理识别这三个阶段。
最后,如果您需要建立自己专属的数据集的话,这个Hello AI World项目还提供一个camera-capture这个现场抓图的工具,开启之后会出现一个控制面板(如下图左),可选择Classification或Detection功能,同时还会启动一个摄像头画面市场(如下图右),可以自行调整所需要的的分类与指定路径。
收集完足够的图像数据之后,再按照前面的步骤进行模型训练,就能建立自己专属的模型文件,给自己的Jetson设备进行图像分类的推理识别应用。
好文章,需要你的鼓励
微软推出 Copilot+ PC 标准,要求配备高性能 NPU,引发 AI PC 市场格局变化。英伟达虽在数据中心 AI 领域占主导,但在 PC 端面临挑战。文章分析了英伟达的 AI PC 策略、NPU 与 GPU 的竞争关系,以及未来 GPU 可能在 Copilot+ 功能中发挥作用的前景。
专家预测,随着人工智能技术的迅速发展和广泛应用,2025 年可能成为 AI 泡沫破裂的关键一年。尽管 AI 仍有望在多模态模型和自动机器学习等领域取得突破,但技术瓶颈、投资回报率下降、监管趋严以及环境和伦理问题等因素可能导致 AI 热潮降温。未来 AI 发展将更注重平衡和可持续性。
Google 推出名为 Titans 的新型 AI 架构,是 Transformer 的直接进化版。Titans 引入了神经长期记忆、短期记忆和基于惊喜的学习系统,使 AI 更接近人类思维方式。这一突破性技术有望彻底改变 AI 范式,推动机器智能向人类认知迈进一大步。
主动型 AI 是人工智能的下一次进化,它不仅能生成内容,还能自主决策和追求目标。这种 AI 可以设定自己的目标,制定策略并根据情况调整方法,实现真正的自主性。它将彻底改变机器与世界的互动方式,为人机协作开启新的可能性,但也带来了透明度和伦理等挑战。