Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Human detection on machine learning (機械学習による人物検出) #22

Closed
tanacchi opened this issue Oct 8, 2017 · 24 comments
Closed
Assignees

Comments

@tanacchi
Copy link
Member

tanacchi commented Oct 8, 2017

本走行まで1ヶ月を切ってしまい、時間が許してくれるかは定かではありませんが、実現性としてはかなり期待できるものがあります。
ご検討ください。

ここでは厳密なメカニズムには触れずに、作業の流れだけ説明します。

作業内容

  1. 学習するための画像データを用意する
    画像データをとにかく集めなければなりません。
    具体的には

    • 正解画像(検出対象が含まれる画像)
    • 不正解画像(検出対象が含まれない画像)

    を用意する必要があります。
    また正解画像に関しては以下のことに留意する必要があります。

    • 場所(背景)を何回か変えること
    • 被写体となる人物を何回か変えること
    • 万一のため、雨天での撮影も行うこと

    不正解画像については特に指定はありませんが、ダミー画像(服装を変えるなど)を使用をするとより高い精度を期待できます。
    また、ある程度の精度を出すには正解画像:7000枚、不正解画像:3000枚を用意する必要があります。

  2. ラベル付け
    学習させる上で、各画像において検出対象が存在するのか、あるのならどこにあるのかを先に登録しておく必要があります。
    検出対象の位置は座標で指定してやる必要があります。非常に手間の掛かりそうな作業ですが、ここに関しては手作業です。
    しかし、範囲選択するだけで座標を指定できて、しかも分類器生成に適した形式で保存してくれる
    みたいなツールが存在しますので後ほど紹介します。

  3. 分類器の生成
    上の作業で5〜6時間ぶっ続けで働いて果てそうになったところで次に分類器の生成に移ります。2の工程がうまくいってたら、

info.dat


static/img/1004.jpg 1 334 58 485 567
static/img/1005.jpg 1 235 173 657 574
static/img/1006.jpg 2 318 38 103 128 179 49 136 152
static/img/1008.jpg 1 270 81 271 365
static/img/1009.jpg 1 816 41 212 235


bg.txt


static/img/10004.jpg
static/img/10005.jpg
static/img/10007.jpg
static/img/10008.jpg
static/img/10009.jpg


↑のように正解画像と検出対象の位置のリスト(info.dat)と、不正解画像のリスト(bg.txt)ができていると思います。ここから分類器を .xml形式で生成していくという感じになります。此処から先は下のサイトで確認してください。
一番参考になったサイト

ラベル付けに使えるツールの紹介

TrainingAssistant
shkhさんという筑波のお方が個人的に作られたみたいです。 手元端末で動作確認済みです。
README.mdを見ればだいたい使い方はわかりますが、検出対象を範囲指定したあと、
枠外をクリックして赤枠になったことを確認してNEXTに進むよう注意してください。そうしないと不正解画像として登録されてしまうみたいです。


そういえば人物探索したあとの挙動についても考えなきゃだけど
そのへんは5号機リポジトリissueで、ということで

@tanacchi
Copy link
Member Author

tanacchi commented Oct 9, 2017

かかる時間の目安としては

  1. 素材集め:2時間〜2日
  2. ラベル付け:(10000枚を一人で仕分けした場合)10時間
  3. 分類器生成:以下の条件で丸2日
    • 対象画像
    • Core 2 duo (3.06GHz)
    • メモリ 16GB
    • プロセスの優先度 -20

とりかかるなら早いに越したことないです。

@tanacchi
Copy link
Member Author

tanacchi commented Oct 9, 2017

cascade.xml の生成まで成功しました。よく出来てますわ流石つくb(ry

@tanacchi
Copy link
Member Author

tanacchi commented Oct 9, 2017

試してみて気づいたことメモ

  • スマホで撮るときは、撮影者側から見てカメラが右に来るように、横向きにする(縦長だとccwに90度回転しちゃう)
  • とった写真を一旦GoogleDriveにアップして、PCに移す
  • アップするときは40枚ずつを目安に(一気にするとアプリが昇天する)
  • 拡張子が.JPGだと読み込めないが、.jpgに名前を変えるだけでちゃんと動く
  • 枠の外を一回クリックすることを徹底すること(よく忘れる)
  • 5枚め過ぎたあたりから鬼のように重たい
  • 400枚撮って、Drive にアップするだけでスマホの充電が30%くらいなくなる
  • 分担してやろうにも画像名がかぶると死しか見えない->ユニークな名前に変更するシェルスクリプトを書いたので解決した。
  • 学習に4日かかる計算で犠牲になってくれるPCちゃんがいる

@tanacchi
Copy link
Member Author

tanacchi commented Oct 9, 2017

screenshot from 2017-10-09 19-27-32
正解画像189枚、不正解画像6枚で作ったsascade分類器で
ティッシュ箱(scottie)を検出するテストをしてみました。
ガバガバ過ぎて草生えるんじゃぁ^〜
学習材料が鬼のように少なく、学習時間も丸1日かかる予定がものの30秒で終わってしまったので結果はお察しでした。
しかし時間をかければ人物探索もいけるのでは?

@tanacchi tanacchi self-assigned this Oct 9, 2017
@tanacchi
Copy link
Member Author

tanacchi commented Oct 9, 2017

https://drive.google.com/open?id=0B3Lz4dIcgscxeUxPSHJIODdMLVk
CIR-KIT のGoogleDriveに画像をストックするのが厳しそうだったので、私のGoogleDrive内のフォルダを共有する形でいきたいと思います。
PositiveImagesフォルダに正解画像を、NegativeImages不正解画像を保存していってください。
スマホアプリの方のGoogleDriveから保存するとスムーズです。

@tanacchi
Copy link
Member Author

tanacchi commented Oct 9, 2017

↑人物探索用のデータということで、緑のズボンを被って(?)オレンジのゼッケン着て帽子もかぶった状態で、かつ屋外で撮影します

@yasu80
Copy link
Member

yasu80 commented Oct 9, 2017

GPUつきのPCで遊んでるやつがいるんですが要ります?
某所(私の勤め先)で走らせることができます

@tanacchi
Copy link
Member Author

その方が差し支え無ければ、是非お願いしたいです

@forno
Copy link
Contributor

forno commented Oct 10, 2017

機械学習で画像検出するなら、
なんの検出器ができたのかのチェックを初めにするといいですよ。

トレーニングデータで検出評価するのはご法度ですが、
なんの検出器になったのか確認するには有用です。

もし、トレーニングデータで検出できないなら
(データ数が足りないという根本的な問題を除けば)
目標のもの以外の検出器になっている場合があります。

乱数を変えて再度生成してみたら、うまくいく場合もあるので
特にNNを利用している場合は何個もモデル生成してみてください。
(データ数が足りないという根本的な問題を除けば)

@yasu80
Copy link
Member

yasu80 commented Oct 10, 2017

@marubashi11
えーっと, NegativeImageのほうに正解画像入ってませんか?

@tanacchi
Copy link
Member Author

@forno レスポンスありがとうございます
参考にさせていただきます

@yasu80
Copy link
Member

yasu80 commented Oct 10, 2017

@tanacchi
わかりました.

@tanacchi
Copy link
Member Author

@yasu80 レスポンスありがとうございます。info.dat も bg.txt も内容含め正常に生成されてたのでおそらく問題ないと思われます

@tanacchi
Copy link
Member Author

画像サイズをカメラからのデータに合わせてリサイズしてみたんですがどうでしょう。
100154
HAAR-LIKE特徴分類器は明暗差を元に特徴量を出すから致命的ではないかもしれませんが
この画質は流石にまずいですかね。。。
一応パラメータをいろいろいじってみたのですが、だいたいこんな感じになります。

@tanacchi
Copy link
Member Author

ぼかしフィルターなんかも試してみますん

@tanacchi
Copy link
Member Author

ちょっとぼかしを入れてみました。
100001
つぶつぶが目立たなくなってかつ境界もはっきりしているのでこのくらいが妥当かなと思います。
リサイズしてぼかしをかけるだけで容量が100分の1くらいになりました。

@tanacchi
Copy link
Member Author

100分の1は嘘です。10分の1です。

@tanacchi
Copy link
Member Author

HaarLike特徴分類器は白黒画像をもとに識別するので、オレンジ色検出と併用するとより確実と思われる。

@yasu80
Copy link
Member

yasu80 commented Oct 11, 2017

すみません, 使っているツールについてちょっと誤解していました

Haar-Cascade Classifier の挙動について

この分類器は特定の形状(故に白黒)の特徴量を割り出すことで入力画像について分類器に当てはまる形状があるかどうかを割り出します. 故に, 対象物体のポジションは一定でなくてはならないので, 撮影者のアングルをある程度制限する必要があります.

で, どうするかというと 正面付近のみの検出器, 横向きの, 後ろ向きのっていう具合に一個づつ作っていく必要があるような気がします

@tanacchi
Copy link
Member Author

時間が(天気が)許してくれなかったということで計画中断とします。
今回は西田研究室のデータを使わせていただくことになりましたが、精度次第では来年に再始動させるつもりです。今まで取ってきたデータは保持しておきます。
See you ~~.

@yasu80
Copy link
Member

yasu80 commented Oct 24, 2017

#25

@yasu80
Copy link
Member

yasu80 commented Oct 27, 2017

No Nishida Data available dude...
Then Reopen From Workstation (NO JP sry)

@yasu80 yasu80 reopened this Oct 27, 2017
@yasu80
Copy link
Member

yasu80 commented Oct 27, 2017

Need Image on GoogleDrive plz

@tanacchi
Copy link
Member Author

tanacchi commented Mar 4, 2019

導入は当分見送りです
閉じます

@tanacchi tanacchi closed this as completed Mar 4, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants