Django もう一回やった
Djangoでとある動画を見ながらブログを作りました。
1年前にも1度Djangoを勉強していたのですが、難しくて挫折しました。Flaskに逃げました。
MTVの理解がない...というよりも全くどこいじったらいいのか分からん、あっちこっち行き過ぎやとなってました。
基本的にmodelsを定義、マイグレーションをしてadminで確認した後の操作は
①urls.pyで新しいViewのPath定義→②views.pyで新しいViewの中身を定義→③template/app/base.html(静的なもの)でリンクを与えたりする→④template/app/〇〇.html(動的なもの)でどう表示させるか
を一貫して作業すればいいのかなと思いました。
どうも本とかだとあっちいったりこっちいったりで分かりづれえなぁとなっていたのでこういう作業手順の統一化ができると理解が早まりますね(もしかしたらブログ以外の実装だとこうじゃないのかもしれないけど)。
GeForce RTX 3070 買いました
買ったものリスト
- 価格.com - ZOTAC GAMING GeForce RTX 3070 Twin Edge OC ZT-A30700H-10P [PCIExp 8GB] 価格比較
- 価格.com - 玄人志向 KRPW-BK750W/85+ 価格比較
- Corsair CMK32GX4M2D3200C16 (DDR4 PC4-25600 16GB 2枚組) |パソコン通販のドスパラ【公式】
本当は2000番台は欲しかったのですが売っていなく、コロナ禍で輸送的等の問題から不足しているようでそもそもグラボの在庫切れが発生しているようです。
別に金持ちとかじゃないんですが、学生にうちの方が遊び倒せると思ったので今のうちに購入しました。
もともと以下のPC(2年前のやつ)を持っていたので、これに増設する形にしました。
Magnate IM(マグネイト IM)9324|パソコン通販のドスパラ【公式】
▼届いてほやほやのRTX 3070
実は今まで全くPCの組み立てとかをやったことがなく、増設できるのかそもそも謎でした。なので研究室の同期とビデオ通話して教えてもらいながらやりました。
何で電源ユニットとかいうの買うの
当たり前だろと思う人もいるとは思いますが、普通のデスクトップにGPU追加しよう!と思うと電源周りを気にしないといけないです。
PCには電源ユニットと呼ばれるパーツがあり、これ次第で供給できる電力量が変わります。実際にPCを組み立て・増設する際には以下のサイトで必要電源容量を調べて、おすすめされた電力の電源ユニットを買うというのが一般的らしいです。
実際に自分も調べて、もし増設したらどうなるかを調べました。
グラフィックボードを足しただけでも220W追加で必要とされるようです。
もともとついている電源が400Wで足りないため、お勧め電源容量である720W以上のものとして750Wの電源ユニットを選びました。
何でメモリ買ったの
メモリ32GBはなぜ買ったかというと別にGPUを足す分にはマストであるものでないですが、単純に全体のバランスを考えてメモリも増設しようと思って購入しました。
別に16GBとかでもいいと思います。
疲れたこと
電源につながっているピンをすべて外して、新しい電源に対してすべて同じように差し替えます。
自分の場合はマザボに2本、HDD1本、SSDに1本、DVDに1本ついていたのを付け替えました。
箱にも以下のような対応を書いてくれているので分かりやすかったです。
▼何ならピンに直接記載されているのでやりやすかった
ほぼ教えてもらいながらだったけど1日中ハマるということはなく、割とすんなりできたんじゃないかなと思います。
完成
すべて付け終えました。
電源をつけてnvidiaドライバーをインストールします。
▼やったぜ
Blenderとかで遊びます、ゲームはあまり興味ないかな...
【追記 2021/2/5】
▼Blenderで試しに作成しました
最初うまくGPUを設定できなくPCが固まる問題がありましたが以下のように[プロパティ]→[レンダー]→[デバイス]→GPU演算を指定し忘れていただけでした。
(プレファレンスで設定したから勝手に設定してくれるんかと思った)
Erasing Integrated Learning : A Simple yet Effective Approach for Weakly Supervised Object Localization 自分用まとめ
論文リンク
どんな論文?
CVPR2020採択論文。Weakly supervised object localization (WSOL)をするための手法。WSOLとはセグメンターションラベルのようなラベルではなく、単純にクラスラベル程度の簡単なラベル情報だけで物体の位置、大きさ(要は簡単なセグメンテーションみたいなもの)を得ようというものである。
VGGみたいな一般的な分類モデルに基づいた方法は対象物全体ではなく、もっとも識別根拠の高い部分だけを強調してしまうという。逆に全体的な範囲に向けると今度は画像分類の精度が落ちるという。
この論文の結果を見れば分かるかもしれないが、要は下図の真ん中の行のように鳥の顔部分しか得られていない状態が「もっとも識別根拠の高い部分だけを強調してしまう」ということである。一番下のように鳥全体を覆うような感じにしたい。
そのため本手法ではErasing Integrated Learning「EIL」と呼ばれるシンプルでより良い手法を提案した。
CUB-200-2011とILSVRC 2016のベンチマークにおいて、ともに新たな大幅な改善を確認した。
関連論文、先行研究では得られたCAMや特徴マップの結果を、入力画像にマスクしたり、特徴マップにマスクしたりすることで重要な部分を順次隠しつつ、重要だと思われる他の部分どんどん追っていこうみたいなアプローチ。 当然のことながら、入力画像をマスクしたりすれば、重要な部分が隠されるわけなので精度は下がるという事態が起きかねない(というか起きると考えるのが当然)。
手法のキモ
全体図
EILの全体図を以下に示す。
ここでは論文のように、VGG16が以下の図のように使われてるとします。
下の部分だけだと一般の学習法であることが分かります。
学習手順
まずはconv11~pool4まで通します。
チャンネルごとの平均プーリングを用いて平均マップを得ます。
適当な閾値用いて2値画像にします。
得られた2値画像とconv11~pool4から出力される特徴マップをかけ合わします。
conv51~conv53→GAP(Global Average Pooling)を通します。
それぞれCrossEntorpyを計算し、を全体の損失関数とします。
以上のアルゴリズムをまとめると以下のようになります。
実際にこの設定で学習を進めてめると以下の図のようになるらしい。
また分岐する地点を増やしたMultiple EIL(MEIL)を使うとより効果的であった。
結果
感想
シンプルな方法なので、試すのはそこまで難しくないかも。
何か間違ってたら教えてください。マジでお願いします。