画像生成AIを試す

この年末年始は帰省をしつつ,原稿執筆をしていました。

プログラミング体験・学習に関する原稿でしたが,他と違った角度から照らしたものにしようと悪戦苦闘してました。詳しくはまた機会をあらためて書こうと思います。

締切仕事から解放されて,ようやく画像生成系のAIを自分のパソコン環境に導入してみました。

この記事のアイキャッチ画像はその画像生成AIモデルの一つである「Anything-v4.0」を導入して描画させたものです。

これは「1boy, computer, typing, looking screen, indoor, casual」というプロンプト(画像描画させるためのキーワード群)を指定して,横長サイズに指定した結果です。

同じ条件でも描画させる度に画像が変わるので,今回も3回目に描画させた結果を採用したものです。この辺は導入の仕方によって生成の手順は異なってくるので,1枚1枚描かせるパターンもあれば,自動的に複数枚の画像を生成させるやり方もあります。コマンドラインで済ます人もいれば,WebUIを利用することもできます。

導入手順は簡単で,たとえばWebUIで使いたければ…

  • Python
  • pythonライブラリ
    • torch
    • diffusers
    • gradio
  • 学習モデル
    • Stable Diffusion v2-1
    • Anything-v4.0

といったものをインストールして,pythonのスクリプトを起動するとローカルでWeb画面を開くことができます。それらはいろんな方々がネットでやり方をシェアしてくださっているので参考にしました。

ちょっと雑になりますがインストール手順はおおむね以下のような感じです。

(各自の環境によってコマンドは変わってきますので,その辺の説明はごめんなさいします。)

Macであれば,もしPythonが未導入ならHomebrewを使ってPython入れてもいいです。

brew install python@3.10

あとはpipもしくはpip3で…

pip3 install torch
pip3 install --upgrade diffusers transformers
pip3 install gradio

してライブラリを導入しておいて,学習モデルを導入します。

brew install git-lfs
git lfs install

(git LFSについてはこちら

git clone https://huggingface.co/stabilityai/stable-diffusion-2-1

あるいは

git clone https://huggingface.co/andite/anything-v4.0

そしたら次のpythonスクリプトをファイルに保存して動かします。

import gradio as gr
import torch
import click
import datetime
import random
from diffusers import StableDiffusionPipeline
import numpy as np

ai_model = "./stable-diffusion-2-1"
# ai_model = "./anything-v4.0"

def generate(prompt, nega_prom, height, width, steps, cfg, seed):
    pipe = StableDiffusionPipeline.from_pretrained(
      ai_model,
    )

    pipe.safety_checker = lambda images, **kwargs: (images, [False] * len(images))
    if seed == "":
      seed = int(random.randrange(4294967294))
    else:
      seed = int(seed)
    print(f"Seed value : {seed}")
    latents = torch.tensor(get_latents_from_seed(seed, width, height))

    gen_img = pipe(prompt=prompt, negative_prompt=nega_prom, height=height, width=width, num_inference_steps=steps, guidance_scale=cfg, latents=latents).images[0]
    gen_img.save(f"./any3_step{steps}-cfg{cfg}-{seed}.png")
    return gen_img

def get_latents_from_seed(seed: int, width: int, height:int) -> np.ndarray:
    # 1 is batch size
    latents_shape = (1, 4, height // 8, width // 8)
    # Gotta use numpy instead of torch, because torch's randn() doesn't support DML
    rng = np.random.default_rng(seed)
    image_latents = rng.standard_normal(latents_shape).astype(np.float32)
    return image_latents


webui = gr.Interface(fn=generate,
                     inputs=[
                     gr.Textbox(label = 'Prompt text', value="", lines=2, elem_id="prompt"),
                     gr.Textbox(label = 'Negative Prompt text', value="", lines=2, elem_id="nega_prom"),
                     gr.Slider(minimum=64, maximum=1024, step=64, label="縦サイズ(px)", value=768, elem_id="height"),
                     gr.Slider(minimum=64, maximum=1024, step=64, label="横サイズ(px)", value=512, elem_id="width"),
                     gr.Slider(minimum=10, maximum=150, step=1, label="ステップ数", value=25, elem_id="steps"),
                     gr.Slider(minimum=1, maximum=10, step=0.5, label='CFG', value=7.5, elem_id="cfg"),
                     gr.Textbox(label = 'seed', value=None, placeholder="0 - 4294967294. Blank is random.", elem_id="seed"),
                     ],
                     outputs=gr.Image().style(height=768)
                     )
webui.launch()

Pythonスクリプトについて参考にしたWebページはこちら(感謝感謝)。

本来であれば,画像生成系AIについて整理してから書きたいところですが,それもまた別の機会に。

私自身はまだ生成系AIをどのように自分の生産活動に活かすとよいのか模索中ですが,可能性があることは嫌というほど感じているので,何かしら自分で取り組む糸口を見つけ出してみようと思います。

でも生成した画像をブログ記事のアイキャッチ画像にするのは,地味に実用的かも。

電子決済ごっこ

…と私が名付けたわけではないのですが,今回,徳島県上板町高志幼稚園で,園児の皆さんがお買い物活動をする際のお手伝いをしてきたことがニュースでそう呼ばれました。

JRT四国放送のニュースはYahooニュースでも配信されました。

〈追記20221215〉放送網のNNNニュースでも自動的に配信されていました。

〈/追記〉

NHK徳島でもローカルニュースで取り上げていただきました。

〈追記20221215〉徳島新聞もWebでは閲覧は有償ですが取り上げてくださいました。

〈/追記〉

年少さんたちとちょっと仲良くなって,私も楽しく参観しました。

今回の実践は,開発して提供したシステムを使ったものとしては徳島県内の幼稚園では初めてというのは間違いではありません。正確に言えば,日本の幼稚園で初めてです。ということは世界の幼稚園で初めてです。

ICカードを使った電子決済ごっこの試みということなら,先行した事例があります。

ただし,実際のインターネットクラウドを利用したシステムはこれまでありません(ローカルネットワークで組んだものだけ)。よって,インターネットクラウドを利用した電子決済ごっことしては,幼稚園で初です。

他は,東京学芸大学附属小金井小学校の学級で取り組んだ例が小学校として初です。また単発的なイベントで利用したことは徳島県内ですでに数回あります。

〈追記20221215〉長野県でも中学生向けにICカードの実践をしてくださっている報告いただきました。ありがとうございます。〈/追記〉

というわけで,この子たち,とっても最先端です。


今回,使っていただいたのはビジュアルプログラミング環境のScratch(スクラッチ)とICカードリーダーを組み合わせるツール(PaSoRich)でした。クラウドのデータベースに数値を預けるシステム(NumberBank)と組み合わせて実現しています。

利用前提としていたICカードリーダーがモデルチェンジしてしまい,新モデルの対応が必要になっているため,お試しいただくためのハードルが高くなってしまっています。

けれども,対応するICカードリーダーとFelicaカード(たとえばお古の交通系ICカード)があれば,誰でも試したり,自分たちでプログラミングすることができます。ぜひお試しください。

また追ってご紹介させていただきます。

5年目のマストドン

2016年にリリースされ、2017年には世界中を巻き込んだ盛り上がりを見せていた分散型ソーシャルネットワーキングシステム「Mastodon」(マストドン)。

一時はTwitterを代替するか?!とまで言われましたが,2018年以降は表舞台からフェードアウトして,ニッチな界隈で生き残っている感じでした。マストドンのシステム自体は,いまも着実にバージョンアップを繰り返しています。

2017年4月に日本初の教育系マストドン・インスタンスとして開設された「elict-mastodon」(エリクト・マストドン)は,開設以来ずっと運営を継続してきました。

もっとも利用者が減り,システムの管理も停滞し,マストドンのバージョンも2.7.4でストップ。そのため,周りのインスタンスが3.0などにアップデートする中で,こちらとのフェデレーション(連合)機能も動かなくなっていました。

旧システム(2.7.2)

このブログでも当時のシステム構築について記していますが,マストドン推奨のサーバーOSではないCentOSで運用しようとしていたことも,アップデートが困難だった理由です。

いつかはサーバーそのものを引っ越しし,推奨サーバーOSのUbuntu上で再構築したいと考えて,早5年。

まさかTwitterがイーロン・マスク氏に買収され,Twitterというプラットフォームが揺るがされる日が来るとは思っていませんでした。再び,その代替システムであるMastodonが話題に。

すでに最新バージョンは4.0.2になっています。お引っ越し先のサービスとしてXserver VPSがよさそうだということも見えてきたところだったので,この機会にエイやと再構築することにしました。

というわけで,新生「elict-mastodon」を立ち上げました。

新システム(4.0.2)

すでに時代はGIGAスクール構想で小中学校や都道府県によっては高等学校にも学習者用情報端末が整備された世となりました。大学入試の世界でも情報科目の扱いを本格議論するようになってきています。

そうした話題をメインに扱う情報交換の場があってもよいはずですので,elict-mastodonをいま一度しっかり構築して,引き続き継続できるように整えた次第です。

もちろんTwitterは,運営会社のゴタゴタはあれど,コミュニケーション・プラットフォームとして今後も存続していくでしょうし,マストドンへの関心もまた時間とともに薄れるのだとは思います。それでも,何かあるときの緊急避難場所や選択肢の確保は決して無意味なことではないと考えています。

elict-mastodonは教育学習とICT活用に関心のある皆様の登録をオープンに受付けています。

教育関係者のみならず,お子様が学校に通っているご家族,学校ICT関係の企業に関わられている皆さん,教育と情報に関係することに関心があれば,どなたにも参加資格はあります。

情報交換の場を守るために,ご配慮・ご遠慮いただくこともあるとは思いますが,ゆるやかにコミュニケーションを展開できればと思います。どうぞお気軽にご参加ください。

「メーガーの三つの質問」再訪

あれから熊本界隈の人々を敵に回した感だけを残した駄文…

「メーガーの三つの質問」探訪
https://www.con3.com/rinlab/?p=4593

は,これ以上,嫌われたくない私の中で,あれで決着したもの…だとずっと思っていました。

まさか,その続編を書くことになるとは…。う〜ん。

先日,とあるオンラインセミナーを流し観していたとき,「R.メーガーの3つの質問」と題されたスライドが飛び込んできました。

Where am I going?             ←学習目標
 どこへ行くのか?
How do I know when I get there?     ←評価方法
 辿り着いたかどうかをどうやって知るのか?
How do I get there?            ←指導内容
 どうやってそこへ行くのか?

「引用元は鈴木先生の論稿かな?」

と思って参考文献をチラッと見ると,見た記憶のない書籍の名前。しかもR. F. Mager氏の著作です。

参考文献:R.F. Mager (1997). How to Turn Learners On… Without Turning Them Off. Atlanta : Center for Effective Performance.

おおおお!もしや,謎の答えがもたらされたのか!と,私,興奮気味。

さっそく検索しました。(AmazonとWorldCat)

本書はもともと1984年にメーガー氏が著した『Developing Attitude Toward Learning』という書籍を改版の際に改名したもの。1997年のThird Edition(第3版)が最新のようです。

目次を見てみると次のようになっています。(Amazon.comのLook insideから)

Contents

Preface
Part I  Where Am I Going?
 1  What It's All About
 2  Why It's All About
 3  Defining the Goal
Part II  How Shall I Get There?
 4 Recognizing Approach and Avoidance
 5 Sources of Influence
 6 Conditions and Consequences
 7 Positives and Aversives
 8 Modeling
 9 Self-Efficacy
Part III  How Will I Know I’ve Arrived?
 10 Evaluating Results
 11 Improving Results
 12 An Awesome Power

なるほど,パート題目が3つの質問になっています。

Where am I going?
How shall I get there?
How will I know I’ve arrived?

いやしかし,3つの質問とはまた少々異なる順番と語彙で記されているのは気になります。

そうは言っても,前回までの調査の時点では,それまで通説的に挙げられていた文献資料の範囲で,このような3つの質問をストレートに表記した記述を見つけられませんでした。

今回の文献で,目次がこのように記述されている以上,メーガーの3つの質問がメーガーの3つの質問である証拠として十分なものが示された…と考えるのが妥当だと思われます。

「何がギルピンだ。それみろ,やはりメーガーの3つの質問は本当だったじゃないか。りん研究室ブログは,フェイク情報を書きやがったクソ・ブログだ。」

と罵っていただいて結構です。あ〜ん。>_<;

ならば,当該文献の中身は一体どうなっているのか?

ここまできたら,紐解いてみようじゃありませんかということで,注文,ポチっ。

続けたくはないけれど,続くかも知れない。


〈追記20221206〉

というわけで,ポチった文献が届きました。

駆け足でページをめくって確認しましたが,日本で多く引用されている表記の英文はありませんでした。

その代わり,こんな粋な詩が冒頭に掲げられていました。

There once was a teacher
Whose principal feature
Was hidden in quite an odd way.
  Students by millions
  Or possibly zillions
  Surrounded him all of the day.

When finally seen
By his scholarly dean
And asked how he managed the deed,
  He lifted three fingers
  And said, "All you swingers
  Need only to follow my lead.

"To rise from a zero
To big Campus Hero,
To answer these questions you'll strive:
  Where am I going,
  How shall I get there, and
  How will I know I've arrived?"

RFM
【粗訳】
昔々とある教師の
抜きんでた素質は
不思議な形で埋もれていた。
 生徒たちが数百万
 とうてい数えきれないほど
 一日中彼を取り囲んでいたためだ。

ついにその姿を
学究の長がとらえて
どうやっていたかを訪ねると,
 彼は3本 指を立て
 こう言った「迷えるすべての人々よ
 私の言うとおりにしなさい。

「ゼロから始め
キャンパスの英雄に至るには
これらの問いに答えるよう努力されるがよい:
 どこへ行くのか,
 どうやってそこへ行くのか,そして
 たどりついたかどうかをどうやって知るのか?」

Robert F. Mager 

メーガー先生は,本当に洒落っ気のある粋な筆者だったようです。

そんなわけで,日本で多く表記されている英文は,おそらく引用の際に表現を馴染みやすくする配慮のもと作成されたもので,原文そのままの引用ではないということになりそうです。もちろん憶測です。

ちなみに,原文の表記を直接引用した日本の資料が検索で見つかりました。厚生労働科学研究成果データベースに登録されているもののようですが,具体的な文書名などがはっきり分かりません。

当該文書(1)当該文書(2)

こちらは改題前の原著『Developing Attitude Toward Learning』からの引用となっています。

少なくとも,今後「メーカーの三つの質問」に関する引用・参考文献の表記は

参考文献:R.F. Mager (1997). How to Turn Learners On… Without Turning Them Off. Atlanta : Center for Effective Performance.

に揃えた上で鈴木先生の議論を参照するような形にするのが無難なのではないかと思われます。

さて,これでこの話題に終止符を打ったことになるといいのですが。