発展課題アイデア案 - takgto/utokyo-chipathon2023 GitHub Wiki

ここに書いてあるのはあくまでもアイデアの案です。これをきっかけにオリジナルな実装をやってみましょう。 講義はハッカソンなのでYOLOv3を行うのはあくまでも一例です。自由に考えましょう。 目安として難易度を:star:で書いておきます。

1. yolov3-tinyを実装する ⭐

yolov3にはパラメタ数の少ないyolov3-tinyが存在します。これを実装すれば精度は下がりますが、FPSは向上が望めるかも?
このページにコマンドが記載されています。参考にしてください。

2. パイプライン化マルチスレッド化 ⭐⭐⭐

yolov3_video_subject1.cppはシーケンシャルな処理ですが、パイプライン化マルチスレッド化をうまく行うことが出来れば高速に処理出来ることがわかっています。講義資料にヒントが書いてあります。
~/Vitis-AI/examples/VART/yolov3にあるyolov3_video_study.cppはマルチスレッドの参考ソースコードです。メイクして動かしてみてください。単純にスレッド化しているだけなので、更に速度改善の余地があります。

3. 入力画像サイズを変えてみる ⭐

これも精度が下がりますが、処理が早くなります。モデルの再学習が必要です。講義資料に詳しいやり方が書いてあります。

4. モデル構造を変える ⭐⭐⭐⭐

kerasモデルをonnxに変えることでonnx-simplifierを使用することが出来ます。これにより、モデル構造がシンプルになり、処理速度が上がるかもしれません(TAアイデアです。未検証です。)

5. モデルを分割する ⭐⭐⭐⭐⭐

上の構造をsimpleにするものに加え、simple-onnx-processing-toolssne4onnxを使用すれば、モデルを分割することが出来ます。これにより、パイプラインでクリティカルパスになっている推論を分割することが出来るようになり、大幅な性能向上が可能になるかもしれません(TAアイデアです。未検証です。)

6. AI Edge Contest入賞者の行っていたことを真似する ⭐⭐⭐

入賞者の手法が公開されています。上記にもある方法がほとんどですが、より具体的に説明されているので真似しやすいかも?ただし、コンテストの期間が数ヶ月に対して、こちらは4日間なので気をつけて…

7. DPUのチューニングをしてみる ⭐⭐⭐⭐

DPUのチューニング方法を見てDPUをチューニングしてみましょう。

8. verilogを書いてオリジナルの回路をlinuxから動かす ⭐⭐ ~ ⭐⭐⭐⭐⭐⭐

KV260はFPGAなので、オリジナルの回路を書くことが出来ます。Lチカ相当のことを行うのは比較的容易です。参考記事1

また、面白いことにLinuxからFPGAの回路を制御したりすることも出来ます。MicroSDカードをUbuntuに書き換えたり、Vitisをinstallしたりする必要があるため、やりたい場合はなるべく早くTAに教えてくれるとサポートがしやすいです。参考記事2

また、Xilinxの公式チュートリアルも参考になりますが、こちらはpetalinuxでの開発となっています。(このチュートリアル自体はUbuntuでもうまくいきますが、オリジナルハードがうまくいくかは保証出来ません…)

一度Linuxからverilogの回路を呼び出せるようになると色々なことが出来るようになります。以下はその例です。

verilogの並列性を活かした高速な行列演算器を実装してみる
MNISTに対して2層か3層くらいのNNを作り、これをverilogで実装してみる
画像データに対して変換(アフィン変換など)をしてみる