高専2年生が機械学習を習得して、学内ハッカソンでトップ(?)を取るまでの物語

# はじめに
この記事は特に情報のない記事です。あなたが時間を無駄にしようとも、私は一切の責任を負いません。
また、語彙力-5千兆の文なので読みにくいです。

# 前提知識
いらない
いらない
いらない
keras
いらない
python
いらない
いらない
pytorch
GAN
いらない
resnet
いらない
いらない
いらない

# お話
### 高専入学前
特別推薦という特別枠で高専に合格した。が、入学はだいぶ後。時間もあったので、私は**♰python♰**を学習していた。
まず初めに、2冊の勉強本を買った。表紙の写真を張り付けようと思ったが、昨日(2021/4/5)後輩に譲渡したのであきらめた。
やさしいpythonがどうとか書いてあった気がする。知らんけど。
当時私にはつくりたいものもなかったので、ただひたすらによくわかんないものを勉強してたような気がする。
もちろん、そんなのでモチベが続くはずもなく、2日くらいでやめた。そのあとはずっとゲームとかしてた気がする

###1年生
結局何も身につけないまま、入学してしまう。当時やけにかたかった私は、友達もいなかった。半年くらいずっといなかった。おおマジ。
勉強もなんか面白くなくなったし、なにしよっかなとか考えてたら、悪魔的発想を思いつく
「そうだ、学校でやる情報系の勉強全部終わらそう！」馬鹿である。
そしてわずか2週間で、C言語の入門本の内容をすべて習得してしまう。サンプルも問題も全部解いた。今思えばよくそんなことできたなと思う。
minecraft beでコマンドを2000時間くらいずっといじっていた私は、情報系の分野にすでに特化していた。多分そのせいだろう。
でも習得しても特に作りたいものはなく、そのままC言語も忘れた。本当に何をしたいのかわからない。
そして、1年の夏。twitterで無駄な時間を過ごしていると、とあるツイートが目に入った。「RTしたら1500円のチュンカプレゼント！」というありきたりなツイートだ。
その時、男はひらめく。これ自動化すれば稼げる...と。
そしてpythonでそれを作ってしまった。しっかり稼げてしまっていて草が生えた。
試行錯誤の結果、1年間で17万円の回収に成功。今も動かしているが、すさまじい効率である。
これが、初めての成功体験である。
下の画像はすべて懸賞用のアカウント。自動化されている。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1128128/f2eb46f4-6cea-b1a4-88d2-78c8f2e4e44e.png" width=25%>




###2年生
なんか記事書くのめんどいからちょっととばす。
夏頃に、香川高専主催のAIサマースクールに参加する。友達に誘われたので行った。それが機械学習との出会い。
講義内では、機械学習の種類や、仕組みなどが説明された。なんとなくわかっていると思うが、この講座は本来4年生以上を対象としているので、式などが出されても全く理解できない。仕方ないのでこの時は式の理解を放棄した。
また、コンペも行われていた。結構上のほうの順位だった。
そこから少し自信がついたが、何を思ったかそれからずっとゲームしかしていなかった。

そして1月ごろ。学内の研究所内で、OpenCVについての講義があった。画像をいじくりまわせるライブラリだが、もちろんそんなものはすでに習得していたため、一瞬で終わった。そして講義も退屈なので、適当に聞き流している時、ふと、自分は機械学習を使えることを思い出す。
そして、何故かは覚えてないけどDeepFakeの文献を読んで、DeepFakeにはGANという技術が使われていることを知る。
そこから、GANについて調べてみると、画像を作れる機械学習の仕組みであり、最近の研究で一番面白い研究といわれているということをしった。
何を思ったか、これを一から作ってみたいな..keras使ってコーディングしてみたいな...となった。

ここまでが、本格的に習得する前のお話。

###大会前
気が付いたら、完全な趣味でGANの研究を開始していた。それも1か月間。
DCGANで、猫の画像を犬の画像に変えようとした(手法は今考えると頭おかしい)り、単純に猫の画像を生成しようとしたが、うまくいかない。
そして、勉強を進めているとあることに気づく。基礎知識がそもそもないという単純なことに。
GANは、何でもかんでも生成できるというものではなく、複雑なものを生成するのは不可能。猫なんて、特徴がありすぎて無理に決まっている。そこで学習データをアニメキャラクターに変更。そして、モデルにresnetを組み込んで再挑戦を繰り返すと、それっぽい画像が生成できるようになってくる。なんか楽しい。
ここまでが1週間の習得範囲
↓ここに流れがある程度載ってます↓
https://qiita.com/kosakae256/items/6da4d2d9d2ed567c5fc4

そして、DCGANは限界があることをさとって、PGGANを使うことにした。
PGGANはレイヤーの入れ替えをする構造をとらないといけないので、kerasでは実装できない。
そこで、pytorchを習得することになるが、pytorchは普通に難しいので習得に時間を要した。
細かい過程は省くが、最終的に完全な趣味の範囲で画像生成が成功する。
![image6-127550-.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1128128/e954357f-6c93-ed00-57e3-9b385f35949c.jpeg)

(これだけ見てもよくわかんないかもしれないけど、うまく加工するとしっかりとした画像になる。後でわかる)
そしてこれが完成した翌日に、次は何しようかなぁと考えていると、学内ハッカソンの情報が飛び込んでくる。
そして、せっかく作ったのにもったいないということで、友達(AIサマースクールの人)に頼み込んで、このシステムを応用したものをつくらないか？と提案し、作った。
それがこれ。

<iframe width="560" height="315" src="https://www.youtube.com/embed/nTWbbWN9AQo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


UIはペアの子が担当している。めっちゃきれい。
周りは基本的なものしか習得していないくらいの人しか出てない軽い大会なのに、こんなものを出してしまった。
それも一番手で。今思うと若干かわいそうだったなと少し反省している(大嘘)

出場者同士の投票で選ばれる、相互投票賞というものがあって、最優秀賞は存在しないので、実質それが優勝のようなもの
2位と6票差をつけて賞を獲得。ペアの子と喜びを分かち合った。

そして...俺たちの冒険はこれからだ！
おわり。

##最後に
よっぽどの物好きさんですねあなた。そんなあなたに～

このルートのRTAをご紹介します。

入学
↓
HTML、CSSなどのUI系を習得する
↓
pythonをclassまで習得
↓
PGGANについての理解をする
↓
pytorchの使い方を覚える。
↓
必要に応じて式も読む
↓
実装
↓
大会で大暴れ

完走した感想ですが、
pythonルートはやはり簡単なルートで、非常に応用が利きやすいです。
本RTAにおいてこのルートを採用したのには理由があります。
それは、挫折しにくいことです。サクサク学習できるので、そこがいいなと思いました。
また、C系で本RTAを走るという方もいると思いますが、それも別にいいんじゃないかなと思います。
あっちは難しいですが、速度がとても速いです。私は難しいのは嫌いなので、pythonルートを選びました。
プログラミングなんて楽しけりゃいいんだよ。
というわけで、みなさんもぜひ本RTAに挑戦してみてください。楽しいようにやればいいと思います。
私も、やったんだからさ？

こんなふざけた記事を投稿してタグ荒らししてごめんなさい。
ということでついったーふぉろーしてください

4/8追記
地味に伸びてるので、PGGANの構造についてもそのうち解説します。DCGANの記事は https://qiita.com/kosakae256/items/6da4d2d9d2ed567c5fc4 に乗ってます。解説はわかりにくいです。

4/13追記
記事かきました。私がやったすべてです。
[DCGANとPGGANを習得したお話-アニメキャラクター画像を生成するまでの過程](https://qiita.com/kosakae256/items/cf3293861c14956cce18)

2021/10/23追記
この記事の有用性はまったくもってわからないですが、なぜか伸びてしまってちょっと申し訳ないという気持ちがあります。
高専はやる気がある人にとってはとても良い場所です。コンテストとか本気で出たくて、高専行くの迷ってる方いたら、絶対行った方がいいです。
鳥羽商船来てもろてええんやで..