CVPR 2019笔迹识别论文:逆鉴别网络+八路Attention
點擊上方“AI搞事情”關注我們
論文鏈接: http://openaccess.thecvf.com/content_CVPR_2019/papers/Wei_Inverse_Discriminative_Networks_for_Handwritten_Signature_Verification_CVPR_2019_paper.pdf
復現源碼:https://github.com/jeason353/IDN
※ 前言
個人簽名屬于人們的生物識別特征之一,在財務、商業、司法文件得以廣泛使用,簽名的真實性鑒別(筆跡鑒定)成為了一個具有現實應用場景的任務。
本文針對離線手寫簽名問題,引入了Attention模塊以及對圖片進行黑白翻轉搭建多路結構來訓練網絡,聚焦在筆劃信息上從而提取出更加魯棒的特征,以適應于簽名認證任務。
簽名圖片數據是比較稀疏的,經過二值化處理以后大部分區域都是背景,如何從稀疏的筆劃像素部分提取有效信息是簽名認證任務的關鍵點。
1. 簽字數據集
論文列出的圖片數據集
CEDAR
MCYT-75
BHSig
GPDS數據類簽名數據集
MCYT-100:該數據庫是由馬德里自治大學的BiDA實驗室采集的簽名數據庫,通過電磁感應式手寫板WACOM手寫板采集到采樣點的坐標、時刻和筆尖壓力值,以及筆的水平偏角和垂直偏角等信息,該數據庫包括100個簽名,每個簽名有25個真實樣本和25個偽造樣本,是目前數據量最大的常用數據庫之一。
SVC2004:2004年由香港科技大學組織的第一屆世界簽名認證競賽提供的比賽數據庫,包含了中文和英文簽名。任務1 僅提供簽名的x、y 坐標軌跡特征,任務2提供了簽名的軌跡、壓力、簽名時刻、提筆落筆標記以及筆的水平偏角和垂直偏角。該數據的數據量較少,每個任務僅有40個簽名用戶,每個包括20個真實簽名和20個偽造簽名。
SUSIG:數據庫是由土耳其薩班哲大學生物特征識別研究組采集的簽名數據庫,數據包含智能筆采集的簽名時筆的軌跡和壓力感應屏記錄的筆尖壓力信息。該數據庫包括了94個簽名,每個簽名有20個真實樣本和10 個偽造樣本,前十個真實簽名和后十個真實簽名的簽名時間間隔為一周。
由于缺乏中文簽名數據集,論文采集了包含749個用戶約29,000張簽字圖片的中文簽名數據集,每個姓名有20次不同時間點的真實簽名(genuine signature)和20次冒寫簽名(forged signature),冒寫包含10次志愿者簡單冒寫和10次書法家專業仿寫。所有簽名掃描成圖片后,裁剪并縮放到同樣大小,經OTSU算法和歸一化處理,將簽名統一為背景像素為255(白色),筆畫為原始像素的圖片數據,以此構建中文簽名數據集,并將其作為對提出算法的評測數據集之一。
2. 相關方法
手工特征
圖像幾何特征:簽字高度,寬度,面積
局部特征:LBP,SIFTNN特征
CNN網絡:基于分類,融合兩通道
孿生網絡
GAN網絡
※ 本文方法
1. 逆鑒別網絡
解決問題:如何讓模型在大量背景的稀疏簽名圖片中更關注簽名筆畫像素信息?
基本思想:網絡識別源簽字圖片和逆簽字圖片應該得到同樣的結果。
也就是說,網絡只關注筆畫信息,只要筆畫像素一樣,背景不同不會影響識別結果。按照上圖來說,測試圖片image2與參考圖片image1的網絡輸出結果應該和image2與image1的逆圖像image3相同,同理,和image1與與image4的結果也應該相同。
基于上述思想,本文提出的逆判別網絡(inverse discriminative network ,IDN)網絡結構如下:
本文網絡結構該網絡可以看作是孿生網絡的加強版(四胞胎網絡????),包含四路共享權重的級聯CNN模塊,可以分為兩路判別流,即以測試圖片和參考圖片作為輸入的兩路網絡;和兩路逆流(inverse streams:就是這么翻譯的吧),以逆圖片作為輸入的兩路網絡。共享網絡中,每個模塊兩個卷積層,卷積核3x3,步長為1,ReLu激活函數,一個2x2大小的池化層進行降維,每個模塊的卷積核個數分別為: 32、64、96、128。
2. 多路Attention機制
在判別流和逆流之間有8路Attention連接對不同尺度的特征圖進行處理,指導網絡學習簽字筆畫的判別性信息,抑制干擾信息,增強簽名驗證的重要特征。如結構圖紅框所示,每個attention模塊包含前向過程和反向過程。前向過程接收判別流每個卷積模塊的第一層特征,反向過程主要是逆流輸出特征向判別流第二層卷積層傳遞注意力信息。
attention模塊內部結構示意圖,包含了空間注意力機制和通道注意力機制。在兩路網絡之間建立attention機,將網絡對原筆跡圖片和逆筆跡圖片提取的特征聯系了起來。
如上圖所示,逆流網絡各模塊輸出特征經過上采樣后,特征圖大小與判別流第一層輸出特征一致,經過Sigmoid激活函數的卷積操作學習到特征調節因子g,與判別流卷積模塊第一層輸出h逐像素相乘后再逐像素加上第一層輸出h,得到空間調整后的特征圖:h · g + h;調節后的特征圖通過全局平均池化和Sigmoid激活的全連接層,得到通道調節因子f,將f與調節后的特征圖逐通道相乘后輸出attention機制處理后的特征:(h · g + h) × f。
對相加后的特征,經過兩個卷積層和一個池化層(256卷積核),不同輸出流的特征被融合為三個256通道的特征圖,融合特征經過全局平均池化(global average pooling ,GAP)處理輸入到全連接層進行驗證計算。
3. 損失函數
基于交叉熵,提出逆監督損失函數,實際就對真實標簽為同一個值的三對輸出做交叉熵損失的加權求和。
y表示真實二值標簽,1表示真實(genuine)簽名,0表示冒寫(forged)簽名,yi(i = 1, 2, 3)表示三對圖片的預測結果。αi表示調整損失函數的權重。
※ 實驗
1. 評價指標
FAR(錯誤識別率):
識別為同一人簽字次數測試數據中不同人簽字次數
FRR(錯誤拒絕率):
識別為同一人簽字次數測試數據中不同人簽字次數
EER(等誤率):
AUC(ROC曲線面積)
ACC(準確度):
2. 數據集
● CSD:中文簽名 749個人 ?20真實,20冒寫
訓練集:357 ? 驗證集:187 ? 測試集:
● CEDAR:英文簽名 55個人 24真實, 24 冒寫
http://www.cedar.buffalo.edu/NIJ/data/signatures.rar
訓練集:50 ? ?測試集:5
● BHSig260:包含兩個子集
https://drive.google.com/file/d/0B29vNACcjvzVc1RfVkg5dUh2b1E
BHSig-B:孟加拉語簽名 100個人,24真實,30冒寫
訓練集:50 ? ?測試集:50
BHSig-H:印地語簽名 ?160個人,24真實,30冒寫
訓練集:100 ? 測試集:60
3. 跨語言測試
在一種語言的簽名數據集上訓練模型,在另一種語言簽名數據進行測試,鑒別性能會劇烈下降,這可能是由于語言文字的不同會影響簽名者的書寫習慣和風格,所以導致了鑒別器在跨語種的任務上泛化性能較差。
※flask搭建一個簽字程序
在做算法調研時,發現一個繪制平滑簽名的JavaScript庫,基于HTML5 canvas實現,它適用于所有現代桌面和移動瀏覽器,且不依賴于任何外部庫的簽字程序:signature_pad
Github demoFlask是python的輕量級Web應用框架,最大的特征是輕便,我們可以使用Python語言快速實現一個網站或Web服務。python環境下安裝flask:
pip install flask通過flask加載簽字html頁面,可參考signature_pad demo實現或者博客:https://blog.csdn.net/weixin_38362455/article/details/88171200
python代碼
import json import base64 from flask import Flask, render_template, requestapp = Flask(__name__)@app.route('/') def hello_world():return render_template('index.html')@app.route('/image', methods=['POST']) def get_image_data():img_data = request.values.get('imgStr', 0)sign_data = request.values.get('sign_data', 0)# 保存圖片with open('test.png', 'wb') as f:f.write(base64.b64decode(img_data))return img_dataif __name__ == '__main__':app.config["DEBUG"] = True # 設置debug=True是為了讓代碼修改實時生效,而不用每次重啟加載app.run(host='0.0.0.0', port=500) PC端效果手機端效果基于這樣的簽字服務和算法,后面的就可以實現很多的應用,如:手寫字體識別、筆跡識別、筆跡比對等。
長按二維碼關注我們
有趣的靈魂在等你
留言就摁吧
總結
以上是生活随笔為你收集整理的CVPR 2019笔迹识别论文:逆鉴别网络+八路Attention的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创意赛第二季又来了,PaddleHub人
- 下一篇: 【opencv系列08】OpenCV4.