<実施形態1>
実施形態の説明に先立って、強化学習について説明する。図1(a)に強化学習のモデルを示す。本実施形態での強化学習では、ある環境における撮影装置1000が、取得部1200で時刻tにおける現在の状態Sを取得(観測)する。撮影装置でユーザが好む画像が得られる設定に変更する行動(制御部1400で実行する制御指示)Aを、推定部1300で推定する。環境とは、有限個の状態sの集合Sから成るとする。例えば、撮影装置1000が撮影しようとしている画像や、撮影装置1000の設定を指すものとする。撮影装置1000とは、学習を行う主体であり、有限種類の行動の集合Aの中から1つを選択して実行し、その結果として環境が次の状態に遷移する。上の撮影装置1000の例では、フォーカスする位置を制御するといった制御が行動に該当する。状態S(Status)とは、撮影装置1000が置かれる状況である。
図1(b)に状態と制御の関係を説明する。撮影装置の状態の集合Sは、撮影装置の各機能iの状態siの集合で表現される。例えば、撮影装置のフォーカス機能(機能i=1)については、レンズの位置(例えば、センサの位置を原点に設定し、0からxまでを可動範囲とする)が状態s1である。行動A(action)とは、撮影装置1000が実行する制御を指す。図1(b)に撮影装置1000のフォーカス機能の制御の例を示す。フォーカス機能に対応する行動(制御)は、レンズをセンサ側に動かす場合はマイナス、レンズをセンサと反対側に動かす場合はプラスとする。このとき、レンズの行動(制御)は、+1、0、(−1)の3つの選択肢がある。なお、数字の1は一例である。報酬rとは、環境から撮影装置が得る報酬である。報酬rを決定する報酬関数は状態stと行動atのペアで決定される関数で、時刻tにおける、ある状態stで、ある行動atをとって、状態st+1になって得られる報酬rtを返す。撮影装置は、報酬が最大になるような行動(制御)を行う。ユーザの直観的な操作を報酬として利用できるため、ユーザに合わせた制御を学習できる。本実施形態で説明する強化学習では、ユーザによる簡単な操作で報酬を決定できるため容易に学習できる。
図2に基づいて本実施形態における撮影装置のハードウエアの構成例を説明する。中央処理ユニット(CPU)101は、RAM103をワークメモリとして、ROM102や記憶装置104に格納されたOSやその他プログラムを読みだして実行し、システムバス109に接続された各構成を制御して、各種処理の演算や論理判断などを行う。CPU101が実行する処理には、実施形態の情報処理が含まれる。記憶装置104は、ハードディスクドライブや外部記憶装置などであり、実施形態の処理にかかるプログラムや各種データを記憶する。入力部105は、カメラなどの撮影装置、ユーザ指示を入力するためのボタン、キーボード、タッチパネルなどの入力デバイスである。なお、記憶装置104は例えばSATAなどのインタフェイスを介して、入力部105は例えばUSBなどのシリアルバスを介して、それぞれシステムバス109に接続されるが、それらの詳細は省略する。通信I/F106は無線通信で外部の機器と通信を行う。表示部107はディスプレイである。センサ108は画像センサである。センサはこれ以外にも、例えば、距離センサや、ジャイロセンサや、オドメトリセンサを備えていてもよい。
図3に沿って、本実施形態における撮影装置1000の機能構成例の概要を説明する。処理内容の具体的な詳細については後述する。本実施形態における撮影装置1000は、検知部1100、取得部1200、推定部1300、制御部1400、学習部2000、記憶部5000から構成される。撮影装置1000としてもっとも一般的な例はデジタルカメラである。それ以外にも、携帯電話やスマートフォンに装備されたカメラや、タブレットやノートPCなどに内装されたカメラなどでもよい。次に、各機能構成の概略を説明する。検知部1100は、本撮影装置に対してユーザが行った操作を検知する。取得部1200は、被写体を含む画像を撮影し、その画像の画像を含む撮影時情報および撮影装置のユーザ設定情報を取得する。撮影時情報とユーザ設定情報については、具体例を後述する。推定部1300は、撮影画像から撮影装置の撮影機能を設定する制御情報を推定する学習モデルに基づいて、取得部1200で取得された撮影時情報とユーザ設定情報から、被写体を撮影する際の撮影機能を設定する制御情報を推定する。制御部1400は、推定部1300で推定された制御情報に従って、撮影装置の設定を制御する。検知部1100は、撮影を確定する第1操作と、撮影を中断する第2操作を検知する。学習部2000は、検知部1100で検知された操作に基づいて決定された報酬で強化学習を行い、学習モデルのパラメータを更新する。学習によって更新された学習モデルのパラメータは、記憶部5000に記憶される。また記憶部5000は、撮影開始検知時から、ユーザの所定の操作(シャッターボタンを押して撮影を確定させる操作、シャッターボタンを解除して撮影を中断する操作)が行われる時までの画像を記憶する。なお、学習部2000、記憶部5000は撮影装置1000の外部にある情報処理装置が有していてもよい。例えば、撮影装置外部にあるPCや携帯端末、あるいはサーバの中にあってもよい。撮影装置外部に学習部2000がある場合には、推定部1300のパラメータ、撮影時情報とユーザ設定情報、検知ステップで得られたユーザ操作の情報が、撮影装置外部の学習部2000に無線もしくは有線によって送信され、処理を行うこととなる。
図16は撮影装置が実行する撮影制御の一例を説明する。ユーザである撮影者が、撮影装置1000を用いて、図16(a)における景色7と被写体6を撮影する場面を想定する。画像160と画像161は撮影装置1000のライブビューで表示される画像である。画像160は、設定S1の設定値が適用されており(例えば露出が+1)、画像が肉眼で見た明るさより少し明るい画像になっているものとする。対して画像161は、設定S4の設定値が適用されており(例えば露出がー1)であり、画像160と比較して画像全体が暗く映っているとする。このように撮影装置1000の設定に依存して、得られる画像は異なる。ここで、撮影者が画像162に示すような写真を撮影したいと所望したとする。画像162は、設定S3の設定値が適用された場合に得られる画像であって(例えば露出が0)画像160と画像161の中間程度の明るさの画像であるとする。また撮影者は、画像162のようなライブビュー画像が表示されたタイミングで撮影を確定させる。
推定部1300は、撮影装置1000の撮影設定を推定する強化学習の学習モデルであるとする。学習モデル1300は、様々な制御Anを出力する。図16(b)では、撮影装置1000が、画像160が得られる設定(状態)S1から画像162のようなライブビュー画像が生成される設定(状態)をマイナスの方向に変更する撮影制御A1を選択した場合を考える。このとき撮影装置1000は、撮影者によってシャッターボタンが押される操作を検知し、撮影を確定させる。学習モデル1300は、シャッターボタンが押されたことを検知すると、正の報酬を与え制御A1を学習する。この報酬によって、画像160に対しては設定S3になるような制御A1が望ましいことを学習できる。図16(d)では、同様に、画像161が得られたときは、露出を上げる(+)制御A3を選択した場合に、撮影者によってシャッターボタンが押され、撮影が確定する。一方で、図16(c)では、推定部1300の出力の結果のうち、露出を上げる(+)制御A2が選択された場合を考える。このとき、画像163のように設定S2(例えば露出が+2)に設定され、全体的に明るい画像になる。この場合、撮影者は撮影を中断する為に、シャッターボタンから指をいったん離す。撮影者によってシャッターボタンが解除されたことを検知すると、推定部1300は、負の報酬を与え制御A2を選択しないように学習する。これらの学習を繰りかえすことにより、強化学習を用いて学習モデルのパラメータが更新され、撮影装置は撮影制御を学習できる。
以下に図4(a)の撮影装置1000が実行する処理の流れを示すフローチャートに従って詳細な説明を記す。以下の説明では、各工程(ステップ)について先頭にSを付けて表記することで、工程(ステップ)の表記を省略する。ただし、撮影装置1000は必ずしもこのフローチャートで説明するすべてのステップを行わなくてもよい。なお、図4のフローチャートに示した処理は、コンピュータである図2のCPU101により記憶装置104に格納されているコンピュータプログラムに従って実行される。
S1010では、検知部1100が、撮影開始操作を検知する。撮影装置がユーザの撮影開始操作を検知し、S1020が開始される。ユーザによる撮影開始操作とは、たとえば、カメラのシャッターボタンの半押しを開始する操作が挙げられる。S1020における撮影時刻はt=1に初期化される。記憶部5000から、推定部1300が制御情報を推定する学習モデルのパラメータ(後述するニューラルネットワークの各層の結合重み付け)が読み込まれる。
S1020は、S1021、S1022、S1023、S1024、S1025から成り、ユーザによってシャッターボタンが半押しされている間はこれらのステップが繰り返し行われる。図4(b)を用いて説明する。
S1021では、取得部1200が、画像を含む撮影時情報と、撮影前にユーザが設定するユーザ設定情報を取得する。画像は、時系列データとして撮影装置に保持される。なお、撮影時情報とユーザ設定情報は様々なものが考えられる。撮影時情報のもっとも端的なものは、任意の時刻において画像センサから得られる被写体の画像と、その前後の時刻における画像である。時系列画像を取得するため、学習モデルはその場に相応しい設定をその都度学習できる。その他にも撮影装置から得られるさまざまな情報を扱うことができる。例えば、像面位相差から得られるデプス情報や、画像内の局所領域におけるコントラストの強さを領域ごとに算出したコントラストマップ、レンズのフォーカス位置などがある。画像全体の輝度絶対値であるBv値なども、撮影時情報として扱うことができる。これらの情報は、撮影を行っている間は図示しない保持部に保持され、学習時に学習モデルの入力情報となる。また、画像情報を入力として得られる各種認識結果を撮影時情報の一種としてもよい。例えば、顔や人体の検出結果や、動物や自動車、飛行機などの特定物体の検出結果、画像認識結果などを撮影時情報として扱ってもよい。ユーザ設定情報は、ユーザが撮影ステップを開始する際に行った設定に関する情報である。例えば、ユーザによって選択された撮影モード(マクロモード、夜景モード、スポーツモード、など)や、露出設定、ホワイトバランスモード、などが考えられる。
S1022では、推定部1300が、学習モデルに基づいて、撮影時情報とユーザ設定情報から、撮影装置の撮影に関する機能の設定(フォーカス機能であればレンズの位置)を制御する制御情報を推定する。フォーカス動作の制御情報以外にも、設定される制御情報はさまざまなものが想定されるが、たとえば露出設定値、ゲイン調整値、などが考えられる。後述するS1030にて、撮影時情報やユーザ設定情報を変化させることのできるものであれば、制御情報を推定する方法を特に限定されるものではない。ここでは具体的に、学習モデルのひとつであるCNN(Convolutional Neural Network)によって制御情報を推定する例を説明する。推定部1300に学習モデルを採用するメリットは次のような点がある。例えば、予めプロの撮影者の撮影動作を学習させた学習モデルを利用することによって、撮影者は初期設定から撮影に関する機能の設定が最適な状態で撮影できる。さらに、撮影者にとっては簡単な撮影動作だけで学習モデルのパラメータが更新され、特定の撮影者に相応しい設定を習得できる。
図5に、CNNによって撮影に関する機能を設定する制御情報を推定する推定部1300の例を示す。ネットワーク構造5はCNNである。2100はCNNで構成される推定部1300の入力層である。入力層2100は、入力画像のサイズに対応する撮影時情報を入力するマップ入力部2110と、画像全体に対してスカラ値もしくはベクトル値で与えられる撮影時情報およびユーザ設定情報を列挙した、スカラ/ベクトル入力部2120で構成される。畳込み層2200は、少なくとも一つの層から構成される畳み込み層2210、少なくとも一つの層から構成される逆畳み込み層2220、そして、少なくとも一つの層から構成される完全結合層2230からなるCNNである。これらCNNの各層は、少なくとも一つ以上の素子から構成されている。畳み込み層2210内部の各層は、畳み込みによって順番に結合している。畳み込み層2210の最終層2212は、逆畳み込みによって逆畳み込み層2220の最下層2221と結合している。逆畳み込み層2220内部の各層は、逆畳み込み結合によって順番に結合している。また、畳み込み層の最終層2212のすべての素子は、完全結合層2230の最下層2231のすべての素子と完全結合している。完全結合層2230は複数の層から成り、各層は完全結合によって順番に結合している。層間の各結合は、結合重みを伴っている。この結合重みは、CNNのパラメータであり、S1010開始時に記憶部5000より読み込まれる。後述のS1030で行われる学習処理では、CNNのパラメータが更新される。パラメータの初期値はランダムに与えてもよいし、ルールベースで得られる値であらかじめ学習しておいてもよい。あるいは、プロカメラマンによって学習させた結果得られた値を初期値として与えておいてもよい。この場合、どんなユーザでもプロが撮ったような写真を撮ることが出来る。マップ入力部2110は、畳み込み層2210の最下層2211と、畳み込み結合によって結合している。スカラ/ベクトル入力部2120は、畳み込み層2210の各層の各素子に対して、バイアス信号として入力される。
マップ入力部2110に入力される撮影時情報としてはさまざまなものが考えられる。例えば、RGB画像、あるいは現像処理前の画素単位の撮像画像信号(RAW画像)や画像のデプス情報、物体検出器による物体検出スコアのマップ、画像の局所領域における分散値から得られるコントラストマップ、などが挙げられる。スカラ/ベクトル入力部2120に入力される撮影時情報もさまざまなものが考えられる。例えば、画像全体の輝度絶対値(Bv値)、画像認識器による認識結果、レンズのフォーカス位置、などがある。また、スカラ/ベクトル入力部2120には、カメラの撮影モード、露出設定、ホワイトバランス係数、といったユーザ設定情報も入力できる。しかしながら本発明は、これらさまざまな撮影時情報およびユーザ設定情報の組み合わせに対して限定されるものではない。
図6に本実施形態におけるCNNの出力層の例を示す。2300は出力層である。出力層2300は、マップ出力部2310と、スカラ/ベクトル出力部2320から構成される。マップ出力部2310は、入力画像のサイズに対応するマップ形式で出力信号(制御情報)を出力する。スカラ/ベクトル出力部2320は、入力画像に対してスカラ値もしくはベクトル値による出力信号を出力する。マップ出力部2310の各マップは、逆畳み込み層2220の最終層2222と、逆畳み込み結合で結合している。スカラ/ベクトル出力部2320の各素子は、完全結合層の最終層2232の信号を受け取り、出力する。マップ出力部2310には、撮影装置の制御の選択肢に対して、画像上の各位置に対する確率が出力される。例えば、マップ出力部2310の出力として、フォーカス動作を確率的に定義するために、図6のように、3枚のマップ2311a、2311b、2311cを用意する。マップ2311a、2311b、2311cは、それぞれフォーカスを手前に動かす/静止させる/奥側へ動かす、といった動作のためのマップである。マップ2311a、2311b、2311cの出力値は、画像上のどの位置をフォーカス制御点として設定し、フォーカス用のレンズモーターを手前/奥のどちらに動かすか、という制御動作の選択肢を確率的に表している。マップの出力がピーキーであれば、より確実にピークに相当する制御動作が選ばれることになる。マップの出力が広く似たような値で分布していれば、より広くランダムに制御動作が選ばれることになる。
スカラ/ベクトル出力部2320には、画像上の位置に依存しない撮影装置の制御に関して、その選択肢の確率が出力される。例えば、スカラ・ベクトル出力部の2320の出力として、図6のように、露出制御端子2321a〜c、ゲイン調整端子2322a〜c、絞り調整端子2323a〜cを用意する。露出制御するための3つの端子2321a、2321b、2321cはそれぞれ、露出時間をさらに多くする/変えない/少なくする、という動作に対応する。ゲイン調整制御するための3つの端子2322a、2322b、2322cはそれぞれ、撮像センサのゲインを上げる/変えない/下げる、という動作に対応する。絞り調整制御するための3つの端子2323a、2323b、2323cはそれぞれ、レンズの絞りを現状の状態から絞る/変えない/開ける、という動作に対応する。
なお図7は、複数時刻における撮影時情報を入力するためのCNNの構成例を説明する図である。S1020における複数の時刻に関する撮影時情報およびユーザ設定情報を、図7(a)のように入力層へ入力してもよい。例えば、現時刻tにおける撮影時情報およびユーザ設定情報をStとしたときに、Tフレーム前の時刻t−Tまでの情報St、St−1、・・・St−Tを利用してもよい。また、直前の時刻t−1からt−Tまでの出力層の出力結果(制御情報)を、図7(b)のように入力層に与えてもよい。図7のように、現時刻tの入力層における状態がStのとき、マップ出力部2310のi番目の機能におけるk番目の動作に関する出力をQi,k(St,(x,y))と書くこととする。(x,y)はマップ上の座標で、画像上の位置に対応する。例えばフォーカス動作のためのマップに機能インデックスi=1を割り当て、フォーカスを手前側に動かす2311a/動かさない2311b/奥側へ動かす2311cのそれぞれのマップに対して、k=1,2,3と割り当てる。その場合、例えば、フォーカス制御点を(x,y)として、フォーカスを手前に動かす制御に関する出力は、Q1,1(St,(x,y))と表される。
ここで挙げた説明は出力層の一例であって、本発明はその組み合わせによって制限されるものではない。現時刻tの入力層における状態がStのとき、スカラ/ベクトル出力層2320のj番目の機能におけるh番目の動作に関する制御情報をQj,h(St)と書くこととする。例えば露出制御動作に機能インデックスj=1を割り当て、露出を多くする2321a/変えない2321b/少なくする2321cのそれぞれの動作に対して、h=1,2,3と割り当てる。その場合、例えば、露出を多くする制御に関する出力は、Q1,1(St)と表される。現時刻tにおける撮影時情報およびユーザ設定情報が入力層2100に入力される。すると、その情報StがCNNを通して伝達され、出力層2300の各マップ出力部2310およびスカラ/ベクトル出力部2320から出力信号Qi,k(St,(x,y))およびQj,h(St)が得られる。
S1023では、制御部1400が、推定部1300の制御情報に従って、撮影装置の設定を制御する。現時刻tにおけるマップ出力部2310の各機能iにおける制御動作At,iとして、位置(x,y)による制御行動kが選択される確率は、下記のようになる。
同様に、現時刻t0におけるスカラ/ベクトル出力部2320の各機能jにおける制御動作At,jとして、制御行動hが選択される確率は、下記のようになる。
このようにして、各機能は出力層の値に比例した確率で動作が選択され、フォーカス動作や露出制御、ゲイン調整、絞り調整などの各制御動作が実行される。確率的に制御を選択することによって、矛盾した制御情報が出力されてもひとつの行動を決定できる。
S1024では、検知部1100が、ユーザが行った操作を検知する。本実施形態では、ユーザによって撮影を確定する動作を第1の操作として検知する。ここでは、撮影を確定する動作として、ユーザによってシャッターボタンボタンが深く押される動作を第1の操作として検知する。撮影装置が具備するシャッターボタンボタンは、深押しされた状態(第1の状態)、解除された状態(第2の状態)、半押しの状態があるものとする。撮影を中断する動作を第2の操作とする。ここでは、ユーザがシャッターボタンボタンの半押しを解除する動作を検知する。このようなユーザの直観的な操作を検知することによって、特別な操作をしなくても報酬を決定できる。なお、ユーザの動作はこれに限らない。例えば、シャッターボタンボタンがタッチパネルに表示される撮影装置の場合は以下のような操作が考えられる。S1010の撮影開始指示は被写体をタッチする操作である。撮影する指示は画面に表示されるシャッターボタンボタンをタッチする操作である。撮影を中止する指示はキャンセルボタンをタッチする操作である。
S1025では、検知部1100が、撮像を継続するか判断する。検知部1110は、シャッターボタンが半押された状態を検知した場合は、撮影を継続するものとし、撮影時刻をt←t+1と加算して、S1021へと戻る。撮影実行命令すなわちシャッターボタンを深押し(第1操作)を検知した場合、あるいは、撮像中断命令すなわちシャッターボタンから手を放した(第2操作)を検知した場合には、撮影を終了しS1030へと進む。
S1030では、学習部2000が、撮影を確定させる第1操作を検知した場合、正の報酬を、撮影を中断させる第2操作を検知した場合、負の報酬を決定する。さらに、決定された報酬によって学習モデルのパラメータを更新する。すなわち、検知部1100で得られたユーザ操作に基づき撮影制御を学習する。S1024にてユーザが撮影実行命令(第1操作)を出した場合には、ここまでの撮影ステップが正しかったとみなして、「報酬」(正の報酬)を与える。撮像中断命令(第2操作)だった場合には、ユーザがここまでの撮影ステップを不適と判断したものとして、「罰」(負の報酬)を与える。これにより、撮影装置の撮影ステップ中に行われた制御動作について強化学習する。このようにユーザの直観的な操作から報酬を決定するため、報酬を設定するといった特別な手順を踏まなくても簡単に学習を行える。
撮影終了時の最終フレームにおける時刻をt0とする。S1020が実行されている時間t=t0、t0−1、・・・t・・・1におけるそれぞれの制御情報に対して、マップ出力部2310とスカラ/ベクトル出力部2320、それぞれの行動価値Q’を次のように得る。
Q’i,k(St,(x,y))=Qi,k(St,(x,y))+α{rt+1+γQi,k(St+1,(x,y))−Qi,k(St,(x、y))}・・・(3)
Q’j,h(St)=Qj,h(St)+α{rt+1+γQj,h(St+1)−Qj,h(St)}・・・(4)
ただし、(x,y)およびkは、時刻tにおいてマップ出力部2310の機能iにおいて選択された制御動作At,iの位置と動作を表す。また、hは時刻tにおいてスカラ/ベクトル出力部2320の制御機能jにおいて選択された制御動作At,jの動作を表す。
S1024で得られたユーザの操作によって、「報酬」が与えられている場合は、r1の値は1などの正の値となる。tが1以外の場合には、一律にrt=0である。一連の撮影制御に対して「罰」が与えられている場合には、r1の値は−1などの負の値となるとなり、tが1以外の場合には、一律にrt=0である。γは時刻を遡る際に各動作に対して与える影響を減衰させるための係数(割引率、0<γ≦1)で、γ=0.9などと設定する。これに従って得られたQ’の値を各出力層に対する報酬として与えると、機能i、jおよび制御行動k、hに対する誤差は下記のような式であらわされる。
Li,k=(Qi,k(St,(x,y))−Q’i,k(St,(x,y)))2・・・(5)
Lj,h=(Qj,h(St)−Q’j,h(St))2・・・(6)
これらの誤差関数から、勾配降下法などでCNN全体を学習させる。学習することで、CNNのパラメータである結合重みが更新される。更新されたパラメータは、記憶部5000に記憶される。なお、S1020において撮像された任意の画像を使って学習を行ってもよい。例えば、記憶部は、撮影が開始された第1時刻から、検知部によって第1操作または第2操作が検知された第2の時刻の間に取得された画像を記憶する。学習部は、第1の時刻から第2の時刻の間に取得された画像に対して報酬を与えることによって学習モデルのパラメータを更新する。撮影ステップにおける複数の時刻に関する画像を使って学習するため、短時間で機能の設定ができる。
本実施形態では、ユーザがシャッターボタンを押して撮影を確定する、もしくは撮影を中断する、のいずれかを選択することによって、学習モデルのパラメータが更新される。そのため、本実施形態における撮影装置は、撮影を何度も行っていくことにより、より所望の動作に近い制御動作が得られるようになる。また、本実施形態では撮影を中断した画像についても、負の報酬を決定することによって学習モデルを更新する。そのため、撮影を行わなかった設定についても強化学習ができる。
なお、撮影機能の設定をより迅速に制御する為に、S1020の途中における撮影装置の状態に基づいて所要時間を加味した報酬を加えてもよい。図4(b)のフローチャートに従って説明する。S1010では、検知部1100が、撮影開始操作を検知する。撮影装置がユーザの撮影開始操作を検知し、S1020が開始される。S1021では取得部1200が画像を取得し、S1022では推定部1300が制御情報を推定する。
時刻tにおけるフォーカス動作を行った際に、合焦するまでにかかった時間がFtであったとする。制御S1023において、制御部1400は、このFtの値を保持しておく。S1023では制御部1400が撮影制御を行い、S1024では検知部1100が撮影を確定する第1操作または撮影を中断する第2操作を検知する。S1025では、検知部1100がユーザ操作の検知結果から判断を行う。ユーザがシャッターボタンを半押しにしたままの場合は、撮影ステップを継続するものとし、撮影時刻をt←t+1と加算して、S1021へと戻る。ユーザが撮影実行命令、すなわちシャッターボタンを深押しした場合、あるいは、撮像中断命令、すなわちシャッターボタンから手を放した場合には、S1030へと進む。
S1020を抜けてS1030に進んだ時に、学習のための式(3)および式(4)で用いる報酬/罰則rtは均一な値ではなく、下記のようにFtによって微修正される。
rt=r0−δt・・・(7)
ここでδtは、前述のFtで定義される関数で、例えば下記のように設定する。
δt=ηFt・・・(8)
ここでηは正の値のパラメータである。ただし、本発明はδtの形式によって限定されるものではない。このようにして、S1020の途中における撮影装置の状態に従って、S1020の各時刻における報酬/罰則を変えることによって、それぞれの時刻における制御動作に対する反応も加味した学習を行うことができる。この処理を行うことによって、撮影機能をより迅速に設定できる。
また、図4(a)のS1010において、記憶部5000が、推定部1300の学習モデルのパラメータを複数保持してもよい。具体的には、推定部1300が撮影モードに対応した学習モデルの異なるパラメータ(結合重み)を利用して制御情報を推定する。例えば図8のように、撮影装置1000は撮影モードを切り替える切替部3100を有する。切替部3100は、ユーザによって撮りたい被写体に合わせた撮影モードを選択される。
図17を用いて、例えば、人物と花を撮影する場合を説明する。画像151には、人物1と植物2が写っている。人物1をより鮮明に撮りたいユーザは「人物モード」を選択して撮影する。このとき撮影装置は「人物モード」に対応した学習モデルのパラメータaを使って、人物を撮影するのに適した制御情報を推定する。人物モードにおいては、人物以外にフォーカスが設定された場合、ユーザは撮影を中断する可能性が大きいため、設定Sbに制御する制御Aa‘を選択する確率を抑制するように学習する。一方で、ユーザが花2を撮りたい場合は、例えば「風景モード」を選択する。このとき撮影装置は「風景モード」に対応した学習モデルのパラメータbを使って、花を撮影するのに適した制御情報を推定するとよい。このように用途に応じて学習モデルのパラメータを更新するため、より迅速に学習が行える。また、複数の学習モデルのパラメータを利用することによって、1つの学習モデルを使って制御情報を推定するよりも、ユーザや用途に合わせた細かい設定が可能となる。図8の機能構成例のブロック図に従って説明する。記憶部5000は、推定部1300に関するK種類のパラメータΘk(k=1・・・K)が記憶する。これらは撮影モードに対応するものであって、例えば夜景撮影モード、スポーツ撮影モード、スナップショット撮影モード、などがある。切替部3100は、ユーザの操作、または、取得部1200によって取得された画像を入力した画像識別器の認識結果、に従って撮影モードを切り替える。ここでは、ユーザによる入力操作に従って撮影モードを切り替える方法を説明する。ユーザは、撮影を開始する前(すなわち、シャッターボタンを半押しする前)に、撮影装置のモード選択機能から撮影モードを選択しておく。選択された撮影モードにしたがって、切替部3100は撮影モードを切り替える。ここで選択された撮影モードをkとする。S1010において、取得部1200は、選択された撮影モードkに対応する学習モデルのパラメータΘkを記憶部5000から取得する。S1020が終了し、S1030では、学習部2000が学習モデルΘkを更新する。更新された学習モデルΘkは記憶部5000に記憶される。記憶部5000に記憶されていたΘkの値は更新される。これにより、画像に応じたそれぞれの撮影モードに対応するパラメータが、別々に学習されることとなる。その結果、撮影モードに応じた撮影設定を迅速に行える。
また、撮影モードのシーン認識処理を、撮影時に同時に学習させてもよい。図9にその機能構成例のブロック図を示す。図3の機能構成に加えて、切替部3100と第2の学習部3200をさらに有する。第2の学習部3200は、切替部3100が保持する撮影モードの画像認識器を学習する。切替部3100は、取得部1200が取得した画像からシーン識別器がシーン認識した結果に従って撮影モードを切り替える。図10(a)と(b)は撮影装置1000が実行する処理を説明したフローチャートである。図10(a)のS10010では、切替部3100が、画像認識器によって認識される画像を選択する。次にS10020が開始される。S10021では、取得部1200が、画像を取得する。さらに、選択された撮影モードkに対応する学習モデルのパラメータΘkを記憶部5000から取得する。次にS10031では、第2の学習部3200が、前記画像に対して、選択された撮影モードを正解の教師データとして、教師つき学習の方法で、第2の学習モデルのパラメータを更新する。画像認識器における第2の学習モデルは、画像を入力するとその画像に対応する撮影モードを推定するニューラルネットワークに基づくネットワーク構造とそのパラメータである。学習モデルは、画像と、その画像に対応する撮影モードを正解とした教師データを使ってパラメータを更新する。なお、学習モデルのパラメータを更新とは、学習モデルの入力側の層に画像を、出力画像の層に画像に対する正解(ここでは撮影モード)を設定する。そして、ネットワークを経由して算出される出力が設定した正解値に近づくようにネットワークのパラメータを調整する処理を指す。この第2の学習モデルにおける教師データは、例えば、入力画像に、ユーザが過去に選択した撮影モードを正解値として与えた画像である。画像認識器は、CNNの他、画像からSIFTやHOGなどの特徴量を抽出し、SVMで認識してもよい。第2の学習部3200は、取得部1200で得られた撮影時情報およびユーザ設定情報を入力データとし、この入力データを、取得部1200によって取得された画像に対する正解の教師値として、第2の学習モデルのパラメータを更新する。学習によって更新された画像認識器のパラメータは、記憶部5000に記憶される。このようにして、制御動作とともに、切替部3100の画像認識器と、制御情報を推定する推定部1300を、同時に学習する。これにより、画像によって異なる動作制御が自動で選択され、かつ、その制御動作もユーザの意図に近づくように学習されることとなる。
なお、撮影装置の機能構成は上記で説明した構成に限定されるものではない。例えば、学習モデルの更新を行う学習部を外部装置が有してもよい。S1030を、PC等の外部装置で行ってもよい。その場合、画像ファイルをPCにアップロードするときに、推定部1300のパラメータを一緒にPCに送る。上記学習処理はPCにおいて行われ、送られてきたパラメータを更新する。学習結果として得られたパラメータは撮影装置に送信され、撮影装置における推定部1300は、受信したパラメータによって更新される。処理能力の高いPC等の外部装置が学習処理を行うことによって、効率よく学習を行える。
なお、本実施形態は、例えば、ユーザがプロのカメラマンや中上級のアマチュアカメラマンである場合は、設定の微調整に手間取ると、スポーツ画像や動物等の素早い被写体を撮影する場合でもシャッターボタンチャンスを逃がす恐れがある。本実施形態における撮影装置を用いることで、上記のユーザの好みに合わせた設定を迅速に行える。一方で、失敗が多い初心者のカメラユーザの場合、好ましくない制御情報を学習してしまう可能性がある。その場合は、ユーザの設定によって、学習機能を抑制してもよい。写真を撮った枚数、もしくはカメラの起動時間に応じて、学習の強度を大きくするようにしてもよい。これによってユーザの経験値や慣れに対応した学習が行える。また、カメラの出荷前に予めプロのカメラマンによって学習を行うようにしてもよい。適切な制御情報を容易に設定できるため、初心者でもすぐにきれいな写真が撮ることが出来る。
<実施形態2>
実施形態1では、撮影時におけるユーザ操作に従って、推定部にどのように学習させるのかを決定する例を示した。実施形態2では、撮影後のユーザによるデータ操作に従って学習を行う例を示す。例えば、撮影時に意図した被写体と異なる対象を撮影してしまったとする。そのような場合、ユーザは間違えて撮影してしまった画像を削除や加工するといった操作をする。本実施形態では、この画像を削除するといった操作情報を使って、この画像の撮影制御に対して後から負の報酬を学習モデルに与える。逆に、上手く撮影できた画像に対しては、ユーザはすぐに保存することやお気に入りとして登録することが考えられる。このような画像を保存する操作情報を使って、保存された画像の撮影制御に対して正の報酬を学習モデルに与える。撮影時に意図した撮影制御で撮影できなかった場合でも、撮影後の操作情報を使って撮影制御を出力する学習モデルを更新できる。そのため、シーンに適した撮影制御を学習できる。
図11に本実施形態の撮影装置の機能構成例を説明するブロック図を示す。まず概略を説明する。図11(a)の機能構成例を示すブロック図には、図3の機能構成に加え、更に評価取得部1600、画像記憶部5100を有する。評価取得部1600は、ユーザによって画像が保存される第1の操作と、ユーザによって画像が削除または修正される第2の操作を取得する。画像記憶部5100は、過去に撮影した複数の画像を記憶する。画像記憶部5100、評価取得部1600は撮影装置が有していてもよいし、画像処理装置2000のような外部装置にあってもよい。または、図11(b)のように、画像処理装置2000は評価取得部1600と画像記憶部5100を有する。評価取得部1600は、アプリケーションソフトを介してユーザによって撮影された画像を保存する第1操作と、画像が削除または修正される第2操作とを取得する。これらの操作によって、ユーザが画像に対してどのような評価を行ったのかがわかる。例えば、気に入った画像や評価の高い画像は保存され、評価が低い画像は削除される。なお、ユーザがアプリケーションソフトを介して撮影された画像に対して行ったデータ操作を取得してもよい。
図12に撮影装置が実行する処理を説明するフローチャートを示す。撮影装置が実行する処理の概略は以下のとおりである。S1010では、検知部1100が、撮影開始操作を検知する。撮影装置がユーザの撮影開始操作を検知し、S1020が開始される。S1020は、実施形態1における図4と同様に、S1021、S1022、S1023、S1024、S1025から成り、シャッターボタンを半押ししている間はこれらのステップが繰り返し行われる。S1021では取得部1200が画像を取得する。S1022では推定部1300が、学習モデルに基づいて、制御情報を出力する。S1023では制御部1400が撮影制御を行う。S1024では検知部1100がユーザ操作を検知する。S1025では、検知部1100がユーザ操作の検知結果から判断を行う。ユーザがシャッターボタンを半押しにしたままの場合は、撮影ステップを継続するものとし、撮影時刻をt←t+1と加算して、S1021へと戻る。ユーザが撮影実行命令、すなわちシャッターボタンを深押しした場合、あるいは、撮像中断命令、すなわちシャッターボタンから手を放した場合には、S12021へと進む。撮影実行された場合、取得部1200は、撮影された画像と、その画像を撮影する前に行われた撮影制御とを取得し、画像記憶部5100に入力する。S12021では、画像記憶部5100が、学習を行っていない画像が残っているか判断する。学習を行っていない画像がない場合は、処理を終了する。学習を行っていない画像がない画像があった場合は、S12022に進む。S12022では、評価取得部1600が、画像が保存される第3操作と、画像が削除または修正される第4操作とを取得する。または、取得部1600が、画像が高く評価される操作と、画像が低く評価される操作を検知するようにしてもよい。S12030では、学習部2000が、検知された操作に基づいた報酬を使って強化学習を行う。すなわち、検知部によって第3操作を検知した場合は正の報酬を決定する。検知部によって第4操作を検知した場合は負の報酬を決定する。これらの報酬によって、学習モデルを学習する。以下、実施形態1と差がある箇所について、詳細に説明する。
S12021は、画像記憶部5100が、S1020で、撮影が行われたか否かを判断する。S1020において撮影が実行された場合には、画像記憶部5100は画像を保持する。画像が残っていなかった場合(すなわち、撮影されなかった場合)には、処理を終了する。画像が残っていた場合には、S12022に進む。取得された各フレームにおける撮影時情報およびユーザ設定情報と、対応する撮影制御情報を、所定メモリに記憶する。
S12022では、評価取得部1600が、画像が保存される第1操作と、画像が削除または修正される第2操作とを取得する。第3の操作は、保存する指示の他、お気に入りに登録する操作や特定のフォルダに保存する操作でもよい。第4操作は、削除や修正の指示の他、ごみ箱ファイルに保存する操作であってもよい。このようなユーザの画像に対する評価を情報として学習させることによって、効率的に学習モデルを更新できる。
撮影装置外部で操作を行う例を図13(b)に示す。撮影装置外部の装置としては、PCやタブレット、携帯電話やスマートフォンといったさまざまなものが考えられるが、ここでは一例としてPCを使った例を示す。撮影装置1000から画像ファイルをPC1002に無線もしくは有線でアップロードする。PC1002は、画像記憶部5100、評価取得部1600を有している。PC1002はユーザ操作アプリケーションを起動させる。ユーザは、画像ファイルに対して、前述の撮影装置上での操作と同様に、所望の操作を行う。評価取得部1600は、画像ファイルに対してユーザが行った操作を検知する。検知した操作を、無線もしくは有線によって撮影装置1000に送信される。
S12030では、学習部2000が、評価取得部1600が取得した評価に基づいて決定された報酬を使って撮影制御を学習する。S12022にて画像に対してユーザが行ったデータ操作に従い、制御動作に関する学習が行われる。データ操作として画像の削除を行った場合には、前述の式(3)および式(4)におけるrの値をr=−1などと負の値にして学習させる。あるいはユーザが、画像に対してgoodの評価ラベルを与えた場合にはrの値を正の値にし、badの評価ラベルを与えた場合には、rの値を負の値に設定して学習を行う。
なお、ユーザが画像に対して採点した結果を評価スコアとして報酬に反映させてもよい。画像に対して数値による評価スコアを与えた場合には、その評価スコアに従った値をrに与えて学習を行う。例えば、評価スコアが1から5までの5段階で定義され、1が「最も悪い」、3が「普通」、5が「最もよい」とされていたとすれば、得られた評価スコアRに対して、報酬rの値を例えば下記のように定義する。
また、所定フォルダや所定記憶媒体への移動やコピー、ファイル名の変更などが行われた場合には、その画像がユーザにとって必要な画像である可能性があるため、例えばr=0.1などと弱めに報酬を与える、などとしてもよい。
上記報酬rの値に従い、撮影時情報およびユーザ設定情報と撮影時制御動作が関連付けて学習されるように、学習時に所定メモリに格納されている撮影時情報およびユーザ設定情報と撮影時制御動作の履歴を読み出して、強化学習を行う。
撮影時の学習と、撮影後の追加学習の学習係数に差をつけてもよい。各々の学習処理における学習係数(係数α)の値を変える。各々の学習に対する重要度に差をつけてもよい。例えば、撮影時のユーザ操作よりも、撮影後の画像ファイル操作の結果を重視するのであれば、実施形態1における学習係数を0.05、本実施形態における学習係数を0.1などと、設定してもよい。
このようにして、ユーザが撮影後の画像に対して所望のデータ操作を行うことにより、その画像を得るための撮影ステップで行われた制御動作に対して推定部1300が学習されて更新される。そのため、本実施形態における撮影装置は、よりユーザの所望に近い画像を得るために適した制御動作が得られるようになる。
なお、評価取得部1600が実行する処理は、撮影装置外部のPCなどに画像ファイルをアップロードした後に行ってもよい。ユーザが行う操作は、保存、削除や修正等さまざまなものが考えられる。例えば図13(a)のように、撮影装置上で操作を行う場合、撮影装置1000の表示画面1001で画像を確認して操作を行うことが考えられる。例えば、所望の結果が得られた画像は残して、所望の結果が得られなかった画像は削除する、という処理でもよい。あるいは、画像に対するユーザの評価をgood/badなどの評価ラベルで与えてもよいし、評価スコアとして数値で与える、などしてもよい。これらのユーザ以外の評価を反映させることによって、より質のよい写真を撮影できるようになる。その他にも、画像ファイルの名称変更や、所定フォルダへの移動もしくはコピー、所定記憶媒体への書き込み、所定メモリアドレスへの格納、アルバムソフトやクラウドアプリなどへの転送、といったものが考えられる。操作自体は、ダイアルやボタンなどの物理的な方法で行ってもよいし、表示画面上でのタッチパネル操作でもよい。
なお、S12022を撮影装置外部のPCなどで行う場合には、図13(c)のようにS1030を、S12022を行った撮影装置1000外部のPC1002上で行ってもよい。その場合、画像ファイルをPCにアップロードするときに、学習モデルのパラメータを一緒にPCに送る。上記学習処理はPCにおいて行われ、送られてきたパラメータを更新する。学習結果として得られたパラメータは撮影装置に送信され、撮影装置における推定部1300は、受信したパラメータによって更新される。
<実施形態3>
本実施形態では、過去の撮影画像の中で出現頻度の高い被写体に対して合焦しやすいように学習する例を示す。過去の撮影画像と照らし合わせて、高頻度で撮影される被写体に合焦した場合には報酬を与えた学習がなされることになる。逆に、高頻度で撮影される被写体がボケた画像が得られた場合には、罰則を与えた学習がなされることになる。そのため、撮影を何度も行うことにより、高頻度で撮影される被写体に対して合焦しやすい制御動作が獲得される。例えば、家族旅行などで、家族のスナップショットを撮ろうとしたときに、他人がどうしても画角内に入ってしまう場合に優先的に家族に焦点を合わせる。子どもの運動会などで人ごみの後ろから、走っている子の写真を撮ろうとしたときに、手前の他人の頭に焦点が合ってしまうことや、並走している他の子どもに焦点が合ってしまうといったことがよく発生する。本実施形態では、そのような事例を回避することができる。
図14の機能構成例のブロック図に沿って説明する。本実施形態における撮影装置は、図3の機能構成に加え、照合部1500、画像記憶部5100を有する。画像記憶装置5100は、過去に撮影した複数の画像を記憶する。画像記憶装置5100は、撮影装置内部、もしくは撮影装置外部のPCなどのストレージである。画像記憶装置5100に保存された画像は、あらかじめ照合部1500によって照合処理が行われ、それぞれの被写体に対してIDが割り当てられる。例えば人物に対する照合処理を行った場合、同一人物に対しては同一のIDが割り当てられることとなる。
図14の照合部1500は、照合処理によってそれぞれのIDが割り振られた被写体が、ストレージ内の画像中にいくつあるかをカウントする。ID=uの被写体の数をNuであったとする。ストレージに保存されている画像の総数をNとすれば、各IDの被写体に関する出現頻度Huは下記のように表される。
図18と図19を用いて具体例を説明する。図18において、画像151、画像152、画像153はいずれも撮像装置に記憶されている過去の撮影画像である。撮像装置の照合部1500は、画像151、画像152、画像153から人物の顔の画像特徴を照合し、人物毎にIDを割り当てる。例えば、画像151に写っている人物にはID=1、画像152に写っている人物にはID=1とID=2、画像153に写っている人物にはID=1とID=2、ID=3を割り当てる。この撮影装置には、ID=1が最も多く撮影されている。ここで、図19において、新たな画像150が撮影される場合を考える。画像150には、前述のID=1に加え、ID=2、ID=3とID=4の人物が撮影されているものとする。推定部1300は、画像150に対するフォーカス制御を出力する。照合部1500は、各人に対して上記のIDを割り当てる。画像150aのようにID=1の人物にフォーカス制御した場合、最も大きい正の報酬を与える。逆に、画像150bのように初出の人物ID=4にフォーカス制御した場合、負の報酬を使って学習する。
次に、図15に基づいて撮影装置が実行する処理の流れを示すフローチャートに従って説明する。S1010からS1020までは、実施形態1と同様であるため、概略のみ説明する。S1010では、検知部1100が、撮影開始操作を検知する。撮影装置がユーザの撮影開始操作を検知し、S1020が開始される。S1020は図4(b)と同様である。S1020では、S1021では取得部1200が被写体を含む画像を撮影し、その画像の画像を含む撮影時情報および撮影装置のユーザ設定情報を取得する。本実施形態では、状態としてフォーカス機能のフォーカス位置を取得する。フォーカス位置は、レンズの位置と、画像における2次元座標によって表現される。撮影開始時のフォーカス位置を第1のフォーカス位置とする。S1022では推定部1300が、学習モデルに基づいて、取得部1200で取得された撮影時情報とユーザ設定情報から、被写体を撮影する際の撮影機能の制御情報を推定する。S1023では、制御部1400が推定部1300で出力された撮影機能の制御情報に従い、撮影装置を制御する。ここでは、被写体にフォーカスを合わせる制御を行う。被写体が写っていない場合は、画像の中央をデフォルトのフォーカス位置をして設定する。S1024では検知部1100がユーザによる操作を検知する。本実施形態の検知部1100は、実施形態1と同様に、ユーザによる撮影動作を検知する。S1025では、検知部1100がユーザ操作から次の判断を行う。ユーザがシャッターボタンを半押しにしたままの場合は、撮影を継続するものとし、撮影時刻をt←t+1と加算して、S1021へと戻る。撮影実行命令すなわちシャッターボタンを深押しする操作を検知した場合あるいは撮像中断命令すなわちシャッターボタンから手を放す操作を検知した場合には、S15022へと進む。
再び図15を用いて説明をする。S15022では、照合部1500が、過去に取得された画像(被写体画像)における特定の被写体の特徴と、取得された画像の特徴とを照合する。すなわち、S1020が終了したときに最終フレームで得られた画像に対して、被写体の照合処理を行う。詳しい処理は後述する。画像上に存在する被写体が、過去に画像記憶部5100に保存された画像においてIDが割り振られた被写体と同一かどうかを調べる。
S15030では、学習部2000が、取得部1200によって取得された画像から、被写体が検出された場合には正の報酬を、被写体が検出されなかった場合には負の報酬を、を決定することによって学習モデルのパラメータを更新する。すなわち、被写体の画像特徴と新たに撮影された画像の画像特徴とが照合した場合、前記制御情報に対して正の報酬を、被写体の画像特徴と新たに撮影された画像の画像特徴とが照合しない場合、負の報酬を決定することよって学習モデルを更新する。つまり、S15022で行われた照合処理の結果に従って、撮影装置の制御に関して学習を行う。
S15022とS15030について詳しく説明する。まず、事前に撮影された画像に、前記IDが割り当てられた被写体がM個写っていたとし、各被写体のインデックスをm=1・・・Mとする。被写体mに割り当てられたIDをIDmとする。ここで各被写体mの周辺領域に関するコントラストを計算し、その結果として次のBmの値を得る。
S15030における報酬/罰則を表すrmの値は、以下のようにして与えられる。
ここでgは、引数となる被写体の出現頻度によって決まる関数で、例えば下記のような式で設定される。
ここでパラメータaは学習対象から外すかどうかの閾値で、例えばa=0.05などと設定する。パラメータbはg(H)の値が1となるときの最小値で、例えばb=0.3などと設定する。ここでは一例を挙げたが、関数g(H)の形式はさまざまなものが考えられ、本発明はその定義によって限定されるものではない。このように式8で決定された報酬/罰則に従って、式(3)および式(4)に従って、学習モデルのパラメータを学習によって更新することで、撮影装置の制御動作が学習される。これにより、過去の撮影画像と照らし合わせて、高頻度で撮影される被写体に合焦した場合には報酬を与えた学習がなされることになる。逆に、高頻度で撮影される被写体がボケた画像が得られた場合には、罰則を与えた学習がなされることになる。そのため、撮影を何度も行うことにより、高頻度で撮影される被写体に対して合焦しやすい制御動作が獲得される。
実施形態1と同様にして、S15030は、撮影装置内部で行ってもよいし、撮影装置外部のPCやサーバなどで行ってもよい。また、本実施形態による学習処理を、実施形態1および実施形態2と組み合わせて行ってもよい。
なお、CNNのネットワーク構造は、撮影装置で共通であることを前提として説明したが、異なっていてもよい。例えば、中間層の数が異なっていてもよい。
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、データ通信用のネットワーク又は各種記憶媒体を介してシステム或いは装置に供給する。そして、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。また、そのプログラムをコンピュータ読み取り可能な記録媒体に記録して提供してもよい。