<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 七、圖像字幕生成 在本章中,我們將處理字幕圖像的問題。 這涉及到檢測對象,并且還提出了圖像的文本標題。 圖像字幕生成也可以稱為**圖像文本轉換**。 曾經被認為是一個非常棘手的問題,我們現在在此方面取得了相當不錯的成績。 對于本章,需要具有相應標題的圖像數據集。 在本章中,我們將詳細討論圖像字幕生成的技術和應用。 我們將在本章介紹以下主題: * 了解用于評估它們的不同數據集和指標 * 了解用于自然語言處理問題的一些技巧 * 向量模型的不同單詞 * 幾種用于圖像字幕生成的算法 * 不良結果和改進范圍 # 了解問題和數據集 自動生成圖像標題的過程是一項重要的深度學習任務,因為它結合了語言和視覺這兩個世界。 該問題的獨特性使其成為計算機視覺中的主要問題之一。 用于圖像字幕生成的深度學習模型應該能夠識別圖像中存在的對象,并能夠以自然語言生成表示對象與動作之間關系的文本。 此問題的數據集很少。 其中最著名的數據集是第 4 章,“對象檢測”中對象檢測中涵蓋的 COCO 數據集的擴展。 # 了解用于圖像字幕生成的自然語言處理 由于必須從圖像中生成自然語言,因此熟悉**自然語言處理**(**NLP**)變得很重要。 NLP 的概念是一個廣泛的主題,因此我們將范圍限制為與圖像字幕生成相關的主題。 自然語言的一種形式是**文本**。 文本是單詞或字符的序列。 文本的原子元素稱為**令牌**,它是**字符**的序列。 字符是文本的原子元素。 為了處理文本形式的任何自然語言,必須通過刪除標點符號,方括號等對文本進行預處理。 然后,必須通過將文本分隔為空格來將文本標記為單詞。 然后,必須將單詞轉換為向量。 接下來,我們將看到向量轉換如何提供幫助。 # 以向量形式表達單詞 向量形式的單詞可以幫助自己執行算術運算。 向量必須緊湊,尺寸較小。 同義詞應具有相似的向量,而反義詞應具有不同的向量。 可以將單詞轉換為向量,以便可以如下所示比較關系: ![](https://img.kancloud.cn/82/73/827381e6d55ce5c451ee4668f76315fc_566x198.png) 該向量算法使得能夠在不同實體之間的語義空間中進行比較。 接下來,我們將看到如何創建可將單詞轉換為向量表示的深度學習模型。 # 將單詞轉換為向量 通過在大型文本語料庫上訓練模型,可以將單詞轉換為向量。 訓練模型,使得給定一個單詞,該模型可以預測附近的單詞。 在預測附近單詞的單次熱編碼之前,首先對單詞進行單次熱編碼,然后進行隱藏層。 以這種方式進行訓練將創建單詞的緊湊表示。 可以通過兩種方式獲得單詞的上下文,如下所示: * **跳躍圖**(**SkipGram**):給定一個單詞,嘗試預測幾個接近的單詞 * **連續詞袋**(**CBOW**):通過給定一組詞來預測一個詞,從而跳過跳躍語法 下圖說明了這些過程: ![](https://img.kancloud.cn/a1/fe/a1fe2b19ae1d0d4e1fc77cd1d3c29db1_566x341.png) 兩種方法均顯示出良好的結果。 單詞在嵌入空間中轉換為向量。 接下來,我們將看到訓練嵌入空間的詳細信息。 # 訓練嵌入 可以使用如下所示的模型來訓練嵌入: ![](https://img.kancloud.cn/d0/47/d047dcc86509737fc8d26a86bad39968_566x464.png) 如上圖所示,目標詞是根據上下文或歷史預測的。 該預測基于 **Softmax 分類器**。 隱藏層將嵌入作為緊湊的表示形式學習。 請注意,這不是完整的深度學習模型,但它仍然可以正常工作。 這是嵌入的低維可視化: ![](https://img.kancloud.cn/e8/2a/e82abe80d82fb9418ff9a38868f35813_566x560.png) 使用 Softmax 分類器的嵌入的低維可視化 該可視化使用 TensorBoard 生成。 具有相似語義或不同詞性的單詞會一起出現。 我們已經學習了如何訓練用于生成文本的緊湊表示。 接下來,我們將看到圖像字幕生成的方法。 # 圖像字幕生成方法及相關問題 已經提出了幾種對圖像進行字幕的方法。 直觀地,將圖像轉換為視覺特征,并從這些特征生成文本。 生成的文本將采用詞嵌入的形式。 生成文本的一些主要方法涉及 LSTM 和關注。 讓我們從使用舊的生成文本的方法開始。 # 使用條件隨機場鏈接圖像和文本 Kulkarni 等人在[論文](http://www.tamaraberg.com/papers/generation_cvpr11.pdf)中,提出了一種從圖像中查找對象和屬性并使用它來生成文本的方法。 **條件隨機場**(**CRF**)。 傳統上,CRF 用于結構化預測,例如文本生成。 生成文本的流程如下所示: ![](https://img.kancloud.cn/72/68/7268fe065e1607fa50acdd01a2835136_566x190.png) 該圖說明了使用 CRF 生成文本的過程(摘自 Kulkarni 等人) CRF 的使用在以適當的前置詞以連貫的方式生成文本方面存在局限性。 結果顯示在這里: ![](https://img.kancloud.cn/ba/40/ba400c2547e71fc8d859d50092e47055_566x222.png) 復制自 Kulkarni 等人 結果對對象和屬性具有正確的預測,但無法生成良好的描述。 # 在 CNN 特征上使用 RNN 生成字幕 Vinyals 等人在[論文](https://arxiv.org/pdf/1411.4555.pdf)中提出了一種端到端可訓練的深度學習用于圖像字幕生成的方法,該方法將 CNN 和 RNN 背靠背地堆疊在一起。 這是一個端到端的可訓練模型。 結構如下所示: ![](https://img.kancloud.cn/8f/0d/8f0df4087c01cda3b2c7d02a520ffdde_566x234.png) 轉載自 Vinyals 等人(2015 年) 該模型可以生成以自然語言完成的句子。 CNN 和 **LSTM** 的展開圖如下所示: ![](https://img.kancloud.cn/3f/32/3f32755e22243c0baa1732e35bfa1c28_566x459.png) 該圖說明了 CNN 和 LSTM 架構(摘自 Vinyals 等人) 這是 **LSTM** 的展開視圖。 此處顯示了一組選擇性的結果: ![](https://img.kancloud.cn/9f/30/9f30e1781fd1f59be318535a55ee31ab_566x351.png) 轉載自 Vinyals 等人(2015 年) 在此過程中,CNN 將圖像編碼為特征,RNN 從中生成句子。 # 使用圖像排名創建字幕 Ordonez 等人在[論文](http://papers.nips.cc/paper/4470-im2text-describing-images-using-1-million-captioned-photographs.pdf)中,提出了一種方法對圖像進行排名,然后生成標題。 此過程的流程如下所示: ![](https://img.kancloud.cn/d8/9e/d89e32991264cc8c6e1be3eb1f9ac73c_566x153.png) 復制自 Ordonez 等人(2015) 從排名圖像中提取的高級信息可用于生成文本。 下圖顯示,可用于排名的圖像越多,結果將越好: ![](https://img.kancloud.cn/53/f0/53f07427252346b35d6ae2ccb4cbb118_566x122.png) 復制自 Ordonez 等人(2015) # 從圖像檢索字幕和從字幕檢索圖像 Chen 等人在[論文](https://www.cs.cmu.edu/~xinleic/papers/cvpr15_rnn.pdf)中,提出了一種從文本中檢索圖像和從圖像中檢索文本的方法。 這是雙向映射。 下圖顯示了一個用自然語言解釋圖像的人和另一個在視覺上思考它的人: ![](https://img.kancloud.cn/1c/d7/1cd726a1f8b17f17aa0aa40c9cd12538_566x291.png) 轉載自 Chen 等人(2015) 檢索字幕可以通過以下方式通過潛在空間連接圖像和文本的編碼器來實現: ![](https://img.kancloud.cn/26/bc/26bca31792fe4a1326c20ad4994e6626_566x223.png) 轉載自 Chen 等人(2015) 圖像中的第一個模型是用于訓練的完整模型。 如圖中所示,視覺特征也可以用于生成句子,反之亦然。 # 密集字幕 Johnson 等人在[論文](https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Johnson_DenseCap_Fully_Convolutional_CVPR_2016_paper.pdf)中,提出了一種用于密集字幕的方法。 首先,讓我們看一些結果,以了解任務: ![](https://img.kancloud.cn/76/a1/76a176a5f780b7f1434f54ed961991b5_566x561.png) 轉載自 Johnson 等人 如您所見,為圖像中的對象和動作生成了單獨的標題; 由此得名; **密集字幕**。 這是 Johnson 等人提出的架構: ![](https://img.kancloud.cn/69/e3/69e3ad8f29cb728265f8fc0ef19c8dec_566x269.png) 轉自 Johnson 等人 該架構實質上是 Faster-RCNN 和 **LSTM** 的組合。 產生該區域以產生對象檢測結果,并且使用該區域的視覺特征來產生字幕。 # 使用 RNN 的字幕生成 Donahue 等人在[論文](https://arxiv.org/pdf/1411.4389.pdf)中,提出了**長期循環卷積網絡**(**LRCN**) 用于圖像字幕生成的任務。 此模型的架構如下所示: ![](https://img.kancloud.cn/ed/f0/edf0888c4e0b5b2f87c51172239019e7_566x504.png) 轉載自 Donahue 等人 圖中顯示了 CNN 和 LSTM 在整個時間上的權重,這使得該方法可擴展到任意長序列。 # 使用多模態度量空間 Mao 等人在[論文](http://papers.nips.cc/paper/4470-im2text-describing-images-using-1-million-captioned-photographs.pdf)中提出了一種使用**多模態嵌入空間**生成字幕的方法。 下圖說明了這種方法: ![](https://img.kancloud.cn/81/e0/81e0dc9dacbab7cbb9480e7802fad3b8_566x315.png) 轉自毛等人。 Kiros 等人在[論文](https://arxiv.org/pdf/1411.2539.pdf)中提出了另一種生成字幕的多模態方法,該方法可以將圖像和文本嵌入同一多模態空間。 下圖說明了這種方法: ![](https://img.kancloud.cn/c0/89/c089bce4de5c77603a4c1f514b295575_566x183.png) 復制自 Kiros 等人 兩種多模式方法都給出了良好的結果。 # 使用注意力網絡的字幕生成 Xu 等人在[論文](https://arxiv.org/pdf/1502.03044.pdf)中,提出了一種使用**注意力機制**進行圖像字幕生成的方法。 注意力機制對圖像的某些區域比其他區域賦予更多權重。 注意還可以實現可視化,向我們展示模型生成下一個單詞時所關注的位置。 建議的模型如下所示: ![](https://img.kancloud.cn/83/67/8367f24dca58015637cc04450d46171c_566x236.png) 轉載自徐等人。 首先,從圖像中提取 CNN 特征。 然后,將關注的 RNN 應用于生成單詞的圖像。 # 知道什么時候看 [Lu 等人](https://arxiv.org/pdf/1612.01887.pdf)提出了一種引起關注的方法,可提供出色的結果。 知道何時看待注意力捕獲的區域會產生更好的結果。 流程如下所示: ![](https://img.kancloud.cn/9e/27/9e278c56d5654455f44f6a5cb4c82697_566x311.png) 摘自 Lu 等人 注意力機制如下所示: ![](https://img.kancloud.cn/53/04/5304772d060a1c07885d263281ecaed9_566x297.png) 摘自 Lu 等人 結果重點突出的區域如下: ![](https://img.kancloud.cn/c3/37/c337b5cd2edaa4c4d793695177a99137_566x361.png) 摘自 Lu 等人 生成字幕時注意力的釋放在此處可視化: ![](https://img.kancloud.cn/26/a9/26a9afeb10f9ebd339242d7eb1d3d983_566x171.png) 摘自 Lu 等人 我們已經看到,用于生成字幕幾種方法。 接下來,我們將看到一個實現。 # 實現基于注意力的圖像字幕生成 讓我們使用以下代碼從 VGG 和 LSTM 模型定義 CNN: ```py vgg_model = tf.keras.applications.vgg16.VGG16(weights='imagenet', include_top=False, input_tensor=input_tensor, input_shape=input_shape) word_embedding = tf.keras.layers.Embedding( vocabulary_size, embedding_dimension, input_length=sequence_length) embbedding = word_embedding(previous_words) embbedding = tf.keras.layers.Activation('relu')(embbedding) embbedding = tf.keras.layers.Dropout(dropout_prob)(embbedding) cnn_features_flattened = tf.keras.layers.Reshape((height * height, shape))(cnn_features) net = tf.keras.layers.GlobalAveragePooling1D()(cnn_features_flattened) net = tf.keras.layers.Dense(embedding_dimension, activation='relu')(net) net = tf.keras.layers.Dropout(dropout_prob)(net) net = tf.keras.layers.RepeatVector(sequence_length)(net) net = tf.keras.layers.concatenate()([net, embbedding]) net = tf.keras.layers.Dropout(dropout_prob)(net) ``` 現在,我們已經定義了 CNN,接下來使用以下代碼定義關注層: ```py h_out_linear = tf.keras.layers.Convolution1D( depth, 1, activation='tanh', border_mode='same')(h) h_out_linear = tf.keras.layers.Dropout( dropout_prob)(h_out_linear) h_out_embed = tf.keras.layers.Convolution1D( embedding_dimension, 1, border_mode='same')(h_out_linear) z_h_embed = tf.keras.layers.TimeDistributed( tf.keras.layers.RepeatVector(num_vfeats))(h_out_embed) Vi = tf.keras.layers.Convolution1D( depth, 1, border_mode='same', activation='relu')(V) Vi = tf.keras.layers.Dropout(dropout_prob)(Vi) Vi_emb = tf.keras.layers.Convolution1D( embedding_dimension, 1, border_mode='same', activation='relu')(Vi) z_v_linear = tf.keras.layers.TimeDistributed( tf.keras.layers.RepeatVector(sequence_length))(Vi) z_v_embed = tf.keras.layers.TimeDistributed( tf.keras.layers.RepeatVector(sequence_length))(Vi_emb) z_v_linear = tf.keras.layers.Permute((2, 1, 3))(z_v_linear) z_v_embed = tf.keras.layers.Permute((2, 1, 3))(z_v_embed) fake_feat = tf.keras.layers.Convolution1D( depth, 1, activation='relu', border_mode='same')(s) fake_feat = tf.keras.layers.Dropout(dropout_prob)(fake_feat) fake_feat_embed = tf.keras.layers.Convolution1D( embedding_dimension, 1, border_mode='same')(fake_feat) z_s_linear = tf.keras.layers.Reshape((sequence_length, 1, depth))(fake_feat) z_s_embed = tf.keras.layers.Reshape( (sequence_length, 1, embedding_dimension))(fake_feat_embed) z_v_linear = tf.keras.layers.concatenate(axis=-2)([z_v_linear, z_s_linear]) z_v_embed = tf.keras.layers.concatenate(axis=-2)([z_v_embed, z_s_embed]) z = tf.keras.layers.Merge(mode='sum')([z_h_embed,z_v_embed]) z = tf.keras.layers.Dropout(dropout_prob)(z) z = tf.keras.layers.TimeDistributed( tf.keras.layers.Activation('tanh'))(z) attention= tf.keras.layers.TimeDistributed( tf.keras.layers.Convolution1D(1, 1, border_mode='same'))(z) attention = tf.keras.layers.Reshape((sequence_length, num_vfeats))(attention) attention = tf.keras.layers.TimeDistributed( tf.keras.layers.Activation('softmax'))(attention) attention = tf.keras.layers.TimeDistributed( tf.keras.layers.RepeatVector(depth))(attention) attention = tf.keras.layers.Permute((1,3,2))(attention) w_Vi = tf.keras.layers.Add()([attention,z_v_linear]) sumpool = tf.keras.layers.Lambda(lambda x: K.sum(x, axis=-2), output_shape=(depth,)) c_vec = tf.keras.layers.TimeDistributed(sumpool)(w_Vi) atten_out = tf.keras.layers.Merge(mode='sum')([h_out_linear,c_vec]) h = tf.keras.layers.TimeDistributed( tf.keras.layers.Dense(embedding_dimension,activation='tanh'))(atten_out) h = tf.keras.layers.Dropout(dropout_prob)(h) predictions = tf.keras.layers.TimeDistributed( tf.keras.layers.Dense(vocabulary_size, activation='softmax'))(h) ``` 在前面的代碼的幫助下,我們定義了一個深度學習模型,該模型將 CNN 特征與 RNN 結合在一起,并借助注意力機制。 目前,這是生成字幕的最佳方法。 # 總結 在本章中,我們已經了解了與圖像標題相關的問題。 我們看到了一些涉及自然語言處理和各種`word2vec`模型(例如`GLOVE`)的技術。 我們了解了`CNN2RNN`,度量學習和組合目標等幾種算法。 后來,我們實現了一個結合了 CNN 和 LSTM 的模型。 在下一章中,我們就來了解生成模型。 我們將從頭開始學習和實現樣式算法,并介紹一些最佳模型。 我們還將介紹很酷的**生成對抗網絡**(**GAN**)及其各種應用。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看