Stimulator

機械学習とか好きな技術話とかエンジニア的な話とかを書く

Random Forest for kazoo04 recognition

 

- 挨拶 - 

 みなさんこんにちは。Kazoo04 Advent Calender 7日目を担当します、@vaaaaanquish ことばんくしです。よろしくお願いします。突然ですがみなさん、

 

"みなさん、かずー氏好きですか?"

 

…そうですね。まあまあですね。今回はそんなKazoo04に捧げる記事を書いていきたいと思います。技術的、専門的な難しい内容は全然出てこないので気軽にどうぞ。

 

 - 背景 -

  「Kazoo04に会ってみたい」ここ数年、このようなワードがインターネットを闊歩するようになりました。人類の歴史、インターネットの歴史から見ても、ここまでKazoo04が切望された時代はおそらく初めてなのではないでしょうか。これは、Kazoo04によって生み出された言葉やクラスタが世界に多大な影響を与えた証拠であると言えるでしょう。しかしながら、Kazoo04は一個人であり、人の身。神ではありません。Kazoo04は複数存在せず、その身は多忙を極めています。地球上に存在する70億人からKazoo04を見つける事、それは宇宙に広がる星々から彗星を見つけるに等しいと言えるでしょう。

 

 "もし、街中でKazoo04とすれ違ってしまっていたら?"

 

そうです。みなさんもKazoo04と会うチャンス、Kazoo04チャンス*1を常に与えられているのです。しかし、みなさんがそのKazoo04チャンスを逃さないようにするには街に繰り出し、常にKazoo04を意識し、認識する必要があるのです。

 

 

- 近年の物体認識技術について -

  私は"機械学習"を研究テーマとし活動しています。近年では、画像に写ったモノを認識するタスク、"一般物体認識"、"特定物体認識"の分野においても機械学習がホットなワードとなっています。例として、最近発表されたGoogleの一般物体認識技術のいくつかを見てみましょう。

 

Google MapsのStreet Viewの画像認識アルゴリズムがCAPTCHAのほとんどを解読 - TechCrunch

こちらでは、ストリートビューに写っている街区番号画像から数値を解読したり、有名なCAPTCHAの認識を行っています。今話題のニューラルネット"Deep Learning"の一種を使い、その精度は90%を超えています。

 

Research Blog: A picture is worth a thousand (coherent) words: building a natural description of images

こちらは、写真からの物体検出、シーン認識ですね。人がモーターバイクに乗った画像を入力にニューラルネット(Deep Learning)によって「A person riding a motorcycle on a dirt road」という文章を生成しています。

 

 このような研究成果は、身の回りにも溢れ始めています。

Research Blog: Improving Photo Search: A Step Across the Semantic Gap

 こちらでは、Google+Picasaに投稿した画像をニューラルネット(Deep Learning)を用いて画像認識、シーン認識によってラベル付けを行っています。Google+のアカウントがあれば、画像を投稿し"dog"や"car"で検索する事で結果を得られます。

 

このように、機械学習を用いて画像内に写っている物を分類(認識)する技術が多く研究されており、その精度は年々向上しています。Googleは多くの企業や大学教授を買収し結果を出し、Facebookは個人識別の"Deep Face"*2Microsoftも画像ラベル付けと"Project Adam"*3を発表しています。

 

 

- 機械学習 -

 機械学習の学習器は、以下の様に多くのデータを用いてパラメータを調整し、望みの解を出せるような学習を行います(教師あり学習の場合)。

 

f:id:vaaaaaanquish:20141207163844p:plain

 

 

- kazoo04識別問題 -

 GoogleFacebookみたいに学習した学習器を使ってこんな事が出来ればいいよね。

 

f:id:vaaaaaanquish:20141207164159p:plain

 

 

- kazoo04データ少ない問題 -

 機械学習では主に"大量のデータ"を用いて"学習"を行うと説明しました。データは正解情報を持つポジティブデータと、誤答であるネガティブデータを必要とします。ネガティブデータは背景っぽい画像や適当な人画像データセットから用意できました。必要なのはポジティブデータ。Kazoo04を認識する上で必要なデータ…そう、Kazoo04の写真です。まずはインターネットでKazoo04の画像を検索してみました。

 

f:id:vaaaaaanquish:20141207164244j:plain

キレそうです。

 

そこで私は裏ルートを使用しました。

なんと偶然にも私はKazoo04と大学が同じ!なんとなんと偶然にもKazoo04と研究室が同じ!ということで、研究室の画像サーバを漁って、Kazoo04の画像をスクレイピングする作業を決死の手動で行いました。

 ここだけの話、Kazoo04はシャイなのか研究室カメラの写真が少なかったです。とても困りました。「大学生にもなって"俺写真写るの嫌いなんだよ"とか言ってたのかなアイツwwキモww」と思いました。

 画像の少なさには、画像を歪ませたり回転、位置変更、大きさ変更によって学習データを増やし、誤差にも強い学習を行う方法(Over Sampling,Data Augmentation,Elastic Distortion,...etc)を利用しました。一般的には固定的なロゴ認識に強くなったり不均衡データを補強するものが多いですが、Kazoo04の画像の少なさが目立ったので採用しました。後輩がちょうど研究しているので、参考資料も多かった上、この辺りはOpenCVやImageライブラリを適当に使ってよしなに書けますからね。後は、株式会社ウサギィに行った際にKazoo04を盗撮する等してデータを増やしました。

 そんなこんなで私のKazoo04フォルダには、合宿先で浴衣なKazoo04やフットサルで汗を流すKazoo04、歪んだKazoo04、逆さのKazoo04がもうKazooKazooしました。まさにKa動物園04ってね。

 

f:id:vaaaaaanquish:20141207164340j:plain

 

 

- RandomForest -

学習器には"RandomForest"を用います。何故数ある学習器の中からRandomForestを選ぶかと言うと、


Random Forest とその派生アルゴリズム - Sideswipe

Kazoo04が紹介しているからです!

 あのKazoo04が紹介している学習器が精度出ない訳ありません。Kazoo04が良いと言えば良い。Kazoo04がYesと言えばYesなのです。

  RadomForestは「決定木を沢山作って多数決を取る」機械学習アルゴリズムの一種です。Kazoo04も紹介しているように、学習が高速で精度がよく、ノイズに対しても強い等の特徴を持った学習器です。ありがたい事に、OpenCVPython機械学習ライブラリとして有名なscikit-learn*4に実装されており、使いやすさの点でも強力な機械学習器の一つです。今回はscikit-learnのRandomForestクラスを使いました。

 

 - 特徴量設計 -

 機械学習の生成モデル(学習器)にデータを入れる際に、生のデータ(画像であればRGB値)をそのまま入力すると、計算量が膨大かつ学習が難しくなってしまうという問題が知られています。そこで画像の特徴をベクトル量として抽出してから入力にするのが一般的です。今回は、

・メインとなるのは"Kazoo04"か"そうじゃないか"の二値分類であること

・人間でありかつKazoo04の顔である事を判断すること

・実装が面倒なのでライブラリとかで適当に出来ること

を考えてSURF特徴量*5HOG特徴量*6を利用しました。特徴点抽出と勾配の特徴抽出でなんとかしてみましょう。SURFはOpenCVHOG特徴量はPythonのImageライブラリに入っているのでそれを利用します。

 

 

- 学習まとめ -

 特徴抽出をおこなったあとscikit-learnが対応している入力形式にします。大きさを調整したりリスト形式にしたりよしなにしてやります。後はscikit-learnのRandomForestモデルを設定、入力して学習させます。今回のパラメータは大体こんな感じ。

f:id:vaaaaaanquish:20141207164926p:plain

今回の学習構造を書くとこう。 本来は主成分分析を用いたりもしますが、少し面倒なのでこう。

 

f:id:vaaaaaanquish:20141207165001p:plain

 

 

- 画像認識と矩形検出 -

 学習し終わった学習器によって実際の画像からKazoo04を認識させます。では、Google検索で出てきたKazoo04が写っている写真を利用してやってみます。

方法としてはこう。

f:id:vaaaaaanquish:20141207165029p:plain

1.RandomForest入力サイズの窓を作り特徴量を取って検出

2.人が写っていると判断したら赤枠で囲む

3.窓を少しずつ移動させる

4.Kazoo04っぽさを判別するため赤枠の中をさらにRandomForestで走査

を繰り返しします。この方法は、物体の大きさ変化に弱くなることが考えられますが、今回はスケール変化のみで対応しました。

 

 

- 結果 - 

 以上の方法でなんとなくそれとなく適当にPythonで書いてみました。その結果がこちらです。今回は、株式会社ウサギィ様がHTML Japan Cap2014で表彰された際の写真をお借りしました。

 

これが

f:id:vaaaaaanquish:20141207165449j:plain

こう

f:id:vaaaaaanquish:20141207165134j:plain

 

走査するスケールを大きくはしましたが、赤枠が沢山出てしまっています。k-meansを使って沢山集まっている部分をまとめます。平均をとるイメージでこう

f:id:vaaaaaanquish:20141207165553j:plain

 

良い感じですね。ではもう一枚。

f:id:vaaaaaanquish:20141207165840j:plain

そしてこう

f:id:vaaaaaanquish:20141207165902j:plain

 

細かい走査の際に顔部分も自動で切り取ってみます。顔画像をメインでスクレイピングしたので顔の部分はお手の物です。

f:id:vaaaaaanquish:20141207165938p:plain

ああ…Kazoo04…///

 

 そんなこんなでKazoo04を自動で認識し、切り取る事が出来ました。いくつか研究室の画像をテスト画像にして試しましたが、大体Kazoo04でした。細身でメガネでクールなヘアスタイルの同期が居なかった事に感謝ですね。1日講義受けながら適当に書いたら、案外すんなり出来たので良かったなといった感じです。画像のスクレイピングとラベル付けには二日掛けました。後、自分の写真も入れまくって、角度次第でKazoo04と認識される場所が10%くらいある事もわかりました。愛ゆえにKazoo04に近付いている証拠かも知れませんね。

 

 

- 反省 -

 せっかくなのでとことん、しっかり解説しようとか思いましたが、研究が忙しかったので断念しました。Webサービスにしようと思った手前手持ちに公開できるサーバがなかったり、図編集のソフトが死んで手書きにしたり、結果相当に精度が良かった画像だけブログに載せたり、グダグダなAdvent Calenderの足を引っ張る方になってしまいました。Kazoo04の画像が少なかったのと、特徴量設計が甘かったのは痛かったのか、メガネで細身な人が5~10%程でKazoo04になってしまったのも悔しいです。この手のプロジェクトによくありがちな「学習用のデータを作っている時に飽きる」現象も体験し、これやってる暇があったら研究するよなと強く思いました。こんなことばかりやってるからいつもKazoo04に怒られるんですね。精進します。

 

 

- おわりに -

 なんかまあちゃんとデータとか特徴とか分かってればライブラリ使って気軽に教師あり学習が行える世の中になってしまいました(ありがたい)。今回TeX数式を入れるのが面倒それなりに分かりやすいように書いたつもりですが、機械学習だけでなく情報工学は物理やら数学やらの塊みたいな感じです。自分の研究室でこんなゼミ発表したら数式で頭の先からひざまで殴られるレベルです。機械学習に関しては、このような記事が出る程に、様々な知識を要し複雑化しているとも感じます。


機械学習をこれから始める人に押さえておいてほしいこと - Qiita

それでも、この分野に興味を持ってもらえればと思いもあって、少しだけ考えて書きました。最新の研究では、ここに書いたものを応用した沢山の面白い技術が出てきています。他にも機械学習界隈の成長は著しく、ニュースサイト等でも多く見られるようになっています。一緒に超絶楽しい最適化をやってくれる人、機械学習使って面白い事をやってくれる人が増える事をそれなりに想ってます。

 

 

 

 

P.S.

くろていは"Kazoo04"として殆ど認識されませんでした。おわり。

*1:かずー氏に会える機会の総称

*2:参考 http://research.preferred.jp/2014/03/face-verification-deepface-and-pyramid-cnn/

*3:参考 http://www.itmedia.co.jp/news/articles/1407/15/news039.html

*4:機械学習Pythonライブラリ、SVMからDeep Learning、Random Forestまで充実している 

*5:画像から特徴点を探し出しベクトル量にする手法

*6:エッジのヒストグラムを用いてベクトル量にする手法

stochastic average gradientな話

//---はじめに---

 こんにちは。Machine Learning Advent Calendar 2013の11日目を担当することになりました@vaaaaanquishです。今回は大学で研究している進捗としてstochastic average gradient(SAG)についてまとめていきたいと思います。「前年度も誰かがやってたような・・・」と思った方はきっと記憶違いです。よろしくお願いします。

 

//---SAG---

 SAGはNIPS2012で発表*1されたオンラインアルゴリズム最適化手法の一つです。その名の通り更新時に確率的勾配の「Average」を取るアルゴリズムです。このような平均化されたアルゴリズムは、averaged stochastic gradient descent*2やSample Average Approximation*3のように昔から数多くの研究が行われていました(図書館で論文を読みあさっている時に偶然知りました)。今回紹介するSAGでは、ある条件の下で計算のコストが定数オーダー線形収束する事の証明が成されています。要するにとても早いです。とてもすごい。

 

//---SGとFG---

 NIPS2012の論文では、IntroductionとしてStochastic Gradient(SG)Full Gradient(FG)の比較を行っています。なぜなら、SAGが実質これら2つの良いとこ取りのようなアルゴリズムであるからです。

 FGは損失関数の和等を最小にしたい時、有限のサンプルの平均から最適化します。所謂「バッチアルゴリズム」です。FGはそのアルゴリズム上、凸な問題と一定のステップサイズを考えた時、k回の更新によって{\mathcal{O}(\rho^{k})}で線形収束します({\rho}<1)。しかしながら、全てのサンプルを見る為に、毎回計算にかかるコストが一定で大きいというデメリットがあります。

 それに対してSGは、サンプルの中から一様に(確率的に)データを選び更新を行う「オンラインアルゴリズム」です。こちらは全てのデータを見る訳ではないので計算コストが小さくなります。収束もFGのようにはいかずとも{\mathcal{O}(1/k)}が期待できます。

 SAGは、より強い仮定のもとで、これらFGの収束とSGの計算コストを最適に取り込み、より高速な最適解への収束を可能にしたアルゴリズムです。

 

//---The SAG method---

 SAGの反復は以下のようにして行われます。

 {x^{k+1}=x^{k}-\frac{\alpha}{n}\displaystyle\sum_{i=1}^{n}y^{k}_{i}}

 {y_{i}^{k}=f^{'}_{i}(x^{k}) \;\;\;\;\;\;\;\;\;\; (i=i_{k}) \\                y_{i}^{k-1}                             (oterwise)}

 上式の{f_{i}}は有限のデータ、{i_{k}}はランダムな訓練例です。一見上の式だけ見るとFGのように見えますが、実際はオンラインアルゴリズムのようにランダムな訓練例によって更新されます。しかし、更新の際に使うGradientは、その時点までに見てきたデータを復元し、その平均を用います。

 つまり、ランダムに選ばれた訓練例を記憶しておいて、それらの平均を取って更新に利用すれば、回数を重ねる毎に見るサンプルデータが増え、徐々にFGで得られるようなFullGradientに近似されるといった考え方になります。

 実装の際には、「現在の(平均化された)Gradient」に加えて「今まで見たデータを復元出来る情報」を保持しておく必要があります。これは、同じ次元のベクトルとして保存しておけば良いので、やたらメモリを食う等という事もありません。さらに、最初の数回SGを回すと高い収束率を維持することが出来ます[要出典]。

 

//---強い仮定---

 SAGは、どんな最適化問題に対しても良い性能を発揮する事が保証されている訳でもありません。主な条件としては「問題がStrongly Convex(強凸)」「二回微分可能である(≒リプシッツ連続)」があります。前者は機会学習等では満たされない条件ですが、正則化項の追加によってほとんどの問題で解決する事が可能でしょう。後者は簡単な話急傾斜になるような問題で無い事が求められます。

 

//---Results---

 以下は論文内での実験の結果です。

f:id:vaaaaaanquish:20131207233940j:plain

 見て分かるように、SAGの良い収束速度を示しています(自分が実装した訳ではないので一概には言えませんが)。Objective mlnus OptimumもTest Logistic Lossもどちらも成果を出しているという事で素晴らしいですね。問題によっては、SGの倍以上の性能を出せるというならば、色々な所で実装される日も近いのではないでしょうか。

 

//---SAGとこれから---

 そもそも今平均化されたオンラインアルゴリズムが話題となる理由として、深層学習等の学習器の発展があると考えています。私もニューラルネットを学び、DeepLearningを知り、応用を考えてこのようなアルゴリズムを勉強し始めました。様々な最適化問題に簡単に実装出来るようになる事がこのアルゴリズムの発展にも繋がると考えています。さらには、他のFOBOSのようなオンラインアルゴリズムでも似たような平均化手法が使えたり、もしかしたらSAGが非効率になるような物も見つかるのかも・・・。楽しみですね。私自身実装して実験している最中ですが、気になったという方は一度試してみてはいかがでしょうか。

 (「勉強会で証明を解説します」という時は連絡してくれると嬉しいです///)

 

//---おわりに---

 以上で私のMachine Learning Advent Calendar 2013記事を終了します。ほぼ「卒論に向けてのメモ」状態で申し訳ない気持ちでいっPythonです。内容の薄い記事ですが、このような機会を提供してくれたnaoya_tさん、紹介して頂いたkazoo04さんに感謝しております。今後大学院で学会等にも発表者として参加出来るよう精進して行きたいと思います。先輩方の意見と記事を楽しみに残り少ない2013年を過ごしたいと思います。少し早いですが、良いお年を。

 

//---参考---

楽しいAutoEncoderと学習の世界

今回はAutoEncoderについて書きます。以前ほんのちょっとだけ紹介しましたが、少し詳しい話を研究の進捗としてまとめたいと思います。(AdventCalendarに向けて数式を入れる練習がてら)

 

まず、AutoEncoderが今注目されている理由はDeepLearningにあると言っても過言ではないでしょう。DeepLearningは様々なコンペディション、例えば、ILSVRC2012(画像認識のコンテスト)や化合物の活性予測で、従来の手法を抑えとてつもない成績を収めて注目を浴びました。今年のILSVRC2013ではその殆どがDeepLearningを取り入れているほどです。さらには、「一般紙であるNewYorkTimesにまで記事が掲載」「第一人者であるHinton先生を学生ごとかのGoogleが買収」「BaiduがシリコンバレーDeep learningの研究所を作る」等学習界隈ではかなり注目された技術の一つです。Googleが猫画像認識で結果を出し、iPhoneのSiri(ソースが不確かですが)にも使われています。

 

このものすんごいDeepLearningですが、学習器の形としては多層ニューラルネットワーク(以下、多層NN)になります。元々多層NNの研究は数多くありましたが、NN全体の学習を行う際のパラメータ更新の難しさ等の問題がありました。そこでDeepLearningでは、事前学習という形で各層毎に教師なし学習を行っておいて、少ない変数で入力情報をうまく説明できるように学習(情報圧縮)しつつ、良い初期パラメータを先に持っておいて全体の教師あり学習に挑もう、という形をとっています。こうすることでNN全体の学習における調整も楽にできるようにる(事後学習)という訳です。

 

DeepLearningの事前学習の「各層」の要素は主に

  • RBM : Restricted Boltzmann Machine (制限付きボルツマンマシン)
  • AutoEncoder

 の二種類に分類されます。どちらも情報圧縮を行う事ができるNNですが、学習の過程が大きな違いです。ここではAutoEncoderの学習について説明していきます。

 

 AutoEncoderの学習は一般的なNNとほとんど変わりません。大きく違う点は「出力が入力を再現するような学習」を行う事です。

f:id:vaaaaaanquish:20131203011213j:plain

上の図で見ると、inputとoutputをサンプルを学習させて同じに出来れば、hidden(隠れ層)では少ない素子数で情報を表現出来ている、と考える事が出来ます。ここで「学習」はエンコード式とデコード式のパラメータの調整となります。(ちなみにDeepLearningでは学習させたinputとhiddenを使ってつなげていきます。)

AutoEncoderのDecode式とencode式は入力をxとすると以下のようになります。

{encode \;\;\;\; : \;\;\;\;y = s(Wx+b)}
{decode \;\;\;\; : \;\;\;\;z = s(W^{'}y+b^{'})}

上式の{s()}シグモイド関数を表し、パラメータが{W}{b}とになります。この2式で情報xを圧縮し復元するのですが、{W}{W^{'}}は転置行列を使う(tied weightという考え方)というのがありまして、そちらを使用すれば学習で求めるパラメータは実質({W,b,b^{'}})となります。しつこいですが「学習用のデータ群から、この『パラメータ』を調整して入力を再現するような出力を出せるようにする」のがAutoEncoderの学習です。この学習はよく、入力と出力の平均2乗誤差の最小化問題や交差エントロピーの最小化問題として捉えられます(数式割愛)。

 

ではその学習(パラメータの更新)ですが、主に以下の2種類に分ける事が出来ます。

詳しく分けるともう少し分けられますが主にこの2種類となります。まず2つの大きな違いとして、「いつパラメータを更新するか」があります。最小化問題はその時点の勾配を見る事で最小点に近づいていく訳ですが、バッチアルゴリズムでは、その時点での全てのデータの全ての勾配を計算し、その平均を利用してパラメータを更新します。それに対してオンラインアルゴリズムでは、ランダムに選んだ1サンプルから勾配を計算してパラメータを更新します。勾配の計算は微分やらなんやらで計算量も多くなる訳ですから、その回数が減るオンラインアルゴリズムは計算量が少なく早いと言えます。しかしバッチアルゴリズムは多くのデータの平均というより正確な勾配を計算するので、収束率が良くなります。

(上手い表現ではなくすみません。その上実はこの関係は絶対でなかったりするので一概には言えません・・・)

 

AutoEncoderでは一般的にオンラインアルゴリズムが使われています。理由としては早さが挙げられると思います。多くの学習データを見ることや、DeepLearningのように多層に繋げる場合も考えると学習の早さはかなり重要になるからです。その中でもSGD(StochasticGradientDescent:確率的降下勾配法)というアルゴリズムがよく用いられます。SGDはデータ点の誤差の和で表現される最適化問題(AutoEncoderのような問題)に使われるアルゴリズムで、誤差の和の平均(期待値)の面倒な勾配計算をデータの実現値を用いて解決します。

 

具体的にSGDの学習をパラメータ毎に式に起こすと以下のようになります。

{W^{new} \;\;\;\; = \;\;\; W^{old}\;\;\; + \;\;\; \frac{\epsilon}{N} \displaystyle \sum_{n=1}^{N} \frac{\partial L}{\partial W}}
{b^{new} \;\;\;\; = \;\;\; b^{old}\;\;\; + \;\;\; \frac{\epsilon}{N} \displaystyle \sum_{n=1}^{N} \frac{\partial L}{\partial b}}
{b^{'new} \;\;\;\; = \;\;\; b^{'old}\;\;\; + \;\;\; \frac{\epsilon}{N} \displaystyle \sum_{n=1}^{N} \frac{\partial L}{\partial b^{'}}}

上式の{L}は目的関数(交差エントロピー等)です。第二項の\epsilonで1回の更新の幅を調整する式になります。

こちらの方のブログ↓

Denoising Autoencodersにおける確率的勾配降下法(数式の導出) - Yusuke Sugomori's Blog

に第二項の微分式の導出過程も掲載されています。 これに基づいてパラメータを更新していけば出来るAutoEncoderの学習が行える訳です。パラメータ更新の3式の実装はリンク先のブログの数式をそのまま実装する事で苦労はしないと思います。特にPython等を使えば、自動微分やnumpyの配列、外積内積計算によってより苦労する事なく短いソースコードで実現する事が出来ます。

 

さいごに、C言語等の配列でも実装すべく、配列同士の微分式を考えます。ライブラリ等を使わない場合ですね。こちらは、研究室で悩んだ挙句先生が「暇つぶしにやったよw」と言って考えてくれた資料になります。正直かなりコツコツ考えないと出来ない数式なのでかなり尊敬しています。本当にこの研究室で良かった。

https://skydrive.live.com/redir?resid=4834E9356B3DA117%21111

 

以上でAutoEnocederを実装まで持っていけると思います。(多分)

交差エントロピーを使った話は発生確率の話から入りややこしくなるので「誤差を最小にする」用の目的関数ですと割愛しました。その他不明な点や、ご指摘等はコメントでお願いします。

//----------

初学者であった自分が分かりづらかった点をなるべくわかりやすく、次の初学者の為にと書きました。「初学者の癖に文面ガー」等の意見があると思いますが、これから大学院生となってさらに向上していきたいと考えていますので熱い応援よろしくお願いします。

eclipseの導入-SDK and AVD Manager- における問題点

一応iOS開発とAndroid開発のブログを他でやっていたのでコピペ記事。

 

Androidアプリ開発ではeclipseを導入する事でプログラミング効率が向上する(キメ顔)

 

ちなみに開発はWindows7Mac OS 10.4


sakurayama様のサイトを参考にクリックのみで進む。

development@sakurayama


ここで「Android SDKをインストールする為のAndroid SDK and AVD Managerが起動しない」事がある。Android SDK and AVD Managerを起動しようとすると一瞬コマンドラインが開き閉じるとか。  


4つ目の方法が一番効果的だと思うんだけど、Manager起動せず。
javaの旧バージョンにリンクしてしまうらしい。

 

ごちゃごちゃした結果最終的にC:\直下へインストールしたところ問題等何もなくSDK Managerが起動した。


考察:javaのpathについて
>find_java内でpathを更新してるけど上手く行かない
>重要なのはjavaのアップデートとWindowsファイルが扱えるような場所にEclipseがある事なんじゃないかなと

 

では楽しいAndroidライフを