SlideShare a Scribd company logo
はじめての人のためのDeepLearning
(画像認識編)
GMOインターネット
次世代システム研究室
中野唯一郎
2
目次:
1. 既存のモデルで画像識別器作成
2. クラウドでモデルを学習
3. DLを利用したプログラム作成
4. まとめ
3
そもそも
なぜDeepLearningで
画像認識を研究?
4
以前OpenCVでの画像認識をやってみたが
X 顔、車など物体毎に設定ファイルの変更が必要
X 車の種類など細かい認識が難しい
X 独自の物体認識器を作るのにも手間がかかる
こういうった辛さも、流行のDeepLearningなら解
決してくれるのでは?という思いから
5
研究内容:
X 顔、車など物体毎に設定ファイルの変更が必要
X 車の種類など細かい認識が難しい
→「1.既存のモデルで画像識別器作成」で解決策を
研究
X 独自の物体認識器を作るのにも手間がかかる
→「2.クラウドでモデルを学習」で解決策を研究
最後に上記研究で蓄えた知識の応用として
「 3.DLを利用したプログラム作成」で研究
6
自己紹介:中野唯一郎
・2015/5~ GMOインターネット株式会社入社
次世代システム研究室所属
・それまではSIer/コンサルでアパレル・官公庁の基
幹系システムを中心に12年間
・センター試験-数学で200点満点中78点(しかも
BASIC言語が50点)をとったほどの数学音痴
→今回の発表はそんなド素人がDeepLearningに触
れてみた内容の共有です。間違った内容はこっそ
り教えて下さい
7
目次:
1. 既存のモデルで画像識別器作成
2. クラウドでモデルを学習
3. DLを利用したプログラム作成
4. まとめ
8
いきなりDemo
9
簡単な手順で設定ファイル変更もなく、
詳細な識別ができる!
https://ja.wikipedia.org/wiki/%E3%83%89%E3%83%BC%E3%83%99%E3%83%AB%E3%83%9E%E3%83%B3
10
Demo作成までに以下の工程を実施
以降でそれぞれを解説する
1. 理論実装
2. 環境構築
3. ニューラルネットワーク、学習モデル用意
4. 画像識別プログラム作成
11
Demo作成までに必要な工程
1. 理論実装
2. 環境構築
3. ニューラルネットワーク、学習済モデル
4. 画像識別プログラム作成
12
1.理論実装
DeepLearning関連理論の実装は避けられない・・・
→フレームワークを使えば解決!
13
1.理論実装
代表的なDeepLearning フレームワーク
• Caffe(←今回使用)
- 現在のデファクトスタンダード
- コミュニティが盛んで学習済モデル(後述)も豊富
- 情報が豊富であり馴染みやすいため今回使用
• Chainer
- Jubatusでお馴染みのPFI社が作成
- 時系列等を扱えるRNN/LSTM対応
- ネットワーク設計のためのDSLが簡潔でわかりやすい
• Deeplearning4j
- 分散処理可能でHadoop上でも動作
14
Demo作成までに必要な工程
1. 理論実装
2. 環境構築
3. ニューラルネットワーク、学習済モデル
4. 画像識別プログラム作成
15
2.環境構築
Caffeは依存ライブラリが非常に多いため手動インストールは
辛い。。。
依存ライブラリ
CUDA : GPUを使用するためのライブラリ。NVIDEIA提供。
BLAS: ベクトル/行列演算のための線形代数操作ライブラリ
Boost: C++ユーティリティライブラリ
Protobuf: データシリアライズライブラリ。Google Protocol Buffer
LevelDB: 学習・評価データ格納用DB
Snappy: データ圧縮・解凍ライブラリ
HDF5: 大量数値データ保存用ライブラリ
OpenCV: Computer Vision用ライブラリ
and more...
16
2.環境構築
with CUDA: GPU環境向け
without CUDA: CPU環境向け
https://github.com/aydindemircioglu/vagrantcaffe
17
2.環境構築
> git clone https://github.com/aydindemircioglu/vagrantcaffe.git
> cd ./vagrantcaffe/without.CUDA
> vagrant up
> vagrant ssh
> cd /usr/local/caffe
18
2.環境構築
後々エラーが起きるので、Caffeコードを一部修正
/usr/local/caffe/python/caffe/io.py:253行目
if ms != self.inputs[in_][1:]:
- raise ValueError('Mean shape incompatible with input shape.')
+ # raise ValueError('Mean shape incompatible with input shape.')
+ in_shape = self.inputs[in_][1:]
+ m_min, m_max = mean.min(), mean.max()
+ normal_mean = (mean - m_min) / (m_max - m_min)
+ mean = resize_image(normal_mean.transpose((1,2,0)),in_shape[1:]).transpose((2,0,1)) * (m_max -
m_min) + m_min
19
2.環境構築
書籍「Caffeをはじめよう」(石橋崇司著 Oreilly刊行)より抜粋
というのもあり、CaffeのPythonモジュール修正は度々発生します
“開発の中心組織であるBVLCのメンバーによると、
caffe.Netのみが公式サポートされており、それ
以外のモジュールは例として挙げているだけに過
ぎないとしています”
20
Demo作成までに必要な工程
1. 理論実装
2. 環境構築
3. ニューラルネットワーク/学習済モデル
4. 画像識別プログラム作成
21
3.ニューラルネットワーク、学習済モデル用意
Deep Learningを用いた画像認識では
1. ニューラルネットワークと呼ばれるモデルの定義
2. それを元に学習させた学習済モデル
が動作に必要
→Caffeでは「Model Zoo」としてネット上に
公開!
(※非商用ですけど、、、)
22
3.ニューラルネットワーク、学習モデル用意
> cd /usr/local/caffe/examples/imagenet
> wget https://raw.githubusercontent.com/sguada/caffe-
public/master/models/get_caffe_reference_imagenet_model.sh
> chmod u+x get_caffe_reference_imagenet_model.sh
> ./get_caffe_reference_imagenet_model.sh
> cd /usr/local/caffe/data/ilsvrc12
> ./get_ilsvrc_aux.sh
23
3.ニューラルネットワーク、学習済モデル用意
ダウンロードファイルで重要なもの
bvlc_reference_caffenet.caffemodel
・学習済モデル。1ファイルのみで対象カテゴリ全てに対応
deploy.prototxt
・ネットワーク定義ファイル
ilsvrc_2012_mean.npy
・ImageNetデータセット画像の平均値
・入力画像からこの値を減算し、正規化を行うため必要
synset.txt
・カテゴリと物体名の紐付け表(ex. nXXXX warplane)
・NNからの出力は無意味なNo.のため、これを人間のわかる名前に紐
付けるために必要
24
Demo作成までに必要な工程
1. 理論実装
2. 環境構築
3. ニューラルネットワーク、学習済モデル
4. 画像識別プログラム作成
25
4.識別プログラム作成
サンプルに格納されたプログラムをそのまま利用
/usr/local/caffe/python/caffe/classify.py(以下抜粋)
# cpu/gpu切り替え
if args.gpu:
caffe.set_mode_gpu()
print("GPU mode")
else:
caffe.set_mode_cpu()
print("CPU mode")
# モデルから対応カテゴリを予測し、npy形式で保存する
predictions = classifier.predict(inputs, not args.center_only)
np.save(args.output_file, predictions)
26
4.識別プログラム作成
npy形式をsynset.txtと照合して該当カテゴリを表示する
# synset_words.txtロード
categories = numpy.loadtxt(sys.argv[1], str, delimiter="t")
# npy形式データロード
scores = numpy.load(sys.argv[2])
# score順にSortし、top_k数分だけカテゴリ表示する
top_k = 3
prediction = zip(scores[0].tolist(), categories)
prediction.sort(cmp=lambda x, y: cmp(x[0], y[0]), reverse=True)
for rank, (score, name) in enumerate(prediction[:top_k], start=1):
print('#%d | %s | %4.1f%%' % (rank, name, score * 100))
http://techblog.yahoo.co.jp/programming/caffe-intro/
27
4.識別プログラム作成
コマンド実行
> python /usr/local/caffe/python/classify.py --raw_scale 255 /hoge.jpg
/usr/local/caffe/result.npy 1>/dev/null 2>/dev/null ;
python /usr/local/caffe/show_result.py
/usr/local/caffe/data/ilsvrc12/synset_words.txt /usr/local/caffe/result.npy"
28
以上の手順のみで
詳細な物体認識まで可能なことを検証
29
目次:
1. 既存のモデルで画像識別器作成
2. クラウドでモデルを学習
3. DLを利用したプログラム作成
4. まとめ
30
新しいオブジェクトを学習させるためには・・・
大量の画像準備(1カテゴリに最低100枚以上)
画像リサイズ、LevelDB/LMDBへの登録
GPU搭載マシンの準備(CPUでもいいけど遅い)
各種パラメータの調整
etc....
OpenCVと同じくらいの手間。。。
もっと手軽にできないのか?
31
https://www.labell.io/ja/
32
Labellioとは?
alpaca社が開発した画像認識を簡単に可能にするWeb
プラットフォーム
サーバ、ネットワークアキテクチャ等はチューニング
済みのものを使用
画像収集もBing/Flickerから取得可能
学習したモデルをCaffeの学習モデルとしてダウンロー
ド可能
だれもが簡単に利用できて、それによって「新しい用
途」を生み出してほしいというコンセプト
33
Labellioを使ったら
識別器作成も簡単そう!
34
じゃあやってみよう!
35
似ている芸能人を判別してみ
よう
1. でんぱ組.inc 最上もが
2. きゃりーぱみゅぱみゅ削除
36
Labellio使用手順
1. モデル名入力
37
Labellio使用手順
2. Bingで検索するワードを登録する
38
これだけ
(数分で完了)
39
Demo
40
Labellio結果サンプル
お手軽画像認識させるには充分な機能あり
簡単に試したいときにはかなり心強いサービス
削除
41
目次:
1. 既存のモデルで画像識別器作成
2. クラウドでモデルを学習
3. DLを利用したプログラム作成
4. まとめ
42
あらたな悩み
43
今までの画像認識は一枚一オブジェクトしか対応していない
#1| goose
#2| hen
#3| Kakatoe galerita
○
#1| unicycle (一輪車)
#2| taxi
#3| go-kart(ゴーカート)
?
https://www.pakutaso.com/20110944268post-668.html
http://www.ashinari.com/2015/09/18-393195.php?category=11
44
複数オブジェクトでも
なにがあるか認識できないか?
45
(参考)http://demo.illustration2vec.net/
こういうのが理想!(これもDeepLearning)
削除
46
実現はできそう!
とりあえずやってみよう!
47
複数オブジェクトへの対応への道: R-CNN
1. 画像をインプット
2. 画像から物体があると思われる領域を抽出する
3.4. DeepLearningを使い、領域毎に画像認識させる
Girshick, R., Donahue, J., Darrell, T., & Malik, J. “Rich feature hierarchies for accurate object detection and
semantic segmentation”. CVPR2014.
48
物体があると思わえる領域を抽出する方法
CPMC(Constrained Parametric Min-Cuts)
・点を配置し、その周囲をグラフカット
・処理速度が遅いが、領域を高精度に判定
Selective Search
・色、輝度、テクスチャが似ている領域を探索し、物体検
出する
・高速だが精度はCPMCほどではない
・最近流行りの判定方法
→今回は処理速度が早く、モダンなSelective Searchを使用
49
ただのR-CNNやるのも
面白く無いので、これを利用した
プログラムを作ってみよう!
50
R-CNNを利用したサムネイル抽出をしてみよう
画像中央を抽出
?
R-CNNを使って
重要な部分を抽出
https://www.pakutaso.com/20120109005post-1066.html
犬の一部が
欠けてる…
51
(参考)白ヤギコーポレーション Blog
http://aial.shiroyagi.co.jp/2014/12/%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%8
3%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%
82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%AE%E5%88%87%E3%82%8A%E6%8A%9C%E3
%81%8D/
52
サムネイル抽出ロジック
1. SelectiveSearchで領域検出する
2. 検出した領域をDeepLearningにかけScoreを測る
3. Scoreの高いTop-Nを取得
4. Top-NのScoreを加算していき、最も高い点数を得
た領域のまん中を中心にしてサムネイル抽出する
53
1. SelectiveSearchで領域検出する
赤い枠線で囲まれた領域を検出
それぞれをDLにかけ判別させる
54
2. 検出した領域をDeepLearningにかけScoreを測る
3. Scoreの高いTop-Nを取得
Score:
0.462
Score:
0.456
Score:
0.460
・・・
55
4. (Y軸)得点総計の高い領域のまん中を中心にしてサムネイル抽出する
0.460
0.462
0.456
56
R-CNNを利用したサムネイル抽出をしてみよう(結果)
画像中央を抽出
R-CNNを使って
重要な部分を抽出
https://www.pakutaso.com/20120109005post-1066.html
全体像が
写っている!
57
Selective Searchコーディング例
※Labellio のSelectiveSearchライブラリ使用
import selectivesearch
# selective search実行 regionsにx,yの座標とそこからの距離が格納
img_lbl, regions = selectivesearch.selective_search(inputs[0], scale=100, sigma=0.9, min_size=10)
for r in regions:
# 同じ領域が検出されたら対象外
if r['rect'] in candidates:
continue
# 500ピクセル以下は対象が
if r['size'] < 500:
continue
candidates.add(r['rect'])
for x,y,w,h in candidates:
imgar = inputs[0][y: y+h, x: x+w]
predictions = classifier.predict([imgar], not args.center_only)
58
当方式における課題
処理速度の遅さ
・領域毎に認識が走るため、時間がかかる
→Fast R-CNNという新しい手法の導入(数百倍)
→GPUサーバ導入
物体検出の精度
・人間が重要だと思う領域を抜き出さないことがある
→FaceDetectionなどの複数手法、複数パラメータ
での抜き出しなど
59
目次:
1. 既存のモデルで画像識別器をつくろう
2. クラウドでモデルを学習させよう
3. DLを利用したプログラムをつくろう
4. まとめ
60
DeepLearning使えばいろんなことができそう
画像を分類分け、タグ付けをする
天気の判別
不審者の侵入検知
自分の好きな俳優だけが写っているシーンを抽出
好きな音楽ジャンルの動画を検索
61
新しい分野だけにアイデアさえ思いつけ
ば競争優位にたてるかも
62
まずは気軽に試して、
次世代ビジネスのアイデアを育てよう!
63
ご清聴ありがとうございました

More Related Content

PDF
PythonによるDeep Learningの実装
PDF
ディープラーニングフレームワーク とChainerの実装
PPTX
Deep Learning基本理論とTensorFlow
PDF
Deep learning入門
PDF
実装ディープラーニング
PPTX
TensorFlowとCNTK
PDF
Chainerチュートリアル -v1.5向け- ViEW2015
PDF
Pythonで体験する深層学習 5章
PythonによるDeep Learningの実装
ディープラーニングフレームワーク とChainerの実装
Deep Learning基本理論とTensorFlow
Deep learning入門
実装ディープラーニング
TensorFlowとCNTK
Chainerチュートリアル -v1.5向け- ViEW2015
Pythonで体験する深層学習 5章

What's hot (20)

PDF
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
PDF
DeepLearningTutorial
PDF
科学技術計算関連Pythonパッケージの概要
PDF
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
PDF
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
PDF
Pythonによる機械学習入門 ~Deep Learningに挑戦~
PDF
Deep Learningと画像認識   ~歴史・理論・実践~
PDF
Convolutional Neural Network @ CV勉強会関東
PPTX
MIRU2014 tutorial deeplearning
PDF
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
PPT
17ゼロから作るディープラーニング2章パーセプトロン
PPTX
Image net classification with Deep Convolutional Neural Networks
PPTX
Cvim saisentan-6-4-tomoaki
PDF
深層学習入門
PDF
ディープニューラルネット入門
PDF
深層学習フレームワーク Chainer の開発と今後の展開
PPTX
深層学習 第4章 大規模深層学習の実現技術
PDF
Tutorial-DeepLearning-PCSJ-IMPS2016
PDF
Introduction to Chainer (LL Ring Recursive)
PDF
bigdata2012ml okanohara
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
DeepLearningTutorial
科学技術計算関連Pythonパッケージの概要
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
Pythonによる機械学習入門 ~Deep Learningに挑戦~
Deep Learningと画像認識   ~歴史・理論・実践~
Convolutional Neural Network @ CV勉強会関東
MIRU2014 tutorial deeplearning
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
17ゼロから作るディープラーニング2章パーセプトロン
Image net classification with Deep Convolutional Neural Networks
Cvim saisentan-6-4-tomoaki
深層学習入門
ディープニューラルネット入門
深層学習フレームワーク Chainer の開発と今後の展開
深層学習 第4章 大規模深層学習の実現技術
Tutorial-DeepLearning-PCSJ-IMPS2016
Introduction to Chainer (LL Ring Recursive)
bigdata2012ml okanohara
Ad

Similar to はじめての人のためのDeep Learning (20)

PPTX
CVPR2018 pix2pixHD論文紹介 (CV勉強会@関東)
PDF
DIGITSによるディープラーニング画像分類
PDF
自習形式で学ぶ「DIGITS による画像分類入門」
PDF
ハンズオン セッション 1: DIGITS によるディープラーニング入門
PDF
ハンズオン1: DIGITS によるディープラーニング入門
PDF
東北大学 先端技術の基礎と実践_深層学習による画像認識とデータの話_菊池悠太
PDF
(2021年8月版)深層学習によるImage Classificaitonの発展
PPTX
ゼロから深層学習を学ぶ方法 - CMS大阪夏祭り2017
PDF
画像認識モデルを自動的に作る。1日以内に。~Simple And Efficient Architecture Search for Convolutio...
PDF
(2022年3月版)深層学習によるImage Classificaitonの発展
PPTX
「機械学習とは?」から始める Deep learning実践入門
PDF
【Deep Learning】AlexNetの解説&実装 by PyTorch (colabリンク付き)
PDF
チュートリアル:細胞画像を使った初めてのディープラーニング
PDF
LIFULL HOME'S「かざして検索」リリースの裏側
PDF
全力解説!Transformer
PDF
SPADE :Semantic Image Synthesis with Spatially-Adaptive Normalization
PPTX
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
PDF
2016年1月期 AITCオープンラボ 「第1回 機械学習勉強会 ~Deep Learningを使って訪問者判定してみた」
PDF
Opencv object detection_takmin
PDF
Deep learningの発展と化学反応への応用 - 日本化学会第101春季大会(2021)
CVPR2018 pix2pixHD論文紹介 (CV勉強会@関東)
DIGITSによるディープラーニング画像分類
自習形式で学ぶ「DIGITS による画像分類入門」
ハンズオン セッション 1: DIGITS によるディープラーニング入門
ハンズオン1: DIGITS によるディープラーニング入門
東北大学 先端技術の基礎と実践_深層学習による画像認識とデータの話_菊池悠太
(2021年8月版)深層学習によるImage Classificaitonの発展
ゼロから深層学習を学ぶ方法 - CMS大阪夏祭り2017
画像認識モデルを自動的に作る。1日以内に。~Simple And Efficient Architecture Search for Convolutio...
(2022年3月版)深層学習によるImage Classificaitonの発展
「機械学習とは?」から始める Deep learning実践入門
【Deep Learning】AlexNetの解説&実装 by PyTorch (colabリンク付き)
チュートリアル:細胞画像を使った初めてのディープラーニング
LIFULL HOME'S「かざして検索」リリースの裏側
全力解説!Transformer
SPADE :Semantic Image Synthesis with Spatially-Adaptive Normalization
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
2016年1月期 AITCオープンラボ 「第1回 機械学習勉強会 ~Deep Learningを使って訪問者判定してみた」
Opencv object detection_takmin
Deep learningの発展と化学反応への応用 - 日本化学会第101春季大会(2021)
Ad

はじめての人のためのDeep Learning