python描述图片内容_深度学习实现图像中文描述
im2txt_Chinese
深度學習實現圖像中文描述項目實踐 image caption Chinese Deep Learning
簡介
基于tensorflow的深度學習項目。實現了輸入一張圖片自動生成基于圖片內容的自然語言描述。
代碼主體來自于Tensorflow Model repository中的
模型介紹
其主要思想為將訓練過程分為編碼與解碼兩部分,首先將一張圖片編碼成為一組定長的向量表示,再根據向量化的圖像特征解碼為自然語言輸出。在編碼過程中,使用深度卷積神經網絡Inception v3圖像識別模型。解碼采用循環神經網絡 LSTM 來進行語言建模。
模型結構
在上圖中,{S0,S1,...,SN-1}是圖像描述中所用到的單詞(中文環境下使用jieba分詞),{wes0,wes1,...,wesN-1}是它們相應的單詞嵌入向量。LSTM的輸出{p1,p2,...,pN}是以當前詞和上一層的LSTM輸出作為輸入,生成的下一個單詞概率分布。{log p1(s1)、log p2(s2)、...、log pN(sN)}是每一步中正確單詞的對數似然;這些對數似然的相反數之和是模型的最小化目標。
訓練過程
在訓練的第一階段,Inception v3模型的參數是固定的,它只是一個靜態圖像編碼函數。在Inception v3模型的末端添加一個可訓練層,以將圖像嵌入向量轉換為單詞嵌入向量空間。模型要訓練的就是單詞嵌入的參數、inception v3可訓練層的參數以及LSTM的參數。在訓練的第二階段,訓練所有參數(包括inception v3的參數)對整個編碼和解碼的模型進行微調。
描述生成過程
給定一個訓練好的模型和圖像,我們使用波束搜索來生成該圖像的自然語言描述。描述是逐字生成的,其中在每個步驟t中,我們使用已經生成的長度為t-1的句子集來生成長度為t的新句子集。在每個步驟中,我們只保留前k個候選項,其中超參數k稱為波束大小。我們發現當k=3時嫩獲得最佳性能。
運行
數據集處理
在AI Challenger 注冊后,可在此下載數據集。數據集由兩部分構成:包含圖片的目錄和一個包含描述的json文件。每張圖片對應五個句子描述。
build_AIChallenge_data.py將數據集解析成tensorflow標準的TFRecord文件。運行之前需要修改以下兩處:
在代碼頭部修改待處理數據集和輸出的文件路徑 train_image_dir, train_caption_dir, output_dir
在main中配置如何分配訓練集,驗證集和測試集的大小
train_cutoff = int(0.8 * len(AI_Challenger_val_dataset))
val_cutoff = int(0.90 * len(AI_Challenger_val_dataset))
train_dataset = AI_Challenger_val_dataset[:train_cutoff]
val_dataset = AI_Challenger_val_dataset[train_cutoff:val_cutoff]
test_dataset = AI_Challenger_val_dataset[val_cutoff:]
為了生成image-caption對,這里相當于將每張圖片復制了五次。因此輸出文件將會很大。 由于磁盤空間和CPU算力限制,本人只采用了AI Challenger測試集中的30000張圖片,進行了8:1:1的分配,即訓練集24000張,驗證集與測試集各3000張圖片。
訓練與驗證
首先下載inception_v3 模型檢查點文件: 下載地址
train.py 運行之前修改模型輸入、inception_v3檢查點路徑和模型檢查點輸出路徑:
input_file_pattern,inception_checkpoint_file, train_dir
evaluate.py 運行之前修改驗證數據輸入,模型檢查點輸入以及驗證事件存儲的路徑 input_file_pattern,checkpoint|_dir, eval_dir
訓練和驗證開啟兩個python進程同時進行。
開啟第三個進程運行tensorboard 可視化訓練過程
tensorboard --logdir="path/to/model/dir"
生成圖像描述
run_inference.py 運行之前修改模型檢查點,字典文件(數據集處理時生成)和要處理的圖片路徑
checkpoint_path, vocab_file, input_files 當訓練生成第一個檢查點后即可運行進行測試。
總結
以上是生活随笔為你收集整理的python描述图片内容_深度学习实现图像中文描述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cass有坐标文件生成里程文件_怎样用C
- 下一篇: vs中imshow函数报错_Win7下V