16-03 GTSRB クラス削減版 FPGAに実装

●重み係数、バイアス、カメラエミュレータ、推論パターンのHDL置き換え

 GTSRB(道路標識認識)のクラス数を43から
10に変更してFPGAにプログラムします。

 まず、ここで作成したQuartusプロジェクトのフォルダを開き、このアーカイブ内のHDLと置き換えます(図16‐15)。

図16‐15 クラス数10用に変更したHDLをコピー

●HDLを置き換えて論理合成

 Quartus Primeからプロジェクトを開きます。図16‐11のようにHDLが置き換わっているか確認するとよいでしょう(*1)。確認後、Start Compilationボタンをクリック。

(*1)conv_layer6.vhdのBIAS_XXを確認。最終層のバイアスはGTSRBでは43個あったが、クラス数を10に変更したので10個になっている(BIAS_10以降は0)

図16‐16 conv_layerX.vhdはバイアスだけが変わっていくる

●そのままでは閾値が低すぎる

 エラーなくコンパイルが終了したら、ここに倣ってProgrammer→NiosII SBTと進みます。 一通り手順を終えると、図16‐17のように推論ラベルパターンだらけになっているかもしれません。クラスが10種と少ないせいか、判定の
閾値を高く設定する必要があるようです。

図16‐17 推論ラベルパターンで埋め尽くされている

●マイコンのCソースでしきい値を高くする

 閾値(THRESH)はNiosIIマイコンで設定します。NiosII SBTを開いて、Cソースを図16‐18のように変更します(*2)。

(*2)誤認識が多い(標識が無いのに推論パターンが出てくる)場合はTHRESHを高くする。HDLではなくCソース(マイコン)で設定すると論理合成の必要がないので素早く変更できる

図16‐18 0x32(50) -> 0xC0(192) と4倍近く大きくする

この画像を紙に印刷してかざす

 図6‐19のようにテスト画像のサンプルを印刷してカメラの前にかざします。あまり鮮明な印刷ではないですが、そこそこ認識できます。


図16‐19 一番下が 20, 30, 50, 60, 70 その上が 80, 80斜線, 100, 120, 車2台の標識


●Pythonで認識率97%台ならこんな感じ

 図16‐20のように推論パターン("20km limit"の標識なら"20")が出てきます。クラス数が43のときはこの辺り(速度制限の標識)はあまり認識できませんでしたが、クラス数を
10に減らした結果、認識しやすくなったと思います。

図16‐20 一番下の5つは皆正解、その上の5つは4つ正解

目次へ戻る