机械学习基础以及在pynq-Z2上部署Faster-RCNN的项目学习3
目录
一.卷积神经网络(CNN)-图片分类和验证码识别
1.1.使用Python处理图片
1.2.卷积神经网络(CNN)
1.2.1简介
1.2.2.卷积层(Convolution layer)
1.2.3.池化层(Pooling layer)
1.2.4.全连接层(Fully Connected Layer)
1.2.5.填充处理
1.3.使用CNN实现图片分类(LeNet)
1.4.使用CNN实现图片分类(ResNet)
1.5.使用CNN实现验证码识别(ResNet18)
1.6.使用torchvision中的resnet模型
1.7.使用 GPU 训练识别验证码的模型
1.8.显存占用
二.对象识别RCNN与Fast-RCNN
2.1.图像分类与对象识别
2.2.对象识别模型需要的训练数据
2.3.RCNN
2.3.1.简介
2.3.2.选取可能出现对象的区域
2.3.3.按重叠率 (IOU) 判断每个区域是否包含对象
原始论文
2.4.使用RCNN识别图片中的人脸
2.5.Fast-RCNN
2.5.1.简介
2.5.2.缩放来源图片
2.5.3.计算区域特征
2.5.4.抽取区域特征(ROI Pooling)
2.5.5.调整区域范围
2.5.6.计算损失
2.5.7.合并结果区域
2.5.8.原始论文
2.6.使用Fast-RCNN识别图片中的人脸
一.卷积神经网络(CNN)-图片分类和验证码识别
1.1.使用Python处理图片
在具体介绍 CNN 之前,我们先来看看怎样使用 Python 处理图片。Python 处理图片最主要使用的类库是 Pillow (Python2 PIL 的 fork),使用以下命令即可安装:
pip3 install Pillow
一些简单操作的例子如下,如果你想了解更多可以参考 Pillow 的文档:
# 打开图片
>>> from PIL import Image
>>> img = Image.open("1.png")# 查看图片信息
>>> img.size
(175, 230)
>>> img.mode
'RGB'
>>> img
<PIL.PngImagePlugin.PngImageFile image mode=RGB size=175x230 at 0x10B807B50># 缩放图片
>>> img1 = img.resize((20, 30))
>>> img1
<PIL.Image.Image image mode=RGB size=20x30 at 0x106426FD0># 裁剪图片
>>> img2 = img.crop((0, 0, 16, 16))
>>> img2
<PIL.Image.Image image mode=RGB size=16x16 at 0x105E0EFD0># 保存图片
>>> img1.save("11.png")
>>> img2.save("12.png")
使用 pytorch 处理图片时要首先获取图片的数据,即各个像素对应的颜色值,例如大小为 175 * 230,模式是 RGB 的图片会拥有 175 * 230 * 3 的数据,3 分别代表红绿蓝的值,范围是 0 ~ 255,把图片转换为 pytorch 的 tensor 对象需要经过 numpy 中转,以下是转换的例子:
>>> import numpy
>>> import torch
>>> v = numpy.asarray(img)
>>> t = torch.tensor(v)
>>> t
tensor([[[255, 253, 254],[255, 253, 254],[255, 253, 254],...,[255, 253, 254],[255, 253, 254],[255, 253, 254]],[[255, 253, 254],[255, 253, 254],[255, 253, 254],...,[255, 253, 254],[255, 253, 254],[255, 253, 254]],[[255, 253, 254],[255, 253, 254],[255, 253, 254],...,[255, 253, 254],[255, 253, 254],[255, 253, 254]],...,[[255, 253, 254],[255, 253, 254],[255, 253, 254],...,[255, 253, 254],[255, 253, 254],[255, 253, 254]],[[255, 253, 254],[255, 253, 254],[255, 253, 254],...,[255, 253, 254],[255, 253, 254],[255, 253, 254]],[[255, 253, 254],[255, 253, 254],[255, 253, 254],...,[255, 253, 254],[255, 253, 254],[255, 253, 254]]], dtype=torch.uint8)
>>> t.shape
torch.Size([230, 175, 3])
可以看到 tensor 的维度是 高度 x 宽度 x 通道数
(RGB 图片为 3,黑白图片为 1),可是 pytorch 的 CNN 模型会要求维度为 通道数 x 宽度 x 高度
,并且数值应该正规化到 0 ~ 1 的范围内,使用以下代码可以实现:
# 交换维度 0 (高度) 和 维度 2 (通道数)
>>> t1 = t.transpose(0, 2)
>>> t1.shape
torch.Size([3, 175, 230])>>> t2 = t1 / 255.0
>>> t2
tensor([[[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],...,[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000],[1.0000, 1.0000, 1.0000, ..., 1.0000, 1.0000, 1.0000]],[[0.9922, 0.9922, 0.9922, ..., 0.9922, 0.9922, 0.9922],[0.9922, 0.9922, 0.9922, ..., 0.9922, 0.9922, 0.9922],[0.9922, 0.9922, 0.9922, ..., 0.9922, 0.9922, 0.9922],...,[0.9922, 0.9922, 0.9922, ..., 0.9922, 0.9922, 0.9922],[0.9922, 0.9922, 0.9922, ..., 0.9922, 0.9922, 0.9922],[0.9922, 0.9922, 0.9922, ..., 0.9922, 0.9922, 0.9922]],[[0.9961, 0.9961, 0.9961, ..., 0.9961, 0.9961, 0.9961],[0.9961, 0.9961, 0.9961, ..., 0.9961, 0.9961, 0.9961],[0.9961, 0.9961, 0.9961, ..., 0.9961, 0.9961, 0.9961],...,[0.9961, 0.9961, 0.9961, ..., 0.9961, 0.9961, 0.9961],[0.9961, 0.9961, 0.9961, ..., 0.9961, 0.9961, 0.9961],[0.9961, 0.9961, 0.9961, ..., 0.9961, 0.9961, 0.9961]]])
之后就可以围绕类似上面例子中 t2
这样的 tensor 对象做文章了
机械学习基础以及在pynq-Z2上部署Faster-RCNN的项目学习3相关推荐
- .NET开发框架(五)-IIS上部署ASP.NET Core项目教程
在之前教程中,我们分享了框架的功能与视频演示介绍(文尾底部提供往期教程快捷链接) 系列教程:从初学者到架构师的一步步蜕变 本篇经验将和大家介绍如何在IIS上部署ASP.NET Core项目,希望对初学 ...
- 在Linux上部署第一个web项目
如何在Linux上部署第一个web项目(未更新完) 一.向服务器中的数据库添加数据(本篇以Mysql为例) 1.通过SQLyog将项目的数据库中的所有数据表导出为sql文件 2.为服务器上的数据库授权 ...
- 阿里云服务器ECS上部署简单的SSM项目
一.引言(为什么选择Linux部署) 1.1 开发环境(dev) 外部用户无法访问,开发人员使用,版本变动很大 平时大家大多是在Windows或者Mac操作系统下去编写代码进行开发,在开发环境中安装大 ...
- 【游戏开发】《Java游戏服务器架构实战》项目在windows上部署
[游戏开发]<Java游戏服务器架构实战>项目在windows上部署 文章目录 [游戏开发]<Java游戏服务器架构实战>项目在windows上部署 一.配置项目基础环境 二. ...
- 小程序动画从头开始_如何从头开始在Kubernetes上部署弹性Node.js应用程序
小程序动画从头开始 视频 (Video) 描述 (Description) You may have heard the buzz around Kubernetes and noticed that ...
- 在Linux上部署各种软件总结
实战章节:在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面,我们学习了许多的Linux命令和高级技巧,这些知识点比较零散,同学们跟随着课程的内容进行练习虽然可以基础掌握 ...
- aws v2.2.exe_如何在AWS Elastic Beanstalk上部署Rails 5.2 PostgreSQL应用
aws v2.2.exe by Evrim Persembe 通过埃夫里姆·佩塞姆贝 如何在AWS Elastic Beanstalk上部署Rails 5.2 PostgreSQL应用 (How to ...
- 阿里云线上部署自己的写的小项目
unbuntu20.0.4线上部署自己写的项目(laravel+vue) 这周把自己写的菜鸡项目,仿小米商城部署到线上 系统unbuntu20.0.4大致流程及bug记录 一.搭建环境 1.安装Apa ...
- 使用 Nginx 部署前后端分离项目,解决跨域问题
前后端分离这个问题其实松哥和大家聊过很多了,上周松哥把自己的两个开源项目部署在服务器上以帮助大家可以快速在线预览(喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了 ...
- 基础、数据、开发、部署,AI 时代企业的全方位升级
当"AI+"的趋势无可回避,企业领导者们需要比过往更认真地思考,如何适应全新的AI时代和其所代表的未来发展趋势. 头图来源 | 视觉中国 当AI成为基础设施 眼下,已经没有企业的领 ...
最新文章
- python批量读取文件内容_Python 文本文件内容批量抽取实例
- OpenCV边缘检测专题
- 游戏场景中的建筑设计,专访暴雪娱乐首席美术师 PhilipKlevestav
- scala常用spark的pom.xml与读取csv为rdd到最终join操作
- java文件下载和导出文件名乱码浏览器兼容性问题
- linux shell数据重定向(输入重定向与输出重定向)详细分析 下(转)
- html5植物生长,关于植物生长的知识
- 使用GoKart对Go代码进行静态安全分析
- java服务器 c 服务器_c 编写服务器
- tlwdr5660间歇性掉线_tl-wdr7660无线掉线?tl-wdr7660路由不稳定怎么办?
- 苹果4s忘记id密码怎么办_iPhone手机ID密码忘记了怎么办?三种方法轻松解决问题...
- OLED屏幕的手机和LCD屏幕的手机,到底哪个好?
- ssh连接openwrt_如何将SSH无密码连接到OpenWrt路由器?
- python怎么计算ord函数_python ord函数
- java开发微信第三方平台 模板消息发送消息案例
- 荧光染料BDP FL maleimide/马来酰亚胺,CAS:773859-49-7
- excel如何拆分表格?
- spring实现判断日期是否为节假日(包括周末)功能
- OpenCV常用函数极简简介
- python爬取携程酒店评论_python爬取携程酒店列表
热门文章
- S5PV210实验板发布
- 帝国CMS 7.2 WAP手机企业网站蓝色个性菜单整站模板
- 【ShaderToy】开篇
- ORA-04031: 无法分配 3840 字节的共享内存 (“shared pool“,“unknown object“,“sga heap(1,0)“,“kglsim object batch“)
- Dynamodb 备份策略
- STL之string用法详解
- arping命令使用方法
- 【多线程常见面试题】
- 分块专题整理(分块+莫队)
- PB调用http协议接口(WebAPI)