【实战项目代码分享】计算机视觉入门教程&实战项目代码
时间:2022-07-22
本文章向大家介绍【实战项目代码分享】计算机视觉入门教程&实战项目代码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
对理论知识有了了解后,这里介绍两个实战项目,分别是基于keras的多标签图像分类以及基于 Pytorch 的迁移学习教程。
基于 Keras 的多标签图像分类教程
首先是采用的多标签图像数据集,如下所示,6 个类别的一个衣服图像数据集:
整个多标签分类的项目结构如下所示:
├── classify.py
├── dataset
│ ├── black_jeans [344 entries
│ ├── blue_dress [386 entries]
│ ├── blue_jeans [356 entries]
│ ├── blue_shirt [369 entries]
│ ├── red_dress [380 entries]
│ └── red_shirt [332 entries]
├── examples
│ ├── example_01.jpg
│ ├── example_02.jpg
│ ├── example_03.jpg
│ ├── example_04.jpg
│ ├── example_05.jpg
│ ├── example_06.jpg
│ └── example_07.jpg
├── fashion.model
├── mlb.pickle
├── plot.png
├── pyimagesearch
│ ├── __init__.py
│ └── smallervggnet.py
├── search_bing_api.py
└── train.py
准备好数据后,就是开始选择使用的网络结构,这里采用 Keras 搭建一个简化版本的 VGGNet,然后就是训练模型和测试模型的代码,这里需要提前安装好的库是:
pip install keras, scikit-learn, matplotlib, imutils, opencv-python
训练过程的实验图如下所示:
部分测试结果:
Using TensorFlow backend.
[INFO] loading network...
[INFO] classifying image...
black: 0.00%
blue: 3.58%
dress: 95.14%
jeans: 0.00%
red: 100.00%
shirt: 64.02%
具体代码和详细教程可以扫下方二维码关注【算法猿的成长】,后台回复:多标签,即可获取
长按上方二维码 2 秒
基于 Pytorch 的迁移学习教程
第二份实战教程就是使用 Pytorch 实现迁移学习,迁移学习也是计算机视觉里非常常用的一个做法,也就是利用在 ImageNet 上预训练好的模型,在我们自定义的数据集上重新训练得到在自定义数据集上性能很好的模型。
首先是展示我们自定义的一个二分类数据集的图片,分别是蚂蚁和蜜蜂两个类别:
接下来就是加载数据集、训练模型代码的实现,其中最核心的就是迁移学习部分,对网络的微调训练:
# 加载 resnet18 网络模型,并且设置加载预训练模型
model_ft = models.resnet18(pretrained=True)
num_ftrs = model_ft.fc.in_features
# 修改输出层的输出数量,本次采用的数据集类别为 2
model_ft.fc = nn.Linear(num_ftrs, 2)
model_ft = model_ft.to(device)
criterion = nn.CrossEntropyLoss()
# 对所有网络层参数进行更新
optimizer_ft = optim.SGD(model_ft.parameters(), lr=0.001, momentum=0.9)
# 学习率策略,每 7 个 epochs 乘以 0.1
exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)
最终模型的分类结果如下所示:
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 我这几年踩过的十个坑,每一条都是血泪教训
- 在 Python 中如何快速创建一个只读字典?
- 现场打脸:如何使用Selenium批量上传文件?
- 一日一技:FastAPI如何关闭接口文档?
- 什么叫做类比,为什么有些 Python 入门教程结构不合理?
- 贼好用的 Java 工具类库,墙裂推荐!
- 万字长文,Thread 类源码解析!
- lintCode 31 题解
- JDK1.8HashMap源码学习-put操作以及扩容(二)
- Python 中的数字到底是什么?
- 详解 Python 的二元算术运算,为什么说减法只是语法糖?
- 详解增强算术赋值:“-=”操作是怎么实现的?
- Hyperledger Explorer 环境搭建详解
- [译]在Solidity中创建无限制列表
- java安全编码指南之:声明和初始化