機械学習のデータの集め方

データを集める問題については、最近はwebで記事を書かれているのが増えてきています。
検索して、調べていって、学びとっていきたいところです。

参考になりそうな記事のリンク集です。

- [機械学習で用いる顔画像データセットの一作り方（１：WebAPIサービスを用いて候補画像取得）](http://qiita.com/ligerbolt/items/aeaa88980030fba940b6)


- [chainerによるディープラーニングでAV女優の類似画像検索サービスをつくったノウハウを公開する](http://qiita.com/xolmon/items/0b82f4861cf93fd28e33)

- [機械学習のデータセット画像枚数を増やす方法](http://qiita.com/bohemian916/items/9630661cd5292240f8c7)

- [ディープラーニングで顔写真から巨乳かどうかを判別してみる (うまくいったか微妙)](http://qiita.com/summer4an/items/db0124eee8103c1d3b85)

- [顔画像の特徴点抽出で使えそうな学習データセット２](http://qiita.com/tkymx/items/95821398802fcebd6f2c)

- [顔画像の特徴点抽出で使えそうな学習データセット(随時更新)](http://qiita.com/tkymx/items/3479867063ffd142e33e)
    - 顔画像の特徴点抽出の最初の学習には、このような手作業での特徴点のアノテーションが重要です。
    - しかし、いったん顔画像の特徴点の導出の精度が出る手法が構築されたら、それらの手法を活用することです。
    - 現在では, dlibなどに特徴点(kandmark)の導出ライブラリの性能が高くなっているので、たいがいの場合、そのライブラリで、手作業を置き換えられるようになってきています。

- [ねこと画像処理 part 1 – 素材集め](http://rest-term.com/archives/3111/)

- [Raspberry PiにOpenCVを入れて、顔検出した結果の画像を簡単に集める方法 with Python](http://qiita.com/mix_dvd/items/7ec3661fe52b43dfcfca)



- Ryan Mitchell　著、黒川 利明　訳、嶋田 健志　技術監修 [「PythonによるWebスクレイピング」](http://www.oreilly.co.jp/books/9784873117614/)

- Toby Segaran　著、當山 仁健、鴨澤 眞夫　訳[「集合知プログラミング」](http://www.oreilly.co.jp/books/9784873113647/)

- Interface 2016年7月号[「一番たいへんな学習データベースの作り方からラズパイ1・2・3認識テストまで
ターゲット魚「ナベカ」の学習と認識」](http://www.kumikomi.net/interface/contents/201607.php)


## **手入力**
伝え聞くところによると、機械学習のためのデータは、手作業で入力データを作成していることが多いと聞きます。
また、目的がはっきりしており、その作業の投資の結果を回収する見通しがある場合には、多数の人を雇って
入力データを手作業で継続的に追加して改良を重ねていると聞きます。


## **ネガティブサンプルの重要性**
歩行者検出の分野では、歩行者を含まない道路や町並みの画像がとても重要になります。
車載カメラの場合には、車両から見える画角でのデータであることが重要です。
歩行者検出をBoostingで学習させる場合には、人を画像に含まない大量の画像が必要です。
Cascade型の識別器では、後段になればなるほど、紛らわしい画像の比率が高まってきます。
そのようなときに、人画像を見つけ出したのを、negativeとして使ってしまうと、検出器の性能が著しく低下します。
Cascade型の識別器では、後段になればなるほど、学習した結果が、学習させたデータセット（positive画像、negative画像ともに）に依存性が強まったものになりがちです。(追記：今どきBoostingを使う人は少ないか。ネガティブサンプルが重要なことは、変わりない。)


　例えば、犬の顔の検出器を作ろうとする場合、既存の検出器で検出できる分だけの犬の顔を集めても、検出器の性能に役立つ画像になるかどうかは確かではありません。柴犬とブルドッグでは、顔の形状が違いすぎます。柴犬の顔だけを集めてもブルドッグの顔を検出できるようになるかは疑わしいと考えます。ある顔向きで検出できたとして、別の顔向きで検出できるとは限りません。ですから、既存の検出器で検出できた画像を用いて、検出器の性能を向上させようとするのは危険です。犬の顔を検出できたシーンの次の時刻の追跡結果を用いるなどの方法で、既存検出器で検出できない画像を用いることができるようにするなどの工夫をすべきです。（このような状況が深層学習ではどうなのかは、私は知りたいところです。）
　深層学習では、横顔を元にして正面顔のデータベースと比較して人物の認証をできると主張されています。

[真横を向いた顔でも、サングラスやマスクでも高い照合率
パナソニック、ディープラーニングで世界最高水準の顔照合を実現](http://ascii.jp/elem/000/001/480/1480762/)

 多数の種類のオブジェクトを動画から検出するには[YOLO](https://pjreddie.com/darknet/yolo/)を使うのもよさそうだ。誤検出があっても人力で選びなおす前提ならば、検出速度が高いほうが便利だ。

## **少ない画像で学習できる検出器**
 dlibにあるHOG+SVMの検出器は、とても少ない画像のpositiveデータでobjectの検出器ができます。Haar Casecadeの検出器の場合とはとても違っているのが驚きです。

[dlibで機械学習して物体検出する](https://qiita.com/atotto/items/ef34c046c2222adf1679)

## **使える既存検出器の利用**
　ハードウェアの開発のために学習データを集めるときには、ソフトウェエア版の検出器を使ってデータを集めるというのもありです。



参考：
[機械学習のデータセットの重要性](http://qiita.com/nonbiri15/items/b29fe079d359d531bf85)


CIFAR-10, CIFAR-100はラベル付されたサイズが32x32のカラー画像8000万枚のデータセットです。
[[Python]CIFAR-10, CIFAR-100のデータを読み込む方法](http://qiita.com/supersaiakujin/items/5e9d2b2850e256f99982)
#### 追記：
[Model Zoo](https://github.com/opencv/open_model_zoo) にさまざまな学習済みモデルがあります。それを使って検出器を作れば、その学習済みの特性の範囲で、画像がサンプリングできて、アノテーションを自動生成することができます。

- model zooにある既存の検出器を使って、画像に対するアノテーションファイルを自動生成できるようにする。
- その検出器のしきい値を緩めに設定して、元々の学習の範囲から少しだけはみ出した画像群も収集する。
- 収集したデータから、自分の作りたい検出器の検出対象になるべきものをピックアップして、自分のルールでアノテーションをつけていきます。
- 自動生成したアノテーションデータ、自分のルールで拡張した学習範囲のデータとの両方を用いて、学習プログラムを動作させる。
- 学習した結果を利用して、画像のサンプリングと自動アノテーションを繰り返す。
- 再度学習を行う。
このようにして、データを集めていくと、自分の作りたい検出器を作るための雛形の学習データを集めていくことができます。




###**人(歩行者)関係**
- Caltech Pedestrian Detection Benchmark
https://www.vision.caltech.edu/Image_Datasets/CaltechPedestrians/


- Robust Multi-Person Tracking from Mobile Platforms
https://data.vision.ee.ethz.ch/cvl/aess/dataset/


- Daimler Pedestrian Segmentation Benchmark Dataset
http://www.gavrila.net/Datasets/Daimler_Pedestrian_Benchmark_D/daimler_pedestrian_benchmark_d.html

segmentationのしてある歩行者のデータベースです。non-commercial の目的においてだけ利用できます。歩行者の学習・評価に有益です。



###**顔関係**

[Face Database](http://docs.opencv.org/3.1.0/da/d60/tutorial_face_main.html)


[FDDB: Face Detection Data Set and Benchmark](http://vis-www.cs.umass.edu/fddb/)

https://github.com/StephenMilborrow/muct#the-muct-face-database

nagetive dataset として
[http://cocodataset.org/#home](http://cocodataset.org/#home)


link集
[Computer Vision Datasets](http://clickdamage.com/sourcecode/cv_datasets.php)

[CVonline: Image Databases](http://homepages.inf.ed.ac.uk/rbf/CVonline/Imagedbase.htm)

[Yet Another Computer Vision Index To Datasets (YACVID)](http://riemenschneider.hayko.at/vision/dataset/)


[60 Facial Recognition Databases](https://www.kairos.com/blog/60-facial-recognition-databases)


### 論文の中で利用している学習データを調べてみよう。
論文の中では、その実装で学習しているデータの由来がたいがい書いてある。だから、そういったのを読み進めていくと、データにたどり着く。


---
### 追記：

顔検出や人検出の分野では、それなりに精度の出るオープンソースの実装が存在している。
だから、自分の目的のために学習データセット、検出器を作るために、それを利用しない手はない。自分の目的に近いデータの比率を学習データを広げていけば、自分の目的をカバーする検出器に近づく可能性がたかい。

SlideShare [SSII2018TS: 大規模深層学習 ](https://www.slideshare.net/SSII_Slides/ss-101275110)

[機械学習データの集め方２](https://qiita.com/nonbiri15/items/23448516c4e24e8ded8b)

[機械学習のためのデータを収集する各段階の考え方](https://qiita.com/nonbiri15/items/df6b4df6a977636626c4)
[出現頻度のまま学習データの比率にするのは得策ではない。](https://qiita.com/nonbiri15/items/49bdd34c01b084d7cfac)
[機械学習のデータセットはどう失われるか](https://qiita.com/nonbiri15/items/043118f6f55fe70c1baf)
[ずぼらな人間が実験データを管理する方法](https://qiita.com/nonbiri15/items/80ad75a71b46a30cc9f6)