当前位置: 首页 > news >正文

计算机视觉入门 1)卷积分类器

目录

  • 一、卷积分类器(The Convolutional Classifer)
    • 训练分类器
  • 二、【代码示例】汽车卡车图片分类器
      • 步骤1. 导入数据
      • 步骤2 - 定义预训练模型
      • 步骤3 - 连接头部
      • 步骤4 - 训练模型

一、卷积分类器(The Convolutional Classifer)

卷积神经网络(卷积网络、CNN)是在图像分类任务上表现最好的图像分类器。

用于图像分类的卷积神经网络由两部分组成:卷积基础(convolutional base)和稠密头部(dense head):

  • 卷积基础用于从图像中提取特征。它主要由执行卷积操作的层组成,但通常还包括其他类型的层。
  • 头部用于确定图像的类别。它主要由稠密层组成,但也可能包括其他层,如dropout层。
    卷积神经网络的组成部分:图像、基础、头部、类别;输入、提取、分类、输出。

什么是视觉特征?特征可以是线条、颜色、纹理、形状、模式,或者一些复杂的组合。整个过程大致如下:

The idea of feature extraction.
(实际提取的特征看起来可能略有不同,但这基本思想一致。)

训练分类器

在训练过程中,神经网络的目标是学会两件事情:

  1. 从图像中提取哪些特征(基础部分),
  2. 哪些特征对应于哪些类别(头部部分)。

如今,卷积神经网络很少从零开始训练。更常见的做法是使用预训练模型的基础部分,然后连接一个未训练的头部。换句话说,我们是基于一个预先训练好、并且已经学会特征提取的神经网络模型,在其上面增加一些全新的层,再次训练学习分类

将新的头部连接到训练好的基础部分。

由于头部通常只包含少量的稠密层,所以即使有相对较少的数据,也可以创建出非常准确的分类器。

重用预训练模型是一种被称为迁移学习的技术。它非常有效,以至于如今几乎每个图像分类器都会使用这种技术。

二、【代码示例】汽车卡车图片分类器

我们的数据集包含约一万张各种汽车的图片,大约一半是汽车,一半是卡车。

步骤1. 导入数据

# 导入所需库
import os, warnings
import matplotlib.pyplot as plt
from matplotlib import gridspecimport numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing import image_dataset_from_directory# 设置随机种子以保证可复现性
def set_seed(seed=31415):np.random.seed(seed)tf.random.set_seed(seed)os.environ['PYTHONHASHSEED'] = str(seed)os.environ['TF_DETERMINISTIC_OPS'] = '1'
set_seed(31415)# 设置 Matplotlib 默认参数
plt.rc('figure', autolayout=True)
plt.rc('axes', labelweight='bold', labelsize='large',titleweight='bold', titlesize=18, titlepad=10)
plt.rc('image', cmap='magma')
warnings.filterwarnings("ignore")  # 以清理输出单元格中的警告信息# 加载训练集和验证集
ds_train_ = image_dataset_from_directory('../input/car-or-truck/train',labels='inferred',label_mode='binary',image_size=[128, 128],interpolation='nearest',batch_size=64,shuffle=True,
)
ds_valid_ = image_dataset_from_directory('../input/car-or-truck/valid',labels='inferred',label_mode='binary',image_size=[128, 128],interpolation='nearest',batch_size=64,shuffle=False,
)# 数据处理流程
def convert_to_float(image, label):image = tf.image.convert_image_dtype(image, dtype=tf.float32)return image, labelAUTOTUNE = tf.data.experimental.AUTOTUNE
ds_train = (ds_train_.map(convert_to_float).cache().prefetch(buffer_size=AUTOTUNE)
)
ds_valid = (ds_valid_.map(convert_to_float).cache().prefetch(buffer_size=AUTOTUNE)
)

步骤2 - 定义预训练模型

最常用于预训练的数据集是 ImageNet,这是一个包含许多自然图像的大型数据集。Keras 在其 applications 模块 中包含了多种在 ImageNet 上预训练过的模型。我们将使用的预训练模型是 VGG16

pretrained_base = tf.keras.models.load_model('../input/cv-course-models/cv-course-models/vgg16-pretrained-base',
)
pretrained_base.trainable = False

以上代码加载了预训练的VGG16模型,并将其设置为不可训练(trainable = False)。这是迁移学习中常用的做法,通过重用已经在大规模数据集上训练过的模型,可以提取出图像的有用特征,从而在少量数据上构建准确的分类器。

步骤3 - 连接头部

接下来,我们要连接分类器的头部部分。在这个示例中,我们将使用一层隐藏单元(第一个 Dense 层),然后是一层将输出转换为类别1(Truck)的概率分数的层。Flatten 层将基础部分的二维输出转换为头部所需的一维输入。

from tensorflow import keras
from tensorflow.keras import layersmodel = keras.Sequential([pretrained_base, # 加载的VGG16模型,用于从图像中提取特征。layers.Flatten(), # 将提取的特征展平,以便送入后续的全连接层。layers.Dense(6, activation='relu'), # 6个神经元的隐藏层,使用ReLU激活函数。layers.Dense(1, activation='sigmoid'), # 输出层,包含一个神经元,使用Sigmoid激活函数。
])

步骤4 - 训练模型

由于这是一个两类问题,我们将使用二进制版本的 crossentropyaccuracy 作为损失函数和评估指标。通常情况下,adam 优化器表现较好,所以我们也选择了它。

model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['binary_accuracy'],
)history = model.fit(ds_train,validation_data=ds_valid,epochs=30,verbose=0,
)

在训练神经网络时,检查损失和指标的图表始终是一个好的做法。history 对象包含了这些信息,可以通过 history.history 字典来获取。我们可以使用 Pandas 将这个字典转换为数据框,并使用内置方法进行绘制。

import pandas as pdhistory_frame = pd.DataFrame(history.history)
history_frame.loc[:, ['loss', 'val_loss']].plot()
history_frame.loc[:, ['binary_accuracy', 'val_binary_accuracy']].plot();

结果输出:
在这里插入图片描述

相关文章:

计算机视觉入门 1)卷积分类器

目录 一、卷积分类器(The Convolutional Classifer)训练分类器 二、【代码示例】汽车卡车图片分类器步骤1. 导入数据步骤2 - 定义预训练模型步骤3 - 连接头部步骤4 - 训练模型 一、卷积分类器(The Convolutional Classifer) 卷积…...

SpringBoot 配置优先级

一般而言,SpringBoot支持配置文件进行配置,即在resources下的application.properties或application.yml。 关于配置优先级而言, application.properties>application.yml>application.yaml 另外JAVA程序程序还支持java系统配置和命令行…...

钢筋的形变屈服度测量

钢筋力学性能检测方法与检测报告《建筑材料检测技术》杨丛慧 建筑形变检测锚点,本身无实质内容。 建筑的倾角和形变检测方法,工程测量学,李章树 毫米级的卫星位移定位 挠度检测。 赛格事件:SHM-Structural Health Monitoring…...

【BASH】回顾与知识点梳理(三十七)

【BASH】回顾与知识点梳理 三十七 三十七. 基础系统设定与备份策略37.1 系统基本设定网络设定 (手动设定与 DHCP 自动取得)手动设定 IP 网络参数(nmcli)自动取得 IP 参数(dhcp)修改主机名(hostnamectl) 37.2 日期与时间设定时区的显示与设定时间的调整用 ntpdate 手动网络校时 …...

智慧农场云养猪平台原来是这样的!

随着数字化和智能化的发展,农业行业也逐渐开始融入互联网技术,其中云养猪平台作为新兴的农业数字化解决方案之一,备受关注。本文将探讨如何开发一款具备专业、思考深度和逻辑性的云养猪平台。 一、前期准备阶段: 1.明确目…...

【3Ds Max】可编辑多边形“边界”层级的简单使用

目录 示例 (1)挤出 (2)插入顶点 (3)切角 (4)利用所选内容创建图形 (5)封口 (6)桥 示例 这里我们首先创建一个长方体&#xff…...

Rancher-RKE2-安装流程

一、什么是rke2? 1.rke2是Rancher的下一代k8s发行版, 二、与rke的不同 1.重要的是,RKE2 不像 RKE1 那样依赖 Docker。RKE1 利用 Docker 来部署和管理控制平面组件以及 Kubernetes 的容器运行时间。RKE2 将控制平面组件作为静态 pod 启动&…...

OrienterNet: visual localization in 2D public maps with neural matching 论文阅读

论文信息 题目:OrienterNet: visual localization in 2D public maps with neural matching 作者:Paul-Edouard Sarlin, Daniel DeTone 项目地址:github.com/facebookresearch/OrienterNet 来源:CVPR 时间&#xff1a…...

iOS导航栏闪屏以及statusBar背景色的更改

1.如果导航栏有卡顿或者闪屏效果出现,多半是因为导航栏背景为透明色所致,可以给导航栏设置主题色,比如已白色为例 self.navigationController.navigationBar.backgroundColor [UIColor whiteColor]; 2.但是即使上述设置后,依然发…...

Centos开启防火墙和端口命令

Centos开启防火墙和端口命令 1. 开启查看关闭firewalld服务状态2. 查看端口是否开放3. 新增开放端口4. 查看开放的端口 1. 开启查看关闭firewalld服务状态 #启动/关闭firewall systemctl start/stop firewalld #查看防火墙状态 systemctl status firewalld #禁用或者启用 syst…...

基于微信小程序的宠物领养平台的设计与实现(Java+spring boot+微信小程序+MySQL)

获取源码或者论文请私信博主 演示视频: 基于微信小程序的宠物领养平台的设计与实现(Javaspring boot微信小程序MySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java…...

Mongodb基础操作

一、简介 MongoDB是一个NoSQL型的数据库,基于分布式文档型储存数据库,由C语言编写,它的特点是开源、高性能、高可用、高扩展、易部署。支持 Golang、RUBY、PYTHON、JAVA、C、PHP等多种开发语言。 二、应用场景 MongoDB适用于高并发读写、数据…...

数据结构与算法:计算机科学的基石

文章目录 数据结构:构建数据的框架算法:问题的解决方案编程语言:实现数据结构的工具结论 🎉欢迎来到数据结构学习专栏~数据结构与算法:计算机科学的基石 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页&…...

曲线救国 | 双非渣硕的秋招路

作者 | 带带大兄弟 面试锦囊之面经分享系列,持续更新中 欢迎后台回复"面试"加入讨论组交流噢 一篇旧文,可以参考~ 写在前面 双非渣硕,0实习,3篇水文,三个给老板当打工仔的nlp横向项目,八月份开…...

气传导耳机怎么样?四款值得入手的气传导耳机推荐

​随着科技的进步,蓝牙耳机越来越受欢迎。类型也越来越多,其中气传导耳机因其不入耳设计,佩戴更舒适,音质更自然,能够提供更为清晰、自然的音质。面对还不知如何挑选气传导耳机的用户,在这里,我…...

HTML <svg> 标签

实例 画一个圆: <svg width="100" height="100"><circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" /> </svg>页面下方有更多 TIY 实例。…...

Python随机密码生成。编写程序,在26个字母大小写和10个数字随机生成10个8位密码。

题目&#xff1a;随机密码生成。编写程序&#xff0c;在26个字母大小写和10个数字随机生成10个8位密码。 样例&#xff1a;类似AB12cdHi的十组8位密码。 代码&#xff1a; import random def passwords():a, b, c ord(a), ord(A), ord(1)r list(range(a , a 26)) list(ra…...

数据结构作业——哈夫曼树

/*【基本要求】 &#xff08;1&#xff09; 从文件中读出一篇英文文章&#xff0c;包含字母和空格等字符。 &#xff08;2&#xff09; 统计各个字符出现的频度。 &#xff08;3&#xff09; 根据出现的频度&#xff0c;为每个出现的字符建立一个哈夫曼编码&#xff0c;并输出。…...

Python XML处理中级篇:深入探索lxml库

lxml库是Python中处理XML和HTML文档的强大库&#xff0c;提供了丰富的API以进行各种操作。在初级篇中&#xff0c;我们介绍了如何使用lxml库解析、访问和修改XML文档。在这篇中级篇中&#xff0c;我们将更深入地探讨如何使用lxml库&#xff0c;包括如何创建XML文档&#xff0c;…...

岩棉革新——洛科威推出NGF新一代岩棉产品

作为全球领先的岩棉制品生产商&#xff0c;洛科威公司基于在岩棉性能革新领域八十多年的深入研究和生产工艺的不断优化&#xff0c;在中国市场正式推出NGF新一代岩棉制品&#xff0c;并在上海国际绿色建筑建材博览会和2023国际绿色低碳技术展上正式发布。 洛科威NGF产品作为革…...

告别空间焦虑:双系统环境下无损扩容Ubuntu磁盘的实战指南

1. 为什么双系统用户总会遇到Ubuntu空间不足&#xff1f; 刚装完WindowsUbuntu双系统时&#xff0c;很多人会习惯性地给Ubuntu分配较小的磁盘空间。我当时也是这么想的&#xff1a;"反正主要用Windows&#xff0c;100GB给Ubuntu应该够了吧&#xff1f;"结果三个月后&…...

TuxGuitar终极指南:免费开源吉他谱编辑软件的完整入门教程

TuxGuitar终极指南&#xff1a;免费开源吉他谱编辑软件的完整入门教程 【免费下载链接】tuxguitar Open source guitar tablature editor 项目地址: https://gitcode.com/gh_mirrors/tu/tuxguitar TuxGuitar是一款功能强大的免费开源吉他谱编辑软件&#xff0c;专为吉他…...

别再手动敲YAML了!阿里云ACK部署应用的3种实战姿势(含私有镜像避坑)

阿里云ACK高效部署指南&#xff1a;3种实战方案与私有镜像避坑技巧 在Kubernetes生态中&#xff0c;阿里云容器服务ACK&#xff08;Alibaba Cloud Container Service for Kubernetes&#xff09;已成为众多企业部署容器化应用的首选平台。然而&#xff0c;许多开发者虽然掌握了…...

基于SSH与VNC的远程Mac开发环境搭建与优化指南

1. 项目概述与核心价值最近在折腾跨平台远程开发&#xff0c;特别是从一台Linux或Windows机器连接到家里的Mac进行编程&#xff0c;发现了一个挺有意思的开源工具——AllenReder/remote2mac。这名字起得直白&#xff0c;一看就知道是干“远程到Mac”这活的。我花了几天时间深度…...

开关电源选型保姆级指南:从LRS-200-24到NDR-480-24,手把手教你算功率、看效率、避高温降额

开关电源选型实战手册&#xff1a;从基础参数到工业场景避坑指南 工业电源选型的三大认知误区 第一次为自动化产线选配开关电源时&#xff0c;我犯了个典型错误——直接按照设备铭牌功率总和选择了LRS-200-24型号。结果设备联调当天&#xff0c;传送带电机频繁重启&#xff0c;…...

量子噪声控制与FIR滤波器应用解析

1. 量子噪声控制基础与FIR滤波器原理量子计算的核心挑战之一是如何在噪声环境中保持量子态的相干性。量子比特极易受到环境噪声的影响&#xff0c;导致量子门操作精度下降。在众多噪声类型中&#xff0c;1/f噪声&#xff08;低频噪声&#xff09;因其普遍存在于固态量子系统中而…...

So-Bridge:轻量级跨语言进程通信库的设计与实践

1. 项目概述&#xff1a;一个连接不同世界的“桥梁” 最近在折腾一些自动化脚本和数据处理流程时&#xff0c;我遇到了一个挺典型的问题&#xff1a;手头的工具和系统五花八门&#xff0c;有的用Python写&#xff0c;有的依赖Node.js环境&#xff0c;还有的干脆是独立的可执行文…...

开源IM机器人技能框架openclaw-skill-imsg架构解析与实战

1. 项目概述&#xff1a;一个面向即时通讯消息的自动化技能框架最近在折腾一个挺有意思的开源项目&#xff0c;叫openclaw-skill-imsg。光看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;我来拆解一下。openclaw听起来像是一个开源&#xff08;open&#xff09;的“爪子…...

Ai小程序入门03-项目初始化(小白入门:用AI一键生成小程序骨架,告别繁琐配置)

Ai小程序入门03-项目初始化&#xff08;小白入门&#xff1a;用AI一键生成小程序骨架&#xff0c;告别繁琐配置&#xff09;&#x1f4cc; 文章简介&#xff1a;环境搭好了&#xff0c;账号也拿到了&#xff0c;终于可以写出人生的第一行代码了&#xff01;传统的开发第一步需要…...

UE4 TCP通信实战:从网络调试助手到Python服务端的跨平台数据交互

1. UE4 TCP通信基础与环境搭建 第一次在UE4里折腾TCP通信的时候&#xff0c;我对着文档研究了整整两天。后来发现其实用对方法&#xff0c;半小时就能跑通第一个Demo。这里分享我最常用的TCPSocketPlugin插件方案&#xff0c;比原生C实现简单十倍。 先到虚幻商城搜索"TCP …...