ごきげんようユニファのインフラ見てますすずきです。
最近弊社にイングランドからエンジニアが入ってきて、
社内に(エンジニア近辺)英会話の機運の高まりを感じています。
(年末に勉強しなきゃといって全くできていない私の話はまた今度)
さて普段ブログは仕事で使ってる技術の話してるんですが、 今回は簡単にインターネットというか、ネットワークのお話を【超噛み砕いて】できればなと思います。
続きを読むごきげんようユニファのインフラ見てますすずきです。
最近弊社にイングランドからエンジニアが入ってきて、
社内に(エンジニア近辺)英会話の機運の高まりを感じています。
(年末に勉強しなきゃといって全くできていない私の話はまた今度)
さて普段ブログは仕事で使ってる技術の話してるんですが、 今回は簡単にインターネットというか、ネットワークのお話を【超噛み砕いて】できればなと思います。
続きを読むこんにちは、iOSエンジニアのしだです。いつの間にかR&Dチームとして1年経ってしまいました。R&Dというと社内でも何をやっているか理解しづらい部署であり、いよいよ社内でもぼっち感がでてきました。 ここ最近は、顔認証(Face Recognition)ばかりやっていて、iOSからも同僚からもだいぶ離れてしまいさびしさも感じられる今日このごろです。 今回は、顔認証におけるディープラーニングで学習する際に用いられる損失関数についてどのような違いがあるか見てみたいと思います。
続きを読むR&Dエンジニアの浅野です。息子が乗馬を習っていてレッスンや試合の様子を見る機会があります。馬にはそれぞれクセや個性があり、それを理解しながら見ると「あ、気持ちが高ぶっている馬をよくコントロールしてるな」とか「あそこで左に逃げないように工夫してるな」など奥深さを感じて楽しみが倍増します。そのため誰がどの馬に乗っているのかをその場で知りたいことがよくあるのですが、素人には馬を見分けるのが非常に難しいです。そこで今回は画像分類で大きな力を発揮する深層学習を使って馬を識別してみたいと思います。
指導者や経験豊富な人が見分けるときは全身をみて判断しているのですが、全身を対象にすると鞍やゼッケン、騎乗者などの影響を取り除くためにセグメンテーションを行ったり、様々な姿勢の影響を考慮したりする必要があり難易度が上がるため、よりシンプルな顔認証で識別に挑戦していきます。馬の顔認証というと難しそうなイメージがありますが、牛やサケ(!)で顔認証をやっている人もいるくらいなのできっと大丈夫なはず。
1回の記事に収めると長くなるので3回に分けて書いていきたいと思います。
人間の顔検出器に関しては学習済みのモデルがいろいろと公開されていますが、馬の顔検出器は見つからなさそうなので自分で作ることにします。下記の図のように、学習の前に正解ラベル付きデータを準備する必要があります。馬の顔検出モデル作成に必要なデータは、馬が写っている画像とそのどこに顔があるかという情報(いわゆるバウンディングボックスの位置)です。とりあえずこれを1,000データほど集めることを目指します。
まず、ChromeDriverを使うことで一度にたくさんの画像をスクレイピングできるGoogle Images Downloadを用いて馬が写っている画像を収集します。キーワードをいくつか変えてスクリプトを走らせることで延べ1,500枚ほどの画像が集まりました。
次にクレンジングとして、md5の値をチェックして重複画像を省くことで1,250枚に、続いてざっと画像を閲覧しながら馬の顔が写っていないものを削除することで750枚が残りました。これらの画像にLabelImgを使って馬の顔の部分を囲っていきます(左図)。一つの画像に複数の顔が写っていることもあるため、合計で1,193個のラベル付きデータが得られました。
物体検出の学習のベースとなるモデルとしてRetinaNetを使用します。物体検出の方法は大きく分けてスピード重視のOne Stage系と精度重視のTwo Stage系に分けられます。RetinaNetはOne Stage系でありながらTwo Stage系の良いところを取り入れてスピードと精度の両立を実現したモデルです。実装はKeras RetinaNetを参考に行います。1,193個のデータのうち、約10%の120個をバリデーションデータとし、残りの1073個を学習データとします。RetinaNetのバックボーンはCOCOデータセットで学習済みのResNet50を使用します。バックボーンは重みを固定し、それ以外の部分の重みを学習によって更新させていきました。
50エポック学習をまわして損失は順調に下がっていますが、右側のグラフを見ると10エポック以降は過学習になっている感じです。最も汎化性能が良さそうな10エポック終了時点でのモデルを使い、学習に使用していないテストデータに対して顔検出を行った結果の例が下記です。ちゃんと馬の顔検出ができているようですね。データ数が少ないこともあり、時々検出できなかったりしっぽの部分を顔と誤認識したりすることもありますが、趣味用途なので目をつぶりましょう。
次回は検出した顔の部分を切り出して識別を行うための分類器を作ります。
(今回のブログは保育とは全く関係ありませんでしたが)ユニファではテクノロジーで保育を変えていく仲間を大募集中です。少しでも興味を持たれた方はぜひ声をかけてください!
【AI系技術サーバサイドエンジニア】R&Dチームにて機械学習やAIを用いたサービス開発を担う(東京)の採用情報 | ユニファ株式会社
おはこんばんちは!
インフラ担当のすずきです!
2019年初ブログでしょうか?(記憶が曖昧
正月明け頃から咳がではじめて、今週頭くらいまでずっと悩まされていました。
後述するイベントまでにはなんとか収まってホッとしております。
昨晩DatadogのMeetupイベント「Datadogはじめました! - connpass」に参加してLTもしてまいりました。
咳が収まってなかったらただでさえ拙い発表が、ひどいものになっていたのではないか…!!(人生2回目のLT)
さて今回のブログの内容ですが、参加した内容は割愛して私がLTで発表したTerraform v0.12 とそれに対応したdatadog-providerを使った話をもう少し詳しく書こうかと思います。
発表資料は末尾に記載しておくのでご興味あるかたは御覧ください。
続きを読む新年明けましておめでとうございます。今年もよろしくお願いいたします。
先週、新年早々ハトにフンを落とされました。ウン(運)のついている柿本です。
※フンはきちんと拭き取って洗濯したのでご安心を!
2018年最後のエントリーで赤沼が発表している通りこの開発ブログでは年末にアクセスランキングが発表されるようです!つまり、年始のこのエントリーはかなり有利なはず!
もうランキングにノミネートされた気分でおりますが、冒頭にくだらないことを書いていると離反されてしまうので、本題に入ります。
今回のエントリーではJavaScriptを使って、数独のヒントを教えてもらうことにしました。
タイトルに「その1」とあることから察していただきたいのですが、今回のエントリーでは完成まで行き着いていないので悪しからず。「その2」以後があるかもわからないので悪しからず。
昨年の終わりにひょんなことから私の妻が数独にはまりました。
私はもともと数独が好きで、週末の新聞に載っているものを必ず解いているのですが(それ以外で私が新聞を開くことはない)、文系人間の妻が好きになるとは意外でした。
とはいえ、妻はそれほどスラスラ解けないので、少し詰まると「ヒントちょうだい」と言ってきます。もちろん私は上から目線で「これはね、、」と教えるわけですが、もっと上から目線の “僕が教えるまでもないよね” スタンスでいたいので、代わりにJavaScriptにヒントを教えてもらうことにしました。
とりあえず今時点のものをこちらに上げました。
https://unifa-inc.github.io/sudoku_solver/
「ヒントちょうだい」ボタンを押すと、数字が特定できるマスをピンクにして教えてくれます。難しくてヒントが思いつかないと、開き直って5歳児になります。
数独ってそもそも何?という方はWikipediaあたりをご覧ください。
簡単に説明すると、3×3のブロックで区切られた9×9のマス目に、それぞれの行・列・ブロックに1〜9が1つずつ入るように数字を埋めていくゲームです。
数独にはいくつかの解き方がありますが、一般的に大きく以下のステップに分かれます。
①ルールをそのまま適用する
②2国同盟(n国同盟)
③仮定法(背理法)
それぞれの説明はgoogle先生にお願いするとして、私は①でさらに以下の2つの解き方で進めます。
===> 行と列が交差しているマスにはその数字が入る
===> どちらかの場合、そのマスにはその数字が入る
完成形は③の解法まで適用されたヒントを出すことなのですが、このエントリーでは①ー1で解ける範囲内でヒントを出すことをゴールとします。
左上のブロックから順番に1から9までの各数字について、以下の検証を行うことにします。
ターゲットとする数字(n)について、
ソースコードをGitHubで公開しておりますのでそちらをご覧ください。
『処理の流れ』で書いている「制約」をどうデータとして保持するか、に少し悩みました。
結果、3×3のブロックのマスを表す2次元配列に0と1を保持し(0:制約あり/1:制約なし)、最終的に「1」が1つだけの場合はnがそのマスに入ると断定できる、と判断する方法をとりました。
パズル系に関わらず、ゲーム要素のあるものを作ろうと思うと必ず多重ループや多重分岐の罠にハマる気がします。世にある多くのゲームたちもやはり多重ループが量産されているのだろうか?と疑問に思いました。
知見のある方、ぜひ教えてください。
サーバーサイドエンジニアの仕事は、DBのデータを出したり入れたり、の繰り返しです。実際には検証したりくっつけてみたり離してみたりもあるのですが、意外とロジカルなロジックを書くことは少ないです。
なので、たまにこういうロジックロジックしたものを書くとなんだか心が温まりますので、皆様もぜひ!
それではみなさま、良い2019年をお過ごしください!
ユニファでは一緒に働く仲間を募集中です。DBのデータをただ出し入れすることに飽き飽きしている方、もっともっと出し入れしまくりたいぜ!という方、ぜひご応募ください!
みなさま、あけましておめでとうございます。 エンジニアの田渕です。
旧年中は大変お世話になりました。 本年も、よろしくお願いいたします。
昨年の最後のブログ更新となった赤沼の記事にも記載あります通り、ユニファ開発者ブログも開始から二年を超えまして、、、 これもひとえに、読んでくださる方がいらっしゃるおかげです。 ありがとうございます。
さて、そんな開発者ブログですが、2019年最初のブログは全然新年に関係のないネタです。
昨年はルクミー 午睡チェックの正式リリースとともに、いろんな場でサービス説明をさせて頂きました。 その中で、質問されるたびにその場ではうまいこと説明が出来なくてモヤモヤしていたネタをお届けしたいと思います。
続きを読むみなさまこんにちは、赤沼です。あと数日で2018年も終わってしまいますね。ちょっと前に年が明けたと思ったらもう年末で、一年なんてあっという間です。まだまだ終わってもらっちゃ困るとも思いつつ、そうは言っても時は平等に過ぎて行くので、同じ時間の中でもレバレッジを効かせられるように動いて行きたいと思う今日この頃です。
そんな中、この開発者ブログも今月で開設から二周年を迎えました。ご覧いただいている皆様、ありがとうございます。開始当初は続くかどうかわかりませんでしたが、だいたい週一本ペースでなんとか途切れることなく続いてきました。来年も変わらずアクティブに更新していけるようにしたいなと思いつつ、年末ということもありますので2018年に人気のあった記事をランキングしてみました。上位5本を紹介してみたいと思います。
画像の解析というと最近は機械学習や深層学習というイメージですが、こちらは各画像データからHashを計算し、その値の近さで類似度を判断するというものです。
最近はIoTデバイスも増えてきて、BLEでスマートフォンと連携しているものも多くなってきています。こちらは iOS で BLE の Central と Peripheral の実装をした記事になります。
フロントエンドの実装についてはデファクトと言えるものがなかなか決まらない状況ですが、その中でも React はポジションを得てきている気がしています。こちらは Rails と React, Redux を組み合わせての実装を紹介した記事になります。
こちらは iOS の UserDefaults を、Kotlin の SharedPreferences と同じように簡単に扱う方法を紹介した記事です。
ログ収集といえば Fluentd がかなり使われているかと思いますが、ユニファでの Fluentd(td-agent)を使用してのログ収集方法を紹介した記事になります。
開発者ブログは開発メンバーが持ち回りで書いているので、記事のジャンルも様々ですが、その中でも画像解析系やiOS、 IoT関連、インフラ関連の記事の注目度が比較的高かったようです。この辺りの領域はユニファのサービスにも密接に関係するところでもあり、関心を持っていただけていることは嬉しいですね。今年の年初からはR&Dチームも立ち上げて活動していますので、画像解析等は今後さらに力を入れていきたいと思っています。
ブログ二周年ということで、はてなブログのプロアカウントの契約も更新しましたし、最近では Podcast(UniFa Developer's Podcast) の配信もゆるく始めましたので、さらに情報発信を多くしていけると良いかなと思っています。そんなわけで皆様2019年もユニファをよろしくお願いいたします。良いお年を。