写真撮るの、ムズイよね。
こんにちは、こんばんわ🙇♂️
2024年に入社しましたおおまちです。よろしくお願いします。
最近の失敗は、雨が降っているのにサンダルで外出したこと。傘持つのも忘れました。
ギリ、靴下ぬれませんでしたけどねw
ちなみに学生時代から苗字でばっかり呼ばれてきたので、名前で呼ばれるとドキッとします。
さて、私も社会人としてFIXERに勤めることになったわけですが、入社研修としてTech Blogを執筆せよという課題が出ました。お題は「自分が学んできた・開発してきた物事を紹介」ということで、簡単に言うと
「おま、今まで何やってきたの?」
をまとめろってことですね。
ちなみに、研修担当の方からはこんな高圧的な言葉でてません。誇張してます。FIXERの人、優しいです。
いやマジで。
じゃ、紹介いきます!
研究の内容
概要
私、写真を撮るのが結構好きな時期がありました。いろんなところをパシャパシャ撮りまくりです。例えば、
こんな写真とか、最近だと
こんな写真とか。下の画像は、UWS AQUARIUM GA☆KYOで撮影した画像です。面白かった。
研究テーマを決めるにあたり、せっかくなら写真と研究を何か絡めてやろうということになりました。足りない脳みそをフル稼働した結果、
「いい写真の撮り方を教えてくれるツールを作ろう!」
というところに落ち着きました。
いい写真、皆さん撮りたいですよね?私もそうです。
でもいい写真ってどうやってとればいいんでしょうか?案外調べてみてもわかりませんでした。写真の良しあしは感覚的な部分が大きく、調べてみてもふわっとしたことしか書いてないんですよね。
じゃあ、いい写真の撮り方を教えてくれるツールがあればいいんじゃね?と考えたわけです。安直。
ここで1つ目の壁に立ちはだかりました。そもそも「いい写真」って何ですか?
いい写真の判断基準、感覚的な部分が大きいですよね。しかも人によっても判断基準はまちまちだし、明瞭な指標はありません。
そこで私は悩みました、そして思いました。
いい写真の尺度はたくさんあるけど、その中でも構図って重要だよな?
写真における構図とは、その写真に含まれる被写体の配置のパターンのことを指します。二分割構図とか、三分割構図とか、いろいろ結構あるんです。
しかも、いい写真の指標の中でも結構パターンやルールが明確なほう。
そんなこともあり、私は(所属していた研究室の先生が機械学習が専門だったこともあって)機械学習を用いてどのような構図で撮影しているのか、その構図の修正方法を教えてくれるツールを開発することにしました。
(その後紆余曲折あり、私は写真の構図分類の部分だけ担当)
やり方はどうする?
そうと決まればあとはやり方を考えるだけです。執筆時間もあまりないので結論から言うと、
画像の入力(データセットの用意)→セグメンテーション→構図判定(NN)→判定結果の出力
このようなやり方にすることにしました。(今回は風景写真を対象とした)
データセットについて
やり方は決まりました。
ここからは必要なデータセット探しです。論文などを探したり、構図のラベリングがされたデータセットがあるかどうかを探したりしました。
だが、どこを探してもない!!!
構図判定の方法を研究した論文もほとんどありませんでしたし、ある程度想定はしていました。
あったほうが楽だったのですが、しょうがないのでデータセットは自分で作ることにしました。
風景画像のデータセットを見つけてくる→それにラベル付けを行う
これをやりました。
大変。最終的に4000枚ぐらいにラベル付けした気がします。
(今回使用したのはLHQ datasetというもの。研究が終わってからUnsplash datasetがあると知って、そっちにすればよかった!と思っているのは内緒です)
(Unsplashがどういうサイトかは検索してね......)
セグメンテーションとは?
セグメンテーションとは、日本語で「分割」という意味です。機械学習においては、画像を複数オブジェクトに分割するタスクを指します。
(引用)セマンティックセグメンテーションとは?深層学習による画像認識の仕組み・インスタンス手法との違い徹底解説 - AI Market (ai-market.jp)より
今回の研究では、セグメンテーションを活用することにしました。セグメンテーションとは、機械学習を用いて画像内の被写体領域を分割することです。今回は、より被写体領域を細かく分割してくれるパノプティックセグメンテーションを用いました。セグメンテーションにはMeta AI(旧Facebook AI)が開発したDetectron2というライブラリを使いました。
セグメンテーションの例:ラーメンの画像
(このラーメン引くほど美味かった.........)
セグメンテーションを行うと、大まかなものの配置を取得することができます。つまり、構図の判定に必要な情報を取得することができる!
すごくハッピーハッピーな訳です。
構図判定
その情報を用いて、ResNet50ベースの構図判定ニューラルネットワーク(NN)に情報を入力し、どの構図に当てはまっているかを出力させました。(多ラベル分類)
NNはどの構図に当てはまっているかの確率を各構図ごとに独立に出力させます。こうすると、複数の構図に当てはまっている場合などにも対応することが可能です。
結果
詳細な結果は時間が限られているので載せませんが、今回の研究ではあまりいい成果を得ることができませんでした。考えられるのは、データセット内に含まれる画像数が少なかったこと、学習に利用した構図に背反する性質を持つものがあり、それらのどちらにも合うように学習した結果中途半端になった可能性が考えられます。
(画像枚数もっと増やせばよかったかな.........)
結局、いい写真を撮るための研究は未だ発展途上ということです。
そういうことです。ね?
私はこんな感じの研究をやってきました!
FIXERではどのような業務を担当するのか、現時点ではわかっていませんが頑張って開発したいです。