0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ollamaとdiffusersで画像生成する

0
Posted at

はじめに

皆さん、LLMで画像生成をしたいと思ったことはないですか?

Google Colabとpythonの知識さえあれば、やることはできます。
私の勉強も兼ねて、紹介していければと思います。

Ollamaは画像の名前をつけるときに使います。

初めて書くのもあって、拙い記事になっているとは思いますがよろしくお願いします。

用語説明

ここからは、大まかですが今回使う開発環境であるGoogle Colabと、pythonのライブラリ(拡張機能)であるOllamaとdiffusersについて説明します。

読まなくてもいいという方はこちらまで飛ばしてください。

Google Colabとは?

正式名称: Google Colaboratory
Google Colabは略称です。
大雑把にいうと、クラウドコンピュータ(OSはUbuntu)でpythonのコードやコマンドを走らせたり、機械学習やディープラーニング等をしたりすることができるものになっています。

特徴としては、
・無料でGPUやTPUが結構長い時間使える。
・Jupyter Notebook環境である。

コードやMarkdown記法と呼ばれる書き方で書かれたテキストであるセルを複数個作る環境のことをJupyter Notebook環境といいます。

Ollamaって?

簡単に言うと、インストールしたコンピュータでLLMを簡単に実行できるものとなっています。
オフラインで動作することもでき、しかもオープンソース(誰でも使用、何なら使いやすく改造するのもOK)であるため、非常に便利なツールです。

今回はこれを使って、LLMに画像名前をプロンプトからつけてもらいます。

diffusersって?

世界の研究者とかが、AIモデルやデータセットを公開するのに使うプラットフォームであり、それを運営する企業のHugging Faceが作ったライブラリです。
このライブラリは、画像、音声、分子の3D構造などの生成に使う拡散モデルを簡単に実行したり学習させたりできるものになっています。

拡散モデルはあるデータをノイズを加えて破壊し、それを今までの学習データを使って復元という作業を利用して画像生成等を行うモデルのことです。
人間で例えるなら、
ルービックキューブをシャッフルし、そこからただ揃った状態に戻せる人がいます。
その揃える知識を使って、ただ揃えるだけでなく、真ん中のマスだけを反対の面の色だけにしたり、端っこだけ色を変えたりできるようなものだと考えたら分かりやすいと思います。
実際にはシャッフルする際は決まった手順(ガウス雑音)を用いたりするのですが、その話をすると今回のブログの趣旨から外れるので、気になった方は調べてみてください。

動かし方

Google Colabのノートブックを作成し、設定をした後、この後にある2つのサンプルコードを貼り付けて、順番に実行すると動きます。

Google Colabの設定

Google Colaboratory
①こちらのリンクをクリックし、Googleアカウントでログインします。
②右上の方にある、水色の「ノートブックを新規作成」をクリックします。
③ノートブックが開いたら、右上にある「接続」の横にある、下向きの三角を押します。
④ランタイムのタイプを変更をクリックします。
⑤「T4 GPU」か「v5e-1 TPU」のどちらかをクリックします。
⑥「保存」をクリックします。
⑦「接続」をクリックします。

これで、Google Colab自体の設定は完了です。GPUかTPUを選択する理由は、CPUの設定だと画像生成する際に膨大な時間がかかるからです。GPUは「並列処理」が得意でLLMと比較的相性がよく、TPUはAIでよく使う「行列計算」というものに特化した計算装置となっています。

サンプルコード

「+コード」と書かれたところを押し、2つのボックス(セル)が画面上にある状態にしてください。その後、各セルにこの2つのコードを入れてください。

ここからの解説は、pythonをある程度理解した前提で話を進めていきます。

①

!sudo apt-get install zstd #zstdをインストール
!curl -fsSL https://ollama.com/install.sh | sh #ollamaをインストール
import subprocess #subprocessはコマンドを実行できるモジュール
import time #処理を一時停止させたりできるモジュール
subprocess.Popen(["ollama","serve"]) #ollamaをバックグラウンドで起動
time.sleep(3) #起動するまで少し待つ
!ollama pull gemma #ollamaの中に、gemmaの最新モデルをダウンロード
!pip install ollama #pythonでollamaを使うためのライブラリをインストール
!pip install diffusers transformers torch 
#画像生成を行うためのライブラリ3つをインストール

②

import torch
import ollama
from diffusers import StableDiffusionPipeline
pipe=StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5") 
#事前学習済みの画像生成AIをダウンロードして使える状態に

if (torch.cuda.is_available()):#cudaが使えるか確認
  pipe=pipe.to("cuda") #cudaを使うように設定
prompt=""#@param{type:"string"}
image=pipe(prompt).images[0]#入力したpromptから画像を生成

TheImageName=ollama.chat( # ollamaを使用する
    model="gemma", #使用するLLMのモデルを指定
    messages=[{"role":"user",#このメッセージがどのような立場のものから来たのか指定
        "content":"please make a title by the image's explanation.Don't make the others\nthis is the explanation:"
        +prompt}],#この2行でプロンプトから画像のタイトルを生成させる。
    )
    
image.save(TheImageName["message"]["content"]+".png")#ollamaから返ってきた名前を使って画像をcolabに保存
print("The Image Name is"+TheImageName["message"]["content"]+".png")

②を貼り付けると、そのセルにpromptと書かれた入力欄が出ると思います。
①を実行した後、②の入力欄に生成したい画像の内容を英語で入力してください。
(日本語等で入力を行うとエラーが出ます。)
実行するにはセルの横にある再生マーク(▶︎)を押せばできます。

何個も画像生成をする際は、②だけを複数回実行してください。

左端のファイルのアイコン(📁←これみたいなもの)をクリックするとファイル一覧が表示されます。
生成された画像はその中に保存されています。
ファイルの名前から選び、その横の三点リーダー(...)をクリックしてダウンロードを押せばダウンロードできます。
ファイルの名前は、実行した後のセルの下に出てくる欄の最後に、
The Image Name is ◯◯.png
という形で表示されます。

コードの説明

①

どのようなことをやっているのかは、コード内にコメントで示してあります。
非常にざっくりですが、用語がどんなものなのかを解説しています。

用語 解説
zstd(zstandard) これを使ってollamaは圧縮されているので、解凍に必要です
gemma Googleが作った、公開されているLLMです
transformers 機械学習モデルを簡単に使うためのライブラリです
torch AIやディープラーニングのモデルを構築するのに使います

torchは今回、cudaが実行できるかどうかを判別するためにしか使いません。
transformerはStableDiffusionPipelineを使うために必要となります。

cuda、StableDiffusionPipelineはこの後すぐ説明します。

②

大体はコードの中にあるコメントを読んでいけば理解できると思います。
以下、説明していないものや、colab独自の文法などを説明していきます。

cudaとは?

簡単にいうと、「NVIDIAが作った、GPUを別のことに使いやすくするためのもの」
です。

複数の処理を同時にやることが得意なGPUを、他の分野に使えると思ったNVIDIAが、自社製のGPUの処理能力を遺憾無く発揮してこれらの処理を行えるようにしたものです。今ではこのcudaはAI、気象予測、機械学習などさまざまな点で使われています。
Google Colabの処理に使われているGPUはNVIDIA製です。よってcudaを使った方が処理は早いです。

しかし、TPUはGoogle製であり、もともとAI用途に限定して作られたものであるので、cudaは使う必要もないですし使えません。
よってif文を使ってNVIDIAのGPUかどうかを判別しています。

StableDiffusionPipelineとは?

StableDiffusionPipelineは、「画像生成AIを簡単に使うためのパイプライン」です。

ここでのパイプラインは「複数の処理を一直線にまとめたもの」です。

・人間のプロンプトを内部のLLMで解釈をする。
・ノイズから画像を生成していく。
・画像を人間が使える状態にする。
・微調整をする。
等のさまざまな処理がただ1つの関数にまとめられていたりと、画像生成を非常に楽にしてくれています。

Google Colab独自の要素

②の4行目にある

prompt=""#@param{type:"string"}

の#@param{type:"string"}はGoogle Colab独自の書き方です。
これを入力することで、セルの横の入力欄を表示しています。

この中のtype:"string"を、type:"number"等に変えることで、入力欄に入れられる内容を変えたり、チェックボックスにしたりできます。自由度が高いですね。

最後に

いかがだったでしょうか?
こちらの記事を見て、画像の生成をしてみたいと思っていただけたら幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?