Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ZytleBot: ROSベースの自律移動ロボットへのFPGAの統合に向けて

電子情報通信学会 リコンフィギャラブルシステム研究会(IEICE-RECONF)で招待講演をさせていただきました!!

『ZytleBot: ROSベースの自律移動ロボットへのFPGAの統合に向けて』
新田泰大・田村 爽・高瀬英希(京大)
https://www.ieice.org/ken/program/index.php?tgs_regid=7f90944888956d49fd614e247ba28ef36534711a688226a23579a18c938ecf2c&tgid=IEICE-RECONF

FPT/HEART FPGA Design CompetitionでのZytleBot = Zynq + TurtleBot3な開発話を共有させていただきました.
コンテスト参加学生の田村くん新田くん,改めてお疲れさまでしたっ!

  • Be the first to comment

ZytleBot: ROSベースの自律移動ロボットへのFPGAの統合に向けて

  1. 1. ZytleBot ROSベースの⾃律移動ロボットへの FPGAの統合に向けて 新⽥ 泰⼤・⽥村 爽・⾼瀬 英希 京都⼤学 ⼤学院情報学研究科 swords@lab3.kyoto-u.ac.jp
  2. 2. Agenda • プロローグ [⾼瀬] • ZytleBotに⽤いた⾃律移動アルゴリズム [⽥村] ­ ZytleBotの紹介 ­ HW/SWアルゴリズムの検討と選択 • ⾚信号認識のHWアクセラレーション [新⽥] ­ PS/PL連携 ­ 実装について • エピローグ [⾼瀬] 2
  3. 3. プロローグ • ROS (Robot Operating System)とは︖ • FPGA Design Competition?? • 我々の戦略
  4. 4. ロボット開発を取り巻く背景 • ロボットシステムの特徴 ­ 様々な情報技術の複合体 (姿勢制御,情報処理,⾃動化,プランニング,⼈⼯知能,など,,,) ­ 実世界の情報との密接なやり取り üリアルタイム/⾮リアルタイム処理の混在 ü膨⼤なデータの(統計的な)処理 ­ 限定された計算資源と電⼒量 4 統⼀化された開発フレームワークによる ロボットシステム設計開発の加速化に期待
  5. 5. ROSとは︖ (Robot Operating System) 5 http://www.ros.org/about-ros/ ROS is not just framework, but design platform for robots!! • Plumbing: 出版購読型の通信モデルとミドルウェア • Tools: プロジェクト管理,デバッグ,可視化,等 • Capabilities: 膨⼤なライブラリ・パッケージ • Ecosystem: 世界規模の強⼒なOSSコミュニティ
  6. 6. Plumbing • Publish / Subscribe messaging infrastructure ­ ROSノード︓ロボットシステムを構成する機能単位 üノードの登録・変更・削除が容易に実現できる ­ トピックを介した⾮同期型の通信⽅式 ü同期通信のserviceも提供されている 6 : : : :
  7. 7. Tools • catkin_tools: プロジェクト構成/ビルドシステム • rqt: Qtベースのデバッグフレームワーク • gazebo: 3D物理シミュレーションツール • rviz: 可視化ツール ­ 他にもroslaunch, rosbagなど,,, 7
  8. 8. Capabilities • ROSパッケージ ­ ロボットの有⽤な機能がまとめられたライブラリの集合 ümobility, manipulation, perception, etc.,,, ­ 2,000以上のパッケージが公開されている ühttps://index.ros.org/packages/ • パッケージ活⽤の利点 ­ 既存資産として活⽤できる ­ コンポーネント指向開発を実現できる • 公式サポートの⾔語(ROS 1)︓C++, Python, LISP ­ 他にも,C#, Java, Lua, Go, ruby, ,,, 8
  9. 9. Ecosystem • オンラインのコミュニティ ­ ROS Wiki: 各種⽂書の公開,パッケージ配布 ­ ROS Answers: Q&Aページ ­ ROS Discourse: リリースやイベントのアナウンス • オフラインのコミュニティ ­ ROSCon: 世界規模の開発者会議(最近はlocal Confも) ­ SIG meetups, tutorial workshop, local events, etc.,,, 9
  10. 10. ROS Compliannt Robots 10https://robots.ros.org Aerial Marine Component Sensor Ground Manipulator Motor
  11. 11. 学習⽤ロボット︓TurtleBot3 • ROS公式の研究・教育⽤ロボット組⽴キット ­ テーブルトップでROSやSLAMの学習が出来る ­ OSRF(open robotics)からのリクエストで誕⽣ ­ 改造の⾃由度が⾼く、ROS対応ロボット作成が容易 11
  12. 12. FPGA Design Competition • FPTおよびHEARTで 開催されている⾃律移動 ロボットの開発コンテスト • 道路を模したコースを⾛⾏ • センサ類はCMOSカメラのみ • FPGAが搭載されたSoCで 全てのプログラム動作を 完結させる必要がある • ⾞体の⼤きさやシステムの 構成は⾃由︕ 12 http://fpt19.tju.edu.cn/Contest/FPT201 9_FPGA_Design_Competition.htm
  13. 13. 我々の戦略 13 ⾃律移動ロボットの コンテストあるらしいぜ︖ ROSとTB3使うだけで この競技なら楽勝ちゃう︖ FPGA︖どっかROSノードを HLS掛けたらええだけやん うちらみたいなFPGA最弱チームでも ワンチャンいけんちゃう︖︖ 沖縄と⻑崎にも⾏けるよ楽しいよ︕ ⾦と⼝なら出すよ︕︕ (⼿を出すとは⾔っていない) そんな美味い話しが あるわけない,,, ROSまるで わからん,,,
  14. 14. ZytleBotに⽤いた ⾃律移動アルゴリズム • ZytleBotの紹介 • HW/SWアルゴリズムの検討と選択
  15. 15. ZytleBot 15 • Zynq + TurtleBot ­ Zynq Ultrascale+ : Heterogeneous MPSoC ­ TurtleBot3 : ROS standard platform robot kit
  16. 16. TurtleBot3 & ZytleBot 16 LiDAR Raspberry pi OmnichargeUSBCam Ultra96 Pcam 5C OUT IN
  17. 17. システム構成 & 分担 • ⽥村(SW) ­ ⾃動運転システム・システム インテグレーション ­ カメラ固定⽤3Dモデル作成 • 新⽥(HW) ­ ロボット機体組み⽴て・調整 ­ ⾚信号検出 HWアクセラレーション 17
  18. 18. 開発の流れ 18 FPT 2018 HW SW 2018/7~2018/9 ~2018/12 ~2019/6 シミュレータ作成 ライントレース によるコース周回 ZyboにROSを インストール 路⾯画像からの⾃律移動 アルゴリズム 第8回 相磯秀夫杯 ROS 2対応 FPGA利⽤のための ROSノード作成 Ultra96対応 HEART 2019 PCamからの 画像取得・画像前処理 Petalinuxビルド TurtleBot3認識 HOG特徴量計算 HW実装 HOG+SVM HW実装 HOG+RF ⾚信号検出 SW実装
  19. 19. 開発の流れ 19 HW SW 2018/7~2018/9 ~2018/12 ~2019/6 シミュレータ作成 ライントレース によるコース周回 ZyboにROSを インストール 第8回 相磯秀夫杯 PCamからの 画像取得・画像前処理 Petalinuxビルド TurtleBot3認識
  20. 20. 開発の流れ 20 FPT 2018 HW SW 2018/7~2018/9 ~2018/12 ~2019/6 路⾯画像からの⾃律移動 アルゴリズム FPGA利⽤のための ROSノード作成 HOG特徴量計算 HW実装 HOG+RF ⾚信号検出 SW実装
  21. 21. 開発の流れ 21 HW SW 2018/7~2018/9 ~2018/12 ~2019/6 ROS 2対応 Ultra96対応 HEART 2019 HOG+SVM HW実装
  22. 22. ROSの活⽤︓シミュレータ 22 • Gazeboシミュレータ ­ SW部分の実装&テスト ­ インテグレーションが容易 1 / 1/ 1 / 1 .
  23. 23. ROSの活⽤︓シミュレータ 23 • Gazeboシミュレータ ­ SW部分の実装&テスト ­ インテグレーションが容易 ⼊出⼒が実機と同じ︕ 作った⾃律移動プログラムが そのまま実機で動かせる︕ 1 / 1/ 1 / 1 .
  24. 24. HW/SWアルゴリズムの遷移 24 HW︓路⾯画像の⼆値化 SW︓ライントレース HW︓信号画像のHOG 特徴量 +⼆値化 SW︓特徴量からのラン ダムフォレストによる 推論 +⾃律移動 アルゴリズム HW︓SVMによる 信号検出 + ⼆値化 SW︓ ⾃律移動 アルゴリズム 第8回 相磯秀夫杯 FPT 2018 HEART 2019
  25. 25. HW/SWアルゴリズムの遷移 25 HW︓路⾯画像の⼆値化 SW︓ライントレース HW︓SVMによる 信号検出 + ⼆値化 SW︓ ⾃律移動 • Pcamから取得した画像が、CPUに⼊る前に モノクロに処理 ­ リアルタイム性◎ ­ CPU処理のオフロード • 処理された画像を使ってのライントレース HW︓信号画像のHOG 特徴量 + ⼆値化 SW︓特徴量からのラン ダムフォレストによる 推論 +⾃律移動
  26. 26. HW/SWアルゴリズムの遷移 26 HW︓路⾯画像の⼆値化 SW︓ライントレース HW︓信号画像の HOG特徴量 + ⼆値化 SW︓特徴量からの ランダムフォレスト +⾃律移動アルゴリズム HW︓SVMによる 信号検出 SW︓ ⾃律移動 アルゴリズム • ランダムフォレストによる⾚信号検出を実装 • ⼤量の条件分岐があるため、推論はHWに不向き ­ 推論をCPUで実⾏するため、⼤きな負担 • 処理性能︓⾃律移動のみ5fps、信号検知中は3fps ­ ラグも⼤きく、⾛⾏が安定しない
  27. 27. HW/SWアルゴリズムの遷移 27 HW︓路⾯画像の⼆値化 SW︓ライントレース HW︓信号画像のHOG 特徴量 +⼆値化 SW︓特徴量からのラン ダムフォレストによる 推論 +⾃律移動 アルゴリズム HW︓SVMによる 信号検出 + ⼆値化 SW︓ ⾃律移動 アルゴリズム • SVMはFPGA向き ­ 推論までFPGAで⾏えるため、CPUの負担が軽減 • Zybo ⇨ Ultra96に、処理性能が格段にアップ • 結果、10fps以上で安定⾛⾏
  28. 28. FPGA×ROS • 2段階の⼿順 1. PS/PL間のインタフェースを作る 2. ROSからインタフェースを利⽤ • 1は後述 • 2については、 a. makefileでビルドできるC, C++プログラムを作成 b. ⼊出⼒に関してのROS APIを追加 c. ビルドシステム(catkin, colcon)でビルド 28
  29. 29. ⾚信号認識のHWアクセラレーション • PS/PL連携 • ⾚信号認識のHWアクセラレーション
  30. 30. 開発内容 • 開発内容 ­ FPGAで動作する回路の設計 üVivado HLSで開発 30
  31. 31. 開発内容 • 開発内容 ­ FPGAで動作する回路の設計 ­ ボード⽤Linux Kernel, rootfsの構築 ­ デバイスドライバ・デバイスツリーによるPS/PL連携 ­ ロボット機体の組み⽴て・電源・パーツの選定 • 相磯杯・FPT 2018 ­ Petalinux on ZYBO Z7-20 ­ ZYBOのUSB Hostの電流不⾜問題 ­ TurtleBot3 OpenCRが認識されない問題 • HEART 2019 ­ Ubuntu on Ultra96 31
  32. 32. ボード上で動作するLinuxの構築 • Linux Kernel, rootfsの構築 ­ Petalinux üお⼿軽 üカスタマイズするとなると不⾃由 ­ ⾃前で構築 üXilinx-linuxのリポジトリをクローン • ZYBOのUSB Hostの電流不⾜ ­ 2つ以上デバイスを接続すると落ちる ­ セルフパワーハブを使⽤ • OpenCRが認識されない ­ Linux Kernelのコンフィグを修正 32 CONFIG_USB_ACM=y CONFIG_USB_SERIAL=y CONFIG_USB_SERIAL_GENERIC=y
  33. 33. PS/PL連携 • FPGAの回路をLinuxにデバイスとして認識させる ­ デバイスツリー üARM Linux 向けのデバイス情報の記述ファイル ü物理アドレス等のプロパティをドライバが読み込む 1. メモリマップドIO ­ devmemで制御(危険︕) 2. UIO(User space IO) ­ ユーザプロセスから指定範囲のメモリを操作する機能 ­ compatible = “generic-uio” のみ指定 3. デバイスドライバの作成 ­ 安全・⼿間がかかる 33
  34. 34. PS/PL連携 • 例︓VivadoHLSで合成した回路をLinuxから操作 • デバイスツリーを記述 ­ Petalinuxを使⽤する場合:system-user.dtsiに記述 ­ Device Tree Overlayを使⽤する⽅法もアリ ­ /sys/class/uio以下にデバイスとして登録される 34 myip { compatible = "generic-uio"; reg = <0x0 0x80010000 0x0 0x10000>; interrupt-parent = <&gic>; interrupts = <0 89 4>; }; 参考︓ https://qiita.com/tetsu_koba/items/5cb1f3b61d0b2b6f4e2b https://qiita.com/ikwzm/items/5099d36b1bfd8009dce4
  35. 35. PS/PL連携 • VivadoHLSからドライバプログラムが⽣成される ­ デバイスドライバではない ­ x[ip_name].c, x[ip_name].h, x[ip_name]_hw.h, x[ip_name]_linux.c, x[ip_name]_sinit.c ­ IPの開始・終了・割込設定に必要なレジスタ・設定⽤の 関数が記述されている (uio使⽤が想定されている) 35
  36. 36. PS/PL連携 • VivadoHLSからドライバプログラムが⽣成される ­ 合成する回路の⼊出⼒プロトコルがAXI4/AXI Liteの場 合、⼊出⼒ごとに関数が⽣成される ümmapで物理アドレス⇔仮想アドレス変換後、関数を 呼び出せば⼊⼒アドレスがセットされる ­ AXISの場合はアドレス情報がないため、⽣成されない üAXI DMAを⽤いてPSとデータ送受信 üudmabuf等を⽤いてPSからDMA操作 • Vivado HLS/Linux連携の公式ドキュメントは⾒つからない 36
  37. 37. 物体認識のアルゴリズム 37 • なにがどこにあるかを検出
  38. 38. 物体認識のアルゴリズム 38 • 分類器を繰り返し⽤いる⽅法 分類器・・RF, SVM CNN • スライディングウインドウ法 • 全ての位置・全てのスケールについて試⾏ • 選択的検索法 • R-CNN, Fast-RCNN, Faster-RCNN 領域候補を挙げてそれらをCNNに⼊⼒ • 回帰的に物体検出を⾏う⽅法 • YOLO, SSD end-to-end学習が可能 領域候補 分類器 分類器 特徴量選定要 特徴量選定不要 参考︓ https://qiita.com/mshinoda88/items/9770ee671ea27f2c81a9
  39. 39. ⾚信号検出器の開発 • FPT2018ではHOG特徴量+ランダムフォレスト法 ­ HOG特徴量をFPGAで計算・RFはSWで計算 ­ 毎フレーム,すべてのウインドウについて計算 üHWコアを1フレームにつき300回以上呼び出す üSW/HW通信がボトルネックに︓3fps程度 ­ ランダムフォレストをHW実装するとFF,LUTを⼤量使⽤ üIF⽂の数だけマルチプレクサが使⽤される 39 c.f. プログラマブルSoCを活⽤した⾃動運転ロボットにおける 交通信号検出タスクの設計空間探索, 新⽥ 泰⼤, ⽥村 爽, ⾼瀬 英希, ⾼⽊ ⼀義, 髙⽊ 直史(京都⼤学), ETNET2019 種⼦島
  40. 40. ⾚信号検出器の開発 • HEART2019ではRF→SVMに変更 ­ 特徴量抽出からSVMによる推論まで全てをHWで実装 ­ 1フレームにつきHWの呼び出しは1回で済む ­ ⼀部の特徴量が計算された時点で推論の計算を開始でき るため⾼速(後述) 40 Python+Scikit- learnで学習 全てC++に移植 (アルゴリズムの 理解) VivadoHLSでHW 実装
  41. 41. 現実的な問題 41 • 理想︓DNN on FPGAに挑戦 • 現実︓コンテストまで1ヶ⽉ p ZyboZ7からUltra96への移⾏ » カーネルビルド » ⾞体の電源回り p 他にもやることがいっぱい・・ HOG+SVM on FPGAで妥協 以前HOG+RF on FPGAが遅かったのでそれを改善したいのもあった
  42. 42. HOG特徴量 42 HOG: Histogram Of Gradients,輝度勾配 0. ⼊⼒画像︓グレースケール画像 1. 各画素について輝度勾配・⼤きさを求める 2. 各セル(8*8)毎にヒストグラムを作成 ビン︓勾配の⾓度 データ︓勾配の⼤きさ 𝐺" = 𝐼 𝑦 + 1, 𝑥 − 𝐼 𝑦 − 1, 𝑥 𝐺+ = 𝐼 𝑦, 𝑥 + 1 − 𝐼 𝑦, 𝑥 − 1 𝑚𝑎𝑔"+ = 𝐺+ / + 𝐺" / , 𝜃"+ = arctan( 78 79 ) 180 0 20 80 60 40 100 120 140 160 1 2 34567 8 9 8pix cell 1 2 3 4 5 6 7 8 9 Histogramℎ",+,< ≔ セル 𝑦, 𝑥のビン 𝑖の値 (0,1) (2,1) (1,0) (1,2)
  43. 43. HOG特徴量 43 3. 各ブロック(2*2)ごとに、ヒストグラムの値を正規化 隣接するブロックは8pix=1セル分重複している 4. 各ブロックごとの、各セルの正規化済みのヒストグラムの値がHOG特徴量 ex) 32pix*64pix cellℎ′",+,< = ℎ",+,< ブロック内の全て(64個) の𝑚𝑎𝑔合計 block ( B/ C − 1) ∗ ( EF C − 1) ∗ 4 ∗ 9 = 756個の特徴量
  44. 44. HOG+SVMで⾚信号検出 44 • 線形SVM分類器 * Sliding Window法 w: 学習した重み θ︓バイアス x : 抽出した特徴量 • 特徴量︓RGB,HSV画素値 + HOG特徴量 ­ HOG: Histogram Of Gradients,輝度勾配 𝑡 = K <LM N 𝑤< 𝑥< + 𝜃 𝑝𝑟𝑜𝑏𝑎 = 𝑠𝑖𝑔𝑚𝑜𝑖𝑑(𝑡)
  45. 45. ⾚信号検出 45 8x8 Resize 8x8 RGB→HSV 32x64 HOG特徴量計算 SVM 32x64 RGB→GRAY 32x64 RGB 32x64x3 32x64 3x7x9 8x8x3 8bit x 8x8x3 8x8x3 1 画素特徴量計算 K 𝑤𝑥 + 𝜃
  46. 46. FPGA実装 46 • Vivado HLSで実装 • ⼊⼒︓320*240pix RGB画像 • 出⼒︓1287個のウインドウのSVM推論結果 • 1度のHW呼び出しで1フレーム全体を処理 • SVM推論器はFPGA実装向き • ∑𝑤𝑥 + 𝜃 • ⼀部の特徴量が算出された時点で 部分和の計算を開始できる • 以下の論⽂を参照 BGR->GRAY BGR->Resize magnitude, theta create_histo gram normalization HOG-SVM BGR-SVM Merge Luo, Jian & Lin, Chang. (2018). Pure FPGA Implementation of an HOG Based Real-Time Pedestrian Detection System. Sensors. 18. 1174. 10.3390/s18041174.
  47. 47. FPGA実装 47 • Vivado HLSで実装 • ⼊⼒︓320*240pix RGB画像 • 出⼒︓1287個のウインドウのSVM推論結果 • 1度のHW呼び出しで1フレーム全体を処理 • SVM推論器はFPGA実装向き • ∑𝑤𝑥 + 𝜃 • ⼀部の特徴量が算出された時点で 部分和の計算を開始できる • #pragmaによるデータフロー最適化 BGR->GRAY BGR->Resize magnitude, theta create_histo gram normalization HOG-SVM BGR-SVM Merge #pragma HLS DATAFLOW #pragma HLS STREAM variable = bgr_hsv_resultstream depth = 100 dim = 1 grayscale_and_resizing(instream, gray_pix, upper_scaled_rgb, bottom_scaled_rgb); compute_mag_and_bin(gray_pix, magstream, binstream); cell_histogram_generate(magstream, binstream, bottom, upper); block_histogram_normalization(bottom, upper, ul_out, ur_out, bl_out, br_out); hog_svm_classification(ul_out, ur_out, bl_out, br_out, hog_resultstream, ..); bgr_hsv_svm_classification(upper_scaled_rgb, bottom_scaled_rgb, bgr_hsv_resultstream,..)
  48. 48. FPGA実装 48 • Vivado HLSで実装 • ⼊⼒︓320*240pix RGB画像 • 出⼒︓1287個のウインドウのSVM推論結果 • 1度のHW呼び出しで1フレーム全体を処理 • SVM推論器はFPGA実装向き • ∑𝑤𝑥 + 𝜃 • ⼀部の特徴量が算出された時点で 部分和の計算を開始できる • #pragmaによるデータフロー最適化 BGR->GRAY BGR->Resize magnitude, theta create_histo gram normalization HOG-SVM BGR-SVM Merge #pragma HLS DATAFLOW #pragma HLS STREAM variable = bgr_hsv_resultstream depth = 100 dim = 1 grayscale_and_resizing(instream, gray_pix, upper_scaled_rgb, bottom_scaled_rgb); compute_mag_and_bin(gray_pix, magstream, binstream); cell_histogram_generate(magstream, binstream, bottom, upper); block_histogram_normalization(bottom, upper, ul_out, ur_out, bl_out, br_out); hog_svm_classification(ul_out, ur_out, bl_out, br_out, hog_resultstream, ..); bgr_hsv_svm_classification(upper_scaled_rgb, bottom_scaled_rgb, bgr_hsv_resultstream,..) #pragma HLS DATAFLOWは関数のバイパスは サポート外(動作未定義) DataFlowViewerで確認してFIFOが推定さ れていなかったところだけ明⽰
  49. 49. FPGA実装 49 Line Buffer Line Buffer Pixel Calculate Gradient Window Register magnitude, bin_index
  50. 50. FPGA実装 50 Partial Histogram Buffer Partial Histogram Buffer Partial Histogram Buffer Histogram Buffer Histogram Buffer ヒストグラム 完成︖ + bottom cell upper cell … Yes Histogra m Voter x8 𝑷 𝟎,𝟎
  51. 51. FPGA実装 51 Partial Histogram Buffer Partial Histogram Buffer Partial Histogram Buffer Histogram Buffer Histogram Buffer ヒストグラム 完成︖ + bottom cell upper cell … Yes 𝑷 𝟕,𝟎 𝑷 𝟔,𝟎 𝑷 𝟎,𝟎 𝑷 𝟏,𝟎 𝑷 𝟎,𝟑𝟗 𝑷 𝟏,𝟑𝟗 𝑷 𝟔,𝟑𝟗 Histogra m Voter
  52. 52. FPGA実装 52 Partial Histogram Buffer Partial Histogram Buffer Partial Histogram Buffer Histogram Buffer Histogram Buffer ヒストグラム 完成︖ + bottom cell upper cell … Yes Histogra m Voter 𝑪 𝟏,𝟎 𝑪 𝟎,𝟎 𝑪 𝟏,𝟎 𝑪 𝟎,𝟎
  53. 53. FPGA実装 53 sum divide divide ブロック 完成︖ ブロック 完成︖ ブロック 完成︖ Yes Yes Yes No zeroing sum of cell bottom cell upper cell upper_left upper_right bottom_left bottom_right
  54. 54. FPGA実装 54 sum divide divide ブロック 完成︖ ブロック 完成︖ ブロック 完成︖ Yes Yes Yes No zeroing sum of cell 𝑪 𝟎,𝟏 𝑪 𝟏,𝟏 𝑪 𝟎,𝟐 𝑪 𝟏,𝟐 𝑪 𝟎,𝟎 𝑪 𝟏,𝟎 bottom cell upper cell 𝑪 𝟎,𝟎 𝑪 𝟎,𝟏 𝑪 𝟏,𝟎 𝑪 𝟏,𝟏 𝑪 𝟎,𝟏 + 𝑪 𝟏,𝟏 upper_left upper_right bottom_left bottom_right
  55. 55. FPGA実装 55 weight ROMweight ROM weight ROM Multiply Accumulator Partial Sum RAM 33x4 ウインドウ 完成︖ + + Yes No zeroing bias output vertical number of block in window= • 同じ特徴量に対し異なる重みが乗算される • 縦に並列に計算
  56. 56. 実装結果 56 • 学習 • Python+Scikit-learn パラメータを抽出 • 合成結果 • Latency 207736clock • 2.7clock/pixel • データ依存が数か所存在 • 実⾏結果 • AXI DMAでPSと接続 • udmabufでDMA制御 • HW使⽤ ︓6.22milisec / 160fps SWのみ︓1700milisec / 0.58fps • 275倍⾼速化 https://github.com/lp6m/ImageDetectionHW2
  57. 57. 弱点・感想 57 • 偽陽性の検出率が⾮常に⾼い • 線形SVMの弱点︓特徴量間の関係性を無視 • 速度は⾮常に速い • 認識する物体ごとにIPが必要 • ⼈形・障害物・信号全てはリソース不⾜
  58. 58. DNN on FPGA 58 • 様々な研究が⾏われている • あまり考えずにとりあえず試してみたい • 公開されている有名なフレームワーク • DNNDKを触ってみた
  59. 59. DNN on FPGA 59 ネットワークの圧縮 量⼦化 float32bit->Int8bit 2値化(+1, -1) XOR演算で処理 圧縮のタイミング 学習後に量⼦化を実⾏ 2値のまま学習 (精度が落ちにくい) 実装⽅法 DPU IP 重み・モデルはSWから転送 (HWの変更不要) モデルごとにIP化 (HWの変更要) オープンソース × 〇 対応ボード Xilinx Xilinx, Intel
  60. 60. DNN on FPGA 60 • DNNDKのワークフロー ­ Caffe, Tensorflow対応 ­ 右図ではdarknetからCaffeに変換 • decent ­ 重みの量⼦化 ­ キャリブレーション処理 (テストデータを使⽤して量⼦化 のチューニングを⾏う) • dnndc-dpu ­ DPU向けの命令にコンパイル
  61. 61. DNN on FPGA 61 • モデル︓YOLOv3 darknet ­ end-to-end学習が可能 ­ 学習したモデルをDNNDKで量⼦化 • チュートリアル通りにやれば簡単に動作した
  62. 62. まとめ・今後 62 • ROSをうまく活⽤し、HW/SWを平⾏開発 • HOG+ランダムフォレスト <<<< HOG+SVM • DNNDK等のフレームワークにも期待 • 今後 • 物体認識の改善 • とりあえず有名フレームワークでの⼈形認識 • 余裕があれば⾃前実装にも挑戦したい • 有名ROSパッケージのHW実装
  63. 63. エピローグ
  64. 64. Competition結果 • FPT2018にてZytleBot優勝︕ • 14チーム中3チームがROS採⽤ ­ 半数以上のチームがロボットが動かな かった中、ROSを使っていたチームは 全て動作、内2つが決勝進出 • HEART2019でも2連覇︕ 64
  65. 65. Publication!?? 65 FPT2018 HEART2019 DATE2019 U-Booth FPL2019 Demo Night ROSCon JP 2019 https://roscon.jp/
  66. 66. (just)DesignからResearchへ︖ • 教育効果とそのコスパはとても良い • 研究室内でもFPGA設計の知⾒が蓄積されてきた • “research” に繋がっているか︖︖ ­ 既存技術を使った/組み合わせただけ ­ 実装上の⼯夫もあまり無い/性能を稼ぐ必要が無い üそもそも⾔うほどシビアなアプリじゃないですね,,, ­ 少なくとも “framework” あるいは “methodology” にはしないといけない この辺り,皆さんのご意⾒を伺いたいですm(_ _)m 66

×