(57)【要約】【課題】  畳み込み神経網処理方法及び装置を提供すること。【解決手段】  一実施形態に係る畳み込み神経網処理装置は、畳み込みレイヤのカーネルの特性及び畳み込みレイヤの入力の特性のうち少なくとも１つに基づいて、カーネルを再使用する第１演算モード及び入力を再使用する第２演算モードのいずれか１つの演算モードを選択し、選択された演算モードに応じて畳み込み演算を行う。【選択図】      図１
2018077842.tif 000002
【特許請求の範囲】
【請求項１】
畳み込みレイヤのカーネルの特性及び前記畳み込みレイヤの入力の特性のうち少なくとも１つに基づいて、前記カーネルを再使用する第１演算モード及び前記入力を再使用する第２演算モードのいずれか１つの演算モードを選択するステップと、
前記選択された演算モードに応じて畳み込み演算を行うステップと、
を含む畳み込み神経網処理方法。
【請求項２】
畳み込み神経網は、前記畳み込みレイヤを含み、
前記畳み込みレイヤのカーネルの特性及び前記畳み込みレイヤの入力の特性に基づいて、前記畳み込みレイヤごとに前記第１演算モード及び前記第２演算モードのいずれか１つを適応的に選択するステップをさらに含む、請求項１に記載の畳み込み神経網処理方法。
【請求項３】
前記カーネルの特性は、前記カーネルに含まれたカーネル要素のうち０が占めている比率及び前記カーネルの大きさのうち少なくとも１つを含み、
前記入力の特性は、前記入力に含まれた入力要素のうち０が占めている比率及び前記入力の大きさのうち少なくとも１つを含む、請求項１又は２に記載の畳み込み神経網処理方法。
【請求項４】
前記いずれか１つの演算モードを選択するステップは、
前記入力に含まれた入力要素のうち０が占めている比率を取得するステップと、
前記取得された比率及び前記カーネルに含まれたカーネル要素のうち０が占めている比率のうち大きい値に対応する演算モードを選択するステップと、
を含む、請求項１又は２に記載の畳み込み神経網処理方法。
【請求項５】
前記いずれか１つの演算モードを選択するステップは、前記入力の大きさ及び前記カーネルの大きさの比率に基づいて演算モードを選択するステップを含む、請求項１又は２に記載の畳み込み神経網処理方法。
【請求項６】
前記カーネルの特性及び前記入力の特性は畳み込み神経網内の前記畳み込みレイヤの深さに応じて決定され、
前記いずれか１つの演算モードを選択するステップは、前記カーネルの特性及び前記入力の特性のうち少なくとも１つに基づいて、データロードの回数及び動作メモリの容量のうち少なくとも１つに関する制限条件を満足する演算モードを選択するステップを含む、請求項１又は２に記載の畳み込み神経網処理方法。
【請求項７】
前記いずれか１つの演算モードを選択するステップは、前記第１演算モードの第１データロードの回数及び前記第２演算モードの第２データロードの回数のうち小さい値に対応する演算モードを選択するステップを含む、請求項１又は２に記載の畳み込み神経網処理方法。
【請求項８】
前記演算モードを選択するステップは、前記第１データロードの回数を取得するステップを含み、
前記第１データロードの回数は、前記カーネルの大きさから算出された前記カーネルのロードの回数と、前記カーネルに含まれたカーネル要素のうち０の個数と前記入力の大きさに基づいて算出された前記入力のロードの回数の合計によって算出される、請求項７に記載の畳み込み神経網処理方法。
【請求項９】
前記演算モードを選択するステップは、
前記入力に含まれた入力要素のうち０の個数を取得するステップと、
前記入力の大きさから算出された前記入力のロードの回数と、前記入力要素のうち０の個数と前記カーネルの大きさに基づいて算出された前記カーネルのロードの回数の合計により前記第２データロードの回数を算出するステップと、
を含む、請求項７に記載の畳み込み神経網処理方法。
【請求項１０】
前記畳み込み演算を行うステップは、前記第１演算モードが選択される場合、前記入力に含まれた入力要素のうち、前記カーネルに含まれたカーネル要素に対応する入力要素を特定する第１情報、及び前記畳み込み演算の出力に含まれた出力要素のうち前記カーネル要素と前記特定された入力要素との間の演算結果がマッピングされる出力要素を特定する第２情報に基づいて畳み込み演算を行うステップを含む、請求項１又は２に記載の畳み込み神経網処理方法。
【請求項１１】
前記畳み込み演算を行うステップは、
前記カーネル要素のいずれか１つのカーネル要素をロードするステップと、
前記第１情報に基づいて、前記ロードされたカーネル要素に対応する入力要素をロードするステップと、
前記第２情報に基づいて、前記ロードされたカーネル要素及び前記ロードされた入力要素の間の演算結果がマッピングされる出力要素を更新するステップと、
を含む、請求項１０に記載の畳み込み神経網処理方法。
【請求項１２】
前記第１情報は、前記カーネル要素の位置、前記カーネルの大きさ、及びストライド、前記入力の大きさ、及びパッドに基づいて決定され、
前記第２情報は、前記カーネル要素の位置及び前記特定された入力要素の位置に基づいて決定される、請求項１０に記載の畳み込み神経網処理方法。
【請求項１３】
前記畳み込み演算を行うステップは、前記第１演算モードが選択される場合、前記カーネル要素のいずれか１つのカーネル要素をロードするステップと、
前記ロードされたカーネル要素が０である場合、前記ロードされたカーネル要素に対応する入力要素のロード又は前記ロードされたカーネル要素に関する演算をスキップするステップと、
を含む、請求項１又は２に記載の畳み込み神経網処理方法。
【請求項１４】
前記畳み込み演算を行うステップは、前記第１演算モードが選択される場合、前記カーネルに含まれたカーネル要素に対応する臨時バッファを割り当てるステップと、
前記カーネルに含まれたカーネル要素のいずれか１つのカーネル要素をロードするステップと、
前記ロードされたカーネル要素及び前記ロードされたカーネル要素に対応する臨時バッファに基づいて畳み込み演算を行うステップと、
を含む、請求項１又は２に記載の畳み込み神経網処理方法。
【請求項１５】
前記畳み込み演算を行うステップは、
前記カーネル要素のうち前記ロードされたカーネル要素と異なる他のカーネル要素をロードするステップと、
前記他のカーネル要素が０と異なる場合、前記他のカーネル要素及び前記他のカーネル要素に対応する臨時バッファに格納された入力要素の間の演算結果に基づいて畳み込み演算を行うステップと、
をさらに含む、請求項１４に記載の畳み込み神経網処理方法。
【請求項１６】
前記畳み込み演算を行うステップは、前記第１演算モードが選択される場合、前記カーネルに含まれたカーネル要素のいずれか１つのカーネル要素をロードするステップと、
前記ロードされたカーネル要素が０である場合、臨時バッファの割当をスキップするステップと、
前記ロードされたカーネル要素が０と異なる場合、前記ロードされたカーネル要素の位置、前記カーネルの大きさ及びストライド、前記入力の大きさ及びパッドに基づいて臨時バッファを割り当てるステップと、
前記ロードされたカーネル要素に対応する入力要素をロードし、前記割り当てられた臨時バッファに格納するステップと、
前記ロードされたカーネル要素及び前記臨時バッファに格納された入力要素の間の演算結果に基づいて畳み込み演算を行うステップと、
を含む、請求項１又は２に記載の畳み込み神経網処理方法。
【請求項１７】
前記畳み込み演算を行うステップは、前記第２演算モードが選択される場合、前記カーネルに含まれたカーネル要素のうち、前記入力に含まれた入力要素に対応するカーネル要素を特定する第１情報、及び前記畳み込み演算の出力に含まれた出力要素のうち前記入力要素と前記特定されたカーネル要素との間の演算結果がマッピングされる出力要素を特定する第２情報に基づいて畳み込み演算を行うステップを含む、請求項１又は２に記載の畳み込み神経網処理方法。
【請求項１８】
前記畳み込み演算を行うステップは、
前記入力要素のいずれか１つの入力要素をロードするステップと、
前記第１情報に基づいて前記ロードされた入力要素に対応するカーネル要素をロードするステップと、
前記第２情報に基づいて前記ロードされた入力要素及び前記ロードされたカーネル要素の間の演算結果がマッピングされる出力要素を更新するステップと、
を含む、請求項１７に記載の畳み込み神経網処理方法。
【請求項１９】
前記第１情報は、前記入力要素の位置、前記カーネルの大きさ、及びストライド、前記入力の大きさ、及びパッドに基づいて決定され、
前記第２情報は、前記入力要素の位置及び前記特定されたカーネル要素の位置に基づいて決定される、請求項１７に記載の畳み込み神経網処理方法。
【請求項２０】
前記畳み込み演算を行うステップは、前記第２演算モードが選択される場合、前記入力要素のいずれか１つの入力要素をロードするステップと、
前記ロードされた入力要素が０である場合、前記ロードされた入力要素に対応するカーネル要素のロード又は前記ロードされた入力要素に関する演算をスキップするステップと、
を含む、請求項１又は２に記載の畳み込み神経網処理方法。
【請求項２１】
請求項１〜請求項２０のいずれか一項に記載の神経網処理方法を神経網処理装置のコンピュータに実行させるコンピュータプログラム。
【請求項２２】
畳み込みレイヤのカーネルの特性及び前記畳み込みレイヤの入力の特性のうち少なくとも１つに基づいて、前記カーネルを再使用する第１演算モード及び前記入力を再使用する第２演算モードのいずれか１つの演算モードを選択し、
前記選択された演算モードに応じて畳み込み演算を行うプロセッサを含む、畳み込み神経網処理装置。
【請求項２３】
畳み込み神経網は、前記畳み込みレイヤを含み、
前記プロセッサは、前記畳み込みレイヤのカーネルの特性及び前記畳み込みレイヤの入力の特性に基づいて、前記畳み込みレイヤごとに前記第１演算モード及び前記第２演算モードのいずれか１つを適応的に選択する、請求項２２に記載の畳み込み神経網処理装置。
【請求項２４】
前記カーネルの特性は、前記カーネルに含まれたカーネル要素のうち０が占めている比率及び前記カーネルの大きさのうち少なくとも１つを含み、
前記入力の特性は、前記入力に含まれた入力要素のうち０が占めている比率及び前記入力の大きさのうち少なくとも１つを含み、
前記カーネルの特性及び前記入力の特性は、畳み込み神経網内の前記畳み込みレイヤの深さに応じて決定され、
前記プロセッサは、前記カーネルの特性及び前記入力の特性のうち少なくとも１つに基づいて、データロードの回数及び動作メモリの容量のうち少なくとも１つに関する制限条件を満足する演算モードを選択する、請求項２２又は２３に記載の畳み込み神経網処理装置。
【請求項２５】
前記第１演算モードの第１データロードの回数を記録するメモリをさらに含み、
前記第１データロードの回数は、前記カーネルの大きさから算出された前記カーネルのロードの回数と、前記カーネルに含まれたカーネル要素のうち０の個数と前記入力の大きさに基づいて算出された前記入力のロードの回数の合計によって算出され、
前記プロセッサは、
前記第１データロードの回数を取得し、
前記入力に含まれた入力要素のうち０の個数を取得し、
前記入力の大きさから算出された前記入力のロードの回数と、前記入力要素のうち０の個数と前記カーネルの大きさに基づいて算出された前記カーネルのロードの回数の合計により前記第２データロードの回数を算出し、
前記第１演算モードの第１データロードの回数及び前記第２演算モードの第２データロードの回数のうち小さい値に対応する演算モードを選択する、請求項２４に記載の畳み込み神経網処理装置。
【請求項２６】
前記プロセッサは、前記第１演算モードが選択される場合、前記入力に含まれた入力要素のうち、前記カーネルに含まれたカーネル要素に対応する入力要素を特定する第１情報及び前記畳み込み演算の出力に含まれた出力要素のうち、前記カーネル要素と前記特定された入力要素との間の演算結果がマッピングされる出力要素を特定する第２情報に基づいて畳み込み演算を行う、請求項２２又は２３に記載の畳み込み神経網処理装置。
【請求項２７】
前記プロセッサは、前記第１演算モードが選択される場合、前記カーネル要素のいずれか１つのカーネル要素をロードし、
前記ロードされたカーネル要素が０である場合、前記ロードされたカーネル要素に対応する入力要素のロード又は前記ロードされたカーネル要素に関する演算をスキップする、請求項２２又は２３に記載の畳み込み神経網処理装置。
【請求項２８】
前記プロセッサは、前記第２演算モードが選択される場合、前記カーネルに含まれたカーネル要素のうち、前記入力に含まれた入力要素に対応するカーネル要素を特定する第１情報及び前記畳み込み演算の出力に含まれた出力要素のうち、前記入力要素と前記特定されたカーネル要素との間の演算結果がマッピングされる出力要素を特定する第２情報に基づいて畳み込み演算を行う、請求項２２又は２３に記載の畳み込み神経網処理装置。
【請求項２９】
前記プロセッサは、前記第２演算モードが選択される場合、前記入力要素のいずれか１つの入力要素をロードし、前記ロードされた入力要素が０である場合、前記ロードされた入力要素に対応するカーネル要素のロード又は前記ロードされた入力要素に関する演算をスキップする、請求項２２又は２３に記載の畳み込み神経網処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
以下の実施形態は、畳み込み神経網の処理技術に関する。
【背景技術】
【０００２】
ニューラルネットワーク・ベースディープラーニング（ｄｅｅｐ  ｌｅａｒｎｉｎｇ）技術は、様々な分野で活用されている。例えば、顔、紅彩、音声などを認識するディープラーニング・ベースの生体認識／認証アプリケーションは埋込み端末（例えば、スマートフォン）に採用される。畳み込み神経網（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ；ＣＮＮ）は、畳み込み演算を活用する多階層神経網として、ディープラーニング・ベースの映像及び音声認識分野に優れる性能を示す。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明の目的は、畳み込み神経網の処理技術を提供することにある。
【課題を解決するための手段】
【０００４】
実施形態に係る畳み込み神経網処理方法は、畳み込みレイヤのカーネルの特性及び前記畳み込みレイヤの入力の特性のうち少なくとも１つに基づいて、前記カーネルを再使用する第１演算モード及び前記入力を再使用する第２演算モードのいずれか１つの演算モードを選択するステップと、前記選択された演算モードに応じて畳み込み演算を行うステップとを含む。
【０００５】
一実施形態によると、畳み込み神経網は、前記畳み込みレイヤを含み、前記畳み込みレイヤのカーネルの特性及び前記畳み込みレイヤの入力の特性に基づいて、前記畳み込みレイヤごとに前記第１演算モード及び前記第２演算モードのいずれか１つを適応的に選択するステップをさらに含み得る。
【０００６】
一実施形態によると、前記カーネルの特性は、前記カーネルに含まれたカーネル要素のうち０が占めている比率及び前記カーネルの大きさのうち少なくとも１つを含み、前記入力の特性は、前記入力に含まれた入力要素のうち０が占めている比率及び前記入力の大きさのうち少なくとも１つを含み得る。
【０００７】
一実施形態によると、前記いずれか１つの演算モードを選択するステップは、
【０００８】
前記入力に含まれた入力要素のうち０が占めている比率を取得するステップと、前記取得された比率及び前記カーネルに含まれたカーネル要素のうち０が占めている比率のうち大きい値に対応する演算モードを選択するステップとを含み得る。
【０００９】
一実施形態によると、前記いずれか１つの演算モードを選択するステップは、前記入力の大きさ及び前記カーネルの大きさの比率に基づいて演算モードを選択するステップを含み得る。
【００１０】
一実施形態によると、前記カーネルの特性及び前記入力の特性は、畳み込み神経網内の前記畳み込みレイヤの深さに応じて決定され、前記いずれか１つの演算モードを選択するステップは、前記カーネルの特性及び前記入力の特性のうち少なくとも１つに基づいて、データロードの回数及び動作メモリの容量のうち少なくとも１つに関する制限条件を満足する演算モードを選択するステップを含み得る。
【００１１】
一実施形態によると、前記いずれか１つの演算モードを選択するステップは、前記第１演算モードの第１データロードの回数及び前記第２演算モードの第２データロードの回数のうち小さい値に対応する演算モードを選択するステップを含み得る。
【００１２】
一実施形態によると、前記演算モードを選択するステップは、前記第１データロードの回数を取得するステップを含み、前記第１データロードの回数は、前記カーネルの大きさから算出された前記カーネルのロードの回数と、前記カーネルに含まれたカーネル要素のうち０の個数と前記入力の大きさに基づいて算出された前記入力のロードの回数の合計によって算出され得る。
【００１３】
一実施形態によると、前記演算モードを選択するステップは、前記入力に含まれた入力要素のうち０の個数を取得するステップと、前記入力の大きさから算出された前記入力のロードの回数と、前記入力要素のうち０の個数と前記カーネルの大きさに基づいて算出された前記カーネルのロードの回数の合計により前記第２データロードの回数を算出するステップとを含み得る。
【００１４】
一実施形態によると、前記畳み込み演算を行うステップは、前記第１演算モードが選択される場合、前記入力に含まれた入力要素のうち、前記カーネルに含まれたカーネル要素に対応する入力要素を特定する第１情報、及び前記畳み込み演算の出力に含まれた出力要素のうち前記カーネル要素と前記特定された入力要素との間の演算結果がマッピングされる出力要素を特定する第２情報に基づいて畳み込み演算を行うステップを含み得る。
【００１５】
一実施形態によると、前記畳み込み演算を行うステップは、前記カーネル要素のいずれか１つのカーネル要素をロードするステップと、前記第１情報に基づいて、前記ロードされたカーネル要素に対応する入力要素をロードするステップと、前記第２情報に基づいて、前記ロードされたカーネル要素及び前記ロードされた入力要素の間の演算結果がマッピングされる出力要素を更新するステップとを含み得る。
【００１６】
一実施形態によると、前記第１情報は、前記カーネル要素の位置、前記カーネルの大きさ、及びストライド、前記入力の大きさ、及びパッドに基づいて決定され、前記第２情報は、前記カーネル要素の位置及び前記特定された入力要素の位置に基づいて決定され得る。
【００１７】
一実施形態によると、前記畳み込み演算を行うステップは、前記第１演算モードが選択される場合、前記カーネル要素のいずれか１つのカーネル要素をロードするステップと、前記ロードされたカーネル要素が０である場合、前記ロードされたカーネル要素に対応する入力要素のロード又は前記ロードされたカーネル要素に関する演算をスキップするステップとを含み得る。
【００１８】
一実施形態によると、前記畳み込み演算を行うステップは、前記第１演算モードが選択される場合、前記カーネルに含まれたカーネル要素に対応する臨時バッファを割り当てるステップと、前記カーネルに含まれたカーネル要素のいずれか１つのカーネル要素をロードするステップと、前記ロードされたカーネル要素及び前記ロードされたカーネル要素に対応する臨時バッファに基づいて畳み込み演算を行うステップとを含み得る。
【００１９】
一実施形態によると、前記畳み込み演算を行うステップは、前記カーネル要素のうち前記ロードされたカーネル要素と異なる他のカーネル要素をロードするステップと、前記他のカーネル要素が０と異なる場合、前記他のカーネル要素及び前記他のカーネル要素に対応する臨時バッファに格納された入力要素の間の演算結果に基づいて畳み込み演算を行うステップとをさらに含み得る。
【００２０】
一実施形態によると、前記畳み込み演算を行うステップは、前記第１演算モードが選択される場合、前記カーネルに含まれたカーネル要素のいずれか１つのカーネル要素をロードするステップと、前記ロードされたカーネル要素が０である場合、臨時バッファの割当をスキップするステップと、前記ロードされたカーネル要素が０と異なる場合、前記ロードされたカーネル要素の位置、前記カーネルの大きさ及びストライド、前記入力の大きさ及びパッドに基づいて臨時バッファを割り当てるステップと、前記ロードされたカーネル要素に対応する入力要素をロードし、前記割り当てられた臨時バッファに格納するステップと、前記ロードされたカーネル要素及び前記臨時バッファに格納された入力要素の間の演算結果に基づいて畳み込み演算を行うステップとを含み得る。
【００２１】
一実施形態によると、前記畳み込み演算を行うステップは、前記第２演算モードが選択される場合、前記カーネルに含まれたカーネル要素のうち、前記入力に含まれた入力要素に対応するカーネル要素を特定する第１情報、及び前記畳み込み演算の出力に含まれた出力要素のうち前記入力要素と前記特定されたカーネル要素との間の演算結果がマッピングされる出力要素を特定する第２情報に基づいて畳み込み演算を行うステップを含み得る。
【００２２】
一実施形態によると、前記畳み込み演算を行うステップは、前記入力要素のいずれか１つの入力要素をロードするステップと、前記第１情報に基づいて前記ロードされた入力要素に対応するカーネル要素をロードするステップと、前記第２情報に基づいて前記ロードされた入力要素及び前記ロードされたカーネル要素の間の演算結果がマッピングされる出力要素を更新するステップとを含み得る。
【００２３】
一実施形態によると、前記第１情報は、前記入力要素の位置、前記カーネルの大きさ、及びストライド、前記入力の大きさ、及びパッドに基づいて決定され、
【００２４】
前記第２情報は、前記入力要素の位置及び前記特定されたカーネル要素の位置に基づいて決定され得る。
【００２５】
一実施形態によると、前記畳み込み演算を行うステップは、前記第２演算モードが選択される場合、前記入力要素のいずれか１つの入力要素をロードするステップと、前記ロードされた入力要素が０である場合、前記ロードされた入力要素に対応するカーネル要素のロード又は前記ロードされた入力要素に関する演算をスキップするステップとを含み得る。
【００２６】
一実施形態に係る畳み込み神経網処理装置は、畳み込みレイヤのカーネルの特性及び前記畳み込みレイヤの入力の特性のうち少なくとも１つに基づいて、前記カーネルを再使用する第１演算モード及び前記入力を再使用する第２演算モードのいずれか１つの演算モードを選択し、前記選択された演算モードに応じて畳み込み演算を行うプロセッサを含む。
【００２７】
一実施形態に係る畳み込み神経網処理装置は、前記第１演算モードの第１データロードの回数を記録するメモリをさらに含み得る。
【発明の効果】
【００２８】
本発明によると、一実施形態に係るＣＮＮを用いた認識技術は制限されたリソースの端末環境で駆動可能であり、様々な環境で強靭な性能を提供する。例えば、一実施形態に係るＣＮＮの処理方式は、顔認識装置をスマートフォンのトラストゾーン（Ｔｒｕｓｔ−Ｚｏｎｅ）内で制限された時間内に反応するように実現される。ＣＮＮの処理方式は、シングル−コアで駆動されるなど、制限されたコンピューティングリソースのみを用いても実現できる。与えられたデータに行列積算演算を適用するＣＮＮにおいて、一実施形態に係るＣＮＮの処理方式は、データロードと演算回数を減らしてメモリ使用を節減し、ＣＮＮの高速処理を提供する。
【図面の簡単な説明】
【００２９】
【図１】一実施形態に係る畳み込み神経網処理方法を説明するためのフローチャートである。
【図２】一実施形態に係る畳み込み神経網の例示図である。
【００３０】
【図３】一実施形態に係る畳み込み演算を説明するための図である。
【図４】一実施形態に係る第１演算モードを説明するための図である。
【図５】一実施形態に係る第２演算モードを説明するための図である。
【図６】一実施形態に係る演算モード選択の動作を説明するための図である。
【図７Ａ】一実施形態に係る第１演算モードを説明するための図である。
【図７Ｂ】一実施形態に係る第１演算モードを説明するための図である。
【図７Ｃ】一実施形態に係る第１演算モードを説明するための図である。
【図８Ａ】一実施形態に係る第２演算モードを説明するための図である。
【図８Ｂ】一実施形態に係る第２演算モードを説明するための図である。
【図９】一実施形態に係る畳み込み神経網処理装置の構成の例示図である。
【発明を実施するための形態】
【００３１】
実施形態に対する特定の構造的又は機能的説明は、単に例示のための目的として開示されたものであり、様々な形態に変更されて実施され得る。したがって、実施形態は、特定の開示形態で限定されることなく、本明細書の範囲は技術的な思想に含まれる変更、均等物、又は代替物を含む。
【００３２】
第１又は第２などの用語を複数の構成要素を説明するために用いることができるが、このような用語は１つの構成要素を他の構成要素から区別する目的としてのみ解釈されなければならない。例えば、第１構成要素は第２構成要素と命名することができ、同様に第２構成要素は第１構成要素にも命名することができる。
【００３３】
いずれかの構成要素が他の構成要素に「連結されて」いると言及された場合、その次の構成要素に直接的に連結されてもよく、又は中間に他の構成要素が存在することもあり得ると理解されなければならない。
【００３４】
単数の表現は、文脈上、明白に異なる意味をもたない限り複数の表現を含む。本明細書において、「含む」又は「有する」等の用語は明細書上に記載した特徴、数字、ステップ、動作、構成要素、部品又はこれらを組み合わせたものが存在することを示すものであって、１つ又はそれ以上の他の特徴や数字、ステップ、動作、構成要素、部品、又はこれを組み合わせたものなどの存在又は付加の可能性を予め排除しないものとして理解しなければならない。
【００３５】
異なるように定義さがれない限り、技術的であるか又は科学的な用語を含むここで用いる全ての用語は、本実施形態が属する技術分野で通常の知識を有する者によって一般的に理解されるものと同じ意味を有する。一般的に用いられる予め定義された用語は、関連技術の文脈上で有する意味と一致する意味を有するものと解釈すべきであって、本明細書で明白に定義しない限り、理想的又は過度に形式的な意味として解釈されることはない。
【００３６】
以下、実施形態を添付する図面を参照しながら詳細に説明する。各図面に提示された同一の参照符号は同一の部材を示す。
【００３７】
図１は、一実施形態に係る畳み込み神経網処理方法を説明するためのフローチャートである。
【００３８】
図１を参照すると、畳み込み神経網処理装置は、畳み込みレイヤのカーネルの特性及び畳み込みレイヤの入力の特性のうち少なくとも１つに基づいて、カーネルを再使用する第１演算モード、及び入力を再使用する第２演算モードのいずれか１つの演算モードを選択する（Ｓ１０１）。機械学習（ｍａｃｈｉｎｅ  ｌｅａｒｎｉｎｇ）において、神経網（Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）の一種である畳み込み神経網（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ；ＣＮＮ）は、畳み込み演算を行うように設計された畳み込みレイヤを含む。ＣＮＮを構成している畳み込みレイヤは、カーネルを用いて入力に関する畳み込み演算を行う。
【００３９】
畳み込み神経網処理装置は畳み込み神経網を処理する装置として、ソフトウェアモジュール、ハードウェアモジュール、又はその組合せで実現する。例えば、畳み込み神経網処理装置は、畳み込み神経網に関連する動作、演算、及び命令等を生成又は処理する。
【００４０】
畳み込み神経網処理装置は、畳み込みレイヤごとに第１演算モード及び第２演算モードのいずれか１つを適応的に選択できるが、ここで、第１演算モードは当該の畳み込みレイヤのカーネルを再使用する方式で演算を行うモードであり、第２演算モードは当該の畳み込みレイヤの入力を再使用する方式で演算を行うモードである。第１演算モードに関する実施形態については、図３、図４、図７Ａ、図７Ｂ、及び図７Ｃを参照して説明し、第２演算モードに関する実施形態については、図３、図５、図８Ａ及び図８Ｂを参照して詳細に説明する。
【００４１】
カーネル又は入力を再使用するとは、予めロードされたカーネル又は入力を繰り返し使用して畳み込みレイヤで畳み込み演算が実行されることを指す。畳み込み神経網処理装置は、予め構築されたデータベースからカーネル又は入力をロードし、データベースは、畳み込み神経網処理装置に含まれたメモリで具現するか、畳み込み神経網処理装置と有線、無線、又はネットワークなどに接続可能なサーバなどの外部装置に具現できる。
【００４２】
図２は、一実施形態に係る畳み込み神経網の例示図である。図２を参照すると、畳み込み神経網２００は、複数の畳み込みレイヤ２０１、２０２及び２０３を含む。畳み込み神経網処理装置は、畳み込みレイヤのカーネルの特性及び入力の特性に基づいて、畳み込みレイヤごとに演算モードを選択できるため、各畳み込みレイヤに適用される演算モードは、当該の畳み込みレイヤの入力とカーネルによって変わり得る。
【００４３】
ここで、畳み込みレイヤの入力は、当該の畳み込みレイヤに入力として採用されるデータとして、最初入力データ又は以前のレイヤによって生成された出力である特徴マップ（ｆｅａｔｕｒｅ  ｍａｐ）を含む。例えば、図２に示された畳み込みレイヤ（１）２０１の入力はＣＮＮ２００の最初入力２０４であり、畳み込みレイヤ（２）２０２の入力はサブ−サンプリングレイヤの出力２０６である。ここで、畳み込みレイヤ（２）２０２の入力２０６は、畳み込みレイヤ（１）２０１の出力２０５に基づいてサブ−サンプリングレイヤによって生成されたものである。畳み込みレイヤ２０３の入力は、Ｗ×Ｈ×Ｃの大きさである特徴マップ２０８である。畳み込み神経網処理装置は、畳み込みレイヤ２０３のカーネルを用いて特徴マップ２０８に畳み込み演算を行う。畳み込みレイヤ２０３の演算結果、Ｗ×Ｈ×Ｄの大きさである特徴マップ２０９が生成される。
【００４４】
畳み込みレイヤのカーネルは、当該の畳み込みレイヤで畳み込み演算を行うために採用されるカーネルとして、例えば、３次元の複数のフィルタに構成される。例えば、畳み込みレイヤ２０３は、Ｗ×Ｈ×Ｃの大きさである特徴マップ２０８に畳み込み演算を適用するためのカーネルであって、Ｄ個のフィルタを含むカーネルを採用する。
【００４５】
畳み込み神経網２００は、複数の畳み込みレイヤ２０１、２０２及び２０３を含み、各畳み込みレイヤ２０１、２０２、及び２０３の入力２０４、２０６及び２０８の特性と、カーネルの特性（例えば、ｆｅａｔｕｒｅ  ｍａｐの大きさ及びフィルタの個数、大きさ）はそれぞれ異なってもよい。例えば、畳み込みレイヤ２０１、２０２、及び２０３のうち、畳み込みレイヤ２０１の深さが最も小さく、畳み込みレイヤ２０３の深さが最も大きい場合、畳み込みレイヤの入力の特性及びカーネルの特性は、畳み込み神経網２００内の当該の畳み込みレイヤの深さに応じて決定され得る。
【００４６】
畳み込み神経網処理装置は、畳み込みレイヤ２０１、２０２、及び２０３のカーネル、及び入力２０４、２０６、及び２０８によって畳み込みレイヤ２０１、２０２、及び２０３ごとに演算モードを適応的に選択し、これにより畳み込み演算に必要なデータのロードの回数、演算（例えば、ＭＡＣ（Ｍｕｌｔｉｐｌｙ‐ａｃｃｕｍｕｌａｔｅ）ｏｐｅｒａｔｉｏｎ）回数を減らしてメモリ使用を節減し、ＣＮＮの高速処理を提供することができる。
【００４７】
再び図１を参照すると、畳み込み神経網処理装置は、選択された演算モードに応じて畳み込み演算を行う（Ｓ１０２）。畳み込み神経網処理装置は、第１演算モード及び第２演算モードのうち選択された演算モードに応じて当該の畳み込みレイヤの畳み込み演算を行う。
【００４８】
以下、図２に示す畳み込みレイヤ２０３の入力２０８及び出力２０９を例示に挙げて、畳み込み演算が実行される実施形態について図３〜図５を参照して説明する。
【００４９】
図３は、一実施形態に係る畳み込み演算を説明するための図である。
【００５０】
図３を参照すると、畳み込み神経網処理装置は、カーネル３０１の特性及び入力２０８の特性に基づいて、畳み込みレイヤ２０３に対応する演算モードを選択する。ここで、カーネル３０１は、畳み込みレイヤ２０３で畳み込み演算を行うために採用されるカーネルであり、Ｄ個のフィルタを含み、各フィルタの大きさはＫ×Ｋ×Ｃである。この場合、カーネル３０１の大きさは、Ｋ×Ｋ×Ｃ×Ｄである。
【００５１】
入力２０８の大きさはＷ×Ｈ×Ｃであるため、入力２０８は、それぞれの大きさがＷ×ＨであるデータをＣ個含んでもよい。ここで、入力２０８は、パッディング（ｐａｄｄｉｎｇ）が適用された特徴マップであるが、パッディングとは、入力の一部領域（例えば、一般的に端を示すが設計意図に応じて変わる）を特定値に満たす方式を意味する。具体的に、パッドの大きさを１にし、入力にパッディングを適用することは、特徴マップの各フレームの端に特定値（例えば、０）を満たす動作を意味し、ゼロパッディング（ｚｅｒｏ  ｐａｄｄｉｎｇ）はその特定値を０に設定することを意味する。例えば、Ｘ×Ｙ×Ｚの大きさである入力にパッドの大きさが１であるゼロパッディングが適用されれば、パッディングが適用された入力は端が０であり、大きさが（Ｘ＋１）×（Ｙ＋１）×Ｚであるデータとなる。
【００５２】
演算モードが選択されれば、畳み込み神経網処理装置は、Ｄ個のフィルタを用いて入力２０８をフィルタリングして各フィルタに対応するフィルタリング結果から出力２０９を生成する。図３を参照すると、Ｋ×Ｋ×Ｃの大きさである各フィルタによって入力２０８がフィルタリングされるため、Ｗ×Ｈの大きさであるフィルタリング結果の個数はＤ個であり、Ｄ個のフィルタリング結果からＷ×Ｈ×Ｄの大きさである出力２０９が生成される。
【００５３】
ここで、出力２０９は、Ｄ個のチャネルによって生成されたＤ個のフィルタリング結果を含む。具体的に、Ｋ×Ｋ×Ｃ大きさのＤ番目のフィルタ３０２によってＷ×Ｈ×Ｃ大きさの入力２０８がフィルタリングされ、Ｗ×Ｈ大きさのフィルタリング結果３０３が生成される。より具体的に、Ｄ番目のフィルタ３０２はＣ個の加重値マップを含み、各加重値マップの大きさはＫ×Ｋである。畳み込み神経網処理装置は、入力２０８に含まれたＷ×Ｈの大きさである各フレーム上でＫ×Ｋの大きさである各加重値マップを特定ストライドでスライドし、Ｄ番目のフィルタ３０２及び入力２０８の間のフィルタリング結果３０３を生成する。ここで、ストライドとは、畳み込み演算時に加重値マップをスライドする間隔を意味する。
【００５４】
一般的に、Ｋ×Ｋ×Ｃ×Ｄの大きさであるカーネル３０１と、Ｗ×Ｈ×Ｄの大きさである入力２０８を用いてストライドが１である畳み込み演算を行う場合、カーネル３０１の各フィルタはＷ×Ｈ回だけスライドされるため、カーネル３０１はＷ×Ｈ回だけ重複してロードされる必要がある。したがって、カーネル３０１のデータは、合わせてＫ×Ｋ×Ｃ×Ｄ×Ｗ×Ｈ回ロードされる（Ｋ×Ｋ×Ｃ×Ｄの大きさであるカーネル３０１のデータがＷ×Ｈ回重複してロードされるためである）。また、入力２０８のデータは、加重値マップの大きさであるＫ×Ｋ回重複してロードされ、フィルタの個数（出力２０９のチャネルの数）のＤ回重複してロードされる必要がある。したがって、入力２０８のデータは、合わせてＫ×Ｋ×Ｃ×Ｄ×Ｗ×Ｈ回ロードされる（Ｗ×Ｈ×Ｃの大きさである入力２０８のデータがＫ×Ｋ×Ｄ回重複してロードされるためである）。ここで、畳み込み演算を行うためのデータロードの回数は、２×Ｋ×Ｋ×Ｃ×Ｄ×Ｗ×Ｈ（カーネル３０１のロードの回数と入力２０８のロードの回数の合計）となる。
【００５５】
一実施形態によれば、畳み込み神経網処理装置は、第１演算モードに応じて畳み込み演算時カーネル３０１を再使用してデータロードの回数と演算回数を減らすことができるが、第１演算モードに関する実施形態について図４を参照して説明する。他の実施形態によれば、畳み込み神経網処理装置は、第２演算モードに応じて畳み込み演算時に入力２０８を再使用してデータロードの回数と演算回数を減らし得るが、第２演算モードに関する実施形態について図５を参照して説明する。
【００５６】
図４は、一実施形態に係る第１演算モードを説明するための図である。第１演算モードはカーネル再使用モードであり得る。
【００５７】
一実施形態によれば、畳み込み神経網処理装置は、カーネル３０１に含まれたカーネル要素をロードし、ロードされたカーネル要素を再使用して畳み込み演算を行う。図４を参照すると、畳み込み神経網処理装置は、カーネル３０１に含まれたカーネル要素４０１をロードする。畳み込み神経網処理装置は、入力２０８に含まれた入力要素のうち、ロードされたカーネル要素４０１に対応する入力要素４０２を特定する第１情報に基づいて入力要素４０２をロードする。畳み込み神経網処理装置は、ロードされたカーネル要素４０１とロードされた入力要素４０２との間の演算を行う。
【００５８】
畳み込み神経網処理装置は、出力２０９に含まれた出力要素のうちロードされたカーネル要素４０１と入力要素４０２との間の演算結果がマッピングされる出力要素４０３を特定する第２情報に基づいて出力要素４０３を更新する。畳み込み神経網処理装置は、ロードされたカーネル要素４０１とロードされた入力要素４０２との間の演算結果を用いて出力要素４０３を更新できる。
【００５９】
一実施形態に係る第１演算モードにおいて、第１情報は、入力２０８に含まれた入力要素のうちカーネル３０１に含まれたカーネル要素に対応する入力要素を特定する。第１情報は、カーネル３０１に含まれたカーネル要素の位置、カーネル３０１の大きさ（Ｋ×Ｋ×Ｃ×Ｄ）、及びストライド、入力２０８の大きさ（Ｗ×Ｈ×Ｃ）及びパッドに基づいて決定される。例えば、パッディングが適用された入力２０８の大きさがＷ×Ｈ×Ｃであり、ストライドが１であると仮定しよう。この場合、第１情報は、カーネル要素４０１の位置に基づいて入力要素のうちカーネル要素４０１に対応する入力要素４０２を特定する。
【００６０】
一実施形態に係る第１演算モードにおいて、第２情報は、出力２０９に含まれた出力要素のうち、カーネル要素と特定された入力要素との間の演算結果がマッピングされる出力要素を特定する。第２情報は、カーネル３０１に含まれたカーネル要素の位置及び第１情報によって特定された入力要素の位置に基づいて決定される。例えば、第２情報は、カーネル要素４０１の位置と入力要素４０２との間の演算結果がマッピングされる出力要素４０３を特定する。カーネル要素４０１に関する演算結果によって更新された出力要素４０３は、カーネル要素４０１と他のカーネル要素によって更新され得るため、図４に示された出力要素４０３は最終出力ではないという旨として点線のように示した。
【００６１】
畳み込み神経網処理装置は、ロードされたカーネル要素４０１に関する演算を行ったため次のカーネル要素をロードする。畳み込み神経網処理装置は、第１情報に基づいてロードされた後、カーネル要素に対応する入力要素をロードする。畳み込み神経網処理装置は、第２情報に基づいてロードされた後カーネル要素とロードされた入力要素との間の演算結果がマッピングされる出力要素を更新する。第１演算モードによれば、畳み込み神経網処理装置は、カーネル３０１に含まれたカーネル要素をそれぞれ一回ずつロードする。畳み込み演算の実行時に、畳み込み神経網処理装置は、ロードされたカーネル要素に対応する入力要素の数だけロードされたカーネル要素を再使用する。例えば、第１演算モードで畳み込み神経網処理装置は、カーネル３０１のカーネル要素を１回ずつだけロードすればよいため、カーネル３０１のロードの回数はＫ×Ｋ×Ｃ×Ｄ（カーネル３０１の大きさ）となる。第１演算モードで畳み込み神経網処理装置は、入力２０８の入力要素をＫ×Ｋ×Ｄ回だけ重複してロードするため、ストライドが１である場合、入力２０８のロードの回数はＫ×Ｋ×Ｃ×Ｄ×Ｗ×Ｈとなる。この場合、第１演算モードのデータロードの回数（以下、第１データロードの回数とする）は、Ｋ×Ｋ×Ｃ×Ｄ（１＋Ｗ×Ｈ）となるため、畳み込み神経網処理装置は、第１演算モードを用いてデータロードの回数を減らし得る。
【００６２】
一実施形態に係る第１演算モードで、畳み込み神経網処理装置は、ロードされたカーネル要素４０１が０であるか否かを判断する。畳み込み神経網処理装置は、ロードされたカーネル要素４０１が０である場合、カーネル要素４０１に対応する入力要素４０２のロード又はカーネル要素４０１に関する演算をスキップ（ｓｋｉｐ）する。ロードされたデータが０である場合、当該データに関する追加ロード又は演算をスキップする方式をゼロスキッピング（ｚｅｒｏ  ｓｋｉｐｐｉｎｇ）という。畳み込み神経網処理装置は、ゼロスキッピングを用いて第１演算モードのデータロードの回数を減らすことができる。例えば、カーネルに含まれたカーネル要素のうち、０であるカーネル要素の個数をＺｋとすれば、畳み込み神経網処理装置は、０であるカーネル要素に対応する入力要素のロードをスキップすることができるため、ストライドが１である場合、入力２０８のロードの回数はＷ×Ｈ×（Ｋ×Ｋ×Ｃ×Ｄ−Ｚｋ）である。この場合、第１データロードの回数は、Ｋ×Ｋ×Ｃ×Ｄ＋Ｗ×Ｈ×（Ｋ×Ｋ×Ｃ×Ｄ−Ｚｋ）になり、畳み込み神経網処理装置は、ゼロスキッピングを用いてＺｋ個のカーネル要素に関する演算をスキップすることができる。
【００６３】
図５は、一実施形態に係る第２演算モードを説明するための図である。第２演算モードは入力再使用モードであり得る。
【００６４】
一実施形態によれば、畳み込み神経網処理装置は、入力２０８に含まれた入力要素をロードし、ロードされた入力要素を再使用して畳み込み演算を行う。図５を参照すると、畳み込み神経網処理装置は、入力２０８に含まれた入力要素５０１をロードする。畳み込み神経網処理装置は、カーネル３０１に含まれたカーネル要素のうち、ロードされた入力要素５０１に対応するカーネル要素５０２を特定する第１情報に基づいてカーネル要素５０２をロードする。畳み込み神経網処理装置は、ロードされた入力要素５０１とロードされたカーネル要素５０２との間の演算を行う。
【００６５】
畳み込み神経網処理装置は、出力５０３に含まれた出力要素のうち、ロードされた入力要素５０１とカーネル要素５０２との間の演算結果がマッピングされる出力要素５０３を特定する第２情報に基づいて出力要素５０３を更新する。畳み込み神経網処理装置は、ロードされた入力要素５０１とロードされたカーネル要素５０２との間の演算結果を用いて出力要素５０３を更新する。
【００６６】
一実施形態に係る第２演算モードにおいて、第１情報は、カーネル３０１に含まれたカーネル要素のうち、入力２０８に含まれた入力要素に対応するカーネル要素を特定する。第１情報は、入力２０８に含まれた入力要素の位置、カーネル３０１の大きさ（Ｋ×Ｋ×Ｃ×Ｄ）及びストライド、入力２０８の大きさ（Ｗ×Ｈ×Ｃ）及びパッドに基づいて決定される。例えば、パッディングが適用された入力２０８の大きさがＷ×Ｈ×Ｃであり、ストライドを１に仮定しよう。この場合、第１情報は、入力要素５０１の位置に基づいてカーネル要素のうち入力要素５０１に対応するカーネル要素５０２を特定する。
【００６７】
一実施形態に係る第２演算モードにおいて、第２情報は、出力２０９に含まれた出力要素のうち、入力要素と特定されたカーネル要素との間の演算結果がマッピングされる出力要素を特定する。第２情報は、入力２０８に含まれた入力要素の位置及び第１情報によって特定されたカーネル要素の位置に基づいて決定される。例えば、第２情報は、入力要素５０１の位置とカーネル要素５０２との間の演算結果がマッピングされる出力要素５０３を特定する。入力要素５０１に関する演算結果によって更新された出力要素５０３は、入力要素５０１と他の入力要素によって更新され得るため、図５に示された出力要素５０３は、最終出力ではないという旨として点線のように示した。
【００６８】
畳み込み神経網処理装置は、ロードされた入力要素５０１に関する演算を行ったため、次のような入力要素をロードする。畳み込み神経網処理装置は、第１情報に基づいてロードされた後、入力要素に対応するカーネル要素をロードする。畳み込み神経網処理装置は、第２情報に基づいてロードされた後、入力要素とロードされたカーネル要素との間の演算結果がマッピングされる出力要素を更新する。第２演算モードによれば、畳み込み神経網処理装置は、入力２０８に含まれた入力要素をそれぞれ一回ずつロードする。畳み込み演算の実行時に、畳み込み神経網処理装置は、ロードされた入力要素に対応するカーネル要素の数だけロードされた入力要素を再使用する。例えば、第２演算モードで畳み込み神経網処理装置は、入力２０８の入力要素を一回ずつだけロードされればよいため、入力２０８のロードの回数はＷ×Ｈ×Ｃ（入力２０８の大きさ）となる。第２演算モードで畳み込み神経網処理装置は、カーネル３０１のカーネル要素をＷ×Ｈ回だけ重複してロードするため、ストライドが１である場合、カーネル３０１のロードの回数はＫ×Ｋ×Ｃ×Ｄ×Ｗ×Ｈとなる。この場合、第２演算モードのデータロードの回数（以下、第２データロードの回数という）はＷ×Ｈ×Ｃ（１＋Ｋ×Ｋ×Ｄ）がなるため、畳み込み神経網処理装置は、第２演算モードを用いてデータロードの回数を減らすことができる。
【００６９】
一実施形態に係る第２演算モードで畳み込み神経網処理装置は、ロードされた入力要素５０１が０であるか否かを判断する。畳み込み神経網処理装置は、ロードされた入力要素５０１が０である場合、入力要素５０１に対応するカーネル要素５０２のロード又は入力要素５０１に関する演算をスキップする。畳み込み神経網処理装置は、ゼロスキッピングを用いて第２演算モードのデータロードの回数を減らし得る。例えば、入力に含まれた入力要素のうち、０である入力要素の個数をＺｉとすれば、畳み込み神経網処理装置は、０である入力要素に対応するカーネル要素のロードをスキップし得るため、ストライドが１である場合、カーネル３０１のロードの回数はＫ×Ｋ×Ｄ×（Ｗ×Ｈ×Ｃ−Ｚｉ）であり得る。この場合、第２データロードの回数は、Ｗ×Ｈ×Ｃ＋Ｋ×Ｋ×Ｄ×（Ｗ×Ｈ×Ｃ−Ｚｉ）になり、畳み込み神経網処理装置は、ゼロスキッピングによってＺｉ個のカーネル要素に関する演算をスキップすることができる。
【００７０】
一実施形態によれば、入力要素のうち０である入力要素は、畳み込み神経網の活性化関数として採用されたＲｅＬＵ（Ｒｅｃｔｉｆｉｅｄ  Ｌｉｎｅａｒ  Ｕｎｉｔ）関数によって生成され得る。畳み込み神経網の中間の畳み込みレイヤにＲｅＬＵが採用されれば、その次の畳み込みレイヤの入力は、０である入力要素を含んでもよい。より具体的に、ＲｅＬＵ関数はＦ（ｘ）＝ｍａｘ（０、ｘ）に表現される。ｘは畳み込みの結果であり、Ｆ（ｘ）はＲｅＬＵ関数による出力値である。負数である畳み込み結果はＲｅＬＵ関数によって０として出力される。学習完了した畳み込みのカーネルは、正規分布にしたがって入力映像について畳み込み結果として、確率的に５０％は負数、５０％は正数である。
【００７１】
一実施形態によれば、入力要素のうち０である入力要素は、畳み込み神経網のプロセスのうち用いられるアップ−スケーリング（ｕｐ−ｓｃａｌｉｎｇ）によって生成される。アップ−スケーリングは、入力の解像度を増加させる方式として、例えば、既存の入力に含まれた各ピクセル周辺に新しいピクセルを生成する方式として、アップ−スケーリングが実現される。この場合、新しく生成されたピクセルは０に設定されてもよい。一例として、イメージセグメンテーションで、プーリング（ｐｏｏｌｉｎｇ）又はサンプリング（ｓａｍｐｌｉｎｇ）に解像度が減少されてから、アンプーリング（ｕｎｐｏｏｌｉｎｇ）又はアンサンプリング（ｕｎｓａｍｐｌｉｎｇ）に本来の解像度が復元される。ここで、解像度の復元過程で、新しく生成されたピクセルは０に設定される。アンプーリング又はアンサンプリングの結果、７５％以上のピクセル値が０であり得る。
【００７２】
図６は、一実施形態に係る演算モード選択の動作を説明するための図である。
【００７３】
図６を参照すると、畳み込み神経網処理装置は畳み込み演算モード選択モジュールを含み、畳み込み演算モード選択モジュールは、畳み込みレイヤごとに演算モードを選択するモジュールである。畳み込み神経網処理装置は、特定の畳み込みレイヤの演算モードを選択するために当該の畳み込みレイヤのカーネルの特性と入力の特性を考慮する。ここで、カーネルの特性は、カーネルに含まれたカーネル要素のうち０が占めている比率及びカーネルの大きさのうち少なくとも１つを含み、入力の特性は、入力に含まれた入力要素のうち０が占めている比率及び入力の大きさのうち少なくとも１つを含んでもよい。畳み込み神経網処理装置は、カーネルの特性及び入力の特性のうち少なくとも１つに基づいて、データロードの回数及び動作メモリの容量のうち少なくとも１つに関する制限条件を満足する演算モードを選択する。
【００７４】
一実施形態によれば、畳み込み神経網処理装置は、畳み込みレイヤの入力から入力に含まれた入力要素のうち、０が占めている比率Ｉｚを取得する。畳み込み神経網処理装置は、畳み込みレイヤのカーネルに含まれたカーネル要素のうち、０が占めている比率Ｋｚを取得する。例えば、Ｉｚは、当該の畳み込みレイヤの入力により変わるため、畳み込み神経網処理装置は、入力からＩｚを動的に抽出し、Ｋｚは予め設計された畳み込み神経網によって決定された値であるため、データベースから取得し得る。畳み込み神経網処理装置は、取得されたＩｚ及びＫｚのうち大きい値に対応する演算モードを選択する。畳み込み神経網処理装置は、Ｉｚ及びＫｚの大小関係により、図６に示すように、畳み込みレイヤの演算モードを選択することができる。
【００７５】
一実施形態によれば、畳み込み神経網処理装置は、入力の大きさ及びカーネルの大きさの比率に基づいて演算モードを選択する。例えば、畳み込み神経網処理装置は、入力に含まれたフレームの大きさとカーネルに含まれた加重値マップの大きさの比率を取得し、取得された比率と予め定義された比率とを比較して演算モードを選択する。フレームの大きさと加重値マップの大きさは、畳み込み神経網が設計されることにより決定され得るため、畳み込み神経網処理装置は、データベースから当該の比率、当該の比率と予め定義された比率の比較結果、及び選択された演算モードのうち少なくとも１つを取得する。
【００７６】
一実施形態によれば、畳み込み神経網処理装置は、第１データロードの回数及び第２データロードの回数のうち小さい値に対応する演算モードを選択する。データロードの回数が相対的に小さい演算モードを採用するためである。例えば、第１データロードの回数は、カーネルの大きさから算出されたカーネルのロードの回数とカーネル要素のうち、０の個数と入力の大きさに基づいて算出された入力のロードの回数の合計によって算出される。ここで、第１データロードの回数は、入力要素のうち０の個数を考慮することなく算出された値であるため、畳み込み神経網が設計されることにより決定され、畳み込み神経網処理装置は、データベースから第１データロードの回数を取得し得る。畳み込み神経網処理装置は、入力から入力に含まれた入力要素のうち０の個数を動的に取得する。畳み込み神経網処理装置は、入力の大きさから算出された入力のロードの回数及び入力要素のうち０の個数とカーネルの大きさに基づいて算出されたカーネルのロードの回数の合計により第２データロードの回数を算出する。入力の０の個数は、予め格納された値ではないため、畳み込み神経網処理装置は、畳み込みレイヤごとに第２データロードの回数を算出し得る。畳み込み神経網処理装置は、データベースから取得された第１データロードの回数と動的に算出された第２データロードの回数とを比較し、当該の畳み込みレイヤに適切な演算モードを選択することができる。
【００７７】
図７Ａ〜図７Ｃは、一実施形態に係る第１演算モードを説明するための図である。
【００７８】
一実施形態によれば、畳み込み神経網処理装置は、第１演算モードによる畳み込み演算を行うために臨時バッファを割り当て、割り当てられた臨時バッファに入力要素を格納する。畳み込み神経網処理装置は、臨時バッファに格納された入力要素を用いてカーネル要素別に畳み込み演算を行うが、図７Ａ〜図７Ｃに示された例示を参照して臨時バッファ割当に基づいた第１演算モードの実施形態を説明する。
【００７９】
図７Ａを参照すると、第１演算モードによる畳み込み神経網処理装置は、２×２×Ｃの大きさであるフィルタ７０１と、３×３×Ｃの大きさである入力７０２との間の畳み込み演算を行う。フィルタ７０１は２×２の大きさである加重値マップを含み、加重値マップの個数はＣである。入力７０２は３×３の大きさであるフレームを含み、フレームの個数はＣである。パッド入力７０３は、入力７０２にパッドが１であるパッディングが適用された入力として、その大きさは５×５×Ｃである。フィルタ７０１のストライドは、１である場合を仮定して実施形態を説明する。
【００８０】
畳み込み神経網処理装置は、フィルタ７０１に含まれたカーネル要素に対応する臨時バッファ７０４を割り当てる。フィルタ７０１の加重値マップの大きさは２×２であり、ストライドが１であるため、パッド入力７０３のうちフィルタ７０１の各カーネル要素（例えば、加重値）に対応する入力要素は４×４の大きさに限定される。畳み込み神経網処理装置は、フィルタ７０１の各カーネル要素に対応する入力要素を格納するための臨時バッファ７０４を割り当てる。例えば、畳み込み神経網処理装置は、カーネル要素ｗ１１に対応する入力要素７０５のための臨時バッファＴ１の一部（最も前方に示された領域）を割り当て、カーネル要素ｗ２ｃに対応する入力要素７０６のための臨時バッファＴ２の一部（最も後方に示された領域）を割り当て、入力要素７０５及び７０６をロードし、割り当てられた臨時バッファに格納する。フィルタ７０１の加重値マップの大きさが２×２であるため、畳み込み神経網処理装置は臨時バッファＴ１ないしＴ４を割り当てる。ここで、臨時バッファＴ１はカーネル要素ｗ１１、ｗ１２、...、ｗ１ｃに対応し、臨時バッファＴ２はカーネル要素ｗ２１、ｗ２２、...、ｗ２ｃに対応し、臨時バッファＴ３はカーネル要素ｗ３１、ｗ３２、...、ｗ３ｃに対応し、臨時バッファＴ４はカーネル要素ｗ４１、ｗ４２、...、ｗ４ｃに対応する。
【００８１】
加重値マップの大きさが２×２であり、パッド入力７０３の各フレームの大きさが５×５であり、ストライドが１であるため、畳み込み神経網処理装置は、各カーネル要素と演算が発生する入力要素の大きさを４×４として決定し、４×４×Ｃの大きさである臨時バッファＴ１ないしＴ４を割り当てる。その結果、畳み込み神経網処理装置は、４×４×Ｃ×４の大きさである臨時バッファ７０４を割り当てることができる。
【００８２】
図７Ｂを参照すると、畳み込み神経網処理装置はカーネル要素をロードし、ロードされたカーネル要素と臨時バッファに基づいて畳み込み演算を行う。畳み込み神経網処理装置は、ロードされたカーネル要素と臨時バッファに格納された入力要素との間の演算結果に基づいて出力を生成する。畳み込み神経網処理装置は、カーネル要素ｗ１１、ｗ１２、...、ｗ１ｃと臨時バッファＴ１に格納された入力要素との間の２Ｄマトリックススカラーの積
【００８３】
【数１】
2018077842.tif 000003
（２Ｄｍａｔｒｉｘ  ｓｃａｌａｒ  ｍｕｌｔｉｐｌｉｃａｔｉｏｎ）、カーネル要素ｗ２１、ｗ２２、...、ｗ２ｃと臨時バッファＴ２に格納された入力要素の間の２Ｄマトリックススカラーの積
【００８４】
【数２】
2018077842.tif 000004
、カーネル要素ｗ３１、ｗ３２、...、ｗ３ｃと臨時バッファＴ３に格納された入力要素の間の２Ｄマトリックススカラーの積
【００８５】
【数３】
2018077842.tif 000005
、カーネル要素ｗ４１、ｗ４２、...、ｗ４ｃと臨時バッファＴ４に格納された入力要素の間の２Ｄマトリックススカラーの積
【００８６】
【数４】
2018077842.tif 000006
の演算を行い、演算結果の間の２Ｄマトリックスワイズの和
【００８７】
【数５】
2018077842.tif 000007
（２Ｄｍａｔｒｉｘ  ｗｉｓｅ  ａｄｄｉｔｉｏｎ）の演算により出力を生成する。例えば、畳み込み神経網処理装置は、フィルタ７０１に含まれたカーネル要素のうちカーネル要素ｗ１１をロードし、カーネル要素ｗ１１に対応する入力要素７１２をロードして臨時バッファＴ１に格納し、臨時バッファＴ１に格納された入力要素７１３とカーネル要素ｗ１１の間の演算を行う。この場合、畳み込み神経網処理装置は、カーネル要素を一回ずつだけロードし、臨時バッファはＴ１ないしＴ４に分類されるため入力要素を４回重複してロードする。
【００８８】
図７Ｃを参照すると、畳み込み神経網処理装置は、大きさがＷ×Ｈ×Ｃである入力７２２にパッディングを適用したパッド入力７２３とＫ×Ｋ×Ｃ×Ｄの大きさであるカーネル７２１に基づいて臨時バッファ７２４を割り当てる。畳み込み神経網処理装置は、パッド入力７２３と臨時バッファ７２４に基づいて出力７２５を生成できるが、Ｄ個のフィルタごとに図７Ｂを参照して説明した演算が適用され得る。
【００８９】
ロードされたカーネル要素との演算が終了すれば、畳み込み神経網処理装置は、他のカーネル要素をロードする。他のカーネル要素が０と異なる場合、畳み込み神経網処理装置は畳み込み演算を行う。ここで、以前のカーネル要素に対応する入力要素と異なるカーネル要素に対応する入力要素とが互いに同一である場合、畳み込み神経網処理装置は、臨時バッファにすでに格納されている入力要素を用いて畳み込み演算を行う。
【００９０】
一実施形態によれば、畳み込み神経網処理装置は、ロードされたカーネル要素が０であるか否かを判断し、ロードされたカーネル要素が０である場合、０であるカーネル要素に関する臨時バッファの割当をスキップしたり、当該カーネル要素に関する演算をスキップする。ロードされたカーネル要素が０と異なる場合、畳み込み神経網処理装置は、上述した実施形態により臨時バッファを割り当てる。臨時バッファの割当と関連して第１演算モードの動作を説明したが、上述した実施形態は第２演算モードにも適用され得る。第２演算モードで臨時バッファが割り当てられた場合、畳み込み神経網処理装置は、割り当てられた臨時バッファにカーネル要素を格納する。また、第１演算モード及び第２演算モードは別途の臨時バッファの割当てなしに実行され得る。
【００９１】
図８Ａ〜図８Ｂは、一実施形態に係る第２演算モードを説明するための図である。
【００９２】
図８Ａを参照すると、カーネル８０１の大きさが３×３であり、ストライドが１であり、入力８０２のパッドが１である場合、第１情報８０３はカーネル８０１に含まれたカーネル要素ｗ１、...、ｗ９のうち入力要素に対応するカーネル要素を特定する。例えば、第１情報８０３は、Ｌｅｆｔ  Ｔｏｐに位置する入力要素に対応するカーネル要素ｗ１、ｗ２、ｗ３、ｗ４を特定し、図８Ａに示すように第１情報８０３は各入力要素別ごとに対応カーネル要素を特定する。第１情報８０３は、カーネルの大きさ３×３及びストライド１、入力８０２の大きさ及びパッド１に基づいて入力要素の位置Ｌｅｆｔ  Ｔｏｐ、Ｆｉｒｓｔ  Ｒｏｗ、...、Ｒｉｇｈｔ  Ｂｏｔｔｏｍに対応するカーネル要素を特定する。畳み込み神経網処理装置は、入力８０２に含まれたいずれか１つの入力要素をロードし、第１情報に基づいてロードされた入力要素に対応するカーネル要素をロードする。
【００９３】
図８Ｂを参照すると、第２情報８０４は、出力８０５に含まれた出力要素のうち、ロードされた入力要素とカーネル要素との間の演算結果がマッピングされる出力要素を特定する。入力８０２の大きさがＷ×Ｈであり、１であるパッドでパッディングが適用されたパッド入力８１２上でカーネル８０１がスライド（ストライド＝１）する場合、畳み込み神経網処理装置は、入力要素Ａ８０６をロードし、第１情報８０３に基づいてカーネル要素８０７をロードする。畳み込み神経網処理装置は、ロードされた入力要素Ａ８０６とロードされたカーネル要素８０７との間の演算結果がマッピングされる出力要素（ＨＡ、ＷＡ）、（ＨＡ、ＷＡ＋１）、（ＨＡ＋１、ＷＡ）及び（ＨＡ＋１、ＷＡ＋１）を特定する情報８０８に基づいて出力要素を更新する。図８Ｂに示す出力要素のインデックスでＨＡ及びＷＡはそれぞれ入力要素Ａ８０６の行と列を示すインデックスである。同じ方式で、畳み込み神経網処理装置は、入力要素Ｂ８０９とカーネル要素８１０をロードし、ロードされた入力要素Ｂ８０９とロードされたカーネル要素８１０との間の演算結果がマッピングされる出力要素を特定する情報８１１に基づいて出力要素を更新する。第２演算モードによる畳み込み神経網処理装置は、入力要素をロードと再使用する方式に基づいてデータロードの回数及び演算回数を減らすことができ、例えば、ロードされた入力要素が０である場合、第１情報によるデータロードと第２情報による演算をスキップする。第１情報及び第２情報に基づいた第２演算モードの実施形態は、第１演算モードにも適用され得る。
【００９４】
図９は、一実施形態に係る畳み込み神経網処理装置の構成の例示図である。
【００９５】
図９を参照すると、畳み込み神経網処理装置９０１は、プロセッサ９０２及びメモリ９０３を含む。プロセッサ９０２は、図１ないし図８Ｂを参照して前述した少なくとも１つの装置を含んだり、図１ないし図８Ｂを参照して前述した少なくとも１つの方法を行う。メモリ９０３は、畳み込みレイヤの入力の特性、カーネルの特性、データロードの回数のうち少なくとも１つを格納したり、畳み込み神経網処理方法が具現されたプログラムを格納する。メモリ９０３は、揮発性メモリ又は不揮発性メモリであり得る。
【００９６】
プロセッサ９０２はプログラムを実行し、畳み込み神経網処理装置９０１を制御する。プロセッサ９０２によって実行されるプログラムのコードはメモリ９０３に格納される。畳み込み神経網処理装置９０１は、入出力装置（図示せず）を用いて外部装置（例えば、パーソナルコンピュータ又はネットワーク）に接続され、データを交換する。
【００９７】
一実施形態によれば、畳み込み神経網処理装置９０１は、ＣＮＮに関する演算を高速で処理するＣＮＮ加速器、ＮＰＵ（Ｎｅｕｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）又はＶＰＵ（Ｖｉｓｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に採用されて当該の専用プロセッサを制御する。畳み込み神経網処理装置９０１は、設計意図によって様々なハードウェアを採用したり、様々なハードウェアに採用され、示された構成要素の実施形態に限定されることはない。畳み込み神経網処理時に上述した実施形態を適用する場合、畳み込み神経網の処理で求められるデータロードの回数、演算回数（例えば、ＭＡＣの演算回数）を減らしてメモリを節減して処理速度を高めることができるため、上述した実施形態は制限されたリソースを使用する環境又は埋込み端末に適する。
【００９８】
以上述した実施形態は、ハードウェア構成要素、ソフトウェア構成要素、又はハードウェア構成要素及びソフトウェア構成要素の組合せで具現される。例えば、実施形態で説明した装置及び構成要素は、例えば、プロセッサ、コントローラ、ＡＬＵ（ａｒｉｔｈｍｅｔｉｃ  ｌｏｇｉｃ  ｕｎｉｔ）、デジタル信号プロセッサ（ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ）、マイクロコンピュータ、ＦＰＡ（ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ａｒｒａｙ）、ＰＬＵ（ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ｕｎｉｔ）、マイクロプロセッサー、又は命令（ｉｎｓｔｒｕｃｔｉｏｎ）を実行して応答する異なる装置のように、１つ以上の汎用コンピュータ又は特殊目的コンピュータを用いて具現される。処理装置は、オペレーティングシステム（ＯＳ）及びオペレーティングシステム上で実行される１つ以上のソフトウェアアプリケーションを実行する。また、処理装置は、ソフトウェアの実行に応答してデータをアクセス、格納、操作、処理、及び生成する。理解の便宜のために、処理装置は１つが使用されるものとして説明する場合もあるが、当該技術分野で通常の知識を有する者は、処理装置が複数の処理要素（ｐｒｏｃｅｓｓｉｎｇ  ｅｌｅｍｅｎｔ）及び／又は複数類型の処理要素を含むことが分かる。例えば、処理装置は、複数のプロセッサ又は１つのプロセッサ及び１つのコントローラを含む。また、並列プロセッサ（ｐａｒａｌｌｅｌ  ｐｒｏｃｅｓｓｏｒ）のような、他の処理構成も可能である。
【００９９】
ソフトウェアは、コンピュータプログラム、コード、命令、又はこれらのうちの１つ以上の組合せを含み、希望通りに動作するように処理装置を構成し、独立的又は結合的に処理装置に命令する。ソフトウェア及び／又はデータは、処理装置によって解釈され、処理装置に命令又はデータを提供するためのあらゆる類型の機械、構成要素、物理的装置、仮想装置、コンピュータ格納媒体又は装置、或いは送信される信号波を介して永久的又は一時的に具現化される。ソフトウェアは、ネットワークに接続されたコンピュータシステム上に分散され、分散された方法で格納されるか又は実行される。ソフトウェア及びデータは１つ以上のコンピュータ読み取り可能な記録媒体に格納される。
【０１００】
本実施形態による方法は、多様なコンピュータ手段を介して実施されるプログラム命令の形態で具現され、コンピュータ読み取り可能な記録媒体に記録される。記録媒体は、プログラム命令、データファイル、データ構造などを単独又は組合せて含む。記録媒体及びプログラム命令は、本発明の目的のために特別に設計して構成されたものでもよく、コンピュータソフトウェア分野の技術を有する当業者にとって公知のものであり、使用可能なものであってもよい。コンピュータ読み取り可能な記録媒体の例としては、ハードディスク、フロッピー（登録商標）ディスク及び磁気テープのような磁気媒体、ＣＤ−ＲＯＭ、ＤＶＤのような光記録媒体、フロプティカルディスクのような磁気−光媒体、及びＲＯＭ、ＲＡＭ、フラッシュメモリなどのようなプログラム命令を保存して実行するように特別に構成されたハードウェア装置を含む。プログラム命令の例としては、コンパイラによって生成されるような機械語コードだけでなく、インタプリタなどを用いてコンピュータによって実行される高級言語コードを含む。ハードウェア装置は、本発明の動作を実行するために１つ以上のソフトウェアモジュールとして作動するように構成してもよく、その逆も同様である。
【０１０１】
上述したように実施形態をたとえ限定された図面によって説明したが、当該技術分野で通常の知識を有する者であれば、前記に基づいて様々な技術的な修正及び変形を適用することができる。例えば、説明された技術が説明された方法と異なる順序で実行されたり、及び／又は説明されたシステム、構造、装置、回路などの構成要素が説明された方法と異なる形態で結合又は組合わせられたり、他の構成要素又は均等物によって置き換えたり置換されても適切な結果を達成することができる。
【０１０２】
したがって、他の具現、他の実施形態、及び請求範囲と均等なものも後述する請求範囲の範囲に属する。
【図１】
2018077842.tif 000008
【図２】
2018077842.tif 000009
【図３】
2018077842.tif 000010
【図４】
2018077842.tif 000011
【図５】
2018077842.tif 000012
【図６】
2018077842.tif 000013
【図７Ａ】
2018077842.tif 000014
【図７Ｂ】
2018077842.tif 000015
【図７Ｃ】
2018077842.tif 000016
【図８Ａ】
2018077842.tif 000017
【図８Ｂ】
2018077842.tif 000018
【図９】
2018077842.tif 000019