(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-02-03
(45)【発行日】2023-02-13
(54)【発明の名称】カメラ及び画像データ処理方法
(51)【国際特許分類】
G06T 7/00 20170101AFI20230206BHJP
G06K 7/10 20060101ALI20230206BHJP
G06K 7/14 20060101ALI20230206BHJP
【FI】
G06T7/00 350C
G06K7/10 372
G06K7/14 039
G06K7/14 013
G06K7/14 017
G06K7/10 412
【外国語出願】
(21)【出願番号】P 2021084437
(22)【出願日】2021-05-19
【審査請求日】2021-09-07
(32)【優先日】2020-05-25
(33)【優先権主張国・地域又は機関】EP
(73)【特許権者】
【識別番号】591005615
【氏名又は名称】ジック アーゲー
(74)【代理人】
【識別番号】110001069
【氏名又は名称】弁理士法人京都国際特許事務所
(72)【発明者】
【氏名】ジャン スタヴィアスキー
(72)【発明者】
【氏名】トルステン ファルク
(72)【発明者】
【氏名】ヨハネス ラインボルト
【審査官】伊知地 和之
(56)【参考文献】
【文献】米国特許出願公開第2019/0325183(US,A1)
【文献】国際公開第2020/038091(WO,A1)
【文献】特開2017-187988(JP,A)
【文献】特開2019-133331(JP,A)
【文献】特開2019-049967(JP,A)
【文献】米国特許出願公開第2020/0090023(US,A1)
【文献】中国特許出願公開第111079923(CN,A)
【文献】Huimin Li et al.,A High Performance FPGA-based Accelerator for Large-Scale Convolutional Neural Networks,2016 26th International Conference on Field Programmable Logic and Applications (FPL),IEEE,2016年09月02日
【文献】竹木 章人 外3名,情報損失の無い並列的特徴量プーリングを用いた画像認識,映像情報メディア学会技術報告,日本,(一社)映像情報メディア学会,2018年02月08日,第42巻 第4号,pp.239-244
(58)【調査した分野】(Int.Cl.,DB名)
G06K 7/00 - 7/14
G06T 7/00 - 7/90
G06V 10/00 - 20/90
G06V 30/418
G06V 40/16
G06V 40/20
CSDB(日本国特許庁)
(57)【特許請求の範囲】
【請求項1】
多数の画像点を有する画像データを取得するための画像センサ(24)と、隣接する画像点のグループから成る画像データストリームにおいて前記画像センサ(24)の画像データを読み込むための第1処理ユニット(30)と、画像データを処理するための第2処理ユニット(32)と、画像データ及び画像データからの処理結果を保存するためのメモリ(34)とを備えるカメラ(10)、特にカメラベースのコードリーダであって、前記第1処理ユニット(30)及び/又は前記第2処理ユニット(32)上にニューラルネットワーク(38)が実装されたカメラ(10)において、
前記第1処理ユニット(30)が、
画像が完全になるまで画像データの更なるグループ
をまだ画像センサ(24)から読み込
みながらもう、
直近に読み込まれた部分的な画像データである読み込み済みの画像点のグループを前記ニューラルネットワークの少なくとも第1層(42)で処理するように構成されていることを特徴とするカメラ(10)。
【請求項2】
前記隣接する画像点のグループが画像行又はその一部であり、更なる画像行がまだ読み込まれている間に既に前記第1層(42、48)で画像行が処理されることを特徴とする請求項1に記載のカメラ(10)。
【請求項3】
前記第1処理ユニット(30)がFPGA(フィールドプログラマブルゲートアレイ)を備えていること、及び/又は、前記第2処理ユニット(32)がマイクロプロセッサを備えていることを特徴とする請求項1又は2に記載のカメラ(10)。
【請求項4】
前記ニューラルネットワーク(42)が、関心領域及び特にコード部分(20)を見出すような画像データのセグメント化を行うように構成されていることを特徴とする請求項1~3のいずれかに記載のカメラ(10)。
【請求項5】
前記ニューラルネットワークの前記少なくとも第1層(42)が前記第1処理ユニット(30)上で特徴マップを生成し、該特徴マップが処理結果として前記メモリ(34)に保存されることを特徴とする請求項1~4のいずれかに記載のカメラ(10)。
【請求項6】
前記特徴マップが、コードが前記画像データ内のどこにあるかを示す確率マップを含んでいることを特徴とする請求項5に記載のカメラ(10)。
【請求項7】
前記特徴マップの解像度が前記画像センサの画像データより低いことを特徴とする請求項5又は6に記載のカメラ(10)。
【請求項8】
前記第1処理ユニット(30)が前記少なくとも第1層(42)の処理結果を緩衝記憶するための少なくとも1つの第1バッファメモリ(50、54)を備えていることを特徴とする請求項1~7のいずれかに記載のカメラ(10)。
【請求項9】
前記ニューラルネットワークの層のうち前記第1処理ユニット(30)上に実装された少なくとも1つの層(42)が、1より大きいステップサイズを有すること、即ちその畳み込みカーネルがその都度、1画像点より大きくシフトされること、及び/又は、直接隣接していない画素に作用する拡張された畳み込みカーネルを備えること、を特徴とする請求項1~8のいずれかに記載のカメラ(10)。
【請求項10】
前記第1処理ユニット(30)が前記読み込み済みの画像データを、特に前処理の後で、前記メモリ(34)に保存するように構成されていることを特徴とする請求項1~9のいずれかに記載のカメラ(10)。
【請求項11】
前記画像データ及び/又は前記第1処理ユニット(30)の処理結果を更に処理するため、特に、前記少なくとも第1層(42)の処理結果に基づいてコード(20)を読み取るために、前記ニューラルネットワークの更なる層(44)及び/又は別のニューラルネットワークが前記第2処理ユニット(32)上に実装されていることを特徴とする請求項1~10のいずれかに記載のカメラ(10)。
【請求項12】
前記第2処理ユニット(32)が、コード(20)を読み取るためのニューラルネットワークのない古典的な復号器(40)を備えていることを特徴とする請求項1~11のいずれかに記載のカメラ(10)。
【請求項13】
前記第2処理ユニット(32)上に、それぞれ前記第1処理ユニット(30)の処理結果を更に処理する少なくとも2つのニューラルネットワーク(60、62)が実装されていることを特徴とする請求項1~12のいずれかに記載のカメラ(10)。
【請求項14】
前記ニューラルネットワーク(58)の処理ステップのための少なくとも1つの追加の処理モジュール(56)、特にNPU(ニューラルプロセッシングユニット)又はGPU(グラフィクスプロセッシングユニット)を備えていることを特徴とする請求項1~13のいずれかに記載のカメラ(10)。
【請求項15】
多数の画像点を有する画像データの処理方法であって、第1処理ユニット(30)が、
隣接する画像点のグループから成る画像データストリームにおいて前記画像センサ(24)の画像データを読み込み、ニューラルネットワーク(38)が前記第1処理ユニット(30)及び/又は第2処理ユニット(32)上で前記画像データを処理し、画像データと処理結果が記憶される(34)方法において、
画像が完全になるまで画像データの更なるグループがまだ画像センサ(24)から読み込まれ
ながらもう、
直近に読み込まれた部分的な画像データである読み込み済みの画像点のグループが前記第1処理ユニット(30)により前記ニューラルネットワークの少なくとも第1層(42)で処理されることを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、請求項1又は15のプレアンブルに記載のカメラ及びニューラルネットワークを用いた画像データ処理方法に関する。
【背景技術】
【0002】
カメラは、とりわけ産業上の利用において、例えば物品の検査や測定等の目的で、物品の特性を自動的に捕らえるために多様な方法で用いられる。その場合、物品の画像が撮影され、業務に応じて画像処理により評価される。カメラの別の用途としてコードの読み取りがある。画像センサを用いて、表面にコードが付された物品が撮影され、その画像内でコード領域が識別されて復号が行われる。カメラベースのコードリーダは、1次元バーコード以外に、マトリックスコードのように2次元的に構成され、より多くの情報を提供する種類のコードも問題なく処理できる。印刷された住所や手書き文書の自動的なテキスト認識(光学式文字認識:OCR)も原則的にはコードの読み取りである。コードリーダの典型的な利用分野としては、スーパーマーケットのレジ、荷物の自動識別、郵便物の仕分け、空港での荷物の発送準備、その他の物流での利用が挙げられる。
【0003】
よくある検出状況の1つはコードリーダ又はカメラを検査又は測定業務のためにベルトコンベアの上方に取り付けるというものである。カメラはベルトコンベア上で物品の流れが相対移動している間、画像を撮影して、取得した情報を保存したり得られた物品特性に応じてその後の処理ステップを開始したりする。このような処理ステップでは、搬送中の物品に作用する機械上で具体的な物品に合わせて更なる処理を行ったり、物品の流れの中から品質管理の枠組み内で特定の物品を引き出すこと又は物品の流れを複数の物品の流れに分岐させることにより物品の流れを変化させたりすることができる。コードリーダにより、各物品が、それに付されたコードに基づき、正しい仕分け等の処理ステップのために識別される。
【0004】
カメラ及び画像センサ技術の進歩により、処理すべき画像はますます大きくなっている。その途方もないデータ量は、カメラ内における処理及び転送のための計算能力と帯域幅が有限であることから大きな問題となっている。まず重大なステップはコード領域の発見とその位置の特定である。なぜなら、これはまだ高解像度の画像データ全体に対して行う必要があるからである。このセグメント化、そして画像データを処理して利用可能にするための他の前処理もそうであるが、こうした処理のために従来からFPGA(Field Programmable Gate Array)が用いられている。
【0005】
特許文献1では、FPGA上での前処理において関心領域又はコード候補がコントラストの尺度に基づいて見出される。特許文献2では画像データの読み出し中にもう二値画像が生成され、特許文献3では例えばJPEG形式で圧縮した画像が生成される。特許文献4は、連続して撮影された画像に対し、ある画像領域がその前の画像に対してどのようにシフトしたかを示すシフトベクトルを求める光学的コード検出システムを提示している。シフトベクトルはセグメント化において見出されたグレースケールプロファイル同士の相関をとることにより求めることができる。このシフトベクトルを求める方法はFPGA上で実行することができる。
【0006】
これらのアプローチは、セグメント化に関する限り、コントラストの尺度といった事前に定義された基準に基づいている。しかしこれは、例えばテキスト又は周期的パターンをコードと間違えたり、コントラストの低い領域を見落したりする等の問題があるため、エラーに弱い。それ故、まさに分かりにくい背景が分かりにくい場合、そのせいで、利用可能な時間窓の間に結果を得られないまま、次の画像の処理のために復号プロセスを中断しなければならなくなる可能性がある。その結果、読み取りエラー又はコードの未読み取りが生じ、後処理ステップでコストをかけて手作業で処理せざるを得なくなる。
【0007】
基本的には、コードを認識するように訓練されたニューラルネットワーク及び特にCNN(畳み込みニューラルネットワーク、Convolutional Neural Network)が、これらの欠点を克服するのに非常に適している。これについては近年、諸文献に次々にアプローチが出てきている。
【0008】
非特許文献1では、大きなデータセットが合成され、それを用いてCNNによりコードのセグメント化が実行される。しかし、詳しいネットワークアーキテクチャやハードウェアの実装は示されていない。
【0009】
非特許文献2では、それまでのアプローチに比べて、手動でのパラメータ調整を必要とせず、バーコードの位置特定の性能が少なくとも5%改善したと申し立てている。
【0010】
非特許文献3では、Intel i5-6600 3.30GHzとNvidia GeForce GTX 1080を用いて、回転を含めてコード領域をリアルタイムで認識している。
【0011】
非特許文献4では、CPU環境においてバーコードが認識され、コード形式が識別される。
【0012】
しかし、CNNの処理には、上に模範例として挙げた従来の一連の前処理とは全く別の計算能力が更に必要である。とりわけリアルタイムという条件がある場合や、いずれにせよ例えば撮影対象の物体が搬送されて動いている等の理由で時間窓が限られている場合、埋め込み型ハードウェアではそれは実行不能である。従来の解決策は特殊なハードウェアや、NPU(Neural Processing Unit)又はGPU(Graphics Processing Unit)等のコプロセッサの使用である。しかし、このようなモジュールは普通、埋め込み型アーキテクチャでは利用できない。
【0013】
特許文献5では、RPN(region proposal network)という、特殊なニューラルネットワークを用いた画像中の物体の検出と分類が論じられている。より高い計算能力を得るためにASIC(Application-Specific Integrated Circuit)又はFPGAを含む様々なモジュールを用いることができる。しかしそれはコードの読み取りに特に関係したものではない。
【0014】
特許文献6は、CNNの処理を高速化するために、CPUとFPGAを有する混成型アーキテクチャをごく一般的に提案している。しかしそこでは単に背景としてコンピュータ・ビジョンに触れているに過ぎず、より詳しい実装や、ましてコードの読み取りへの応用は示されていない。
【0015】
非特許文献5は、多数の層を持つ深層ニューラルネットワークには莫大な訓練コストがかかるという問題に取り組んでいる。これはいわゆる「residual connections」、つまり層を跳び超えた結合により改善される。これはコードの読み取りとは無関係の全く一般的な技術に関するものである。
【0016】
特許文献7では、機械学習のために構成された分類器、より特別にはニューラルネットワークを訓練するために、機械学習を伴わない方法で作動する古典的な復号器が用いられている。しかしこの文献にはコード領域の前処理又は検出に関する詳しい記載はない。
【先行技術文献】
【特許文献】
【0017】
【文献】EP 2 555 160 B1
【文献】EP 2 003 599 A1
【文献】EP 1 365 577 A1
【文献】EP 3 009 984 A1
【文献】US 9 858 496 B2
【文献】US 2018/0046903 A1
【文献】EP 3 428 834 B1
【非特許文献】
【0018】
【文献】Arbeit Zhao, Qijie, et al, "Deep Dual Pyramid Network for Barcode Segmentation using Barcode-30k Database", arXiv preprint arXiv:1807.11886 (2018)
【文献】Xiao, Yunzhe, and Zhong Ming, "1D Barcode Detection via Integrated Deep-Learning and Geometric Approach", Applied Sciences 9.16 (2019): 3268
【文献】Hansen, Daniel Kold, et al, "Real-Time Barcode Detection and Classification using Deep Learning", IJCCI. 2017
【文献】Zharkov, Andrey; Zagaynov, Ivan, Universal Barcode Detector via Semantic Segmentation, arXiv preprint arXiv:1906.06281, 2019
【文献】He, Kaiming; Zhang, Xiangyu; Ren, Shaoqing; Sun, Jian (2015-12-10), "Deep Residual Learning for Image Recognition", arXiv:1512.03385
【発明の概要】
【発明が解決しようとする課題】
【0019】
従来の公知のアプローチには、CNNによる高解像画像の前処理にかかる莫大な計算負荷を適切に低減又は分散させることで、低性能又は中程度の性能のハードウェアモジュールでも利用できるようにすることに成功したものはない。
【0020】
故に本発明の課題は、ニューラルネットワークによる画像の前処理、特にコード読み取りのための前処理を改善することである。
【課題を解決するための手段】
【0021】
この課題は、請求項1又は15に記載のカメラ及び画像データ処理方法により解決される。本カメラは好ましくはカメラベースのコードリーダとして構成される。画像センサが多数の画素を用いて、典型的には数メガピクセルの高解像度で、画像データを取得する。第1処理ユニットが画像センサの画像データ、即ち好ましくは高解像度の生画像を読み込む。この読み込みは、画像データの流れ(ストリーミング)として隣接画素のグループに分けて行われる。本カメラは更に、画像データを処理するための第2処理ユニットと、画像データ及び処理結果のためのメモリとを含んでいる。ただし、第2処理ユニットは好ましくは画像センサと直接接続されていない。処理結果は例えば処理後の画像データや該データから得られた特徴及び特性である。
【0022】
画像データの処理は少なくとも部分的にニューラルネットワークにより行われる。これは第1処理ユニット、第2処理ユニット又は両方の処理ユニット上に実装されている。このニューラルネットワークは好ましくはCNN(Convolutional Neural Network)であり、以下ではしばしばこの名前で呼ばれる。従来の公知の実装では、場合によっては古典的な方法で前処理を行った後、第1処理ユニットが画像データをまずメモリへストリーミングする。その後でニューラルネットワークによる処理が行われるが、ここで第1及び第2処理ユニットに負荷を分散させることが考えられる。
【0023】
本発明の出発点となる基本思想は、読み込み中にもう画像データをニューラルネットワーク内で処理するということにある。そのために、ニューラルネットワークの少なくとも第1層が第1処理ユニット上に実装されており、画像データの更なるグループがまだ画像センサから読み込まれている間に、読み込み済みの画像点のグループがもう第1層に渡される。ニューラルネットワークの第2層及びそれ以降の層も第1処理ユニット上に実装することが可能である(Early Layers、初期層)。その場合、それらの各層は前の層で十分に中間結果が出たらすぐに処理を開始する。即ち、ニューラルネットワークは、次の処理ステップのために十分な画像データのグループが読み込まれたらその都度すぐに処理を開始又は継続する。画像が完全になり、残りの処理ステップを最後に読み込まれた画像データに対して呼び出すだけでよくなるまで、前記処理と並列に、又はそうでなくても実際的な観点から並列に、画像データの更なるグループが引き続き読み込まれる。ニューラルネットワークは「オンザフライ(on the fly)」で、あるいは画像のストリーミング中にもう作動している。
【0024】
本発明には、処理が非常に有利な形で複数の処理ユニットに分散されるという利点がある。それには混成型のハードウェアアーキテクチャが特に適している。画像データの読み込み中に少なくとも第1層の処理を早めに且つ高速で行うことにより、少なくとも第1層の中間結果又は特徴が非常に速くしかも一定の処理時間の後に利用可能になる。これにより、ハードウェア資源に限りのあるシステム、特に埋め込み型ハードウェア上でも、ニューラルネットワークを用いた処理が可能になる。また本発明による任務の分配と実装により、冒頭で論じた各文献では触れられていない別の問題、即ち、ニューラルネットワークを処理する処理モジュール間でのデータ伝送に極めて広い帯域幅が必要になるという問題も解決される。たとえ計算能力が十分であっても、帯域幅がボトルネックになり、要求される時間的な枠組み条件の下で処理ができなくなる恐れがある。
【0025】
前記隣接する画像点のグループが画像行又はその一部であり、更なる画像行がまだ読み込まれている間に既に第1層で画像行が処理されるようにすることが好ましい。これによれば、画像は画像センサから行毎に読み込まれ又はストリーミングされ、行指向で処理が行われる。第1層の畳み込みカーネルのために十分に画像行が読み込まれる度に直ちに次の処理ステップを実行することができる。そのために第1処理ユニットは、適宜の数の画像行が移動しながら緩衝記憶される画像バッファを備えていることが好ましい。原則的には画像行ではなく画像列でも同様に機能することができる。これは単に座標の定義の違いとして理解されるものであって、区別はない。
【0026】
第1処理ユニットがFPGA(Field Programmable Gate Array)を備えていること、及び/又は、第2処理ユニットがマイクロプロセッサ(CPU)を備えていることが好ましい。FPGAは大量のデータを比較的簡単な個別の算術演算でリアルタイム処理するのに特に適している。例えばニューラルネットワークの前記少なくとも第1層における離散的な畳み込みのマトリックス操作の際にそのような処理が発生する。他方、CPUはずっと柔軟性があり、自ずとより複雑な計算ステップまで実行できる。これは更なる処理にとって有利である。
【0027】
ニューラルネットワークは、関心領域及び特にコード部分を見出すような画像データのセグメント化を行うように構成されていることが好ましい。コード部分又はコード候補の識別及び位置特定というこの課題は、本来のコード読み取りの準備をするものであり、高解像度の画像で作業しなければならず、従って大量のデータをうまく処理しなればならない。本発明に従ってその処理を読み込み中に又は「オンザフライ」で実行することにより、処理時間が明らかに短縮され、扱い可能になる。しかも、見つかったコード部分についての処理結果だけを出力すればよい。生の画像データを除けば、第1処理ユニットの入力データのために余分なデータ転送を行う必要はなく、その生の画像データはいずれにせよ画像センサから一度は必ず読み出さなければならない。
【0028】
ニューラルネットワークの前記少なくとも第1層が第1処理ユニット上で特徴マップを生成し、該特徴マップが処理結果としてメモリに保存されることが好ましい。特徴マップ(Feature Map)がCNNの各層の結果である。第1層の特徴マップ、又は、第1処理ユニット上に複数の層が実装されている場合はそれらのうち最後の層の特徴マップが、その後の処理のため、特に第2処理ユニットによる処理のために記憶される。そして、CNNの更なる層、別のCNN、又は古典的な方法でも、その特徴マップを利用することができる。
【0029】
特徴マップはコードが画像データ内のどこにあるかを示す確率マップを含んでいることが好ましい。従ってこれはコードを求めるセグメント化の結果を出力する一つの可能な形式である。この確率マップから、どの部分を用いれば限られた復号時間内で読み取りの試みに成功する見込みが最も高くなるかを非常に迅速に把握することができる。特徴マップは位置毎に2種類以上の情報、例えば異なるコード種別毎の確率を含むことができる。コード種別とは、1次元コードと2次元コード、又は1次元及び2次元のより細かい様々なコード形式等である。
【0030】
特徴マップの解像度は画像センサの画像データより低いことが好ましい。元の高解像度の画像データを用いて作動しなければならないのは好ましくは第1処理ユニット又はニューラルネットワークの前記少なくとも第1層のみとする。その後は処理が進むにつれて解像度が低くなる。保存すべき特徴マップに含まれるデータ量は既に明らかに低減されている。これは特に確率マップに当てはまる。なぜなら全ての個々の画素毎にそれがコードに属するかどうかを示す必要はなく、ある特定のサイズ以上の部分についてそれを示すだけでよいからである。例えば、画像をn×m画素の大きさのタイルに分割し、タイル毎に1つの特徴、あるいは特徴をもっと細分化すべき場合は複数の特徴のグループを特徴マップに記憶させることができる。
【0031】
第1処理ユニットは前記少なくとも第1層の処理結果を緩衝記憶するための少なくとも1つの第1バッファメモリを備えていることが好ましい。読み込まれた隣接画素のグループは好ましくはまず画像バッファに書き込まれる。第1バッファメモリは、元の画像データではなく、ニューラルネットワークの第1層の処理結果を念頭に置いたものである。バッファメモリの大きさは、後に続く各層の処理ステップに供給するために十分な処理結果を記憶することができるように量定することが好ましい。第1層だけが第1処理ユニット上に実装されている場合、第1バッファメモリは特徴マップの1行分で十分であり、それがその都度、メモリに書き込まれ、新たに満たされる。第1処理ユニット上に第2層が実装されている場合、第1バッファメモリの大きさは第2層の畳み込みカーネルのサイズに合わせることが好ましい。その場合、第2層の処理結果のために第2バッファメモリが設けられ、その設計が適切に選択される。即ち、第3層が第1処理ユニット上で実行されない場合は1行分のみとし、そうでない場合は第3層の畳み込みカーネルに合わせる。これを3番目以降の層とバッファメモリでも続けることができる。画像バッファとバッファメモリはFIFO(先入れ先出し)の原理により移動しながら書き込むことで、その都度必要な最新の画像データと中間結果が用意されるようにすることが好ましい。
【0032】
ニューラルネットワークの層のうち第1処理ユニット上に実装された少なくとも1つの層が1より大きいステップサイズを有すること、即ちその畳み込みカーネルがその都度、1画像点より大きくシフトされることが好ましい。ステップサイズを複数の画像点(large strides)にすると、層の入力データと比べて出力データの解像度が急速に低下する。故にこの処置は第1層で既に行うことが好ましいが、第1処理ユニット上の別の層、複数の層、又は全ての層も対象にすることができる。
【0033】
ニューラルネットワークの層のうち第1処理ユニット上に実装された少なくとも1つの層が、直接隣接していない画素に作用する拡張された畳み込みカーネルを備えること(dilated convolution)が好ましい。このような畳み込みカーネルは互いにi>1画素ずつ離れた画素を用いて作動する。これによりその都度の検出領域が拡張される。これもまた第1層を対象とすることが好ましいが、代わりに第1処理ユニットの任意の層を対象とすることも考えられる。
【0034】
第1処理ユニットは、読み込まれた画像データを、特に前処理の後で、メモリに保存するように構成されていることが好ましい。本発明では読み込まれた画像データがニューラルネットワークの第1層に渡される。本実施形態によればそのデータが第1処理ユニットの追加の経路内でメモリにも書き込まれる。これにより元の高解像度の画像が別途更なる処理のために、特に第2処理ユニットの復号器に利用可能になる。このために第1層の画像バッファを共用すれば、画像の同じサイズのデータブロックをメモリへ書き込むことができる。前記追加の経路において古典的な方法又は学習を伴う方法で例えば画像圧縮、明るさ補正、二値画像の生成等の前処理ステップを実行することが考えられる。この前処理の結果を第1処理ユニット上のニューラルネットワークの前記少なくとも第1層の結果と取り違えてはならない。それは追加のデータである。
【0035】
好ましくは、画像データ及び/又は第1処理ユニットの処理結果を更に処理するためにニューラルネットワークの更なる層及び/又は別のニューラルネットワークが第2処理ユニット上に実装される。これによれば、ニューラルネットワークが第1処理ユニット上の初期層と第2処理ユニット上の更なる層に分けられる。あるいはこの更なる層を専用のニューラルネットワークと解釈してもよく、それは結局、言語表現上の違いに過ぎない。第2処理ユニットの前記更なる層あるいは別のニューラルネットワークは、初期層によりメモリに保存された特徴マップと、場合により追加で記憶された高解像画像とに基づいて作動する。この処理はもはや読み込み中に又は「オンザフライ」では実行されないが、必要なデータがメモリに保存されたらすぐにその処理を開始してもよい。
【0036】
前記更なる層及び/又は前記別のニューラルネットワークは前記少なくとも第1層の処理結果に基づいてコードを読み取るように構成されていることが好ましい。その際、特に、第1処理ユニット上の初期層によるセグメント化の結果を例えば確率マップの形で利用して、メモリに追加で保存された高解像画像内のコード部分が見出される。そしてそのコード部分を用いて前記更なる層又は前記別のニューラルネットワークによりコード内容の読み取りが試みられる。
【0037】
第2処理ユニットはコードを読み取るためのニューラルネットワークのない古典的な復号器を備えていることが好ましい。ここで「古典的」とは、学習を伴う方法を用いず、特にニューラルネットワークを用いないという意味である。古典的な復号器は、第1処理ユニット上の初期層の結果、特にコード部分を求めるセグメント化の確率マップを利用する。複数の異なる復号器でコードの読み取りを試みることは異例ではない。故に、ニューラルネットワークの更なる層又は別のニューラルネットワークと少なくとも1つの古典的な復号器とを用いてコード部分を並列に又は連続的に処理することも考えられる。
【0038】
第2処理ユニット上に、それぞれ第1処理ユニットの処理結果を更に処理する少なくとも2つのニューラルネットワークが実装されていることが好ましい。これらの2つのニューラルネットワークは、第1処理ユニット上の初期層の後段の層とみなすことができ、初期層はいわば訓練の後で固定された後、2つのニューラルネットワークにおいて異なるやり方で継続される。これにより、第1処理ユニットの初期層の処理結果が多重的に再利用される、又は状況に応じて異なる目的で更に処理される。例えば、2つのニューラルネットワークが異なる形式のコードを読み取ったり、少なくとも一方のニューラルネットワークが全く別の目的を追求したりする。
【0039】
本カメラはニューラルネットワークの処理ステップのための少なくとも1つの追加の処理モジュールを備えている。従って第3の処理ユニット又はより多くの処理ユニットがある。これにより計算負荷をより良く分散させることができる。その追加の処理モジュールがNPU(Neural Processing Unit)又はGPU(Graphics Processing Unit)であれば特に好ましい。このようなモジュールは大抵、埋め込み型ハードウェア上では利用できない。それでも拡張装備は可能であり、そうすればなおもはるかに高性能のニューラルネットワークを実装することができる。
【0040】
本発明に係る方法は、前記と同様のやり方で仕上げていくことが可能であり、それにより同様の効果を奏する。そのような効果をもたらす特徴は、例えば本願の独立請求項に続く従属請求項に模範的に記載されているが、それらに限られるものではない。
【0041】
以下、本発明について、更なる特徴及び利点をも考慮しつつ、模範的な実施形態に基づき、添付の図面を参照しながら詳しく説明する。
【図面の簡単な説明】
【0042】
【
図1】カメラをベルトコンベアの上方に取り付けた模範例の概略的な全体図。
【
図2】(a)、(b)変化する背景の手前に読み取り対象のコードがある画像の例。
【
図3】ニューラルネットワークを用いた従来の画像データ処理の概略図。
【
図4】本発明の一実施形態において画像データの読み込み中にもうニューラルネットワークにより実行される画像データ処理の概略図。
【
図5】読み込み中にもう画像データの処理を行うためのニューラルネットワークの初期層の模範例を示す図。
【
図6】追加の処理モジュールを用いる本発明の別の実施形態において画像データの読み込み中にもうニューラルネットワークにより実行される画像データ処理の概略図。
【
図7】本発明の別の実施形態において画像データの読み込み中にもうニューラルネットワークにより実行される画像データ処理において、初期層の結果を複数のニューラルネットワークで利用する場合の概略図。
【発明を実施するための形態】
【0043】
図1はベルトコンベア12の上方に設置されたカメラ10を示している。矢印16で示したように、ベルトコンベア12は物体14をカメラ10の検出領域18を通過するように搬送する。この実施例では物体14の表面にコード20があり、これがカメラ10により検出され、評価される。このコード20がカメラ10によって認識され得るのは、それが上面側又は少なくとも上方から見える箇所に付されている場合のみである。そこで、
図1の描写から離れて、例えば側面又は下面に付されたコード22を読み取るために複数のカメラ10を異なる方向から取り付けて、いわゆる全方向からの多重読み取りを可能にしてもよい。読み取りシステムに対する複数のカメラ10の配置は実際には読み取りトンネルの形にすることがほとんどである。このようにベルトコンベア付近にカメラ10を固定して使用することは実際に非常に多い。しかし、本発明は画像データの処理又はカメラ10そのものに関するものであるため、この例が本発明を限定するものと解釈すべきではない。コードの読み取りや、カメラベースのコードリーダとして構成されたカメラ10の代わりに、例えば物体14の測定又は検査等、他の画像評価の任務にカメラ10を用いることも同様に可能である。
【0044】
カメラ10は搬送される物体14とコード20の画像データを画像センサ24で取得する。画像データは評価ユニット26により画像解析と復号法を用いて更に処理される。評価ユニット26は好ましくは埋め込み型ハードウェア内に実装されており、複数の評価モジュールを備えている。評価ユニット26の詳細な構成と該ユニットによる画像データの処理については後で
図3~7を参照してより詳しく説明する。カメラ10は読み取ったコードや画像データ等の情報をインターフェイス28を通じて出力する。
【0045】
図2(a)、(b)は異なる背景の手前にコード20がある画像の2つの例を示している。コード20を読み取るための最初のステップは、全体としてコード候補を識別して位置を特定するセグメント化である。成功したセグメント化の結果が
図2(a)、(b)に白枠で強調されている。予め定めた基準ではここで確実に成功するとは限らない。ニューラルネットワークを用いれば様々な背景の手前での認識率が高まる。コード20のセグメント化は重要な応用例である。しかし、ここで説明するアーキテクチャを用いてニューラルネットワークにより画像の他の特徴でも見出すことができる。
【0046】
図3は、画像センサ24からの画像データストリームを、FPGA30、CPU32及びメモリ34を備える評価ユニット26により処理する従来の方法を示している。画像データはFPGA30により読み込まれ、完全な高解像画像としてメモリ34に書き込まれる。その間に古典的な前処理ユニット36がもう画像データストリームに対して例えば画像にフィルタを適用したり、セグメント化さえも行ったりする等の処理を行うことができる。ただし、このセグメント化は予め定められた基準と機械学習を伴わない古典的な方法に基づいているため、コード20が認識されなかったり、逆にある領域がコード20と誤認識されたりするエラーの割合がまだかなり高い。
【0047】
画像の処理に用いられるニューラルネットワーク38が同様にFPGA30上に実装されている。それはメモリ34にアクセスして画像を読み込み、ニューラルネットワーク38の処理結果をメモリ34に書き戻す。このニューラルネットワーク38は画像全体へのアクセスが可能になるのを待つため、前処理ユニット36による画像の取得が完了していなければ、ニューラルネットワーク38はその処理を開始できない。ニューラルネットワーク38は、コード20の読み取りに用いられるCPU32の復号器40を支援するか、可能であれば早々に自らコード20を読み取る。そのため復号器40にはどちらかと言えば管理者的な任務が割り当てられている。
【0048】
このやり方には複数の欠点がある。まず、画像が完全に取得されるまでニューラルネットワーク38の処理を開始できないため、時間が無駄になる。更に、FPGA38がその限られた計算資源を用いて読み込み又は前処理36とニューラルネットワーク38という2つの任務を一緒にしなければならない。これは、特に高性能なFPGA30、別のFPGA、又はGPU、NPU若しくはDSP等の専用のコプロセッサにより解決できるが、そのような余分なコストは本来なら避けるべきである。
【0049】
加えて、膨大な量のデータ交換を行わなければならず、その分だけ帯域幅が必要となったりシステムを妨げたりするという別の不都合が
図3の状況においても生じるが、上記のやり方ではこれが解消されない。即ち、まず画像全体をFPGA30により読み込んでメモリ34に書き込み、画像転送が完了したら改めてメモリからFPGA30又は他の該当モジュールへ画像を送ってそこでニューラルネットワーク38により処理した後、それに対する処理結果もまたメモリ34に保存する。リアルタイムシステムの場合や、例えば
図1に示した用途において次の物体14が検出領域18に来るまでというように処理時間窓に既に制限がある場合、それは通信上の重大なボトルネックになる。
【0050】
図4は本発明の一実施形態における画像センサ24からの画像データストリームの評価ユニット26による処理を示している。基本的には
図3と同様にFPGA30、CPU32及びメモリ34を有する比較可能なハードウェアが用いられているが、今度はそれらの使い方が異なる。FPGA30は第1処理ユニットのハードウェアモジュールを代表している。これは好ましくはリアルタイム動作可能であるが、いずれにせよ画像センサ24のデータ量に対処できる。これに対してCPU32は第2処理ユニットを表している。これは可能な限り柔軟にプログラミング可能であるが、必ずしもメガピクセルの解像度の画像データを普通のフレームレートで読み出すための適切なインターフェイスを持っているとは限らない。CPU32は、自らの復号器40でコード20を読み取るために、FPGA30によりメモリ34に用意されたデータにアクセスする。
【0051】
FPGA30が画像データを完全な画像に合成してメモリ34に保存する際の経路となる、古典的な前処理36を含むチャネルは残しておくことが好ましい。これにより復号器40は完全な高解像画像にアクセスできる。また、古典的な方法を用いる前処理ステップも考えられる。
【0052】
しかし、ニューラルネットワークを用いた処理が本発明では異なる方法で組織されている。ニューラルネットワークの初期層42(Early Layers)はFPGA30上に実装されている。これは第1層のみとすることもできる。その場合、更なる層44はCPU32上に実装される。これら更なる層44を、初期層42の処理結果を入力データとして用いる別のニューラルネットワークとみなすこともできる。更に、復号器40がもはやニューラルネットワークを用いず、従来の方法で作動するようにすることも考えられよう。
【0053】
ニューラルネットワークの初期層42は、まだ更なる画像データが読み込まれている間にもう、入力中の画像データストリームを用いて作動する。初期層42(厳密には初期層42のうち最後の層)の処理結果がメモリ34に保存される。データがメモリ34を経由して回り道をしている間はニューラルネットワークにおける処理を開始できないということはない。本発明によるニューラルネットワーク又はその第1層は完全な画像を待つことなく、直近に読み込まれた部分的な画像データをもう処理する。これにより通信上のボトルネックも除去される。なぜなら、もはや完全な画像をFPGA30に再び読み込む必要はないからである。メモリアクセスは単に、初期層42の処理結果を少しずつ記憶させるため、そして任意選択で古典的な前処理36を経て徐々に全体画像を記憶させるために必要となるに過ぎない。
【0054】
図5は、画像データの読み込み中にもうニューラルネットワークにより実行される処理を詳しく説明するために、FPGA30上の初期層42を概略的に示したものである。なお、最初にいくつかの専門用語を簡単に紹介する。
【0055】
ニューラルネットワークとしては好ましくはCNN(畳み込みニューラルネットワーク、Convolutional Neural Network)が用いられる。これは画像処理に特に適した深層ニューラルネットワークの一形態である。CNNは一連の離散的な畳み込み(Convolution)を実行する。各畳み込みにはそれぞれ非線形な活性化関数が続く。離散的な畳み込みと活性化関数の各組み合わせがそれぞれCNNの1つの層となる。ある層の出力が特徴マップ(Feature Map)である。
【0056】
個々の離散的な畳み込みは畳み込みカーネル又は畳み込み行列を用いた行列操作により実行される。畳み込みカーネルのサイズを[N,N,C1,C2]と表記する。ここで[N,N]は局所的な大きさ、C1は入力データのチャネル数、C2は出力データのチャネル数である。グレースケール画像のように入力データにチャネルが1つしかない場合、畳み込みカーネルのサイズは[N,N,1,C2]又は短く[N,N,C]となる。畳み込みカーネルのサイズはCNNのアーキテクチャにより予め定まる。そして、行列内の値をCNNの訓練の際に覚え込ませる。
【0057】
図5において、処理はFPGA30上で図示した初期層42(ここでは例として2層)を左から右へと進む。入力データとして画像センサ24から画素が読み込まれる。これらの画像データは隣接画素の画像データストリームとして(好ましくは画像行として)到着する。読み込まれた画素は画像バッファ46に緩衝記憶されるため、読み込み操作毎に何個の隣接画素が入力されるかは重要ではない。画像バッファ46に十分な画像行が記憶されたらすぐに、第1層による処理を開始し、記憶した画像行と第1層の第1の畳み込みカーネル48との離散的な畳み込み又は行列操作により最初の出力行を計算することができる。個々の計算はフィルタカーネルを用いた普通の画像フィルタリングに似ているが、ここでは複数の出力画像が並列に、つまりフィルタカーネル毎に1つの出力画像がそれぞれ生成される。また概念の面でも違いがある。即ち、それは本来の出力画像ではなく特徴マップであり、それは普通、光学的な改善を示すものではなく、畳み込みカーネルの学習した重みによる変化を受けたものである。
【0058】
第1の畳み込みカーネル48のサイズは[N1,N1,C1]である。それは、この例ではチャネルが1つしかないグレースケール画像が入力画像であると仮定しているからである。局所的な大きさN1に対応して、1つの離散的な畳み込み毎にN1の画像行が必要となる。従って、画像バッファ46の高さは第1の畳み込みカーネル48の高さN1により、またその幅は画像行により予め定まる。第1層が最初のN行の画像行を処理し終えたら1番目の画像行はもはや必要ない。なぜなら2番目の出力行は2番目からN+1番目までの画像行から計算されるからである。故に画像バッファ46はFIFOの原理で移動しながら利用されることが好ましい。画像センサ24からの読み込みと第1層の更なる処理との間の遅延を考慮し、更に追加で1行又は数行の画像行を一定の予備として画像バッファ46の前に付けてもよい。
【0059】
出力行は第1層の第1バッファ50に集められる。初期層42にそもそも第1層しかない別の実施形態では、第1バッファ50は出力行の分だけあれば十分であり、出力が完成したらすぐにそれがメモリ34に転送される。2つの層がある
図5の場合、第1バッファ50は第2層の処理のために出力行を集める。
【0060】
第2層の第2のフィルタカーネル52のサイズは[N2,N2,C1,C2]である。第1層は、1チャネルのグレースケール画像から、出力される特徴マップのC1本のチャネルを生成し、第2のフィルタカーネル52の局所的な大きさN2は基本的に第1のフィルタカーネル48の局所的な大きさN1には依存しない。その他については、第2層での処理は第1層と同じように実行される。即ち、第1バッファ50にN2行が用意されたらすぐに第2層の出力行の計算を行うことができる。故に第1バッファ50は第1層の少なくともN2行の出力行を緩衝記憶できる必要がある。また、画像バッファと同様に第1バッファ50も移動しながら利用されることが好ましい。
【0061】
第2層の第2バッファ54は、その都度最終的に計算された第2層の出力行を単に受け取る。完成した出力行は、FPGA30上での初期層42の処理結果である特徴マップの一部であり、徐々にメモリ34へ転送される。あるいは、複数の出力行を緩衝記憶させてからFPGAがそれらをメモリ34に保存することも当然可能である。
【0062】
図5の描画から離れて、FPGA30上に初期層42の第3層以降の層も実装することができる。その場合、第3のフィルタカーネル、第3バッファ、そして場合によっては更なるフィルタカーネル及びバッファが設けられる。
【0063】
元の画像がCPU32及び復号器40によるその後の処理において利用できるように、FPGA30は特徴マップに加えて元の画像行をメモリ34に記憶させることが好ましい。その場合、古典的な前処理と、場合によっては別のニューラルネットワークを用いた前処理も行うこともできる。後者の目的は、画像を更にセグメント化したり他の特徴を抽出したりすることではなく、古典的な前処理に相当する評価を行うことである。
【0064】
図5に示したCNN又はその初期層42のアーキテクチャは簡略化されている。一般に、コードの読み取り又はコードのセグメント化には比較的小さいCNN、即ち層の数が極端に多くはないCNNで十分である。それでも、既に指摘したように、FPGA30上に具体的に2層というのは単なる例に過ぎないと理解すべきであり、いずれにせよ実施形態によっては、メモリ34から読み出された特徴マップを用いて作動する更なる層44がCPU32上に追加される。どの層42をFPGA30上に実装しどの層44をCPU32上に実装するかという境界線の位置は設計上の1つの自由度である。好ましい設計では、計算能力とメモリ容量が許す限りにおいてできるだけ多くの層42をFPGA30上に収めるようにする。
【0065】
図5はCNNの層のうち畳み込みカーネル48、52だけを示している。その他に各層は正規化と非線形活性化関数といった典型的な要素を備えていることが好ましい。他にもCNNにはまだ数多くの設計オプションがあり、それらを個別に又は組み合わせて実装することが好ましいが、必須というわけではない。まず、後でまた説明する訓練を高速化するために、非特許文献5に記載の高速の前方接続(residual connections)が設けられる。このCNNは完全に接続された層がない完全畳み込みネットワーク(fully convolutional)である。言い換えれば、特徴マップの解像度が層を追う毎に低下する。計算を高速化するため、層の出力チャネルの数が最大で1000に制限されている。第1層ではステップ幅が1に等しくない(large strides)フィルタカーネルが用いられるため、解像度が急速に低下する。拡張された畳み込みカーネル(dilated convolution)により各検出カーネルを拡張することができる。最後に、分離された畳み込みカーネル(separable convolution kernel、特にdepthwise separable convoultion kernel)により計算を最適化できる。
【0066】
初期層42でのオンザフライ処理又はパイプライン処理により、更なる画像データの読み込み中でもFPGA30とCPU32の間で計算負荷を分散させることができる一方、同時にデータ転送が数桁のオーダーで低減される。これにより、中程度の性能のハードウェア上、特に埋め込み型ハードウェア上でもCNNを実装することができる。このようなハードウェア要件はすぐに入手可能なカメラ10で満たされるが、他方でデータ転送の帯域幅と計算性能は、
図3と関連付けて説明したようにメモリ34から高解像画像全体を読み出してCNNで処理するには不十分であり、いずれにせよ
図1のような用途により予め決まる時間窓内では不十分である。
【0067】
カメラ10をコードリーダとして用いる好ましい形態においては所定形式のコード20の位置を特定することがCNNの課題である。その場合、出力される特徴マップは例えば、1次元コード及び2次元コード又は更に細分化されたコード形式等、特定のコード形式のコード20が撮影画像中のどこにあるかという確率マップである。確率マップには区別すべきコード形式の数と同数のチャネルがある。確率マップの解像度は高解像度の入力画像の解像度より明らかに低いことが好ましい。その場合、入力画像が言わば画像タイルに分割されており、マップには個々の画素毎ではなく画像タイル毎にコード20に対する確率値が記載される。
【0068】
CNNが使用できるようになる前にその学習又は訓練が必要である。それには適当な訓練データが必要である。通常は、期待される正しい結果が事前に与えられる教師あり学習(supervised training)が実施される。訓練データには適切にアノテーション又はラベルが付されている。CNNが後で柔軟に使用状況に対応できるように、訓練データは幅広いバリエーションをカバーしていなければならない。それ故、手作業でアノテーションを付けると非常にコストがかかる。故に、好ましくは単に出発点としてのみ訓練データセットに手作業でアノテーションを付ける。他の訓練画像は合成により生成され、それらに生成の過程で既にアノテーションが付される。これを土台として多数の更なるアノテーション付き訓練画像を模擬的な効果により得ることができる。
【0069】
訓練画像を生成する又は変化させることができる方法を挙げると長いリストになるが、それで終わりではない。即ち、ランダムな内容のコード、様々なコード形式(EAN、Code 128、Code 39、Datamatrix、PDF等)、ランダムな極性又はランダムなクワイエットゾーンを持つコード、不完全なコード、モジュール幅及び高さの異なる符号、様々な姿勢のコードや視点が歪んだコード、印字及び刻印されたコード(DPM、direct part marking)、同一画像中にある複数の異なるコード、等である。コードではなく画像に関わる変化の効果には、例えばランダムノイズ(ガウス、ラプラス、一様、パーリン)、ぼかし効果、非線形な変形、ランダムな背景質感(紙、厚紙、木材、プラスチック、金属等)、フォント及び文字サイズの異なるテキスト、そして照明効果(均一及び不均一、スポット等)がある。
【0070】
訓練に続いて、その後の処理時間を最適化するために更にいくつかの後処理ステップを行うことができる。離散的な畳み込みカーネル内の学習した重みは、訓練から得られたバッチノーマライゼーション係数を用いてスケールを変更することができる。また、FPGA30及び/又はCPU32のために重みが例えば8ビット又は16ビットに量子化される。
【0071】
図6は本発明の別の実施形態における評価ユニット26による画像センサ24からの画像データストリームの処理を示している。
図4と違ってここでは更に評価ユニット26に少なくとも1つの追加のハードウェアモジュール56がある。これは好ましくは、NPU(Neural Processing Unit)又はGPU(Graphics Processing Unit)のような、CNNによる処理に特に適したモジュールである。しかし、この追加のハードウェアモジュール56がもう一つのデジタルモジュール、特に別のFPGA又は別のCPUであることも考えられる。入力されてくる画像データを読み込み中又はストリーミング中にもう処理するという、本発明によるCNNのアーキテクチャと初期層42への分散により、追加のハードウェアモジュール56は必ずしも必要ないが、それにより処理を高速化したり、それを用いてより複雑なCNNを使用したりできる。
図6ではCNNのいくつかの更なる層58が外に出て追加のハードウェアモジュール56上に置かれている。代わりに、更なる層44を完全にCPU32からそこへ移動させたり、その追加のハードウェアモジュール56が別の課題のために少なくとも1つの独自のCNNを処理したりする。追加のハードウェアモジュール56からメモリ34への専用のアクセスを設けてもよい。
【0072】
図7は本発明の別の実施形態における評価ユニット26による画像センサ24からの画像データストリームの処理を示している。今度は初期層42の特徴マップにアクセスする2つのCNN60、62が設けられている。CNN60、62の一方は他の実施形態における更なる層44に相当するものとすることができる。つまり、例えば異なるコード形式を読み取るために2つの異なるCNN60、62ができるが、それらは初期層42の第1の部分においては一致している。一変形例では、達成された初期層42の訓練状態が固定され、その後のCNN60、62の異なる訓練のための出発点としてそれぞれ用いられる。別の変形例では初期層42が、拡張された訓練に取り込まれる。つまり、初期層42がCNN60、62のそれぞれの訓練の際に更に変化することができる。更に、CPU32が古典的な復号法により初期層42の特徴マップを利用してコード部分を見出し、以て更なる層44又はCNN60、62の代わりとなる又はそれらを補うようにすることも考えられる。なお、これは
図7の実施形態だけでなく他の実施形態にも当てはまる。