IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 三菱電機株式会社の特許一覧

特許7603478移植支援装置、移植支援方法及び移植支援プログラム
<>
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図1
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図2
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図3
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図4
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図5
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図6
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図7
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図8
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図9
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図10
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図11
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図12
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図13
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図14
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図15
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図16
  • 特許-移植支援装置、移植支援方法及び移植支援プログラム 図17
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-12
(45)【発行日】2024-12-20
(54)【発明の名称】移植支援装置、移植支援方法及び移植支援プログラム
(51)【国際特許分類】
   G06N 3/10 20060101AFI20241213BHJP
   G06N 3/0464 20230101ALI20241213BHJP
【FI】
G06N3/10
G06N3/0464
【請求項の数】 6
(21)【出願番号】P 2021029680
(22)【出願日】2021-02-26
(65)【公開番号】P2022130980
(43)【公開日】2022-09-07
【審査請求日】2023-10-25
(73)【特許権者】
【識別番号】000006013
【氏名又は名称】三菱電機株式会社
(74)【代理人】
【識別番号】100088672
【弁理士】
【氏名又は名称】吉竹 英俊
(74)【代理人】
【識別番号】100088845
【弁理士】
【氏名又は名称】有田 貴弘
(72)【発明者】
【氏名】柏木 僚
【審査官】多賀 実
(56)【参考文献】
【文献】国際公開第2019/216404(WO,A1)
【文献】特開2017-182319(JP,A)
【文献】特開2019-096317(JP,A)
【文献】Joona Jokivuori,"Cross-platform porting of Deep Neural Networks",Bachelor of Science Thesis Faculty of Engineering and Natural Sciences [online],Tampere University,2020年,pp.1-22,[検索日 2024.07.30], インターネット:<URL:https://trepo.tuni.fi/handle/10024/121328>
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
G06F 8/00- 8/77
G06F 9/44- 9/455
(57)【特許請求の範囲】
【請求項1】
CNN(Convolution Neural Network)の複数の層と、当該層に付随する重みとを含むCNNモデルを取得するモデル取得部と、
前記CNNモデルの前記複数の層の末尾の層から順に層が削除された複数の欠落CNNモデルを生成する欠落モデル生成部と、
前記CNNモデルの試験入力パターンを取得する試験パターン取得部と、
少なくとも前記複数の欠落CNNモデルと、前記試験入力パターンとを用いた推論によって、複数の試験出力パターンを生成する推論部と
を備える、移植支援装置。
【請求項2】
請求項1に記載の移植支援装置であって、
前記推論部は、
前記CNNモデル及び前記複数の欠落CNNモデルと、前記試験入力パターンとを用いた推論によって、前記複数の試験出力パターンを生成する、移植支援装置。
【請求項3】
請求項2に記載の移植支援装置であって、
移植先の処理系のスケルトン用コードの断片を、スケルトンテンプレートとして取得するテンプレート取得部と、
前記複数の試験出力パターンと、前記スケルトンテンプレートとに基づいて、前記複数の層のそれぞれに対応する複数のスケルトンを生成するスケルトン生成部と
をさらに備える、移植支援装置。
【請求項4】
請求項3に記載の移植支援装置であって、
前記CNNモデルから、前記複数の層の名称を抽出する層名抽出部をさらに備え、
前記スケルトン生成部は、
前記スケルトンテンプレートと、前記複数の試験出力パターンと、前記複数の層の名称とに基づいて、前記複数の層の名称がそれぞれ付された前記複数のスケルトンを生成する、移植支援装置。
【請求項5】
モデル取得部が、CNN(Convolution Neural Network)の複数の層と、当該層に付随する重みとを含むCNNモデルを取得し、
欠落モデル生成部が、前記CNNモデルの前記複数の層の末尾の層から順に層が削除された複数の欠落CNNモデルを生成し、
試験パターン取得部が、前記CNNモデルの試験入力パターンを取得し、
推論部が、少なくとも前記複数の欠落CNNモデルと、前記試験入力パターンとを用いた推論によって、複数の試験出力パターンを生成する、移植支援方法。
【請求項6】
CNN(Convolution Neural Network)の複数の層と、当該層に付随する重みとを含むCNNモデルを取得する手段と、
前記CNNモデルの前記複数の層の末尾の層から順に層が削除された複数の欠落CNNモデルを生成する手段と、
前記CNNモデルの試験入力パターンを取得する手段と、
少なくとも前記複数の欠落CNNモデルと、前記試験入力パターンとを用いた推論によって、複数の試験出力パターンを生成する手段として
ンピュータを機能させる、移植支援プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、移植支援装置、移植支援方法及び移植支援プログラムに関する。
【背景技術】
【0002】
近年、フレームワークが存在する処理系から、フレームワークが存在しない処理系へのフレームワークの移植を支援する移植支援装置が提案されている。例えば特許文献1には、コンパイラのビルドエラーからソースコードを分析し、過去の修正履歴に基づいてソースコードを修正することで、ビルドエラーを自動で訂正する技術が提案されている。
【0003】
また例えば非特許文献1には、CNN(Convolution Neural Network)の構成及び重みを含むCNNモデルを学習したり、学習したCNNモデルを用いた推論を行ったりするCNNフレームワークが提案されている。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2015-26365号公報
【非特許文献】
【0005】
【文献】インターネット<URL:https://www.tensorflow.org>
【発明の概要】
【発明が解決しようとする課題】
【0006】
CNNフレームワークでは、CNNフレームワークが動作する処理系でのみ、学習したCNNモデルを用いた推論を実行することが可能である。このため、CNNフレームワークが存在しない処理系に移植するためには、CNNの構成に含まれるConvolution層などの複数の層と、それらの層で用いられる重みとを特定する必要がある。
【0007】
しかしながら、CNNモデルへの入力パターンとCNNモデルからの出力パターンとから、CNNモデルに含まれる複数の層のそれぞれの出力パターンを推測するのは困難である。このため、CNNモデルに含まれる複数の層及び重みを特定することが困難であり、その結果として、CNNフレームワークの移植が困難であるという問題があった。
【0008】
そこで、本開示は、上記のような問題点を鑑みてなされたものであり、CNNフレームワークの移植を容易化可能な技術を提供することを目的とする。
【課題を解決するための手段】
【0009】
本開示に係る移植支援装置は、CNN(Convolution Neural Network)の複数の層と、当該層に付随する重とを含むCNNモデルを取得するモデル取得部と、前記CNNモデルの前記複数の層の末尾の層から順に層が削除された複数の欠落CNNモデルを生成する欠落モデル生成部と、前記CNNモデルの試験入力パターンを取得する試験パターン取得部と、少なくとも前記複数の欠落CNNモデルと、前記試験入力パターンとを用いた推論によって、複数の試験出力パターンを生成する推論部とを備える。


【発明の効果】
【0010】
本開示によれば、CNNモデルの複数の層の末尾の層から順に層が削除された複数の欠落CNNモデルを生成し、複数の欠落CNNモデルと、試験入力パターンとを用いた推論によって、複数の試験出力パターンを生成する。このような構成によれば、CNNフレームワークの移植を容易化することができる。
【図面の簡単な説明】
【0011】
図1】実施の形態1に係る移植支援装置の構成を示すブロック図である。
図2】実施の形態1に係るCNNモデルの例を示す図である。
図3】実施の形態1に係る欠落CNNモデルの例を示す図である。
図4】実施の形態1に係る試験入力パターンの例を示す図である。
図5】実施の形態1に係る試験出力パターンの例を示す図である。
図6】実施の形態1に係るCNN層削減部の動作を示すフローチャートである。
図7】実施の形態2に係る移植支援装置の構成を示すブロック図である。
図8】実施の形態2に係るスケルトンテンプレートの例を示す図である。
図9】実施の形態2に係るスケルトンコードの例を示す図である。
図10】実施の形態2に係るスケルトン生成部の動作を示すフローチャートである。
図11】実施の形態2に係るスケルトン生成部の動作を示すフローチャートである。
図12】実施の形態3に係る移植支援装置の構成を示すブロック図である。
図13】実施の形態3に係る層名付きスケルトンコードの例を示す図である。
図14】実施の形態3に係る層名付きスケルトン生成部の動作を示すフローチャートである。
図15】実施の形態3に係る層名付きスケルトン生成部の動作を示すフローチャートである。
図16】その他の変形例に係る移植支援装置のハードウェア構成を示すブロック図である。
図17】その他の変形例に係る移植支援装置のハードウェア構成を示すブロック図である。
【発明を実施するための形態】
【0012】
<実施の形態1>
図1は、本実施の形態1に係る移植支援装置の構成を示すブロック図である。図1に示す移植支援装置は、モデル取得部であるCNN入力部1と、欠落モデル生成部であるCNN層削減部2と、CNN蓄積部3と、試験パターン取得部である試験パターン入力部4と、推論部であるCNN推論部5と、試験パターン蓄積部6を備える。
【0013】
CNN層削減部2の入力は、CNN入力部1の出力と、CNN蓄積部3の出力とに接続される。CNN蓄積部3の入力は、CNN層削減部2の出力に接続される。CNN推論部5の入力は、CNN蓄積部3の出力と、試験パターン入力部4の出力とに接続される。試験パターン蓄積部6の入力は、CNN推論部5の出力に接続される。
【0014】
CNN入力部1は、移行元などのCNNフレームワークで学習されたCNNモデルを取得する。
【0015】
図2は、CNNモデル7の例を示す図である。CNNモデル7は、CNNの構成8とCNNの重み9と含む。CNNの構成8は、どのような処理を実行するのかが記述されたCNNの複数の層10を含む。なお、以下の説明では、CNNの複数の層10を「複数の層10」とのみ記載したり、CNNの層10を「層10」とのみ記載したりすることもある。
【0016】
例えば、図2のCNNの構成8は、順に並べられたConvolution層→ReLU層→Max Pooling層→…→Convolution層を、CNNの複数の層10として含んでいる。CNNの構成8は、例えば、JSON、XML、及び、HDFなどの階層データ構造で記述される。
【0017】
少なくとも1つの層10には、当該層10などの演算で用いる係数及びパラメータがCNNの重み9として付随する。例えば、図2の最初の層10であるConvolution層では、kernel_size、kernel、biasなどのConvolutionを実行するのに必要なパラメータなどの数値が、CNNの重み9として付随する。CNNの重み9は、例えば、TSV、CSVなどの行列データ構造、及び、JSON、XML、及び、HDFなどの階層データ構造で記述される。
【0018】
図1のCNN層削減部2は、CNN入力部1で取得されたCNNモデル7の複数の層10の末尾の層10から順に層10が削除された複数の欠落CNNモデルを生成する。以下、このようなCNN層削減部2の一例について説明する。
【0019】
まず、CNN層削減部2は、CNN入力部1で取得されたCNNモデル7の複数の層10の末尾の層10を削除することによって欠落CNNモデルを生成する。CNN層削減部2は、生成された欠落CNNモデルをCNN蓄積部3に蓄積する。
【0020】
それから、CNN層削減部2は、CNN蓄積部3に蓄積された欠落CNNモデルの複数の層10の末尾の層10を削除することによって新たな欠落CNNモデルを生成し、当該新たな欠落CNNモデルをCNN蓄積部3に蓄積する。CNN層削減部2は、この動作を、欠落CNNモデルの層10の数が1つになるまで繰り返す。この結果、CNN層削減部2は、複数の層10の数から1つ少ない数だけ、欠落CNNモデルを生成する。
【0021】
図2の例の場合、CNN層削減部2は、CNNモデル7の末尾の層10であるConvolution層を削除することによって、図3の欠落CNNモデル11aを生成する。また、CNN層削減部2は、欠落CNNモデル11aの末尾の層10であるMax Unpooling層を削除することによって、欠落CNNモデル11bを生成する。CNN層削減部2は、このような処理を繰り返すことによって、最終的にはCNNモデル7の先頭の層であるConvolution層を含む欠落CNNモデル11nを生成する。以下、説明の便宜上、欠落CNNモデル11a~11nのそれぞれを欠落CNNモデル11として記すこともある。
【0022】
CNN蓄積部3は、CNN層削減部2が生成した複数の欠落CNNモデル11を格納する。
【0023】
試験パターン入力部4は、CNNモデル7の試験入力パターンなどの入力用のデータを取得する。CNNモデル7の試験入力パターン15は、CNNモデル7を用いた推論に用いられ、欠落CNNモデル11を用いた推論にも用いられる試験入力パターンである。
【0024】
図4は、試験入力パターン15の例を示す図である。図4の例では、試験入力パターン15は、2次元数値行列のデータであり、CSVで記述されている。試験入力パターン15の次元数及びサイズは、CNNモデル7に含まれる先頭の層10及びそのCNNの重み9によって異なる。
【0025】
CNN推論部5は、CNN蓄積部3で蓄積された複数の欠落CNNモデル11と、試験パターン入力部4で取得された試験入力パターン15とを用いた推論によって、複数の試験出力パターンを生成する。本実施の形態1では、CNN推論部5は、複数の欠落CNNモデル11に、試験入力パターン15を適用した推論によって、複数の試験出力パターンをそれぞれ生成する。なお、CNN推論部5は、例えばCNNフレームワークで構成される。
【0026】
図5は、試験出力パターン16の例を示す図である。図5の例では、試験出力パターン16は、2次元数値行列のデータであり、CSVで記述されている。同一の試験入力パターン15に対する試験出力パターン16は、欠落CNNモデル11ごとに異なり、試験出力パターン16の次元数やサイズは、欠落CNNモデル11に含まれる層10及びそのCNNの重み9によって異なる。
【0027】
試験パターン蓄積部6は、CNN推論部5で生成された複数の試験出力パターン16を格納する。
【0028】
次に、CNN層削減部2の動作について焼成に説明する。図6は、CNN層削減部2による欠落CNNモデル11の生成動作を示すフローチャートである。
【0029】
まずステップS1にて、CNN層削減部2は、CNN蓄積部3に欠落CNNモデル11があるか否かを判定する。CNN蓄積部3に欠落CNNモデル11がないと判定された場合には処理がステップS2に進み、CNN蓄積部3に欠落CNNモデル11があると判定された場合には処理がステップS3に進む。
【0030】
ステップS2にて、CNN層削減部2は、CNN入力部1からCNNモデル7を処理対象CNNモデルとして取得する。その後、処理がステップS4に進む。
【0031】
ステップS3にて、CNN層削減部2は、CNN蓄積部3から最後に格納した欠落CNNモデル11を処理対象CNNモデルとして取得する。その後、処理がステップS4に進む。
【0032】
ステップS4にて、CNN層削減部2は、処理対象CNNモデルが2つ以上の層10を含むか否かを判定する。処理対象CNNモデルが2つ以上の層10を含むと判定された場合には処理がステップS5に進み、処理対象CNNモデルが2つ以上の層10を含むと判定されなかった場合には図6の動作が終了する。
【0033】
ステップS5にて、CNN層削減部2は、処理対象CNNモデルから末尾の層10を削除して、欠落CNNモデル11を生成する。その後、処理がステップS6に進む。
【0034】
ステップS6にて、CNN層削減部2は、ステップS5で生成した欠落CNNモデル11をCNN蓄積部3に蓄積する。その後、処理がステップS1に戻る。
【0035】
<実施の形態1のまとめ>
以上のような本実施の形態1に係る移植支援装置によれば、CNNモデル7の複数の層10の末尾の層10から順に層10が削除された複数の欠落CNNモデル11を生成し、複数の欠落CNNモデル11と、試験入力パターン15とを用いた推論によって、複数の試験出力パターン16を生成する。このような構成によれば、CNNモデル7の複数の層10の出力パターンに概ね対応する複数の試験出力パターン16から、CNNモデル7の複数の層10及び重み9をある程度特定することができるので、CNNフレームワークの移植を容易化することができる。
【0036】
<変形例1>
実施の形態1では、CNN層削減部2は、CNN入力部1で取得されたCNNモデル7の複数の層10の末尾の層10から順に層10を削除していくことによって、複数の欠落CNNモデル11を生成した。しかしながら、複数の欠落CNNモデル11が、CNNモデル7の複数の層10の末尾の層10から順に層10が削除されたものであれば、複数の欠落CNNモデル11の生成方法は、これに限ったものではない。例えば、CNN層削減部2は、CNN入力部1で取得されたCNNモデル7の複数の層10の先頭の層10から順に層10を追加していくことによって、複数の欠落CNNモデル11を生成してもよい。
【0037】
<変形例2>
実施の形態1では、CNN推論部5は、複数の欠落CNNモデル11と、試験入力パターン15とを用いた推論によって、複数の試験出力パターンを生成したが、これに限ったものではない。例えば、CNN推論部5は、複数の欠落CNNモデル11と、試験入力パターン15とを用いた推論と、CNNモデル7と、試験入力パターン15とを用いた推論とによって、複数の試験出力パターンを生成してもよい。
【0038】
このような構成によれば、CNNモデル7の複数の層10の出力パターンに対応する複数の試験出力パターン16から、CNNモデル7の複数の層10及び重み9を特定することができるので、CNNフレームワークの移植をさらに容易化することができる。なお、次に説明する実施の形態2では、CNN推論部5は、CNNモデル7及び複数の欠落CNNモデル11と、試験入力パターン15とを用いた推論によって、複数の試験出力パターンを生成するものとする。
【0039】
<実施の形態2>
図7は、本実施の形態2に係る移植支援装置の構成を示すブロック図である。以下、本実施の形態2に係る構成要素のうち、上述の構成要素と同じまたは類似する構成要素については同じまたは類似する参照符号を付し、異なる構成要素について主に説明する。
【0040】
以下で説明するように、本実施の形態2に係る移植支援装置によれば、複数の試験出力パターン16の次元やサイズを解析することで、複数の層10のそれぞれに対応する複数のスケルトンとして、複数の移植先処理系のスケルトンコードを生成することが可能となっている。
【0041】
図7の移植支援装置の構成は、図1の構成に、テンプレート取得部であるスケルトンテンプレート入力部17と、スケルトン生成部18とが追加された構成と同様である。スケルトン生成部18の入力は、試験パターン蓄積部6の出力と、スケルトンテンプレート入力部17の出力とに接続される。
【0042】
スケルトンテンプレート入力部17は、移植先の処理系のスケルトン用コードの断片を、スケルトンテンプレートとして取得する。
【0043】
図8は、スケルトンテンプレート19の例を示す図である。図8のスケルトンテンプレート19は、関数スケルトン20と、次元開始文字列21と、次元終了文字列22とを含む。図8の例では、スケルトンテンプレート19は、C言語のテンプレートであり、関数スケルトン20は、void型の戻り値と、どちらもfloat型の入力を示すin及び出力を示すoutとを含む。関数名と入力と出力とを示す引数の次元やそのサイズはそれぞれ、*NAME*、*IN_DIM*、*OUT_DIM*という文字列で代替されている。次元開始文字列21は、これら文字列の値の前に付加すべき文字であり、図8の例では「[」である。次元終了文字列22は、これら文字列の値の後に付加すべき文字であり、図8の例では「]」である。
【0044】
スケルトン生成部18は、試験パターン蓄積部6から試験出力パターン16を取得して次元数及びサイズを解析する。そして、スケルトン生成部18は、解析結果と、スケルトンテンプレート入力部17で取得されたスケルトンテンプレート19とに基づいて、CNNの複数の層10のそれぞれに対応する複数の移植先処理系のスケルトンコードを生成する。生成されたスケルトンコードは、図示しないスケルトンファイルなどに記述される。なお、以下の説明では移植先処理系のスケルトンコードを「スケルトンコード」とのみ記載することもある。スケルトンコードは、CNNモデル7の複数の層10における移植先処理系の関数やメソッドであり、具体的な処理は実装されていない。
【0045】
図9は、スケルトンコード23の例を示す図である。図9は、図8のスケルトンテンプレート19から生成されるスケルトンコード23である。図9の例では、図8の*NAME*がlayer_1に置換され、*IN_DIM*が[128]に、*OUT_DIM*が[128][64]に置換されている。図9の例のスケルトンコード23は、図2の最初の層10に対応しており、入力の次元は1次元でそのサイズは128であり、出力の次元は2次元でそのサイズは128×64である。
【0046】
図10及び図11は、スケルトン生成部18によるスケルトンコード23の生成動作を示すフローチャートである。
【0047】
まずステップS11にて、スケルトン生成部18は、スケルトンファイルを削除する。その後、処理がステップS12に進む。
【0048】
ステップS12にて、スケルトン生成部18は、「層数」に0を代入する。その後、処理がステップS13に進む。
【0049】
ステップS13にて、スケルトン生成部18は、試験パターン入力部4及び試験パターン蓄積部6に、「層数」に対応する試験入力パターン15及び試験出力パターン16があるか否かを判定する。例えば、スケルトン生成部18は、「層数」が、試験入力パターン15から取得される層数よりも小さいか否かに基づいてステップS13の判定を行う。「層数」に対応する試験入力パターン15及び試験出力パターン16があると判定された場合には処理がステップS14に進み、「層数」に対応する試験入力パターン15及び試験出力パターン16があると判定されなかった場合には図10の動作が終了する。
【0050】
ステップS14にて、スケルトン生成部18は、試験パターン入力部4及び試験パターン蓄積部6から、「層数」に対応する試験入力パターン15及び試験出力パターン16を取得する。その後、処理がステップS15に進む。
【0051】
ステップS15にて、スケルトン生成部18は、関数スケルトン20を複製して、複製された関数スケルトンの*NAME*を「layer_1+層数」で置換する。例えば、「層数」が0である場合、複製された関数スケルトンの*NAME*は、「layer_1」に置換される。その後、処理がステップS16に進む。
【0052】
ステップS16にて、スケルトン生成部18は、試験入力パターン15から入力の次元数を取得する。その後、処理がステップS17に進む。
【0053】
ステップS17にて、スケルトン生成部18は、「入力次元」に0を代入する。その後、処理がステップS18に進む。
【0054】
ステップS18にて、スケルトン生成部18は、「入力次元文字列」を初期化する。その後、処理がステップS19に進む。
【0055】
ステップS19にて、スケルトン生成部18は、「入力次元」が、ステップS16で取得された入力の次元数より小さいか否かを判定する。「入力次元」が、ステップS16で取得された入力の次元数よりも小さい場合には処理がステップS20に進み、「入力次元」が、ステップS16で取得された入力の次元数以上である場合には処理が図11のステップS23に進む。
【0056】
ステップS20にて、スケルトン生成部18は、試験入力パターン15から入力の次元のサイズを取得する。その後、処理がステップS21に進む。
【0057】
ステップS21にて、スケルトン生成部18は、「入力次元文字列」に、「次元開始文字列21+ステップS20で取得された入力の次元のサイズ+次元終了文字列22」を追加する。例えば、図8の例において、ステップS20で取得された次元のサイズが128であった場合、「入力次元文字列」に[128]が追加される。その後、処理がステップS22に進む。
【0058】
ステップS22にて、スケルトン生成部18は、「入力次元」に、「入力次元」+1を代入する、つまり「入力次元」をインクリメントする。その後、処理がステップS19に戻る。
【0059】
図11のステップS23にて、スケルトン生成部18は、複製された関数スケルトンの*IN_DIM*を「入力次元文字列」で置換する。その後、処理がステップS24に進む。
【0060】
ステップS24にて、スケルトン生成部18は、試験出力パターン16から出力の次元数を取得する。その後、処理がステップS25に進む。
【0061】
ステップS25にて、スケルトン生成部18は、「出力次元」に0を代入する。その後、処理がステップS26に進む。
【0062】
ステップS26にて、スケルトン生成部18は、「出力次元文字列」を初期化する。その後、処理がステップS27に進む。
【0063】
ステップS27にて、スケルトン生成部18は、「出力次元」が、ステップS24で取得された出力の次元数より小さいか否かを判定する。「出力次元」が、ステップS24で取得された出力の次元数よりも小さい場合には処理がステップS28に進み、「出力次元」が、ステップS24で取得された出力の次元数以上である場合には処理がステップS31に進む。
【0064】
ステップS28にて、スケルトン生成部18は、試験出力パターン16から出力の次元のサイズを取得する。その後、処理がステップS29に進む。
【0065】
ステップS29にて、スケルトン生成部18は、「出力次元文字列」に、「次元開始文字列21+ステップS28で取得された出力の次元のサイズ+次元終了文字列22」を追加する。
【0066】
ステップS30にて、スケルトン生成部18は、「出力次元」に、「出力次元」+1を代入する、つまり「出力次元」をインクリメントする。その後、処理がステップS27に戻る。
【0067】
ステップS31にて、スケルトン生成部18は、複製された関数スケルトンの*OUT_DIM*を「出力次元文字列」で置換する。その後、処理がステップS32に進む。
【0068】
ステップS32にて、スケルトン生成部18は、置換された関数スケルトンをスケルトンファイルの末尾に追加する。その後、処理がステップS33に進む。
【0069】
ステップS33にて、スケルトン生成部18は、「層数」に、「層数」+1を代入する、つまり「層数」をインクリメントする。その後、処理がステップS13に戻る。
【0070】
<実施の形態2のまとめ>
以上のような本実施の形態2に係る移植支援装置によれば、複数の試験出力パターン16と、スケルトンテンプレート19とに基づいて、CNNモデル7の複数の層10のそれぞれに対応する複数のスケルトンコード23を生成する。このような構成によれば、CNNフレームワークの移植を容易化することができる。
【0071】
<実施の形態3>
図12は、本実施の形態3に係る移植支援装置の構成を示すブロック図である。以下、本実施の形態3に係る構成要素のうち、上述の構成要素と同じまたは類似する構成要素については同じまたは類似する参照符号を付し、異なる構成要素について主に説明する。
【0072】
実施の形態2では、CNNの複数の層10の移植先処理系のスケルトンコードには、layer_1、layer_2、…などの通し番号が付された。これに対して、以下で説明するように、本実施の形態3に係る移植支援装置によれば、複数の層10の名称がそれぞれ付された複数のスケルトンとして、複数の移植先処理系の層名付きスケルトンコードを生成することが可能となっている。
【0073】
図12の移植支援装置の構成は、図7の構成に、層名抽出部であるCNN層名抽出部25が追加され、試験パターン蓄積部6及びスケルトン生成部18を、層名付き試験パターン蓄積部26及び層名付きスケルトン生成部27に変更された構成と同様である。
【0074】
CNN層名抽出部25の入力は、CNN入力部1の出力に接続される。層名付き試験パターン蓄積部26の入力は、CNN層名抽出部25の出力と、CNN推論部5の出力とに接続される。層名付きスケルトン生成部27の入力は、層名付き試験パターン蓄積部26の出力と、スケルトンテンプレート入力部17の出力とに接続される。
【0075】
CNN層名抽出部25は、CNN入力部1で取得されたCNNモデル7から、複数の層10の名称を抽出する。
【0076】
層名付き試験パターン蓄積部26は、CNN推論部5で生成された試験出力パターン16と、CNN層名抽出部25で抽出された複数の層10の名称とを蓄積する。
【0077】
層名付きスケルトン生成部27は、層名付き試験パターン蓄積部26に蓄積された試験出力パターン16及び複数の層10の名称と、スケルトンテンプレート入力部17で取得されたスケルトンテンプレート19とに基づいて、複数の層名付きスケルトンコードを生成する。つまり、層名付きスケルトン生成部27は、層名を付す機能が付されたスケルトン生成部18に相当し、複数の層名付きスケルトンコードは、複数の層10の名称がそれぞれ付された複数のスケルトンコード23に相当する。層名付きスケルトンコードは、図示しないスケルトンファイルなどに記述される。層名付きスケルトンコードは、スケルトンコード23と同様に、CNNモデル7の複数の層10における移植先処理系の関数やメソッドであり、具体的な処理は実装されていない。
【0078】
図13は、層名付きスケルトンコード28の例を示す図である。図13は、図8のスケルトンテンプレート19から生成される層名付きスケルトンコード28である。図13の例では、図8の*NAME*が、図2の最初の層10の名称を示すConvolution_1に置換され、*IN_DIM*が[128]に、*OUT_DIM*が[128][64]に置換されている。図13の例の層名付きスケルトンコード28は、図2の最初の層10に対応しており、入力の次元は1次元でそのサイズは128であり、出力の次元は2次元でそのサイズは128×64である。
【0079】
図14及び図15は、層名付きスケルトン生成部27による層名付きスケルトンコード28の生成動作を示すフローチャートである。図14及び図15のフローチャートは、図10及び図11のフローチャートのうちステップS14及びステップS15をステップS14a及びステップS15aに変更したものと同様である。このため、以下、ステップS14a及びステップS15aの処理についてのみ説明する。
【0080】
ステップS14aにて、スケルトン生成部18は、試験パターン入力部4及び試験パターン蓄積部6から、「層数」に対応する試験入力パターン15、試験出力パターン16、及び、層10の名称を取得する。その後、処理がステップS15aに進む。
【0081】
ステップS15aにて、スケルトン生成部18は、関数スケルトン20を複製して、複製された関数スケルトンの*NAME*を「ステップS14で取得された層10の名称_1+層数」で置換する。例えば、図2のCNNモデル7に対して動作が行われ、「層数」が0である場合、複製された関数スケルトンの*NAME*は、「Convolution_1」に置換される。その後、処理がステップS16に進む。
【0082】
<実施の形態3のまとめ>
以上のような本実施の形態3に係る移植支援装置によれば、複数の層名付きスケルトンコード、つまり複数の層10の名称がそれぞれ付された複数のスケルトンコード23を生成することができる。これにより、移植先関数スケルトンの取り違えによる実装誤りを回避することができるので、CNNフレームワークの移植を容易化することができる。
【0083】
<その他の変形例>
上述した図1のCNN入力部1、CNN層削減部2、試験パターン入力部4、及び、CNN推論部5を、以下「CNN入力部1等」と記す。CNN入力部1等は、図16に示す処理回路81により実現される。すなわち、処理回路81は、CNNの複数の層と、当該層に付随する重さとを含むCNNモデルを取得するCNN入力部1と、CNNモデルの複数の層の末尾の層から順に層が削除された複数の欠落CNNモデルを生成するCNN層削減部2と、CNNモデルの試験入力パターンを取得する試験パターン入力部4と、少なくとも複数の欠落CNNモデルと、試験入力パターンとを用いた推論によって、複数の試験出力パターンを生成するCNN推論部5と、を備える。処理回路81には、専用のハードウェアが適用されてもよいし、メモリに格納されるプログラムを実行するプロセッサが適用されてもよい。プロセッサには、例えば、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、DSP(Digital Signal Processor)などが該当する。
【0084】
処理回路81が専用のハードウェアである場合、処理回路81は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)、またはこれらを組み合わせたものが該当する。CNN入力部1等の各部の機能それぞれは、処理回路を分散させた回路で実現されてもよいし、各部の機能をまとめて一つの処理回路で実現されてもよい。
【0085】
処理回路81がプロセッサである場合、CNN入力部1等の機能は、ソフトウェア等との組み合わせにより実現される。なお、ソフトウェア等には、例えば、ソフトウェア、ファームウェア、または、ソフトウェア及びファームウェアが該当する。ソフトウェア等はプログラムとして記述され、メモリに格納される。図17に示すように、処理回路81に適用されるプロセッサ82は、メモリ83に記憶されたプログラムを読み出して実行することにより、各部の機能を実現する。すなわち、移植支援装置は、処理回路81により実行されるときに、CNNの複数の層と、当該層に付随する重さとを含むCNNモデルを取得するステップと、CNNモデルの複数の層の末尾の層から順に層が削除された複数の欠落CNNモデルを生成するステップと、CNNモデルの試験入力パターンを取得するステップと、少なくとも複数の欠落CNNモデルと、試験入力パターンとを用いた推論によって、複数の試験出力パターンを生成するステップと、が結果的に実行されることになるプログラムを格納するためのメモリ83を備える。換言すれば、このプログラムは、CNN入力部1等の手順や方法をコンピュータに実行させるものであるともいえる。ここで、メモリ83は、例えば、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ、EPROM(Erasable Programmable Read Only Memory)、EEPROM(Electrically Erasable Programmable Read Only Memory)などの、不揮発性または揮発性の半導体メモリ、HDD(Hard Disk Drive)、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD(Digital Versatile Disc)、それらのドライブ装置等、または、今後使用されるあらゆる記憶媒体であってもよい。
【0086】
以上、CNN入力部1等の各機能が、ハードウェア及びソフトウェア等のいずれか一方で実現される構成について説明した。しかしこれに限ったものではなく、CNN入力部1等の一部を専用のハードウェアで実現し、別の一部をソフトウェア等で実現する構成であってもよい。例えば、CNN入力部1については専用のハードウェアとしての処理回路81、インターフェース及びレシーバなどでその機能を実現し、それ以外についてはプロセッサ82としての処理回路81がメモリ83に格納されたプログラムを読み出して実行することによってその機能を実現することが可能である。
【0087】
以上のように、処理回路81は、ハードウェア、ソフトウェア等、またはこれらの組み合わせによって、上述の各機能を実現することができる。
【0088】
また、以上で説明した移植支援装置は、通信端末と、サーバとを適宜に組み合わせてシステムとして構築される移植支援システムにも適用することができる。この場合、以上で説明した移植支援装置の各機能あるいは各構成要素は、前記システムを構築する各機器に分散して配置されてもよいし、いずれかの機器に集中して配置されてもよい。
【0089】
なお、各実施の形態及び各変形例を自由に組み合わせたり、各実施の形態及び各変形例を適宜、変形、省略したりすることが可能である。
【符号の説明】
【0090】
1 CNN入力部、2 CNN層削減部、4 試験パターン入力部、5 CNN推論部、7 CNNモデル、9 重み、10 層、11 欠落CNNモデル、15 試験入力パターン、16 試験出力パターン、17 スケルトンテンプレート入力部、18 スケルトン生成部、19 スケルトンテンプレート、23 スケルトンコード、26 層名付き試験パターン蓄積部、27 層名付きスケルトン生成部、28 層名付きスケルトンコード。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17