インタラクションデザイン演習実習a

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
最新のリビジョン両方とも次のリビジョン
インタラクションデザイン演習実習a [2018/05/23 02:34] – [基礎練習] babaインタラクションデザイン演習実習a [2018/05/23 03:28] – [Abstract] baba
行 67: 行 67:
 ==== C++における vector型 ==== ==== C++における vector型 ====
 様々な処理に配列は多く利用されます.信号処理や画像処理にかぎらず,一般的な計算には配列は多用されます. この配列を何度も利用しているうちに,いろいろと不便なことに気づきます.例えば最初は配列サイズを100確保 したのに途中からそれ以上必要になってしまった時,配列の中にあるデータを削除し,削除した分を詰めて配列に 再度格納したいとき等です.vector型に関する詳しい説明は多くの参考書やウェブサイトに譲るとして,ここでは 基本的な使い方を抑えたいと思います.emptyExampleをベースに実習してみましょう. 様々な処理に配列は多く利用されます.信号処理や画像処理にかぎらず,一般的な計算には配列は多用されます. この配列を何度も利用しているうちに,いろいろと不便なことに気づきます.例えば最初は配列サイズを100確保 したのに途中からそれ以上必要になってしまった時,配列の中にあるデータを削除し,削除した分を詰めて配列に 再度格納したいとき等です.vector型に関する詳しい説明は多くの参考書やウェブサイトに譲るとして,ここでは 基本的な使い方を抑えたいと思います.emptyExampleをベースに実習してみましょう.
 +
 +<code>
 + vector<int>a;  // intの配列をvector型で宣言
 +  a.push_back(1); // a[0]に1が格納される
 +  a.push_back(2); // a[1]に2が格納される
 +  a.push_back(3); // a[2]に3が格納される
 +  ofDrawBitmapString(ofToString(a.size()), 10,10); // (10,10)座標に3が表示される
 +  
 +  a.pop_back();   // a[2]が削除され,a[0]=1, a[1]=2が残る
 +  a.push_back(4); // a[2]に4が格納される
 +  
 +  a.erase(a.begin()); // a[0]が削除され,後ろのデータが全て前に移動する→a[0]=2, a[1]=4
 +  
 +  for( int i = 0; i < a.size(); i++ ){
 +    ofDrawBitmapString("a["+ofToString(i)+"]="+ofToString(a[i]), 10, 20+i*10);
 +  }
 +</code>
 +
 +これまでの基礎知識を踏まえていよいよScratchInputの技術再現を行います.ただし著者らは認識のための特徴量に 関して詳細な情報を論文に載せていないので,ここではすこしアレンジを加えて実装を行ってみます.そこで,これから このプログラムのことをScratchInputZと呼ぶことにします.
 +
 +==== 正規化 ====
 +論文読解2の最後にユーザの表情を認識するプログラムを実装しましたが,ここで,厳密にその評価を行うと 一つ問題があることがわかります.眉毛の高さや口の開閉等の中にはその変化の度合いが全て均等とは言い切れません. 例えばx,yにおいて(5,5)と(10,6)はxの値が大きく異るように見えますが,実際の計測データ上ではx:5-10,y:5-6 の範囲で取得されているとします.この場合,そのままユークリッド距離等を計算してしまうと,xの変化によって 識別結果が大きく左右されてしまいます.そこで,一般的には正規化処理を行うことでこの問題に対応します. 
 +先ほどの例では(10,5), (5,6)でしたが,x:5-10, y:5-6であることから,それぞれを正規化すると (1,0), (0,1)となります.これでそれぞれの次元において,値は異なるものの,変化の度合いを揃えることができます.
 +
 +===== ScratchInputZ =====
 +  * [[https://www.dropbox.com/sh/5qjy4qwza6mlyg4/AAACBZELBX4zodlhIl3X89Eza?dl=0|雛形]]
 +
 +
 +まずは上記のテンプレートをダウンロードして実行して下さい.ofxGuiとvector型を用いて記述されています. 一緒に読んでプログラムになにが記述されているかを把握します.
 +
 +<wrap danger>課題</wrap>
 +テンプレートを利用して,数種類のスクラッチインプットを識別するプログラムを記述してみましょう. ただし,特徴量として,次を利用してみます.ピークカウント,正規化周波数積分(0-3000),(3000-8000),(10000-20000). また,認識には論文と同様決定木にて実装してください.
 +
 +{{youtube>re8Kh71v8m4?medium}}
 +
 +====== 論文読解4:You Only Look Once: Unified, Real-Time Object Detection ======
 +[[https://arxiv.org/pdf/1506.02640.pdf]]
 +>Joseph Redmon∗, Santosh Divvala∗†, Ross Girshick¶, Ali Farhadi∗†
 +===== Abstract =====
 +We present YOLO, a new approach to object detection. Prior work on object detection repurposes classifiers to per- form detection. Instead, we frame object detection as a re- gression problem to spatially separated bounding boxes and associated class probabilities. A single neural network pre- dicts bounding boxes and class probabilities directly from full images in one evaluation. Since the whole detection pipeline is a single network, it can be optimized end-to-end directly on detection performance.
 +Our unified architecture is extremely fast. Our base YOLO model processes images in real-time at 45 frames per second. A smaller version of the network, Fast YOLO, processes an astounding 155 frames per second while still achieving double the mAP of other real-time detec- tors. Compared to state-of-the-art detection systems, YOLO makes more localization errors but is less likely to predict false positives on background. Finally, YOLO learns very general representations of objects. It outperforms other de- tection methods, including DPM and R-CNN, when gener- alizing from natural images to other domains like artwork.
 +
 +{{youtube>VOC3huqHrss?medium}}
 +
 +ここでは,リアルタイム物体検出で有名なYOLOの論文を読み,実際にYOLOを利用してみます.YOLOそのものを実装しませんが,深層学習におけるネットワークのデザインや意味に関して概略的に学び,それを利用したアプリケーションを作成するところまでを行ってみます.
 +
 +===== YOLO をOpenframeworksで動かす =====
 +