LIGHTSPEEUR® 2801S之目標檢測SSD模型訓練討論

延續這篇文章,在訓練前修改run_ssd_training.sh讓訓練過程中會使用到預訓練模型(pre-trained model)權重。最近我試著照原廠方式不使用預訓練模型,並把資訊傳送給廠商:

照GTI的方式訓練SSD,10萬次Loss還是不大會降低;後來發現run_ssd_training.sh內並沒有用到pre-train的model;我之前是有在run_ssd_training.sh加 –weights=$ssd,loss會下降到1 ~ 2間

得到的回覆於下:

只用参照prototxt文件中卷积层的方式定义自己的网络就行了,其他地方同标准的ssd训练方法一样

因此花了些時間瞭解SSD模型的結構,過程中參考這本書:

並且對照標準SSD模型,發現它會用到VGG預訓練模型;另外找到的Intel最佳化後的Caffe SSD模型也是用到相同的預訓練模型。正因如此,我認為過程中參照預訓練模型(pre-trained model)權重才能正確的進行SSD模型訓練。接下來討論2801s SSD預訓練模型的結構。

在run_ssd_training.sh中關於預訓練模型的內容,參考下圖:

VGG的部份是用2801s來加速,其它部份(VGG以外的卷積層)應該是在主機端(Host)上運算。進一步分析後整理如下圖所示:

2801s SSD模型從輸入端看起,與標準的SSD300模型不同,輸入與VGG-16模型一樣是240 * 240而非300 * 300;在VGG-16的卷積層使用的是Quantization(量化)運算,除此之外的結構與標準VGG-16模型一致;接續的ip6與ip7(標準模型為FC6/ Conv6與FC7/Conv7)層是原先VGG16模型全連接 (full connect或dense) 層,並將其改為卷積層(浮點數運算);而接著的Conv6(Conv8)、Conv7(Conv9)、Conv8(Conv10)層也是卷積層(浮點數運算),但標準模型的Conv9(Conv11)層並沒有在其中。此外,標準模型中Normalize層是在VGG的Conv4_3層,可能是配合2801s晶片加速的關係,Normalize層在2801s SSD模型中被改到ip7層(ip7_norm)。預訓練模型Quantization(量化)運算的權重來自於ssd_quant_pretrain.caffemodel,其餘的權重來自SSD_typ_float.caffemodel;預訓練模型的建立是依據deploy_typ_quant.prototxt定義,程式碼則為copy_fc_param.py

其實訓練完成的模型與預訓練模型結構上是相同的。經過上述分析就會發現2801s SSD模型架構上有不少地方是與標準SSD模型並不一致,連帶的也會影響到模型的超參數(hyperparameters)設定, 超參數的調整是需要經驗的。若有2801s SSD模型訓練或參數調整的需求,可以聯絡On-Device AI Co., Ltd.取得進一步的協助。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *