メモ帳スマートフォン用の表示で見るメモ帳この広告は、90日以上更新していないブログに表示しています。2019-11-17githubにコンペで書いたコード公開しましたコメントもない自分が読めれば万事OK的不親切コードですが、今まで参加したKaggleのコンペで書いたコードを公開しました。Detectionもう終わってから三週間になりそうですが、いろいろ書き残しておきます。ソロ銀狙いで50位前後をふらふらしていたらPrivateでジャンプアップしてびっくりでした。test)使ってpretrainしたのち、2019のtrainでfine-tuning。averageになっている。testはリサイズすればRAMに全部乗ることが分かったので、最初にリサイズすることで画像読み込みの時間を減らしました。結果としてpredictionをたくさん作れるようになりましたが、モデルが少なかったので時間が余ってしまいました。上位のようにもっとがんばって200predictionくらい作るべきでした......。Cだけ過激なことをやっていました。Bは今年のCVPRに採択された手法を使ってモデル多様性に貢献させようとしたのですが、なくても0.929出てましたね......。labelingしなかった。禁止されてるものだと思い込んでました......。僕より強いひとからチームマージのお誘いが来たのがエモかったです。マージ期限過ぎていたのでマージしませんでしたが、今回のコンペで一番うれしかったです。DetectionTweet広告を非表示にするもっと読むコメントを書く2018-11-30ikiri_DSの歴史さすがに全部は追えないので、集められるものだけ集めました。歴史なので?ソリューションについては述べません。2018なぜかコンペが終わっていないのに打ち上げ(お通夜)が企画される。0.800超えてしまったMaxwell氏にチームマージをお願いする会」に変更される。sugawarya、irekoの8人が結集した。2018打ち上げからikiri_DS誕生前夜ついに上陸。改善を続けていきます。2018ikiri_DSがここに誕生する。している圏内者が多少いたとしても、まだまだ安全圏にはほど遠い状況。する季節がやってきています。2018ここでtosh氏が合流。深夜のちょっとした改善。2018このあたりで1stのスコアが急上昇する。暴走車、止まりなさい。Credit何もしていないけど、順位が元に戻りました。圏内でも、巨大チームがどんどん生まれていますね。https://t.co/k1OfroY8BD0.809台へ。チームのスコアですね。異次元のスコアな気がします。Creditはここで盟友達と合流してラストバトルです。1stのチームはどうも闇の衣的なものを纏っているのでそのままではダメージが通らなそうですね。credit、独走する1位に対して団結する2位。不穏な静けさを放つbestfitting氏。これkaggleの最終回的な盛り上がりだ。2018takuoko+Angus+Brandenのtakuokoさんチームもマージし、ラストスパート。氏が加わり・・・気づいたらとんでもない人数に。参加することは今後ないかもしれないですね。2018あと一週間ぐらいikiって勝ちに行く。2018そしてcirclecircleとbestfittingがマージし、阿鼻叫喚が発生する。2nd!ニューラルネットワーク担当でした。本当に動かそうとしているかもしれないとの報告が・・・。2018あの箱実行しようとしているのか..。2018そして、次に発火したのは私の山だった・・・。Creditのホストによる再現は完遂の瞬間は最早感動ものですね。https://t.co/SFqxvRTU5bの最後にスタッフロール流すコードを追加で配置したくなってきました。岳⛰の木は、燃え尽きました。後で、MODEL岳とBLENDING岳が、不運にも燃え上がる予定です。担当者に、また燃やすからな、と暗に言われました。一人残業の私は早く開放されたい気持ちで一杯です。彼のタスクすぐ終わるからなぁ・・・。これにてHomeCredit終了!Appendixikiri_DSチームに関する記事をまとめておきました。Risk"にて、7198チーム(参加者数8572名)中2位に入賞しました。Maxwell氏の大学の後輩、Ireko8です。competitionに参加して72位になり銅メダルを取得しました。competitionでしかもはじめて自分がまともにディープのモデルを使うコンペでした。Textの簡単なシステムを作ったりしていたので、今回のコンペで音声認識の勉強になると思い参加しました。"stop"など)+silence(音声が入っていない)+unknown(音声は入っているが指定されたコマンドではない)のどれにあたるかを分類します。Piで実行できるモデルで一番精度のよかったものをつくるPrizeもあったのですが割愛します。Modelの使用も禁止。データ訓練データ30種類程度の単語(分類対象のコマンドを含む)を録音した音声データおよそ6万件。ファイル名にはその音声を録音した人のidがついています。同一の人物が発した音声は似通っているため、学習の際に訓練データと検証データの両方に同じ人物の発した音声が含まれているとleakになるので、データはidが重複しないように分割する必要があります。訓練データにはsilenceと明確にラベリングされたデータはありません。silenceのデータは自分で生成する必要があります。Data禁止なので基本的にこれを用いることになります。音声データ16万件弱。Unknowns)が存在します。スペクトログラムを入力とするVGG-likeな二次元CNNとwaveデータをそのまま入力とするVGG-likeな一次元CNNの二つを作りました。リアルタイムに行ったaugmentationは、音声をフリップする(wavデータを-1倍する、波形の正負を反転する)のとノイズを付加する、ボリュームを変える、一秒ではない音声についてはランダムで切り出すor前後に無を追加の3つです。ピッチを半音の範囲でずらす、スピードを変えるといったaugmentationもofflineで行いました。librosaが重すぎて、ピッチシフトとスピードチェンジはリアルタイムにできませんでした。音声フリップに関しては実は効果がなかったのでは、という疑いがあります。訓練データのバックグラウンドノイズから切り出したwavデータにランダムにボリュームを変えた20000件を用いました。いま考えると、バックグラウンドノイズを連結させたwavからEpochごとに必要なぶんだけ切り出したほうがよかった気がします。Pseudo-Labelingを行い、入力データやaugmentationを変えたモデルをaveragingしました。Pseudo-Labelingとはテストデータの予測ラベルのうち予測スコアが高いデータを訓練データに追加することでデータ数を増やす半教師あり学習です。このままですと自分自身の出力を訓練データに含めていることになるため、若干leakyになってしまいます。そこでまず独立に学習させた複数のモデルからテストデータの予測スコアを計算し、特定のモデルのpseudo-labelを作る際はそのモデル以外のモデルから計算された予測スコアをensembleした予測に基いてラベルを作ります。Pseudo-Labelingと呼ぶそうです。5foldで独立に学習させたモデルがあった際、1fold目のモデルのためのpseudo-labelを作る際には2~5fold目のモデルの予測を用いる、といった具合です。詳細はiwiwi氏のstatefarm解説スライドを参照してください。Pseudo-Labelingではないですね......。0.88の性能のモデルを使っていることがわかったので、単体の性能で負けました。完全に見込みが甘かったとしかいえないです。0.86のモデルを3つdiscussionに投下してきたのですが、そのコードが手元で再現できなかったのも痛いです。今回、discussionで上げられていた一次元CNNのモデルは手元で全く再現できませんでした。最後の一週間くらい、一次元CNNのほうが二次元CNNより性能が悪かったので、そっちの性能向上に注力したのですが、うまくいかなくて諦めたのですが、二次元CNNのほうが性能向上は簡単だったので、これも誤算だったとしかいえません。無音データの生成が足りなかったテストデータに異常な数の無音が含まれていることには気づいていて、silenceデータ生成のときにも20件くらい無音を混ぜたのですが、もっとたくさん生成してもよかったと反省しています。結論からいうと、privateに含まれるsilenceやunknownの割合は10%弱で、このデータを大量に生成するとoverfitする可能性はあった気がします。(しかし、3%上がったと言っている方がいるので実際はわかりません)ミスラベルを直さなかったrightのデータがsilenceだった、などラベルミスがあるのは気づいてましたが手作業で取り除くのは負担が大きく、10~20%くらいミスラベルあってもokらしいので無視しました。上位陣のソリューションではミスラベルを直すと精度が上がったらしいので、やるべきでした。validationがとれなかった訓練データに含まれていない単語がテストデータに含まれるというデータの性質上、正しくvalidationするのが困難でした。shakeがあるのではとささやかれていました。一方でコンペのdescriptionにあるとおり、全てのデータがLBに用いられるわけではなく、さらにCVとLBに相関がとれていたので、そこまで心配する必要もないという気持ちがありました。shakeupで済みました。Mel系の特徴量を使わなかったMFCCなどの特徴量を上位陣は使っていました。MFCCへの変換が重すぎるので早々に見切ってしまったのは完全に誤りでした。ensembleのweightの決め方がわからなかった上位陣のsolution基本的にたくさんモデルを作ってensembleするのが主流でした。0.86)をpseudo-labelingしてensembleというオーソドックスな手法でした。0.88程度の強いモデルを持っていたみたいです。filterbankを使った特徴量でCNNでした。90.9%の精度を出すというすごいことをやっていました。wavを20~50のchunkに切り出しstandizationする、VLTPを使う、というaugmentationが大変有効だったそうです。dataでfine-tuningするという手法を使っていました。ねじゅみさんのメモにもある手法ですね。4位stacking。dataから取ってきたみたいですね。mixup(7位)ベータ関数からサンプリングしたweightで二つのデータを混ぜるmixupが有効だったみたいです。このチームではシンプルにwavを混ぜていたみたいです。使わなかった手法RNN16000Hzでサンプリングされた約1秒のデータということもあってRNNは使いませんでした。実際、上位陣の多くはCNNで畳み込んでいました。silenceとそれ以外のclassifierを作るテストデータの分布が訓練データの分布が異なりunknownやsilenceに偏っていたため、silenceやunknownに特化したclassifierとそれ以外のclassifierの二つを作る、というアイデアは考えてました。特定のlabelにoverfitするかも、と日和って採用しませんでした。今回一位のHeng氏も同様のアイデア(https://www.kaggle.com/c/tensorflow-speech-recognition-challenge/discussion/47083#latest-268685)を出していましたが実装はしていなかったみたいです。augmentation一位のHeng氏が使って(ピッチシフトなど)有効だったみたいです。今回参考にしたサイトねじゅみさんのメモKaggleのテクニックについて簡潔にまとまっている素晴らしいメモです。iwiwi氏のstatefarmコンペのスライド人物でvalidationを分けるなど、今回のコンペで類似するところが多々ありました。dataに対するunsupervisedは行いませんでした。K80(コンペで配られたGCPの500ドルクレジットを使いました)終わりに今回はいろいろ見込みが甘かったので、次はもっと上位に行きたいです。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。