日記0129

さっき昨日の分の記事を書いた。

 

今日は昨日に引き続き基礎研の実験部分をやる。やった。日付が変わってから寝る前までにやったことを書く。テストケースの生成は単一ケースを生成するのをC++で書いてそれをシェルスクリプトで何回か実行して作った。なぜそんなことになったのかというとC++でファイル操作をするのがだるいイメージがあるためだ。標準出力に出力するコードを書いてそれをリダイレクトでhoge.txtに書き込むほうが楽かなと思ったので、そうした。実際にどうなのかはわからない。実行は、「シェルスクリプト ファイル すべて」で検索して以下のようなコードを書いた。vscodeからコピペしてくると、色がそのままなのですごいと思った。


dir_path="./testcases/"
files=`find $dir_path -maxdepth 1 -type f`

for file in $files;
do
  ./a.out < $file > /dev/null
done

実行してみて気づいたが、流量を最大1e8ぐらいにしてしまったのでford fulkersonが全然終わらない。実験はdinicとford fulkersonとpush relabelの三つで同じケースで時間を計測して速いのと遅いので適当な考察をするつもりだったので、ford fulkersonが遅いのは予想していたがここまで遅いとは思わなかった。今日はお腹がすいたので何か食べて寝ることにした。

金曜日の授業は午後から情報工学実験があるだけなので朝寝られてうれしい。

起きて、アマゾンプライムNEW GAME!!を見ていたら午前が終わって実験が始まった。
なぜNEW GAME!!をみていたのかというと、アマゾンプライムビデオできらら系アニメと検索したところ、一番最初に出てきたためである。3話ぐらいまで見た。とttttってもよかった。とくに一話の桜ねねさんと阿波根うみこさんが良かった。拙者は百合豚ではござらんので.....すが、女性同士でなんらかの感情を伴う関係がとても良いと感じるのです。
実験は先週、先々週に引き続きクラスタリングとやらをやった。先週まではデータがテキストで与えられるので適当に距離を出して最小全域木をつくるのを途中でやめればよかったので楽だったのだが今週は画像の分類で、なにをしていいかわからなかった。
画像間の距離、を計算できれば今までと同じようにやるだけなのだが画像の類似度がわかるような基準を見つけることが出来なかった。
本当に何もわからなかったので最初は読み込んだ画像を白黒にして白の画素数と黒の画素数を数えて二次元データとして扱い、分類をした。当然分類された画像に共通点を見いだせなかった。
次に、思いついたのが白黒だけでなくもうちょっと拡張してやるというものだ。画像はpythonopen cvでは[b,g,r]の二次元配列である。このとき、 0 \leq b,g,r \leq 255なので、この組み合わせは256の3乗通りあって、全てをデータとして持つことはできない。なので0から255の値を4段階にわけて4の3乗通りぐらいにすれば持てそうな気になる。つまり、[0,100,250]の画素は[0,1,3]に、[10,20,30]は[0,0,0]にみたいに圧縮するのである。これで画像が64色で塗り分けられたのと同じような状態になった。あとは長さ64の配列で各色が何個あるかをもって、距離の計算は\sqrt(\sum_{i=0}^{63}(a_i - b_i)^2)とすればよい。二乗和のルートをとるやつ、なにがうれしいかわからんけど使いがち。これをして、今までと同じように木の数が一つになるまでではなくM個になるまでクラスカル法で最小全域木を作ればよい。Nは50と小さいのでO(N^2)個の辺を計算してもよい。ちなみにxy座標平面上のN個の点が与えられて点対間の距離をユークリッド距離で計算して最小全域木を作るのはドロネーの三角形分割をすることでO(NlogN)で解けるらしい。これもやろうと思ったけど実装が辛そうで断念した。幾何は、つらい。
えー、何を話しているかがわからなくなってきた。
画像を64次元データに落とし込めた。というところまで話した。というか書いたので、その距離を計算してやるだけかと思ったら出来上がった結果が[10,10,10,10,10]ぐらいで分けられてほしかったのに[46,1,1,1,1]になってしまった。あほばかかすくそ
辺とか併合される過程とかを出力してみてみるけど64個もデータがあるのは目デバッグは不可能ということがわかった。というか一回の処理で画像の読み込みに3分ぐらいかかっていてかなり嫌な気持ち。読み込んだデータを全部テキストで出力しておけば次から高速になるんじゃないかと思ったがndarrayを出力すると,区切りじゃなくて読み込みができなかった。
想定していたのは出力が [[1,2,3,4],[0,9,9,8]]みたいな感じで一行読み込んでevalでそのまま使う、というものだったので。実際は[[0 1 2][3 4 5]]みたいな感じだった。
えー[46,1,1,1,1]になってしまう対策として集合をマージするときにどちらかの大きさが12より大きかったらマージしないという処理を入れていい感じにばらけるようにした。
結果もよくはないけど悪くもない。という感じになった。
ここらへんで授業が終了したので終わった~~という気持ちでTwitterを眺めていると、画像の背景がそのままなのがまずくね?という気持ちが浮かんだ。これはそうで今回は食べ物画像の分類をしたけどお皿が写っているとかなり白に偏ってしまうことが容易に想像できる。
これはレポートの考察に書いて終了かな~と思う。
こたつでTwitterを見ていたら眠くなって起きているのか寝ているのかわからない状態で2時間ぐらい過ごした。気持ち良すぎ。
夜。基礎研を、します。
昨日作ったデータセットだがNとMが同じものしか作ってなかったので考察の使用がないということに気づきいろいろパラメータをいじって4種類×50ケースぐらい生成した。
計測してレポートに張り付けた。
日本語が、書けない。
何を書いていいかわからない。
前後の文を無視するような感じの一文を5つぐらいつなげて言いたいことを書いた。
考察が、書けない....!一言コメントしか思い浮かばん、終了です。
Twitterをみて、1日が終わった。
 
3日坊主どころか1日坊主になる可能性もあったので、今日書けて良かった。
40分ぐらい