機械学習のデータセットの重要性

機械学習のデータセットの重要性についての私見を以下に述べます。

（[「じゃあ、他の手法と比べてみたときにどうなんだ？」](http://qiita.com/nonbiri15/items/f6ac396f5a7cbe96aa8a)に付記として書いていた内容に追記して独立の記事に書き換えたものです。）


　さまざまな機械学習の例題を見つけて実行すると、web上にある十分によく使われているデータセットを使うことになる。国内外の研究所や大学や一部の企業が公開したデータの作成者は、その分野の機械学習の専門家であり、学習や評価に足りるだけの力を尽くしたデータセットになっています。そのデータを用いて、web上に書かれたよいサンプルプログラムをそのまま実行してみると、とても簡単にそれなりの結果が得られるので、機械学習はとても簡単なことだと勘違いしてしまうことがあるかもしれません。しかし、実用水準の機械学習結果を作り上げるには、独自の学習データの収集が有効だということを知る価値があります。空港でパスポートの写真と顔照合する際の顔検出と、デジタルカメラやスマートフォンの顔検出では違います。車載分野の人検出と監視カメラの人検出でも違います。データの素性の違いというのは想像以上に大きいのです。手書き文字でも鉛筆の場合とボールペンの場合では、文字のかすれなど挙動が違ってきます。このように、自分が実現するべき対象のデータの癖を知ってみると、既存のデータと挙動が違うことが珍しくありません。ですから、データセットを自分の問題で自分が集めるのは並大抵でないけれども、成し遂げることの価値があることを知る必要があります。

### **データの特徴の違い**
#### 正面顔と横顔の学習の違い
 正面顔と横顔では検出器の学習として違いがあることを[「詳解OpenCV」](https://www.oreilly.co.jp/books/9784873114132/)の中にも書かれています。正面顔では学習範囲の中に顔以外の部分がほとんどないことに比べて、横顔では背景に顔以外のものが必ず写っているという違いがあることです。このようなデータの特徴の違いは、学習データの与え方によっては、不十分な学習になることを述べています。深層学習など学習手法の進化はありますが、このような問題に対する対策は、学習を行う人が注意深くデータを扱うことでしか対処できないと私は考えています。

#### 声優の素の声とアニメの声の違いの事例
 次の記事は、学習データとテストデータの違いによって、その結果がどのように違ってしまうのかを
述べている。声によって声優を識別する学習とテストを行っている。(1)：声優の素の声と声優のデータから、
アニメの声を元に声優を予測する。(2)：声優のアニメの声と声優のデータから、素の声を元に声優を予測する。その２通りを実施している。いずれも不十分な認識率になっていることを述べている。
[声優の声を分類してみた](http://qiita.com/1234224576/items/f785eef6eed68271be64)

### **用途にふさわしい学習データの分散を持つべきこと**
 学習データは、用途にふさわしい分散をもっていなければならない。その分散を持っているように学習データを収集しなければならない。クラス間分散やクラス内分散が用途にふさわしいものであるのかを確認することです。機械学習はそのような学習データの収集を設計して実現することが大切なのです。プログラミングやアルゴリズムの考案よりも計測であるとさえ言えるでしょう。主成分分析で得られた固有画像eigen image　を[matplotlib](http://matplotlib.org/)を使って画像として表示してみましょう。そうすれば、どのような分散を持っているのかをみることができます。それらはデータの素性やデータの前処理の結果がどのようであるのかを理解するのにつながります。

### **用途にふさわしいデータ分布の平均を持つべきこと(追記)**
 また、学習データは用途にふさわしい学習データの平均を持つべきである。学習データの平均は、アルゴリズムのいろんな部分で影響する。固有顔Eigenfaces　に基づく顔照合の際にも、平均を差し引いてから、固有値としての固有顔が出てくる。だから、人種の偏りや年齢が極端に違う場合には、それまでに築いた顔照合のシステムが性能がでないということがおこりうる。
　ヨーロッパ人に偏ったデータベースで作られた年齢推定システムは、東洋人に対しては性能がでないことが得てしておこります。
このようなことは、機械学習だけではなく、自分が日頃みなれていない人たちの区別がつけにくい、年齢が推定しにくいという人自体にもおこることのようです。

### **学習データを過度に難しくしない**
 学習データには、どこまで難しいデータを入れて大丈夫かは、人が調整する必要があると思っています。顔検出の場合には、顔の部分の隠れが多すぎる画像を加えることは、顔検出の性能を悪くすることが経験的に知られています。学習アルゴリズムによっては、学習データの分布によって著しく特性の劣化を生じる場合もあります。学習データにどのようなものを含め、どのようなものを除外するかは、実用的な学習結果を得るためには欠かせない作業です。（ただ、あまりに経験的な作業なので、学習アルゴリズム自体で論文を書く人には、向かない話となります。）

### **条件の整えられたデータ取得とランダムなデータ取得**
データの取得と評価は、条件の整えられたデータとランダムなデータとを取得する必要があります。どちらか一方だとうまくいきません。
条件が整えられたデータを使わないと、アルゴリズムの骨格を作ることができません。

例として顔検出・顔照合を上げてみましょう。
顔の向き、照明の条件などがそろったデータベースが必要です。照明の条件がそろったデータベースであるから、照明の影響がどのように顔照合に影響するのかが評価可能になります。

このような条件がそろったデータベースは、他の目的の機械学習でも十分に必要性が高いことがあるでしょう。

条件が整えられたデータは、世の中の一般的なデータとはだいぶ異なります。証明写真の顔画像では、背景が平坦でものが写っていない写真となっています（http://www.keishicho.metro.tokyo.jp/menkyo/koshin/koshin/koshin02_2.html ）

 このようなデータが顔検出・顔照合の初期の研究開発段階から多数作られてきました。

次にランダムなデータ取得が必要です。

ある用途のための顔検出をしようとしたときに、開発中のシステムがどれだけの性能がでているのかを知るとき、人為を減らしたデータの取得が必要です。
最近は、このタイプのデータ・セットが増えてきています。
顔照合のデータベースである[Labeled Faces in the Wild Home](http://vis-www.cs.umass.edu/lfw/)はこのようなデータベースです。

条件が揃いすぎたデータでは、たくさんの評価漏れを生じる危険を含んでいます。


### **データセットは繰り返し改訂する必要がある**
「じゃあ、他の手法と比べてみたときにどうなんだ？」が適切な時期は、最初のあたりをつける方式を選ぶときに「始めやすい、この問題に適した手法を、文献ベースの知識や自分や他の人の経験に基づいて選ぶ段階」と、「データがそろってきていて、手法の比較をすることの意味がでてきた段階」と私は思っています。どんなに優れた手法であっても、手法を使う側の人間の理解がおっつかない手法では、適切な評価はできません。始めやすさ、初心者にとって理解のしやすさ、扱いやすさも、最初の手法には必要です。
「データがそろってきていて、手法の比較をすることの意味がでてきた段階」にするためには、以下の点に注意してください。

- recall rate の低さが目立つとき
   
　そのカテゴリのデータに対するrecall rateが低いときには、そのカテゴリに対する学習用のデータが不足していることを示しています。そのカテゴリの学習データの数自体が少ないこともあれば、学習データの分散が少ない場合もあります。
　それらを実データ、もしくは加工データを使って補ったときにrecall rateが向上する可能性が高いはずです。

- accuracy の低さが目立つとき
 
 そのカテゴリに分類されてしまう別カテゴリのデータが多いことを意味します。混同行列をみて、影響しているカテゴリを見極めます。そのカテゴリの学習データを増やしてみることも、accuracyの低いカテゴリの改善につながります。

- positiveとnegativeの境界が重要なアルゴリズムと、分布自体が重要なアルゴリズム

 アルゴリズムには、positiveとnegativeの境界が重要なアルゴリズムと、分布自体が重要なアルゴリズムとがあります。それによって、学習データの集め方が変わってきます。判別が容易なデータばかり追加すると、追加前よりも認識性能が劣化するアルゴリズムがあります。AdaBoostはそのようなアルゴリズムの１つです。他方、SVMにおいては境界を与えるデータ(サポートベクター)だけが重要であると言います。逆に、難易度が高すぎるデータを加えることも、認識率を低下させる要因になります。


### **データが少ないときには、データが少ないときにむくアルゴリズムを使おう。**
 Boostingはデータが多いときに向くアルゴリズムです。少ないデータの中ででたらめよりちょっとだけましな結果を得ることから始めるならば、[Naive　Bayesian](http://scikit-learn.org/stable/modules/naive_bayes.html) 　例題　[Probability calibration of classifiers](http://scikit-learn.org/stable/auto_examples/calibration/plot_calibration.html)などのアルゴリズムを使うことが考えられます。K近傍法などもでたらめよりちょっとだけましな結果を少ない学習データに対して行うならば、ちょっとだけましな結果が得られそうです。


### **データ数が少ないときには、アルゴリズム間の評価は制約が多い**
　
そのモデルが持つ自由度と学習データの数との組み合わせによっては、そのモデルの自由度に対して適切に値を決めきらないという状況に陥りやすくなります。これは[次元の呪い](https://ja.wikipedia.org/wiki/%E6%AC%A1%E5%85%83%E3%81%AE%E5%91%AA%E3%81%84)という言葉で知られています。



### **データ収集の手間を惜しまないこと**
 機械学習のデータセットの重要性 について組織の上部の人にわかってもらったら、手間を惜しまずデータを収集することです。
データを収集し、機械学習の最初の版を動かしだすと、問題が見えてきます。データを収集し、最初の版を動かし始めて、ようやく今後必要になることが見えてきます。データの実際を見ていない段階で立てた計画というのには、大きな漏れがあったりするものです。
　顔認証に力を入れている会社の場合、一度に多方向から顔を撮影する装置を研究部署にそろえていたりするものです。光の照射条件を変えて同時に撮影します。顔画像の光の照射条件の違いを分散に含んだデータセットをとるには、同一人物で同一の表情で、しかも多様な光照射での撮影が必要です。このようなデータから主成分分析を行えば、光の照射条件の違いによる固有顔の成分を取り出すことができます。
　そのようにして得られた光の照射条件の違いによる固有顔の成分は、人物の認証には役に立たないはずの成分です。ですから、その光の照射条件の違いによる固有顔の成分を求めるときの実験データが、利用目的が対象とする手段の分の広がりを持っている必要があります。100歳近い高齢者の顔は、70歳の顔とは明らかに違います。100歳近い人での顔認証の率が、通常市販されている製品で実現できるかは、検証する価値があるでしょう。


　固有顔の一例が[「実践コンピュータビジョン」](https://www.oreilly.co.jp/books/9784873116075/), [Programming Computer Vision with Python](http://shop.oreilly.com/product/0636920022923.do)に書かれています。そのなかでは、顔の位置を十分に正規化する前の正面顔での場合と、両目の位置を正規化してそろえた後の、いずれも同一の人物の固有顔(eigen face)のが記載されています。このような違いを見れば、同一人物で同一の表情で、しかも多様な光照射での撮影を行わない限り、光の照射の違いを強く反映する固有顔を得られないことが容易にご理解いただけると思います。このようなデータ収集の上にあって、光の照射の影響をに左右されにくい要素を抜き出せるようになるのです。(つまり、光の照射の成分を主成分分析で適切に含むようにしたいのなら、顔の位置を正規化している必要があることを述べています。また、光の照射による成分を適切に含めたいのであれば、人の顔の形状の分布も、実際の顔の多様性を反映するように広がりをもたせて撮影する必要があるといっていいでしょう。)


### **データ収集のコストを下げること**
 上で言っていることと矛盾するように聞こえるかもしれませんが、データ収集のコストを下げるための方策を同時に考えることです。データを集めなくては、既存の識別器が良好な学習になっているのかを確認することさえできません。

- 動画からの自動切り出し
- Webからの検出
- Kinectなどのdepth情報が得られるカメラの利用

[Using Kinect and other OpenNI compatible depth sensors](http://docs.opencv.org/2.4/doc/user_guide/ug_kinect.html)


### **間違ってラベル付けされたデータの除外**
 データセットを構築するとき、間違ってラベル付けしまうことがあります。そのようなデータは学習データにあると、学習結果の劣化につながります。そのため、間違ってラベル付けされてしまったデータがないか確認することです。
　このことは、学習データセットによっては、簡単な話ではありません。超音波診断の画像が、病状があるpositive画像か、病状がないnegative画像かは、通常の人には知りようがありません。正しくラベル付けされていない限り、機械学習は適切な結果にはなりません。
　学習結果を元に、認識率が低い学習データがあれば、そのデータのラベルが本当に正しいのかは、チェックする価値があったりします。　


### **学習データの分布によって、識別性能が変わることがある。**
　学習アルゴリズムによっては、データの境界によって識別性能が決まるものもありますが、データの境界ではなく、データの分布によって決まるものも多い。そのため、学習データにどのようなものを含めて、どのようなものを含めないか重要な学習のノウハウになります。
 学習済みの結果に基づいて学習データのスコアの分布をグラフにしてみましょう。スコアの低いデータにどのようなデータが多いのか見えるようにしましょう。学習が画像データに対するものである場合には、それらの画像をhtmlファイルで表示させることで、特徴をつかみやすくなります。どのようなデータを学習データに加えるのかが、学習の成否につながります。


### **学習データの意図しない偏り**
　学習データに意図しない偏りを生じていると出来上がる学習結果が間違ったものになることがあります。たとえば、肩から上の人の頭部を検出したいとします。そのときに、人を壁の前に立たせて、多数の人で学習させたとします。そのデータを使って検出器を作り上げると、周辺部分の壁検出器になっているということが起こりえます。学習結果に対して意図しない偏りを生じていないことを、十分なテストで実行してみてください。そうすれば、そのような学習データの偏りの可能性を見つけて、対策のとれた実験を立案・推進できるようになっていくはずです。

### **学習データの意図しない偏り(追記)**
　たとえば、頭部検出器を学習で作る場合、頭髪の色によって頭部検出の性能が違ってくる可能性がある。濃淡ベースの特徴量の場合、黒い頭髪が周辺よりも黒いという前提になる学習データが多く用いてしまうことが多そうです。そうすると、スキンヘッドや白髪の場合には、黒い頭髪ほどの検出率がでない可能性があります。
　そのようなことが、今あなたが取り組んでいる機械学習で生じていないか疑ってみることも、ときとして必要です。


### **他の手法を利用して、データ収集を楽にしよう。**
　たとえば、犬検出の学習データを集めたいと仮定しよう。その場合、固定カメラで動いている対象物を、背景差分などの手法で抽出できる。その対象物を、カメラの設置角などの情報をもとに、大きさを推定する。その大きさを元に、犬である可能性が高い画像を集めることができる。その画像から、犬の画像を選択することで、何もしないよりは楽をできる。
　他にも、kinectのような距離センサが利用できるので、距離情報を元にデータを選ぶということもできるだろう。最終成果物には使えない技術でも、技術の開発段階では、積極的に利用しよう。


### **CGデータの利用**
 画像系の機械学習の場合だと、正解データのラベリングに多大な量力を必要とします。このとき、問題の種類によっては、CGデータを使ってラベリングの済んだ正解データを作り上げることがあります[1]。
SYNTHIA Datasetはそのようなひとつです。

- [4. CG による学習サンプルの生成と MILBoost による学習の効率化](http://www.vision.cs.chubu.ac.jp/MPRG/F_group/f130_fujiyoshi2013.pdf)

- [人体シルエットの生成型追加学習による人検出の高精度化](http://157.110.46.70/04/pdf/PIA63.pdf)

- [Learning appearance in virtual scenarios for pedestrian detection](http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=5540218&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D5540218)


[[サーベイ論文] 統計的学習手法による人検出　5. 2 学習サンプルの収集](http://www.vision.cs.chubu.ac.jp/cvtutorial/PDF/HumanDetectionSurvey.pdf)

[SYNTHIA Dataset](http://synthia-dataset.net/)　

>The  SYNTHetic collection of Imagery and Annotations, is a dataset that has been generated with the purpose of aiding semantic segmentation and related scene understanding problems in the context of driving scenarios. SYNTHIA consists of a collection of photo-realistic frames rendered from a virtual city and comes with precise pixel-level semantic annotations for 13 classes: misc, sky, building, road, sidewalk, fence, vegetation, pole, car, sign, pedestrian, cyclist, lanemarking.



### **機械学習の経験者の知見をデータセットの構築に反映させること**
 どのようなデータを収集すべきかには、機械学習の分野の経験がいる。どのようなデータだと間違った学習をしてしまうかということを経験する価値はある。人検出を学習したつもりが、学習データを収集した撮影環境の背景を学習したなんてことにもなりかねない。無駄のないデータ取得計画を立てたいと思うかもしれないが、データを収集する、学習する、結果を評価する、どう改善すべきか考えるという繰り返しが必要だ。その中で得られた知見を元にデータを収集する部分を改善していくことです。


### **ネガティブサンプルの重要性**

　ネガティブサンプルをどう集めるか、ネガティブサンプルの品質をどう確保するのかも重要な問題です。
一例をあげれば、歩行者検出があります。自動車が走行中にみる可能性のある画像の中で歩行者以外のものを歩行者でないとして判定させるためには、街路樹を歩行者ではないとして学習させる必要があります。郵便ポストも歩行者ではありません。立て看板も歩行者ではありません。ガードレールの端っこも歩行者ではありません。横断歩道も、路面に書かれた表示も歩行者ではありません。建物の壁も歩行者ではありません。そういった歩行者でないものを全て誤検出しないような学習が重要です。
　このようなネガティブサンプルを十分に集めきること、それらを含めて学習しきることが、製品レベルの検出器を実現する上で必要になります。
[Mobileye （モービルアイ）](http://ascii.jp/elem/000/000/951/951267/)は
そのような学習を行って、単眼での歩行者検出をさまざまなクルマに提供しています。

 ネガティブサンプルはとても重要です。


### **cascade の識別器の場合の注意点**
Haar like cascade の識別器の場合だと、後段の強識別器になるほど、学習結果の汎化性が怪しくなりがちです。

ネガティブサンプルの中に混入したポジティブサンプルによって学習結果がおかしくなることが起こりえます。
そのために、本来十分に検出できるはずのものが検出できないという状況になりやすいのです。
ですから、後段の強識別器に使われたポジティブサンプルは、目視でチェックする価値があります。
そのようにすることで、ネガティブサンプルの中に混入したポジティブサンプルによって学習結果がおかしくなることを防ぐことができます。


### **テストデータは本当にテストデータとして十分か？**
・機械学習のテストデータは、学習に用いたデータを含まないようにすることが必須です。
・データを加工によって増やしている場合には、加工済みのデータを学習用とテスト用に分けてはいけません。同じ原画像を用いているものが、学習用とテスト用に含まれることになるので、実際以上によいテスト結果を与えてしまいます。
・有名人の顔画像を含むデータセットを利用すると、大統領の異なる正面顔画像が学習用、テスト用に含まれる危険があります。


### **利用目的を理解しよう**
実装する機能についての使われ方を理解することから始める必要があります。
その識別器が失敗したときの影響は何かによって、どのように実装すべきなのかを理解することです。
他に補助的な手法で改善できないのかを考えることです。
機械学習万能説にはたたないことです。

SlideShare [機械学習で泣かないためのコード設計](http://www.slideshare.net/takahirokubo7792/ss-65413290?utm_source=dlvr.it)



十分にデータを集めきることができていて、その学習データを外部に提供してアルゴリズムを開発してほしいのであれば、[Kaggle](https://www.kaggle.com/competitions)というサイトを利用する方法があります。賞金を設定しているのも、あればrecruiting competitionsになっているのもあります。

[賞金稼ぎから仕事探しまで、世界のデータサイエンティストが「Kaggle」に集まる理由](http://hrnabi.com/2015/08/26/9043/)

[できない英語を駆使してKaggleに挑戦してみた](http://www.slideshare.net/KeisukeTokuda/kaggle-39911398)



次の記事は2値分類の学習において、そもそも、そのどちらでもない画像が入ってきたときの問題を指摘している（いわば血液型の判定の入力にトマトジュースが入ってきたようなもの）。利用目的に応じて、どのようなシステムを構築するのか適切なのか、その直前の前処理をどうするのかを含めて、機械学習を含むシステムは構築されるべきなのでしょう。

[DeepLearningで上司を認識して画面を隠す](http://qiita.com/Hironsan/items/8ad9b11bcc0c618ec5e2)



### **付記：人にとっては学習できているか？**
画像の機械学習の場合、学習できそうかどうかの直感として、人にとって学習できているような内容かどうかという視点を用いることがある。
　例として、年齢推定や顔認証を考えてみよう。
自分とは異なる民族・人種では、その人の年齢の推定や、同じ人かどうかの判定が難しいと感じる。これは、集団によって、平均顔や顔の変動要素、主成分分析の成分が異なることに起因しているのではないかと思っている。研究や開発の労力が並大抵ではない顔の分野でさえそうである。その他の分野の機械学習は、データの数が不足しがちで、「ゴミが入ればゴミが出る」ということを忘れてはならない。


[注1]:ステレオ計測の分野でもCGが無視できない状況になってきている。ステレオ計測の分野の正解のある実測データのあるステレオ画像を用意することは簡単なことではない。そこで、3DのCGで正解のある状況で、ステレオ画像を生成して、それをベースにアルゴリズムを評価する状況になっているようです。


#### データをよく見よう
　データをよく見て観察することは、結果だけを見ていては気づかないことを知ることにつながります。
　次の記事は、そのような例です。

[DeepLearningだ！と意気込んだものの手書き数字認識の後に続かなくなった時に読むデータそのものの話](http://qiita.com/EnsekiTT/items/66ae1b00a0fefbd036d0)

[(17) cuda-convnetで自筆数字画像を自動認識](http://nnet.dogrow.net/?p=231)


Shinsai FaxOCR 手書き文字認識用データセット[テストデータ (MNIST IDX形式)](https://sites.google.com/site/faxocr2010/systemrequirements/kocr/mnist)


----
追記
dlibの顔器官点の検出は優秀だと感じています。
その結果を用いれば、顔画像の正規化などは、やりやすくなります。
dlibで実現されている以上の精度で新たに構築しようとするのでない限り、
そのようなツールの利用は有効だと感じています。
今までは、目位置の正解入力を多数作らなければならないという大変さのために
顔関係のアルゴリズムの開発が限られた場所でしかできなかったという状況でした。


---

### 論文を読もう。

論文の中では、その画像認識技術の良さを他と比較して主張するために、必ずデータベースで比較している。
学習する場合には、どのようなデータベースを用いて学習しているのかを記載しているはずだ。

公開データベースを用いている場合が大半なはずだ。
まれに、自分たちで取得したデータを使って、学習や評価をしている場合もあるが、
そのような場合でも、利用しているデータの素性を述べていたり、データを公開している場合も多い。

最新の論文であれば、その目的では、どのようなデータベースが最近の比較に使われいるデータベースなのかを知ることができる。

そういった用途で、論文を読むこともできる。

----
追記：

### 機械学習のデータセットを作成・利用時にしてはいけないこと

- 評価用のデータと学習用の画像が区別されていない。


　データの管理をきちんとしていないと、評価用の画像の画像を、学習画像として使ってしまっている可能性がある。
　学習用の画像をどこかからコピーして素性がわかりにくいものになってしまったあとで、その出典をたどるのは困難になってしまう。
　データを取得したら、早い段階で評価用と学習用を分けて管理しよう。
　早い段階で評価用・学習用と分けて宣言してからでなくては、チームの他のメンバーに使わせないことだ。

- 評価用のデータと学習用のデータを過度に似た画像にしすぎる。

動画フレームから静止画を切り出して、それをシャフルして評価用と学習用と分ける。しかし撮影環境が同じであるので、静止画を切り出す時間間隔が短すぎると、似た画像になりすぎている。そういう状況でだと、評価用画像と学習用画像との間の特性の差がなくなってしまう。そうすると、評価が過度に良い結果がでてしまう。

　ところが、実際の環境になったとたんに、変動が加わるので性能が出ないということが起きる。


　評価用の画像と学習用の画像が似すぎるという問題は、意図しない形で入ってくることがある。顔照合のシステムにおいては、顔照合のシステムを構築するため学習済みデータを作る際に、評価用の顔照合に含まれているのと極めて似た画像をいつの間にか使っているという心配である。
　たとえば、バラク・オバマ（元大統領）の顔画像などというのは、顔画像のデータベースの中で含められやすいので、異なるデータセットを学習用・評価用としても、どちらにもバラク・オバマが含まれてしまっているということは容易に起こりやすい。


---
追記
　サッカー場での人検出は、背景がグリーンであることが多いので、それに特化した学習をしてしまうと、背景がグリーンでない状況だと、検出率が下がることがありそうである。

 自前のデータの際には、データの妥当性のチェックを欠かせない。
　アノテーションの品質を改善しないと、学習の精度が上がらないこともある。

顔照合技術の精度が近年に格段に向上した理由の一つには、
大規模に顔照合のデータベースが構築され、しかもそのデータで顔と名前の対応付けの品質を確保されるようになってきたことがあると聞いたことがある。

[A Dataset With Over 100,000 Face Images of 530 People](http://vintage.winklerbros.net/facescrub.html)　　


#### いいデータセットは、個別のアルゴリズムの実装よりも長生きする。

顔検出・人検出のアルゴリズムと顔検出・人検出用のデータベースでは、データベースの方が長持ちする。

Viola Jonesの顔検出アルゴリズムは2001年に発表されている。そしてそれにヒントを受けたたくさんのcascade検出器が実装された。その後深層学習の進展によって、顔検出は大きくアルゴリズムが変わってきている。
　ソフトウェアのアルゴリズムが変わっただけではなく、顔検出のハードウェアの仕組みも大きく変わってきているらしい。最近では、深層学習の枠組みを加速するハードウェア実装が各種出てきているので、顔検出・人検出をするハードウェアも大きく変わっている。

　それでも、顔検出・人検出のデータセットの中には、Viola Jonesの論文よりも古くから存在するデータセットが存在します。

　よりよく作られたデータセットは、アルゴリズムよりも長い寿命で有用であり続けます。
　ですから、みなさんの分野での機械学習についてのデータセットを大事に育てることです。

　今実現している実装は、いずれ別の実装に置き換えなければならなくなると思っておいてください。
　深層学習の場合でも、ネットワークモデルの異なる実装に移行する必要性も出てくるでしょう。そのときに備えてデータセットを大切に育てておくことです。


### いいデータセットを作ることはいい問題設定

問題を解決するうえで一番重要なことは、どのように問題設定をするかという点である。
その問題設定を間違えると問題はいくらでも厄介なものになる。
上手な問題設定をすることは、問題解決するうえでの重要なポイントだ。
いいデータセットでは、今抱えている問題がどのような部分にあって、何をどうしたら解決に近づけるかを考えられたものになっている。

例：LFW

顔照合のためのデータベースを大規模化すること、撮影条件の異なる画像を含んだより実環境に近い撮影条件の画像で顔照合のデータベースを作ることを意図したものになっている。
例：VGGFace2
半横顔を含む多様な顔向きになっていて、しかもLFWよりも顔の数が増加している。手作業での画像のクリーニングがされている。


あなたの問題設定が妥当ならば、それにふさわしいデータセットを用意することだ。
よい問題提起をするためには、それにふさわしいデータセットを公開することだ。
企業の開発者であっても、よいデータセットの提供はできることがあります。

例：Kaggleに出題する。

https://www.kaggle.com/c/cvpr-2018-autonomous-driving

この出題のデータベースをみることで、現在の課題設定がどのようなものになっているかがわかります。

セグメンテーションベースのオブジェクトの認識が重要になっていること。
リアルタイムに処理できること。

初期の歩行者検出が、検出枠の矩形をベースとしていたものから、時代が変わっていることを示しています。

https://www.kaggle.com/c/mercari-price-suggestion-challenge
日本の企業からも出題されています。



例：データベースを公開する。

[Daimler Pedestrian Benchmark Data Sets](http://www.gavrila.net/Datasets/Daimler_Pedestrian_Benchmark_D/daimler_pedestrian_benchmark_d.html)


　



関連記事
[アノテーションについて調べてみる](https://qiita.com/nonbiri15/items/9a47c0568da351b197d7)
[アノテーションツール(正解入力ツール)が進化している。](https://qiita.com/nonbiri15/items/fdb1d2a54f8d670993bb)

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

[未検出データを追加すべきか、先送りすべきか。](https://qiita.com/nonbiri15/items/77cf58f580462afbb0b4)

[何が言い切れるかを明確にしてデータセットは作成しよう](https://qiita.com/nonbiri15/items/8b26c7994a49ad8257d3)


---
## 追記
- CGデータなしでは、十分な学習データをそろえきることができない。

## 一般物体検出のデータセットについて、データ拡張が重要
- [テクスチャ情報に意味のないデータセットを用いて、形状情報を重視するように学習させる](https://ai-scholar.tech/articles/others/cnn-global-ai-141)
- 生成系AIによるデータ拡張を一般物体検出の学習に加える話 [Generative augmentation with Kopikat: object detection accuracy boost on 5K images or less](https://www.kopikat.co/mscoco-experiment)
----
追記 2023
### スライド [Data-Centric AI - 関連する学術分野と実践例 ](https://speakerdeck.com/kzykmyzw/data-centric-ai-guan-lian-suruxue-shu-fen-ye-toshi-jian-li)
> "企業は、コードに焦点を当てるのではなく、信頼性があり、効率的、体系的にデータを改善できるエンジニアリング手段を開発することに焦点を当てるべきである。
つまり、企業はモデル中心のアプローチからデータ中心のアプローチへと移行する必要がある。"

上記の主旨でのスライドです。