CNTXJ.NET | 通信界-中国通信门户 | 通信圈 | 通信家 | 下载吧 | 说吧 | 人物 | 前瞻 | 智慧(区块链 | AI
 国际新闻 | 国内新闻 | 运营动态 | 市场动态 | 信息安全 | 通信电源 | 网络融合 | 通信测试 | 通信终端 | 通信政策
 专网通信 | 交换技术 | 视频通信 | 接入技术 | 无线通信 | 通信线缆 | 互联网络 | 数据通信 | 通信视界 | 通信前沿
 智能电网 | 虚拟现实 | 人工智能 | 自动化 | 光通信 | IT | 6G | 烽火 | FTTH | IPTV | NGN | 知本院 | 通信会展
您现在的位置: 通信界 >> 通信线缆 >> 技术正文
 
使用Fastai构建食物图像分类器
[ 通信界 | 磐创AI | www.cntxj.net | 2022/10/30 18:49:25 ]
 

背景

社交媒体平台是分享有趣的图像的常用方式。食物图像,尤其是与不同的美食和文化相关的图像,是一个似乎经常流行的话题。Instagram 等社交媒体平台拥有大量属于不同类别的图像。我们都可能使用谷歌图片或 Instagram 上的搜索选项来浏览看起来很美味的蛋糕图片来寻找灵感。但是为了让这些图片可以通过搜索获得,我们需要为每张图片设置一些相关的标签。

这使得搜索关键字并将其与标签匹配成为可能。由于手动标记每张图像极具挑战性,因此公司使用 ML (机器学习)和 DL (深度学习)技术为图像生成正确的标签。这可以使用基于一些标记数据识别和标记图像的图像分类器来实现。

在本文中,让我们使用 fastai 构建一个图像分类器,并使用一个名为“ fastai”的库来识别一些食物图像。

Fastai 简介

Fastai 是一个开源深度学习库,它为从业者提供高级组件,可以快速轻松地在传统深度学习领域产生最先进的结果。它使研究人员可以混合和组合低级组件以创建新技术。它旨在在不影响可用性、灵活性或性能的情况下实现这两个目标。

由于 fastai 是用 Python 编写的,并且基于 PyTorch,因此需要 Python 知识才能理解本文。我们将在 Google Colab 中运行此代码。除了 fastai,我们将使用图形处理单元 (GPU) 以尽可能快地获得结果。

使用 Fastai 构建图像分类器

让我们从安装 fastai 库开始:

!pip install -Uqq fastai

如果你使用的是 Anaconda,请运行以下命令:

conda install -c fastchan fastai anaconda

让我们导入分类任务所需的包。该库分为模块,其中最常见的是表格、文本和视觉。因为我们手头的任务包括视觉,所以我们从vision库中导入我们需要的所有功能。

from fastai.vision.all import *

通过 fastai 库可以获得许多学术数据集。其中之一是 FOOD,它是 URL 下的URLs. FOOD

第一步是获取并提取我们需要的数据。我们将使用 untar_data 函数,它会自动下载数据集并解压它。

foodPath = untar_data(URLs.FOOD)

该数据集包含 101,000 张图像,分为 101 个食物类别,每个类别有 250 个测试图像和 750 个训练图像。训练中的图像没有被清理。所有图像的大小都调整为每边最大 512 像素。

下一个命令将告诉我们必须处理多少图像。

len(get_image_files(foodPath))

此外,使用以下命令,我们将打印 Food 数据集的元目录的内容。

print(os.listdir(foodPath))

meta文件夹包含八个文件,其中四个是文本文件:train.txt、test.txt、classes.txt和labels.txt。train.txt 和 test.txt 文件分别包含训练集和测试集的图像列表。classes.txt 文件包含所有食品类别和标签的列表。txt 提供了所有食品图像标签的列表。该目录还包含一个带有预训练模型的 .h5 文件和一个包含 101,000 张 JPG 格式图像的图像文件夹。最后,训练集和测试集以 JSON 格式提供。

要查看所有图像类别,我们将运行以下命令:

image_dir_path = foodPath/'images'

image_categories = os.listdir(image_dir_path)

print(image_categories)

然后,我们将执行以下命令以查看 101,000 张图像集合中的示例图像。

img = PILImage.create('/root/.fastai/data/food-101/images/frozen_yogurt/1942235.jpg')

img.show();

我们将使用 pandas 函数读取 JSON 格式的训练和测试文件。JSON 是一种以人类可读的形式存储信息的数据格式。

以下代码从目录中读取 train.json 文件并将结果保存在 df_train 数据帧中。

df_train=pd.read_json('/root/.fastai/data/food-101/train.json')

然后可以使用 head() 函数打印数据帧的标题,如下所示。

df_train.head()

同样,通过使用 pandas 函数,我们将读取 test.json 文件并将其存储在 df_test 数据帧中。

df_test=pd.read_json('/root/.fastai/data/food-101/test.json')

df_test.head()

我们正在创建三个带有我们选择的食物名称的标签来对食物图像进行分类。

labelA = 'cheesecake'

labelB = 'donuts'

labelC= 'panna_cotta'

现在我们将创建一个 for 循环,它将遍历我们下载的所有图像。在此循环的帮助下,我们将删除没有标签 A、B 或 C 的图像。此外,我们使用以下函数重命名具有各自标签的图像。

for img in get_image_files(foodPath):

 if labelA in str(img):

  img.rename(f"{img.parent}/{labelA}-{img.name}")

 elif labelB in str(img):

   img.rename(f"{img.parent}/{labelB}-{img.name}")

 elif labelC in str(img):

   img.rename(f"{img.parent}/{labelC}-{img.name}")

 else: os.remove(img)

让我们使用以下命令检查运行循环后获得的图像数量:

len(get_image_files(foodPath))

让我们在三个选择的食物中尝试一个示例标签,看看重命名是否正确。

def GetLabel(fileName):

return fileName.split('-')[0]

GetLabel("cheesecake-1092082.jpg")

以下代码生成一个 DataLoaders 对象,该对象表示训练和验证数据的混合。

dls = ImageDataLoaders.from_name_func(

   foodPath, get_image_files(foodPath), valid_pct=0.2, seed=42,

   label_func=GetLabel, item_tfms=Resize(224))

dls.train.show_batch()

在这种情况下,我们将:

· 使用路径选项指定下载和提取数据的位置。

· 使用 get_image_ files 函数从指定位置收集所有文件名。

· 对数据集使用 80–20 拆分。

· 使用 GetLabel 函数从文件名中提取标签。

· 将所有图像调整为相同大小,即 224 像素。

· 使用 show_batch 函数生成一个输出窗口,显示带有指定标签的训练图像网格。

是时候将模型放置到位了。使用 ResNet34 架构,我们将通过专注于称为 vision_learner () 的单个函数调用来构建卷积神经网络。

vision_learner 函数(也称为 cnn_learner)有利于训练计算机视觉模型。它包括你的原始图像数据集、预训练模型 resnet34 和一个度量错误率,它决定了在验证数据中错误识别的图像的比例。resnet34 中的 34 指的是这种架构类型中的层数(其他选项有 18、50、101 和 152)。使用更多层的模型需要更长的训练时间并且更容易过度拟合。

Fastai 提供了一个“fine_tune”函数,用于调整预训练模型,以使用我们选择的数据解决我们的特定问题。为了训练模型,我们将 epoch 数设置为 10。

learn = vision_learner(dls, resnet34, metrics=error_rate, pretrained=True)

learn.fine_tune(epochs=10)

也可以通过将指标替换为“accuracy”来检查相同模型的准确性。

从上面的结果,我们可以说,即使只有 10 个 epoch,预训练的 ResNet34 模型在多标签分类任务中表现出 > 85% 的良好准确率。如果我们增加 epoch 的数量,模型的准确性可能会提高。

现在,让我们测试一些示例图像来检查我们的模型的性能。

示例图片 #1

示例图片 #2

示例图片 #3

从上面的结果,我们可以说我们的模型能够正确识别样本图像。

训练模型后,我们可以将其部署为 Web 应用程序供其他人使用。尽管 fastai 主要用于模型训练,但你可以使用“learn.export”函数快速导出 PyTorch 模型以用于生产。

结论

在本教程中,我们学习了如何使用基于 PyTorch 的 fastai 构建食物图像分类器。可以使用 Heroku 或 Netlify 等服务部署此模型,以使此模型可用作 Web 应用程序。

以下是本文的一些主要内容:

我们可以使用 fastai 以最少的代码建立深度学习模型。因此,fastai 使得使用 PyTorch 进行深度学习任务变得更加容易。

食品分类对于计算机视觉应用来说是一项具有挑战性的任务,因为根据装饰和供应方式的不同,同一种食品在不同地方看起来可能会有很大差异。尽管如此,通过利用迁移学习的力量,我们可以使用预训练模型来识别食品并对其进行正确分类。

我们为此分类器使用了预训练模型 ResNet34。但是,你可以使用其他预训练模型,如 VGG、Inception、DenseNet 等,来构建你自己的模型。

 

1作者:磐创AI 来源:通信界 编辑:顾北

 

声明:①凡本网注明“来源:通信界”的内容,版权均属于通信界,未经允许禁止转载、摘编,违者必究。经授权可转载,须保持转载文章、图像、音视频的完整性,并完整标注作者信息并注明“来源:通信界”。②凡本网注明“来源:XXX(非通信界)”的内容,均转载自其它媒体,转载目的在于传递更多行业信息,仅代表作者本人观点,与本网无关。本网对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。③如因内容涉及版权和其它问题,请自发布之日起30日内与本网联系,我们将在第一时间删除内容。 
热点动态
普通新闻 中信科智联亮相2023中国移动全球合作伙伴大会
普通新闻 全球首个基于Data Channel的新通话商用网络呼叫成功拨通
普通新闻 中国联通:以优质通信服务 助力“一带一路”共建繁华
普通新闻 杨杰:未来五年,智算规模复合增长率将超过50%
普通新闻 长沙电信大楼火灾调查报告发布:系未熄灭烟头引燃,20余人被问责
普通新闻 邬贺铨:生态短板掣肘5G潜能发挥,AI有望成“破局之剑”
普通新闻 工信部:加大对民营企业参与移动通信转售等业务和服务创新的支持力
普通新闻 摩尔线程亮相2023中国移动全球合作伙伴大会,全功能GPU加速云电脑体
普通新闻 看齐微软!谷歌表示将保护用户免受人工智能版权诉讼
普通新闻 联想王传东:AI能力已成为推动产业升级和生产力跃迁的利刃
普通新闻 APUS李涛:中国的AI应用 只能生长在中国的大模型之上
普通新闻 外媒:在电池竞赛中,中国如何将世界远远甩在后面
普通新闻 三星电子预计其盈利能力将再次下降
普通新闻 报告称华为5G专利全球第1 苹果排名第12
普通新闻 党中央、国务院批准,工信部职责、机构、编制调整
普通新闻 荣耀Magic Vs2系列正式发布,刷新横向大内折手机轻薄纪录
普通新闻 GSMA首席技术官:全球连接数超15亿,5G推动全行业数字化转型
普通新闻 北京联通完成全球首个F5G-A“单纤百T”现网验证,助力北京迈向万兆
普通新闻 中科曙光亮相2023中国移动全球合作伙伴大会
普通新闻 最高补贴500万元!哈尔滨市制定工业互联网专项资金使用细则
通信视界
邬贺铨:移动通信开启5G-A新周期,云网融合/算
普通对话 中兴通讯徐子阳:强基慧智,共建数智热带雨
普通对话 邬贺铨:移动通信开启5G-A新周期,云网融合
普通对话 华为轮值董事长胡厚崑:我们正努力将5G-A带
普通对话 高通中国区董事长孟樸:5G与AI结合,助力提
普通对话 雷军发布小米年度演讲:坚持做高端,拥抱大
普通对话 闻库:算网融合正值挑战与机遇并存的关键阶
普通对话 工信部副部长张云明:我国算力总规模已居世
普通对话 邬贺铨:我国互联网平台企业发展的新一轮机
普通对话 张志成:继续加强海外知识产权保护工作 为助
普通对话 吴春波:华为如何突破美国6次打压的逆境?
通信前瞻
亨通光电实践数字化工厂,“5G+光纤”助力新一
普通对话 亨通光电实践数字化工厂,“5G+光纤”助力新
普通对话 中科院钱德沛:计算与网络基础设施的全面部
普通对话 工信部赵志国:我国算力总规模居全球第二 保
普通对话 邬贺铨院士解读ChatGPT等数字技术热点
普通对话 我国北方海区运用北斗三号短报文通信服务开
普通对话 华为云Stack智能进化,三大举措赋能政企深度
普通对话 孟晚舟:“三大聚力”迎接数字化、智能化、
普通对话 物联网设备在智能工作场所技术中的作用
普通对话 软银研发出以无人机探测灾害被埋者手机信号
普通对话 AI材料可自我学习并形成“肌肉记忆”
普通对话 北斗三号卫星低能离子能谱仪载荷研制成功
普通对话 为什么Wi-Fi6将成为未来物联网的关键?
普通对话 马斯克出现在推特总部 收购应该没有悬念了
普通对话 台积电澄清:未强迫员工休假或有任何无薪假
普通对话 新一代载人运载火箭发动机研制获重大突破
推荐阅读
Copyright @ Cntxj.Net All Right Reserved 通信界 版权所有
未经书面许可,禁止转载、摘编、复制、镜像