ソウルICTイノベーションプラザ-人工知能プレミアムコース(視覚知能)11日目


※ Notification
本文は著者が理解した内容に基づいて書かれているため,誤りがある可能性がある.
间违ったところがあったら、伝言を残してください.私たちは修正します.

Intro


今日は前のレッスンで行われたGTSRBプロジェクトを終え、前に学んだCNNを利用してKaggleのSurface Creack Detectionプロジェクト実習を行いました.
次に,転送学習の理論と簡単なサンプルコードをレビューした.

GTSRB train/test directory


前回のレッスンで説明したように、元の画像をtrain/testディレクトリに保存し、train/testディレクトリで学習します.
GTSRB
 |- train
     |- 00000
     |- 00001
     |- .....
     |- 00042
 |- test
     |- 00000
     |- 00001
     |- .....
     |- 00042
train/testディレクトリを使用する手順は、次のとおりです.
  • 元のデータをtrainディレクトリ
  • にコピー
  • テストディレクトリの作成とサブディレクトリの作成
  • 列のデータから分割率で試験データ
  • に移動する.
  • IO検証
  • エラーなし
  • 以降の
  • Directと同じ前処理とモデル学習
    大きな困難はなく、IO過程でデータが漏れることも考えられませんでしたが、よく考えてみると、やはり可能だと思います.
    また、copytreeeで元のデータを完全にコピーするのはずっと速いと言われています.
    最初は、元のデータからtrain/testフォルダに移動したいのですが、どうせ移動するなら、上記の方法はずっと効率的だと気づきました.

    Project


    プロジェクト報告書についても説明していて、ちょうどTOYプロジェクトを計画しているので、役に立つ内容がたくさんあります.
  • はどんな項目で、どんなデータを使っていますか
  • チーム構成、R&R(Role and Responsibility)
    -データ収集、スクロール、ダウンロードなど、
  • を詳細に記述します.
  • データソースおよび構成
  • プロジェクト目標、ソース、開発環境、開発手順および時間
  • モデルアーキテクチャと原因
  • プロジェクト実施中のエラーと問題
  • プロジェクト改善(自己批判)
  • 残りの部分はあまり説明することはありませんが、もういくつか書きましょう.

  • 開発環境
    python、numpyバージョンなどを宣言する必要があります.
    バージョンが違うと動かない可能性があります
    ->実は、これらの部分のため、多くの人がドックステーションを使っていることを知っています.

  • 開発手順と時間
    これは考慮されていない部分であり、単純にプロジェクト期間全体や大きな段階的な期間を考慮しただけである.
    しかし,データの前処理時間,アーキテクチャの設計と学習時間,テストとデバッグ時間などの要因を考慮しなければ,これは真のプロジェクトとは言えない.
    現在の業界では、同じプロセスを繰り返し実行する必要があり、構成時間やリソースの重要な資料である可能性があります.

  • モデルアーキテクチャを選択する理由
    人々がたくさん使っているだけに、使う理由はありません.
    10種類のモデルを振り返ると,そのアーキテクチャが良好であると考える理由がある.
  • Surface Crack


    GTSRBプロジェクト終了後、以前学習した内容に基づき、KaggleのSurface Crackプロジェクトを行いました.
    train/testディレクトリを作成してモデル学習を行うことで、99%以上の精度を維持しながらオーバーフィットを低減します.
    この過程でlossグラフはスムーズに表示されず、learning rateでよりスムーズな曲線が見えます.
    Adamの基本学習率は0.001,1 e−3であった.今日まで、1 e-4はまだ何個0があるのか分からないので、この機会にはっきり覚えることにしました.

    Transfer learning


    Cats and Dogs Dataset


    まずCatsとDogs Data setでモデルを変換させてもらい、勉強がうまくいかない理由を考えさせていただきました.
    最初は、前のデータセットよりも写真のサイズ(画素数)が大きく、画像サイズを小さくすれば良いと思います.しかし、画像の大きさを変えても、グラフはとても面白い形をしています.
    他の理由を考えているうちに、授業が行われました.答えはデータにあります.
    MNISTやGTSRBなどのデータは少なくとも10000万個あるが、CatsやDogsのデータセットは2000個しかない.写真の大きさを変えるときに一度shapeを撮ったことがありますが、大きさを変えることに集中しすぎて気が狂うことができませんでした.
    データ量が小さいと、モデルがどんなに構成されていても、良好なパフォーマンスを得ることは難しい.
    限られたデータをすべてのデータに適したwとbに汎用するのは難しいからである.

    Transfer learning


    前述したように、モデル学習ではデータ量が重要であり、ご存じのように、良質なデータを収集することは容易なことではないので、転送学習を使用します.
    画像の特徴を分割すると、任意の画像に分割特徴として適用することができる.この観点から、事前に大量のデータで良いモデルを持ってきて、私たちが望んでいるデータでいくつかの特徴を少し変えると、モデルを最初から学ぶ必要がなく、良い性能を得ることができます.

    Fine tuning


    Fine Tuningとは,既存の設定の特徴値を微調整することであり,その名の通り微調整である.
    Fine Tuningでは、Tineは1番の좋은ではなく、4番の미세한です.
    これは,既存学習の重み付け値を損なわずに適用するデータセットの特徴を反映するため,重み付け値を非常に細かく調整するためである.
    従って、学習率は一般に1 e−4~2 e−5の間で値をとるべきである.つまり、必ずしもそうではないが、どうしても細かい勉強をしなければならない.
    mobilenet = MobileNet(weights='imagenet', include_top=False, input_shape=(224,224,3))
    
    model = Sequential()
    
    model.add(mobilenet)
    model.add(Flatten())
    model.add(Dense(64, activation='relu'))
    model.add(Dropout(0.25))
    model.add(Dense(2, activation='softmax'))
    
    model.compile(loss='sparse_categorical_crossentropy',
                  optimizer=Adam(2e-5),
                  metrics=['acc'])
    model.summary()
    前のコードにTransfer学習を適用した.
    include_topオプションで、上部に分類レイヤが含まれないようにします.すなわち,Feature Extractor部分のみを導入する.
    結果は以下の通りです.
    は性能が優れていませんが、少し修正すれば良いモデルになるモデルもあります.
    何をするにしても、さっきのグラフよりきれいです.
    様々な事前訓練のモデルがありますが、講師はXceptionとMobileNetが好きだと言っています.

    Note

  • IOの過程でデータが失われる可能性があるので、確認の習慣を身につけます.
  • 元のデータをcopytreeにコピーします.
  • プロジェクト報告書には、開発環境、段階方法と時間、モデルを選択する理由などが含まれるべきである.
  • 1e-3 == 0.001
  • グラフの曲がりがひどい場合は、学習速度を減らします.
  • 転送学習およびFineチューニングセット
  • Outro


    最近、コードを続けることの大切さを感じました.
    何度も過去のコードを見る習慣を身につけて、勉強したコードを私のコードに変えます.