モデル変換 - takgto/utokyo-chipathon2023 GitHub Wiki

この手順では、重みファイルをFPGAで使える形式に変換します。
配布したPCにはWSL2でLinux環境が構築されています。エクスプローラーでLinuxディレクトリを編集することもできます。

手順では、WSL2(Ubuntu)とMobaXtermのターミナル(黒い画面)を使用します。コマンドを実行する際は、どちらの画面を使うか先頭のアイコンで示しています。
ubuntu小 このアイコンのついているコマンドはUbuntu(WSL2)のコンソールに一行ずつ入力してください。
serial小このアイコンのついているコマンドはMobaXtermのSerial接続したコンソールに一行ずつ入力してください。
SSHこのアイコンのついているコマンドはMobaXtermのSSH接続したコンソールに一行ずつ入力してください。

0. FPGA接続

箱の中にケースに入ったSDカードが入っているので、それを基板のスロットに挿してください。
PCとFPGAをケーブルで接続して始めます。
まだ接続していない場合はFPGA接続方法のページを参考にしてください。

1. SSH接続

この後、スクリプトを実行してモデル変換とファイル転送を行います。そのためにまずはPCと基板間でSSH接続を確立させます。

1.1. MobaXtermでSerial接続

FPGAの接続ページのようにケーブルがつないだ状態で、タスクバーまたはスタートメニューからMobaXtermを立ち上げSessionからSerialで接続します。
image
image image COM4もしくはCOM7など、2つ見えているうちの小さいほうの番号のポートを選び、Speedはプルダウンメニューから115200bpsを選びます。
OKを押して接続します。

serial小アイコンのタブが開いたら、電源を接続します。
すると、コンソールに文字が表示されます。root@xilinx-kv260-starterkit-20221:~#と出てきて表示が止まったら正常に起動しています。 コンソールに数行しか文字が出てこない場合は、大きい方の番号のポートも試してみてください。

1.2. IPアドレスなどを設定する

次のコマンドをMobaXtermのSerialコンソールに入力します。

serial小

source ./init260.sh

この時、以下のようなメッセージが出ることがありますが、問題ありません。
link_failed画像 これは、init260.shの中で作成しようとしているシンボリックリンクが、既にあるというメッセージです。

init260.shの中身は以下のようになっています。
image
1行目でIPを指定しています。
2行目以下でaliasを設定しています。
例:
$ yolov3s = cd /home/root/Vitis-AI/examples/Vitis-AI-Library/samples/yolov3
  yolov3s入力でFPGAで推論するためのテストコードがあるディレクトリに移動します。
$ model = cd /usr/share/vitis_ai_library/models
  model入力で量子化したモデル(*.xmodel)が入っているディレクトリに移動します。

Serialコンソールでこれらのaliasが使えるようになります。この後SSHでもFPGAに接続しますが、SSHコンソールで同じaliasを使いたい場合は、再度SSHコンソールのrootディレクトリ(init260.shがあるディレクトリ)で再度source ./init260.shを入力します。
または、aliases(rootディレクトリにあります)にもinit250.shの2行目以下が記載されているので、SSHコンソールで以下のコマンドを用いても同様のaliasが使えるようになります。

serial小

source ./aliases

Serialコンソールで以下のコマンドをタイプしてipが表示されることを確認します。

serial小

ifconfig

eth0の下にinet 192.168.1.100が含まれていない場合は、イーサネットケーブル(水色)の接続を確認して、電源の抜き差しを行いもう一度kv260を立ち上げます。その後、もう一度source ./init260.shを実行します。

1.3. FPGAで推論するための準備

まず、PCのIPアドレスを設定します。
スタートメニューの「設定」から「ネットワークとインターネット」、「イーサネット」と進みます。 「IP割り当て」、「IPv4アドレス」、「IPv4マスク」の右の「編集」からIPアドレスを手動で設定します。
IPアドレス:192.168.1.10
サブネットマスク」255.255.255.0
(既に設定されていれば変更不要です) 「保存」をクリックして設定します。

IPアドレスを設定できたら、MobaXtermで新しいSessionを開き、SSHSSHで接続します。
image Remote hostに192.168.1.100を入力します。Specify usernameのチェックを入れて、空欄にrootと入力します。
OKをクリックしてSSHでFPGAに接続すると、パスワードを聞かれるのでrootと入力してください。
Serialと同様にroot@xilinx-kv260-starterkit-20221:~#が表示されたら、イーサネットで正常に接続できています。

[!TIP] 作業中にSSH接続が切れることがあります。その時はイーサケーブルを抜き差しして、Serialコンソールにsource ./init260.shを再度入力してください。

2. ターミナルを起動する

タスクバーかスタートメニューから以下のアイコンをクリックします。
image
タブの右にある下向きの>をクリックして、「スクリーンショット 2024-05-08 104017Ubuntu」を開きます。
アイコンが違う場合や名前にバージョンが入っている場合がありますが、バージョン18~20.04なら問題ありません。 image $が表示されるまで待ちます。コマンドはここに入力します。
スクリーンショット 2024-05-08 104542

3. 作業ディレクトリに移動する

WSL2のhomeディレクトリに、Vitis-AIディレクトリを用意してあり、ここに必要なファイルがあります。Vitis-AIディレクトリに移動します。

ubuntu小

cd Vitis-AI

4. 学習済みweightをコピーする

Windowsの/Users/x-nics-kuroda/Downloads/work_best_weightsにあらかじめ用意されたyolov3-416_final.weightsをコピーする

ubuntu小

cp /mnt/c/Users/x-nics-kuroda/Downloads/weights/yolov3-416_final.weights /home/x-nics-kuroda/Vitis-AI/yolov3-dlab/work/backup

コピー元のパスは各個人に合わせること
ユーザー名のx-nics-kurodaはguestの場合もあるので確認してから実行してください。

自分で学習を行ったweightを使う場合は、Google driveの学習結果ファイルdarknet/work/backup/(config名_*).weightsをダウンロードして使用します。 最も高い性能を示した重みファイルは(config名)_best.weightsとして保存され、今回の場合、yolov3-416_best.weightsとなります。

5. Docker起動

PCのディスクトップまたはタスクバーのDocker DesktopのアイコンをダブルクリックしてDockerを起動します(数分かかる)

image

ubuntu小

docker images

上記をUbuntuコンソールにタイプして、次のように表示されればOK

ubuntu小

REPOSITORY            TAG       IMAGE ID       CREATED         SIZE  
my_vitis-ai-cpu       latest    2979897c870f   2 months ago    21GB  

上記は表示例です。my_vitis-ai-cpu以外のREPOSITORYがある場合もありますが、my_vitis-ai-cpuがあれば問題ありません。

以下のコマンドでDockerのコンソールを起動します。

ubuntu小

./docker_run.sh my_vitis-ai-cpu:latest

image

最初の起動では何回かPress any key to continue...と表示されるので、都度何かキーを押してください。
Do you agree to the terms and wish to proceed [y/n]?と表示されたらyを入力してEnterキーを押してください。

image

以降、このUbuntuコンソールはDockerのコンソールになります。Ubuntuにあるファイルをコピーする、等Ubuntuコンソールを再度使用したい場合は別のコンソールを立ち上げてください。

6. Conda環境立ち上げ

ubuntu小(Docker)

conda activate vitis-ai-tensorflow2

7. モデル変換スクリプト実行

まずはスクリプトのあるディレクトリへ移動します。

ubuntu小(Docker)

cd /workspace/yolov3-dlab/scripts_tf2

ここにdeploy_model.pyというファイルがあります。これはモデル変換を行い、できたファイルをFPGAへ転送します。
使いたい.cfgファイルと.weightsファイルを指定して、以下のコマンドを入力します。
まずは416のファイルを試してみましょう。

ubuntu小(Docker)

python deploy_model.py --config_name yolov3-416.cfg --weights_name yolov3-416_final.weights

しばらく待つと、パスワードを求められるはずです。もしパスワードを求められずに入力待ち(プロンプト)が表示された場合は、ファイルができているかどうかを確認してください。
以下のような表示が出てきたら、転送は成功しませんでしたがファイルはできています。
未完了

この表示が出た場合は以下の【Tips】を試してみてください。表示が出る前に止まってしまった時はTAを呼んでください。

[!TIP] 転送がうまくいかない時は?

MobaXtermのSSH接続画面SSHでEnterキーを押して、改行がされることを確認してください。 改行されない時はSSH接続が切れています。イーサケーブルを抜き挿しして、PC側のポート、基板のポートどちらも奥まで挿入されていることを確認してください。 その後、MobaXtermのSerialコンソールに以下のコマンドを入力します。

serial小

source ./init260.sh
ifconfig

eth0の下にinet 192.168.1.100が含まれていることを確認して、再度スクリプトを試してください。

8. KV260へのモデルデプロイ(転送)

以下のような画面でパスワードを求められたら、スクリプトが正常に進んでいます。
password
文字を入力しても何も表示されませんが、rootと入力してEnterキーを押してください。正しく入力できていれば、KV260に接続されます。
次に以下のような画面になります。
folder
ここで指定した名前が、KV260側でのフォルダ名および各ファイル名(.xmodel / .prototxt)に自動で統一されます。何も入力せずEnterキーを押すと、自動的にデフォルトの名前になります。ここではyolov3-416という名前のフォルダが作られます。
転送しますか
転送しますか?と訊かれるので、yと入力してEnterキーを押します。
ディレクトリ
もう一度パスワードを求められるのでrootと入力します。ちなみに、スクリプト実行2回目以降はこの転送のパスワードは求められなくなります。
正常に転送されると、以下のような表示になります。
完了

転送が完了した場合は、FPGAボードでの推論を行います。 次のページへはここをクリック。

参考 : モデルの手動転送方法

もし、以下のように表示された場合は、ファイルはできていますが、FPGAに転送されていません。
未完了
この表示が出る前に止まってしまった時はTAを呼んでください。
転送できなかった場合もファイルはできているので、手動でファイルをFPGAに転送すれば続けられます。

以下に手動でのファイルの転送方法を記載します。
/workspace/yolov3-dlab/compiled_yolov3ディレクトリに、yolov3-416_final.xmodel、meta.json、md5sum.txtの3つのファイルが生成されているはずです。これら3つのファイルをFPGAボードに転送します。
まずはFPGAにディレクトリを作成します。

[!TIP] 他の重みファイルを変換する時の注意 ディレクトリ名とファイル名(拡張子なし)は一致させてください。 例えば、 /usr/share/vitis_ai_library/models/my_dpu_yolov3としたら、その下のファイル名は、 my_dpu_yolov3.xmodel, my_dpu_yolov3.prototxt, md5sum.txt, meta.json とする必要があります。 スクリプトを流すと、フォルダ名入力を求められて、自動的にフォルダ名とファイル名を一致させてくれます。

次のコマンドをMobaXtermのSSHコンソールに入力してディレクトリを生成します。

SSH

cd /usr/share/vitis_ai_library/models
mkdir yolov3-416

以下のコマンドでFPGAに転送してください。転送時にディレクトリ名に合わせてファイル名を変更します。

ubuntu小(Docker)

scp /workspace/yolov3-dlab/compiled_yolov3/yolov3-416_final.xmodel [email protected]:/usr/share/vitis_ai_library/models/yolov3-416/yolov3-416.xmodel

ubuntu小(Docker)

scp /workspace/yolov3-dlab/compiled_yolov3/md5sum.txt [email protected]:/usr/share/vitis_ai_library/models/yolov3-416

ubuntu小(Docker)

scp /workspace/yolov3-dlab/compiled_yolov3/meta.json [email protected]:/usr/share/vitis_ai_library/models/yolov3-416

また、prototxtを転送します。/workspace/yolov3-dlab/workディレクトリにyolov3.prototxtというファイルがあるので、名前を変更して転送します。

scp /workspace/yolov3-dlab/work/yolov3.prototxt [email protected]:/usr/share/vitis_ai_library/models/yolov3-416_final/yolov3-416.prototxt

次はFPGAボード(KV260)での推論に進みます。次のページへはここをクリック。