活動報告 No.152 今年もありがとうございました! & 'C'と'CUDA'で自作ディープラーニング!!
カテゴリ: 通常

どうもおはこんばんにちは!
1週間の間にC&CUDAとJavaScriptとPythonでそれぞれ違うプロジェクトの為にプログラミングをしていた2年のマエダです。


〜〜〜

今年も残すところあと1日ほどとなってしまいましたねぇ〜。このヒュー研ブログの今年初めての記事は、1月5日の「活動報告No113 (近藤科学の)サーボホーンの話」という記事ですね。この記事は私の1つ上の学年の先輩の記事です。記事内でサーボホーンを持った骨(ボーン)が登場するのですが、ダジャレかと思ったら最初はそんなつもりなかったそうな。


んで、そのあと1月15日のが今年初の私の記事です。(活動報告No114 Webサイトを作ってみよう 1/3 ~学習編~)
懐かしいなあ。。結局ヒュー研の公式ホームページはこのようになりましたが、当時の私はコーディングスキルはあってもユーザビリティの概念が欠如していたので、なんとも幼稚なページを作成していた頃です。


現在は表向きのページは特にいじっていなくて、ヒュー研主催の関東学生2足歩行ロボットの初開催にむけての準備が進んできたら、そのページを新規で作ろうかなって思っているところです。


定期的に自分からWEB制作の案件というかその類をボランティアでやってWEBコーディングの技術を損なわないように努力してきたのですが、最近はまぁディープラーニングの方でCとCUDAばかり触っていることもあり、コーダーとしての自信を失いつつあります(笑)。来年の3月くらいに特に使用用途もないWEBサイト作ってみようかなと思っています。どこかから依頼があればそっちやりますが。


〜〜〜

話がWEBの方に行ってしまいましたが、今年はWEB系だけでなく、部活動を通して面白い体験などしました。後続にディープラーニングの記事が控えているので端的にまとめますが、去年と比べて大会や講演会等のイベントで多くの人とお話する機会がありました。ま、こういう言い方すると語弊がありますが、去年はそんな機会がなかったのではなく自分から作りに行ってなかっただけなんです。。


多くの人の中には何年もロボット製作に関わっている人であったり、最近始めた学生さん、ロボットをパートナーとした芸人さん、起業したエンジニアの方、研究室の先生などなど、、いち大学生としても、部の広報としても有意義な交流ができたんじゃないかと思いました。(だから他の部員たちも名刺作ろう)


〜〜〜

そういえば今年私が書いた記事はこれで23個目ですっ!来年も元気していたらちゃんとブログ書くはずなので、来年もどうぞよろしくお願いします!


それでは、良いお年を!(^∇^)ノ






なんかもう完全に締めな雰囲気ですが、ここからは興味のある人はどうぞご覧になってください。


今からやることは、以下の 画像1 に対して、ディープラーニングを用いて 画像2 のようにロボットを検出してもらおう!というプロジェクトです。



robo.jpeg 

画像 1



robo.jpg 

画像 2





今回作成したニューラルネットのコードは、擬似乱数生成のxorshift方式(論文はコチラ)以外は全て自分で書きました。

使用した言語はC言語とCUDAです。CUDAはNVIDIAのグラフィックボードを並列演算機として動作させるためのプログラムです。

C言語では標準で擬似乱数生成関数がありますし、より高品質と言われるメイセンヌツイスタも選択肢としてあった中でxorshiftをあえて選んだ理由は特にないです、ハイ。。計算が排他的論理和とビットシフトだけで「これだけ?」と思えるコードで十分実用的な擬似乱数を吐き出してくれるのを見て何か使いたいなあと思っただけです。


ニューラルネットはもちろん物体検出用のです。全体構造は完全畳み込みNNで出力テンソルが画像のグリッドに相当し、同層の各チャンネルがそれぞれグリッドの相対中心座標、画像全体の相対サイズ、物体の有無を表す信頼度、そして分類表示を持っています。知っている人は知っていますが、YOLOですね。ただ、私の作ったNNは完全なYOLOではなく、収束や精度に関する少々複雑な構造を取っ払ったシンプルなものです。そのため収束遅いし精度そんなよくないです。


ネットワークは以下の通りです。

層種 入力サイズ 入力チャンネル フィルタサイズ 出力サイズ 出力チャンネル
Conv 416 3(RGB) 3 416 32
MaxPool 416 32 2 208 32
Conv 208 32 3 208 64
MaxPool 208 64 2 104 64
Conv 104 64 3 104 128
MaxPool 104 128 2 52 128
Conv 52 128 3 52 256
MaxPool 52 256 2 26 256
Conv 26 256 3 26 512
MaxPool 26 512 2 13 512
Conv 13 512 3 13 1024
Conv 13 1024 3 13 12(BOX*5 + CLASS)

たったの12層しかないNNなので、計算量削減のための1x1畳み込み層は使っていません。あと、最大値プーリングの後でチャンネル数を倍にしています。

畳み込み層のストライドは1、最大値プーリング層のストライドは2です。各グリッドの持つアンカーボックスは2つとし、2クラス分類を考えるので、2*5+2=12が出力層のチャンネル数になります。


各畳み込み層の流れは以下の通りです。


順伝播データ

畳み込み

Leaky ReLU (slope=0.05)

バッチ正規化

addバイアス



各最大値プーリングのアップサンプリングは、順伝播時に記憶した最大値の場所を元に、誤差データをその場所に配置して、他は全て0になる方法を使いました。ちなみに本家YOLO(Darknet)はより正確な検出精度を出すために下層の誤差データを用いた(多分独自の)アップサンプリングをしています。


畳み込みとバイアスの更新および誤差データの算出はともかく、バッチ正規化の逆伝播が気になりますよね!(ますよね!)


別に私が解説する訳ではないですが、計算グラフを使って解いている人がいたので、そちらを見るとわかりやすいかと。めっちゃ丁寧に解説してくれていて好きです。


Bacth Normalization Backpropagation:

https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html


上記のサイトではPythonとその強力なライブラリであるNumpyを用いて実装されています。記述量見ているとやっぱPythonいいよなぁ。PythonとPython用の機械学習ライブラリをそのままVHDLとかに落とし込めれば最高なのに。たまに変数がリストなのか何なのかわからなくなりますが(笑)。



じゃ、構造のあらかた提示したところでアノテーションを作っていきましょう。

アノテーションはDarknet方式とします。私は以前にDarknet専用のアノテーション作成補助ツールをGitHubにて公開したので、そちらを使います。


BB-Engine-forDarknet:

https://github.com/ShimizuMizu/BB-Engine-forDarknet


しかし今回はC言語で画像をリサイズする機能を実装していないので、アノテーション作成時に補助ツールがリサイズするようにします。また、読み込み形式はBMP形式です。BMP形式は素直にBGR値を保持しているので、データ容量が大きいというデメリットを除けば初心者には扱いやすい画像形式です!


任意にリサイズして保存するには、BB-Engine-forDarknet.pyの261行目を書き換えます。


# 変更前
shutil.copy(annotation_img_path, self.w_folder + "/" + annotation_img)

# 変更後
img = Image.open(annotation_img_path)
img_resize = img.resize((416, 416), Image.LANCZOS)
img_resize.save(write_img_path, 'bmp')



今回学習に使う画像データは冒頭に載せた、千葉工SKKさんのささペロリン(左)とヒュー研のテオ(右)の画像です。



tk_001.jpg tk_002.jpg


アノテーションは以下のように無事生成されました。


annotations_004.jpg robo-txt.jpg

ro.png 


ちゃんと画像が416x416にリサイズされました。今回はささペロリンを0番、テオを1番にラベル付けしました。

そして、今回は0番にラベル付けされた、ささペロリンのみを学習、検出しようと思います。



それじゃ早速...


教師データ_006 

教師データを書き込んで...


繧ソ繝シ繝溘リ繝ォ CMakeでMakefile生成してmakeでビルドして、いざ実行!!



言い忘れましたが、損失関数は残差平方和です。物体の大きさ、中心座標で一つの残差平方和を共有し、物体の有無に関する信頼は単体で、そして分類は全分類で一つの関数を共有しています。分類は収束を考えてsoftmax関数だか交差エントロピー誤差だかを使った方がいいのかもですね。


そんで、以下が損失の推移です。


損失の推移 


うん、まぁ。フィルタとバイアスの初期値はさっき紹介したxorshift方式を採用して -0.5〜0.5 の間で擬似乱数を生成していたので、それを考えるとちゃんと勾配を認識してくれたんじゃないかなと思います。


上のグラフからは読み取れないですが、一番最後の損失は 1.633719 でした。でかい!!



ほんじゃもっと詳細に見ていきましょうか。まずは物体の位置に関する出力テンソルです。


物体の存在可能性数値領域 



...とは言ってもこれだけではぱっと見わかりづらいですよね。


という訳で、出力が 0.5以上のマスを黄色 にします。


物体の存在可能性領域_スコア0,5以上 



確かにさっきのささペロリン君の位置に近いですね。


お次は中心グリッドです。


最も数値の大きいセル_物体の中心 


中心グリッドは閾値とかじゃなく、この169マスでもっとも大きな数値を黄色にしました。


さらに上の中心グリッドが保有する中心座標と物体の大きさを一気お見せします。


上_x_下_y 

▲ 上がx座標、下がy座標 ▲


上_width_下_height 

▲ 上が横幅、下が縦幅 ▲




以上の数値を可視化します。



出力可視化 


赤実線枠:物体の大きさ

赤破線枠:物体の中心が含まれているグリッド

赤丸:物体の中心点

黄色領域:物体のグリッド別領域(人間の方から閾値を設定可能)

と、こんな感じで、無事にそれっぽい場所をニューラルネットが予測(というか学習)してくれました。


見てもらった通り、中心座標や閾値で絞り込める領域についてはいい結果を出しているものの、物体の大きさを表す数値がイマイチですね。これはそもそも今回自作したニューラルネットが本家Darknetと比べて簡素化された学習であること、そして、12層しかネットワークを深くしていないことによる損失の収束の遅延が影響しているものと思われます。


人間の画像識別率を超えたというMicrosoft発ディープニューラルネットは156層もの階層構造になっているので、たった12層しかないのに場所と分類まで大まかにできたことを考えると、まあ上出来かなと思います。


この微妙な精度をどうにかするために、ニューラルネットの改善をこれから続けていこうと思います。学習途中には損失だけでなく、逆伝播毎のフィルタ・バイアスの最大・最小誤差の推移を観察していました。データとして残している訳ではありませんが、ちょくちょく見ていて、何となく上位層へ誤差を伝播しきれていない様子でした。上位層に行けば行くほど、誤差が小さいのです。


上位層ほど誤差が少なくなっている原因としては、最大値プーリング層のアップサンプリングに原因があると考えています。サイズ2のストライド2で順伝播をやると、最大値をそのまま返した場合、単純に考えると誤差は4分の1に減少してしまいます。本ニューラルネットでは高解像度の画像から13x13という比較的精細なグリッドに持ちこみ、物体検出をして見たいと思って先に紹介したような12層NNになったので、プーリング層の操作は学習にかなりの影響が出てきます。これについてはプーリング層を平均値プーリングにするか、最大値以外は0以上1未満の定数で商をとって逆伝播するか、と色々対策を考えています。



以上で長い後段の記事は終わりです。


今年中に自作ディープニューラルネットワークの結果報告ができてよかったです。今後はもっとCとCUDAと深層学習の勉強を続けてROBO-ONE autoにでも出てみたいですね!



てなことで、前段と重なりますが、みなさん良いお年を。


ほんじゃ、まったのぉ〜♪(/・ω・)/ ♪


スポンサーサイト
編集 / 2017.12.30 / コメント: 0 / トラックバック: 0 / PageTop↑
NEW ヒュー研ウィンドブレーカー完成!
カテゴリ: 通常 / テーマ: 今日の出来事 / ジャンル: 趣味・実用
 こんにちは。2年の中野です。
次長が発注していた大会運営、どこか大会や公演にお邪魔させていただく際に着るヒューマノイド研究部のウィンドブレーカーが到着しました!



paka1.jpg
▲ まえ

paka2.jpg
▲ うしろ

paka3.jpg
▲ 前胸部分に「東京電機大学」とヒュー研の英表記

paka4.jpg
▲ 後ろの ヒューマノイドケンキュウブ
とフライングヒューマノイド(ロボット)



このウィンドブレーカーを着てさまざまな大会、公演に参加させていただくかもしれません。
見かけたらどうぞお気軽にお声かけください!



Pasta.png
宣伝



 ヒューマノイド研究部は11月2日、3日、4日と開催される鳩山祭(東京電機大学 鳩山校舎)で今年も二足歩行ロボットのイベントを開催します。


二足歩行ロボット同士のバトルはもちろん、二足歩行ロボットの特性を生かしたビリヤード、ピンボール、ボーリングも予定しています。

場所:東京電機大学 鳩山校舎 6103教室
イベント時間:一回目 11:30/ 二回目 13:30 / 三回目 15:30

 (11月2日のみ 13:30、15:30の二回開催となります。)





編集 / 2012.10.21 / コメント: 0 / トラックバック: 0 / PageTop↑
Pastaが……!
カテゴリ: 通常 / テーマ: 今日の出来事 / ジャンル: 趣味・実用
こんにちは。2年副次長の中野です。
最近はみんな11月鳩山祭に向けて機体の作業に追われていて夜遅くまで残っています。


p2.jpg

ん?


p1.jpg

おや、Pastaが寝ているぞ。 ってあれ……?




p3.jpg

!!!!


い……息してない!



p4.jpg

あっ

p5.jpg

中身が食べられてる!!




 昨年完成したPastaさんですが、1年生の新機体のために脳みそを提供してくれました。感謝。




Pasta.png
Pasta




 ヒューマノイド研究部は11月2日、3日、4日と開催される鳩山祭(東京電機大学 鳩山校舎)で今年も二足歩行ロボットのイベントを開催します。


二足歩行ロボット同士のバトルはもちろん、二足歩行ロボットの特性を生かしたビリヤード、ピンボール、ボーリングも予定しています。

場所:東京電機大学 鳩山校舎 6103教室
イベント時間:一回目 11:30/ 二回目 13:30 / 三回目 15:30

 (11月2日のみ 13:30、15:30の二回開催となります。)




編集 / 2012.10.18 / コメント: 0 / トラックバック: 0 / PageTop↑
逆境無頼ヒュー研~ニソコン編~
カテゴリ: 通常
.             ヽ//ヽ,,-―-、
            ∠..   ´ -=-、    回転棒と聞いて・・・・
            √         `ヽ    すぐある予感が走った・・・・
            |      、  、  |,
´           |_. ´く.|.|ヽゝ` 、、 _|       この勝負運否天賦じゃない・・・・・・
           (F|-==ii ii∠=-||ぅ)  おそらくは・・・・・・ 
            に| ー゚‐´|| ー゚--´|=|ヽ、   棒にあたった者がが堕ちていく・・・・・ 
          . .じ|u  、||,,. u  |J  ヽ     勝つのは 地道にくぐり
         f´ /|. ヽ、-―--- / |ヽ、 ヽ     ゴールにたどり着いた者・・・・・・!
      ,,,,―ニ/ レ,  ヽ === /j. | |ニー
   -ニ― ̄ /.  .|.  |.ヽ  / |  |  |  ̄ニー 、
  /|     /    |.  | `v´ |  /       ̄| ヽ
 / |   ム--⌒ヽレル,|   |  /         |  |
 |  |          | ヽ /   ´  ⌒     |.  |



こんばんは!佐々木です。
当ブログは誰でもウェルカム・・・じゃなくてニソコンもう少しですね。
カイジネタばっかですみません(笑)
上のカイジはまったく頭使っていませんが自分は考えましたよ回転棒攻略の秘策・・・!
「2日続けての豪遊は猛省渡りっ・・・!」



                _           ニ / l l
             /´´,ィ〕           /       これなら気が付けば……
  ニ / l l   ,_   /  'ーっ          /ニ7
   /   /777/  /  ./ ̄             /         通過っ…!
  /ニ7 {   し'7/ ゙̄7/    ,. ''´ ̄`ヽr:z   :
   /   ヽ.  ノ { /〈/   /    _,、 ゝ       _ f'h、 ヒュー研チーム
    :   |ー-|  X ,.へ    !   r'7/,ゞ7レリ       (.くノ ' 'ヽ  2回続けて
  ,rf'?   !   !// V   \_l   y/__ヽ,        .〉   ノ   通過っ…!
 〈  レフ .!    ̄/ ̄ ̄/ /   ,.イ | r'::   、    /   /´
  ヽ  く  `‐! !-l__/ /イ / / ̄`<:: _ ヽヽ.  /ー-v'   
.   V⌒ヽ_, l l-‐ヽ /  ´ l/ レ'      ,ゝ、  ̄7 i‐-'  / } }  やったっ……!
   ヽ    ! !   ∨   /       /   \/l. !   ./  ノノ
     \__,,.ゝヽ''7    ./ ニ / l l   、   /ソ ,'─‐'   r‐ 、  さすがの回転棒も
         /    /   /     ,イ ヽ./ / /、_ __/  ´ヾ、 2回連続
.        /    ノ   /ニ7   /;'|___ゝ'/   }   __,.へ)   通過は
       <、   ./     /   /;' | '´イ ` ー─‐'-‐'''´    猛省するだろっ…!
     /:::`::::ー- 、      :  /;'  !   L_    ノ丿



30cmの高さの回転棒はこれで突破できるはず!
まあ最終的に陸で平泳ぎする形に収まったんですが、うちの他のチーム回転棒対策してないけど大丈夫だろうか?
てゆうか他の参加者の方々がどんな対策してくるか気になるなあ~
KHR-3が吹っ飛ばされる威力だしなにかしら考えてると思うけど



あ、5月下旬からヒュー研スケジュール群というものを導入しました!

DSC_0449.jpg
↑ブース前に貼ってあるスケジュールたち

前回の芝浦ロボフェスで各チームでスケジュールの管理が出来ていなかったので主にROBOT JAPANを目標に設定してスケジュールを立て直しして、それを貼り出すことで他の班のスケジュールも見れるし管理しやすいのではないかと考えて導入しています。

うまく活用してる班もあるからそのままやっていこう


編集 / 2011.06.07 / コメント: 1 / トラックバック: 0 / PageTop↑
かようび!
カテゴリ: 通常
こんばんわ!佐々木です。

今まで8時までしか使えなかった作業場が、昨日から9時まで作業場が使えるようになりましてどうやら新機体もロボフェスに参加できそうな感じです。
法政さんは7時までだったらしいのでうちより大変だなあ…と思いつつ配線作業やらモーション付けなどをしていました。


さて今日は毎週恒例のヒュー研会議でした。
今回は主に1年生の学園祭イベント企画に関する企画発表。

ヒュー研ではロボットを作る際にチームで企画書を全体会議にて提出、それが通ったら図面作成開始、図面チェック、製作開始という手順を踏んで開発を行っています。
他の大学さんはどうやっているのかわかりませんが、企画書から作っているのはうちの大学の文化系サークルでやってるのはヒュー研だけでして、やっぱり1年生は慣れない企画書と先輩からのダメ出しに苦戦中といったとこです。


そして今日の会議で気がついたことは3つ!

1つ目!
横のつながりが結構希薄

というのも今日の会議で2年生の一人が上げた問題点を2年生全体が把握していないということが浮き彫りになりそのせいで部長である自分が対策を打てなかったことがありました。
そのせいで部長→次期部長→2年生という指示系統も機能していないことがわかり組織として破綻してした事。1年生の企画内容が班で連携取れていないせいで矛盾が発生。という自体を招いてしまいました。
自分の代は4人しかいないので結構盲点…。
先輩を一人付けて学年ごとの会議を週1位で設けたほうがいいという方向に決まりました。


2つ目!
部の制度が結構限界

今あるヒュー研の制度は先輩が少人数の頃に作った制度だから限界がちらほら見えてきましたよ。毎年10人近い人数が入ってくるなんて想像してませんでしたからね。図面チェックのあり方、会議のあり方、企画書の書式、大人数用にしないともう限界ですね。
大人数うれしいけど活動はしづらいジレンマ…。
これは2年生と進めていこう。


3つ目!
先輩の意図や言葉の意味が伝わらない

先輩達が作った企画書制度もその真意や意図まで引き継ぐのって難しいですね。自分も部長という立場になって組織の勉強とかして初めてその意図がわかりましたし、ずっと続けていく価値のある物だと気が付きました。
ただそれを全員が知っているわけではなくて自分で見出した後輩と自分が直に教えた後輩2人の計3人しか理解していないという感じ。
例えば企画書の項目で、「問題点」という項目がどんな意味を持つかということすら把握していないという感じ。本来、企画書での「問題点」というのは、企画段階で判断できないことの判断を委ねるとか、100%成功するかどうか分からないけどそれを実行していいか許可を取る場合とかそんな時に使われる。なのにまだ未検討の課題を問題点に入れたりとかまちがった項目の使い方をしてたりとか。
これは各項目を説明していったら後輩も納得したので各項目の解説を入れたテンプレをつくろうと思う。


結構重い内容かもしれないですけど、内側からこんな意見が言い合えるのもみんな真剣にやってくれているからじゃないですかね。
来年はとりあえず安泰だな!
ではノシ
編集 / 2011.05.11 / コメント: 1 / トラックバック: 0 / PageTop↑
プロフィール

ヒュー研の中の人

Author:ヒュー研の人
このブログは東京電機大学理工学部ヒューマノイド研究部の公式ブログです。2012年から部に昇格しました!
その日の活動や大会の記録をできるだけ更新していきたいです!!

☆だいたい金曜日前後に更新します☆

FC2カウンター
カレンダー
03 | 2018/04 | 05
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 - - - - -
リンク
ブロとも申請フォーム
携帯でみるには↓
QR