1. 程式人生 > >人臉識別(稀疏表示、人工神經網路)

人臉識別(稀疏表示、人工神經網路)

1. 稀疏表示

對於一個訊號 x,如果 x 中大部分的元素都為 0,只有少部分元素不為0,則稱訊號 x 為稀疏的。或者 x 中大部分元素都為較小值,接近於 0,只有少部分元素為較大值,也可以稱訊號 x 為稀疏的(例如,影象傅立葉變換之後,或者小波變換之後)。

訊號稀疏表示問題可以通過求解稀疏正則優化問題實現:

minαAg(α)=Δf(α)+λΩ(α)

其中,f(α) 為忠誠項,Ω 為稀疏正則項,λ 為正則項引數,用於調節忠誠項和正則項的比重。

為了約束係數 α 具備稀疏性,Ω 可取 l0 範數,l0 範數表示非0元素個數,即:

Ω(α)=α0

f(α) 為忠誠項,通常取平方誤差:

f
(α)=12xDα22

稀疏正則優化問題常用的兩種求解方式為:貪婪演算法求解,凸鬆弛求解,其中凸鬆弛求解就是將上述問題轉換為凸優化問題。例如通過 l1 正則近似,得到:

minαA=12xDα22+λα1

這是統計學中典型的 Lasso 問題,相比與 l1 正則,更簡單常用的是 l2 正則,也稱為 Tikhonov 正則,如下所示:

minαA=12xDα22+λα2

l2 正則項具有收縮作用,但不具有選擇功能,即所有變數都會被選擇,而與 Tikhonov 正則相比,Lasso 具有收縮和選擇的雙重功能,Lasso 中的 l1 範數能夠產生稀疏的解,可參考:

範數

這裡寫圖片描述

上述問題可通過多種方式求解:

貪婪求解演算法:匹配追蹤(MP),正交匹配追蹤(OMP),分級正交匹配追蹤(stOMP)。

凸優化求解方法:加速近鄰梯度法(APG)。

2. 組合 Lasso

有些時候訊號存在分組結構資訊,可能不強調整體的稀疏型,而且更高層次的稀疏,如 Yuan 等提出的 Group Lasso,
在 Group Lasso 中,字典的原子按照[1:p]的劃分,分成 G 組:

x=Dα=[D1D2...Dp]α1α2...αp

所以,第一部分的優化問題可以轉換為:

minαA=12xDiαi22+λi=1p
αi
1

3. 稀疏表示人臉識別

參考論文 《Robust face recognition via sparse representation》,採用 Yale 人臉資料庫,是不同光照,不同表情下的人臉影象,共 2414 張圖片,分為38類。原始影象的大小為 168 x 192,在本例中將其轉換為 32 x 32 的影象,並拉成一個 1 024 維向量,其中的 20% 作為訓練資料,80%用於測試。

步驟如下:

  1. 由所有樣本構成字典 D=[D1,D2,...,DK],其中Di為第 i 類樣本組成的子矩陣。
  2. 歸一化矩陣D,使每列的 l2 範數為 1
  3. 求解稀疏表示問題,計算測試樣本 x 在第 i 類上的重構誤差:
    ri(x)=xDiαi2
  4. 依據重構誤差確定樣本類別:
    c(x)=argminiri(x)

4. 基於人工神經網路的人臉識別

採用與人工神經網路-文字識別中類似的方式,網路層輸入層結點數為 1024,隱藏層結點數為 100,輸出層結點數為 38。考慮到訓練樣本較少,所以 batch 數較小,為 10,而迭代次數較多,為 500。採用後向傳播演算法進行求解(BP),

定義誤差:

相關推薦

人臉識別稀疏表示人工神經網路

1. 稀疏表示 對於一個訊號 x,如果 x 中大部分的元素都為 0,只有少部分元素不為0,則稱訊號 x 為稀疏的。或者 x 中大部分元素都為較小值,接近於 0,只有少部分元素為較大值,也可以稱訊號 x 為稀疏的(例如,影象傅立葉變換之後,或者小波變換之後)。

OpenCV人臉識別正臉左右側臉----GPU版使用

#include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/gpu/gpu.hpp> #include<

基於Python3.7和opencv的人臉識別含資料收集,模型訓練

前言 第一次寫部落格,有點緊張和興奮。廢話不多說,直接進入正題。如果你渴望使你的電腦能夠進行人臉識別;如果你不想了解什麼c++、底層演算法;如果你也不想買什麼樹莓派,安裝什麼幾個G的opencv;如果你和我一樣是個還沒入門的小白,但是想體驗一下人臉識別的魅力。那麼恭喜你,這篇文章就是為你準備的。讓我們開始吧

人臉識別--訓練一個認識我的神經網路

這段時間正在學習tensorflow的卷積神經網路部分,為了對卷積神經網路能夠有一個更深的瞭解,自己動手實現一個例程是比較好的方式,所以就選了一個這樣比較有點意思的專案。 專案的github地址:github 喜歡的話就給個Star吧。 想要她認得我,就需要給她一些我的照

ANN人工神經網路基礎知識

ANN是一個非線性大規模並行處理系統 1.1人工神經元的一般模型 神經元的具有的三個基本要素 1、一組連線,連線的強度由個連線上的權值表示,若為正,則表示是啟用,為負,表示,抑制 2、一個求和單元:用於求各個輸入訊號的加權和 3、一個非線性啟用

決策樹貝葉斯人工神經網路K-近鄰支援向量機等常用分類演算法小結

單一的分類演算法:決策樹、貝葉斯、人工神經網路、K-近鄰、支援向量機和基於關聯規則的分類,HMM 組合分類演算法:Bagging和Boosting k-近鄰(kNN,k-Nearest Neighbors)演算法 找出與未知樣本x距離最近的k個訓練樣本,看這k個樣本中

MLP多層感知機人工神經網路原理及程式碼實現

一、多層感知機(MLP)原理簡介多層感知機(MLP,Multilayer Perceptron)也叫人工神經網路(ANN,Artificial Neural Network),除了輸入輸出層,它中間可以有多個隱層,最簡單的MLP只含一個隱層,即三層的結構,如下圖:從上圖可以看

tensorflow手冊cifar10.pyalexnet,卷積神經網路的一些理解

以下只寫一些我花了點時間才理解的東西:       1、卷積tf.nn.conv2d()函式的理解:它其中有第二個引數是[filter_height, filter_width, in_channels, out_channels]。程式碼中第二次卷積,輸入是64,輸出也是6

基於OpenCV 人工神經網路的噴碼字元識別C++

新手上路記本人做的第一個影象處理實驗 噴碼字元識別流程:讀圖——濾波——二值化——腐蝕——分割——ANN訓練——識別 本例程訓練類別14類(0-9,C、L、冒號、空格),每類樣本數量50張 搭配環境:VS2017+opencv3.4.1 語言:C++ 由於工程有點大,下面進行簡單介紹,詳情見

CNN卷積神經網路應用於人臉識別詳細流程+程式碼實現)和相應的超引數解釋

DeepLearning tutorial(5)CNN卷積神經網路應用於人臉識別(詳細流程+程式碼實現) @author:wepon 本文主要講解將CNN應用於人臉識別的流程,程式基於Python+numpy+theano+PIL開發,採用類似LeNet5的

利用pythontensorflowopencv實現人臉識別包會

一,前言 本人是機械專業在讀碩士,在完成暑假實踐的時候接觸到了人臉識別,對這一實現很感興趣,所以花了大概十天時間做出了自己的人臉識別。這篇文章應該是很詳細的了所以幫你實現人臉識別應該沒什麼問題。 先說本博文的最終要達到的效果:通過一系列操作,在攝像頭的視訊流中識別特定

人臉識別初學篇-VS2015+opencv3.2的配置

logs 點擊 環境變量 安裝 details 接下來 安裝包 png 應該 初學人臉識別,感覺安裝也是一個很大的麻煩。 寫在這裏記錄一下吧 一:先安裝好我們需要的軟件 首先安裝Vs2015,在官網或者csdn搜一下應該找的到。 安裝步驟沒有太多講究。 點擊exe文件,

R語言——實驗4-人工神經網路更新中

帶包實現: rm(list=ls()) setwd("C:/Users/Administrator/Desktop/R語言與資料探勘作業/實驗4-人工神經網路") Data=read.csv("sales_data.csv")[,2:5] library(nnet) colnames(

深度學習——deepNN模型實現攝像頭實時識別人臉表情C++和python3.6混合程式設計

一、背景介紹 最近需要做人臉識別方向的東西,就被分配了新的任務,利用攝像頭實時檢測人臉表情,並製作成一個小軟體,這裡當然要用C++實現,並用C++做成一個介面。 由於博主之前用python做過類似的小程式,因此這裡的模型實現主要採用了python,為了用C++實現介面,這裡採用C++呼叫py

送你9個常用的人臉資料庫附連結報告

本文主要介紹以下幾種常用的人臉資料庫: 1. FERET人臉資料庫 http://www.nist.gov/itl/iad/ig/colorferet.cfm 由FERET專案建立,此影象集包含大量的人臉影象,並且每幅圖中均只有一個人臉。該集中,同一個人的照片有不同表情、光照、姿態和年齡的變化。包含1萬

人臉識別筆記

案例一:顯示圖片 #1、匯入庫 import cv2 # 2、載入圖片 img = cv2.imread(r'C:\Users\HASEE\Desktop\image1.jpg') # 3、建立一個視窗 cv2.namedWindow('meinv') # 4、顯示圖片 cv2.imshow('

第十八天呼叫攝像頭人臉識別有誤判

import cv2 as cv import numpy as np def face_detect_demo(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) ##疊加分類器 face_detector = c

機器學習筆記十二:TensorFlow實戰四影象識別與卷積神經網路

1 - 卷積神經網路常用結構 1.1 - 卷積層 我們先來介紹卷積層的結構以及其前向傳播的演算法。 一個卷積層模組,包含以下幾個子模組: 使用0擴充邊界(padding) 卷積視窗過濾器(filter) 前向卷積 反向卷積(可選) 1.1

dlib實現人臉識別一)生成描述檔案和標籤檔案

#include <iostream> #include <dlib/dnn.h> #include <dlib/data_io.h> #include <dlib/image_processing.h> #include <dlib/gui

長短期記憶LSTM系列_1.1迴歸神經網路在時間序列預測中的介紹和應用

摘要,通過本文你可以學到: 傳統的時間序列預測方法側重於具有線性關係的單變數資料以及固定和手動診斷的時間依賴性。 神經網路增加了學習可能的噪聲和非線性關係的能力,其中任意定義但固定數量的輸入和輸出支援多變數和多步預測。 遞迴神經網路增加了有序觀察的顯式處理和從上下文學習時間依賴