一、Siamese網絡圖
Input | Conv1 | Conv2 | Conv3 | Flat / \ fc1 ... fcN \ / L1_loss
Siamese網絡的網絡結構如上所示。它的原理是使用兩個相同的卷積神經網絡,將兩張不同的圖片嵌入到同樣的向量空間中,計算它們之間的距離,並用L1_loss或者L2_loss來計算它們的相似度。
二、Siamese網絡模型代碼
import tensorflow as tf def feature_extract(input): with tf.variable_scope('feature_extract', reuse=tf.AUTO_REUSE): x = tf.layers.conv2d(input, 32, 5, padding='same', activation=tf.nn.relu, name='conv1') x = tf.layers.max_pooling2d(x, 2, 2, name='pool1') x = tf.layers.conv2d(x, 64, 3, padding='same', activation=tf.nn.relu, name='conv2') x = tf.layers.max_pooling2d(x, 2, 2, name='pool2') x = tf.layers.conv2d(x, 128, 3, padding='same', activation=tf.nn.relu, name='conv3') x = tf.layers.flatten(x, name='flatten') x = tf.layers.dense(x, 1024, activation=tf.nn.relu, name='fc1') x = tf.layers.dropout(x, rate=0.5, name='dropout') return x def siamese_network(left_input, right_input): left_output = feature_extract(left_input) right_output = feature_extract(right_input) with tf.variable_scope('L1_loss'): L1_distance = tf.abs(tf.subtract(left_output, right_output)) L1_output = tf.layers.dense(L1_distance, 1, activation=tf.nn.sigmoid, name='L1_output') return L1_output
上述代碼實現了Siamese網絡的核心架構,通過定義feature_extract函數對圖像進行特徵提取,再通過siamese_network函數將兩個圖像進行融合,並計算它們的L1距離。其中,L1_loss使用的是絕對值誤差(L1_loss)。整個代碼已經對每一層網絡進行了注釋,方便大家理解。
三、Siamese網絡介紹
Siamese網絡最早出現在簽名驗證領域,用於人臉識別、指紋識別等方面。它是一種基於對比損失函數的網絡結構,對比上,基於深度學習的Siamese網絡模型已經成為了學術界和工業界的研究熱點。Siamese網絡結構特別適用於不同的圖像分類、人臉識別、語義相似度判斷、圖像檢索等領域。
四、Siamese網絡框架
Siamese網絡框架分為兩個過程:特徵提取和融合。比如說,在人臉識別的場景中,兩幅人臉的輸入圖像會分別經過兩個相同結構的卷積神經網絡,進行特徵提取之後,再把這兩個提取到的特徵向量進行融合,最後輸出這兩幅圖像之間的差異,以判斷這兩個人臉是否為同一人。
五、Siamese網絡跟蹤
通過使用獲得的每個目標的特徵來跟蹤動態變化的物體。這個過程如下:
- 採集第一個目標的的特徵向量;
- 使用線性混合方法,將獲得的特徵向量和新目標的特徵進行融合;
- 從步驟2中的融合向量中選擇最匹配的項,並輸出對齊向量。
六、Siamese網絡行人識別
Siamese網絡在行人識別領域,可用於處理更複雜的數據結構。原理是使用兩張圖像中的不同點,用學習到的一個函數將這兩個圖像分別映射為兩個向量,最後判斷這兩個向量是否屬於同一個人。同時該算法對數據抗衡較強,不需要像傳統的算法那樣嚴格控制樣本的採集方式和標註方式。
七、Siamese網絡分類
Siamese網絡同樣被用於分類問題。在這種情況下,我們通過計算兩張圖像的相似度,來判斷其所屬的類別。比如說,我們有一張表情圖片(微笑臉),然後我們再在數據庫里找到100張臉,計算它們和表情圖片的相似度,將這些臉分成為兩類。
八、Siamese網絡圖片配准
Siamese網絡被用於圖片配准領域。配準是指把多幅圖片根據它們之間的相似性匹配到同一個坐標系中。在這種情況下,每一幅圖片都會經過一個CNN提取出它的特徵向量,使用這些特徵向量會進行配准。通常所使用的是雙線性插值等方法。
九、Siamese網絡的降維
Siamese網絡可以用於降維。這種情況下,它可以通過計算不同類別的樣本之間的相似度來實現特徵的壓縮和降維,在將樣本進行分類時,避免特徵數過多導致的維度災難。CNN的網絡結構使得在數據降維時可以保留最重要的特徵。
十、Siamese Cat
最後跟大家分享一下,Siamese網絡的名字是怎麼來的。其實,這個名字是來自於西亞米斯國的一種貓,它們一般生活在皇宮裡,具有和其他地方的貓不一樣的特徵,就像Siamese網絡一樣能夠在所有其他的神經網絡中脫穎而出,成為一種與眾不同的神經網絡結構。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/206912.html