簡體   English   中英

如何在TensorFlow中為預訓練的Inception v3模型添加新類別和培訓?

[英]How do you add new categories and training to a pretrained Inception v3 model in TensorFlow?

我正在嘗試使用預先訓練的模型,例如Inception v3(在2012 ImageNet數據集上訓練過),並將其擴展為幾個缺失的類別。

我在Ubuntu 14.04上使用CUDA從源代碼構建了TensorFlow,並且像花朵上的轉移學習這樣的例子非常有用。 然而,鮮花示例去除了最后一層並刪除了所有1,000個現有類別,這意味着它現在可以識別5種花,但不能再識別大熊貓。 https://www.tensorflow.org/versions/r0.8/how_tos/image_retraining/index.html

如何將5種花類別添加到ImageNet的現有1,000種類別中(並添加針對這5種新花類別的培訓),以便我有1,005種類別可將測試圖像歸類為? 換句話說,能夠識別那些大熊貓和向日葵嗎?

我理解一個選項是下載整個ImageNet訓練集和花朵示例集並從頭開始訓練,但鑒於我目前的計算能力,它需要很長時間,並且不允許我添加,比方說,還有100多個類別。

我有一個想法是在使用5個花類重新訓練時將參數fine_tune設置為false ,以便最后一層不被剝離: https//github.com/tensorflow/models/blob/master/inception/README.md#如何重新訓練 - 訓練模型 - 花卉數據 ,但我不知道如何繼續,並不確定這是否會導致有1,005類別的有效模型。 謝謝你的想法。

遺憾的是,您無法向現有圖表添加類別; 你基本上必須保存一個檢查點並從該檢查點開始訓練該圖表。

經過多年的專業學習和深度學習,這里有一個更完整的答案:

向現有模型添加類別的最佳方法(例如,在Imagenet LSVRC 1000級數據集上訓練的初始化)將在預訓練模型上執行傳遞學習。

如果您只是想讓模型適應您自己的數據集(例如100種不同類型的汽車),只需按照無數的在線轉移學習教程(包括Tensorflow的官方教程)進行重新訓練/微調。

雖然生成的模型可能具有良好的性能,但請記住,教程分類器代碼是高度未優化的(可能是有意的),您可以通過部署到生產或僅改進其代碼來將性能提高幾倍。

但是,如果您正在嘗試構建包含默認LSVRC數據集(1000種日常圖像)的通用分類器,並將其擴展為包含您自己的其他類別,則需要訪問現有的1000 LSVRC圖像並將您自己的數據集附加到該集合。 您可以在線下載Imagenet數據集,但隨着時間的推移,訪問變得越來越容易。 在許多情況下,圖像也非常過時(檢查計算機或手機的圖像以便在記憶通道上行程)。

獲得該LSVRC數據集后,執行上述傳輸學習,但包括1000個默認類別以及您自己的圖像。 對於您自己的圖像,通常建議每個類別至少100個適當的圖像(越多越好),如果您啟用扭曲,您可以獲得更好的結果(但這會大大增加再訓練時間,特別是如果您沒有啟用GPU作為瓶頸文件不能重復用於每個失真;我個人認為這是非常蹩腳的,沒有理由為什么失真也不能被緩存為瓶頸文件,但這是一個不同的討論,可以手動添加到你的代碼)。

使用這些方法並結合錯誤分析,我們已經在4000多個類別上訓練了通用分類器,以達到最先進的精度,並將它們部署在數千萬個圖像上。 我們已經轉向專有模型設計以克服現有的模型限制,但轉移學習是獲得良好結果的高度合法方式,甚至通過BERT和其他設計進入自然語言處理。

希望,這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM