基于Pytorch的CNN图像分类器,并利用OpenCV进行数据预处理
CNN(卷积神经网络)在图像处理上有很好的表现,AlphaGO使用也是也是CNN,但是AlphaGO去掉pooling(池化)层。
我以简单的二分类器为例,学习应用CNN进行图像分类的过程,从图像处理开始,到训练神经网络。
代码中含有详细注释
数据预处理:
#导入库
import os
import numpy as np
import cv2
# 定义读取图像的函数
def readimg(path):
# 使用OpenCV库中的.imread()函数读取图像
img = cv2.imread(path)
# 使用OpenCV库中的.resize()函数修改图像尺寸,为了后面训练神经网络时得到更快的速度
img = cv2.resize(img,(128,128),0)
return img
# 定义函数,将修改后的图像保存
def save(path, img):
# 使用OpenCV库中的.shape()方法获取图像的高和宽,.shape()
rows, cols = img.shape[:2]
# 将图像以一度为步长,旋转360次
for i in range(0,359):
# 使用OpenCV库中的.getRotationMatrix2D()和.warpAffine()方法将图像旋转,以处理数据
# 第一个参数是旋转中心,第二个参数是旋转角度,第三个参数是缩放比例
M = cv2.getRotationMatrix2D((cols/2, rows/2), i, 1)
img1 = cv2.warpAffine(img, M, (cols, rows))
i = str(i)
img_name = i+".jpg"
# 存储图像
cv2.imwrite(os.path.join(path, img_name),img1)
path = '/Users/jason_zhang/Desktop/'
for j in range(1,3):
j = str(j)
no_img = j + '.jpg'
img_path = os.path.join(path, no_img)
new_img_path = os.path.join(path, j)
img = readimg(img_path)
save(new_img_path ,img)
print("Saving done")
输出结果:
此时,数据已经处理完,并存出在相应文件夹中。
导入数据:
# 导入库
import os
import numpy as np
import cv2
import torch
import torch.nn as nn
import torchvision.transforms as transforms
import panda