caffeModelSummarizer

概要

caffeModelSummarizerは、DNN開発プラットフォームcaffeがネットワークの定義ファイルとして読み込むprototxtを読み込んで、 ネットワーク構造をサマライズするためのユーティリティです。 CSV形式のExcel等で読み込めるサマリファイル以外に、その情報をGraphvizで描画可能なダイアグラムとしても出力することができます。 DNNネットワークを画像化できる他ツールも存在しますが、本ツールの特徴は各レイヤの係数量、ops値なども表示されることです。

リビジョン

caffeModelSummarizer.py v01r02

コマンドライン

python caffeModelSummarizer.py [option [option_parameter]]...

以下のようなオプションをつけて動作させることで所望の結果を得ることができます。

コマンドラインオプション

オプション 意味
-h ヘルプ表示
–PROT pt 入力であるprototxtファイル名を指定
–CSV csv レイヤ毎の集計出力ファイル名
–DOT d Graphviz用描画スクリプト
–ICH i 入力チャネルサイズ指定
–IH h 入力縦サイズ
–IW w 入力横サイズ
–NAME n Graph Name指定(prototxt内不在の時)
-v 処理の途中経過を詳細に出力
-V バージョンのみ表示して終了
-d デバッグ用オプション

構造

class caffeModelSummarizer.caffeProtoTxtReader(pfnam)[ソース]

caffe protoTxt Reader Class.

caffe prototxtを読み取ってデータベース化するクラス

dumpDic(fname)[ソース]

Dump Dic

辞書のダンプ

initLayer()[ソース]

initialize Layer

Layerを再初期化する

printLayerTypes()[ソース]

print Layer Types

Layer typeの出現回数をリストする

procBatch_norm_param(item)[ソース]

process batch_norm_param

batch_norm_param部の処理

procBias_filler(item)[ソース]

process bias_filler

bias_filler部の処理

procConcat_param(item)[ソース]

process concat_param

concat_param部の処理

procConvParam(item)[ソース]

process convParam

Conv Param部の処理

procDropoutParam(item)[ソース]

process DropoutParam

Dropout Param部の処理

procHeaders(item)[ソース]

process headers

ヘッダ部の処理

procInclude(item)[ソース]

process include

include部の処理

procInnerProductParam(item)[ソース]

process InnerProductParam

InnerProduct Param部の処理

procInputParam(item)[ソース]

process inputParam

Input Param部の処理

procLayer(item)[ソース]

process Layer

Layer部の処理

procLrnParam(item)[ソース]

process lrnParam

LRN Param部の処理

procParamRec(item)[ソース]

process ParamRec

Param Rec部の処理

procPoolParam(item)[ソース]

process poolParam

Pool Param部の処理

procScaleParam(item)[ソース]

process scaleParam

Scale Param部の処理

procScale_filler(item)[ソース]

process scale_filler

scale_filler部の処理

rLine(lin)[ソース]

Read Line method

読み取った1行を処理するメソッド

read()[ソース]

Read method

protoTxtファイルを読み込むメソッド。読み込み成功すれば真を返す。

removeComment(lin)[ソース]

remove comment

コメント除去後、前後の空白も除去

resetKV()[ソース]

reset K-V pair

K-Vペア解釈をRESETする

class caffeModelSummarizer.csvFileWriter(onam, hDic, aDic, lDic, lLst, bt, ch, w, h)[ソース]

CSV File Writer Class.

データベースをCSVファイルに吐き出す

grouping()[ソース]

grouping method

タイプ毎に分類して属性リストを作成するメソッド .. 0 1 2 3 4 5 6 7 8 9 10 11 12 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH

procBatchNorm(nam, v)[ソース]

BatchNormレイヤ処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact 過学習を防ぐためのレイヤなので nElem = 0, ops = 0とする 固有パラメータ とりあえずなし[]

procConcat(nam, v)[ソース]

Concatレイヤ処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact データを結合するだけのレイヤなので nElem = 0, ops = 0とする 固有パラメータ [axis]

procConvolution(nam, v)[ソース]

Convolutionレイヤ処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact 固有パラメータ [M, N, K]

procDropout(nam, v)[ソース]

Dropoutレイヤ処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact oCH<-iCH 過学習を防ぐためのレイヤなので nElem = 0, ops = 0とする 固有パラメータは[ドロップアウトレシオ]

procEltwise(nam, v)[ソース]

Eltwiseレイヤ処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact 要素毎処理レイヤなので nElem = 0, ops = iCH * iW * iH とする 固有パラメータなし []

procFlatten(nam, v)[ソース]

Flattenレイヤ処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact シェープを変更するだけのレイヤなので、nElem = 0, ops = 0 固有パラメータなし []

procInnerProduct(nam, v)[ソース]

procInnerProduct:

InnterProductレイヤ処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact 固有パラメータ [M, N, K, weight_filler_type, bias_filler_type, bias_filler_value]

procInput(nam, v)[ソース]

Inputレイヤ処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact 入力レイヤ、ここでは無視 固有パラメータなし

procLRN(nam, v)[ソース]

LRNレイヤ処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact データを平均化するレイヤ nElem = 0, ops = local_size * 要素数 * 2とする 固有パラメータ [local_size, alpha, beta, norm_region]

procMainDB(num, typ, layer, param)[ソース]

共通処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact

procPooling(nam, v)[ソース]

Poolingレイヤ処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact 固有パラメータ [pool]

procReLU(nam, v)[ソース]

ReLUレイヤ処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact oCH<-iCH 本来レイヤではなく活性化関数 nElem = 0, ops = iCH * iW * iH とする 固有パラメータなし []

procScale(nam, v)[ソース]

Scaleレイヤ処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact oCH<-iCH RELU同様の関数 nElem = 0, ops = iCH * iW * iH とする 固有パラメータは[bias_term]

procSearchSize()[ソース]

proc Search Size

dataからレイヤをたどってサイズを決定する

procSoftmax(nam, v)[ソース]

Softmaxレイヤ処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact 確率を求めるレイヤ nElem = num_output, ops = num_output * 3とする 固有パラメータなし

procSoftmaxWithLoss(nam, v)[ソース]

SoftmaxWithLossレイヤ処理 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact 学習用のレイヤなので nElem = 1, ops= 0とする 固有パラメータなし []

searchICH(bottom, ich, iw, ih)[ソース]

search Size

ボトムレイヤ名を遡って入力サイズを決定する .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact

writeMainDB()[ソース]

write Main DB

MAIN DB を CSV出力 .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact

class caffeModelSummarizer.DOTwriterDNNdataFlow(fname, hDic, mDic, bt, lLst, ch, w, h, gn)[ソース]

DOT Writer DNN Data Flow Graph Class.

DOT言語(GraphVizの入力言語)を生成するクラス DNN Data flow Graph生成用

makeEDGE()[ソース]

make EDGE.

グラフのエッジ部分を生成する

makeGRAPH()[ソース]

make Graph(DOT) language contents.

グラフを組み立てる

makeHeader()[ソース]

make DOT file Header.

ファイルヘッダを生成する(現状は、パラメータきめうち)

makeLegend()[ソース]

make Legend.

凡例を生成する

makeNODE()[ソース]

make NODE.

グラフのノード部分を生成する .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact

makeTrailer()[ソース]

make DOT file Trailer.

ファイルトレイラーを生成する

prepareEdge()[ソース]

prepare Edge method.

edge辞書を生成するトップ。全レイヤを順に走査する .. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 レイヤ名対 レイヤ番号, type, bottom, top, pad, kernel_size, stride, num_output, oW, oH, iCH, iW, iH, nElem, ops, nFact

recordOneDATA(nod, color, nodeSTR)[ソース]

record one DATA.

データ1個の記録

recordOneEdge(nodS, nodD, siz, nodAttr)[ソース]

record one Edge.

エッジ1個の記録

recordOneNODE(nod, color, nodeSTR)[ソース]

record one NODE.

ノード1個の記録

setTITLE()[ソース]

set TITLE string.

タイトル名をヘッダから探してセット