Pytorch で Iterable.next() すると停止する

原因: num_workersの設定が正しくない

対策:num_workers=0 にする

こんな感じ

dataloader = DataLoader(trainset, batch_size=5, shuffle=True, num_workers=0)

 

以下:公式ドキュメントより引用

num_workers (python:intoptional) – how many subprocesses to use for data loading. 0 means that the data will be loaded in the main process. (default: 0)

つまり、下手にサブプロセスで実行しようとしてミスると停止する

 

花粉症薬のメモ日記

今年もまた花粉症のシーズンがやってきました。私は10年前からずっと花粉症がひどくて期間中は薬を服用し続けているのですが、花粉症薬は副作用がわりと強烈に出ることがあるので注意が必要ですね。

とはいえ、副作用より花粉症の方が辛いので結局薬を我慢して飲んだりするんですけど、、

この2年間はディレグラにお世話になっていたのですが、花粉症の症状は気持ちいほどピタッと止まる代わりに、飲み続けていたせいか副作用が気になりだして動悸で目が覚めたり、そもそも眠れない日が続いたりしました


引用元:くすりのしおり

 

処方してくれたお医者さんに相談したんですが、「覚醒効果はありません(キリッ」って言われておいおい嘘だろう、と。

という背景もあり、これは何かマズイ予感がするので、自分で調べたところディレグラは交感神経を刺激するため体が休まりにくかったり眠りにくくなったりするとのこと。(おいおい以前通っていたところはヤブ医者かよ

即、病院を変えました。

そちらの先生によると「ディレグラは強力な効果が期待できますが、飲み続けるような薬ではないですね」とのこと。

ナ、ナンダッテーーー!!

というわけで、最近は副作用を抑えめの新しい薬「デザレックス錠」が出たらしいので、こっちとしばらく付き合ってみます。

もちろん薬は個人差や相性もありますし、ディレグラは花粉症の症状を抑えてくれる素晴らしい薬です。今日伝えたかったことは自分が服用する薬なのでちゃんと調べて服用しようということ。(結論

 


引用元:くすりのしおり

 

 

 

Visual-SLAMのわかりにくい点を整理するブログ

大きな市場が見込めるロボット技術領域で競争が激化する昨今、その要素技術の1つであるSLAM(Simultaneous Localization And Mapping)も注目を集めています。しかし「なんとなくこんな処理だろう」と大雑把な理解はしているものの、いざ説明しようと思うと出来そうで出来ないのがSLAM。そこで、ちゃんと丁寧に内容を理解していこうというのが本日の内容です。

■SLAMの目的:

SLAMの目的は①自己位置推定と②マップ作成です。「えっ、目的が2つあるの?」となるかもしれませんが、正式名称も「Simultaneous Localization And Mapping」となっており、この2つは切っても切れない関係にあります。

空間内で自分がどの位置にいるのかを把握する自己位置推定では、そもそも「空間」がどのようになっているのか把握しなければ自己位置推定したところで情報量がありません。なにも存在しない無限遠方の3D空間で「アナタはいまココにいます」と世界座標系の(x,y,z)を用意されても困るわけです。

よって他オブジェクトが同じ座標系のどこにいるのかというマップがないと自己位置推定は意味を持たないわけです。

また、マップ作製も自己位置推定と密接な関係にあり、SLAMにおいて自己位置推定を抜きにMAP作成はできません。画像群を一括処理するSfMと比べてSLAMは逐次的に取得される画像からMAP作成するので、入力画像について「世界座標におけるどの位置からどの姿勢で撮影したのか?」という自己位置が推定できなければ入力画像から3次元を更新できません。

■SLAMの入力:

入力は画像です。RGBだったりRGB-Dだったりしますが、とにかく画像です。ただし異なる視点から複数回撮影された画像です。(1枚ずつ処理することもありますが)SLAMには複数の画像を用います。

■SLAMの出力:

出力は2つあります。1つ目はMapで、観測された対象物の世界座標系における3次元座標の集合です。ここには壁があって、ここには通路があって、という空間の把握に役立ちます。ただし観測された画像のあらゆる画素や特徴点がMap反映されるわけではありません。計算量が膨大になったり、対応点の算出が困難になったりするため、冗長な点を省いたり、特徴的な点だけをMapに反映することがあります。

2つ目の出力はPoseです、これは画像を撮影したときのカメラパラメータで、「どんなカメラでどの位置からどんな姿勢で撮影したのか」という情報に相当します。よって、カメラパラメータは画像1枚ごとに異なりますが、かといって全ての画像に対してカメラパラメータを推定するとは限りません。処理量が膨大になるのでカメラパラメータ推定を実行するのはMap作成に重要と判断した画像(これをKey- Flameと呼びます)だけで、冗長なものは間引くこともあります。カメラパラメータ推定は3次元空間内での自己位置推定と等価です。

カメラパラメータには内部パラメータと外部パラメータの2つがあります。内部パラメータとはカメラのスペックのようなもので、焦点距離やレンズ歪などに相当します。外部パラメータとは「世界座標系におけるカメラの位置&姿勢」とご理解ください(以下サイトの説明がわかりやすいです https://www.slideshare.net/takahashikousuke/camera-calibration-111239064)。

なお、カメラの内部パラメータは既知として、外部パラメータのみ推測するような問題設定が比較的多いです。

↓ Takahashiさんによるこの説明がわかりやすいです

 

■アルゴリズム:

Map推定結果とPose推定結果から「この位置からこの姿勢で撮影したらこういう画像ができるだろう」と計算された投影点、と、実際にカメラが撮影した観測点を比較して、誤差が最小となるようにMapとPoseを更新します。

■難しさ:

RGBで取得した画像を入力とした場合、画像からMap推定するときの中間過程に「Depth推定」が必要となります。つまり2次元のRGB画像から深度(Depth)を推定して3次元の世界座標系にマッピングするため、ここでも誤差が発生する可能性があります。Map推定の誤差なのか、Depth推定の誤差なのか、Pose推定の誤差なのか、見極めが難しくなります。

先述したように撮影した全画像についてマッピングや自己位置推定を行うと処理がいつまでも終わりません。よってMap推定に有効なサンプル(KeyFrame)を選定する必要があり、その選定方法について様々な手法が提案されています。
どの対象物(画素、特徴点)をMap推定やPose推定に使用するのかという選定にも工夫が必要です。特にPose推定については下手なものを用いるとカメラ間で対応が取れなかったりするためです。例えば濃度勾配が高い画素のみを推定に用いるなどの手法があります。

局所的には正確に対応点を取ってMapやPoseを推定できたとしても、それを逐次的に繰り返すうちに誤差が蓄積して、全体のMapやPose推定では歪みが出ることがあります。この対策として局所最適と全体最適の両方を取り入れた手法などが提案されています(Loop Closingなど)。

t-SNEをCUDA使って爆速で実行

機械学習の研究をしていると特徴量の分布を確認したくなることは多い。特にDomain Adaptationなどの研究になると分布の重なり具合の確認のために可視化が必要となる。

そういった場合によく用いられるのがt-SNEという手法だが、可視化のための低次元空間の算出の処理がとにかく重い。

うっかり多すぎるデータをINPUTしてしまうと、そのままフリーズしたりもする。

何か対策はないものか、、、と調べてたらあったよ(やっぱり)

 

 

機械学習の界隈は「こんなんあればなぁ」と思ったものはだいたい既に実装されているから恐ろしい、技術の進展早すぎ

論文: https://arxiv.org/abs/1807.11824

Code: https://github.com/CannyLab/tsne-cuda

Slide: https://hpml2018.github.io/HPML2018_6.pdf

Anacondaでのインストールも可能: https://anaconda.org/CannyLab/tsnecuda

 

めっちゃ早くなってるやん!!

 

なお、インストール後に『libcublas.so.<VERSION> not found』となった場合は

  • 『LD_LIBRARY_PATH』が正しいか確認
  • CUDAとマッチしたVerのtnsecudaをinstallしているか再確認

faster-RCNNなどDetectionモデルを動作させるときに引っかかる点

 

詰むパターン

  • ValueError: bg_num_rois = 0 and fg_num_rois = 0, this should not happen!
  • lossがnanになる

 

引っかかる箇所

  • 画素をカウントするとき左上座標を(0,0)とするのか(1,1)とするのかが異なり、データ前処理を誤ってアノテーション座標に(-1,-1)が含まれてしまう。
  • コード修正しても『data/cache/***_roidb.pkl』を削除しないとキャッシュを読み込んでエラーが出続ける
  • ANCHOR_SCALEが小さすぎるとLOSSが果てしないことになって「nan」になる

ラグビーの”東の聖地”として有名な熊谷に行ってきました(W杯観戦「サモア対トンガ」)

ラグビーワールドカップ日本大会、2019.9.20からいよいよ始まりましたね

開幕戦@東京スタジアムや、南ア対NZ@横浜スタジアムでは満席のラグビー ファンという素晴らしい光景が広がっていました、まさか日本でこの光景を見られるとは。。。。そして昨夜は東の聖地こと熊谷にも足を運びました。

駅を出るとさっそく衝撃的な光景!

各国代表を応援するメッセージが掲げられた旗、サモアやロシアのジャージを着た観戦客、地域の文化を紹介するコーナー。足元にもラグビーの街、熊谷といったペイントが以前からあり、本当に上下左右どこを見てもラグビー一色でした。

ラグビーで街が盛り上がるとはこういうことなのか!と、ただただ感動しっぱなし

 

課題視されていた駅からスタジアムまでのバス運行もなかなかスムーズでした。バスを縦列に何台も並べて並列クエリを形成するように誘導しながらどんどん乗車して行きます。整列のプロとして有名な日本人の底力をみた気がします。3.5kmの道のりに定期的にスタッフさんが立ってくれていて、笑顔で手を振ってくれます。

ファンゾーンでは日本酒や地元フードが500~700円程度の良心的な値段で楽しめます。試合会場ではハイネケン500mlで1000円という強烈な値段設定ですが、こちらはお手頃価格。あと、昨夜のステージではゲストにはなわさんが登場して「跳んで埼玉」のテーマソングを熱唱、めっちゃ埼玉をdisってました笑

また、試合では地元の中学生も招待されていた様子で、ロシアコール、サモアコール、ウェーブにと、創意工夫を凝らして子供達が大会を盛り上げてくれる様子は感無量でした。

なお、試合はサモアの勝利。タイトなスケジュールの影響もあたのかロシアは後半足が止まり始めて、サモアに気持ちよく走られましたね。

 

マウスのドラッグが途切れる『チャタリング』の対策

結論:電池を抜いた状態で左右のクリックをカチカチ、これを20秒ほどする、以上!!

 

解説:「チャタリング」とはマウスの不具合(というより故障)の一種。ドラッグしたつもりがドラッグできていなかったり途中で途切れたりする。主な原因は内部にたまった静電気。上記の方法で静電気を抜いてやるとよい。