120种小狗图像傻傻分不清?用fastai训练一个分类器

2023-11-13

640?wx_fmt=jpeg

 

作者:一杯奶茶的功夫

链接:https://www.jianshu.com/p/ab35ed21df87

 

程序员转行学什么语言?

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

 

 

这篇文章会讲解如何制作能够分类120种小狗的图像分类器。

这篇文章中所讲述的内容都是基于colab notebook和fastai技术的深度学习的应用。

为什么使用colab?

  • 使用colab的好处是,你不需要有任何显卡GPU,colab中提供了一块免费的k80带12G显存的GPU

  • colab是google提供的一个免费的Jupyter notebook的环境,可以省去安装它的功夫

为什么使用fastai?

  • fastai是一种超级简洁的深度学习工具,代码上甚至比当前Keras还要简洁。

  • 底层是pytorch,能够提供高速的处理性能。

和之前文章中的两个物种(猫和狗)的分类略有不同,这次使用的数据集全部是狗,需要把这些狗分到不同的类别中。也就是说,图片之间特征的区别的差异要比之前猫和狗分类的来的更加细微。

好吧,接下来我们看看如何动手制作。

1.在colab的作业本中配置fastai的环境

 

!curl https://course.fast.ai/setup/colab | bash

640?wx_fmt=png

2.导入fastai包

 

from fastai import *
from fastai.vision import *

3.加载kaggle.json

这里我们准备从kaggle下载所需要的狗的数据集,如果你可以从其他地方得到数据集,那么可以省略步骤3和4,按照自己的方法在环境中导入数据集即可。

 

!mkdir /content/.kaggle/
!mkdir /content/data/dogsbreed/
PATH = "/content/data/dogsbreed/"
from google.colab import files
# load from upload dialog
uploaded = files.upload()
for fn in uploaded.keys():
  with open(f'/content/.kaggle/{fn}''wb'as f:
    f.write(uploaded[fn])

4.安装kaggle环境

 

!chmod 600 /content/.kaggle/kaggle.json

!pip install kaggle
!cp /content/.kaggle/kaggle.json ~/.kaggle/kaggle.json
!kaggle config set -n path -v{/content}

import kaggle
!kaggle competitions download -p /content/data/dogsbreed/ dog-breed-identification
 

640?wx_fmt=png

从结果中可以看到,我们已经从kaggle成功的下载了数据集文件。

5.验证GPU

 
torch.cuda.is_available()
#True
torch.backends.cudnn.enabled
#True

640?wx_fmt=png

6.解压缩文件

cd /content/data/dogsbreed && unzip labels.csv.zip
cd /content/data/dogsbreed && unzip sample_submission.csv.zip
cd /content/data/dogsbreed && unzip test.zip
cd /content/data/dogsbreed && unzip train.zip

7.读取label.csv

labels_df=pd.read_csv(f'{PATH}labels.csv')
labels_df.head()

640?wx_fmt=png

这里我们可以看到labels.csv中的前五条数据

8.查看狗的类别

labels_df.pivot_table(index='breed',aggfunc=len).sort_values('id',ascending=False)

640?wx_fmt=png

这里可以看到一共有120行数据,也就是120种狗的类别,以及每种类别里面有多少条数据。

9.加载数据集并显示

data = ImageDataBunch.from_csv(
                      PATH,
                      folder='train',
                      valid_pct=0.2,
                      ds_tfms=get_transforms(),
                      size=224,
                      test='test',
                      suffix='.jpg',
                      bs=64).normalize(imagenet_stats)
data.show_batch(rows=3, figsize=(10,12))

640?wx_fmt=png

如果一切顺利,这里会显示出9张狗的图片,并且图片上方会显示相应的狗的类别。

如果只显示了图片,而图片上的标签不是类别的话,那说明数据导入部分存在问题。

OK,我们继续下一步。

10.下载与训练模型并微调

learner = create_cnn(data,models.resnet101,metrics=[accuracy])
learner.fit_one_cycle(10)

640?wx_fmt=png

这里我们设置了10个epoch,会稍微花费点时间大约40分钟。

可以看到,在最后一个epoch时候,我们的精度在89%。当然我们还可以继续调优:)

或者直接从零开始对每一层权重的训练,这都是可以的。

到这里我们就已经成功的完成了一个120种狗狗的图片分类器的制作啦,怎么样?是不是很简单?希望这篇文章可以给每一个前来阅读的朋友带来收获,对深度学习,图像分类有一个直接的体会。

如果有问题,欢迎来评论区留言讨论^^

 

(本文为AI科技大本营转载文章,转载请联系原作者)

.

人工智能的现状及今后发展趋势如何? 

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

 

群招募

 

扫码添加小助手微信,回复:公司+研究方向(学校+研究方向),邀你加入技术交流群。技术群审核较严,敬请谅解。

640?wx_fmt=jpeg

推荐阅读:

                         640?wx_fmt=png

点击“阅读原文”,查看历史精彩文章。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

120种小狗图像傻傻分不清?用fastai训练一个分类器 的相关文章

  • AutoML-第一章 超参数优化

    第一章 超参数优化 摘要 最近对具有许多超参数的复杂且计算成本很高的机器学习模型 例如自动化机器学习 AutoML 框架和深度神经网络 的兴趣引起了对超参数优化 HPO 的重新研究 在本章中 我们概述了 HPO 最主要的方法 我们首先讨论基
  • LinkedList 对比 ArrayList 的区别

    LinkedList 底层是双向链表 基于双向链表 无需连续内存 随机访问慢 要沿着链表遍历 头尾插入删除性能高 占用内存多 ArrayList 底层是数组 5 基于数组 需要连续内存 6 随机访问快 指根据下标访问 7 尾部插入 删除性能
  • 为什么32位的计算机内存最多4G

    1 计算机的最小存储单元 bit 位 一个bit用于存放一个二进制数 内存的单位 Byte 一个Byte 8bit 2 计算机会给每一个单位的内存 1Byte 分配一个地址 CPU是通过内存地址来调用内存中的数据的 调用方式是直接寻址 直接
  • ResNet50 结构

    ResNet有2个基本的block 一个是Identity Block 输入和输出的dimension是一样的 所以可以串联多个 另外一个基本block是Conv Block 输入和输出的dimension是不一样的 所以不能连续串联 它的
  • centos7 无法启动网络(systemctl start network.service )错误解决办法

    大家安装Centos7 系统后 可能会出现 网卡无法自动启动 需要在图形界面点击有线链接 才能正常上网 在这里就简单说下NetworkManager service 和network service的区别 前者是图像化管理网络连接的网络服务
  • SpringBoot定时任务设置

    1 主启动类加上注解 开启定时任务 EnableScheduling 2 创建定时任务类 import org springframework beans factory annotation Autowired import org sp
  • GAN的编写 - tensorflow形式(tensorflow与GAN同学习,重点分析训练过程)

    20200901 本文完成于20200902下午 前面内容还算整洁 越到后面因为都是自己思考的过程 就导致文章越来越乱 就算是把自己思考的过程给记录下来吧 0 引言 之前的时候对keras框架编写的GAN网络进行了介绍 GAN的学习 训练过
  • 基于控制的角度无人机集群——目标追踪

    无人机集群 目标追踪 前言 一 轨迹预测 二 单目标追踪 三 多目标追踪 前言 关于目标追踪问题 有一些研究是从视觉的角度展开 而我研究的是基于控制的角度 关于多无人机集群的一些知识点 已经在上一篇文章有了简单介绍 这次我想着重介绍一下 目
  • 4.抽样分布的概念与Python实现抽样

    1 总体与样本 在实际中 总体的分布一般是未知的 或只知道它具有某种形式而其中包含着未知参数 这时 常用的办法就是根据样本来推断总体 总体 个体 样本 总体 通常把研究对象的全体称为总体 一个总体对应于一个随机变量X 个体 把组成总体的每个
  • CTFshow 信息收集 web 6 7 8 9 10

    目录 第六关 提示 flag 第七关 提示 知识点 flag 第八关 提示 知识点 flag 第九关 提示 知识点 flag 第十关 提示 flag 第六关 提示 解压源码到当前目录 测试正常 收工 这道题考的是备份文件www zip 根据
  • 解决mysql占用IO过高

    created 2023 01 30T10 14 00 UTC 08 00 tags source https www bbsmax com A Ae5RyA0AJQ author 解决mysql占用IO过高 Excerpt 1 日志产生的
  • 西门子HMI设备与V20变频器如何实现通讯?

    通常情况下 要实现HMI设备与V20变频器的通讯 需要一个支持USS通讯或MODBUS通讯的PLC 比如S7 200系列PLC 其通讯电缆连接如图1所示 PLC的一个通讯端口与触摸屏连接 可以采用PPI协议通讯 PLC的另一个通讯端口与V2
  • C语言自定义类型-结构体

    一 结构体声明 C语言中为我们准备了许多现成的数据类型例如 int short float double char long long long 等等 但是我们描述一些复杂的事物 光靠上述的数据类型是描述不清的 例如 我们描述一个大学生 可
  • 安卓Android_手机安装burp的https_CA证书

    安卓Android 手机安装burp的https CA证书 文章目录 安卓Android 手机安装burp的https CA证书 1 打卡电脑wif热点 手机连上电脑的热点 2 burp点击 Proxy settings 3 点击add 新
  • java 数组中插入元素_Java数组添加元素

    java 数组中插入元素 How to add elements to an array in java We know that java array size is fixed so we can t add elements to a
  • jvm虚拟机所有垃圾回收器详细介绍

    jvm虚拟机所有垃圾回收器详细介绍 文章目录 jvm虚拟机所有垃圾回收器详细介绍 垃圾回收器概述 1 Serial回收器 串行回收 总结 2 ParNew回收器 并行回收 3 Parallel Scavenge回收器 吞吐量优先 4 CMS
  • 论文解读 《Enhancing Underwater Imagery using Generative Adversarial Networks》ICRA2018

    项目 http irvlab cs umn edu enhancing underwater imagery using gans 论文 https arxiv org pdf 1801 04011 pdf 代码 https github
  • 算法精解_C语言 链表_单链表(接口定义+类型实现)

    链表可以说是一种最为基础的数据结构 链表由一组元素以一种特定的顺序组合或链接而成 在维护数据的集合时很有用 这一点同我们常用的数组很相似 然而 链表在很多情况下比数组更有优势 特别是在执行插入和删除操作时链表拥有更高的效率 链表需要动态的开
  • 组件化依赖管理办法

    theme channing cyan 在组件化过程中 面临着非常多的复用 切换等场景 对于组件化中的dsl文件 也可以尝试将其组件出来 更好的复用 更好的管理 一 利用buildSrc buildscript 对dsl 文件进行组件化 1
  • org.postgresql.util.PSQLException: 错误: 关系 “courseinformation“ 不存在

    问题描述 在java项目中连接PSQL数据库 对courseinformation表进行操作时 运行报错 org postgresql util PSQLException 错误 关系 courseinformation 不存在 已知解决方

随机推荐

  • BUUCTF系列 // [极客大挑战 2019] LoveSQL

    前言 本题知识点 SQL注入 WP 这题居然是个连续剧 首先尝试使用上一题的解法绕过看看 上一题 WP 的 传送门 结果如下 注意到密码有些奇怪 尝试着用 MD5 解码失败 也没啥思路 最后事实证明确实也用不到这玩意 故回到 SQL 注入上
  • 人工智能数学基础8:两个重要极限及夹逼定理

    点此跳转到老猿Python博文目录 一 极限公式1 二 极限公式2 e为常数2 71828 变体 使用案例 三 夹逼定理 夹逼定理英文原名Squeeze Theorem 也称两边夹定理 夹逼准则 夹挤定理 挟挤定理 三明治定理 是判定极限存
  • JAVA程序设计:最短回文串(LeetCode:214)

    给定一个字符串 s 你可以通过在字符串前面添加字符将其转换为回文串 找到并返回可以用这种方式转换的最短回文串 示例 1 输入 aacecaaa 输出 aaacecaaa 示例 2 输入 abcd 输出 dcbabcd 思路 这题O N 2
  • python-selenium-运行js代码--下拉操作

    使用python selenium运行js代码完成下拉操作 在某些情况 当我们下拉到浏览器 浏览器才会给我们加载数据 所有我们需要js带代码 driver execute script 写入你要执行的js代码 下拉的js代码 documen
  • 什么是CRUD( What is CRUD)?

    在很多技术性的文章 特别是有关数据库类的文章中 经常会看到一个缩写 CRUD 那什么是CRUD呢 CRUD其实是数据库基本操作中的Create 创建 ReadRetrieve 读取 Update 更新 Delete 删除 而这里的Creat
  • pycharm中pygame模块的安装与用法

    一 pygame的安装 本文章主要展示pycharm中的pygame模块的安装 打开pycharm 在左上角点file 找到settings 如图 进入后 找到Project untitled下的Project interperter 右边
  • 谷歌VAD静音检测py-webrtcvad使用详解

    一 前言 不知道有没有人和我一样看的官方示例一脸蒙 什么采样率除以时间 看到就头大 还是英文头更大了 好了废话结束 上翻译改编版 二 人话翻译版代码 如果你问我有些行为什么没有注释 import collections import con
  • 小记stm32实现串口接收的四种方法(hal库)

    开发环境 STM32CUBMX 正点原子STM32F407ZGT6探索者开发板 MDK ARM 5 31 第一种方式 直接接收 配置外部时钟源 2 配置时钟树 3 配置串口一 生产代码后进入工程 重定向printf到串口1 建议在usart
  • 攻防世界(pwn)Recho(XCTF 3rd-RCTF-2017) writeup

    64位程序 保护如上 可以分析出程序大意 先读取字符串长度存入nptr与v7中 如果字符串长度小于15时将v7设为16 大于15则不变 然后读取v7个字符放入buf中 最后在末尾添上0并打印出来 漏洞很显然 如果v7很大 则read会造成溢
  • ChatGPT实战:创业咨询,少走弯路,少踩坑

    用九死一生形容创业再适合不过 不过一旦成功回报也很诱人 这也是为什么那么多人下场创业 纸上得来终觉浅 绝知此事要躬行 创过业的人都知道其中的心酸 而他们也建议你去创业 因为那真不是一般人能干的事 又想创业 又想少踩坑 创业者肯定是想多向走过
  • Matlab中的FCM算法代码及中文详解

    Matlab中的FCM算法代码及中文详解 转自 http xiaozu renren com xiaozu 106512 336681453 function center U obj fcn FCMClust data cluster n
  • 实习僧-竞品分析报告

    找工作是应届毕业生们绕不开的话题 本文从PEST分析 行业概况 用户体验等角度 做了一份实习僧vs前程无忧的竞品分析报告 一 报告概述 1 体验环境 产品体验 软件版本 实习僧 4 14 0 前程无忧学生版1 2 0 手机系统 Harmon
  • cadence OrCAD原理图输出-pdf文件和bom表

    软件版本 16 6 一 输出pdf文件 生成pdf文件前 需要首先安装好pdf虚拟打印机 在打印时选择pdf打印机即可 在项目管理中 选择dsn文件 主菜单file gt print 选项 出现打印机对话框 默认 scale to pape
  • R语言-ggplot2图形语法

    简介 在R里 主要有两大底层图层系统 一是base图形系统 二是gird图形系统 lattice包与ggplot2包正是基于gird图形系统构建的 他们都有自己独特的图形语法 ggplot2有着自己独特的图形语法 这套语法归纳起来包括 数据
  • 魅族满载诚意强势回归,重启全胜时代?

    3月30日魅族在上海梅赛德斯 奔驰文化中心举办了史上最大规模的新品发布会 吸引了众多媒体 行业人士和魅友的关注 在发布会上 魅族正式推出了魅族20系列旗舰手机 以及Flyme 10系统 Flyme Auto车机系统等全场景融合体验产品 全方
  • JS 随机生成十个带颜色的li

    html和css部分
  • 量化投资学习-37:底部涨停板操作

    涨停板选股 1 异动 主力的拉升前的筹码集中度和压力试盘 金针探底 拉升回落 2 时间 10 00之前涨停最佳 10 30之前凑合 下午不可 3 空间 底部第一个涨停 后续还有较大的涨幅空间 4 缺口 通过缺口 快速脱离主力的成本区和价格底
  • java注解开发

    用xml配置文件方式是Servlet2 5版本规范的 经过逐步演变注解来时流行 因为更方便了 Servlet3 0以后也支持注解开发了 自动注解实现步骤 创建JavaWeb工程 并移除web xml 编写Servlet 继承HttpServ
  • react学习笔记-从井字棋开始(3)

    函数函组件 如果你想写的组件只包含一个 render 方法 并且不包含 state 那么使用函数组件就会更简单 我们不需要定义一个继承于 React Component 的类 我们可以定义一个函数 这个函数接收 props 作为参数 然后返
  • 120种小狗图像傻傻分不清?用fastai训练一个分类器

    作者 一杯奶茶的功夫 链接 https www jianshu com p ab35ed21df87 程序员转行学什么语言 https edu csdn net topic ai30 utm source csdn bw 这篇文章会讲解如何