当前位置: 代码迷 >> 综合 >> 人工智能------>第四天,深度学习,人工神经网络,卷积神经网络,opencv,音频采集、播放,百度AI平台的使用
  详细解决方案

人工智能------>第四天,深度学习,人工神经网络,卷积神经网络,opencv,音频采集、播放,百度AI平台的使用

热度:101   发布时间:2023-12-03 10:27:29.0

深度学习


    以神经网络算法为基础的机器学习

    深度学习算法:
        BP神经网络
        卷积神经网络
        循环神经网络
        基于注意的循环神经网络
        对抗神经网络

   神经网络
        脑神经网络


    人工神经网络


        一堆函数的网络

 

卷积神经网络


        使用卷积运算作为神经元函数的神经网络,我们称之为卷积神经网络

 

        使用范围:
            二维的图形特征提取

        卷积神经网络的结构
            常用层
                输入层:数据的输入
                关联权重层(*可以加,可以不加)
                卷积层:实现卷积过程
                池化层:对主要特征降维
                全连接层:将特征图全连接
                输出层:获取输出结果

            其他层
                正则化层
                高级层(激活函数/其他的函数)

        超参数:在机器学习中,需要反复迭代求得的参数,称之为超参数。

        卷积层:
            卷积运算:
                作用:
                    1.特征提取
                    2.特征降维

            卷积核:
                卷积核:也叫过滤器

                卷积核的移动
                    卷积核在输入矩阵中移动的格子数,称之为步长。
                    步长 >= 1

                卷积核的大小
                    卷积核的大小也是一个超参数,一般会选择奇数行列。

                卷积核的内容
                    卷积核的内容也需要反复迭代求得。

                常见的卷积核
                    ->水平边缘检测滤波器
                    ->垂直边缘检测滤波器
                    ->增强图片中心滤波器

            输入数据于卷积核不匹配的问题:
                填充,填充的大小也是超参数。
                填充的过程:
                    在输入矩阵外围填充一圈0

                    填充大小为p = (f - 1)/2

                    f为卷积核的大小


            一次卷积后,卷积得到的输出矩阵(特征图)的大小:
                s:步幅
                f:卷积核的大小
                n:输入矩阵的大小
                p:填充


                输出矩阵的大小为:(n + 2p -f)/s + 1

                n    f
                5x5 3x3 s=1 p=0         (5+0-3)/1 + 1 =    3

                5x5 3x3 s=2 p=1         (5+2-3)/2 + 1 = 3 
            多通道卷积如何实现:
                日常生活中,图片都是彩色的。是RGB图片。
                320*240
                RGB24:一个像素点占24bit位:
                    R:G:B : 8:8:8

                320 * 240 * 3

                按RGB不同的通道,就能得到3个像素信息矩阵。

                然而对彩色图片的卷积,就变成了对三个不同通道的矩阵进行卷积。我们把这种卷积方式称之为多通道卷积。

                如何处理多通道卷积:
                    此时就需要对不同通道使用不同的卷积核,而多个卷积核我们放在同一层面上进行卷积时,通常将其放入同一个卷积核组。
                    真实情况是会使用不同的卷积核组分别对多通道数据进行卷积。

                多通道卷积结果的运算:
                    每个卷积核组卷积完成后的输出,等同于单通道卷积
                    但是输出多个特征图,特征图的个数取决于卷积核组的个数。


                单通道卷积案例:
                    n:32*32 = 1024
                    s : 1
                    f : 5
                    p : 0

                    (n + 2p -f)/s + 1 = 27/1 + 1  = 28

                    28 * 28 = 784
                    2*2的采样控件
                    14 * 14 = 196

        导致模型失败的原因:
            过拟合:
                模型需要的特征值过于详细,导致模型没有泛化能力。
                案例:
                    白马非马
                    白天鹅不是天鹅

            欠拟合:
                模型提取的特征值太少,导致识别错误。
                案例:
                    指鹿为马


        池化层:(采样)
            池化的作用:
                1.池化层在CNN中,可以用来减小尺寸、提高运算速度以及减小噪声影响,让各特征更具有健壮性。
                2.降低网络训练参数及模型的过拟合程度
            什么是池化:
                池化(Pooling)又称为下采样,通过卷积层获得图像的特征后,理论上可以直接使用这些特征训练分类器(如softmax)。但是,这样做将面临巨大的计算量的挑战,而且容易产生过拟合的现象。
            池化的手段:
                ->最大池化
                    在池化区域中,取最大值,代表该区域的特征值
                ->均值池化
                    在池化区域中,取平均值值,代表该区域的特征值
                ->随机池化
                    在池化区域中,随机取一个值,代表该区域的特征值

            池化区域的大小:是反复迭代求得的。

        激活函数:
            什么是激活函数:
                sigmod
                Tanh函数
                ReLU函数

            激活函数的作用:
                卷积神经网络与标准神经网络类似,为了保证其非线性,也需要使用激活函数,即在卷积运算后,把输出值另加偏移量,输入到激活函数,然后作为下一层的输入
        
        全连接:
            进行多通道卷积/单通道卷积之后,会得到一些张量矩阵。将多维张量连接成一个一维张量,这个过程称之为全连接。


        常见的卷积神经网络结构:
            Le-Net5:串联型卷积神经网络

            GoogLeNet:Inception模型:并联型卷积神经网络


        卷积神经网络的目的:
            1.得到最优的神经网络结构
            2.得到最优的超参数组
            3.解决特征提取和特征降维的问题

opencv


    图形图像处理库,C++、Python等编程语言的接口

    如何安装:
        pip install opencv-python -i https://mirrors.aliyun.com/pypi/simple/  

使用opencv采集视频并且进行人脸检测定位 

        import cv2 as cv#打开系统中默认第一个摄像头类似于linux下打开/dev/video0cap = cv.VideoCapture(0)path = "D:\\Program Files\\Python36\\Lib\\site-packages\\cv2\\data\\"face_class = cv.CascadeClassifier(path+"haarcascade_frontalface_default.xml")while True:#读取摄像头采到的数据ret,img = cap.read()#将采集到的彩色图片转换为灰度图片img_gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)faces = face_class.detectMultiScale(img_gray, 1.3, 5)for (x,y,w,h) in faces:cv.rectangle(img,(x,y),(x+w,y+h),(0,0,255),3)#想要确保图片显示没有问题,建议先创建一个namedWindowcv.namedWindow("pic",cv.WINDOW_AUTOSIZE)cv.imshow("video",img)#判断是否按下q键if cv.waitKey(1) & 0xFF == ord('q'):break #销毁显示的所有窗体cv.destroyAllWindows()#释放掉创建出来的摄像头对象cap.release()

使用python实现录音功能


    库:pyaudio
    安装:pip install pyaudio    

例子:

    import pyaudioimport wave#一个管理PyAudio实例的说明(每一帧的大小)CHUNK = 1024#采集样例的位深度FORMAT = pyaudio.paInt16#通道数CHANNELS = 2#样例的速率RATE = 44100#录音时间RECORD_SECONDS = 5WAVE_OUTPUT_FILENAME = "output.wav"p = pyaudio.PyAudio()stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)print("* recording")frames = []for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):data = stream.read(CHUNK)frames.append(data)print("* done recording")stream.stop_stream()stream.close()p.terminate()wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(p.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b''.join(frames))wf.close()

python 语音播放


    语音播放包 pygame
    包的安装:pip install pygame
    例子:

        import pygameimport time#音频初始化pygame.mixer.init()#加载音频pygame.mixer.music.load("auido.mp3")#开始播放pygame.mixer.music.play()#等待播放(播放的过程)time.sleep(3)#停止播放pygame.mixer.music.stop()#注意:延时一定要有,不然听不到声音

百度AI平台的使用


    人脸对比


        EasyDL

"""
EasyDL 图像分类 调用模型公有云API Python3实现
"""import json
import base64
import requests
"""
使用 requests 库发送请求
使用 pip(或者 pip3)检查我的 python3 环境是否安装了该库,执行命令pip freeze | grep requests
若返回值为空,则安装该库pip install requests
"""# 目标图片的 本地文件路径,支持jpg/png/bmp格式
IMAGE_FILEPATH = "1.jpg"# 可选的请求参数
# top_num: 返回的分类数量,不声明的话默认为 6 个
PARAMS = {"top_num": 2}# 服务详情 中的 接口地址
MODEL_API_URL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/classification/mycheckface"# 调用 API 需要 ACCESS_TOKEN。若已有 ACCESS_TOKEN 则于下方填入该字符串
# 否则,留空 ACCESS_TOKEN,于下方填入 该模型部署的 API_KEY 以及 SECRET_KEY,会自动申请并显示新 ACCESS_TOKEN
ACCESS_TOKEN = ""
API_KEY = "gPhZUzA3yk70zSplKKhw5Itb"
SECRET_KEY = "GlSQaRcgDlmALq2CkTUD1XbAA9QanCYb"print("1. 读取目标图片 '{}'".format(IMAGE_FILEPATH))
with open(IMAGE_FILEPATH, 'rb') as f:base64_data = base64.b64encode(f.read())base64_str = base64_data.decode('UTF8')
print("将 BASE64 编码后图片的字符串填入 PARAMS 的 'image' 字段")
PARAMS["image"] = base64_strif not ACCESS_TOKEN:print("2. ACCESS_TOKEN 为空,调用鉴权接口获取TOKEN")auth_url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials"               "&client_id={}&client_secret={}".format(API_KEY, SECRET_KEY)auth_resp = requests.get(auth_url)auth_resp_json = auth_resp.json()ACCESS_TOKEN = auth_resp_json["access_token"]print("新 ACCESS_TOKEN: {}".format(ACCESS_TOKEN))
else:print("2. 使用已有 ACCESS_TOKEN")print("3. 向模型接口 'MODEL_API_URL' 发送请求")
request_url = "{}?access_token={}".format(MODEL_API_URL, ACCESS_TOKEN)
response = requests.post(url=request_url, json=PARAMS)
response_json = response.json()
response_str = json.dumps(response_json, indent=4, ensure_ascii=False)
print("结果:{}".format(response_str))
print(response_json['results'][0]['name'])

语音合成

from aip import AipSpeech""" 你的 APPID AK SK """
APP_ID = '24873305'
API_KEY = 'uzWDokZaiYxGTH5Sn1UKnN85'
SECRET_KEY = 'H3l5DBSfGbq7QsFgHAfPri04azPWVITs'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)result  = client.synthesis('你这黑厮,甚是嚣张,不知是烧窑的还是卖炭的', 'zh', 1, {'vol': 8, 'per':3, 'spd':4,
})# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):with open('audio.mp3', 'wb') as f:f.write(result)

语言识别

from aip import AipSpeech""" 你的 APPID AK SK """
APP_ID = '24873305'
API_KEY = 'uzWDokZaiYxGTH5Sn1UKnN85'
SECRET_KEY = 'H3l5DBSfGbq7QsFgHAfPri04azPWVITs'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)# 读取文件
def get_file_content(filePath):with open(filePath, 'rb') as fp:return fp.read()# 识别本地文件
ret = client.asr(get_file_content('audio.wav'), 'wav', 16000, {'dev_pid': 1737,
})print(ret['result'][0])
  相关解决方案