Copilot+PCのNPUを使って、超解像度処理をしてみた

当サイトは広告、アフィリエイトを含みます

Copilot+ PCに搭載されている高性能NPUを使って、Pythonによる処理を行う手順と結果をまとめました。

NPU(Neural Processing Unit)はAI処理に特化したプロセッサです。従来、AI処理は高性能なサーバーが提供するサービス(例えば、ChatGPTなど)にインターネットを介して接続するか、高性能なGPU(ただし消費電力が大きい)を使用して処理していましたが、NPUを活用することで、より効率的に推論を行い、省電力を実現することが可能です。

特に、Copilot+ PCに搭載されているNPUは45TOPSという高性能を誇り、様々なAI処理をローカルで実行できることが期待できます。

なお、Copilot+ PCに関する詳細な記事も本サイトに掲載していますので、興味のある方は「Copilot+PCでできること」をご覧ください。

本記事では対象者を特に限定していませんが、Pythonによるプログラミング経験があるとスムーズに進めることができると思います。

今回の検証には、Lenovo IdeaPad 5x 2-in-1 Gen 9を使用しました。

 

NPUの現状

Copilot+ PCが発売されてからそれほど長い時間は経っておらず、NPUを活用した処理の実装例はまだ非常に少ない状況です。

特に、Snapdragon内蔵のARM版 Copilot+ PCに関する情報は、インターネット上でもほとんど見つかりませんでした。また、多くのAI関連企業や団体でも、現時点でNPUを活用する準備が整っていないようで、既存のAI処理をNPUで行うのは少し難しいか手間がかかるのが現状です。

そこで、ひとまず実装例のあった超解像度の技術デモを用いて、PythonでNPUを使用できることを確認しました。この技術デモ自体は現段階では実用性は高くありませんが、今後のNPUの可能性を期待できるのではないでしょうか。

 

 

環境構築

以下の環境で検証を行いました。

• Lenovo IdeaPad 5x 2-in-1 Gen 9 (Copilot+ PC対応)
• Windows 11 Home 24H2 (OS Build 26100.1742)
• Python 3.11.9 (64-bit) ←注意 ARM版ではない
• Visual Studio Code – Insiders 1.94.0
• Qualcomm Neural Processing SDK for AI
• QuickSRNetLarge-Quantized

 

Pythonインストーラー

Python 3.11ではARM版のインストーラーもサポートされていますが、使用するライブラリの関係上64-bit版、つまり通常版をインストールしてください。
Python 3.11.9 (64-bit)

 

エディタは筆者の趣味でVSCodeのInsiders版を使用していますが、今回の実装においてInsiders版である必要は全くありません。安定版でも問題なく使用できますし、他のエディタでも問題ありません。ただし、環境構築はVSCodeを使用している前提で進めていきます。

 

Qualcomm Neural Processing SDK for AI<Qualcomm Neural Processing SDK for AI>

また、以下のリンクからQualcomm Neural Processing SDK for AIをダウンロードし、任意の場所に展開してください。今回はこの中に含まれている1ファイルのみ使います。

Qualcomm Neural Processing SDK for AI

 

QuickSRNetLarge-Quantized

推論に使うモデルはQuickSRNetLarge-Quantizedです。以下のリンクからダウンロードできます。

QuickSRNetLarge-Quantized

 

では環境構築に入っていきますが、結論だけ知りたい方は飛ばしてください。

Copilot+PCを使い、超解像度の技術デモの環境構築  Copilot+PCを使い、超解像度の技術デモの環境構築

まずはVSCodeでプロジェクトフォルダを開き、venvを使ってPythonの仮想環境を立てます。コマンドパレットから Python: Create Environment… → Venv を選択してください

 

Copilot+PCを使い、超解像度の技術デモの環境構築

Pythonのバージョンは Python 3.11.9 を選択してください。筆者の環境では複数のバージョンがインストールされているためこのように表示されます。インストール時に特に変更していなければパスは~\AppData\Local\Programs\Python\Python311\python.exe になります。

 

pip install

右下に完了の通知が表示されたらターミナルを開き以下のコマンドを入力して実行してください。

pip install onnx onnxruntime numpy pillow

初回インストール時は少し時間がかかります。

 

pip install

上記ライブラリのインストールが完了したことを確認して、以下のコマンドを入力して実行してください。

pip install onnxruntime-qnn

 

pip install

 

pipでは同時に複数のライブラリをインストール可能ですが、onnxruntime-qnnだけ後からインストールするようにしてください。先に インストールしてしまった場合はonnxruntime-qnnを一度削除した後、再度インストールしてください。

ダウンロードしたファイルは以下の通りに配置してください。

• Qualcomm Neural Processing SDK for AI

 

プロジェクトフォルダに \lib を作って qairt\2.26.0.240828\lib\arm64x-windows-msvc にある QnnHtp.dll をコピーする。

 

• QuickSRNetLarge-Quantized

プロジェクトフォルダに \models\ を作ってダウンロードした quicksrnetlarge_quantized.onnx をコピーする。

これで環境構築は完了です。

 

ファイル構成

最終的にはこのようになります。サンプルコードはこのディレクトリ構成を想定しているためディレクトリ名を変更した場合は適宜読み替えてください。

.
├── .venv/
│   └── …
├── lib/
│   └── QnnHtp.dll
└── models/
└── quicksrnetlarge_quantized.onnx

 

 

実装例

サンプルコードを用意しました。
低解像度、一般に言う画質の悪い画像を入力とし、画質を向上させた画像を出力するスクリプトになります。
tkinter.filedialog.askopenfilenames() を使って入力ファイルを選択します。

(↑GitHub Gistというサービスでソースコードをウェブページに埋め込めます)

実装にあたりRunning models using NPU with Copilot+ PC を参考にしました。また、コードレビューにはGPT-4oを使用しています。

 

実行結果

夜景の画像から128×128pxでクロップした画像に対して超解像処理を行います。

処理前(128×128px) → 処理後(512×512px)

全体的にぼやけていたのが、はっきりとした印象になったと思います。同様に森林の画像からクロップした画像に対しても超解像処理を行いました。

 

こちらも、ぱっと見ではっきりとしたように感じられるのではないでしょうか。

 

超解像度を実行時のNPUの動き

実行時にタスクマネージャーを確認すると、一瞬だけ僅かにNPU使用率が上がっていることが確認できます。実行時に複数ファイルを選択すると、継続的にNPUが使用されていることが分かります。

 

 

まとめ

以上、NPUを使ってPythonで超解像処理を行う手順と実行結果をまとめました。

先述の通り、特にQualcomm製NPUでの実装例はまだ少ないのが現状です。Copilot+ PCの普及とともに、NPUの知名度が向上し、より多くの人が関心を持って取り組んでくれることを期待しています。

私もせっかく実機のCopilot+ PCを手に入れたので、これからもさまざまなNPUの活用を模索していきたいと思っています。

現状、利用可能なAI機能はMicrosoftによって提供されているペイントやフォトなどの生成AI機能のみですが、これらはオフラインで使用できず、生成内容にも制限があります。自分でスクリプトを作成すれば、オフラインで自由に生成が可能となり、より幅広い活用が期待できます。

せっかく45TOPSの高性能NPUを搭載しているので、Microsoftのアプリだけにしか使わないのはもったいないと思いませんか?

今回は超解像を取り上げましたが、今後はテキスト生成、画像生成、物体検知、音声認識など、さまざまなAI処理にも取り組んでみようと思います。

 

関連リンク

Copilot+PCでできること

 

Snapdragon X Plus X1P-42-100のベンチマーク

今回使用したSoCです

 

今回レビューに使用した機種

 

 

パソコンガイド運営者の写真