AIに写真を撮らせるのに写真技術が要るはなし
またまたstable-diffusionネタ。
AIで写真ライクな絵を描かせるときの呪文にカメラパラメータを入れると絵の性質をコントロールできる、というはなしを、カメラマニアの立場から掘り下げてみました。
ここ2、3日、ローカルにインストールしたstable-diffusionが面白くて、寝不足気味である。
んで、思い通りにAIに絵を描かせるには『呪文』が重要である、というのは周知の事実。
こちらの記事を
バイブルとしながら、絵心がないわしも、いろいろ描けるようになってきた。
んで、上記ページのこの記述が気になったのだが、いろいろなタイプの絵を描いていたら、写真ライクな絵を生成する呪文が気になった。上記ページから引用すると
個人的におすすめの強いルーンはカメラ設定だ。
詠唱の末節に、「Canon EOS 5D Mark 4と、SIGMA Art Lens 35mm F1.4 DG HSMレンズで撮影、F値2.4、ISO 200、シャッタースピード2000」など追加すると、品質が大きく高まる。
画質だけでなく、構図やライティング、ボケなどを含めて全体的にコントロールできる。
わしはCanon派ではなくNikon派なので、『Nikon D1』がお気に入りの呪文だ。いささか古すぎるデジカメだが、デジタルのフルサイズ一眼で (もはや廃番になっている)、学習に用いているデータにも多数、これで撮られた写真があることだろう、という憶測から来ている。
わしが気づいたのは、気のせいかF値を下げる (絞りを開く) と後ろが大ボケした画像が得られるのでは? ということである。
で、カメラパラメータはAIお絵描きでどのくらい有効なのか? を考察してみる。
写真技術に疎くてカメラ任せ興味がなくて何のことかわからん、というひとは、下記を読んでくれい。
カメラパラメータ (画角・シャッター速度・絞り値・ISO) とは
説明しよう。
まず画角というのは、広角か望遠か、を決定する要素である。
レンズの焦点距離 [mm] であらわされるが、近年の撮像素子がまるでゴミのようだ小さいデジカメにおいては同じ焦点距離でも相対的に望遠になってしまうので、『撮像素子が35mmフィルムであった場合』に換算 (『換算○mm』) として表示され、EXIFなどにもそう記録される (EXIFには絶対焦点距離も同時に記録される)。
つぎにシャッター速度と絞り値は、トレードオフの関係である。
撮られるシーンの光の量は一定なので、シャッター速度を上げれば絞りは開けざるを得ず、絞りを絞るとシャッター速度を遅くせざるを得ない。
具体的には、光の量はlogを取った『EV値』というのが用いられ、シャッター速度のlogと絞りの段数の和になっている。シャッター速度は2の
でこの組み合わせはどーでもよいかというと、そんなことはなく。
写真の表現意図によって、これらは本来撮影者がコントロールすべきものなのだ。
手ブレや被写体ブレを抑えたいときはシャッター速度を速くする。その代わり絞りが開くので、被写界深度が浅くなる (手前と奥に同時にピントが合わなくなる度合いが増す)。逆にブラしたいときはシャッター速度を遅くする。
女の子などを撮るとき、余計な背景とかを大ボケにしたいときは、絞りを開きまくる (最大開いた絞り値が小さいレンズは重くて大きくて高いので、『明るい』レンズを持っていることはステータスだったりもする)。逆に手前にピントを合わせつつ背景情報も残したいときは絞りを絞るが、暗くなるのでシャッター速度が遅くなる。
中途半端に自動化が進んだカメラでは (いや、いまでもきちんと写真を撮るときはそうだ。失言w) 与えられた (自動測光された) 光の量に応じて、シャッター速度優先 (シャッター速度を指定する) で絞りが自動、絞り優先でシャッター速度が自動、ということができた。
あとデジタル時代になって、これにISO感度というのが加わる。上記はISO100の場合で、ISO200、ISO400、ISO800、ISO1600、……の場合はそれぞれ1段、2段、3段、4段、……稼げる (フィルム時代にもISO100の他にISO400とか、増感して〜ISO1600くらいまではあったことはあったのだが、デジタルだとISO102400とかとんでもない高感度が出現した)。
わしはクラシックカメラとか大好きなので、露出計をみなくてもだいたいのEV値がわかり (晴天はEV14で『日陰3段落ち』、曇天はEV9〜11、夕暮れはEV6〜9、室内はEV3〜9とか)、あと上の計算は暗算でできるようになった。
といっても普段はこんなムダ知識など使う必要がない。
もはやAE (自動露出) は当たり前になっているので、計算しなくてもカメラがEV値を測光し適切なシャッター速度と絞りを決定し、あまっさえ「いまなにを撮ろうとしているのか」を推定して露出の補正までしてくれる。
たまにクラシックなフィルムカメラを持ち出すときは別として、もはや死んだ技術なのかな〜、と思っていた。
んで。
上記の呪文であるが。
どうやら、呪文を唱えるときに絞り・シャッター速度 (・ISO感度)、それからレンズの画角 (35mm換算でのレンズの焦点距離) を適切に与えると、それっぽい写真ができるようなのだ。
実験してみた。
レンズの画角による違い
呪文はすべて
python scripts/txt2img.py --H 384 --W 384 --plms --n_samples 2 --prompt "landscape photo of Akihabara, Nikon D1, 撮影パラメータ"
としている。
秋葉原、ってのは、なんとなくビルとか人混みが欲しくて、世界的に有名そうだからだ。
まずは広角レンズと望遠レンズの違い。
両者とも絞り-シャッター速度は
F5.6, shutter speed 1/500, ISO 100,
としてあるが
Nikkor 28mm,
(広角レンズだ) を入れると:
Nikkor 400mm,
(かなりの望遠レンズ) を入れると:
まあ、前者は28mmというにはちょっと狭いかな、という感じで、後者はなんか4試行中2枚が失敗しているが、これはあまり400mmで撮られた学習サンプルがなかった、ということか? でも明らかに、望遠の圧縮効果があったり手前に余計なものが大きく入った画像が生成されている。
シャッター速度と、風景の明るさ
上の2枚はEV14つまり晴天を仮定している (にしてはちょっと、薄曇りにもみえる) が、次の2枚は夕暮れくらいの明るさにしてみた。
F2.8, shutter speed 1/30, ISO 400
これだとEV6くらいなのでかなり暗くなっていると思うのだが
出来上がった画像は、EV6よりはかなり明るい。
ただ特筆すべきなのは、1/30秒で撮られているので、かなり車がブレているということだ。
同じEV値でシャッター速度を上げたいため、今度はISO感度を上げてみた。
F2.8, shutter speed 1/125, ISO 1600
今度は被写体は止まっているが……見事、夕暮れ〜夜の風景になっている。これは、ISO1600なぞで撮られる写真がかなり薄暗くなってから夜のものが多かった、ということだろう。
絞り値によるボケ具合の差
これは、最初に「なんか絞り開き気味にするとバックがボケるな〜?」と感じたが、実験してみたらそれほどでもなかった。
次は手前にピントを合わせた場合の奥のボケ具合をみたいので、コスプレイヤーを立たせてみた。
以下共通で
python scripts/txt2img.py --H 384 --W 384 --plms --n_samples 2 --prompt "a photo of cosplay girl standing on the street of Akihabara, Nikon D1, Nikkor 50mm, カメラパラメータ"
としている。
まずは絞りを開きまくった場合。
晴天で撮りたいのでEV13くらいになっちゃうので感度を落としてみたが
F1.4, shutter speed 1/1000, ISO 50
(実際晴天で明るいレンズを使うなら、ND (減光) フィルタとかを入れる)
う〜ん? 実際F1.4まで開いたら、こんなに後ろは写らん。
アイドル写真の浅井慎平だったと思うが、絞りを開きまくって (フルサイズならF2以下くらい) 女の子の写真を撮ったら、後ろが公衆便所でもファンシーに撮れる、と豪語している(笑)。
絞ってみると
F8, shutter speed 1/60, ISO 100
F1.4よりは背景が締まっている気もするが、F8よりボケてる感じがする。画角にもよるかな?
結言
他にも繰り返し実験してみた結果から、次のようなコツが導ける。
- レンズの画角はおおむね、広角・標準〜中望遠〜望遠くらいの区別には使える
- シャッター速度を落とすと、ブラした写真ができあがる。ただし被写体として車など速く動くことで躍動感があるものに限られる
- シャッター速度と絞り段数の合計は必ずしもEV値 (晴天・曇天・夕暮れ・夜……) になってるわけではない
- ただしISO感度を上げると夕暮れ〜夜景になる
- F値を指定すると、いずれにしても手前の被写体がくっきり、背景はボカすことができる、っていう程度でしょうか
まあ、Transformerで絵を描く理屈を考えてみたら当たり前っちゃ〜当たり前なのだが、あくまでも学習に用いられている画像に付されたキャプション (これはディジタル時代になって、EXIFから自動で取り出すことができるわけで、大量に正確なカメラパラメータが付与されていると考えられる) から、画像の性質との結びつきを抽出できてしまう、ってところに、改めて驚く。
特に遠景 (になるべき、2次元平面上のピクセル) がボカされるとかね。
もうね。
いや〜。
繰り返しになるが、クラシックなフィルムカメラで撮るときの技術が、AIでお絵描きに役立つとは思わなかった。
Discussion