Jetson でStyleGANを使って画像生成


StyleGAN を使ってこういう画像を生成してみます。この顔の人物は現実には存在しません。

Jetson で稼働確認済み。

Jetson Nano    or         Jetson Xavier NX + コンテナ

Xavier NX では問題なく実行できましたが、Nano(A02)ではOOMエラーが出ました、解消の仕方はここを参照

また、メモリは6GBくらい使うので、8GB持っているXavier NX を使ったほうが快適です。

Nano の場合は3GB ほどSWAP 領域を確保しておきます。

Jetpackは以下を使って環境を構築しておきます。

Jetpack 4.6.1

 


必要なファイル群をダウンロードしておきます。方法は2つ。

以下、/home/jetson はご自分の環境に適宜、ご変更ください。

●GITでダウンロード

 

●手動でダウンロード

ホスト側で作業用ディレクトリを作っておきます。

StyleGAN に移動してZIPをダウンロード

 

 

 

 

 

 

 

 

 

 

ZIPを解凍して、中身をすべてstyleganフォルダーに移す

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


学習済みモデルのダウンロード

ダウンロードでデフォルトのコードを使うと以下のようなエラーになることがあります。事前にマニュアルでファイルをダウンロードしておきます。

OSError: Google Drive quota exceeded

現在、このファイルを閲覧、ダウンロードできません。

最近このファイルを閲覧、ダウンロードしたユーザーの数が多すぎます。しばらくしてからファイルにアクセスしてください。アクセスしようとしているファイルのサイズが非常に大きい場合や、ファイルが多くのユーザーと共有されている場合は、ファイルを閲覧、ダウンロードできるようになるまで最大 24 時間かかることがあります。24 時間が経過してもファイルにアクセスできない場合は、ドメイン管理者にお問い合わせください。

以下をクリックして直接ダウンロードしましょう

pklファイル

ダウンロードしたファイルは、/home/jetson/styleganにコピーしておきます。

 

 

 

 

 

 

 

 

 

 

 

 

 


コンテナ用にNVIDIAのDockerイメージをダウンロードしておきます。

コンテナ作成

ホスト側のstyleganフォルダーをコンテナ側のworkフォルダーにマウントしておきます。

sudo docker create -it --name my_stylegan --gpus all --network host -v /home/jetson/stylegan:/work nvcr.io/nvidia/l4t-ml:r32.6.1-py3

コンテナを起動

アップデート&アップグレードとライブラリやパッケージのインストール

 

作業用フォルダーへ移動

 

 


画像生成

以下のようなpythonファイルを作成。枚数を指定して画像を生成してみます。

 

【img_generate.py】

9枚の顔画像を生成してみます。

エラーになったらここ参照

実行画面はこんな具合。

resultsフォルダーに画像が生成されます。

img_generate.pyは再度実行すれば、ノイズはシャッフルされるので、新しい顔が生成されます。

実行時間はXavier NX で2〜3分くらいです。


 


エラーが出る場合

Jetson Nanoでは以下のようなエラーになることがあります。

 

….OP_REQUIRES failed at random_op.cc:76 : Resource exhausted: OOM when allocating tensor with shape….

とか、

tensorflow.python.framework.errors_impl.InternalError: 2 root error(s) found.
(0) Internal: Dst tensor is not initialized.
[[{{node _arg_D/4×4/Dense0/weight/new_value_0_23}}]]
[[D/FromRGB_lod6/bias/setter/_795]]
(1) Internal: Dst tensor is not initialized.
[[{{node _arg_D/4×4/Dense0/weight/new_value_0_23}}]]
0 successful operations.
0 derived errors ignored.

 

NanoはRAMが4GBしかなくTensorFlowはGPUを全部使おうとするので、OOM(Out Of Memory )になりやすいようです。

で、プロセスでTensorFlowが使うメモリを制限します。

以下のコードを追加して、img_generate.py を一回実行します。プロセスはOSのOOM killer に切断(killed)されますが、これによってTensorFlowのメモリ使用量は制限されます。その後はこれをコメントアウトして再実行すればエラーは起きません。


 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*