こんにちは、takeshiho0531です。
実は12月からインターンを始めていて、たくさん勉強させてもらっています。
今回はそこでfew-shot segmentationというものについて勉強した(している)ので、それについて書きたいと思います。
---------------------------------------
few-shot segmentationとは、通常の深層学習を用いた画像認識タスクでは学習に大量のデータが必要になるのですが、そこを数枚の学習データととそのアノテーションデータを用意するだけで、特定のクラスのセグメンテーションができるようになるという技術です。(ざっくりしすぎ??)
特にその中でもBAMという2022年3月にChunbo Lang氏らによって発表されたモデルについて勉強しました。このモデルを選んだ理由は、「Few-Shot Semantic Segmentation」のPapers WIth Codeを見ていた時にCodeについている星が多くて超初心者の私でもなんとかなるかもしれないと思ったからです。
BAMのPapers With Code →
Learning What Not to Segment: A New Perspective on Few-Shot Segmentation | Papers With Code
github →
論文 →
https://arxiv.org/pdf/2203.07615v2.pdf
この論文で初めて、Computer Visionの分野の論文を読んでコードを動かしてみて自分のデータでもやってみるということをしました。コードを動かすというのはこの論文のgithubのUsageのStage〇と書かれた部分をやってみた、学習・検証を言われた通りにやってみたということです。学習・検証にはインターン先のGPUを使わさせてもらいました。
やったこととかに関しては別の記事にしてちゃんと書きたいなと思っています。この記事ではやってみて(全然終わったわけではないが一区切りはついたかなという感じのタイミングなので)感じたこととかを忘れないうちに残しておこうと思います。
やったことなんて、特に学習・検証の部分はもうすでに書かれたコードを言われた通りに動かしたことだけで、難しいことは何一つとしてしていないのですが、長く苦戦していました。このパートでうまくいかなかった原因は、適切にファイルを置くことができていなかったからだと思います。もっとも多かったのはダウンロードがうまくできておおらず歯抜けになっていたり壊れていたりしていたこと(なんにせよデータがものすごく重たいので...)、あとは元々書かれたパスを適宜書き直さないといけなかったことが多かったという印象があります。こんなところで失敗するなんて考えていなかったので経験を積んでみるというのは大事なんだなと実感しました。自分のデータでやってみる、というパートで苦戦した理由は、自分の勉強不足だったと思います。具体的には転移学習って何、ファインチューニングって何、重症なものだと推論がよく分かってなかったというのが挙げられます。推論がわかっていなかったというのは重症で、私の場合は単に
可視化するのと何が違うのか、model.eval()にしたらどうなるのか、evalモードになったmodelになんの引数を渡せば推論ができるのかといった基本的なことがよくわかっていませんでした。torch.nn.Moduleの挙動が全くわかってなかったです。改めて自分ってカスなんだな〜となってかなり落ち込みましたが、でも実際に自分でやってみるのは本に書かれたことをなぞっただけの知識を自分のものにしていくのにすごく大事なんだなあとなりました。ちょっとはわかるようになったかな?
---------------------------------------
さて、すごく眠くなってきたのと1.5日後くらいに締切のレポをやらなければいけないので今日はこれくらいでご勘弁ください。
ではでは〜👋👋