36313
ターゲットを豚とします。豚と豚‌​以外の識別（２クラス分類）をしたいので、それ以外にデータ‌​として様々なものを用意して行います。この‌​とき豚と豚以外のデータ数の比率は1:1と‌​するでよいのでしょうか。あと豚以外として‌​選定するデータとしてはどういった指標で選‌​択するべきなのでしょうか。
CC BY-SA 3.0
2017-07-13T03:38:08.803
36308
2017-07-20T03:20:55.830
2017-07-20T03:20:55.830
19110
24331
question
python 深層学習
CNNによる動物の顔認識について
```

    この‌​とき豚と豚以外のデータ数の比率は1:1
    
```

「とりあえずまずは」1:1で良いかと思います。  
この辺はファインチューニングが必要で、結果に即した検証結果がまずいようならばハイパーパラメータだけでなく学習データも変更していく等の対策が必要ですが、恐らく比率はそこまで影響しないと思います。

```

    あと豚以外として‌​選定するデータとしてはどういった指標で選‌​択するべきなのでしょうか。
    
```

実運用に則して異なります。  
実運用上あらゆる画像が来ることを想定しているのであるならば、Google画像検索API等を使用して広くランダムなデータを用意すべきです。  
恣意的にデータを選択してしまうと「過学習」が起こり、学習データ以外での精度がグッと落ちてしまいます。  
(もっとも2クラス分類レベルならばある程度の精度は保たれそうですが。)

しかしながら実運用上入力される画像になんらかの仕様等があるならば、それに則したデータを学習させるべきで、必要に応じて「偏りのある学習」をさせるべきです。
CC BY-SA 3.0
2017-07-13T04:15:16.767
36310
2017-07-13T04:15:16.767
19716
36308
answer
豚と豚以外のデータの比率を1:1にすべきかどうかですが，データ全体の中ではそうすべきではありません．  
極端な例として，用意した豚の画像は500枚ですが，この世に存在する豚以外の物体の種類は明らかに500種類より多くあります．なので1:1で豚以外の物体を集めると必ずそこには含まれない物体が存在します．NNにまったく汎化性能が無いと仮定すると，含まれない物体は豚かどうか判別が不可能ということになります．  
なので集める豚以外のデータはできるだけ量も種類も多いほうが良いでしょう．

一方で，一般的なNNの学習だと学習時にミニバッチを作ると思うのですが，そのミニバッチにおける比率は豚と豚以外とで1:1にするべきです．  
これは，もしミニバッチの中に豚がほんの僅かにしか含まれないと，NNが全てのデータの内容を無視して「豚ではない」と出力してもlossが小さくなってしまうからです（逆も然りで，バッチの中のほとんどのデータが豚であったら，データを無視して全て「豚である」とするNNのlossは小さくなってしまいます）．実際は少しは学習するでしょうが，データの偏りによって出力の様子が変わることは明らかです．  
問題設定によればこうした性質が好ましいこともあるでしょうが，今回のrykamiさんのやりたいことを推測すると好ましくないでしょう．  
豚500枚，豚以外500枚より多いデータセットでミニバッチを豚と豚以外1:1にすると豚以外の全てのデータを一巡すると同じ豚の画像を複数回学習することになるでしょうが，豚のデータが少ない以上，それはしょうがありません．

豚以外として選定するデータとしては，先程も述べた通りあらゆる豚以外の物体が望ましいと思いますが，とはいえ，何かしらの一般的な指標があったほうが良いでしょう．  
まず，判別したい画像の中に人工画像は含まれるでしょうか？
例えばCGや白色ノイズのような画像です．人工画像も豚の顔と判別したいならそうした人工画像を合成して負例として加える必要があるでしょう．しかしそうではないなら，自然画像（風景や現実に存在する物体を写した画像）だけで十分でしょう．  
自然画像の中でも人工物の画像はどうでしょうか？ 自動車やステイプラーなどは豚の顔と判別したいでしょうか？ それならば加える必要があるでしょう．  
おそらく他の動物の顔とは区別したいでしょうから犬や猫やラクダなんかは加える必要があるでしょう．  
そう考えると猪はどうでしょうか？ 豚の顔と似た物体は豚の顔と混同される可能性が高いでしょう．判別したいなら負例として加えましょう．  
猪のように豚の顔ではないけれど豚の顔とよく似ているものは豚の顔にのみ現れる特徴を学習させるためにミニバッチの負例の中で比率を多くするのは良さそうです．猪でなくても他の動物の顔の画像を負例としてとりあえず多く集めるのはアリだと思います．  
とは言え，正例である豚の画像についても，500枚しかないということですが，多いにこしたことはないです．少なくともData
Augmentationはやりましょう（画像の左右を反転させたりする等）．どうしても集められないなら豚の顔を3DCGなどで合成して水増しするなども考えられるでしょう．
CC BY-SA 3.0
2017-07-13T04:49:28.897
36313
2017-07-13T04:49:28.897
4548
36308
answer