SNPE輸入數據和預處理(2)

一、簡介
上一節中我們對數據處理部分的圖像數據進行了大量的介紹,在SNPE中可以對其進行很多種的操作,接下來我們將繼續對SNPE的數據處理進行深入的探討

二、SNPE數據及預處理
輸入圖像:
除了轉換模型外,SNPE還要求輸入圖像的格式可能與源框架不同。在Caffe中,圖像顯示爲形狀的張量(批處理x通道x高度x寬度),其中寬度是變化最快的尺寸,其次是高度,然後是顏色通道。這意味着第一個顏色通道的所有像素值在內存中是連續的,隨後是下一個顏色通道的所有像素值,依此類推。 Caffe在訓練過程中使用convert_imageset工具以這種格式準備圖像。
在SNPE中,圖像必須以形狀的張量表示(批處理x高x寬x通道),其中通道是變化最快的尺寸。這意味着單個像素的所有顏色通道的值在內存中是連續的,接着是下一個像素的所有顏色值,依此類推。
如果批次尺寸大於1,則必須將每個批次的各個圖像手動手動合併到一個文件中。
有關兩個輸入圖像存儲器佈局的直觀表示,請參見下圖,推理過程中使用的通道順序必須與訓練過程中使用的通道順序相同。 例如,在Caffe中訓練的Imagenet模型需要BGR的頻道順序。

Imagenet模型的輸入圖像
Caffe中的Imagenet模型(例如bvlc_alexnet,bvlc_googlenet等)使用BGR圖像(藍色像素在綠色像素之前在紅色像素之前)進行訓練。 必須以相同的通道順序爲推理引擎提供像素值。
下圖顯示了Caffe和SNPE對於bvlc_alexnet模型所需的兩種不同的輸入圖像內存佈局。 輸入圖像尺寸爲227x227。
在這裏插入圖片描述

MNIST模型的輸入圖像
Caffe中的MNIST模型(例如lenet)需要大小爲28x28的單通道灰度圖像。 請注意,雖然只有一個通道,但在Caffe(1x1x28x28)和SNPE(1x28x28x1)中仍需要4維輸入張量。

均值減法
一些Caffe模型(例如bvlc_alexnet)是使用圖像訓練的,其中從每個輸入圖像中減去了平均圖像。 該平均圖像是訓練集中所有圖像的平均值。 Caffe在訓練過程中通過convert_imageset工具生成此平均圖像。
對於SNPE,如果您使用的網絡經過了均值減法訓練後的圖像,則在將圖像數據寫入輸入層之前必須手動減去均值圖像。如果沒有使用均值減法訓練您的網絡,則無需執行此步驟。

SNPE還可以自動執行均值減法,作爲圖像預處理的一部分。SNPE SDK在$ SNPE_ROOT / models / alexnet / scripts / create_alexnet_raws.py中包含一個腳本,該腳本可將jpg轉換爲原始格式,包括AlexNet的均值減法。 SNPE設置章節中的腳本對SDK中提供的示例圖像執行此轉換。

輸出量
在Caffe和SNPE之間,示例的輸出保持不變:對於批次中的每個圖像,一維張量包含每個類的概率。對於Imagenet模型(例如bvlc_alexnet),這是1000個Imagenet類的大小爲1000的張量。如果模型的批次尺寸大於1,則各個輸出張量將沿着批次尺寸連接在一起。

多個預處理操作示例
圖像預處理操作可以按上述順序鏈接。
以下prototxt和轉換器選項描述了按順序進行以下預處理操作的網絡:
1、尺寸爲800x600的NV21圖像被轉換爲尺寸爲800x600的BGR圖像
2、800x600 BGR圖像按比例縮小爲227x227 BGR圖像
3、從227x227 BGR圖片中減去恆定頻道值。 從藍色通道中減去104,從綠色通道中減去117,從紅色通道中減去123。

三、總結
本篇文章中,我們對SNPE輸入數據及預處理進行了簡單的瞭解,下面我也將繼續對SNPE的相關模塊內容進行介紹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章