本記事は OpenAI活用法 Advent Calendar 2023 by ナレコム の12日目の記事です。
OpenAI活用法 Advent Calendar 2023 by ナレコム ではGPTsを含めた最新のOpenAIの活用法について紹介します。
はじめに
2023年12月現在、人工知能の分野では、画像生成技術が注目を集めています。特に、OpenAIが開発したDALL-Eシリーズは、その進化と応用範囲の広さで多くの関心を引いています。この記事では、Microsoft Azureプラットフォーム上で利用可能な2つのバージョン、DALL-E 2とDALL-E 3の比較を行います。
DALL-E 2とDALL-E 3は、それぞれ異なるAPIバージョン、ライブラリの要件、さらには異なるAzureリージョンでの展開によって特徴づけられています。このような違いが実際の使用にどのような影響を与えるのか、同じプロンプト「A painting of a dog」(犬の絵)を用いて両者を比較し、それぞれの特徴と利用方法の違いを探ります。
2023年12月現在、Azure上ではDALL·E 2とDALL·E 3の両方を実行することができます。ただし、以下のように大きく異なります。
主な違い
項目 | DALL·E 2 | DALL·E 3 |
---|---|---|
API Version | 2023-06-01-preview | 2023-12-01-preview |
OpenAI Pythonライブラリ | 0.28.1のみ | 1.x系 |
Azureリージョン | East US | Sweden Central |
上記の違いから同一環境で動作させることができません。この2つに対して同一のプロンプトで実行して比較してみました。
事前準備
下図を参考に、それぞれのリージョンの エンドポイント と キー を取得します。
DALL·E 2を動かす
まず、OpenAI Pythonライブラリのバージョンを下げる必要があります。
1 2 |
<span class="n">pip</span> <span class="n">install</span> <span class="n">openai</span><span class="o">==</span><span class="mf">0.28</span><span class="p">.</span><span class="mi">1</span> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<span class="kn">import</span> <span class="n">openai</span> <span class="kn">import</span> <span class="n">os</span> <span class="kn">import</span> <span class="n">requests</span> <span class="kn">from</span> <span class="n">PIL</span> <span class="kn">import</span> <span class="n">Image</span> <span class="c1"># 環境変数からエンドポイントとキーを取得 </span><span class="n">openai</span><span class="p">.</span><span class="n">api_base</span> <span class="o">=</span> <span class="o"><</span><span class="n">EastUSのエンドポイント</span><span class="o">></span> <span class="n">openai</span><span class="p">.</span><span class="n">api_key</span> <span class="o">=</span> <span class="o"><</span><span class="n">EastUSのキー</span><span class="o">></span> <span class="c1"># APIバージョンを指定 (DALL-Eは現在 '2023-06-01-preview' のAPIバージョンのみサポート) </span><span class="n">openai</span><span class="p">.</span><span class="n">api_version</span> <span class="o">=</span> <span class="sh">'</span><span class="s">2023-06-01-preview</span><span class="sh">'</span> <span class="n">openai</span><span class="p">.</span><span class="n">api_type</span> <span class="o">=</span> <span class="sh">'</span><span class="s">azure</span><span class="sh">'</span> <span class="c1"># 画像生成APIを使用して画像を作成 </span><span class="n">generation_response</span> <span class="o">=</span> <span class="n">openai</span><span class="p">.</span><span class="n">Image</span><span class="p">.</span><span class="nf">create</span><span class="p">(</span> <span class="n">prompt</span><span class="o">=</span><span class="sh">'</span><span class="s">A painting of a dog</span><span class="sh">'</span><span class="p">,</span> <span class="c1"># ここにプロンプトのテキストを入力 </span> <span class="n">size</span><span class="o">=</span><span class="sh">'</span><span class="s">1024x1024</span><span class="sh">'</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">2</span> <span class="p">)</span> <span class="c1"># 保存用のディレクトリを設定 </span><span class="n">image_dir</span> <span class="o">=</span> <span class="n">os</span><span class="p">.</span><span class="n">path</span><span class="p">.</span><span class="nf">join</span><span class="p">(</span><span class="n">os</span><span class="p">.</span><span class="n">curdir</span><span class="p">,</span> <span class="sh">'</span><span class="s">images</span><span class="sh">'</span><span class="p">)</span> <span class="c1"># ディレクトリが存在しない場合は作成 </span><span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="p">.</span><span class="n">path</span><span class="p">.</span><span class="nf">isdir</span><span class="p">(</span><span class="n">image_dir</span><span class="p">):</span> <span class="n">os</span><span class="p">.</span><span class="nf">mkdir</span><span class="p">(</span><span class="n">image_dir</span><span class="p">)</span> <span class="c1"># 画像パスを初期化 (ファイルタイプはpngであるべきです) </span><span class="n">image_path</span> <span class="o">=</span> <span class="n">os</span><span class="p">.</span><span class="n">path</span><span class="p">.</span><span class="nf">join</span><span class="p">(</span><span class="n">image_dir</span><span class="p">,</span> <span class="sh">'</span><span class="s">generated_image.png</span><span class="sh">'</span><span class="p">)</span> <span class="c1"># 生成された画像を取得 </span><span class="n">image_url</span> <span class="o">=</span> <span class="n">generation_response</span><span class="p">[</span><span class="sh">"</span><span class="s">data</span><span class="sh">"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="sh">"</span><span class="s">url</span><span class="sh">"</span><span class="p">]</span> <span class="c1"># レスポンスから画像URLを抽出 </span><span class="n">generated_image</span> <span class="o">=</span> <span class="n">requests</span><span class="p">.</span><span class="nf">get</span><span class="p">(</span><span class="n">image_url</span><span class="p">).</span><span class="n">content</span> <span class="c1"># 画像をダウンロード </span><span class="k">with</span> <span class="nf">open</span><span class="p">(</span><span class="n">image_path</span><span class="p">,</span> <span class="sh">"</span><span class="s">wb</span><span class="sh">"</span><span class="p">)</span> <span class="k">as</span> <span class="n">image_file</span><span class="p">:</span> <span class="n">image_file</span><span class="p">.</span><span class="nf">write</span><span class="p">(</span><span class="n">generated_image</span><span class="p">)</span> <span class="c1"># デフォルトの画像ビューアで画像を表示 </span><span class="n">image</span> <span class="o">=</span> <span class="n">Image</span><span class="p">.</span><span class="nf">open</span><span class="p">(</span><span class="n">image_path</span><span class="p">)</span> <span class="n">image</span><span class="p">.</span><span class="nf">show</span><span class="p">()</span> |
DALL·E 3を動かす
今度は、OpenAI Pythonライブラリのバージョンを上げる必要があります。
1 2 |
<span class="n">pip</span> <span class="n">install</span> <span class="n">openai</span><span class="o">></span><span class="mf">1.0</span> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<span class="kn">from</span> <span class="n">openai</span> <span class="kn">import</span> <span class="n">AzureOpenAI</span> <span class="kn">import</span> <span class="n">os</span> <span class="kn">import</span> <span class="n">requests</span> <span class="kn">from</span> <span class="n">PIL</span> <span class="kn">import</span> <span class="n">Image</span> <span class="kn">import</span> <span class="n">json</span> <span class="n">client</span> <span class="o">=</span> <span class="nc">AzureOpenAI</span><span class="p">(</span> <span class="n">api_version</span><span class="o">=</span><span class="sh">"</span><span class="s">2023-12-01-preview</span><span class="sh">"</span><span class="p">,</span> <span class="n">api_key</span><span class="o">=<</span><span class="n">SwedenCentralのエンドポイント</span><span class="o">></span><span class="p">,</span> <span class="n">azure_endpoint</span><span class="o">=<</span><span class="n">SwedenCentralのエンドポイント</span><span class="o">></span> <span class="p">)</span> <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="p">.</span><span class="n">images</span><span class="p">.</span><span class="nf">generate</span><span class="p">(</span> <span class="n">model</span><span class="o">=<</span><span class="n">DALL</span><span class="o">-</span><span class="n">E</span> <span class="mi">3</span><span class="n">デプロイ名</span><span class="o">></span><span class="p">,</span> <span class="c1"># あなたのDALL-E 3デプロイメントの名前 </span> <span class="n">prompt</span><span class="o">=</span><span class="sh">"</span><span class="s">A painting of a dog</span><span class="sh">"</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">1</span> <span class="p">)</span> <span class="n">json_response</span> <span class="o">=</span> <span class="n">json</span><span class="p">.</span><span class="nf">loads</span><span class="p">(</span><span class="n">result</span><span class="p">.</span><span class="nf">model_dump_json</span><span class="p">())</span> <span class="c1"># 保存する画像のディレクトリを設定 </span><span class="n">image_dir</span> <span class="o">=</span> <span class="n">os</span><span class="p">.</span><span class="n">path</span><span class="p">.</span><span class="nf">join</span><span class="p">(</span><span class="n">os</span><span class="p">.</span><span class="n">curdir</span><span class="p">,</span> <span class="sh">'</span><span class="s">images</span><span class="sh">'</span><span class="p">)</span> <span class="c1"># ディレクトリが存在しない場合は作成 </span><span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="p">.</span><span class="n">path</span><span class="p">.</span><span class="nf">isdir</span><span class="p">(</span><span class="n">image_dir</span><span class="p">):</span> <span class="n">os</span><span class="p">.</span><span class="nf">mkdir</span><span class="p">(</span><span class="n">image_dir</span><span class="p">)</span> <span class="c1"># 画像パスを初期化 (ファイルタイプはpngであるべきです) </span><span class="n">image_path</span> <span class="o">=</span> <span class="n">os</span><span class="p">.</span><span class="n">path</span><span class="p">.</span><span class="nf">join</span><span class="p">(</span><span class="n">image_dir</span><span class="p">,</span> <span class="sh">'</span><span class="s">generated_image.png</span><span class="sh">'</span><span class="p">)</span> <span class="c1"># 生成された画像を取得 </span><span class="n">image_url</span> <span class="o">=</span> <span class="n">json_response</span><span class="p">[</span><span class="sh">"</span><span class="s">data</span><span class="sh">"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="sh">"</span><span class="s">url</span><span class="sh">"</span><span class="p">]</span> <span class="c1"># レスポンスから画像URLを抽出 </span><span class="n">generated_image</span> <span class="o">=</span> <span class="n">requests</span><span class="p">.</span><span class="nf">get</span><span class="p">(</span><span class="n">image_url</span><span class="p">).</span><span class="n">content</span> <span class="c1"># 画像をダウンロード </span><span class="k">with</span> <span class="nf">open</span><span class="p">(</span><span class="n">image_path</span><span class="p">,</span> <span class="sh">"</span><span class="s">wb</span><span class="sh">"</span><span class="p">)</span> <span class="k">as</span> <span class="n">image_file</span><span class="p">:</span> <span class="n">image_file</span><span class="p">.</span><span class="nf">write</span><span class="p">(</span><span class="n">generated_image</span><span class="p">)</span> <span class="c1"># デフォルトの画像ビューアで画像を表示 </span><span class="n">image</span> <span class="o">=</span> <span class="n">Image</span><span class="p">.</span><span class="nf">open</span><span class="p">(</span><span class="n">image_path</span><span class="p">)</span> <span class="n">image</span><span class="p">.</span><span class="nf">show</span><span class="p">()</span> |
まとめ
この記事では、Azure上で利用可能なDALL-E 2とDALL-E 3の主な違いとそれぞれの特性について詳しく見てきました。重要なポイントを振り返ると、以下のようになります。
-
APIバージョンとライブラリ: DALL-E 2は「2023-06-01-preview」APIバージョンとOpenAI Pythonライブラリのバージョン0.28.1を使用します。一方、DALL-E 3では「2023-12-01-preview」APIバージョンと1.x系のライブラリが必要です。
-
Azureリージョンの違い: DALL-E 2はEast USリージョンでのみ利用可能ですが、DALL-E 3はSweden Centralリージョンで展開されています。
-
画像生成の結果: 同じプロンプト「A painting of a dog」を使用した際、DALL-E 2とDALL-E 3はそれぞれ異なる視覚的特性とスタイルを示しました。これは、両バージョンの技術的進歩とアプローチの違いを反映しています。
この比較を通じて、DALL-E 2とDALL-E 3の使い方、それぞれのユニークな特徴、そして最新の画像生成AI技術の可能性についての理解を深めることができたと思います。
また、ナレッジコミュニケーションでは 「Musubite」 というエンジニア同士のカジュアルトークサービスを利用しています!この記事にあるような生成AI 技術を使ったプロジェクトに携わるメンバーと直接話せるサービスですので興味がある方は是非利用を検討してください!