JP7089179B2 - 画像認識装置、画像認識方法および画像認識プログラム - Google Patents

画像認識装置、画像認識方法および画像認識プログラム Download PDF

Info

Publication number
JP7089179B2
JP7089179B2 JP2018161464A JP2018161464A JP7089179B2 JP 7089179 B2 JP7089179 B2 JP 7089179B2 JP 2018161464 A JP2018161464 A JP 2018161464A JP 2018161464 A JP2018161464 A JP 2018161464A JP 7089179 B2 JP7089179 B2 JP 7089179B2
Authority
JP
Japan
Prior art keywords
data elements
elements
blocks
image recognition
sorting
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2018161464A
Other languages
English (en)
Other versions
JP2020035195A (ja
Inventor
卓也 深貝
京祐 前田
晃一 白幡
安基 富田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2018161464A priority Critical patent/JP7089179B2/ja
Priority to US16/543,668 priority patent/US11080812B2/en
Publication of JP2020035195A publication Critical patent/JP2020035195A/ja
Application granted granted Critical
Publication of JP7089179B2 publication Critical patent/JP7089179B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features
    • G06V10/44Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components
    • G06V10/443Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components by matching or filtering
    • G06V10/449Biologically inspired filters, e.g. difference of Gaussians [DoG] or Gabor filters
    • G06V10/451Biologically inspired filters, e.g. difference of Gaussians [DoG] or Gabor filters with interaction between the filter responses, e.g. cortical complex cells
    • G06V10/454Integrating the filters into a hierarchical structure, e.g. convolutional neural networks [CNN]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/70Determining position or orientation of objects or cameras
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/764Arrangements for image or video recognition or understanding using pattern recognition or machine learning using classification, e.g. of video objects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/82Arrangements for image or video recognition or understanding using pattern recognition or machine learning using neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/94Hardware or software architectures specially adapted for image or video understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/10Segmentation; Edge detection
    • G06T7/11Region-based segmentation

Description

本発明は画像認識装置、画像認識方法および画像認識プログラムに関する。
入力画像の中から物体が写った位置と物体の種類とを検出する画像認識の技術がある。画像認識には、予め学習しておいた畳み込みニューラルネットワークなどのニューラルネットワークを使用することがある。例えば、R-CNN(Regions with Convolutional Neural Network)やFast R-CNNなどの技術が提案されている。
なお、入力画像に写った移動物や静止物の数を算出する視覚装置が提案されている。提案の視覚装置は、入力画像からエッジ情報を抽出し、エッジ情報によって区切られる領域を背景から分離し、分離した各領域のサイズおよび位置に基づいて、物体が写った領域を判定してカウントする。また、入力画像の中から重要性の高い顕著領域を検出する顕著性情報取得装置が提案されている。提案の顕著性情報取得装置は、入力画像に複数の候補領域を設定し、局所的情報に基づいてピクセル毎のローカル特徴量を算出し、入力画像全体に対する各候補領域の特徴を示すグローバル特徴量を算出する。顕著性情報取得装置は、ローカル特徴量とグローバル特徴量に基づいて各候補領域を評価する。
特開2001-148023号公報 特開2017-4480号公報
Ross Girshick, Jeff Donahue, Trevor Darrell and Jitendra Malik, "Rich feature hierarchies for accurate object detection and semantic segmentation", Proceedings of the 2014 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pp.580-587, June 2014 Ross Girshick, "Fast R-CNN", Proceedings of the 2015 IEEE International Conference on Computer Vision (ICCV), pp.1440-1448, December 2015 Shaoqing Ren, Kaiming He, Ross Girshick and Jian Sun, "Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks", Proceedings of the Advances in Neural Information Processing Systems 28 (NIPS 2015), pp.91-99, December 2015
画像認識の過程では、物体が写っている可能性のある多数の候補領域を抽出し、各候補領域の評価値を算出し、評価値が高い候補領域を選択するという領域選択を行うことがある。その際、候補領域を示すデータ要素を評価値の順にソート(整列)することがある。候補領域が多い場合、候補領域のソート処理は負荷の高い処理となる。
一方、画像認識には、多数の演算部を有しており多数のスレッドを並列に実行可能なGPU(Graphics Processing Unit)やGPGPU(General Purpose Graphics Processing Unit)などの画像処理用演算処理装置を使用することがある。しかし、CPU(Central Processing Unit)が実行する少数のスレッドのもとで総計算量を低減することを重視する伝統的なソートアルゴリズムでは、画像処理用演算処理装置を活用して候補領域のソート処理を高速化することが難しいという問題がある。
1つの側面では、本発明は、画像認識を高速化できる画像認識装置、画像認識方法および画像認識プログラムを提供することを目的とする。
1つの態様では、複数の演算部を含む演算処理装置と、画像の中から検出された複数の候補領域に対応して、それぞれが候補領域の位置および評価値を示す複数のデータ要素を記憶する記憶部とを有する画像認識装置が提供される。演算処理装置は、複数のデータ要素それぞれのソート後の順位を示すインデックスを、当該データ要素の評価値および少なくとも一部の他のデータ要素の評価値を参照して、複数の演算部を用いて並列に算出し、インデックスの算出後、複数の演算部を用いて、インデックスに基づいて複数のデータ要素を並列に移動させることで、複数のデータ要素をソートする。演算処理装置は、ソート後の複数のデータ要素の順序に基づいて、複数の候補領域の中から一部の候補領域を選択する。また、1つの態様では、画像認識装置が実行する画像認識方法が提供される。また、1つの態様では、コンピュータに実行させる画像認識プログラムが提供される。
1つの側面では、画像認識を高速化できる。
第1の実施の形態の画像認識装置の例を説明する図である。 画像認識装置のハードウェア例を示すブロック図である。 GPUのハードウェア例を示すブロック図である。 画像認識の流れの例を示す図である。 認識結果の例を示す図である。 画像認識装置の機能例を示すブロック図である。 画像認識の手順例を示すフローチャートである。 物体候補領域選択の手順例を示すフローチャートである。 スコア付き位置データのソート例を示す図である。 第1段階ソートの例を示す図である。 第2段階ソートの例を示す図である。 グループ内のソート例を示す図である。 グループ間のソート例を示す図である。 第1段階ソートのスレッド実行例を示す図である。 第2段階ソートのスレッド実行例を示す図である。 GPUにおけるメモリ使用例を示す図である。 GPUにおけるメモリ使用例を示す図(続き)である。 物体候補領域ソートの手順例を示すフローチャートである。 物体候補領域ソートの手順例を示すフローチャート(続き)である。 第2段階ソートの第1の変形例を示す図である。 第2段階ソートの第2の変形例を示す図である。 スコア付き位置データのNMS処理例を示す図である。 NMS処理の逐次実行の手順例を示すフローチャートである。 ビットマップの例を示す図である。 重複判定のスキップ例を示す図である。 ビットマップの集計例を示す図である。 NMS処理の並列実行の手順例を示すフローチャートである。 NMS処理の並列実行の手順例を示すフローチャート(続き)である。 ソートとNMS処理の実行時間例を示すグラフである。 画像認識の実行時間例を示すグラフである。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態の画像認識装置の例を説明する図である。
第1の実施の形態の画像認識装置10は、画像を受け付け、受け付けた画像の中から物体が写った位置と物体の種類とを検出する。画像認識装置10は、携帯情報端末や車載装置などのクライアント装置でもよいし、遠隔の撮像装置やクライアント装置や他のサーバ装置などとネットワークを介して通信するサーバ装置でもよい。分析対象の画像は、直前に撮像されたものでもよいし蓄積されたものでもよい。
画像認識装置10は、演算処理装置11および記憶部12を有する。
演算処理装置11は、演算部11-1~11-8を含む複数の演算部を有する。演算部11-1~11-8は、並列にスレッドを実行可能な演算コアである。好ましくは、演算処理装置11は、数千個以上の多数のスレッドを並列に実行可能である。例えば、演算部11-1~11-8は、GPUに含まれる演算コアである。なお、パイプライン処理技術などにより1つの演算部が2以上の論理スレッドを実行することもある。
記憶部12は、データ要素13-1~13-8を含む複数のデータ要素を記憶する。データ要素13-1~13-8は、レコードやエントリや単位データなどと言うこともできる。記憶部12は、例えば、半導体メモリであり、GPUに含まれてもよい。データ要素13-1~13-8は、画像の中から抽出された候補領域に対応する。異なるデータ要素は異なる候補領域に対応している。候補領域は、検出すべき物体が写っている可能性がある画像領域である。例えば、画像の中から候補領域が抽出され、抽出された候補領域の評価値が画像の特徴情報に基づいて算出される。
データ要素13-1~13-8はそれぞれ、候補領域の位置および評価値を含む。位置は、画像の中の候補領域の場所を示す。候補領域が矩形である場合、例えば、位置は左上の頂点のX座標およびY座標と右下の頂点のX座標およびY座標とによって表現できる。また、例えば、位置は左上の頂点のX座標およびY座標と幅と高さとによって表現できる。評価値は、スコアや指標値と言うこともできる。例えば、評価値が大きいほど、候補領域の評価が高く、検出すべき物体が写っている可能性が高いことを示す。
データ要素13-1~13-8が生成された時点では、データ要素13-1~13-8は評価値の順にソートされていない。一方、1つの画像からは数千個以上の多数の候補領域が抽出される可能性があり、数千個以上の多数のデータ要素が記憶部12に格納される可能性がある。そこで、演算処理装置11は、後の画像認識処理において候補領域を絞り込むため、データ要素13-1~13-8を評価値の順にソート(整列)する。例えば、演算処理装置11は、評価値の高い順(降順)にデータ要素をソートする。
データ要素13-1~13-8のソートにあたり、演算処理装置11は、演算部11-1~11-8を用いて並列にインデックス14-1~14-8を算出する。インデックス14-1~14-8は、データ要素13-1~13-8のソート後の順位を示す。インデックス14-1~14-8を位置情報と言うこともできる。あるデータ要素のインデックスは、当該データ要素の評価値と少なくとも一部の他のデータ要素の評価値との比較に基づいて算出される。異なるデータ要素のインデックスを、異なる演算部のスレッドによって算出することも可能である。ただし、1つの演算部が数個の論理スレッドによって数個のインデックスを算出することもある。すなわち、演算部とデータ要素の関係は、1対1であってもよいし1対多であってもよい。
例えば、データ要素の集合の中で、データ要素13-1は現在1番目である。データ要素13-2は2番目であり、データ要素13-3は3番目であり、データ要素13-4は4番目であり、データ要素13-5は5番目であり、データ要素13-6は6番目であり、データ要素13-7は7番目であり、データ要素13-8は8番目である。
演算部11-1は、データ要素13-1の評価値と他のデータ要素の評価値との比較により、データ要素13-1に対応するインデックス14-1として「7」を算出する。インデックス14-1の算出は、例えば、データ要素13-1よりも評価値が高い他のデータ要素をカウントすることにより実現される。
演算部11-2は、データ要素13-2に対応するインデックス14-2として「6」を算出する。演算部11-3は、データ要素13-3に対応するインデックス14-3として「3」を算出する。演算部11-4は、データ要素13-4に対応するインデックス14-4として「2」を算出する。演算部11-5は、データ要素13-5に対応するインデックス14-5として「1」を算出する。演算部11-6は、データ要素13-6に対応するインデックス14-6として「5」を算出する。演算部11-7は、データ要素13-7に対応するインデックス14-7として「4」を算出する。演算部11-8は、データ要素13-8に対応するインデックス14-8として「0」を算出する。なお、インデックス14-1~14-8は0から始まる整数である。
インデックス14-1~14-8の算出が終わるまで、データ要素13-1~13-8は実際には移動されない。インデックス14-1~14-8が算出された後、演算処理装置11は、演算部11-1~11-8を用いて、インデックス14-1~14-8に基づいてデータ要素13-1~13-8を並列に移動させる。すなわち、ソート後の順位を算出するフェーズとデータ要素を移動するフェーズとが分離され、各フェーズ内では異なるデータ要素の処理が複数の演算部により並列に実行される。
その結果、ソート後のデータ要素の集合の中で、データ要素13-8は1番目になる。データ要素13-5は2番目になり、データ要素13-4は3番目になり、データ要素13-3は4番目になり、データ要素13-7は5番目になり、データ要素13-6は6番目になり、データ要素13-5は7番目になり、データ要素13-1は8番目になる。なお、データ要素13-1~13-8の移動は、ソート前のデータ要素13-1~13-8が記憶されていた記憶領域に一斉に上書きすることで行ってもよい。また、データ要素13-1~13-8の移動は、ソート前のデータ要素13-1~13-8とは異なる記憶領域に保存して元の記憶領域のデータ要素を削除することで行ってもよい。
データ要素13-1~13-8がソートされると、演算処理装置11は、ソート後のデータ要素13-1~13-8の順序に基づいて、複数の候補領域の中から一部の候補領域を選択する。例えば、演算処理装置11は、評価値が大きい方から所定数の候補領域を選択して、画像認識処理における次段の処理に渡す。次段の処理には、例えば、2つの候補領域の重なりが大きい場合に評価値が小さい方の候補領域を削除する重複除去が含まれる。画像認識装置10は、最終的に少数の領域を選択して各領域に写った物体の種類を判定し、認識結果を出力する。例えば、画像認識装置10は、領域を示す図形および物体の種類を示す文字列を元の画像にマッピングし、認識結果付き画像を表示させる。
第1の実施の形態の画像認識装置10によれば、画像認識の過程において、画像から検出された候補領域の位置および評価値を示す複数のデータ要素に対して、ソート後の順位を示すインデックスが複数の演算部を用いて並列に算出される。インデックスが算出されると、算出されたインデックスに基づいてそれら複数のデータ要素が、複数の演算部を用いて一斉に移動される。そして、ソート後の複数のデータ要素の順序に基づいて、画像から検出された複数の候補領域のうちの一部の候補領域が選択される。
これにより、GPUなど多数のスレッドを並列実行可能な演算処理装置を活用して、候補領域を示すデータ要素のソートを実行することができる。よって、画像認識の中で比較的負荷の高いソート処理を高速化でき、画像認識を高速化することができる。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
第2の実施の形態の画像認識装置100は、ニューラルネットワークを用いて、入力画像の中から物体の位置および種類を判定する画像認識を行う。画像認識装置100は、例えば、カメラ映像の中から車両や歩行者を検出する交通監視システムや都市監視システムなどに用いることが可能である。画像認識装置100を情報処理装置やコンピュータと言うこともできる。画像認識装置100は、クライアント装置でもサーバ装置でもよい。
図2は、画像認識装置のハードウェア例を示すブロック図である。
画像認識装置100は、バスに接続されたCPU101、RAM(Random Access Memory)102、HDD(Hard Disk Drive)103、GPU104、画像信号処理部105、入力信号処理部106、媒体リーダ107および通信インタフェース108を有する。画像認識装置100は、第1の実施の形態の画像認識装置10に対応する。
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。RAM102は、CPU101が実行するプログラムやCPU101が演算に使用するデータを一時的に記憶する揮発性の半導体メモリである。CPU101は、GPU104を利用するプログラムに従って、RAM102からGPU104に入力データを転送させ、GPU104にデータ処理を実行させ、GPU104からRAM102に結果データを転送させることがある。
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性記憶装置である。なお、画像認識装置100は、フラッシュメモリやSSD(Solid State Drive)など他の種類の記憶装置を備えてもよく、複数の記憶装置を備えてもよい。
画像信号処理部105は、CPU101からの命令に従って、画像認識装置100に接続されたディスプレイ111に画像を出力する。ディスプレイ111としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを使用することができる。
入力信号処理部106は、画像認識装置100に接続された入力デバイス112から入力信号を受信する。入力デバイス112として、マウス、タッチパネル、タッチパッド、キーボードなど、任意の種類の入力デバイスを使用できる。また、画像認識装置100に複数の種類の入力デバイスが接続されてもよい。
媒体リーダ107は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。媒体リーダ107は、例えば、記録媒体113から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
通信インタフェース108は、ネットワーク114に接続され、ネットワーク114を介して他の情報処理装置と通信を行うインタフェースである。通信インタフェース108は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースでもよいし、基地局やアクセスポイントに接続される無線通信インタフェースでもよい。
図3は、GPUのハードウェア例を示すブロック図である。
GPU104は、グローバルメモリ123、スケジューラ124、および、複数のストリーミングマルチプロセッサ(SM:Streaming Multi-Processor)であるストリーミングマルチプロセッサ121-1,121-2,…,121-nを有する。
グローバルメモリ123は、ストリーミングマルチプロセッサ121-1,121-2,…,121-nによって共有される揮発性の半導体メモリである。CPU101の命令に従い、RAM102からグローバルメモリ123に入力データが転送され、グローバルメモリ123からRAM102に結果データが転送される。また、グローバルメモリ123からストリーミングマルチプロセッサ121-1,121-2,…,121-nにデータが読み込まれ、ストリーミングマルチプロセッサ121-1,121-2,…,121-nからグローバルメモリ123にデータが書き出される。
スケジューラ124は、ストリーミングマルチプロセッサ121-1,121-2,…,121-nによるスレッドの実行をスケジュールする。スケジューラ124は、グローバルメモリ123に記憶されたデータをブロックと呼ばれる単位に分割し、1つのブロックに1つのストリーミングマルチプロセッサを割り当てる。スケジューラ124は、ストリーミングマルチプロセッサ121-1,121-2,…,121-nに担当のブロックを読み込ませ、複数のスレッドにより担当のブロックを処理させる。
ストリーミングマルチプロセッサ121-1は、複数のスレッドを起動し、これら複数のスレッドを用いてブロック内のデータを並列に処理するマルチプロセッサである。ストリーミングマルチプロセッサは、複数のストリーミングプロセッサ(SP:Streaming Processor)および共有メモリ122-1を有する。ストリーミングマルチプロセッサ121-2,…,121-nも同様のハードウェアを有する。
ストリーミングプロセッサは、スレッドを実行するプロセッサコアである。ストリーミングマルチプロセッサ121-1のストリーミングプロセッサは、共有メモリ122-1からデータを読み出し、データを処理し、共有メモリ122-1にデータを書き込む。
第2の実施の形態では、ストリーミングマルチプロセッサ121-1,121-2,…,121-nはそれぞれ1024個のスレッドを並列に実行できるものとする。ただし、最大スレッド数は512や2048など他の数字であってもよい。各ストリーミングプロセッサはパイプライン処理を行うことから、ここで言うスレッド数は論理スレッド数であり、ストリーミングマルチプロセッサ121-1が有するストリーミングプロセッサの数は最大スレッド数である1024より少なくてよい。すなわち、1つのストリーミングプロセッサが2個以上の数個のスレッドを実行することがある。
共有メモリ122-1は、ストリーミングマルチプロセッサ121-1が有する複数のストリーミングプロセッサによって共有される揮発性の半導体メモリである。共有メモリ122-1は、ストリーミングマルチプロセッサ121-1のローカルメモリであり、グローバルメモリ123よりも記憶容量が少なくてよい。ストリーミングマルチプロセッサ121-1は、担当のブロックをグローバルメモリ123から共有メモリ122-1に読み込み、処理結果を共有メモリ122-1からグローバルメモリ123に書き出す。
次に、画像認識の流れについて説明する。
図4は、画像認識の流れの例を示す図である。
画像認識装置100が使用する画像認識モデルは、畳み込みニューラルネットワーク層(CNN層)33、物体領域予測ネットワーク層(RPN(Region Proposal Network)層)35および高速R-CNN層37を含む。画像認識装置100は、入力画像に対して前処理31を行い、前処理後の入力画像32をCNN層33に入力する。画像認識装置100は、CNN層33が出力する特徴マップ34をRPN層35に入力する。画像認識装置100は、RPN層35が出力する物体候補領域36と上記の特徴マップ34を高速R-CNN層37に入力する。これにより認識結果38が得られる。
前処理31は、入力画像のサイズや輝度を調整して、CNN層33に入力可能な入力画像32を生成する。例えば、前処理31は、500×375ピクセルの入力画像を800×600ピクセルに変換し、画像全体の平均輝度を引き下げる。前処理31が出力する入力画像32は、例えば、幅800ピクセル×高さ600ピクセルのサイズをもち、RGB(Red Green Blue)3チャネルをもつカラー画像である。
CNN層33は、予め重みが学習された畳み込みニューラルネットワークを用いて、入力画像32から特徴マップ34を生成する。CNN層33は、13個の畳み込み層と4個のプーリング層と3個の全結合層を含むディープニューラルネットワークをもつ。畳み込み層は、所定のフィルタを用いてエッジなどの特徴情報を抽出する。プーリング層は、画像の一辺の長さを半分にして画像サイズを縮小する。全結合層は、畳み込み層やプーリング層の出力を集約して特定の変数の値を算出する。特徴マップ34は、例えば、幅50ピクセル×高さ38ピクセルのサイズをもち、512チャネルをもつ。
RPN層35は、特徴マップ34を用いて、入力画像32の中から検出すべき物体が存在する可能性のある画像領域である物体候補領域36を検出する。RPN層35は、入力画像32上で位置やサイズの異なる多数の矩形領域を物体候補領域として設定し、特徴マップ34に基づいて各物体候補領域のスコアを算出する。スコアは評価値や信頼度と言うこともできる。スコアは物体候補領域に所望の物体が写っている確率を示し、所望の物体が写っている可能性が高いほどスコアが高くなる。RPN層35は、まず6000個を超える多数の物体候補領域を抽出し、スコアが高い上位6000個の物体候補領域を選択し、重複度が大きい物体候補領域を除去し、最終的に300個の物体候補領域を出力する。
高速R-CNN層37は、特徴マップ34および物体候補領域36に基づいて、各物体候補領域に写っている物体の種類を判定し、判定結果の信頼度を示すスコアを算出する。高速R-CNN層37は、スコアが十分に高い少数の画像領域を選択する。高速R-CNN層37が出力する認識結果38は、選択した画像領域の位置と、判定した物体の種類と、写っている物体が当該種類である可能性を示すスコアとを含む。
画像認識装置100は、認識結果38を元の入力画像にマッピングしてディスプレイ111に表示することも可能である。例えば、画像認識装置100は、入力画像32上での矩形領域を、前処理31を行う前の元の入力画像上での矩形領域に変換し、矩形領域を囲む枠線と物体の種類およびスコアを示す文字列とを元の入力画像に重ねて表示する。
図5は、認識結果の例を示す図である。
画像41は、RPN層35が出力する物体候補領域を示す枠線を、入力画像に重ねて表示したものである。RPN層35は1枚の入力画像に対して300個の物体候補領域を出力するが、図5の例では理解を容易にするため少数の物体候補領域のみを表示している。画像41には、検出対象となる物体として自動車、犬、馬および2人の人間が写っている。なお、図5の例では地面や森林などの背景を省略している。画像41では、検出対象となる物体を正確に切り出す矩形領域である正解の物体候補領域に加えて、その周辺に位置やサイズの異なる複数の物体候補領域が抽出されている。RPN層35の中では、このような物体候補領域に加えて、スコアの小さい多数の物体候補領域も一時的に抽出される。
画像42は、高速R-CNN層37が出力する認識結果38を、入力画像に重ねて表示したものである。画像42に表示された枠線は、画像41に表示された物体候補領域の枠線のうちスコアが高い一部の物体候補領域の枠線である。各枠線の近くには、判定された物体の種類およびスコアを示す文字列が表示される。図5の例では、自動車、犬、馬および2人の人間が正しく検出されている。自動車のスコアは1.000、犬のスコアは0.958、馬のスコアは0.999、手前に写っている人間のスコアは0.999、奥に写っている人間のスコアは0.988と算出されている。
次に、画像認識装置100の機能について説明する。画像認識装置100は、できる限りGPU104を活用して一連の画像認識処理を行う。
図6は、画像認識装置の機能例を示すブロック図である。
画像認識装置100は、画像記憶部131、中間データ記憶部132、前処理部133、特徴マップ生成部134、物体候補領域生成部135、物体推定部136および認識結果表示部137を有する。画像記憶部131および中間データ記憶部132は、RAM102またはGPU104のグローバルメモリ123を用いて実現される。前処理部133、特徴マップ生成部134、物体候補領域生成部135、物体推定部136および認識結果表示部137は、CPU101またはGPU104のストリーミングマルチプロセッサ121-1,121-2,…,121-nが実行するプログラムを用いて実現される。
画像記憶部131は、入力画像を記憶する。入力画像は、画像認識装置100に接続された撮像装置によって撮像されたものでもよい。また、入力画像は、ユーザによって画像認識装置100に入力されたものでもよいし、ネットワーク114を介して画像認識装置100が他の情報処理装置から受信したものでもよい。中間データ記憶部132は、画像認識の過程で使用する中間データを記憶する。後述するように、中間データには、物体候補領域の位置およびスコアを示すスコア付き位置データが含まれる。また、中間データには、重複度の大きい物体候補領域を検出するためのビットマップが含まれる。
前処理部133は、前述の前処理31を実行する。前処理部133は、画像記憶部131に記憶された入力画像のサイズや輝度を補正する。特徴マップ生成部134は、前述のCNN層33に対応する。特徴マップ生成部134は、前処理を行った入力画像を、予め学習しておいた畳み込みニューラルネットワークに入力し、特徴マップを生成する。
物体候補領域生成部135は、前述のRPN層35に対応する。物体候補領域生成部135は、スコア算出部138および選択部139を有する。
スコア算出部138は、入力画像から複数の物体候補領域を抽出し、各物体候補領域のスコアを算出する。選択部139は、複数の物体候補領域に対応する複数の要素を有し、各要素は物体候補領域の位置およびスコアを含むスコア付き位置データを組み立てる。選択部139は、物体候補領域を絞り込む。選択部139は、スコア付き位置データの要素をスコアの高い順(降順)にソートし、スコアの高い方から6000個の要素を選択する。選択部139は、NMS(Non-Maximum Suppression)処理により、重なりが大きい2以上の物体候補領域のうちの1つを残して他を削除する。選択部139は、残った要素のうちスコアの高い方から300個の要素を選択して出力する。
物体推定部136は、前述の高速R-CNN層37に対応する。物体推定部136は、物体候補領域生成部135が出力するスコア付き位置データと特徴マップ生成部134が出力する特徴マップとに基づいて、物体が写った矩形領域と物体の種類を判定し、判定の信頼度を示すスコアを算出する。物体推定部136は、スコアに基づいて矩形領域を絞り込み、矩形領域の位置と物体の種類とスコアを示す認識結果を出力する。認識結果表示部137は、物体推定部136が出力する認識結果をディスプレイ111に表示する。例えば、認識結果表示部137は、入力画像に認識結果をマッピングし、検出した領域を囲む枠線と物体の種類およびスコアを示す文字列とを入力画像に重ねて表示する。
図7は、画像認識の手順例を示すフローチャートである。
(S10)前処理部133は、入力画像を前処理する。前処理には、入力画像の幅のピクセル数および高さのピクセル数を、畳み込みニューラルネットワークの仕様に合わせて変更することが含まれる。また、前処理には、入力画像の平均輝度が一定になるように、入力画像の各ピクセルの輝度を全体的にシフトさせる。
(S11)特徴マップ生成部134は、ステップS10で前処理した入力画像を畳み込みニューラルネットワークに入力し、入力画像の特徴を示す特徴マップを生成する。畳み込みニューラルネットワークの中の重みはサンプル画像を用いて予め学習されている。
(S12)物体候補領域生成部135のスコア算出部138は、検出対象の物体が写っている可能性のある物体候補領域を入力画像の中から抽出する。スコア算出部138は、特徴マップを用いて、抽出した物体候補領域のスコアを算出する。例えば、スコア算出部138は、入力画像の中に16ピクセル間隔で50×38個の基準点を配置し、基準点毎に当該基準点を中心としてサイズの異なる9個の矩形をアンカーとして配置し、合計で17100個のアンカーを得る。スコア算出部138は、特徴マップに基づいて、アンカーを微調整して物体候補領域とすると共に、各物体候補領域のスコアを算出する。
(S13)物体候補領域生成部135の選択部139は、ステップS12で抽出された物体候補領域を、スコアおよび相互の位置関係に基づいて300個に絞り込んで選択する。物体候補領域選択の詳細は後述する。
(S14)物体推定部136は、ステップS11で生成された特徴マップとステップS13で選択された物体候補領域から、物体の位置と種類を推定する。この際、推定の信頼度を示すスコアが算出される。物体の位置は、選択された物体候補領域の何れかである。
(S15)認識結果表示部137は、物体の位置と種類とスコアを含む認識結果を表示する。例えば、認識結果表示部137は、物体の位置を示す枠線と物体の種類およびスコアを示す文字列を、元の入力画像に重ねてディスプレイ111に表示する。
図8は、物体候補領域選択の手順例を示すフローチャートである。
物体候補領域選択は、上記のステップS13で実行される。
(S20)選択部139は、スコア付き位置データを組み立てる。スコア付き位置データは、ステップS12で抽出された複数の物体候補領域に対応する複数の要素を含み、各要素は物体候補領域の位置座標とスコアを含むデータ集合である。この時点では、スコア付き位置データの要素はまだソートされていない。
(S21)選択部139は、入力画像の端周辺にある物体候補領域について入力画像の外側に出ている部分が存在する場合、その部分の領域をクリッピングする。すなわち、選択部139は、入力画像の外側に突出している部分を物体候補領域から削る。選択部139は、クリッピングに伴い位置座標を再計算してスコア付き位置データを更新する。
(S22)選択部139は、小さ過ぎる辺をもつ物体候補領域を検索し、該当する物体候補領域を示す要素をスコア付き位置データから削除する。該当する物体候補領域は、長細い形状の矩形領域であり、幅または高さが閾値以下のものである。ただし、スコア付き位置データからの要素の削除は、要素が無効であることを示す所定の値をスコアに設定することによって行うことができる。所定の値として、例えば、float型の最小値を用いる。これにより、スコア付き位置データの要素がその都度移動することを抑制できる。ステップS21,S22の処理は、スコア付き位置データの要素毎に独立しているため、GPU104を用いて、1つの要素に1つのスレッドを割り当てて並列化できる。
(S23)選択部139は、スコア付き位置データに含まれる複数の要素をスコアの高い順(降順)にソートする。ソート処理の詳細は後述する。
(S24)選択部139は、ソート後のスコア付き位置データから、6000位より後の要素を削除する。上位6000個の要素の選択は、6000位より後の要素を無視するだけでよい。これにより、スコアの高い6000個の物体候補領域が選択される。
(S25)選択部139は、上位6000個の物体候補領域に対してNMS処理を行う。NMS処理は、ある物体候補領域に対して、当該物体候補領域と重複する部分領域の面積が大きく当該物体候補領域よりもスコアの小さい他の物体候補領域が存在する場合、当該他の物体候補領域を削除する処理である。このような他の物体候補領域は、物体が写った正しい矩形領域から若干ずれた矩形領域であることが多いため削除する。選択部139は、該当する物体候補領域を示す要素をスコア付き位置データから削除する。ただし、スコア付き位置データからの要素の削除は、要素が無効であることを示す所定の値をスコアに設定することによって行うことができる。NMS処理の詳細は後述する。
(S26)選択部139は、スコア付き位置データの中に無効化された要素が含まれている場合、すなわち、スコアの値が無効を示している要素が存在する場合、無効な要素の記憶領域を詰めていくパッキングを行う。これにより、有効な要素がスコア順に連続して記憶される。ある要素のパッキング後の位置は、現在位置と当該要素より前に存在する無効な要素の数とから算出できる。そこで、パッキングは、GPU104を用いて、1つの要素に1つのスレッドを割り当てて並列化することができる。GPU104の複数のスレッドが各要素のパッキング後の位置を示すインデックスを計算し、インデックスの計算が終わってから複数の要素を一斉に移動させる。そして、選択部139は、スコア付き位置データから300位より後の要素を削除する。上位300個の要素の選択は、300位より後の要素を無視するだけでよい。これにより、300個の物体候補領域が選択される。
次に、ステップS23のソート処理の効率化について説明する。
図9は、スコア付き位置データのソート例を示す図である。
スコア付き位置データ141は、物体候補領域を示す要素の集合であり、中間データ記憶部132に記憶される。要素はレコードやエントリや単位データなどと言うこともできる。スコア付き位置データ141に含まれる各要素は、スコア、最小X座標、最小Y座標、最大X座標および最大Y座標を含む。最小X座標は、矩形の物体候補領域の左上の頂点のX座標である。最小Y座標は、左上の頂点のY座標である。最大X座標は、右下の頂点のX座標である。最大Y座標は、右下の頂点のY座標である。ただし、要素は物体候補領域の位置を特定できればよく、最小X座標、最小Y座標、最大X座標および最大Y座標に代えて、最小X座標、最小Y座標、幅および高さなどを用いてもよい。
物体候補領域生成部135の選択部139は、スコア付き位置データ141の要素をスコアの高い順にソートする。図9の例において、ソート前のスコア付き位置データ141では、スコアが0.9の要素、0.01の要素、0.02の要素、0.7の要素のように複数の要素がスコアと無関係な順序で並んでいる。これに対して、ソート後のスコア付き位置データ141では、スコアが0.9の要素、0.7の要素、0.02の要素、0.01の要素のように複数の要素がスコアの高い順に並んでいる。
選択部139は、GPU104が並列に実行する多数のスレッドを利用してスコア付き位置データの要素をソートする。ソートアルゴリズムは第1段階と第2段階を含む。
図10は、第1段階ソートの例を示す図である。
選択部139は、スコア付き位置データの要素集合をブロックに分割する。1つのブロックは、1つのストリーミングマルチプロセッサが並列実行可能なスレッドの数に相当する個数の要素を含む。よって、1つの要素に1つのスレッドを割り当てることになる。第2の実施の形態のGPU104の場合、1つのブロックは1024個の要素を含む。スコア付き位置データの要素数が1024で割り切れない場合、選択部139は、スコアが0のダミー要素を追加することで各ブロックの要素数を1024に揃える。要素数をn、ブロック数をNとすると、N=((n-1)/1024)+1である。
第1段階では、各ストリーミングマルチプロセッサがブロック内で1024個の要素をソートする。ここでは、あるストリーミングマルチプロセッサを用いてブロック142をソートすることを考える。第1段階では、選択部139は、ブロック142を最小のグループに分割してグループ内で要素をソートし、ソート済みの隣接する2つのグループを連結する(マージする)ことをグループの要素数が1024になるまで繰り返す。
第2の実施の形態では、最小のグループの要素数を8とする。最小のグループの要素数が少ないほど最初のステップの計算量が少なくなる一方、2つのグループを連結していくステップ数が増える。最小のグループの要素数が多いほど最初のステップの計算量が多くなる一方、2つのグループを連結していくステップ数が減る。本出願の発明者は、ブロックサイズが1024のもとで、最小のグループの要素数を8とするのが最適と判断した。
そこで、選択部139は、ブロック142を128個のグループに分割する。1つのグループに属する要素は、ブロック142の中で連続している8個の要素である。選択部139は、ブロック142の先頭から順に8個ずつ要素を選択していけばよい。また、選択部139は、同一のストリーミングマルチプロセッサで並列実行される1024個のスレッドを、ブロック142に含まれる1024個の要素に1対1に割り当てる。選択部139は、1024個のスレッドを用いて並列に、128個のグループそれぞれの中で8個の要素をスコアの高い順にソートする。グループ内ソートの詳細は後述する。
8要素グループのソートが終わると、選択部139は、隣接する2つの8要素グループを連結して64個の16要素グループを形成する。形成される16要素グループは、16個の要素がスコアの高い順にソートされたものである。128個の8要素グループの連結は、グループ内ソートと同様に、上記の1024個のスレッドを用いて並列に行われる。2つのソート済みグループを連結するグループ間ソートの詳細は後述する。
16要素グループが形成されると、選択部139は、隣接する2つの16要素グループを連結して32個の32要素グループを形成する。形成される32要素グループは、32個の要素がスコアの高い順にソートされたものである。64個の16要素グループの連結は、上記の1024個のスレッドを用いて並列に行われる。選択部139は、上記を繰り返してソート済みの1024要素グループを形成する。これにより、1つのストリーミングマルチプロセッサにおいてブロック142がソートされる。
図11は、第2段階ソートの例を示す図である。
第2段階では、1つのストリーミングマルチプロセッサが、ソート済みのN個のブロックを連結して、1024要素×6ブロック=6144個のソート済みの要素列を形成する。ソート処理の後段で選択部139は上位6000個の要素を選択することから、要素数nに関係なくスコアが高い6ブロック分の要素を抽出できればよい。ここでは、あるストリーミングマルチプロセッサを用いて、ソート済みのブロック142-1~142-7を連結して上位6144個のソート済み要素列を形成することを考える。
第2段階では、選択部139は、バブルソート方式によりスコアが高い要素から順に確定していく。選択部139は、2つのブロックを連結してソート済みの2048個の要素を形成する。選択部139は、2048個の要素のうちの上位1024個の要素を切り出し、他のブロックと連結してソート済みの2048個の要素を形成する。これを未処理のブロックがなくなるまで繰り返すことで、スコアの最も高い1024個の要素が抽出される。残りの要素群に対してもこれを繰り返すことで、スコアの高い順に1024要素ずつ確定していき、6回の繰り返しにより6144個のソート済みの要素列が完成する。
1つのストリーミングマルチプロセッサは1024個のスレッドを並列実行することができる。そこで、2つのブロックを連結するときは、選択部139は、一方のブロックに含まれる1024個の要素に1024個のスレッドを1対1に割り当て、これとは別に他方のブロックに含まれる1024個の要素に1024個のスレッドを1対1に割り当てる。そして、1024個のスレッドを2セット実行させる。
例えば、選択部139は、ブロック142-6,142-7を連結してソート済みの2048個の要素を形成する。選択部139は、この2048個の要素のうち下位1024個の要素を後に使用するブロックとして退避しておき、上位1024個の要素を抽出する。選択部139は、抽出した上位1024個の要素とブロック142-5とを連結してソート済みの2048個の要素を形成する。選択部139は、この2048個の要素のうち下位1024個の要素を後に使用するブロックとして退避しておき、上位1024個の要素を抽出する。以降、ブロック142-4、ブロック142-3、ブロック142-2と順に連結していき、ブロック142-1を連結して形成された2048個の要素のうち上位1024個の要素が、最もスコアの高い上位1024個の要素となる。
よって、選択部139は、ブロック142-1~142-7の7個のブロックに対して、2つのブロックを連結することを6回繰り返すことで上位1024要素を確定する。選択部139は、退避しておいた6個のブロックに対して同様の処理を行い、2つのブロックを連結することを5回繰り返すことで次の1024要素を確定する。このようにして、選択部139は、スコアが高い6ブロック分の要素を確定させる。
図12は、グループ内のソート例を示す図である。
グループ内ソートは、第1段階ソートにおいて同一グループ内の8個の要素をソートするときに行われる。ここでは、要素143-1~143-8の8個の要素が順に並んでいるとする。要素143-1~143-8に対して8個のスレッドが1対1に割り当てられる。各スレッドは要素143-1~143-8の全てを参照することができる。グループ内ソートは、インデックス計算と要素移動の2段階を含む。インデックス計算も要素移動も要素間で独立に実行できるため、並列化することができる。
インデックス計算では、各スレッドは、担当の要素のスコアと他の要素のスコアとを1つずつ比較していき、担当の要素よりもスコアの大きい他の要素をカウントする。ただし、担当の要素とスコアが同じ他の要素が存在する場合、担当の要素より前方に存在するものについてはカウントに含め、担当の要素より後方に存在するものについてはカウントに含めないようにする。これにより、スコアが同じ要素の間で順位の整合性を図る。担当の要素よりもスコアの大きい他の要素の数が、ソート後のインデックスになる。インデックスは、担当の要素の順位を示しており、0から始まる整数である。
例えば、要素143-2のスレッドは、要素143-3~143-8のスコアが要素143-2より大きいと判定し、インデックスを6と算出する。要素143-3のスレッドは、要素143-4,143-5,143-8のスコアが要素143-3より大きいと判定し、インデックスを3と算出する。なお、要素143-7のスコアは要素143-3と同じであるが、要素143-3の後方にあるためカウントに含めない。要素143-7のスレッドは、要素143-4,143-5,143-8のスコアが要素143-7より大きく、前方に存在する要素143-3のスコアが要素143-7と同じであると判定し、インデックスを4と算出する。これにより、要素143-1~143-8のインデックスが7,6,3,2,1,5,4,0と算出される。
全てのスレッドのインデックス計算が終了すると要素移動に遷移する。要素移動では、各スレッドは、先に計算したインデックスが示す記憶領域に担当の要素を一斉に移動させる。異なるスレッドが同じ記憶領域に書き込むことはないため、あるスレッドが他のスレッドの要素移動を待ち合わせなくてよい。例えば、要素143-2のスレッドは、インデックスが6であるため、要素143-7が記憶されていた7番目の記憶領域に要素143-2を上書きする。また、要素143-3のスレッドは、インデックスが3であるため、要素143-4が記憶されていた4番目の記憶領域に要素143-3を上書きする。これにより、要素143-8,143-5,143-4,143-3,143-7,143-6,143-2,143-1のようにスコアの大きい順にソートされる。
なお、要素移動では、ソート前の要素143-1~143-8が記憶されていた記憶領域にソート後の要素143-1~143-8を上書きする代わりに、他の記憶領域にソート後の要素143-1~143-8を格納するようにしてもよい。
図13は、グループ間のソート例を示す図である。
グループ間ソートは、第1段階ソートにおいてソート済みグループを連結するときや、第2段階ソートにおいてソート済みブロックを連結するときに行われる。ここでは、ソートされた要素144-1~144-8の8要素グループと、ソートされた要素145-1~145-8の8要素グループとを連結することを考える。要素144-1~144-8,145-1~145-8に対して16個のスレッドが1対1に割り当てられる。各スレッドは要素144-1~144-8,145-1~145-8の全てを参照することができる。グループ間ソートも、インデックス計算と要素移動の2段階を含む。インデックス計算も要素移動も要素間で独立に実行できるため、並列化することができる。
インデックス計算では、各スレッドは、担当の要素が属する要素集合(自データセット)での現在のインデックス(自インデックス)を確認する。自インデックスは、自データセットにおける担当の要素の順位を示す。また、各スレッドは、自データセットと連結する他の要素集合(他データセット)のうち担当の要素よりスコアが大きい要素の数(他インデックス)を算出する。他インデックスは、仮に担当の要素を他データセットに挿入する場合の挿入位置を示している。他データセットはソート済みであるため、他データセットの全要素と比較しなくてよく、二分探索により他インデックスを算出できる。
二分探索では、担当の要素のスコアと他データセットの中央の要素のスコアとを比較する。前者の方が大きい場合、担当の要素のスコアと前半区間の中央の要素のスコアとを比較し、後者の方が大きい場合、担当の要素のスコアと後半区間の中央の要素のスコアとを比較する。これを繰り返すことで担当の要素の挿入位置を判定できる。なお、担当の要素とスコアが同じ要素が存在する場合、2つのデータセットのうち特定の一方のデータセットに存在するものについてはカウントに含め、他方のデータセットに存在するものについてはカウントに含めないようにする。これにより、スコアが同じ要素の間で順位の整合性を図る。例えば、要素144-1~144-8側についてはカウントに含め、要素145-1~145-8側についてはカウントに含めないようにする。
各スレッドは、自インデックスと他インデックスの合計を、連結ソート後の担当の要素の位置を示すインデックスとする。インデックスは、連結する2つのデータセットの中で担当の要素よりスコアの大きい要素の数を示しており、0から始まる整数である。例えば、要素144-2の自インデックスが1であり、他インデックスが1と算出されたとする。すると、要素144-2のインデックスは2になり、連結ソート後の要素144-2の順位が3位と判定される。また、要素145-2の自インデックスが1であり、他インデックスが2と算出されたとする。すると、要素145-2のインデックスは3になり、連結ソート後の要素145-2の順位が4位と判定される。
全てのスレッドのインデックス計算が終了すると要素移動に遷移する。要素移動では、各スレッドは、先に計算したインデックスが示す記憶領域に担当の要素を一斉に移動させる。異なるスレッドが同じ記憶領域に書き込むことはないため、あるスレッドが他のスレッドの要素移動を待ち合わせなくてよい。例えば、要素144-2のスレッドは、インデックスが2であるため、要素144-3が記憶されていた3番目の記憶領域に要素144-2を上書きする。また、要素145-2のスレッドは、インデックスが3であるため、要素144-4が記憶されていた4番目の記憶領域に要素145-2を上書きする。これにより、要素144-1~144-8,145-1~145-8がソートされる。
なお、要素移動では、ソート前の要素144-1~144-8,145-1~145-8が記憶されていた記憶領域にソート後の要素を上書きする代わりに、他の記憶領域にソート後の要素を格納するようにしてもよい。
図14は、第1段階ソートのスレッド実行例を示す図である。
ここでは、ストリーミングマルチプロセッサ121-1がスレッド161-1~161-1024の1024個のスレッドを実行して、同じブロックに属する要素#1~#1024の1024個の要素をソートすることを考える。
まず、スレッド161-1~161-1024は8要素グループの中でのグループ内ソートを行う。スレッド161-1~161-1024も実質的に8個ずつにグループ化されることになる。スレッド161-1は、要素#1~#8の中で要素#1のインデックスを算出して移動する。スレッド161-2は、要素#1~#8の中で要素#2のインデックスを算出して移動する。スレッド161-3は、要素#1~#8の中で要素#3のインデックスを算出して移動する。スレッド161-1024は、要素#1017~#1024の中で要素#1024のインデックスを算出して移動する。
次に、スレッド161-1~161-1024は隣接する8要素グループの間でグループ間ソートを行う。スレッド161-1~161-1024も実質的に16個ずつにグループ化されることになる。スレッド161-1は、要素#1~#16の中で要素#1のインデックスを算出して移動する。スレッド161-2は、要素#1~#16の中で要素#2のインデックスを算出して移動する。スレッド161-3は、要素#1~#16の中で要素#3のインデックスを算出して移動する。スレッド161-1024は、要素#1009~#1024の中で要素#1024のインデックスを算出して移動する。
次に、スレッド161-1~161-1024は隣接する16要素グループの間でグループ間ソートを行う。スレッド161-1~161-1024も実質的に32個ずつにグループ化されることになる。スレッド161-1は、要素#1~#32の中で要素#1のインデックスを算出して移動する。スレッド161-2は、要素#1~#32の中で要素#2のインデックスを算出して移動する。スレッド161-3は、要素#1~#32の中で要素#3のインデックスを算出して移動する。スレッド161-1024は、要素#993~#1024の中で要素#1024のインデックスを算出して移動する。
以下同様にして、スレッド161-1~161-1024は隣接する32要素グループの間でグループ間ソートを行う。スレッド161-1は、要素#1~#64の中で要素#1のインデックスを算出して移動する。次に、スレッド161-1~161-1024は隣接する64要素グループの間でグループ間ソートを行う。スレッド161-1は、要素#1~#128の中で要素#1のインデックスを算出して移動する。次に、スレッド161-1~161-1024は隣接する128要素グループの間でグループ間ソートを行う。スレッド161-1は、要素#1~#256の中で要素#1のインデックスを算出して移動する。次に、スレッド161-1~161-1024は隣接する256要素グループの間でグループ間ソートを行う。スレッド161-1は、要素#1~#512の中で要素#1のインデックスを算出して移動する。最後に、スレッド161-1~161-1024は2つの512要素グループの間でグループ間ソートを行う。スレッド161-1は、要素#1~#1024の中で要素#1のインデックスを算出して移動する。
図15は、第2段階ソートのスレッド実行例を示す図である。
ここでは、ストリーミングマルチプロセッサ121-1がスレッド161-1~161-1024の1024個のスレッドを実行して、バブルソート方式により2つのブロックの連結と上位ブロックの抽出とを繰り返すことを考える。
ストリーミングマルチプロセッサ121-1は、1つのブロックを要素#1~#1024として読み込み、他の1つのブロックを要素#1025~#2048として読み込む。
スレッド161-1は、要素#1~#2048の中で要素#1のインデックスを算出する。スレッド161-2は要素#2のインデックスを算出し、スレッド161-3は要素#3のインデックスを算出し、スレッド161-1024は要素#1024のインデックスを算出する。また、スレッド161-1は、要素#1~#2048の中で要素#1025のインデックスを算出する。スレッド161-2は要素#1026のインデックスを算出し、スレッド161-3は要素#1027のインデックスを算出し、スレッド161-1024は要素#2048のインデックスを算出する。
そして、スレッド161-1~161-1024は、要素#1~#2048を一斉に移動する。これにより要素#1~#2048がソートされる。ストリーミングマルチプロセッサ121-1は、ソート後の上位1024個の要素を新たな要素#1~#1024として保持する。また、ストリーミングマルチプロセッサ121-1は、ソート後の下位1024個の要素をグローバルメモリ123に書き出す。下位1024個の要素は、要素#1~#1024として読み込んだブロックに上書きされる。ストリーミングマルチプロセッサ121-1は、他の1つのブロックを要素#1025~#2048として読み込む。
同様にして、スレッド161-1~161-1024は、要素#1~#2048の中で要素#1~#1024のインデックスを算出し、要素#1025~#2048のインデックスを算出し、要素#1~#2048を一斉に移動する。ストリーミングマルチプロセッサ121-1は、ソート後の上位1024個の要素を新たな要素#1~#1024として保持し、下位1024個の要素をグローバルメモリ123に書き出す。これを繰り返すことで、N個のブロックの中から上位1024個の要素を抽出できる。
ここで、第2段階ソートにおける共有メモリ122-1の使用方法について説明する。
図16は、GPUにおけるメモリ使用例を示す図である。
ここでは説明を簡単にするため、3個のブロックに対して第2段階ソートを行うことを考える。ストリーミングマルチプロセッサ121-1が有する共有メモリ122-1には、区画146-1(区画A)と区画146-2(区画B)が確保される。グローバルメモリ123には、3個のブロックを記憶する区画147-1~147-3が確保される。
まず、ストリーミングマルチプロセッサ121-1は、区画147-2に記憶されたブロックを区画146-1に読み込み、区画147-3に記憶されたブロックを区画146-2に読み込む。ストリーミングマルチプロセッサ121-1は、区画146-1,146-2に記憶された2048個の要素に対して連結ソートを行う。すると、区画146-1には上位1024個の要素がブロックとして格納され、区画146-2には下位1024個の要素がブロックとして格納される。ストリーミングマルチプロセッサ121-1は、区画146-2のブロックを区画147-3に上書き保存する。
次に、ストリーミングマルチプロセッサ121-1は、区画147-1に記憶されたブロックを区画146-2に読み込む。ストリーミングマルチプロセッサ121-1は、区画146-1,146-2に記憶された2048個の要素に対して連結ソートを行う。すると、区画146-1には上位1024個の要素がブロックとして格納され、区画146-2には下位1024個の要素がブロックとして格納される。
図17は、GPUにおけるメモリ使用例を示す図(続き)である。
ストリーミングマルチプロセッサ121-1は、区画146-2のブロックを区画147-2に上書き保存する。また、区画146-1に記憶されたブロックは最終的なソート結果の先頭ブロックとして確定するため、ストリーミングマルチプロセッサ121-1は、区画146-1のブロックを区画147-1に上書き保存する。
次に、ストリーミングマルチプロセッサ121-1は、区画147-3に記憶されたブロックを区画146-1に読み込む。区画146-2には区画147-2に記憶されたブロックを読み込むことになるが、ここでは既に読み込まれた状態になっているため省略することができる。ストリーミングマルチプロセッサ121-1は、区画146-1,146-2に記憶された2048個の要素に対して連結ソートを行う。すると、区画146-1には上位1024個の要素がブロックとして格納され、区画146-2には下位1024個の要素がブロックとして格納される。
ストリーミングマルチプロセッサ121-1は、区画146-2のブロックを区画147-3に上書き保存する。また、区画146-1に記憶されたブロックは最終的なソート結果の2番目のブロックとして確定するため、ストリーミングマルチプロセッサ121-1は、区画146-1のブロックを区画147-2に上書き保存する。これにより3つのブロックのソートが完了し、区画147-1~147-3にソート結果が格納される。
このように、1つのストリーミングマルチプロセッサを用いて第2段階ソートを行うことで、転がし方式により、2つのブロックを連結する連結ソート毎に1回のブロック読み込みと1回のブロック書き出しを行えばよい。よって、共有メモリ122-1とグローバルメモリ123の間のブロック転送を削減することができる。
次に、第2の実施の形態で使用するソートアルゴリズムの性質について説明する。
グループ内ソートにおいて、k個の要素を含むグループをソートする場合、スコア同士を比較する比較回数はkである。グループ間ソートにおいて、k個の要素を含むデータセットをk個の要素を含む他のデータセットと連結する場合、当該データセットについてスコア同士を比較する比較回数はk×(log(k)+1)である。ただし、k個の要素の処理は並列化されるため、グループ内ソートの比較回数は実質的にkであり、グループ間ソートの比較回数は実質的にlog(k)+1である。
また、グループ内ソートでもグループ間ソートでも、インデックス計算後に一斉に要素移動が行われるため、スレッド間の同期待ちが少ない。グループ内ソートでの要素の移動回数はkであるが、スレッドの同期待ちは1回となる。また、グループ間ソートでも要素の移動回数はkであるが、スレッドの同期待ちは1回となる。
他のソートアルゴリズムとして選択ソートがある。選択ソートは、未ソートの要素の中から最もスコアの大きいものを1つずつ選択していくものである。選択ソートを改良したものとしてヒープソートや図書館ソートもある。選択ソートの比較回数はk×(k-1)/2であり、最悪計算時間はO(k)である。選択ソートは並列化が難しい。
また、他のソートアルゴリズムとして挿入ソートがある。挿入ソートは、要素を前方から1つずつ選択していき、選択した要素を、当該要素より前方の範囲のうちスコアに応じた位置に挿入するものである。挿入ソートを改良したものとしてシェルソートもある。挿入ソートの比較回数はk×(k-1)/2であり、最悪計算時間はO(k)である。挿入ソートは、ソート済みの前方の範囲を参照するため並列化が難しい。
また、他のソートアルゴリズムとしてクイックソートがある。クイックソートは、未ソートの要素の中からランダムに1つをピボットとして選択し、ピボットよりスコアが大きい要素を前方に移動し、それ以外の要素を後方に移動する。ピボットを基準とした範囲分割を階層的に行うことでソートを実現するものである。クイックソートの平均計算時間はO(k×log(k))であり、最悪計算時間はO(k)である。クイックソートは、移動先のインデックスの計算を要素間で並列化することが難しい。
また、他のソートアルゴリズムとしてマージソートがある。マージソートは、ソート対象の要素を小領域に分割し、隣接する2つのソート済みの小領域を段階的にマージするものである。ソート済みの2つの小領域をマージする際には、2つの小領域の先頭要素のスコアを比較し、スコアの大きい要素を1つずつ抽出していく。マージソートの最悪計算量はO(k×log(k))である。マージソートは、先頭要素のスコアの比較と移動を繰り返すものであるため並列化が難しい。
また、他のソートアルゴリズムとして奇遇転置ソートがある。奇遇転置ソートは、奇数番目の要素とその次の要素とを比較してスコアの大きい方が前方になるように要素を入れ替え、偶数番目の要素とその次の要素とを比較してスコアの大きい方が前方になるように要素を入れ替えることを繰り返すものである。奇遇転置ソートはバブルソートを改良したものである。奇遇転置ソートの最悪計算時間はO(k)である。奇遇転置ソートは、要素の入れ替え回数が多く同期待ちの頻度が高くなる。
また、他のソートアルゴリズムとしてバイトニックソートがある。バイトニックソートは、所定のソーティングネットワークに従って、特定の位置にある2つの要素を比較してスコアの大きい方が前方になるように要素を入れ替えることを繰り返すものである。バイトニックソートの計算時間はO(k×log(k))である。バイトニックソートは、要素の入れ替え回数が多く同期待ちの頻度が高くなる。
次に、物体候補領域ソートの処理手順を説明する。
図18は、物体候補領域ソートの手順例を示すフローチャートである。
物体候補領域ソートは、前述のステップS23で実行される。
(S30)選択部139は、n個の要素を含むスコア付き位置データを、GPU104のグローバルメモリ123にロードする。nが1024で割り切れない場合は、スコアが0のダミー要素をスコア付き位置データに含めておく。
(S31)選択部139は、スコア付き位置データをそれぞれ1024個の要素を含むN個のブロックに分割する。選択部139は、N個のストリーミングマルチプロセッサを選択し、異なるブロックを異なるストリーミングマルチプロセッサにロードする。
(S32)選択部139は、各ストリーミングマルチプロセッサ内で1024個の要素を8要素グループに分割する。選択部139は、異なる要素に異なるスレッドを割り当て、8要素グループ内のソート後のインデックスを並列に算出する。N個のストリーミングマルチプロセッサにより1024×N個のスレッドが並列に実行され、ダミー要素を含む1024×N個の要素のインデックスが並列に算出される。
(S33)選択部139は、各ストリーミングマルチプロセッサにおいて、ステップS32で算出したインデックスに基づいて8要素グループ内で要素を並列に移動する。N個のストリーミングマルチプロセッサにより1024×N個のスレッドが並列に実行され、ダミー要素を含む1024×N個の要素が並列に移動される。
(S34)選択部139は、各ストリーミングマルチプロセッサにおいて、隣接する2つのグループの連結ソート後のインデックスを並列に算出する。N個のストリーミングマルチプロセッサにより1024×N個のスレッドが並列に実行され、ダミー要素を含む1024×N個の要素のインデックスが並列に算出される。
(S35)選択部139は、各ストリーミングマルチプロセッサにおいて、ステップS34で算出したインデックスに基づいて隣接2グループの中で要素を並列に移動する。N個のストリーミングマルチプロセッサにより1024×N個のスレッドが並列に実行され、ダミー要素を含む1024×N個の要素が並列に移動される。
(S36)選択部139は、連結後のグループの要素数が1024に達したか、すなわち、ブロック内のソートが完了したか判断する。要素数が1024に達した場合はステップS37に処理が進み、1024に達していない場合はステップS34に進む。
(S37)選択部139は、N個のストリーミングマルチプロセッサからグローバルメモリ123にソート後のブロックを書き出す。
図19は、物体候補領域ソートの手順例を示すフローチャート(続き)である。
(S38)選択部139は、GPU104の1つのストリーミングマルチプロセッサを選択する。ここでは、ストリーミングマルチプロセッサ121-1を選択したとする。選択部139は、変数jの値をj=1に初期化する。
(S39)選択部139は、変数iの値をi=Nに初期化する。
(S40)選択部139は、グローバルメモリ123からストリーミングマルチプロセッサ121-1にブロックiをロードする。ブロックiは、連続するN個の記憶領域のうち先頭からi番目の記憶領域に記憶されたブロックである。
(S41)選択部139は、変数iの値をi=i-1に更新する。
(S42)選択部139は、グローバルメモリ123からストリーミングマルチプロセッサ121-1にブロックiをロードする。
(S43)選択部139は、ストリーミングマルチプロセッサ121-1にロードされたブロックi,i+1の連結ソート後のインデックスを並列に算出する。ストリーミングマルチプロセッサ121-1により1024個のスレッドが並列に実行され、1024×2個の要素のインデックスが1024個ずつ2セットで算出される。
(S44)選択部139は、ストリーミングマルチプロセッサ121-1において、ステップS43で算出したインデックスに基づいて2ブロック内で要素を並列に移動する。
(S45)選択部139は、ソートした2048個の要素のうち下位1024個の要素を抽出し、ストリーミングマルチプロセッサ121-1からグローバルメモリ123にブロックi+1として書き出す。例えば、抽出した下位1024個の要素が、連続するN個の記憶領域のうち先頭からi+1番目の記憶領域に上書きされる。また、選択部139は、ソートした2048個の要素のうち上位1024個の要素を、ブロックiとしてストリーミングマルチプロセッサ121-1に保持させる。
(S46)選択部139は、変数iの値と変数jの値を比較しi=jであるか判断する。i=jの場合はステップS47に進み、i≠jの場合はステップS41に進む。
(S47)選択部139は、ストリーミングマルチプロセッサ121-1が保持しているブロックiをグローバルメモリ123に書き出す。例えば、1024個の要素が、連続するN個の記憶領域のうち先頭からi番目の記憶領域に上書きされる。
(S48)選択部139は、ソート済みのブロックの合計要素数が6000を超えたか、すなわち、1024×j>6000を満たすか判断する。条件を満たす場合は物体候補領域ソートが終了し、条件を満たさない場合はステップS49に進む。
(S49)選択部139は、変数jの値をj=j+1に更新する。これにより、ソート範囲が1ブロックだけ縮小する。そして、ステップS39に進む。
このように、第2段階ソートは、1つのストリーミングマルチプロセッサを用いてバブルソート方式によりN個のブロックの要素をソートする。ただし、他の方法で第2段階ソートを行うこともできる。そこで、第2段階ソートの変形例を説明する。
図20は、第2段階ソートの第1の変形例を示す図である。
前述の第2段階ソートでは、ブロック#Nからブロック#1に向かってスコアの高い要素を収集する第1パスを通じてブロック#1を確定し、その後にブロック#Nからブロック#2に向かってスコアの高い要素を収集する第2パスを通じてブロック#2を確定する。これに対し、第1の変形例では、複数のストリーミングマルチプロセッサを用いて異なるパスを部分的に重複して実行できるようにする。すなわち、第1パスが通過したブロックについて第1パスの完了を待たずに第2パスを開始するようにする。
例えば、ブロック#1~#6の6個のブロックに対して第2段階ソートを行うことを考える。ストリーミングマルチプロセッサ121-1は、ブロック#5,#6の連結ソートを行い、ブロック#4,#5の連結ソートを行い、ブロック#3,#4の連結ソートを行う。ブロック#3,#4が開始された時点で、ストリーミングマルチプロセッサ121-1によるブロック#5,#6の更新は既に終わっているため、ストリーミングマルチプロセッサ121-2はブロック#5,#6の連結ソートを行う。ストリーミングマルチプロセッサ121-1はブロック#2,#3の連結ソートを行い、これと並列に、ストリーミングマルチプロセッサ121-2はブロック#4,#5の連結ソートを行う。
ストリーミングマルチプロセッサ121-1はブロック#1,#2の連結ソートを行う。これにより、ソート後のブロック#1が確定する。これと並列に、ストリーミングマルチプロセッサ121-2はブロック#3,#4の連結ソートを行う。また、ブロック#3,#4が開始された時点で、ストリーミングマルチプロセッサ121-2によるブロック#5,#6の更新は既に終わっているため、ストリーミングマルチプロセッサ121-3はブロック#5,#6の連結ソートを行う。
ストリーミングマルチプロセッサ121-2はブロック#2,#3の連結ソートを行う。これにより、ソート後のブロック#2が確定する。これと並列に、ストリーミングマルチプロセッサ121-3はブロック#4,#5の連結ソートを行う。その後、ストリーミングマルチプロセッサ121-3はブロック#3,#4の連結ソートを行う。これにより、ソート後のブロック#3が確定する。これと並列に、ストリーミングマルチプロセッサ121-1はブロック#5,#6の連結ソートを行う。
そして、ストリーミングマルチプロセッサ121-1はブロック#4,#5の連結ソートを行う。これにより、ソート後のブロック#4が確定する。ストリーミングマルチプロセッサ121-1はブロック#5,#6の連結ソートを行う。これにより、ソート後のブロック#6が確定し、ブロック#1~#6のソートが完了する。
なお、図20では3つのストリーミングマルチプロセッサを使用しているが、ブロック数Nに応じて、並列度が最大になるように使用するストリーミングマルチプロセッサを増やしてもよい。また、並列制御が簡潔になるように、使用するストリーミングマルチプロセッサを2個など所定個に限定してもよい。
図21は、第2段階ソートの第2の変形例を示す図である。
第2の変形例の第2段階ソートは、第1段階ソートと同様に、多くのストリーミングマルチプロセッサを使用して並列度を上げるようにする。第2の変形例の第2段階ソートは、隣接する2つのブロックを連結することを木構造で繰り返す。このため、ブロック数を2のべき乗とし、不足する分についてはスコアが全て0のダミーブロックを用意する。
例えば、ブロック#1~#8の8個のブロックに対して第2段階ソートを行うことを考える。ストリーミングマルチプロセッサ121-1は、1024個のスレッドを2セット実行してブロック#1,#2の連結ソートを行う。これと並列に、ストリーミングマルチプロセッサ121-2は、1024個のスレッドを2セット実行してブロック#3,#4の連結ソートを行う。これと並列に、ストリーミングマルチプロセッサ121-3は、1024個のスレッドを2セット実行してブロック#5,#6の連結ソートを行う。これと並列に、ストリーミングマルチプロセッサ121-4は、1024個のスレッドを2セット実行してブロック#7,#8の連結ソートを行う。
隣接2ブロックのソートが終わると、ストリーミングマルチプロセッサ121-1は、1024個のスレッドを4セット実行してブロック#1~#4の連結ソートを行う。ブロック#1,#2の集合とブロック#3,#4の集合はそれぞれソート済みであるため、2つのデータセットの連結ソートとして実行できる。これと並列に、ストリーミングマルチプロセッサ121-3は、1024個のスレッドを4セット実行してブロック#5~#8の連結ソートを行う。ブロック#5,#6の集合とブロック#7,#8の集合はそれぞれソート済みであるため、2つのデータセットの連結ソートとして実行できる。
隣接4ブロックのソートが終わると、ストリーミングマルチプロセッサ121-1は、1024個のスレッドを4セット実行してブロック#1~#8の連結ソートを行う。ブロック#1~#4の集合とブロック#5~#8の集合はそれぞれソート済みであるため、2つのデータセットの連結ソートとして実行できる。
前述の元の第2段階ソートでは、8個のブロックから上位6個のソート済みブロックを求める場合、1つのストリーミングマルチプロセッサで1024個のスレッドを2×(7+6+5+4+3+2)=54回実行することになる。これに対し、第2の変型例の第2段階ソートによれば、まず、4つのストリーミングマルチプロセッサそれぞれで1024個のスレッドを2回実行する。次に、2つのストリーミングマルチプロセッサそれぞれで1024個のスレッドを4回実行する。そして、1つのストリーミングマルチプロセッサで1024個のスレッドを8回実行する。よって、実質的な実行回数は14である。このため、スレッドの実行時間を短縮できる。
ただし、第2の変型例の第2段階ソートは、グローバルメモリ123と各ストリーミングマルチプロセッサの共有メモリとの間のブロックの転送量が増加する。このため、第2の変型例の第2段階ソートは、並列度の上昇による合計スレッド実行時間の減少量が、メモリアクセス時間の増加量を超えることで、全体としてソートを高速化できる。
次に、ステップS25のNMS処理の効率化について説明する。
図22は、スコア付き位置データのNMS処理例を示す図である。
スコア付き位置データ151は、物体候補領域を示す要素の集合であり、スコアの大きい順にソートされたものである。物体候補領域生成部135の選択部139は、NMS処理によりスコア付き位置データ151から一部の要素を削除する。削除する要素は、スコアの小さい物体候補領域のうちスコアの大きい物体候補領域との間で領域重複割合が高いものを示す要素である。領域重複割合の指標としてIoUを使用することができる。物体候補領域Aと物体候補領域Bの間のIoUは、IoU=(A∩B)/(A∪B)であり、物体候補領域A,Bの全体領域のうち重複している部分の面積の割合である。IoUは領域の重なりが多いほど1に近くなり、領域の重なりが少ないほど0に近くなる。選択部139は、物体候補領域A,BのIoUが閾値(例えば、0.7)を超えている場合、物体候補領域A,Bのうちスコアの小さい方を削除する。
例えば、図22において、スコアが0.99の物体候補領域とスコアが0.07の物体候補領域との間の領域重複割合が大きいため、スコアが0.07の要素がスコア付き位置データ151から削除される。また、スコアが0.97の物体候補領域とスコアが0.05の物体候補領域との間の領域重複割合が大きいため、スコアが0.05の要素がスコア付き位置データ151から削除される。また、スコアが0.95の物体候補領域とスコアが0.02の物体候補領域との間の領域重複割合が大きいため、スコアが0.02の要素がスコア付き位置データ151から削除される。また、スコアが0.94の物体候補領域とスコアが0.01の物体候補領域との間の領域重複割合が大きいため、スコアが0.01の要素がスコア付き位置データ151から削除される。
次に、並列化しないNMS処理の手順について説明する。
図23は、NMS処理の逐次実行の手順例を示すフローチャートである。
逐次実行のNMS処理は、前述のステップS25で実行することができる。
(S50)選択部139は、変数iの値をi=1に初期化する。
(S51)選択部139は、変数jの値をj=i+1に初期化する。
(S52)選択部139は、スコア付き位置データのi番目の要素(要素i)が示す物体候補領域と、スコア付き位置データのj番目の要素(要素j)が示す物体候補領域との間で、領域重複割合であるIoUを算出する。
(S53)選択部139は、ステップS52で算出したIoUが閾値(例えば、0.7)を超えるか判断する。IoUが閾値を超える場合はステップS54に進み、IoUが閾値以下である場合はステップS55に進む。
(S54)選択部139は、スコア付き位置データから要素jを削除する。なお、スコア付き位置データからの要素jの削除は、要素jのスコアを、float型最小値など要素jが無効であることを示す所定値に設定することで行うことができる。
(S55)選択部139は、要素jよりスコアの小さい要素(順位の低い要素)が残っているか判断する。要素jよりスコアの小さい要素が残っている場合はステップS56に進み、残っていない場合はステップS57に進む。
(S56)選択部139は、変数jの値をj=j+1に更新する。これにより、比較相手の要素が1つ下位の要素になる。そして、ステップS52に進む。
(S57)選択部139は、要素iよりスコアの小さい要素(順位の低い要素)が残っているか判断する。要素iよりスコアの小さい要素が残っている場合はステップS58に進み、残っていない場合はNMS処理が終了する。
(S58)選択部139は、変数iの値をi=i+1に更新する。これにより、比較元の要素が1つ下位の要素になる。そして、ステップS51に進む。
上記ではNMS処理の逐次実行について説明した。これに対し、2つの要素の間でIoUが閾値を超えているか否かをビットマップで管理するようにし、GPU104を用いてNMS処理を並列化することが考えられる。そこで、NMS処理の並列化を説明する。
図24は、ビットマップの例を示す図である。
ビットマップ152は、スコア付き位置データの2つの要素の間でIoUが閾値を超えているか否かを示すフラグの集合である。ビットマップ152は、6000行×6016列の行列である。ビットマップ152の1行目から6000行目は、ソートされたスコア付き位置データに含まれる6000個の要素に対応する。1行目は1番目の要素に対応し、2行目は2番目の要素に対応し、6000行目は6000番目の要素に対応する。ビットマップ152の1列目から6000列目も6000個の要素に対応する。1列目は1番目の要素に対応し、2列目は2番目の要素に対応し、6000列目は6000番目の要素に対応する。6001列目から6016列目はダミーの列である。
ビットマップ152に含まれる各フラグは0または1を示すビットであり、初期値として0をとる。i行j列のフラグが0であることは、要素iと要素jの間のIoUが閾値以下であることを示す。i行j列のフラグが1であることは、要素iと要素jの間のIoUが閾値を超えることを示す。ビットマップ152は、横方向に連続する64個のフラグを1つの単位ビット列として取り扱う。これは、プログラム上では64ビット整数変数によって1つの単位ビット列を表現することができるためである。
1つの行は94個の単位ビット列を含むため、ビットマップ152は94×6000=564000個の単位ビット列を含む。GPU104を用いてビットマップ152を生成する場合、GPU104が実行する1つのスレッドを1つの単位ビット列に割り当てる。よって、ビットマップ152は564000個のスレッドを用いて並列に生成できる。
1行目の1個目の単位ビット列を担当するスレッドは、要素#1と要素#2~#64それぞれの間のIoUを算出して閾値と比較し、IoUが閾値を超える組み合わせに対してフラグを0から1に変更する。1行目の2個目の単位ビット列を担当するスレッドは、要素#1と要素#65~#128それぞれの間のIoUを算出して閾値と比較し、IoUが閾値を超える組み合わせに対してフラグを0から1に変更する。ただし、ビットマップ152の一部のフラグについては計算を省略できる。
図25は、重複判定のスキップ例を示す図である。
異なる2つの要素の間のIoUの計算は、要素の順序と無関係である。すなわち、ビットマップ152に含まれるフラグのうち、i行j列のフラグとj行i列のフラグは同じ値をとる。また、同じ要素同士のIoUの計算は不要である。このため、ビットマップ152のうち対角線を除く上三角部分のフラグのみ判定すればよい。1つのスレッドは横方向に連続する64ビットの単位ビット列を担当するため、対角線上のフラグと単位ビット列との間の位置関係によって3通りの処理パターンが考えられる。
1つ目は、図25の単位ビット列152-1のように、担当する単位ビット列が対角線の左側にある場合である。具体的には、担当する単位ビット列の中の最大の列番号が行番号以下である場合である。単位ビット列152-1に割り当てられたスレッドは、単位ビット列152-1の全てのフラグの計算を省略できる。
2つ目は、図25の単位ビット列152-2のように、担当する単位ビット列の途中に対角線が通っている場合である。具体的には、担当する単位ビット列の中の最大の列番号が行番号より大きく、かつ、担当する単位ビット列の中の最小の列番号が行番号以下である場合である。単位ビット列152-2に割り当てられたスレッドは、単位ビット列152-1のうち、行番号と一致する列番号をもつ対角フラグおよび対角フラグより前方のフラグの計算を省略できる。単位ビット列152-2に割り当てられたスレッドは、対角フラグの1つ後ろのフラグから計算を開始することができる。
3つ目は、図25の単位ビット列152-3のように、担当する単位ビット列が対角線の右側にある場合である。具体的には、担当する単位ビット列の中の最小の列番号が行番号より大きい場合である。単位ビット列152-3に割り当てられたスレッドは、全てのフラグの計算を省略せずに行うことになる。
なお、第2の実施の形態では、単位ビット列の途中に対角線が通っている場合、スレッドは計算量を削減するため単位ビット列の途中からフラグの計算を行うこととしている。これに対し、並列制御を簡潔にするため、単位ビット列の途中に対角線が通っている場合に、スレッドが単位ビット列の全てのフラグを計算するようにしてもよい。
図26は、ビットマップの集計例を示す図である。
ビットマップ152が生成されると、以下のようにして削除すべき要素を判定できる。ビットマップ152の1つの行に相当する6016ビットのビット列を行ビット列とする。選択部139は、1行目の行ビット列を基準行ビット列として選択する。選択部139は、2行目から6000行目までのフラグ情報を基準行ビット列に集約する。
具体的には、選択部139は、i行目の行ビット列を選択し、基準行ビット列のi列目のフラグを確認する。基準行ビット列のi列目のフラグが0である場合、要素iは削除されるものではないため、要素iは要素iより下位の要素に影響を与える。そこで、選択部139は、基準行ビット列にi行目の行ビット列を合成する。行ビット列の合成は、i行目の行ビット列に含まれる1のフラグを基準行ビット列に転記する論理和演算である。一方、基準行ビット列のi列目のフラグが1である場合、要素iは削除されるべきものであるため、要素iは要素iより下位の要素に影響を与えない。そこで、選択部139は、i行目の行ビット列を基準行ビット列に合成せず無視する。これを2行目から6000行目まで繰り返すことで、基準行ビット列にフラグ情報が集約される。基準行ビット列でフラグが1になっている列に対する要素が削除すべき要素である。
例えば、行ビット列153-1が1行目の行ビット列であり基準行ビット列である。行ビット列153-2が2行目の行ビット列であり、行ビット列153-3が3行目の行ビット列である。選択部139は、行ビット列153-1の2列目のフラグを確認する。フラグが0であるため、選択部139は、行ビット列153-2でフラグが1になっている列について、行ビット列153-1のフラグを1にする。これは、行ビット列153-1,153-2の論理和を算出して行ビット列153-1とすることで実現できる。次に、選択部139は、行ビット列153-1の3列目のフラグを確認する。フラグが1であるため、選択部139は、行ビット列153-1を更新しない。
GPU104を用いてビットマップ152の集計を行う場合、ビットマップ152の連続する64列を1つのスレッドに割り当てる。これは、64ビット整数変数を用いた論理演算によってフラグの集計を行うことが効率的であるためである。ビットマップ152は64列×94個の列を含むため、94個のスレッドを用いて並列に集計することができる。1列目から64列目を担当するスレッドは、2行目から6000行目の単位ビット列を1行目の単位ビット列に合成する。65列目から128列目を担当するスレッドは、2行目から6000行目の単位ビット列を1行目の単位ビット列に合成する。
次に、並列化したNMS処理の手順について説明する。
図27は、NMS処理の並列実行の手順例を示すフローチャートである。
並列実行のNMS処理は、前述のステップS25で実行される。
(S60)選択部139は、6000行×6016列のビットマップを生成して各フラグを0に初期化する。6016列は64ビット×94個に分割される。
(S61)選択部139は、GPU104に6000×94個のスレッドを起動し、それぞれ64ビットを含む6000×94個の単位ビット列に異なるスレッドを割り当てる。以下のステップS62~S70は単位ビット列毎に並列実行される。
(S62)選択部139は、担当行番号iと単位ビット列の中の最大担当列番号とを比較する。担当行番号iが最大担当列番号以上である場合はステップS71に進み、担当行番号iが最大担当列番号未満である場合はステップS63に進む。
(S63)選択部139は、担当行番号iが単位ビット列の中の最小担当列番号とを比較する。担当行番号iが最小担当列番号未満である場合はステップS64に進み、担当行番号iが最小担当列番号以上である場合はステップS65に進む。
(S64)選択部139は、変数jの値を最小担当列番号としステップS66に進む。
(S65)選択部139は、変数jの値をj=i+1とする。
(S66)選択部139は、ソート済みのスコア付き位置データからi番目の要素(要素i)とj番目の要素(要素j)を読み出す。選択部139は、要素iの座標情報と要素jの座標情報に基づいて、領域重複割合としてIoUを算出する。
(S67)選択部139は、ステップS66で算出したIoUが閾値(例えば、0.7)より大きいか判断する。IoUが閾値より大きい場合はステップS68に進み、IoUが閾値以下である場合はステップS69に進む。
(S68)選択部139は、ビットマップのi行j列のフラグを1に更新する。
(S69)選択部139は、変数jの値が最大担当列番号と一致するか判断する。変数jの値が最大担当列番号と一致する場合はステップS71に進み、変数jの値が最大担当列番号と一致しない場合はステップS70に進む。
(S70)選択部139は、変数jの値をj+1に更新してステップS66に進む。
図28は、NMS処理の並列実行の手順例を示すフローチャート(続き)である。
(S71)選択部139は、GPU104に94個のスレッドを起動し、それぞれ64列を含む94個の列集合に異なるスレッドを割り当てる。これ以降、ステップS75までの処理は列集合毎に並列実行される。選択部139は、変数iの値をi=2に設定する。
(S72)選択部139は、ビットマップの中の1行i列のフラグが1であるか判断する。ビットマップの1行i列のフラグが1である場合はステップS74に進み、ビットマップの1行i列のフラグが0である場合はステップS73に進む。
(S73)選択部139は、1行目の単位ビット列とi行目の単位ビット列の論理和演算により、i行目で値が1のフラグを1行目に合成する。
(S74)選択部139は、i=6000であるか判断する。i=6000である場合はステップS76に進み、i≠6000である場合はステップS75に進む。
(S75)選択部139は、変数iの値をi=i+1に更新しステップS72に進む。
(S76)選択部139は、ビットマップの1行目でフラグが1になっている列を検索し、フラグが1の列に対応する要素をスコア付き位置データから削除する。スコア付き位置データからの要素の削除は、その要素のスコアを、float型最小値など要素が無効であることを示す所定値に設定することで行うことができる。
次に、画像認識の高速化の効果について説明する。
図29は、ソートとNMS処理の実行時間例を示すグラフである。
グラフ50は、物体候補領域生成部135におけるソート処理の実行時間とソート実装方法との間の関係を示している。更に、グラフ50は、物体候補領域生成部135におけるNMS処理の実行時間とNMS実装方法との間の関係を示している。実行時間は、Faster R-CNN方式による入力画像1つ当たりの時間である。
棒51は、CPUにより汎用的なソートプログラムでソート処理を行った場合の実行時間を示しており、実行時間は約1.5ミリ秒である。棒52は、CPUにより既存の画像認識用プログラムでNMS処理を行った場合の実行時間を示しており、実行時間は約12.2ミリ秒である。棒53は、CPUにより既存の画像認識用プログラムでソート処理を行った場合の実行時間を示しており、実行時間は約0.9ミリ秒である。棒54は、GPUにより既存の画像認識用プログラムでNMS処理を行った場合の実行時間を示しており、実行時間は約2.2ミリ秒である。棒55は、第2の実施の形態のソート処理の実行時間を示しており、実行時間は約0.5ミリ秒である。棒56は、第2の実施の形態のNMS処理の実行時間を示しており、実行時間は約1.2ミリ秒である。
図30は、画像認識の実行時間例を示すグラフである。
グラフ60は、1つの入力画像(1フレーム)当たりの画像認識全体の実行時間を示している。なお、ソート処理自体の高速化およびNMS処理自体の高速化による実行時間の短縮に加えて、できる限りGPU104にデータを保持し続けてGPU104とRAM102の間のデータ転送を削減することによっても実行時間が短縮されている。
棒61は、既存の画像認識用プログラムによる画像認識全体の実行時間を示しており、実行時間は約80ミリ秒である。これに対して、棒62は、第2の実施の形態の画像認識全体の実行時間を示しており、実行時間は約55ミリ秒である。
第2の実施の形態の画像認識装置100によれば、RPN層における要素のソート処理において、異なるスレッドが異なる要素に割り当てられ、ソート後の順位を示すインデックスが並列に算出される。そして、算出されたインデックスに基づいて複数の要素が一斉に移動される。これにより、並列度を上げることができ、多数のスレッドを並列実行可能なGPU104を活用してソート処理を高速化できる。また、2つのソート済みのグループから1つのソート済みのグループを形成する場合、自グループにおける現在の順位と他グループに対する二分探索により、各要素のソート後の順位を示すインデックスが算出される。これにより、スコアの比較回数を削減することができる。
また、ソート処理の第1段階では、各ストリーミングマルチプロセッサでローカルに、小グループを段階的に連結することで1024個の要素がソートされる。これにより、できる限り各ストリーミングマルチプロセッサ内の閉じた処理により多くの要素がソートされ、メモリアクセスを抑制することができる。また、8要素グループを最小グループとすることで、計算量を削減できる。また、ソート処理の第2段階では、1つのストリーミングマルチプロセッサでバブルソート方式により、1024個を超える要素がソートされる。これにより、メモリアクセスを抑制することができる。また、ソート処理の第2段階では、複数のストリーミングマルチプロセッサを用いて並列度を上げることもできる。
また、RPN層におけるNMS処理において、要素間の領域重複割合が閾値を超えているか否かを示すビットマップが生成され、ビットマップを集計して削除すべき要素が判定される。これにより、複数のスレッドを用いてNMS処理を並列化することが容易となり、GPU104を活用してNMS処理を高速化できる。また、ビットマップの中の過半数のフラグについては計算を省略することができ、NMS処理の計算量を削減できる。このように、GPU104を活用して画像認識の実行時間を短縮できる。
10 画像認識装置
11 演算処理装置
11-1~11-8 演算部
12 記憶部
13-1~13-8 データ要素
14-1~14-8 インデックス

Claims (9)

  1. 複数の演算部を含む演算処理装置と、
    画像の中から検出された複数の候補領域に対応して、それぞれが候補領域の位置および評価値を示す複数のデータ要素を記憶する記憶部とを有し、
    前記演算処理装置は、前記複数のデータ要素それぞれのソート後の順位を示すインデックスを、当該データ要素の評価値および少なくとも一部の他のデータ要素の評価値を参照して、前記複数の演算部を用いて並列に算出し、前記インデックスの算出後、前記複数の演算部を用いて、前記インデックスに基づいて前記複数のデータ要素を並列に移動させることで、前記複数のデータ要素をソートし、
    前記演算処理装置は、ソート後の前記複数のデータ要素の順序に基づいて、前記複数の候補領域の中から一部の候補領域を選択する、
    画像認識装置。
  2. 前記複数のデータ要素のソートでは、前記演算処理装置は、
    前記複数のデータ要素を複数の単位グループに分割し、
    前記複数の単位グループそれぞれの中で、当該単位グループに属するデータ要素の間で評価値を比較して、当該単位グループに属するデータ要素をソートし、
    ソート済みの2つの単位グループの間で、一方の単位グループに属するデータ要素の連結後の順位を示すインデックスを、前記一方の単位グループ内における順位と当該データ要素を他方の単位グループに挿入する場合の前記他方の単位グループ内における順位とから算出して、前記2つの単位グループを連結したソート済みのグループを生成する、
    請求項1記載の画像認識装置。
  3. 前記複数のデータ要素のソートでは、前記演算処理装置は、
    前記複数のデータ要素を、所定数のデータ要素をもつ複数のブロックに分割し、
    前記複数のブロックそれぞれの中でデータ要素をソートし、
    ソート済みの2つのブロックを連結してソート済みの連結ブロックを生成し、前記連結ブロックから前記評価値の順に前記所定数のデータ要素を抽出し、抽出した前記所定数のデータ要素と他のブロックとを連結することを繰り返すことで、前記複数のデータ要素の中から前記評価値の順に前記所定数のデータ要素を抽出する、
    請求項1記載の画像認識装置。
  4. 前記複数のブロックのうち一部のブロックを一時的に記憶する他の記憶部を更に有し、
    前記複数のデータ要素のソートでは、前記演算処理装置は、前記2つのブロックを前記記憶部から前記他の記憶部に読み込み、連結後に前記所定数のデータ要素を前記他の記憶部に保持して、前記連結ブロックの中の他のデータ要素を前記他の記憶部から前記記憶部に書き出し、前記他のブロックを前記記憶部から前記他の記憶部に読み込む、
    請求項3記載の画像認識装置。
  5. 前記複数のデータ要素のソートでは、前記演算処理装置は、第1のブロックと第2のブロックとを連結して第1の連結ブロックを生成し、前記第1の連結ブロックのうちの前記所定数のデータ要素と第3のブロックとを連結して第2の連結ブロックを生成した場合、前記第2の連結ブロックのうちの前記所定数のデータ要素と第4のブロックとを連結する処理と、前記第1の連結ブロックのうちの残りのデータ要素と前記第2の連結ブロックのうちの残りのデータ要素とを連結する処理とを並列に実行する、
    請求項3記載の画像認識装置。
  6. 前記複数の演算部は、所定の並列度をもつ複数の演算部グループに分かれており、
    前記複数のデータ要素のソートでは、前記演算処理装置は、前記複数のデータ要素を前記所定の並列度に応じた個数のデータ要素をもつ複数のブロックに分割し、前記複数のブロックそれぞれの中でデータ要素をソートする第1の処理と、それぞれソート済みである前記複数のブロックを連結する第2の処理とを、異なるソート方法によって実行する、
    請求項1記載の画像認識装置。
  7. 前記複数の演算部は、GPU(Graphics Processing Unit)が有するプロセッサコアであり、前記記憶部は、前記GPUが有するメモリである、
    請求項1記載の画像認識装置。
  8. 画像認識装置が、
    画像の中から検出された複数の候補領域に対応して、それぞれが候補領域の位置および評価値を示す複数のデータ要素を取得し、
    前記複数のデータ要素それぞれのソート後の順位を示すインデックスを、当該データ要素の評価値および少なくとも一部の他のデータ要素の評価値を参照して、前記画像認識装置が有する複数の演算部を用いて並列に算出し、
    前記インデックスの算出後、前記複数の演算部を用いて、前記インデックスに基づいて前記複数のデータ要素を並列に移動させることで、前記複数のデータ要素をソートし、
    ソート後の前記複数のデータ要素の順序に基づいて、前記複数の候補領域の中から一部の候補領域を選択する、
    画像認識方法。
  9. コンピュータに、
    画像の中から検出された複数の候補領域に対応して、それぞれが候補領域の位置および評価値を示す複数のデータ要素を取得し、
    前記複数のデータ要素それぞれのソート後の順位を示すインデックスを、当該データ要素の評価値および少なくとも一部の他のデータ要素の評価値を参照して、前記コンピュータが有する複数の演算部を用いて並列に算出し、
    前記インデックスの算出後、前記複数の演算部を用いて、前記インデックスに基づいて前記複数のデータ要素を並列に移動させることで、前記複数のデータ要素をソートし、
    ソート後の前記複数のデータ要素の順序に基づいて、前記複数の候補領域の中から一部の候補領域を選択する、
    処理を実行させる画像認識プログラム。
JP2018161464A 2018-08-30 2018-08-30 画像認識装置、画像認識方法および画像認識プログラム Active JP7089179B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2018161464A JP7089179B2 (ja) 2018-08-30 2018-08-30 画像認識装置、画像認識方法および画像認識プログラム
US16/543,668 US11080812B2 (en) 2018-08-30 2019-08-19 Image recognition apparatus and image recognition method for sorting candidate regions detected in image

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018161464A JP7089179B2 (ja) 2018-08-30 2018-08-30 画像認識装置、画像認識方法および画像認識プログラム

Publications (2)

Publication Number Publication Date
JP2020035195A JP2020035195A (ja) 2020-03-05
JP7089179B2 true JP7089179B2 (ja) 2022-06-22

Family

ID=69639996

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018161464A Active JP7089179B2 (ja) 2018-08-30 2018-08-30 画像認識装置、画像認識方法および画像認識プログラム

Country Status (2)

Country Link
US (1) US11080812B2 (ja)
JP (1) JP7089179B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111242117A (zh) * 2018-11-28 2020-06-05 佳能株式会社 检测装置和方法及图像处理装置和系统
US11481190B2 (en) * 2020-05-22 2022-10-25 International Business Machiines Corporation Selecting a plurality of processing systems to sort a data set
CN117157518A (zh) * 2021-06-09 2023-12-01 日本制铁株式会社 监视系统、监视方法、程序及存储计算机程序的计算机可读取记录介质
CN114364017B (zh) * 2021-12-21 2024-03-01 威海北洋电气集团股份有限公司 级联节点物理位置自动标定及校准方法、装置、介质和设备
CN114037912A (zh) * 2022-01-07 2022-02-11 成都国星宇航科技有限公司 遥感图像的变化检测方法、装置及计算机可读存储介质
WO2023175848A1 (ja) * 2022-03-17 2023-09-21 日本電気株式会社 表示支援装置、表示支援方法、および記録媒体
CN115546009B (zh) * 2022-11-29 2023-02-03 合肥中科类脑智能技术有限公司 非极大值抑制算法的优化方法、装置以及设备、存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005006237A (ja) 2003-06-16 2005-01-06 Mitsubishi Precision Co Ltd 演算処理方法及びその装置並びに画像合成方法及びその装置
JP2014093023A (ja) 2012-11-06 2014-05-19 Canon Inc 物体検出装置、物体検出方法及びプログラム

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10334054A (ja) * 1997-05-29 1998-12-18 Hitachi Ltd 並列画像生成方法とそのためのデータ分割手法
EP1113388B1 (en) 1998-09-10 2007-03-07 Ecchandes Inc. Visual device
JP2001148023A (ja) 1999-09-07 2001-05-29 Ecchandesu:Kk 視覚装置及び視覚方法
US9466009B2 (en) * 2013-12-09 2016-10-11 Nant Holdings Ip. Llc Feature density object classification, systems and methods
CN106296638A (zh) 2015-06-04 2017-01-04 欧姆龙株式会社 显著性信息取得装置以及显著性信息取得方法
CN110060195B (zh) * 2018-01-19 2021-05-04 华为技术有限公司 一种数据处理的方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005006237A (ja) 2003-06-16 2005-01-06 Mitsubishi Precision Co Ltd 演算処理方法及びその装置並びに画像合成方法及びその装置
JP2014093023A (ja) 2012-11-06 2014-05-19 Canon Inc 物体検出装置、物体検出方法及びプログラム

Also Published As

Publication number Publication date
JP2020035195A (ja) 2020-03-05
US20200074690A1 (en) 2020-03-05
US11080812B2 (en) 2021-08-03

Similar Documents

Publication Publication Date Title
JP7089179B2 (ja) 画像認識装置、画像認識方法および画像認識プログラム
Sankaranarayanan et al. Learning from synthetic data: Addressing domain shift for semantic segmentation
Wu et al. Stacked cross refinement network for edge-aware salient object detection
Radenović et al. Revisiting oxford and paris: Large-scale image retrieval benchmarking
JP6771018B2 (ja) 二次元配列プロセッサの性能向上
US9396512B2 (en) Fully parallel construction of k-d trees, octrees, and quadtrees in a graphics processing unit
WO2019238560A1 (en) Generative adversarial networks for image segmentation
US11265598B2 (en) Method and device for determining duplicate video
US11537857B2 (en) Pooling processing method and system applied to convolutional neural network
Shah et al. Geometry-aware feature matching for structure from motion applications
KR20180018785A (ko) 조밀 탐색 방법 및 화상 처리 장치
Wehr et al. Parallel kd-tree construction on the gpu with an adaptive split and sort strategy
JP7085600B2 (ja) 画像間の類似度を利用した類似領域強調方法およびシステム
Bastani et al. OTIF: efficient tracker pre-processing over large video datasets
US20150086118A1 (en) Method for recognizing a visual context of an image and corresponding device
Li et al. Real-time mobile acceleration of dnns: From computer vision to medical applications
CN112766170B (zh) 基于簇类无人机图像的自适应分割检测方法及装置
CN111079527B (zh) 一种基于3d残差网络的镜头边界检测方法
CN110097581B (zh) 基于点云配准icp算法构建k-d树的方法
CN110490893B (zh) 一种快速欧式距离点云分割方法
CN108876701B (zh) 一种基于游程的单次扫描连通域标记方法及其硬件结构
Dziri et al. Late fusion of multiple convolutional layers for pedestrian detection
US9781357B2 (en) Method and an apparatus for generating an approximate nearest neighbor field (ANNF) for images and video sequences
KR102102181B1 (ko) 부호화된 방향성 네트워크에서의 표현 학습 방법 및 장치
US10504000B2 (en) Methods, systems, and computer readable media for image overlap detection

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210513

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20210524

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20210524

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220426

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220510

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220523

R150 Certificate of patent or registration of utility model

Ref document number: 7089179

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150