人工智能协会纳新培训第七周

人工智能协会纳新培训第七周

心得+延伸内容参考+作业

经过第七周的浅析深度学习培训以及对《 深度学习与图像识别:原理与实践》一书的部分章节初步阅读,我对深度学习和神经网络有了一个初步认知,形成了一个大概的基础框架,下面将对本周任务的完成进行记录并整理本周相关知识点。

任务目标一.
请将作业文件夹中的数据集扩充十倍(至少使用8种方式扩展)并将扩充后的数据集以及相关源码打包成zip上传至课堂派。
参考:图片预处理-keras中文文档注:
(https://keras-cn.readthedocs.io/en/latest/preprocessing/image/)
使用其他方式也行

经过几周下来的培训,学习了一些关于一些图像增强的操作
下面是相关操作及函数实现

1. dst = cv.blur(image, (1, 15))   #均值模糊 去随机噪声有很好的去燥效果(1, 15)是垂直方向模糊,(15, 1)还水平方向模糊

2. dst = cv.medianBlur(image, 5)  # 中值模糊  对椒盐噪声有很好的去燥效果

3. dst = cv.GaussianBlur(image, (15, 15), 0)  # 高斯模糊

4. dst = cv.bilateralFilter(image, 0, 100, 15) #双边滤波

5. dst = cv.pyrMeanShiftFiltering(image, 10, 50) #均值迁移

   

原始图片

下面将对原始图片进行操作并记录方便比对

在这里插入图片描述

在这里插入图片描述

均值模糊

也称为均值滤波,相当于卷积核的矩阵值全部为1/(卷积SIZE)

import cv2
from PIL import Image
import numpy
import numpy as np
for i in range(1,3):
    img = Image.open("D:\\15\\{}.jpg".format(i))
    img2 = cv2.cvtColor(np.array(img),cv2.COLOR_RGB2BGR)
    dst = cv2.blur(img2, (1, 15))
    img2 = Image.fromarray(dst) 
    img2.save("D:\\junzhi\\{}.png".format(i))
    

在这里插入图片描述
在这里插入图片描述

中值模糊

它是非线性滤波器,它是取领域的中值作为当前点的灰度值。处理有椒盐噪声(就像烧烤撒很多孜然,图片上有很多点)有很好的效果,实际应用较多。

import cv2
from PIL import Image
import numpy
import numpy as np
for i in range(1,3):
    img = Image.open("D:\\15\\{}.jpg".format(i))
    img2 = cv2.cvtColor(np.array(img),cv2.COLOR_RGB2BGR)
    dst = cv2.medianBlur(img2, 5) 
    img2 = Image.fromarray(dst) 
    img2.save("D:\\zhongzhi\\{}.png".format(i))
    

在这里插入图片描述
在这里插入图片描述

高斯模糊

高斯模糊和均值模糊其原理上的唯一区别只是在于卷积核的值不同罢了,高斯卷积核矩阵值服从二维高斯函数,也就是说一个图像与服从二维高斯分布的函数做卷积,由于高斯函数是连续的,所有yaoj要将二维高斯函数进行采样和离散化,最后得到服从高斯函数规律的卷积核矩阵。

import cv2
from PIL import Image
import numpy
import numpy as np
for i in range(1,3):
    img = Image.open("D:\\15\\{}.jpg".format(i))
    img2 = cv2.cvtColor(np.array(img),cv2.COLOR_RGB2BGR)
    dst = cv2.GaussianBlur(img2, (15, 15), 0) 
    img2 = Image.fromarray(dst) 
    img2.save("D:\\gaosi\\{}.png".format(i))
    

在这里插入图片描述
在这里插入图片描述

双边滤波

是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,即能够去除噪声,又能进行边缘保护。

import cv2
from PIL import Image
import numpy
import numpy as np
for i in range(1,3):
    img = Image.open("D:\\15\\{}.jpg".format(i))
    img2 = cv2.cvtColor(np.array(img),cv2.COLOR_RGB2BGR)
    dst = cv2.bilateralFilter(img2, 0, 100, 15) 
    img2 = Image.fromarray(dst) 
    img2.save("D:\\shuangbian\\{}.png".format(i))
    

在这里插入图片描述
在这里插入图片描述

均值迁移

均值迁移模糊是图像边缘保留滤波算法中的一种,经常用来在对图像进行分水岭分割之前去噪声,可以大幅度提高分水岭分割的效果。

import cv2
from PIL import Image
import numpy
import numpy as np
for i in range(1,3):
    img = Image.open("D:\\15\\{}.jpg".format(i))
    img2 = cv2.cvtColor(np.array(img),cv2.COLOR_RGB2BGR)
    dst = cv2.pyrMeanShiftFiltering(img2, 10, 50)
    img2 = Image.fromarray(dst) 
    img2.save("D:\\qianyi\\{}.png".format(i))
    

在这里插入图片描述
在这里插入图片描述

自定义模糊(锐化)

锐化就是突出图像细节或者增强图像被模糊的地方,锐化原理就是细节增强,图像的导数就是图像的细节,随着导数阶数升高,能代表的东西也不同。 (
​​​​​​​

import cv2 as cv
import numpy as np
def average(image):
	
	new=np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]],np.float32)
	scr2=cv.filter2D(image,-1,new)
	cv.imshow("rui hua",scr2)
	
 
    
image1=cv.imread("D://4.jpg")
cv.imshow("yuantu",image1)
average(image1)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述

以上的功能也可以叠加使用

import cv2 as cv
#调用opencv-python库
def tuxiangzengqiang(image,a):
    if a == 1:
        dst = cv.blur(image, (1, 15))
    elif a==2:
        dst = cv.medianBlur(image, 5)
    elif a ==3:
        dst = cv.GaussianBlur(image, (15, 15), 0)
    elif a == 4:
        dst = cv.bilateralFilter(image, 0, 100, 15)
    elif a == 5:
        dst = cv.pyrMeanShiftFiltering(image, 10, 50)
    elif a == 6:
        dst = cv.blur(image, (1, 15))
        dst = cv.bilateralFilter(dst, 0, 100, 15)
        dst = cv.pyrMeanShiftFiltering(dst, 10, 50)
    elif a == 7:
        dst = cv.medianBlur(image, 5)
        dst = cv.bilateralFilter(dst, 0, 100, 15)
        dst = cv.pyrMeanShiftFiltering(dst, 10, 50)
    elif a == 8:
        dst = cv.GaussianBlur(image, (15, 15), 0)
        dst = cv.bilateralFilter(dst, 0, 100, 15)
        dst = cv.pyrMeanShiftFiltering(dst, 10, 50)
    

    return dst

t = cv.imread("2.jpg")
#阅读图像
cv.imshow("yuantu",t)
#说明:
#tuxiangzengqiang(t,a)
#a = 1时,进行均值模糊
#a = 2时,进行中值模糊
#a = 3时,进行高斯模糊
#a = 4时,做一个双边滤波(强化边缘)
#a = 5时,做均值迁移,有效的提升图像的关联性
#a = 6,是功能145的结合
#a = 7,是功能245的结合
#a = 8,是功能345的结合
x = tuxiangzengqiang(t,8)
cv.imshow("jieguo",x)
#显示结果
cv.waitKey(0)

高通过滤/滤波(边缘检测/高反差保留)

import cv2

img=cv2.imread('15.jpg',cv2.IMREAD_COLOR)
x=cv2.Sobel(img,cv2.CV_16S,1,0)
y=cv2.Sobel(img,cv2.CV_16S,0,1)

absx=cv2.convertScaleAbs(x)
absy=cv2.convertScaleAbs(y)
dist=cv2.addWeighted(absx,0.5,absy,0.5,0)

cv2.imshow('original_img',img)
cv2.imshow('y',absy)
cv2.imshow('x',absx)
cv2.imshow('dsit',dist)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

通道分离重组

from PIL import Image
import matplotlib.pyplot as plt
img=Image.open("D://4.jpg")  #打开图像
r,g,b=img.split()   #分离三通道
pic=Image.merge('RGB',(g,b,r)) #合并三通道
plt.title('chongzu')
plt.imshow(pic),plt.axis('off')
plt.show()

在这里插入图片描述
本次作业中碰到的问题整理

1第一次遍历30张图片时只能得到29张结果
原因分析
for i in range(1,5):
print i
1
2
3
4

我们在这里所做的是提供两个数字,range返回一个从第一个数字到第二个数字的一个数字序列。例如,range(1,5)给出序列[1, 2, 3, 4]。默认情况下,range 步距取为1。如果我们提供第三个数字,range那么它变成了步距。例如range(1,5,2)得到[1,3]。

for循环然后遍历这个范围,for i in range(1,5)相当于 for i in [1, 2, 3, 4],这就像把序列中的每一个数(或对象)分配给i,一次一个,然后为每个i值执行该语句块。
所以正确的应该是1~31而不是30

2pylab.imread和PIL.Image.open读入的都是RBG顺序,而cv2.imread读入的是BGR顺序,混合使用的时候要特备注意

深度学习知识整理

本周主要学习了以下四个内容
深度学习的整体流程
深度学习的三大要素
神经网络的超参数
神经网络的激活函数

深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI, Artificial Intelligence)。

深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。 深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。(摘自百度)

在这里插入图片描述
关于训练
训练的关键:

在输入数据做迭代训练时的关键要关注模型在训练集(绿线)和验证集(紫线)所画出的误差曲线之间关系(或准确度曲线,曲线任选其一,误差越小越好或准确度越高越好)

欠拟合及应对方法:
如果训练集和验证集的误差均较高,则说明训练还不够,处于模型欠拟合状态,需要继续迭代训练,当然如果迭代多久都无法降低误差,则考虑所用的模型是否太小了,导致模型学不到东西。

过拟合及应对方法:
如果训练集和验证集的两者之间的误差差别较大,训练集的误差较低(训练集的误差永远是越来越低的,因为模型就是在不断拟合训练集的),而验证集的误差相对较高,则模型已经处于过拟合状态了。因为模型已经训练的过头,倾向于死记硬背的记住训练集,不再具有泛化性,而在验证集上的表现就很差。此时可以考虑用正则化的方法,如L1正则化或L2正则化,也可以使用Dropout(随机丢弃神经元的)的方法,防止过拟合。

最佳拟合:
当然,欠拟合和过拟合的中间状态就是刚好拟合,是最佳的训练效果,这里用到的方法叫做Early Stopping,就是当你的验证集的误差曲线不断降低,但是验证集的误差开始有向上反弹的趋势时就可以停止训练的迭代了,此时模型的参数就是拟合的较好的情况。

深度学习的三大要数
一、数据的干净程度
二、网络结构
三、损失函数


通过数据集的预处理来达到相关目的
增强数据的多样性,从而增强模型的鲁棒性。
旋转 裁剪 平移 模糊 加噪等操作

全连接层、卷积层、池化层
(具体内容与具象化表达记录与前几次博客中)
Dropout层
在这里插入图片描述
在这里插入图片描述
一种重要的正则化手段,可以降低网络过拟合的风险

此外还有
LeNet 1998、AlexNet 2012、VGGNet 2014、Network In Network 2014、GoogLeNet V1 2014
GoogLeNet V3 2015、GoogLeNet V3 2015、DenseNet 2017


Sigmoid Cross Entropy Loss
在这里插入图片描述
在这里插入图片描述
(1)注意数值计算的溢出问题;
(2)通常用于二分类问题;
(2)适用于相互不独立的一对多问题

Softmax Loss
面向更多的K分类类间独立问题,网络有K个输出。
在这里插入图片描述
在这里插入图片描述
L1 / L2 Loss
通常适用于回归问题:
在这里插入图片描述
在这里插入图片描述
(1)L2 Loss中,之所以除以2N,只是为了在求导时比较方便而已;
(2)L1 和 L2哪个更好用一点,更多的时候真的要看经验;
(3)通常在L1 和 L2 Loss之前都会对输入做归一化(常用单位方差归一化),以防止数值溢出和Loss动荡

神经网络的超参数
学习率Learning rate
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
学习率设置
在训练过程中,一般根据训练轮数设置动态变化的学习率。

刚开始训练时:学习率以 0.01 ~ 0.001 为宜。
一定轮数过后:逐渐减缓。
接近训练结束:学习速率的衰减应该在100倍以上。
在这里插入图片描述
在这里插入图片描述
曲线 初始时 上扬 [红线]:
初始 学习率过大 导致 振荡,应减小学习率,并 从头 开始训练 。

曲线 初始时 强势下降 没多久 归于水平 [紫线]:
后期 学习率过大 导致 无法拟合,应减小学习率,并 重新训练 后几轮 。

曲线 全程缓慢 [黄线]:
初始 学习率过小 导致 收敛慢,应增大学习率,并 从头 开始训练 。
在这里插入图片描述

神经网络的激活函数
激活函数不是真的要去激活什么。在神经网络中,激活函数的作用是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题。

在这里插入图片描述

在这里插入图片描述
此处具体内容可参考https://www.cnblogs.com/rgvb178/p/6055213.html

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值