CVPR2014: DeepID解讀

上周五就要發的,拖........拖.......拖到現在,文中有不準確的地方,歡迎批評指正。
DeepID是一種特征提取的算法,由港中文湯曉鷗團隊于2014年提出,發表于CVPR2014。其應用領域是人臉識別的子領域——人臉驗證,就是判斷兩張圖片是不是同一個人。之前的人臉驗證任務主要的方法是使用過完備的(over-complete)低層次特征,結合淺層的機器學習模型進行的。過去的方法常常是將人臉提取出幾萬乃至幾百萬的特征,然后將特征進行降維,再計算兩個特征的相似度,本文提出一種使用深度學習提取人臉深層次特征(稱之為DeepID)的方法。DeepID特征由人臉分類任務學習得到,此特征可以用于人臉驗證中,最終在LFW數據集上取得了97.45%的成績。
一、網絡架構
DeepFace的架構并不復雜,層數也不深。網絡架構由4個卷積層 + 1個全連接層構成。
二、從實現過程,理解網絡
(一)做patch
1.截區域
按照人臉特征點的分布,在1張輸入圖片上取10個區域,如下圖所示:
2.數據增強
(1)將每個區域,resize成3中不同尺度的pic,如下圖所示:
(2)將圖像進行水平翻轉
(3)提取灰度圖
(4)patches總量
經過前3步的數據增強,此時的1張image,產生了10 * 3 * 2 * 2 = 120個區域,將每1個區域與其水平翻轉的區域,送入網絡,進行特征提取。此步共訓練60個神經網絡。輸出160*2維的DeepID
3.增加patches效果
由下圖可見,增加patches數量后,網絡性能,相對于只用了1整張image的原始結構,提升明顯,感覺就是數據增強的原因。
(二)過ConvNets
以1個區域的輸入為例,如果區域是長方形,則resize成39*31,如果如果區域是正方形,則resize成31*31,假設本次輸入的區域是長方形,喂入網絡,如上圖所示。
圖片經過4層卷積,第3層,和第4層的feature map分別是3*2*60,和2*1*80維。將最后2層的feature map分別過全連接層,concatenate成1個160維的vector
Concatenate方式:在同一維度上疊加
不同hierarchy的Feature map疊加在一起,分類器可以看到多尺度的圖像。想當于聯系了上下文,網絡性能更好。
DeepID自身的分類錯誤率在40%到60%之間震蕩,雖然較高,但DeepID是用來學特征的,并不需要要關注自身分類錯誤率
將上文160維的vector送入soft-max進行分類,輸出10000分類的結果。60個網絡,各自對應各自預測的cls結果,如下圖所示:
三、利用DeepID做verification
本來以為做完cls,這個paper就可以結束了,然鵝,看了paper后面密密麻麻的2張,才意識到這個paper是關于verification的,之所以要做cls,主要是多分類的訓練,可以提高ConvNet的提取特征的能力,終其目的,還是為了拿到提取的特征,做其關心的verification
(一)用前面訓練好的網絡,對2張圖片做verification
每張照片,根據是否水平翻轉,分為2組,每組有60個patches(10個區域,每個區域3個size,每個size有RGB和Grey2種模式)
將每1個區域與其水平翻轉對應的部分,聯合要對比的圖片的同一個區域,組著在一起,送入網絡,進行特征提取。此步調用了60個神經網絡。
每張輸入的160維vector,即為那個區域的identity,可視化160維的數據如下,可以看出相同人臉的identity相似度高,不同人臉的identity區別較大。
1張image經過網絡,輸出120(60個patches,每個patch里2張圖)*160=19200維vector,以此vector表征人臉的identity。
將2張face的identity,送入joint Bayesian,判斷是否為同1個人。
下面介紹一下classifier里面的joint Bayesian分類器
(二)Joint Bayesian
(1)經典Bayesian Face
在介紹joint Bayesian之前,先看一下joint Bayesian出現之前,業界廣泛使用的經典Bayesian Face,算法描述如下
但是經典bayesian從2維投射到1維時,會喪失一些分區信息,導致在2維平面上可分的目標,在1維平面上變得不可區分。
從上圖中可以看到,2-D的數據通過差分x-y映射到1-D上。O附近的點交錯在一起, 使得在O附近的Class-1 和Class-2 無法區分開來。這就是經典Bayesian Face的缺陷
(2)joint Bayesian
針對經典Bayesian Face出現的問題,中科大,港中文以及亞研院的4位同學,在孫劍的指導下于2012年提出來joint Bayesian方法
(三)神經網絡分類器
14年,當時的verification sota 分類器還是joint Bayesian,神經網絡成績一般,作者試了這2種方法后,選擇了性能更優的joint Bayesian
四、網絡成績
DeepID相對于傳統的PCA方法,表征能力進一步增強
DeepID在LFW數據集上取得了97.45%的準確率,相比于DeepFace的97.35%,獲得了進一步的提高。ROC曲線如下:
五、數據指標
簡單的介紹下ROC,以前看的時候沒有仔細去弄明白這個指標,最近看好多paper上都有這個東西,查閱了資料,總結如下
ROC全名叫receiver operating characteristic curve,中文譯為:接收者操作特征曲線,用以說明二分類器在識別閾值變化時的診斷能力。
ROC將偽陽性率(FPR)定義為 X 軸,真陽性率(TPR)定義為 Y 軸。繪圖方法如下
(一)統計樣本分類score
將一系列樣本,按照positive可能性得分,進行排序
(二)計算真陽率和假陽率
以score作為閾值,依次對排好序的樣本進行判斷,score > threshold, 則判定為Positive, 否則判為Negative,每一個threshold計算1次真陽率和假陽率,做出這個20個樣本的真陽率-假陽率對應圖。
(三)ROC曲線優勢
為什么要使用ROC呢?因為ROC曲線有個很好的特性:當測試集中的正負樣本的分布變換的時候,ROC曲線能夠保持不變。在實際的數據集中經常會出現樣本類不平衡,即正負樣本比例差距較大,而且測試數據中的正負樣本也可能隨著時間變化。下圖是ROC曲線和Presision-Recall曲線的對比。
(a)和(c)為Roc曲線,(b)和(d)為Precision-Recall曲線。(a)和(b)展示的是分類其在原始測試集(正負樣本分布平衡)的結果,(c)(d)是將測試集中負樣本的數量增加到原來的10倍后,分類器的結果,可以明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線變化較大。
六、小結
分類數提高,可以學到表征力更強的identity
用更多的分類來訓練網絡,測試的error rate持續降低。一開始還疑惑DeepID初衷是做verification,為什么一開始要用softmax做cls,其實原因到這里就明了了,分類越多,學到的160維的identity表征力越強。

轉載于:https://www.cnblogs.com/jiangshaoyin/p/10895927.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448928.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448928.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

成大事必備9種能力 9種手段 9種心態(圖)

成大事必備9種能力 1、擺正心態,敢于面對現實 對于那些不停地抱怨現實惡劣的人來說,不能稱心如意的現實,就如同生活的牢籠,既束縛手腳,又束縛身心,因此常屈從于現實的壓力,成為懦弱者;而那些…

解決:A component required a bean of type ‘javax.jms.Queue‘ that could not be found.

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 情景描述:只是想簡單寫個 ActiveMQ 的小樣,啟動服務卻報錯: Error starting ApplicationContext…

【計算機視覺】OpenCV篇(3) - 圖像幾何變換(仿射變換/透視變換)

圖像的幾何變換從原理上看主要包括兩種:基于23矩陣的仿射變換(平移、縮放、旋轉和翻轉等)、基于33矩陣的透視變換。 仿射變換基本的圖像變換就是二維坐標的變換:從一種二維坐標(x,y)到另一種二維坐標(u,v)的線性變換: …

Linux學習第五篇之文件處理命令touch、cat、tac、more、less、head、tail

一、touch命令: 命令名稱:touch 命令所在路徑:/bin/touch 執行權限:所有用戶 語法:touch [文件名] 功能描述:創建空文件 例子: touch leanring.file 說明:在當前目錄下創建空文件l…

OpenCL 與 CUDA

根據網站資料,簡單地匯編一下CUDA與OpenCL的區別。如有錯誤請指出。 題外話: 美國Sandia國家實驗室一項模擬測試證明:由于存儲機制和內存帶寬的限制,16核、32核甚至64核處理器對于超級計算機來說,不僅不能帶來性能提升…

DBMS (數據庫管理系統) 是什么

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 數據庫管理系統(英語:database management system,縮寫:DBMS) 是一種針對對…

Eclipse4JavaEE安裝SpringBoot

第一步:下載SpringBoot SpringBoot官網下載鏈接 第二步:在Eclipse里進行安裝 打開Eclipse,菜單欄Help -》Install New Software,進入下圖界面,點擊Add 設置Name和Location,Name看自己喜好,Locat…

django中使用原生sql

django中使用原生sqlfrom django.db import connection cursor connection.cursor() cursor.execute("select * from xx where id1") row cursor.fetchone() users User.objects.raw("select * from user where namexx") for user in users: print(use…

從零開始玩轉 logback、完整配置詳解

官網地址:https://logback.qos.ch/manual/index.html 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 概述 LogBack是一個日志框架,它與Log4j可以說是同出一源&a…

Rust 編程 前言

雖然不是那么明顯,但 Rust 程序設計語言的本質在于 賦能(empowerment):無論你現在編寫的是何種代碼,Rust 能讓你在更為廣泛的編程領域走得更遠,寫出自信。 比如,“系統層面”(“syst…

ffmpeg解碼器優化

在以前的視頻項目中,用到了幾種商業版的H.264解碼器。雖然性能穩定,支持DXVA或CUDA,在高清視頻播放效果上不錯,但是存在一個共同的缺陷-存在幀間延遲。經過我的測算,大概有3幀的緩沖延遲。當幀率在20fps以上時&#xf…

PHP 結合 Boostrap 結合 js 實現學生列表刪除編輯以及搜索功能(完結)

這個自己的小項目要先告一段落了。可能還有許多bug。請見諒 刪除學生功能 PHP: // 這里是通過前端代碼HTML中的 url 傳過來的&#xff0c;用 $_GET 來獲取(相關HTML代碼可以看一下到主頁看一下前幾條博客)if (empty($_GET[num])) exit(<h1>找不到您要刪除的學生的學號<…

ActiveMQ_Windows版本的安裝部署

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1, 保證電腦上安裝了jdk6以上版本的java&#xff0c;并配置了好環境變量 &#xff1b; 2, 官方下載地址&#xff1a;http://activemq.a…

Java 自定義異常(轉載)

1.異常的分類 1. 非運行時異常(Checked Exception) Java中凡是繼承自Exception但不是繼承自RuntimeException的類都是非運行時異常。 2. 運行時異常&#xff08;Runtime Exception/Unchecked Exception&#xff09; RuntimeException類直接繼承自Exception類&#xff0c;稱為運…

如何將markdown轉換為wxml

話說我要為技術博客寫一個小程序版&#xff0c;我的博客解決方案是 hexo github-page&#xff0c;格式當然是技術控們喜歡的 markdown 了 。但小程序使用的卻是獨有的模版語言 WXML。我總不能把之前的文章手動轉換成小程序的 wxml 格式吧&#xff0c;而網上也沒完善的轉換庫&a…

巧妙喝水打敗多種疾病

喝水&#xff0c;我們每天都會做的一件事&#xff0c;殊不知&#xff0c;喝水得當能打敗多種疾病問題! 方法/步驟 一、很多人都聽說過早晨喝一杯水對身體有好處&#xff0c;有人喝鹽水?有人喝蜂蜜水?還有人為了美白喝檸檬水?到底喝什么水最好呢?人體經過了一宿的代謝&…

git 幾個commit點合并成一個commit點

在用git做版本控制器的時候&#xff0c;經常會遇到以下情況&#xff1a; 1、在做1個功能的時候&#xff0c;你自己覺得代碼沒問題了&#xff0c;就本地commit&#xff0c;然后提交代碼&#xff0c;在gitlab上發起和并請求&#xff0c;老大看完之后&#xff0c;覺得你還有修改的…

JNDI 是什么

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 JNDI : 簡單理解&#xff0c;就是把固定的連接方式剝離出來&#xff0c;單獨寫在一個配置文件里。(下載.properties里面通過InputStream…

并發編程模型

并發編程模型 一.分類 按照線程通信機制可以分為共享內存模型和消息傳遞模型&#xff1a; 1.共享內存模型&#xff1a;線程之間共享程序的公共狀態&#xff0c;編程之間通過讀寫內存中的公共狀態來隱式進行通信。相互通信的進程共享某些數據結構或共享存儲區&#xff0c;進程通…

換工作,讓我里外不是人,到底錯在哪兒

看看時間&#xff0c;現在是凌晨4點多&#xff0c;窗外時不時一道閃電&#xff0c;雨也一陣一陣的&#xff0c;雷聲像逐漸遠離的喧囂的火車一樣。我不是睡眠困難者&#xff0c;但是&#xff0c;昨晚吃完晚飯之后&#xff0c;在衣服都未脫的情況下&#xff0c;暈暈乎乎的睡到現在…