【pytorch学习03】预训练图像识别分类预测

下载安装mmcv-full(openmmlab里面最基础的算法库):对视频进行逐帧的分析,把每一帧画面的中间结果保存到目录里,最后把所有帧的中间结果串成一个视频文件

ImageNet1000类别信息,用于检测算法实现效果的数据集

我们今天用的是别人已经训练好的模型

# 创建目录

import os

# 存放测试图片

os.mkdir('test_img')

# 存放结果图片

os.mkdir('output')

 

把图片换成视频/实时摄像头画面

Import os # 导入操作系统库

Cv2 导入opencv

import os # 操作系统库

import cv2 # 导入opencv

import pandas as pd # 数据处理

import numpy as np

import torch  # pytorch

import matplotlib.pyplot as plt # 数据可视化,画图

# 载入预训练图像分类模型

from torchvision import models

model = models.resnet18(pretrained=True)  # 表示有18层网络,层数越高,深度学习越深

model = model.eval()  # 设为评估模式

model = model.to(device) # 将模型放到设备GPU/CPU里面

# 测试集集的图像、用户新上传的图像、视频的帧、摄像头的实时画面

Resize:把任何一张图像,缩放成256x256大小

CenterCrop:裁剪成224大小的图象

把方框转成pytorch的张量

对RGB三通道做归一化,减去均值,除以标准差

(这6个数是人们总结之后的标准数值)

做缩放的归一化:每个像素减去它所在的通道的均值,再除以它所在通道的标准差

更容易被神经网络处理

#  1张3通道的224x224图像

要传入pytorch必须整理成这样的数据维度

pred_logits # 1000个类别的分数(有+/-)

pred_softmax把每一个logits的分数转成了0-1的概率,并且求合为1

有多种形态的,多种分布的,不适合做成图像分类数据集供基础算法去训练和测试


 

pytorch要求输入到tsettransform里面的都是pil格式

opencv载入的是BGR格式,而pil载入的是RGB模式

img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # BGR 转 RGB

pil文件——RGB转BGR

img_bgr = cv2.cvtColor(np.array(img_pil),cv2.COLOR_RGB2BGR)  # RGB 转 BGR

给出了——凡是对视频进行逐帧处理都可以用这套代码模板

先用opencv把视频读进来,生成一个进度条

# 对视频进行逐帧处理,获取的是第几帧和画面本身

然后再进行逐帧处理,再更新进度条

每一帧都存到目录中,再用frames2video,串成视频

# 获取设备——有GPU就用GPU,没有就用CPU

device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')

导包,获取设备,载入预训练分类模型,载入ImageNet1000标签,预处理,先获取摄像头的一帧画面

获取系统默认摄像头,cap.open(0)mac为1,wins为0