ぽきたに 〜ありきたりな非凡〜

日々の独り言とちょっとした発信

地方住みの情報系大学院生による東京就活体験記

こんにちは.たっきーです.
就活を終えました.
ので,感じたこととかを冷めないうちに書きます. f:id:tacky0612:20190622084118j:plain

目次

TL; DR

愛知→東京の就活終わった.業界はIT系とだけ.つらかった.
時間とお金には限りがあるので受けたい企業はあらかじめ目処を立てといたほうが良いよという細やかな助言.
このエントリを読んだからといって得られるものはありません.

なぜ書くのか?

僕自身,就活をするにあたってこういうブログだったり,Twitterだったり,先輩に相談したりしていたので,僕もひとつのサンプルとしてこれから就活を始める人達の参考程度になれればなぁと.
Give and Take.
あとは承認欲求.
言葉が稚拙で雑ですがお許し下さい.脳みそから出てきた言葉を直でタイピングしています(?)

僕について

  • 愛知県(名古屋ではない)の国立大学の情報工学系大学院生M2(2020卒)
  • 学部は私立F欄の機械工学部を卒業
  • 研究は機械学習やってる
  • 遊びたい&生活したいので10万円/月を稼ぐ学生アルバイター

愛知は大都会名古屋があるから地方ではないみたいな声があったりしますが,僕は静岡寄りの愛知県民なので地方民とします(?)
細かいことやスキルはRESUMEに書いてあります.

www.resume.id

後はTwitterとか.

twitter.com

就活を始めるまで

なぜ地方から東京?

完全に気まぐれです.なんとなく東京で生活してみるか〜〜〜転職もしやすそうだしなぁ〜〜〜って気持ちです.
面接のときの建前は「東京は最新の技術に対しての情報量がすごくて,僕もそういう最新の技術に触れたくて〜〜」とか「カンファレンスがよく開催されていたり、勉強会が頻繁でそれらに参加したくて〜〜〜」とか適当に言ってました.そういうの参加したこと無いですが.
あとは,まぁ和歌山県のど田舎(実家は徒歩1分圏内に山・川・田んぼ,車5分圏内に海)出身で,今は愛知県の中途半端な都会なのか田舎なのかよくわからないところに住んでいて,次の住むところはとびっきり都会にしてみるか〜〜〜って感じです.

就職活動開始と受けた企業数

2月頭から少し就職活動を意識し始めて,通年採用やってるメガベンチャーとかにエントリーしてみたりしてました(怒涛のお祈り祭りでした)
3月頭に就活解禁.就職に対するモチベーションがなくって3月頭に開催された5日間ある学内企業説明会は一回も顔を出しませんでした.というか,知ってる企業が殆ど無い. 説明会に参加した企業は16社.全部東京のIT企業(本社は別の場所にあるのも)です.
エントリーした企業は9社. 内定をもらえた企業は1社です. 理系大学院生だけど,これは多いのか少ないのか…???(わからん)(僕は多いと思う)(疲れた) 内定を貰えた社が第一志望だったので,内定の通知を受け取ったその30分以内に最終選考まで残っていた3社には辞退の電話を入れました.その後すぐに両親と親しい友人に連絡を入れました.

企業選びで大事にしてたこと

  • IT業界
  • 自社サービスもってること
  • 私服勤務
  • 椅子やディスプレイなどが選べると良い
  • 福利厚生 です.

僕はインターネットとかそれに準ずる文化とかが好きで,そのインターネットを支えたいし,技術的な話題も好きなのでIT業界で働きたいなって思ってたのでこの業界を志望しました.あと,僕は自分のこととか身の回りのこととかを語りたがりなので,どんなサービスを展開している会社なのかはっきりしている方がよかったです.
私服勤務.これは結構大事でしたね.スーツ着て働いてる自分なんて想像できないですし.そして何より動きが楽.大事.
今の研究内容が活かせる環境とかはあまり意識してませんでしたね.そもそもあんまり研究実績無いですし.
それと給料の良し悪しとかは気にしてないですね.まぁ高いに越したこと無いんですけどその分求められるスキルも高くなるって考えるとキツイ.でも,福利厚生は割と重視して企業選びしました.内定を頂いた社は完全週休2日で祝日休み・夏期休暇と年末年始休暇があるし.エンジニア・クリエイティブ職は椅子は高いのが選べるし,24時間ドリンクと食べ物が無料で飲食できるカフェがあったり金曜は無料でアルコールがでたり,おひるねスペースがあったり,年間10万まで最新デバイス購入支援金が出るし,託児所があったり(子供が出来る予定も見込みも当分ないが...)して,最高.

ES・履歴書

書くのがしんどい.無限に時間を吸い込む暗黒物質ダークマター.でも書けば終わる.以上.

面接

人事面接は入社意欲があるか,学チカとか人としての素質的なものを聞かれるなあと感じました.
対して,エンジニア面接は技術的なことについて聞かれるなあと感じました.
僕は人と話すのは好きなので,面接中はあまり苦ではなかったですが,話すことの準備だったり企業の調査だったりの前準備や,面接後の結果がでるまでの自己反省会など,面接の前後の疲労感がすごかったです.
エンジニア面接は実際にプロとして働いている方に質問できたりするので本当にワクワクしたりしました.研究の話とかしても理解してくれるので嬉しかったです.
あとは,僕が受けた企業は逆質問タイムを設けていましたので,「特にありません...」って答えちゃうと勿体無いし,意欲なしか???って思われちゃうかもしれないので逆質問は2〜3個ぐらい用意してたほうがいいと思いました.僕自身,面接前は必ず企業に適した逆質問を用意してました.

お金

下の表に記憶している内の就職活動をするにあたってかかった費用を集計したので,記しておきます.

   金額
リクルートスーツ 26,874円
交通費(新幹線) 16,840円
交通費(高速バス) 53,860円
交通費(Suica 14,463円
宿泊費 3,400円
合計 115,437円

Suica支出合計は東京都内の移動のみ集計
※交通費宿泊費支給分は計上していません
改めて就職活動はお金がかかるなぁと思いました.その他雑費(東京内のご飯代・ネカフェ代など)を含めればもっと大きい額になると思います.(履歴には残ってるけど流石に集計する気にはなれない)
ITmediaによれば,就活費用平均16万とか言われてますし,まぁ贅沢して新幹線とか使わなければこんなもんなのかぁとか思ったりした.

www.itmedia.co.jp

就活資金を支援してくれた親,東京に行った際に泊めてくれた友達,支援金をくれた就活サービス,アドバイスしてくれた研究室メンバー,その他応援してくれた友人たちには感謝してもしきれません...ありがとうございます...
(あと,この集計してて5月は夜行バスに10回も乗ってたことが判明して,月の1/3の睡眠をバスの中でしたって思うと…(なのでちょっと就活中に体調を崩しました.(計画性のNASA)))

就活ガチャ

実績とかスキルとか学歴とか会ったほうが内定取りやすいのはそれはそうなんだけど,なんだかんだ評価する人も人間だし,自分の評価にあたる担当なんてその時の運だし,ガチャみたいなもんだなあとか思った.僕もいろんな会社からテンプレお祈りメールを何個か受け取りましたが,能力が足りなかったところは確かにあるしそれは認めた上で,運要素も確かに存在してると思います.なので,一通のお祈りメールにいつまでも引きずってるのではなく,切り替えてくの大事なのでは?

感想とか

まず第一に,当たり前かもしれないが東京で就活するにあたって,東京住みの大学生ってだけでアドバンテージだなぁって感じた.
夜行バスに揺られて東京に出てきて,ネットカフェ等で面接の時間まで時間つぶして,面接して,その日の夜行バスで帰って〜〜ってしてると流石に疲れます.
僕はアホで計画性が欠如しているので日曜日の夜に夜行バス乗って東京に行き,月曜日の日中に面接と説明会をこなしてその深夜に夜行バスに乗って愛知に帰り,火曜日は大学のゼミに出席してその日の夜に夜行バスに乗って東京に行き,水曜日は面接をこなしてその日の夜行バスで愛知に帰り,木曜日のゼミに出席してバイトして...みたいなことをしていました.しんどい.それにお金だっていっぱいかかります.しんどい.

次に,就活するにあたってなにか作ってきたものがある,そしてそれについて語れるって強いなあって思います.なので学生のうちに何かやっておくとよいかもしれないです.
あとはインターン行っとけばよかった〜〜〜ってなった.学部の時に自動車業界のインターンに二回ほど行ったんだけど,IT系企業のインターンには参加したことがなかったので,インターン実績の書けることが薄かったです...
それと,学会発表等の実績を積んでおいたほうがいいなあと思いました.僕は学部のときに研究内容を研究会で発表した程度で,大学院に進学してからの研究内容では一切の学会発表を行ってなかったので,就活時点での実績が弱かったです...(これから頑張って院の研究内容で学会発表したい.)

僕は学部の2年生ぐらいから大学院進学を決意していたのですが,学部卒業のタイミングで軽く就活をしておけばよかったなぁと...
一般的な説明会参加→面接(複数回)→内定の選考フローとか就活解禁まで分かんなかったし,学部卒で就職する気なくても就活してみるのアリなのかもなあとか思ったり.

僕の内定が初めて出たのが6月だったのですが,僕の研究室の同期は全員5月頭には内定を持ってましたし,Twitterでも内定がでましたー!わーい!みたいな感じでした.なので少しメンタル的にも不安になってた時期がありましたし,焦りを感じてあまり興味のない企業にも説明会行って滑り止めを探したりなんてしました.
研究室の先輩は5月には内定を貰ってたりして,それも謎にプレッシャーを感じて,僕も早く良いところに内定もらわないと…みたいなことを勝手に思ったりもしてました.
でも,就活は短距離走ではないです.早く決まったから偉いというわけでないと思います.内定もらえるのが遅いから悪いというわけではありません.なので,遅いからといって自分のやりたいことを見失わないように気をつけたほうがいいなと思いました.

そして何よりも就職活動が多忙すぎて,大学院生の本質である研究活動が3月〜6月までほとんど手に付きませんでした.でも他のメンバーは就活しっかりしながら研究でもしっかりと進捗を生んでてすごいなぁと思いました.本当に同じ人間か???って思ったけど,優秀な人が身の回りにいる環境に居れるのは刺激的でよい.

他にも受けてみたいなぁ〜〜〜って魅力を感じる企業は山程あったんですが,僕の身体はひとつしかないし,案外一社エントリーするエネルギーも少なくはないので受ける企業を選ぶって難しいなあって感じました.

就活,本音は働きたくないに決まってるのに時間かけて志望動機とか自己PRとか書いて考えて,全員同じスーツ着て,機能性が皆無な平たい鞄を持って,歩きづらい革靴で知らない街を歩き回ってって,狂気じみた活動だなぁって感じました.

就活に対する不満はいろいろとありますが,今までの自分を改めて振り返るいい機会だと思います.自分の実力不足だったり弱みなんかを見つけることができていいです.その感じた実力不足を今後埋めていけば成長できるってことですからね.就活は自分の内側(保有スキル・強み弱み・人間性など)と外側(業界動向・社会・仕事)を知るには良いです.

最後に

兎に角,次の春から路頭に迷うことはなくてよかったです.本当に不安だった.
就活のロールモデルにはとてもなれなかったし,いろいろと回り道もしたけど一安心. この記事が誰かの役に経てば幸いです.
なにかあればTwitterまでご連絡ください.感想とか質問とか歓迎です.

そしてもしよければお気持ちを...

f:id:tacky0612:20190601024721j:plain
Kyashで投げ銭

管理者権限なしでLinuxbrewを入れる

最近,管理者権限のないユーザーとしてGPUサーバーにアクセスして深層学習してるんだけど,いろんなライブラリ入れるのに管理者権限が必要だったり面倒なのでLinuxbrewというのを導入した.便利.

 

What is Linuxbrew?

パッケージマネージャ.
ここのやつがわかりやすかった.(丸投げ)

qiita.com

この記事ではsudo apt-getを使ってインストールしてるけど,本記事ではsudoを使わずにインストールしていく.

なんでLinuxBrew?

いろんなライブラリとかを管理者権限(sudo)無しでインストールできる.気持ちいい.あとはMacユーザーはbrewと仲良しなので.

OS

Ubuntu 16.04.4 LTS

インストール方法

公式のGithubに乗っている方法のまんまでできる()

github.com

git clone https://github.com/Homebrew/brew ~/.linuxbrew/Homebrew
mkdir ~/.linuxbrew/bin
ln -s ../Homebrew/bin/brew ~/.linuxbrew/bin
eval $(~/.linuxbrew/bin/brew shellenv)

あとはPATHを通す.

echo -e 'export PATH=${HOME}/.linuxbrew/bin:$PATH' >> ~/.bashrc

一応,設定を反映させる.

source ~/.bashrc

動作確認

brew install hello

エラーとかでなければ成功.

おわりに

管理者権限なしでもLinuxbrewを入れれた.そしてこれからもbrewを使って管理者権限なしでもいろいろなライブラリが入れられるし,依存関係のあるライブラリも勝手に入れてくれるので便利.以上.

 

3次元畳み込みニューラルネットワークを用いて3次元モデルを分類してみる(ボクセル)

どうもたっきーです.

久しぶりの投稿です.最近は全然技術的発信できてなかったのでダメ.やっていくぞという気持ち.

 

はじめに

f:id:tacky0612:20190306150254p:plain
Architecture
近年,データが多く収集できるようになり,その活用方法が〜〜(DeepLearning系論文冒頭のテンプレート)
まぁ,深層学習が流行ってて,画像分類なんかの近年の成長具合は目を瞠るものがありますね....
僕もなにかのタスクで適応できないかなーって思って3DCADモデルの分類をやってみます.

扱うデータセット

f:id:tacky0612:20190307041545p:plain
ModelNet10/40
3DCADのデータセットとして有名なModelNet10/40を使います.深層学習を行なうには十分な量のデータがあります.
(適当に十分な量のデータって書いたけど,実際に現実問題として汎化性能を得るためのデータ量ってどのくらいなんだろうね?)

modelnet.cs.princeton.edu

コードと使い方

↓ 以下Githubを参照 ↓ github.com

下手くそな英語でReadme.mdが書かれてます. 改善点なんかあれば気軽にプルリクとか下さい...

手法

基本的にVoxnetという手法にならって実装しています.
使用フレームワークKeras.分岐構造をもつネットワークが書きたかったのでFunctionalAPIで書いてます.

以下に処理の流れを書きます.
なお,すでにデータはダウンロードしてあり,環境構築は済んでるものとします.

  1. 3Dモデルをボクセルに変換

    f:id:tacky0612:20190307043315p:plain
    ボクセル化
    ボクセルデータの生成の流れを以下に示す.

    1. 3Dモデルの頂点の座標値(x,y,z)と面を構成する点の配列を取得
    2. 取得した面上に無作為に点(x,y,z)を定義
    3. 点の最大値と最小値を求め,3Dモデルの中心が原点(0,0,0)にくるように正規化
    4. 323232のグリッドで空間を区切り,そのグリッド内の店の有無を判定
    5. 点が存在するなら1を,無いなら0を返す(これをバイナリボクセルという)

    ↓これで作られるボクセル↓

    f:id:tacky0612:20190307045116p:plain
    ボクセル

  2. アスペクト比の情報を追加してみる ボクセルの情報だけでもいいんですけど,追加情報としてアスペクト比の情報を用いてみます. 入力とする情報量が多い(無効な情報は無い場合)と計算量が増加してしまう.ので,今回はあまり情報量の多くないアスペクト比の情報を追加してみました.

  3. モデルの構築 Kerasを使って二ューラルネットワークを構築します. VoxNetと違う点としてはアスペクト比の情報を取り入れてる点と3DCONVの後にDropout層を追加して汎化性能を高めてるところです.
    ↓ ネットワーク図 ↓

    f:id:tacky0612:20190307045840p:plain
    ネットワーク図

  4. 学習と評価

とまあ,ざっとこんな流れです.

ここで,2つほど疑問に思うことがあるかもしれません.
なんで面上に点を定義してからボクセル化するの?頂点の情報をそのまま扱わないの?という点と,アスペクト比の情報を追加してるけど分類タスクにおいて有効な情報なのか?という点です. 前者は,頂点だけだと単純な形状だと点と点の距離が広く,形状を上手く表現できないからです. って言葉で書いても分かりづらいと思うので,以下の図で説明.

f:id:tacky0612:20190307054417p:plain
頂点情報のみ
f:id:tacky0612:20190307054422p:plain
面上に点を定義した場合

とまあ,このように3Dモデルの頂点情報だけじゃ形状表現には向かないのです.
あと,面上に定義する点の数を多くすれば形状の表現力があがります.まあ,これは計算時間とトレードオフなので適切な点数を選定する必要がありますかね...

そして後者は,アスペクト比の分布の可視化を行ってクラスごとの分離感をみて判断したいと思います.

f:id:tacky0612:20190307105736p:plain
ModelNet10のアスペクト比の分布

↑の図はModelNet10の3Dモデル毎に横軸にy/x,縦軸にz/xの比としてプロットしたものになります.見易さのために各軸は対数表示にしてあります.
オレンジのchairクラスと黄色のsofaクラスのようにある程度アスペクト比で分類できるのかな?という印象です.

↓さすがに40クラスにもなると分離感が見づらくなりますね...

f:id:tacky0612:20190307110203p:plain
ModelNet40のアスペクト比の分布

実験

上記の手法で3Dモデルを分類する実験をしてみた.
学習用のデータと評価用のデータを用意する.
ニューラルネットワークの入力としてボクセルデータとアスペクト比のデータを与えて学習し,出力として分類精度を得る.

以下に条件を示す.

実験条件

変数 内容
ボクセルサイズ 32×32×32
点群数 10000
最適化アルゴリズム AdamOptimizer
学習率 0.001
バッチサイズ 128
Dropout率 0.5
エポック数 40
活性化関数 ReLU

データ数

ModelNet10 ModelNet40
ファイルフォーマット .OFF .OFF
学習用データ 3991 9843
評価用データ 908 2468
合計 4899 12311
クラス数 10 40

結果

実験の結果を以下に示す. なお学習エポック内で一番精度の高かったものを採用している.

入力情報 ModelNet10 ModelNet40
アスペクト比のみ 0.4736 0.2751
3DCONVのみ 0.8976 0.8590
3DCONV+アスペクト比 0.9086 0.8663
VoxNet論文 0.920 0.830

学習曲線(3DCONVのみのやつとアスペクト比の情報を加えた場合の比較)

f:id:tacky0612:20190307105422p:plain
ModelNet10の学習曲線

f:id:tacky0612:20190307110247p:plain
ModelNet40の学習曲線

混合行列

f:id:tacky0612:20190307111222p:plain
ModelNet10の混合行列
f:id:tacky0612:20190307112907p:plain
ModelNet40の混合行列

まとめ・考察

3次元モデルの分類をいい感じにできたと思う.

混合行列から読み取れるように,tableクラスとdeskクラスのペア,dresserクラスとnight standクラスのペアで誤認識する傾向がある.これより,3次元形状が似通っているクラスについては誤認識してしまうことがあることがわかる.これはボクセルの分割数を上げ,3次元モデルの表現をより鮮明にできれば改善する余地があるが,計算量の増加などの問題が〜〜〜って感じ.

あと,結果と学習曲線をみてみて,アスペクト比の情報は無いよりかは在ったほうが微量ではあるが分類精度に貢献しているのかな〜〜って感じ.

今回の実験では,ボクセル化したデータを見ているので,大きさの変動にについてはロバストな気がします.しかし.データ向きが整形されていないデータに対しては上手く学習できないかもしれません.
というのも,今回扱ってるデータセットは向きについて整形されていて(例えばMonitorクラスはxy平面に画面が来るのように),故に上手く3次元畳み込みニューラルネットワークで学習できてるのですが,LiDERみたいなやつで取得した3次元データに対してはこの手法は使えないのかな〜〜という感じです.(あくまで推測ですが)

あと汎化性能についてですが,ModelNetで学習済みの重みを用いて,インターネットから拾ってきた適当なCADモデルを分類したら案外あたったのでまぁ大丈夫なのかな〜〜〜という感じ.(適当)(ちゃんと検証していない)

P.S.

就活したくない…誰か雇って下さい…企業に吸い込まれたい...
ワタシ,AIチョットデキル…

スポンサードリンク