深度学习-卷积神经网络

图像卷积运算
对图像矩阵与滤波器矩阵进行对应相乘再求和运算,转化得到新的矩阵。
作用:快速定位图像中某些边缘特征
英文:convolition
image.png
image.png
image.png
image.png
将图片与轮廓滤波器进行卷积运算,可快速定位固定轮廓特征的位置
卷积神经网络的核心
计算机根据样本图片,自动寻找合适的轮廓过滤器,对新图片进行轮廓匹配
image.png
自动求解W,寻找合适的过滤器
image.png
一个过滤器不够,需要寻找很多过滤器
image.png
池化层实现维度缩减
池化:按照一个固定规则对图像矩阵进行处理,将其转换为更低维度的矩阵
image.png
保留核心信息的情况下,实现维度缩减
image.png
卷积神经网络
把卷积、池化、mlp先后连接在一起,组成卷积神经网络
image.png
image.png
image.png
image.png
image.png
卷积神经网络两大特点

  • 参数共享(parameter sharing):同一个特征过滤器可用于整张图片
  • 稀疏连接(sparsity of connections):生成的特征图片每个节点只与原图片中特定节点连接

卷积运算导致的两个问题:

  • 图像被压缩,造成信息丢失
  • 边缘信息使用少,容易被忽略

image.png
图像填充(padding)
通过在图像各边增加像素,使其在进行卷积运算后维持原图大小
image.png
通过padding增加像素的数量,由过滤器尺寸与stride决定

经典的CNN模型

LeNet-5

image.png
image.png

AlexNet

image.png
image.png

VGG-16

image.png
image.png
经典的CNN模型用于新场景

  1. 使用经典的CNN模型结构对图像预处理,再建立MLP模型

  2. 参考经典的CNN结构搭建新模型

  3. 加载经典的CNN模型,剥除其FC层,对图像进行预处理

  4. 把预处理完成的数据作为输入,分类结果为输出,建立一个MLP模型

  5. 模型训练

实战准备

实战(一):建立CNN实现猫狗识别

image.png
任务:基于dataset\training_set数据,根据提供的结构,建立CNN模型

  • 识别图片中的猫/狗、计算dataset\test_set测试数据预测准确率
  • 从网站下载猫/狗图片,对其进行预测

image.png
图片加载

from keras.preprocessing.image import ImageDataGenerator

图像增强/预处理配置

train_datagen = ImageDataGenerator(rescale=1./255)

加载图像

training_set = train_datagen.flow_from_directory('./dataset/training_set',target_size=(50,50),batch_size=32,class_mode='binary')

建立CNN模型

from keras.models import Sequential
from keras.layers import Conv2D,MaxPooling2D,Flatten,Dense
model=Sequential()

卷积层

model.add(Conv2D(32,(3,3),input_shape=(50,50,3),activation='relu'))

池化层

model.add(MaxPooling2D(pool_size=(2,2)))

第二个卷积、池化层

model.add(Conv2D(32,(3,3),activation = 'relu'))
model.add(MaxPooling2D(pool_size =(2,2)))

Flattening层

model.add(Flatten())

全连接层

model.add(Dense(units =128, activation = 'relu'))
model.add(Dense(units=1,activation = 'sigmoid'))

训练与预测
配置模型

model.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy’])

查看模型结构

model.summary()

训练模型

model.fit_generator(training_set,epochs = 25)

计算预测准确率

model.evaluate_generator(training_set)

实战(二):基于VGG16、结合MLP实现猫狗识别

任务:使用VGG16的结构提取图像特征,再根据特征建立mlp模型,实现猫狗图像识别。训练/测试数据:dataset\data_vgg

  • 对数据进行分离、计算测试数据预测准确率
  • 从网站下载猫/狗图片,对其进行预测

备注:mlp模型只有一个隐藏层(10个神经元)
图片加载

from keras.preprocessing.image import img_to_array, load_img
img_path ='1.jpg'
img = load_img(img_path, target_size=(224,224))
img =img_to_array(img)

图片预处理

from keras.applications.vgg16 import preprocess_input
x=np.expand_dims(img,axis=0)

把图片矩阵转化为可用于VGG16输入的矩阵

x=preprocess_input(x)

载入VGG16结构(去除全连接层)

from keras.applications.vgg16 import VGG16
model_vgg =VGG16(weights='imagenet', include_top=False)

特征提取

features = model_vgg.predict(x)

建立MLP模型
建立一个Sequential顺序模型并添加各层

from keras.models import Sequential
model= Sequential()
from keras.layers import Dense
model.add(Dense(units=10,activation='relu',input_dim=25088))
model.add(Dense(units=1,activation='sigmoid'))
model.summary()

通过.compile()配置模型求解过程参数

model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])

训练模型

model.fit(X_train,y_train,epochs=50)

实战(一):建立CNN实现猫狗识别

任务:基于dataset\training_set数据,根据提供的结构,建立CNN模型

  • 识别图片中的猫/狗、计算dataset\test_set测试数据预测准确率
  • 从网站下载猫/狗图片,对其进行预测

加载数据

from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1./255)
training_set = train_datagen.flow_from_directory('./dataset/training_set',target_size=(50,50),batch_size=32,class_mode='binary')

建模

from keras.models import Sequential
from keras.layers import Conv2D,MaxPooling2D,Flatten,Dense
model=Sequential()
model.add(Conv2D(32,(3,3),input_shape=(50,50,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(32,(3,3),activation = 'relu'))
model.add(MaxPooling2D(pool_size =(2,2)))
model.add(Flatten())
model.add(Dense(units=128, activation = 'relu'))
model.add(Dense(units=1,activation = 'sigmoid'))

配置模型

model.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

查看模型结构

model.summary()

image.png
训练

model.fit_generator(training_set,epochs=25,steps_per_epoch=250)

image.png
准确率

accuracy_train=model.evaluate_generator(training_set,steps=1)
print(accuracy_train)

image.png
测试数据准确率

test_set=train_datagen.flow_from_directory('./dataset/test_set',target_size=(50,50),batch_size=32,class_mode='binary')
accuracy_test=model.evaluate_generator(test_set,steps=1)
print(accuracy_test)

image.png
测试

from keras.preprocessing.image import load_img,img_to_array
from PIL import Image
import os
pic_cat='1.jpg'
pic_cat= load_img(pic_cat,target_size=(50,50))
pic_cat=img_to_array(pic_cat)
pic_cat=pic_cat/255
pic_cat=pic_cat.reshape(1,50,50,3)
result=model.predict_classes(pic_cat)
print(result)
img = Image.open(os.path.join('1.jpg'))
img

image.png

from keras.preprocessing.image import load_img,img_to_array
pic_dog='7.jpg'
pic_dog= load_img(pic_dog,target_size=(50,50))
pic_dog=img_to_array(pic_dog)
pic_dog=pic_dog/255
pic_dog=pic_dog.reshape(1,50,50,3)
result=model.predict_classes(pic_dog)
print(result)
img = Image.open(os.path.join('7.jpg'))
img

image.png
测试

import matplotlib as mlp
font2 = {'family':'SimHei','weight':'normal','size':20,}
mlp.rcParams['font.family']='SimHei'
mlp.rcParams['axes.unicode_minus']= False
from matplotlib import pyplot as plt
from matplotlib.image import imread
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array
from keras.models import load_model
a = [i for i in range(1,10)]
fig= plt.figure(figsize=(10,10))
for i in a:img_name = str(i)+'.jpg'img_ori = load_img(img_name,target_size=(50,50))img = img_to_array(img_ori)img= img.astype('float32')/255img = img.reshape(1,50,50,3)result = model.predict_classes(img)img_ori = load_img(img_name,target_size=(250,250))plt.subplot(3,3,i)plt.imshow(img_ori)plt.title('预测为:狗狗'if result[0][0]== 1 else '预测为:猫咪')
plt.show()

image.png

实战(二):基于VGG16、结合MLP实现猫狗识别

任务:使用VGG16的结构提取图像特征,再根据特征建立mlp模型,实现猫狗图像识别。训练/测试数据:dataset\data_vgg

  • 对数据进行分离、计算测试数据预测准确率
  • 从网站下载猫/狗图片,对其进行预测

备注:mlp模型只有一个隐藏层(10个神经元)
加载数据

from keras.preprocessing.image import img_to_array, load_img
img_path ='1.jpg'
img = load_img(img_path, target_size=(224,224))
img =img_to_array(img)
import numpy as np
from keras.applications.vgg16 import preprocess_input
from keras.applications.vgg16 import VGG16
model_vgg =VGG16(weights='imagenet', include_top=False)
x=np.expand_dims(img,axis=0)
x=preprocess_input(x)
print(x.shape)

image.png
特征提取

features = model_vgg.predict(x)

摊开

features =features.reshape(1,7*7*512)

VGG批量图片预处理

#load image and preprocess it with vgg16 structure
#--by flare
from keras.preprocessing.image import img_to_array,load_img
from keras.applications.vgg16 import VGG16
from keras.applications.vgg16 import preprocess_input
import numpy as npmodel_vgg = VGG16(weights='imagenet', include_top=False)
#define a method to load and preprocess the image
def modelProcess(img_path,model):img = load_img(img_path, target_size=(224, 224))img = img_to_array(img)x = np.expand_dims(img,axis=0)x = preprocess_input(x)x_vgg = model.predict(x)x_vgg = x_vgg.reshape(1,25088)return x_vgg
#list file names of the training datasets
import os
folder = "dataset/data_vgg/cats"
dirs = os.listdir(folder)
#generate path for the images
img_path = []
for i in dirs:                             if os.path.splitext(i)[1] == ".jpg":   img_path.append(i)
img_path = [folder+"//"+i for i in img_path]#preprocess multiple images
features1 = np.zeros([len(img_path),25088])
for i in range(len(img_path)):feature_i = modelProcess(img_path[i],model_vgg)print('preprocessed:',img_path[i])features1[i] = feature_ifolder = "dataset/data_vgg/dogs"
dirs = os.listdir(folder)
img_path = []
for i in dirs:                             if os.path.splitext(i)[1] == ".jpg":   img_path.append(i)
img_path = [folder+"//"+i for i in img_path]
features2 = np.zeros([len(img_path),25088])
for i in range(len(img_path)):feature_i = modelProcess(img_path[i],model_vgg)print('preprocessed:',img_path[i])features2[i] = feature_i#label the results
print(features1.shape,features2.shape)
y1 = np.zeros(300)
y2 = np.ones(300)#generate the training data
X = np.concatenate((features1,features2),axis=0)
y = np.concatenate((y1,y2),axis=0)
y = y.reshape(-1,1)
print(X.shape,y.shape)

image.png
数据分离

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=50)
print(X_train.shape,X_test.shape,X.shape)

image.png
设置模型

from keras.models import Sequential
from keras.layers import Dense
model= Sequential()
model.add(Dense(units=10,activation='relu',input_dim=25088))
model.add(Dense(units=1,activation='sigmoid'))
model.summary()

image.png
配置模型求解过程参数 训练模型

model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
model.fit(X_train,y_train,epochs=50)

image.png
准确率

from sklearn.metrics import accuracy_score
y_train_predict = model.predict_classes(X_train)
accuracy_train=accuracy_score(y_train,y_train_predict)
print(accuracy_train)
y_test_predict = model.predict_classes(X_test)
accuracy_test=accuracy_score(y_test,y_test_predict)
print(accuracy_test)

image.png
测试

import matplotlib as mlp
font2 = {'family':'SimHei','weight':'normal','size':20,}
mlp.rcParams['font.family']='SimHei'
mlp.rcParams['axes.unicode_minus']= False
from matplotlib import pyplot as plt
from matplotlib.image import imread
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array
from keras.models import load_model
a = [i for i in range(1,10)]
fig= plt.figure(figsize=(10,10))
for i in a:img_name = str(i)+'.jpg'img_path = img_nameimg = load_img(img_path,target_size=(224,224))img = img_to_array(img)x = np.expand_dims(img,axis=0)x = preprocess_input(x)x_vgg = model_vgg.predict(x)x_vgg = x_vgg.reshape(1,25088)result = model.predict_classes(x_vgg)img_ori = load_img(img_name,target_size=(250,250))plt.subplot(3,3,i)plt.imshow(img_ori)plt.title('预测为:狗狗'if result[0][0]== 1 else '预测为:猫咪')
plt.show()

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/422730.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录 Leetcode1047. 删除字符串中的所有相邻重复项

题目&#xff1a; 代码(首刷自解 2024年1月21日&#xff09;&#xff1a; class Solution { public:string removeDuplicates(string s) {if (s.size() < 2) return s;stack<char> t;for (int i 0; i < s.size(); i) {if (t.empty()) t.push(s[i]);else {if (s[i…

pip安装之后还是无法使用问题处理

最近由于需要使用到Python 相关功能&#xff0c; 记录下一些入门小技巧 1 python 下载安装 在window10 环境下载免安装版本&#xff0c; 并解压 安装包下载地址&#xff1a; https://www.python.org/ftp/python/3.12.1/python-3.12.1-embed-amd64.zip 2. 安装pip, 由于是内嵌…

Python中杨辉三角形的生成、性质与应用

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 杨辉三角形&#xff0c;又称帕斯卡三角形&#xff0c;是一个经典的数学图形&#xff0c;它具有许多有趣的性质和应用。杨辉三角形是一个由数字组成的三角形&#xff0c;每个数字等于它上方两个数字的和。本文将深…

C++11手撕线程池 call_once 单例模式 Singleton / condition_variable 与其使用场景

一、call_once 单例模式 Singleton 大家可以先看这篇文章&#xff1a;https://zh.cppreference.com/w/cpp/thread/call_once /*std::call_oncevoid call_once( std::once_flag& flag, Callable&& f, Args&&... args ); */ #include <iostream> #i…

测试 yolov8 分割模型 边缘检测

发现 cfg/default.yaml 参数 mask_ratio 等于4 直接训练如下边缘分割标签,推理时mask 稀疏&#xff0c;训练时分数偏低,mask_ratio 改为1训练时打印的mask 的 P指标一直为0,将imgsz原图size 训练分数也不高 标注用的是labelme多边形 阅读源码发现可能是因为mask缩放导致 且出现…

P8823 [传智杯 #3 初赛] 期末考试成绩

前言: 大家好!我们又见面了~~~ 今天我来带大家学习P8823 [传智杯 #3 初赛] 期末考试成绩! 题目传送门 一、题意描述: 这道题给出一个人的成绩,这个人的成绩有三种可能: 可能性/结果情况结果x1 y1 ≥90分z1 直接输出4.0x2y2 <90分,>60z2(扣成绩-10)*0.1x3y3 &…

dpdk网络转发环境的搭建

文章目录 前言ip命令的使用配置dpdk-basicfwd需要的网络结构测试dpdk-basicfwddpdk-basicfwd代码分析附录basicfwd在tcp转发时的失败抓包信息DPDK的相关设置 前言 上手dpdk有两难。其一为环境搭建。被绑定之后的网卡没有IP&#xff0c;我如何给它发送数据呢&#xff1f;当然&a…

C++——结构体

1&#xff0c;结构体基本概念 结构体属于用户自定义的数据类型&#xff0c;允许用户存储不同的数据类型。像int&#xff08;整型&#xff09;&#xff0c;浮点型&#xff0c;bool型&#xff0c;字符串型等都是属于系统内置的数据类型。而今天要学习的结构体则是属于我们自定义…

Java 基于 SpringBoot+Vue 的社区团购系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Spring 事务原理一

从本篇博客开始&#xff0c;我们将梳理Spring事务相关的知识点。在开始前&#xff0c;想先给自己定一个目标&#xff1a;通过此次梳理要完全理解事务的基本概念及Spring实现事务的基本原理。为实现这个目标我想按以下几个步骤进行&#xff1a; 讲解事务中的一些基本概念使用Sp…

架构篇13:架构设计流程-详细方案设计

文章目录 架构设计第 4 步&#xff1a;详细方案设计详细方案设计实战小结 完成备选方案的设计和选择后&#xff0c;我们终于可以长出一口气&#xff0c;因为整个架构设计最难的一步已经完成了&#xff0c;但整体方案尚未完成&#xff0c;架构师还需继续努力。接下来我们需要再接…

java数据结构与算法刷题-----LeetCode645. 错误的集合(位运算解法需要重点掌握)

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 法一&#xff1a;桶排序思想法二&#xff1a;位运算 法一&#x…