VisualAppletsでの実装

図 394に、HOG特徴量を算出するためのVAデザインの基本設計構造を示します。 CameraLinkベース構成のカメラからのグレースケール画像に対し、階層化ボックス HOG内でHOG(Histogram of Oriented Gradients)が計算されます。 デザイン「HOG_9Bins_Histogram.va」では、このヒストグラムがDMA経由でPCに送信されます。VAデザイン「HOG_4Bins_HistogramMax.va」および「HOG_9Bins_HistogramMax.va」では、最大成分がPCに転送されます。以下では、「HOG_4Bins_HistogramMax.va」のデザイン構造について説明します。他の2つのデザインについても同様です。関連する事項におけるデザインの違いについては、随時説明します。デフォルトプラットフォームはmarathon VCLです。デザインの実装は、他のプラットフォームやカメラ構成に簡単に適合させることができます。

VAデザイン「HOG_9Bins_Histogram.va」、「HOG_9Bins_HistogramMax.va」、「HOG_4Bins_HistogramMax.va」の基本設計構造

図394:VAデザイン「HOG_9Bins_Histogram.va」、「HOG_9Bins_HistogramMax.va」、「HOG_4Bins_HistogramMax.va」の基本設計構造


HierarchicalBox HOGの内容を図 395に示します。

HierarchicalBox HOG の内容

図395:HierarchicalBox HOGの内容


元の入力画像のx方向およびy方向の勾配は、HierarchicalBox GradientFilter 内で計算されます。 実装を図 47 に示します。オペレーター FIRkernelNxM が 3x3 カーネルを生成します。 オペレーター FIRoperatorNxM_VerticalEdges および FIRoperatorNxM_HorizontalEdges が、式 47 に従ってx方向およびy方向の勾配を選択します。

HierarchicalBox GradientFilter の内容

図396:HierarchicalBox GradientFilterの内容


これらの勾配について、式 48に基づく勾配強度と方向がボックス MagnitudeOrientationに実装されています(内容と構造については図 397を参照してください)。実装されている式を理解しやすくするため、ボックス内に詳細なコメントが記載されています。

HierarchicalBox MagnitudeOrientation の内容

図397:HierarchicalBox MagnitudeOrientationの内容


8x8ピクセルのセルへのピクセルのグループ化は、HierarchicalBox ExtractBlocksで実行されます。このボックスの出力リンクは、64ピクセルのライン形式でセルの勾配強度と方向を転送します。この情報は、HierarchicalBox Histogramで実行されるHOGの計算の入力となります。その内容は図 398に示されています。

HierarchicalBox Histogram の内容

図398:HierarchicalBox Histogramの内容


ここでは、特定の領域にある勾配方向の を の 4 つのビンへの割り当てが、ボックス SplitOrientationsで行われます。ビンは , , および です。 デザイン「HOG_9Bins_Histogram.va」および「HOG_9Bins_HistogramMax.va」には 9 つのビン( を 次のステップサイズで: )が存在します。 特定のビンへの勾配方向の割り当ては、その方向がビンに対して持つ重みを計算する方法で行われます。例として、ビンの重み付けとその結果としてのビン 1 への割り当ては、 は図 399.

HierarchicalBox Bin1の内容

図399:HierarchicalBox Bin1の内容


ここでは、重み 。
中間画素位置の情報 49 がbin 1に対して計算されます。この例におけるbin間の角度距離 は (オペレーター CONST_Phi_45Deg です(box Sub45Deg)。bin 1の角度binの向き も (オペレーター CONST_Chi_45Degです)。各binの重み付け係数は、勾配マグニチュードと乗算されます(図 398を参照)。box HistogramColumn_0 を HistogramColumn_3 において、式 50 に従った各ヒストグラム列(各bin)の内容が、すべての画像ピクセルにわたる重み付けされた勾配マグニチュードの総和として計算されます。その後、オペレーター MergeKernel_Histogramを使用してヒストグラム列をマージすることにより、HOG(Histogram of Oriented Gradients)が生成されます。各カーネルコンポーネントの最後のピクセルのみがヒストグラム列の真の値であるため、これはbox LastPixelOnlyで選択されます。局所的な勾配の変化に対応するため、各セルのHOGは、 のオーバーラップを持つ、1ブロックあたり2x2セルのサイズを持つブロックに結合されます(このセクションの理論編を参照)。セルからブロックへの結合は、box ConcatenateWithNeighbors。その内容については図を参照してください。 400.

HierarchicalBox ConcatenateWithNeighborsの内容

図400:HierarchicalBox ConcatenateWithNeighborsの内容


HOGに関する情報を持つ各セル(単一ピクセルで表現)について、各ビンのヒストグラム列がオペレーター SplitKernelによって分離されます。各カーネルコンポーネントについて、x方向およびy方向の隣接セルがオペレーター PixelNeighbours1xMおよびLineNeighboursNx1によって計算されます。オペレーター FIRoperatorNxMは、2x2セルの情報を合算します。 ここでは正規化は実行されません。代替実装として、オペレーター Const_Enableをゼロに設定することで、セルからブロックへのグループ化を省略できます。計算されたHOGの最大値は、ボックス GetHistogramMaxで選択されます(図 395を参照)。その内容は図 401に示されています。デザイン「HOG_9Bins_Histogram.va」では、ヒストグラム最大値の選択は省略されています。

HierarchicalBox GetHistogramMaxの内容

図401:HierarchicalBox GetHistogramMaxの内容


最後に、ヒストグラムの最大値またはヒストグラム自体が、赤い線としてボックス Visualize(図 395を参照)で視覚化されます。 このボックス(パス:ボックス Draw、EnableOriginal)では、パラメータ ModuloCount_Period(フレームをカウント)、Is_InRange(フレーム範囲を設定)、およびConst_Enableを設定するか(またはConst_Enableを1に設定して)常に有効にすることで、HOG特徴量とともに一定数のフレームの元画像を視覚化することができます。最後のステップとして、HOG特徴量はオペレーター DmaToPC_DMA0経由でPCに転送されます。ここで、HOG特徴量は、サポートベクターマシン(SVM)や畳み込みニューラルネットワーク(CNN)における物体検出の記述子として使用できます。