はてなキーワード: Jpegとは
せっかく課金したのにユーザが増えまくっているのか滅茶苦茶重くなっていて最悪。
だから流出したモデルを使ってローカルでNAIの環境を構築する。
ネットには情報もだいぶ転がってるけど陳腐化した情報があまりに多いため増田にまとめることにした。
もしかしたらこの記事もすでに陳腐化しているかもしれないが…単純に間違ってたらトラバで教えてほしい。
もちろん自己責任。この記事を見て導入した結果何かあっても増田は何も保証しない。
英語がわかる人はこっちを見た方が早いと思う。今は導入RTAができるくらい導入は楽になっている。
https://rentry.org/nai-speedrun
VRAMが2GB以上あるNVIDIA製のグラフィックボードがあればローカル環境を構築できる。
GPUの世代はGTX700シリーズ以降。なので一昔前のミドル級ボードでも動作するらしい。
IntelのオンボードGPUでも実行する方法があるらしい(stable_diffusion.openvino)が今回は割愛する。自分で探してね。
その他の推奨環境は以下の通り。
対応OS:Windows7以上(と言うがM1Macでも動作する方法があるとかなんとか)
メインメモリ:16GB以上(VRAMもたくさん必要だが起動時にメインメモリも大量に食う。WebUI起動時にタスクマネージャを見ているとよくわかる)
スマホしか持ってないような人やこういうのがよくわからない人はNovelAIを使った方が良いと思う。
今は重いけど、きっとそのうちみんな飽きてサーバも軽くなるかもしれないし。
(追記)NovelAIがリソースを確保してサーバが軽くなったからリスクを背負ってまで導入しなくても良いかも
(追記)Pythonは当然3系。最新の奴を入れれば問題無い。
導入方法はいちいち書かないけど、「python --version」や「git -v」で
正常にバージョン情報が出る(パスがきちんと通っている)ことはちゃんと確認しよう。
Stable Diffusion web UIはStable Diffusionやそれをベースとした画像生成AIを利用するためのフロントエンド。
その中でも特に開発が活発でデファクトスタンダードとなっているのがAUTOMATIC1111版だ。
導入したい適当なディレクトリに対してPowerShellなどで
「git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git」
なお、AUTOMATIC1111版は数時間単位でコミットが行われるから
定期的に「git pull origin master」で更新しよう。
クライアントはqBitTorrentが一番楽だと思う。
ここにはさすがにmagnetリンクは書かないから各自ググって欲しい。
結構誤解されがちなことだが流出データ50GBを全部ダウンロードする必要は無い。
必要なファイルはanimefull-final-prunedディレクトリの中身とanimevae.ptだから5GBちょっとくらいなんじゃないかな。
もし余裕があるならmoduleディレクトリの中身もダウンロードすればいいけど、ぶっちゃけ必要無いんじゃないか?
まずはanimefull-final-prunedの中身のファイルをリネーム。
「model.ckpt」を「animefinal-full-pruned.ckpt」のようなわかりやすい名前にして、
「animevae.pt」を例えば「animefinal-full-pruned.vae.pt」のような拡張子以外は同じファイル名にする。
WebUI起動フォルダ配下の\models\Stable-diffusionにリネームしたファイルを移動させれば配置はOK。
ちなみにmoduleディレクトリの中身は\models\hypernetworksに移動させて使う。
それらのファイルを設定で適用させると画風が結構変わるがNovelAI再現とは関係無いみたいだ。
(追記)moduleディレクトリの中身の.ptファイルはhypernetworksという技術によって画風などを学習したものらしい。
すでに複数のイラストレーターの画風を学習したptファイルが作成されており議論を呼んでいる。
自分のグラボのVRAMが4GB未満の場合は「set COMMANDLINE_ARGS=」の後に
4GB未満の場合は「--medvram」、2GB未満の場合は「--lowvram」とパラメータを追加しておこう。
自分の持ってるグラボのVRAMがわからないときはGPU-Zなどで調べよう。
またGTX1600系固有のバグ(単色の画像が出力される)があるらしいので
その場合は「--no-half-vae」もしくは「--no-half」や「--precision full」とパラメータを追加。
ちなみにパラメータに「--xformers」を追加してxformersを導入・使用すると
消費VRAMが減って画像生成処理時間も短縮されるので是非導入しよう。
画像からdanbooruのタグをAIで調査するdeepdanbooruを利用する場合は「--deepdanbooru」を追加。
のようになる。
ターミナルやPowerShellなどでwebui-user.batを起動しwebUIの初期導入と起動を行う。
過去には手動でCUDA等を導入する必要があったが、現在はこの初期導入でだいたいの導入が行われる。
ずいぶん楽にはなったがその分初期導入の時間は結構長い。10分~20分くらいかかるかもしれない。
途中で導入処理がエラーで止まってしまった場合は管理者権限で実行するなどして対応して欲しい。
起動ができたらSettingで以下の設定を変更してNovelAIに近づける。
Stop At last layers of CLIP modelを2に、
Eta noise seed deltaを31337にする。
これで設定は完了!
設定を合わせて完全にNovelAIと同じ内容になったのかを確認するテストがある。
出力結果から海外じゃHallo Asuka Testなんて呼ばれている。
これは初期SEEDをはじめとする設定内容が完全に一致していれば同じ出力結果を得られる仕組みを利用している。
プロンプトの内容:masterpiece, best quality, masterpiece, asuka langley sitting cross legged on a chair
ネガティブプロンプトの内容:lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name
https://i.imgur.com/Bfl5qJB.jpg
なお、このテストはAUTOMATIC1111のバージョンやxformersの適用状態によっては微妙に違う画像が出力されることがあるらしい。
xformersを適用させている増田の環境だと確かに二つ並べると間違い探しレベルの違いがあった。
「Booru tag autocompletion for A1111」を導入すればNovelAIのように自動でdanbooruのタグを保管してくれる。
画像生成AIモデルはStable DiffusionがOSSのため派生が結構多い。
自前で追加学習もできるため自前で学習した追加AIモデルを4chanのような掲示板などで共有する人もいるらしい。
しかしそのようなモデルの中にウィルスのような悪意のある動作を行うものもあるらしい。
FBIがペドフィリアを一網打尽にするためにIPアドレスなどの個人情報を抜き出す動作を行うロリ特化AIモデルを掲示板で配布していて
しかもそれには本物の児童ポルノが教師データとして使われている…などという都市伝説的な話が今界隈を賑わせている。
https://b.hatena.ne.jp/entry/s/togetter.com/li/1954578
ノイズを削るは違うでしょ。減算しかしないのか?んなわけない。人間のように線を引いたり色を塗ったり切り貼りしたりしないだけで、やってるのは「描く」だよ
NN型のAIは原理的に人間の脳でやってる事と変わらんので、今人間がやってる事で違法でない事をAIがやったから違法って事にするのは難しい
ヒトの脳とは全然違う。
人間が補助線引いて曲線や体の全体の配置を把握してるのをノイズで学習して、いろんな類型を食わせるとAIが必要条件を覚えていくって感じなんだな。
え?
ほんとそれ!
惜しいけどなんか違う。学習済みのNNは特徴抽出してるわけじゃなくて、入力に学習した特徴を畳み込んで出力する。
ランダムノイズから「そうじゃない」を否定して描いてるのは過程GIF見れば分かるんだが、結果的には違法JPEGのつぎはぎが出てくるんだわ。
わりと正しい。
いえ。画像そのものではないが、パーツ(学習した特徴量)の組み合わせを出力してます。
宿ってねーよw
遺伝的アルゴリズムとは全然違うけど、概念レベルでいえばそういうこと。
超解像技術の進化というより、超解像を実現する手法のバリエーションの一つって感じ。
まあ、ほとんどの人が良く分かってないんだろうな、ワイもだが
人の脳を模して造られたのがNN
プログラミングで主にやる事は下記の2つ。
①IFでAかBを選択させてどっちかの設定を実行
②Whileで決められた回数分繰り返す
とてつもなく複雑で冗長な処理によって実行されている。
わかりやすいので画像処理でいうと、数十万から数百万の画素(RGBAの24bitで表される数値)を小さなブロックに分解し、数学的に周波数の重なりとして計算して変換、含まれる頻出パターンをテーブルにして圧縮伸張を行なう。みたいなことが瞬間的に行われている。
「まさかそんな事できるわけないだろ」というレベルの処理が実際に行われており、これまた直感的でない。
だからそれをどう書くんだよ。という答えはコレ。有名なjpegの実装だ。
libjpeg というライブラリを書くことはできるだろうか?画像の圧縮の理論から考え始めることはできるか?
正直無理だ。自分はプログラマだがそんなに数学が得意ではなく、頑張ったとしても下手するとコレを作るのがライフワークになってしまい、他のことができなくなる。
例えばブラウザを0から作るとして、jpegの処理以外にも画像だけでpngとかgifとかwebpとか、その他もろもろとてつもない作業が必要になる。
「とてつもなくて想像もできないので流石に無理だろう?」
いや、でも、実際動いてるのよ。ここ何十年、コツコツと積み重ねて実現している。
「積み重ね」とはライブラリであったりフレームワークであったりOSであったりする。
「どういう風になっているのか」
外部に向けたインターフェイスがどうなっているのかは理解する必要がある。「使う」ために必要だからだ。
この2つは分けて考えなければならない。
ちなみに、たとえばChromeのコアであるChromiumはのコードはコレだ。
つまり言いたいことは、実際に動くアプリケーションというのを作りたいのにも関わらず
プログラミング入門書は、これで判定と繰り返しという基礎ができますと言うだけ。
これがもう滅茶苦茶イライラする。
「これで判定と繰り返しという基礎ができます」というのが基本的な理論(定理的なもの)で、その他に必然的だが唯一無二ではないベストプラクティスというものがある(法則的なもの)。
後者をうまく説明する入門書に出会っていないんだろうな。という印象。イライラはやめよう。つかれる。
ベストプラクティスはいろいろあるのだが「層の構造にする・レイヤーに分ける」というのは重要なアイデアだ。
libjpegというのはjpegの処理を行う「ライブラリ」だ。他のアプリケーション...たとえばブラウザはこのライブラリを「使う」。
ブラウザではjpeg画像の圧縮展開というとてつもなく難しい処理を「libjpegの使い方」の理解までで済ませ、過去の蓄積であるlibjpegのコードを利用することで真の意味で0から実装しないようにしている。
この場合、libjpegが「低レベル・低レイヤー」の存在であり、中身については「使い方」つまり「仕様」の理解までしか行わないことで、実際に作りたいものを作れるようにしているわけだ。
完成しているプログラムは二例ほど挙げたがどうですかね?
複雑なことをする、特に低レイヤーのコードはとてつもなく難しい。
でも、とりあえずこんな感じのコードなら解るよね?
こういうレベルから理解して、ちょっとずつ難しい処理を学んでいくしかない。
ハードルは高いんですよ。実際。
なので、木材からだと難しいからプレハブのキット的なものを探すとか、ログハウスのカタログを読むとか、あるいは100人乗れる物置を買うのがいいかもしれない。そういうところから始める。
それらがフレームワークであったりライブラリであったりする。目的に合うものを探して、自分がやりたいことをどう実現するかとにかく考える。
「テキシコー」https://www.nhk.or.jp/school/sougou/texico/ で言われる通り、「小さく分けて考える」「手順の組み合わせを考える」「パターンを見つける」「大事なものだけ抜き出して考える」「頭の中で手順をたどる」をひたすら実行する。
unityはコードが公開されているので、本当に読みたいなら。。
オブジェクト指向は一旦忘れよう。
オブジェクト指向の「隠蔽」というのは層の構造が持っている重要な要素ではあるけど、「低いレイヤーについて考えない」のが基本的な作戦だという理解の方が重要だ。
前述の通り「できる限り作らない」んですよ。「使う」だけ。知るべきことを最小化する。
そして本当に作るべきものに関しては、利用する下のレイヤーのライブラリなりを探して・仕様を理解して、どう組み合わせてfor, if, あるいは計算させれば実現できるのかをひたすら考える。
単に翻訳がしたいのか?表示に割り込む方法を知りたい?日本語に翻訳するのは実行時なのか開発時なのか?
要求される表示エリアが言語によって異なるために、デザイン調整が必要になる問題をどうするか?
分解が甘いので何をしたらいいか調べることができないんだと思う。
ちなみに、アプリ内の文言というのはアプリの外部から変更できないように実装されている事が多いので、利用者が上書きする仕組みはかなり難しい。
AndroidなりiOSの仕様にもそのへんに割り込める機能はないはずなので、OSの開発に入っていく必要がある。結構大変だとおもう。
アプリの開発者が、そういう機能を備えた多言語化のためのライブラリを使うようになれば実現可能ではあるので、そっちの方向で頑張るのがおすすめだが、英語圏の開発者には多言語化のモチベーションが低いという基本的な問題はあるのよね。
この辺の「できる・できない・むずかしい」の判断は、いろいろな勉強をすると常識としてある程度みえてくる...気がする。
ついでに。ウェブサイトやウェブサービスの翻訳だとこういうサービスがあったりする。
ブラウザはページの描画処理のなかに割り込む余地が大きく取ってあるので、ブラウザのExtensionとかならできることがいくらかあるかもしれない。
個人的に気に入らない話はOSのアップデートは使いやすくなるからとてもいい事だからすぐにやった方がいいと宣伝されている事。
まあ、半分は嘘だよね。古いものが残っていると先に進めないんだよ...。
現在のクライアントOSは、巨大なプラットフォームのパーツの一部として理解したほうが正しくて、古いパーツが残っているとツライんですよ。
そして「サービスを受けるための道具であって、あなたが何でも好きにできる機械ではないです」みたいな世界になりつつあって、ちょっと問題と言われてもいる。
これはかなり困った傾向なんだけど、全体としての流れはあんまり変わりそうにない。
オブジェクト指向好きですな...。ここではオブジェクト指向は特に気にしなくていいですよ。
とてつもなく複雑なことをやっているために、すべてのバグを潰すことはコストが高すぎてできないんですよね。
それよりバグは未来を先取りするコストと考えて、本質的に価値のある機能を増やしていくというのが基本的な方向になっている。
だからパソコンはたまに不具合を引き起こすんです。しゃーない。
しかし中途半端に理解している老人などは、そんなことじゃ分からん。自分に分かるように説明しろと言い出す。
説明は出来る。しかし相手はイライラするし理解されない。よって説明をしてはいけないという状況に追い込まれる。
ここでどうすればいいのだと理解不能に陥る。
まあ、説明って得てして難しいよ。しゃーない。
そのとおりです。
オープンソースのプロダクトなら原理的には調べられるけどね。Androidとかはオープンになってる。
それを許容することで先に進んできているという事実は受け入れたほうがいいと思う。
「把握・理解可能な範囲」に留めていたら、数十年前のコンピュータの世界から抜け出せなかった。
deep learningの世界ではそれがより一層進むかも。この辺は詳しくないけど。
ここでの「理解」についてはそのとおり。これはもう諦めるしかない。
これが常にある。IT関連は常に新しい情報が出てくるのでそれに送れると無知になってしまう。
なんでこんなことも分からないんだとか言われ放題で、IT系の企業に努めている人は常に新しい知識を入れられる
面倒くさがらない人が向いている。
「面倒くさがり」の方が問題に気づいて「頑張って面倒じゃなくする」ことができるので、プログラマにとっては美徳なんて言われますけどね。
同時にくじけないとか諦めない、しつこいみたいな素養は必要かも。
応用まではとろうな。がんばれ。
このへん自分も知らんですよ。べつに全部知っている必要はない。
(追記: はてな記法の引用すらもさっきまで知らなかったしな!そんなもん)
層の構造をとっているということと関係があるんですが、仕様が変わると、その上に乗っているものを全部なおさないといけないんですよね。
でも革新のために互換性を捨てなければいけないケースも多い。このへんはハードでもソフトでも同じ。
そして、メンテのコストが上がっても使い続けたほうがトータルで安上がりという場合は、古いものが残ってしまう。
あるいは「(多少の問題はあっても)動いているものは変えるな」という経験則から意図的に残す場合もある。
西暦2020年にもなって、プログラミングが簡単には出来ないし、ハードウェアの規格も完全に統一はされていない。
というかプログラミング言語自体多すぎる。ソフトウェアはデファクトスタンダードのモノ程度は知っているが、
ぜんぜん完成していない荒っぽいものを目にしているのだと理解したほうが的確。
それなのに毎日理解のできないパソコンやスマートフォンを使っている。
オブジェクト指向のおかげ様だがオブジェクト指向に対して無性に腹が立つ。
自分の全く知らない場所でいけしゃあしゃあと演算を行い、そして結果を出す。それも大半が正しい結果で
利便性が抜群だ。些細なミス(バグなど)はあるが圧倒的に利便性が勝っている。
そんな道具に踊らされている自分が滑稽だ。理解できない愚かな自分は正に機械の奴隷のようだ。
本当に理解できない。辛い。
勘違いしてはいけないのは、それらはすべて先人の努力の蓄積によって成り立っているということ。
「よくわからないけど存在している道具」ではなくて、信じられないほど複雑だけど、多くの人々の行動によってなんとかかんとか実現した道具なんですよ。
「オブジェクト指向のおかげ様」じゃないんです。(もちろんオブジェクト指向というのも大きな発明の一つですが)
そしてブラックボックスとして使うのは多くの場合正しいです。そこは諦めましょう。
でもエンジニアとしての立場からは、その裏に隠れているとてつもない技術や思考の蓄積に感動してほしいなと思う。
人類がこんなもん作れたのって、かなりすごいよ?
男オタクは自分たちはキモいものだという視線を内面化してるだけだよ。
「キモい」は「オタク」の枕詞じゃん。令和になっても「キモオタ」みたいに言われること多いじゃん。
男オタクは「キモい」と言われることに慣れているだけ。自分たちが「キモい」と思われていることを知っていて、諦めているだけ。諦めているから向上の努力をしようとしないだけ。
「三次元の女より紙とJPEGの女」ってのも、言ってるやつの8~9割は酸っぱい葡萄だから。どうせこんな容姿だから無理だよ……っていうのが骨の髄まで染み込んでいる。
で、全体的にファッションセンスが壊滅的なので、っていうか女よりファッションに興味がない男の中でも特にファッションセンスがない連中を選りすぐったのが男オタクなので、オタク同士で外見で貶し合いっていうのは基本的に発生しない。
(っていうか、そもそも論として、よほどのことがない限り男同士で外見や服装を品評することはないよな……これはオタクに限らずそうでしょ。そもそも服装に対するジェンダーの差があると思うなぁ。男は服装について色々考えることが嫌いなのです。もちろん先天的というよりは後天的な文化的刷り込みだと思うけどね)
それでもって複雑なのは、単に見た目を整える能力が欠如しているから見た目がキモいんじゃなくて、あまりにキモいキモいと言われ続けたせいで「見た目がキモい」ことがなんというか男オタクの自画像になっちゃってる感があるということだ。
昔、よく戯画化されたオタクで、チェックシャツにバンダナ、みたいなのがあったよね。今から思えば差別的な目線だけど、でも、あれが「オタク」であり、俺たちはああいう存在なんだ、っていうアイデンティティはあるよね。
ニコニコ動画でアニメとか見てるとさ、そういうテンプレ的なオタクの服装したやつがモブで出てくると、「俺らじゃん」「お前らwww」みたいなコメントが飛び交うし、自分がオタクを自称して「俺らオタクはさ~」っていうときに、そこで思い描いてる「俺ら」ってのはパリッとしたスーツを着こなしたイケメンじゃなくてチェックシャツのバンダナ眼鏡だと思うのよ。
イギリス人にとってのブリタニアとかフランス人にとってのマリアンヌが、俺らにとっての「デュフフwww」とか言っちゃうチェックシャツのキモオタなんだよな(実際にはもう秋葉原でもチェックシャツとか着てないやつの方が多数派だけど、まあ多くの日本人も日常生活で着物着てるわけじゃないし……)
なので、多くの男オタクは、外見がキモいと思われることに(他の趣味を持っている男たちと比べると)頓着しない傾向がある。でもそれは容姿の品評から解放されているからじゃない。まったく逆だ。容姿の品評会で敗者であることを自覚し、それに甘んじているからだ。容姿の品評会で敗者であることが自己認識の一部になっているからだ。
男オタクにとっては、オタク趣味全体が他の男たちや女たちから「あのジャンルってキモい男が推しがちだよねw」って言われる対象だったわけで。
逆にその「キモいジャンル」の内部、つまりオタク趣味の内部ではそんなに服装の縛りはきつくないんだけど、賤民のあいだでは平等な関係であることを身分差別から解放されてるって言われても困る。
余談。俺のこれまでの経験からすると、オタク趣味に走る男の外見、他の趣味に比べて明らかに一歩劣るよね。原因なのか結果なのか偶然なのか観測範囲の偏りなのか俺の思い込みに過ぎないのかは知らんけど。
原因っていうのは、つまりオタク趣味というのはスポーツや吹奏楽とかとは違う周縁的な趣味であって、いじめられっ子の駆け込み寺のような役割を果たしている場合もあったからだ。「外見がキモい」がいじめのトリガーの1つになることは多いので、駆け込み寺に駆け込んでくるやつらの外見が駆け込む必要のなかったやつらより平均的に劣ってるのは十分ありえる。
結果っていうのは、オタク趣味って運動不足で不健康になりやすいのと、他の趣味と違ってファッションに対する意識があまりにも低いので、結果としてそういう界隈にいるやつらの外見はフットサルやってますとかそういう連中に比べて劣るものになりがちだろう。
でも実際、オタクと非オタクのあいだでの容姿の差ってどのくらい統計的に立証できるんだろうね。倫理的にアレだから真面目に研究することは難しそうだけど……