Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python(PYNQ)がテーマのAMD主催のFPGAコンテストに参加してきた

 Python(PYNQ)がテーマのAMD主催のFPGAコンテストに参加してきた

ミソジ 2024/11/16
PyCon mini 東海
#pycontokai

misoji engineer

November 15, 2024
Tweet

More Decks by misoji engineer

Other Decks in Technology

Transcript

  1. アジェンダ • AMD Pervasive AI Developer Contest
 
 • コンテストでやったこと + スケジュール


    
 • Python(PYNQ)に助けてもらった箇所
 
 • 海外のコンテストについて
 
 • まとめ AMDのコンテストに参加した内容を紹介します
  2. AMD Pervasive AI Developer Contest 「FPGAの評価ボード(KR260)を使って、ロボットとAIっぽいことをする」ことがテーマ Robotics AI 部門に参加していました。 *コンテストのリンク先より引用

    https://www.hackster.io/contests/amd2023 3部門に分かれていました。 ・GPU部門     …AMDのGPU ・Robotics部門 …AMDのFPGA (Kria_KR260) ・PC部門    …AMDのminiPC
  3. ・2023/12… コンテストの開催アナウンス    ↓ ・2024/2… 評価ボードの申請期限(Webテスト+Abstract提出) ・2024/3… 評価ボードの当選発表 ・2024/4… 評価ボードが到着 ・2024/7…

    プロジェクトの提出期限    ↓ ・2024/9… 最終候補者(Finalist)を選出         AMD関係者にレビュー ・2024/10… 開発者向けイベント「Advancing AI 」で表彰 コンテストの期間 コンテストとしての期間は約10か月、開発期間は約7か月 約7か月 趣味でコツコツと開発
  4. 2024/1 2024/2 2024/3 2024/4 2024/5 2024/6 2024/7 開発ネタ検討 基板作成 ハードウェア開発

    FPGA合成 ライブラリ調査 コーディング デバッグ ドキュメント整理 デモ動画作成 スケジュール 開発期間は7か月だけど、がっつりコード書ける期間は短い。 ・Webテスト ・Abstract提出 ・評価ボード到着 ・元々の 提出期限 ・提出期限 +1か月 ・+αの 追加仕様 コード書ける期間 約1か月
  5. 2024/1 2024/2 2024/3 2024/4 2024/5 2024/6 2024/7 開発ネタ検討 基板作成 ハードウェア開発

    FPGA合成 ライブラリ調査 コーディング デバッグ ドキュメント整理 デモ動画作成 スケジュール ドキュメントには時間かかるので、コーディング・デバッグは短縮したい… ・Webテスト ・Abstract提出 ・元々の 提出期限 ・提出期限 +1か月 ・+αの 追加仕様 ・hackster.io(公開済プロジェクト) https://www.hackster.io/iotengineer22/36 0-object-detection-robot-car-bdb1bd
  6. コードの概要(1) from pynq_dpu import DpuOverlay from pynq import Overlay from

    pynq.lib import AxiGPIO overlay = DpuOverlay(dpu_model) overlay.load_model(cnn_xmodel) # Define and create the GStreamer pipeline for 360-camera pipeline = "thetauvcsrc mode=2K ! h264parse ! avdec_h264 ! videoconvert ! video/x-raw,format=BGR ! appsink" # Initialize the VideoCapture object cap = cv2.VideoCapture(pipeline, cv2.CAP_GSTREAMER) # Initialize and start the Motor-controller-thread controller_thread = threading.Thread(target=continuous_controller) controller_thread.start() 物体検出の例(1)
  7. コードの概要(2) try: while True: ret, frame = cap.read() # Split

    the 360-image into 2 quadrants quadrants = { 'q1': frame[:, :width // 2], #front 'q2': frame[:, width // 2:], #back } # Apply YOLOX object detection and ROS2 Output to each quadrant for key, img in quadrants.items(): d_boxes, d_scores, d_classes = yolox_run(img, key) # Publish each quadrant as a separate ROS message img_publishers[key].publish(bridge.cv2_to_imgmsg(img, encoding="bgr8")) publish_markers(box_publishers, node_box, d_boxes, d_classes, key) 物体検出の例(2)
  8. コードの概要(3) def run(input_image): # Pre-processing image_size = input_image.shape[:2] image_height, image_width

    = input_image.shape[0], input_image.shape[1] image_data, ratio = preprocess(input_image, input_shape) # inference(FPGA_DPU) image[0,...] = image_data.reshape(shapeIn[1:]) job_id = dpu.execute_async(input_data, output_data) dpu.wait(job_id) # Post-processing outputs = np.concatenate([output.reshape(1, -1, output.shape[-1]) for output in output_data], axis=1) bboxes, scores, class_ids = postprocess( FPGA(DPU)の推論の例
  9. 発表している人の英語 めっちゃ苦手です。マジで英語を聞き取れない人です… 典型的な日本人のサラリーマン・エンジニア。 ・働き始めて約10年 … 英語は全く使わない部門  ※データシートを英語で読むぐらい ・最近の2~3年 … 英語を多少は使う部門に

    (ただ1か月に1回Web会議で報告できるかの頻度) ・海外のコンテスト … 本格的に参加したのも初めて。 昔Kaggleを試みたけど、3日坊主。 ⇒今回は興味あるハードウェアが絡む内容だったので完走できた
  10. メインプロジェクト + 14個のサブプロジェクトのドキュメント 技術ブログを書く感じで(何とか)乗り切りました。 0. 360° Object Detection Robot Car

    1. PYNQ + GPIO(LED Blinking) 2. PYNQ + PWM(DC-Motor Control) 3. Object Detection(Yolo) with DPU-PYNQ 4. Implementation DPU, GPIO, and PWM 5. Remote Control 360° Camera 6. GStreamer + OpenCV with 360°Camera 7. 360 Live Streaming + Object Detect(DPU) 8. ROS2 3D Marker from 360 Live Streaming 9. Control 360° Object Detection Robot Car 10. Improve Object Detection Speed with YOLOX 11. Benchmark Architectures of the DPU 12. Power Consumption of 360° Object Detection Robot Car 13. Application to Vitis AI ONNX Runtime Engine (VOE) 14. Appendix: Object Detection Using YOLOX with a Webcam 英語のドキュメント 日本語の下書き ⇒ ChatGPTで翻訳 ⇒ 修正 で対応しました
  11. 英語のQA 英語のQA(質疑応答)でも、ダメなところ一杯でした。 Robotics AI部門なのに、ロボットに関する重要な質問をミスりました。  ⇒ROSとLossを聞き間違える。 ただ、答えられる質問は何とか(拙い英語で)返したつもり…。 Did you use ROS

    just for visualization? Or are you also processing nodes, packets, or other elements? Loss(ロス)? nodes? Paket? ノード・パケットを失う?通信不良のこと? ROS…Robot operating system Loss…損失・失うこと