狠狠撸

狠狠撸Share a Scribd company logo
R-CNNの原理と
ここ数年の流れ
本橋和貴
CS室AI開発課
(R-)CNN調査報告会 - 2017年6月14日
Agenda
- Introduction
- R-CNNの原理
- 領域分け
- CNN
- 分類器
- R-CNNの問題点
- R-CNNの最近の動向
- SSD (Single Shot multibox Detector) の概要
- まとめ
2
R-CNN (Regions with CNN features)
('n03085013', 'computer_keyboard', 0.78958303)
('n04264628', 'space_bar', 0.13960978)
('n04505470', 'typewriter_keyboard', 0.050729375)
('n03793489', 'mouse', 0.0087937126)
('n04074963', 'remote_control', 0.0026325041)
* 出典:人工知能に関する断創録 - KerasでVGG16を使う (2017)
* http://aidiary.hatenablog.com/entry/20170104/1483535144
CNN (Convolutional Neural Network) 単体では
画像全体から特徴量 (feature) を抽出可能
領域候補
(Region Proposals)
を生成すれば...
Region毎のfeatureを抽出可能
人間が行うような”物体認識”
* 出典:Rich feature hierarchies for accurate object detection and semantic segmentation (2013)
* https://arxiv.org/abs/1311.2524
3
R-CNNの応用例
4* NVIDIA Seminar ディープラーニングによる画像認識と応用事例
* /Takayosi/nvidia-51814334
すみません、RNNの応用例でした
R-CNNの応用例
5* NVIDIA Seminar ディープラーニングによる画像認識と応用事例
* /Takayosi/nvidia-51814334
R-CNNの応用例
R-CNNの人認識とクラスタリングを組み合わせた手法
「Deep Learning技術をベースとした異常画像検出」(2016)
https://kaigi.org/jsai/webprogram/2016/pdf/664.pdf
(有限責任監査法人トーマツ デロイトアナリティクス&株式会社リクルート住まいカンパニー)
【不動産ポータルサイトSUUMO】
- 物件管理者側から提供された物件写真をサイトに掲載できるかチェック
NG:人が写っていたらダメ(プライバシーの観点から)
NG:工事中の写真はダメ
NG:拡大しすぎ/縮小しすぎはダメ
Agenda
- Introduction
- R-CNNの原理
- 領域分け
- CNN
- 分類器
- R-CNNの問題点
- R-CNNの最近の動向
- SSD (Single Shot multibox Detector) の概要
- まとめ
7
R-CNNの原点
原論文:
Rich feature hierarchies for accurate object detection
and semantic segmentation (2013)
https://arxiv.org/abs/1311.2524
8
R-CNNの原点
原論文:
Rich feature hierarchies for accurate object detection
and semantic segmentation (2013)
https://arxiv.org/abs/1311.2524
9
1. 入力画像に対して、
2. 物体が写っている領域の候補 (region proposal) を抽出し、
a. CNNのインプットの大きさに合うように領域中の画像をリサ
イズし、
3. それぞれの領域に対してCNNで特徴量 (feature) を計算し
4. それぞれの領域になにが写っているか分類する
R-CNNの原点
原論文:
Rich feature hierarchies for accurate object detection
and semantic segmentation (2013)
https://arxiv.org/abs/1311.2524
10
1. 入力画像に対して、
2. 物体が写っている領域の候補 (region proposal) を約2,000個抽出し、
a. CNNのインプットの大きさに合うように領域中の画像をリサイズし、
3. それぞれの領域に対してCNNで特徴量 (feature) を計算し
4. それぞれの領域になにが写っているか分類する
詳細は後述
R-CNNの原点
原論文:
Rich feature hierarchies for accurate object detection
and semantic segmentation (2013)
https://arxiv.org/abs/1311.2524
11
1. 入力画像に対して、
2. 物体が写っている領域の候補 (region proposal) を約2,000個抽出し、
a. CNNのインプットの大きさに合うようにそれぞれの領域中の画像をリサイズし、
3. それぞれの領域に対してCNNで特徴量 (feature) を計算し
4. それぞれの領域になにが写っているか分類する
詳細は後述
R-CNNの原点
原論文:
Rich feature hierarchies for accurate object detection
and semantic segmentation (2013)
https://arxiv.org/abs/1311.2524
12
1. 入力画像に対して、
2. 物体が写っている領域の候補 (region proposal) を約2,000個抽出し、
a. CNNのインプットの大きさに合うようにそれぞれの領域中の画像をリサイズし、
3. それぞれの領域に対してCNNで特徴量 (feature) を計算し、
4. それぞれの領域になにが写っているか分類する
詳細は後述
R-CNNの原点
原論文:
Rich feature hierarchies for accurate object detection
and semantic segmentation (2013)
https://arxiv.org/abs/1311.2524
13
1. 入力画像に対して、
2. 物体が写っている領域の候補 (region proposal) を約2,000個抽出し、
a. CNNのインプットの大きさに合うようにそれぞれの領域中の画像をリサイズし、
3. それぞれの領域に対してCNNで特徴量 (feature) を計算し、
4. それぞれの領域になにが写っているか分類する
詳細は後述
R-CNNの原理(1):領域分け
色々なアルゴリズムが存在するが、(あくまで先行研究との比較のため)
原論文ではselective searchを用いている
14
R-CNNの原理(1):領域分け
色々なアルゴリズムが存在するが、(あくまで先行研究との比較のため)
原論文ではselective searchを用いている
15
1. 色や濃淡勾配などの特徴が類似する領域に分ける
2. 類似度が高い隣接領域をどんどん結合していく
こうして小さい領域候補から大きな領域候補まで網羅
(参考:領域の大きさのことをスケールと呼ぶ)
“Fast mode”では約2,000個の候補 (VOC @ ~500x300 pix)
時系列 * 出典:Selective Search for Object Recognition
* https://www.koen.me/research/selectivesearch/
現論文で用いたCNNのモデルは”AlexNet” (Alex Krizhevsky et al)
? 2012年の”ImageNet” datasetの1,000クラス分類コンペで圧勝したモデル
? 他の有名なモデル:GoogLeNet (22層), VGG (16/19層), ResNet (18/34/50/...層) など
16
出典:ImageNet Classification with Deep Convolutional Neural Networks (2012)
https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
R-CNNの原理(2) CNNを用いた特徴量抽出R-CNNの原理(2) CNNを用いた特徴量抽出
全8層 = (入力)     畳込み層×5  + 全結合層×2+出力層×1
現論文で用いたCNNのモデルは”AlexNet” (Alex Krizhevsky et al)
? 2012年の”ImageNet” datasetの1,000クラス分類コンペで圧勝したモデル
? 他の有名なモデル:GoogLeNet (22層), VGG (16/19層), ResNet (18/34/50/...層) など
17
出典:ImageNet Classification with Deep Convolutional Neural Networks (2012)
https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
R-CNNの原理(2) CNNを用いた特徴量抽出R-CNNの原理(2) CNNを用いた特徴量抽出
全8層 = (入力)     畳込み層×5  + 全結合層×2+出力層×1
* GoogLeNet in Keras
* https://joelouismarino.github.io/blog_posts/blog_googlenet_keras.html
現論文で用いたCNNのモデルは”AlexNet” (Alex Krizhevsky et al)
? 2012年の”ImageNet” datasetの1,000クラス分類コンペで圧勝したモデル
? 他の有名なモデル:GoogLeNet (22層), VGG (16/19層), ResNet (18/34/50/...層) など
18
出典:ImageNet Classification with Deep Convolutional Neural Networks (2012)
https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
R-CNNの原理(2) CNNを用いた特徴量抽出R-CNNの原理(2) CNNを用いた特徴量抽出
全8層 = (入力)     畳込み層×5  + 全結合層×2+出力層×1
* リアルタイム画風変換とその未来
* https://engineering.linecorp.com/ja/blog/detail/105
Visual Geometry Group
現論文で用いたCNNのモデルは”AlexNet” (Alex Krizhevsky et al)
? 2012年の”ImageNet” datasetの1,000クラス分類コンペで圧勝したモデル
? 他の有名なモデル:GoogLeNet (22層), VGG (16/19層), ResNet (18/34/50/...層) など
19
出典:ImageNet Classification with Deep Convolutional Neural Networks (2012)
https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
R-CNNの原理(2) CNNを用いた特徴量抽出R-CNNの原理(2) CNNを用いた特徴量抽出
全8層 = (入力)     畳込み層×5  + 全結合層×2+出力層×1
* Image Classification
* http://book.paddlepaddle.org/03.image_classification/ Residual Net
現論文で用いたCNNのモデルは”AlexNet” (Alex Krizhevsky et al)
? 2012年の”ImageNet” datasetの1,000クラス分類コンペで圧勝したモデル
? 他の有名なモデル:GoogLeNet (22層), VGG (16/19層), ResNet (18/34/50/...層) など
20
出典:ImageNet Classification with Deep Convolutional Neural Networks (2012)
https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
R-CNNの原理(2) CNNを用いた特徴量抽出R-CNNの原理(2) CNNを用いた特徴量抽出
全8層 = (入力)     畳込み層×5  + 全結合層×2+出力層×1
R-CNNの原理(3) 分類器
R-CNNにおいて「分類がうまくいった」というのはどういう場合か
21
Car
Person
Fuel dispenser
正解ラベル
(ground truth)
例)車の認識
R-CNNの原理(3) 分類器
R-CNNにおいて「分類がうまくいった」というのはどういう場合か
22
Car
Person
Fuel dispenser
正解ラベル
(ground truth)
認識結果
例)車の認識 Car
R-CNNの原理(3) 分類器
R-CNNにおいて「分類がうまくいった」というのはどういう場合か
23
Car
Person
Fuel dispenser
正解ラベル
(ground truth)
認識結果
例)車の認識 Train
R-CNNの原理(3) 分類器
R-CNNにおいて「分類がうまくいった」というのはどういう場合か
24
Car
Person
Fuel dispenser
正解ラベル
(ground truth)
認識結果
例)車の認識
Car
R-CNNの原理(3) 分類器
R-CNNにおいて「分類がうまくいった」というのはどういう場合か
25
Car
Person
Fuel dispenser
正解ラベル
(ground truth)
認識結果
例)車の認識
Car
R-CNNの原理(3) 分類器
R-CNNにおいて「分類がうまくいった」というのはどういう場合か
26
Car
Person
Fuel dispenser
正解ラベル
(ground truth)
認識結果
例)車の認識
Car
?
R-CNNの原理(3) 分類器
R-CNNにおいて「分類がうまくいった」というのはどういう場合か
27
Car
Person
Fuel dispenser
正解ラベル
(ground truth)
認識結果
例)車の認識
Car
?
物体名と領域の位置?大きさが合って初めて正解
領域の一致具合の指標 IoU
IoU (Intersection over Union)
28
* 出典:Intersection over Union (IoU) for object detection - pyimagesearch (2016)
* http://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/
原論文では IoU threshold = {0, 0.1, …, 0.5} で認識率をスキャンし、結局 threshold = 0.3 に設定
R-CNNの原理(3) 分類器
29
SVM (Support Vector Machine)
* 出典:SVM を使うと,なにが嬉しいの?
* http://www.neuro.sfc.keio.ac.jp/~masato/study/SVM/SVM_1.htm
識別面から最近傍サンプル点 (support vector) まで
のユークリッド距離 (マージン) を最大化するような識
別面を決めるアルゴリズム
各クラス(車、人など)に対してSVMで
信号?背景を識別する境界を学習
R-CNNの原点
原論文:
Rich feature hierarchies for accurate object detection
and semantic segmentation (2013)
https://arxiv.org/abs/1311.2524
30
1. 入力画像に対して、
2. 物体が写っている領域の候補 (region proposal) を Selective Search で約2,000個抽出し、
a. CNNのインプットの大きさに合うようにそれぞれの領域中の画像をリサイズし、
3. それぞれの領域に対してCNN (AlexNet) で特徴量 (feature) を計算し、
4. それぞれの領域になにが写っているか Support Vector Machine で分類する
Agenda
- Introduction
- R-CNNの原理
- 領域分け
- CNN
- 分類器
- R-CNNの問題点
- R-CNNの最近の動向
- SSD (Single Shot multibox Detector) の概要
- まとめ
31
オリジナルR-CNNの欠点
学習が多段の処理になっていて煩雑
1. まず”ImageNet” dataset(1画像に1物体)でCNNをpretrain
2. “VOC” dataset(1画像に複数物体)でCNNをfine-tuning*
*fine-tuning: 上流の層の重みは固定し、全結合層など下流の層の重みのみを trainingすること
3. CNNの出力側にSVMを載せて学習
4. 矩形回帰の学習
実行時間が遅い
? 領域候補 2,000 個に対してそれぞれCNNを走らせている
? 認識時間 10-45 s/image @ Nvidia Tesla K40 (cf: 最新Tesla P100はThroughput~10倍)
? 多数の”進化版”が考案されている 32
(参考)論文紹介:Fast R-CNN & Faster R-CNN
/takashiabe338/fast-rcnnfaster-rcnn
Agenda
- Introduction
- R-CNNの原理
- 領域分け
- CNN
- 分類器
- R-CNNの問題点
- R-CNNの最近の動向
- SSD (Single Shot multibox Detector) の概要
- まとめ
33
R-CNNの進化版のまとめ
34
著者 初出 (arXiv) オリジナルの実装 二次創作*
R-CNN Ross G. et al 2013/11 MATLAB+Caffe
Fast R-CNN Ross G. 2015/04 Caffe / MATLAB Torch
Faster R-CNN Shaoqing R. et at 2015/06 MATLAB / Caffe Keras / TensorFlow (TF) / Chainer
YOLO
(You Only Look Once)
Joseph R. et al 2015/06 darknet TF / TF / TF / TF on Android / Keras
SSD
(Single Shot Multibox Detector)
Wei L. et al 2015/12 Caffe Keras / TF / Torch / Chainer
YOLOv2 Joseph R. et al 2016/12 darknet Keras / TF
*「R-CNN implementation」等でググって1-2ページ以内にヒットしたもののみ掲載
* 出典:SSD: Single Shot MultiBox Detector
* https://github.com/weiliu89/caffe/tree/ssd
* 出典:YOLO9000: Better, Faster, Stronger
* https://arxiv.org/pdf/1612.08242.pdf
(次ページに拡大図)
R-CNNの進化版のまとめ
35
* 出典:YOLO9000: Better, Faster, Stronger
* https://arxiv.org/pdf/1612.08242.pdf
Agenda
- Introduction
- R-CNNの原理
- 領域分け
- CNN
- 分類器
- R-CNNの問題点
- R-CNNの最近の動向
- SSD (Single Shot multibox Detector) の概要
- まとめ
36
SSDの概要
? Single Shot multibox Detector (SSD)
? Single Shot (ひとつのネットワーク) で複数の物体を認識
? YOLOv1よりも速く、Faster R-CNNと同程度の精度
? Feature mapに対して小さな畳み込みフィルタをかけ、それぞれの領域
で各物体クラスのスコアとボックス位置のオフセットを予測(後述)
? 異なるスケール?アスペクト比で上述の操作を繰り返す
? R-CNNは領域候補を出してから、全候補にCNNを走らせる
? 物体認識とボックス位置それぞれの損失関数の和を最小化させる(後述)
? “end-to-end”でtraining可能
? R-CNNは多段階のtrainingが必要
37
? Single Shot multibox Detector (SSD)
? Single Shot (ひとつのネットワーク) で複数の物体を認識
? YOLOv1よりも速く、Faster R-CNNと同程度の精度
? Feature mapに対して小さな畳み込みフィルタをかけ、それぞれの領域
で各物体クラスのスコアとボックス位置のオフセットを予測(後述)
? 異なるスケール?アスペクト比で上述の操作を繰り返す
? R-CNNは領域候補を出してから、全候補にCNNを走らせる
? 物体認識とボックス位置それぞれの損失関数の和を最小化させる(後述)
? “end-to-end”でtraining可能
? R-CNNは多段階のtrainingが必要
SSDの概要
38
SSD300 in Keras @ TiTan X
SSDの原理
39
SSDの原理:特徴抽出
40
*VGGの全結合 (Fully-Connected) 層は畳込み (Convolution) 層に置き換えている
前半のVGGネットで特徴量 (feature) を抽出
SSDの原理:物体の位置と種類の認識
41
Feature mapを小さくしながら、異なるスケールの領域候補と物体認識のスコア(~確率)を出力
領域候補のアスペクト比は
デフォルトの{1, 2, 3, ?, ?} で固定
(極端に細長い物体は認識しづらい)
SSDの原理:物体の位置と種類の認識
42
Feature mapを小さくしながら、異なるスケールの領域候補と物体認識のスコア(~確率)を出力
領域候補のアスペクト比は
デフォルトの{1, 2, 3, ?, ?} で固定
(極端に細長い物体は認識しづらい?)
出典:/xavigiro/ssd-single-shot-multibox-detector
SSDの原理:学習
43
物体認識と位置決定の損失関数(loss function)の和を
小さくするようにフィルタの値を調整
SSDの原理:学習
物体認識と位置決定の損失関数(loss function)の和を
小さくするようにフィルタの値を調整
44
Confidence Loss Localization Loss
weight term:
一応フリーパラメータ
としているが、論文では
単純に α=1 と設定
Ground Truthと
位置がマッチした
Bounding Boxの数
SSDの原理:学習
物体認識と位置決定の損失関数(loss function)の和を
小さくするようにフィルタの値を調整
45
Ground Truthと
位置がマッチした
Bounding Boxの数 Confidence Loss
(Softmax Loss)
Localization Loss
マッチしたBox (Cross Entropy)
xp
ij
: i番目のboxが、カテゴリpのj番目の
  ground truthとマッチしたらxp
=1
マッチしなかったBox
カテゴリ0は背景;背景の確率=1なら最小となる
weight term:
一応フリーパラメータ
としているが、論文では
単純に α=1 と設定
SSDの原理:学習
物体認識と位置決定の損失関数(loss function)の和を
小さくするようにフィルタの値を調整
46
Ground Truthと
位置がマッチした
Bounding Boxの数 Confidence Loss
(Softmax Loss)
weight term:
一応フリーパラメータ
としているが、論文では
単純に α=1 と設定
Localization Loss
(Smooth L1 Loss)
lm
i
: Predicted Boxのcenter x, y, width, height
gm
j
: Ground truthのcenter x, y, width, height勾配が大きくなり過ぎない (at most 1)
参考:YOLO (You Only Look Once)
47
● 予め画像全体をグリッド分割
● 各領域ごとに物体のクラスとBounding Boxを求める
参考:SSDとYOLOのモデルの概要
48
https://github.com/rykov8/ssd_keras/blob/master/ssd.py
49
SSD の Keras での実装
https://github.com/rykov8/ssd_keras/blob/master/ssd.py
50
SSD の Keras での実装
https://github.com/rykov8/ssd_keras/blob/master/ssd.py
51
SSD の Keras での実装
“Localizationの特徴量”
“Confidenceの特徴量”
Default Bounding Box
https://github.com/rykov8/ssd_keras/blob/master/ssd.py
52
SSD の Keras での実装
まとめ
? R-CNN (Regions with CNN features) は
 領域分け+CNNの特徴量抽出
を組み合わせて、画像内の複数物体認識を行う
? オリジナルのR-CNNは動作が遅すぎて使い物にならない
? R-CNN改良版のSSDやYOLO
? ひとつのニューラルネットで両方のタスクを担う
? CNNで特徴量を認識してから領域分けを行う
53
Backup
54
【スラング英語の教科書】YOLOの正しい意味と使い方
http://creatorjapan.asia/yolo-meaning/
55
56
Fast R-CNN
https://arxiv.org/abs/1504.08083
R-CNNの応用例
57
R-CNN
R-CNNの人認識とクラスタリングを組み合わせた手法
「Deep Learning技術をベースとした異常画像検出」(2016)
https://kaigi.org/jsai/webprogram/2016/pdf/664.pdf
(有限責任監査法人トーマツ デロイトアナリティクス&株式会社リクルート住まいカンパニー)
- 物件管理者側から提供された物件写真をサイトに掲載できるかチェック
NG:人が写っていたらダメ(プライバシーの観点から)
NG:工事中の写真はダメ
NG:拡大しすぎ/縮小しすぎはダメ
【Python】 KerasのConvolution2Dの引数border_modeについて
‘valid’
出力画像は入力画像よりもサイズが小さくなる。
58
出典:http://ni4muraano.hatenablog.com/entry/2017/02/02/195505
‘same’
ゼロパディングすることで、
出力画像は入力画像と同じサイズになる。
59
Fast R-CNN
https://arxiv.org/abs/1504.08083
60
61
Deep Learning Benchmarks of NVIDIA Tesla P100 PCIe, Tesla K80, and Tesla M40 GPUs
https://www.microway.com/hpc-tech-tips/deep-learning-benchmarks-nvidia-tesla-p100-16gb-pcie-tesla-k80-tesla-m40-gpus/
62
Deep Learning Benchmarks of NVIDIA Tesla P100 PCIe, Tesla K80, and Tesla M40 GPUs
https://www.microway.com/hpc-tech-tips/deep-learning-benchmarks-nvidia-tesla-p100-16gb-pcie-tesla-k80-tesla-m40-gpus/

More Related Content

搁-颁狈狈の原理とここ数年の流れ