自分がすごいと思ったGitHub上のリポジトリ【機械学習編】

# はじめに
　GitHub上で見つけた「使いやすい」「コードが綺麗」「これ考えた人は天才」など、すごいと思った機械学習に関係するリポジトリを、メモしておくことにしました。

(6月05日の修正内容)[pytorch-CycleGAN-and-pix2pix](#pytorch-cyclegan-and-pix2pix)に書かれている内容が、CycleGANかpix2pixかが曖昧だったため修正。StackGAN-PytorchのURLの追加（自分はまだ理解が足りないと考え説明は書きませんでした）
# 目次
<!-- タイトルとアンカー名を編集 -->

##Object Detection
1. [a-PyTorch-Tutorial-to-Object-Detection](#a-pytorch-tutorial-to-object-detection)

##Segmentation
1. [pytorch-semseg](#pytorch-semseg)
2. [FCHarDNet](#fchardnet)

##Gan
1. [pytorch-CycleGAN-and-pix2pix](#pytorch-cyclegan-and-pix2pix)
2. [UNIT](#unit)
3. [MUNIT](#munit)
4. [GameGAN](#gamegan)
5. [StackGAN-Pytorch](#stackgan-pytorch)


<!-- 各チャプター -->
<a id="#a-pytorch-tutorial-to-object-detection"></a>
#a-PyTorch-Tutorial-to-Object-Detection
https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Object-Detection

　PyTorchでObject Detectionの訓練、評価、推論を行うことのできるコードが置かれたリポジトリです。
　README.mdに、Object Detectionがどのような技術なのか、1から0しか出力できないニューラルネットワークで、どのようにオブジェクトを囲う処理が行われるのかがとても分かりやすく書かれています。
　「Object Detectionが理解ができない」という方はこのREADMEをぜひ読んでみてください、英語のみしかありませんが、頑張って訳す価値は十分あります。

<a id="#pytorch-semseg"></a>
#pytorch-semseg
https://github.com/meetshah1995/pytorch-semseg

　PyTorchでセグメンテーションの訓練、評価、推論を行うことのできるコードが置かれたリポジトリです。
　今まで見た中では、かなり多くのデータセットに対応しており、コンフィグファイルを用いることで、少ない引数でコマンドを実行できるので、かなり使いやすかった。
　ただし、最後に更新されたのが2年ほど前と、若干古いので、ライブラリのバージョンによってはコードの修正を行わないと動かない場合がある。

<a id="#fchardnet"></a>
#FCHarDNet
https://github.com/PingoLH/Pytorch-HarDNet

https://github.com/PingoLH/FCHarDNet

　[pytorch-semseg](#pytorch-semseg)のコードをもとに、高速にセグメンテーションの推論が可能なモデルの学習と推論を行うためのコードが置かれたリポジトリ。
　モデル自体も小さいのか、家にあった低スペックPC(i3-8100+GTX1650)でまともに学習ができることには驚いた。
　普通は、低スペックPCでセグメンテーションの学習を行うと、どんなにパラメータをいじっても、まともな結果にならないか、学習ができないかのどちらかなのです。
　（余談ですが、低スペックPCで機械学習は、やらない方がましなくらい時間の無駄なので、金に糸目をつけずハイエンドPCを買うか、Google Colaboratoryとかkaggleのサービスを使うべきです。いずれ、FCHarDNetを見つけるまでの低スペックPCとの格闘の日々についても書く予定。）

<a id="#pytorch-cyclegan-and-pix2pix"></a>
#pytorch-CycleGAN-and-pix2pix
https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

　ある画像を別の意味を持つ画像に変換する、CycleGANとpix2pixの2つの技術が紹介されているリポジトリです。
　pix2pixは[Image-to-Image Demo](https://affinelayer.com/pixsrv/)で作った猫の化け物が有名で、CycleGANは馬の画像を、シマウマの画像に変換するのが有名。
　pix2pixの特徴は、高度な損失関数の設定を必要とせずに、どのような画像でも特定の意味を持つ画像への変換が可能になったということで、つまり、今まで天才でしかできなかったことが、Pythonと少しの機械学習に対する知識さえあれば、簡単にできるようになったということです。
　CycleGANの一番の特徴が、同じ形状の対になる画像を用意しなくていいという点であり、例えば、CycleGANができる前に、馬の画像からシマウマの画像を作るモデルを作りたければ、同じ景色、同じポーズ、同じ形状の馬とシマウマの写真が必要だったのに対して、CycleGANは、何も考えずに馬の画像とシマウマの画像を用意するだけで計算ができる。
　ただし、形状の変更が苦手らしく、その点については[UNIT](#unit)などの解決策が提案されている。

<a id="#unit"></a>
#UNIT
https://github.com/mingyuliutw/UNIT

　CycleGANでは難しかった形状の変換をできるようにしたUNITの学習と推論ができるコードが置かれたリポジトリ。
　勉強不足でうまく理解できていないので詳細は割愛。

<a id="#munit"></a>
#MUNIT
https://github.com/NVlabs/MUNIT

　UNITが1つの画像を入力すると1つの画像しか出さないのに対して、MUNITは1つの画像を入力すると複数の画像を出力してくれる。

<a id="#gamegan"></a>
#GameGAN
https://github.com/nv-tlabs/GameGAN_code

　ゲームの画像と操作履歴を用いて、ゲームを再現するモデルの学習ができる。
　ビデオメモリーをかなり消費するので、AWSでGPUの環境を借りるか、高いGPUを買うかしないかも。

<a id="#stackgan-pytorch"></a>
#StackGAN-Pytorch

https://github.com/hanzhanggit/StackGAN-Pytorch

　文章を入力して、その文章に合った画像を出力するモデルの学習と推論ができるリポジトリ。

<a id="#reference"></a>
# 参考文献
- [paperswithcode](https://paperswithcode.com/)