ディープラーニングフレームワークFlashを使用して、わずか数行のコードで画像分類器を構築する方法

ディープラーニングフレームワークFlashを使用して、わずか数行のコードで画像分類器を構築する方法

[[412621]]

【51CTO.com クイック翻訳】 1. はじめに

画像分類は、画像がどのクラスに属するかを予測するタスクです。このタスクは画像表現のため困難です。画像を平坦化すると、長い 1 次元ベクトルが作成されます。さらに、この表現では隣接する情報が失われます。したがって、特徴を抽出し結果を予測するにはディープラーニングが必要です。

場合によっては、ディープラーニング モデルの構築は困難な作業になることがあります。画像分類の基本モデルは作成しましたが、コードの作成にかなり時間がかかりました。データの準備、モデルのトレーニング、モデルのテスト、サーバーへのモデルのデプロイを行うためのコードを準備する必要があります。ここで Flash が役に立ちます!

Flash は、ディープラーニング モデルを迅速に構築、トレーニング、テストするための高レベルのディープラーニング フレームワークです。 Flash は PyTorch フレームワークに基づいています。したがって、PyTorch を知っていれば、Flash にも精通しているはずです。

PyTorch や Lightning と比較すると、Flash は使いやすいですが、以前のライブラリほど柔軟ではありません。より複雑なモデルを構築する場合は、Lightning を使用するか、PyTorch を直接使用することができます。

Flash を使用すると、わずか数行のコードでディープラーニング モデルを構築できます。ディープラーニングを初めて使用する場合でも、心配する必要はありません。 Flash を使用すると、コードに混乱することなくディープラーニング モデルを構築できます。

この記事では、Flash を使用して画像分類器を構築する方法を説明します。

II. 実施

ライブラリのインストール

ライブラリをインストールするには、次のように pip コマンドを使用します。

  1. pip インストール lightning-flash

そのコマンドが機能しない場合は、GitHub リポジトリを使用してライブラリをインストールできます。コマンドは次のとおりです。

  1. pip で git+https://github.com/PyTorchLightning/lightning-flash.git をインストールします

パッケージを正常にダウンロードできたら、ライブラリをロードできるようになります。シードも42番に設定しました。これを実行するコードは次のとおりです。

  1. pytorch_lightningからseed_everything をインポートします
  2.  
  3. フラッシュをインポート
  4. flash.core.classificationからラベルをインポート
  5. flash.core.data.utilsからdownload_data をインポートします
  6. flash.imageからImageClassificationData、ImageClassifier をインポートします
  7.  
  8. #ランダムシードを設定します
  9. シード_エブリシング(42)
  10. グローバルシードセット  42まで
  11. 42

データをダウンロード

ライブラリがインストールされたので、次はデータを取得します。デモンストレーションのために、「Cat and Dog dataset」というデータセットを使用します。

このデータセットには、猫と犬の 2 つのカテゴリの画像が含まれています。データセットにアクセスするには、Kaggle で検索してください。データセットにはここからアクセスできます。

データの読み込み中

データをダウンロードしたら、データセットをオブジェクトにロードしましょう。 from_folders メソッドを使用して、データを ImageClassification オブジェクトに格納します。これを実行するコードは次のとおりです。

  1. データモジュール = ImageClassificationData.from_folders(
  2. train_folder = "cat_and_dog/training_set"
  3. val_folder = "cat_and_dog/validation_set"

モデルの読み込み

データをロードした後、次のステップはモデルをロードすることです。独自のアーキテクチャをゼロから構築するわけではないので、既存の畳み込みニューラル ネットワーク アーキテクチャに基づく事前トレーニング済みモデルを使用します。

事前トレーニング済みの ResNet-50 モデルを使用します。さらに、データセットに基づいてカテゴリの数を設定します。これを実行するコードは次のとおりです。

  1. モデル = ImageClassifier(バックボーン = "resnet50" 、num_classes = datamodule.num_classes)

モデルのトレーニング

モデルが読み込まれたら、次はモデルをトレーニングします。まず Trainer オブジェクトを初期化する必要があります。モデルを 3 エポックにわたってトレーニングします。さらに、GPU を使用してモデルをトレーニングできるようにします。これを実行するコードは次のとおりです。

  1. トレーナー = flash.Trainer(max_epochs=3, gpus=1)
  2. 使用可能な GPU: True 、使用済み: True使用可能な TPU: False 、使用中: 0 TPU コア

オブジェクトを初期化したら、モデルをトレーニングしましょう。モデルをトレーニングするには、finetune と呼ばれる関数を使用できます。関数内で、モデルとデータを設定します。さらに、トレーニング戦略をフリーズに設定して、特徴抽出器をトレーニングしないことを示します。つまり、分類器部分のみをトレーニングします。

これを実行するコードは次のとおりです。

  1. trainer.finetune(モデル、データモジュール=datamodule、戦略= "freeze" )
  2. LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0] |名前| タイプ | パラメータ---------------------------------------- 0 | メトリック | ModuleDict | 0 1 | バックボーン | シーケンシャル | 23.5 M 2 | ヘッド | シーケンシャル | 4.1 K ---------------------------------------- 57.2 K トレーニング可能なパラメータ 23.5 M トレーニング不可能なパラメータ 23.5 M 合計パラメータ 94.049 推定モデルパラメータの合計サイズ (MB)  
  3. 検証の妥当性チェック: 0it [00:00, ?it/s]
  4. グローバルシードセット  42まで
  5. トレーニング: 0it [00:00, ?it/s]
  6. 検証中: 0it [00:00, ?it/s]
  7. 検証中: 0it [00:00, ?it/s]
  8. 検証中: 0it [00:00, ?it/s]

評価結果は次のとおりです。

結果から、モデルの精度は約 97% であることがわかります。悪くないですね!では、新しいデータでモデルをテストしてみましょう。

モデルのテスト

モデルがトレーニングされていないサンプル データを使用します。以下はテストするモデルのサンプルです。

  1. matplotlib.pyplot をpltとしてインポートします。
  2. PIL インポート画像から
  3.  
  4. 図、ax = plt.subplots(1, 5、図のサイズ=(40,8))
  5. iが範囲(5)内にある場合:
  6. ax[i].imshow(Image.open ( f'cat_and_dog/testing/{i+1}.jpg' ) )
  7. plt.show()

モデルをテストするには、フラッシュ ライブラリの predict メソッドを使用できます。これを実行するコードは次のとおりです。

  1. model.serializer = ラベル()
  2.  
  3. 予測 = model.predict([ "cat_and_dog/testing/1.jpg" ,
  4. 「cat_and_dog/テスト/2.jpg」
  5. 「cat_and_dog/テスト/3.jpg」
  6. 「cat_and_dog/テスト/4.jpg」
  7. 「cat_and_dog/テスト/5.jpg」 )
  8. 印刷(予測)
  9. [ '犬' '犬' '猫' '猫' '犬' ]

上記の結果から、モデルが正しいラベルを持つサンプルを予測していることがわかります。素晴らしい!後で使用するためにモデルを保存しましょう。

モデルを保存する

モデルをトレーニングし、テストしました。 save_checkpoint メソッドを使用してモデルを保存しましょう。これを実行するコードは次のとおりです。

  1. trainer.save_checkpoint( "cat_dog_classifier.pt" )

別のコードに対してモデルをロードする場合は、load_from_checkpoint メソッドを使用できます。これを実行するコードは次のとおりです。

  1. モデル = ImageClassifier.load_from_checkpoint( "cat_dog_classifier.pt" )

3. 結論

よくできました! Flash を使用して画像分類器を構築する方法を学びました。記事の冒頭で述べたように、必要なのはほんの数行のコードだけです。すごいと思いませんか?

この記事が、皆さんの状況に合わせた独自のディープラーニング モデルの構築に役立つことを願っています。より複雑なモデルを実装したい場合は、PyTorch の学習を開始することをお勧めします。

原題: Flash を使って数行のコードで画像分類器を構築する方法、著者: Irfan Alghani Khalid

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください]

<<:  ディープラーニングを使用して、写真用の強力な画像検索エンジンを構築します

>>:  ドローン基地局は被災地の通信復旧にどのように役立つのでしょうか?

ブログ    
ブログ    

推薦する

文書翻訳における人工知能: 効率化の新時代

今日、言語を超えた効果的なコミュニケーションはこれまで以上に重要になっています。企業が新しい市場に進...

297 件の論文すべてを 1 つの記事で読むことができます。中国科学院が「拡散モデルに基づく画像編集」に関する初のレビューの出版を主導

この記事では、画像編集の最先端の手法を包括的に研究し、技術的なルートに基づいて 3 つの主要なカテゴ...

GraphSAGEグラフニューラルネットワークアルゴリズムの詳細な説明

GraphSAGE は 2017 年の論文ですが、その名前に含まれる 2 つのキーワード「帰納的」と...

...

...

[ディープラーニングシリーズ] PaddlePaddle と Tensorflow を使用したクラシック CNN ネットワーク AlexNet の実装

先週、私たちは PaddlePaddle と Tensorflow を使用して画像分類を実装し、自分...

...

Pythonでシンプルだが強力な顔認識システムを書く

face_recognition は、強力でシンプル、使いやすい顔認識オープンソース プロジェクトで...

2019 年に人工知能アルゴリズムのポジションをめぐる競争がこれほど激しいのはなぜでしょうか?

AI関連の学位取得者は高給を得るのが難しいとメディアが以前報じていたのとは全く対照的に、多くの応募...

...

国連は、国際社会がガバナンスを強化するための支援を提供するためにAI諮問機関を設立した。

国連のアントニオ・グテーレス事務総長は10月27日(現地時間10月26日)、国際社会がAIのガバナン...

AI時代のセキュリティ情勢にはどのような新たな変化が起こっているのでしょうか?

近年、世界の人工知能産業は急速な発展の勢いを見せており、セキュリティ状況はますます複雑になっています...

AIがデータセンターの設計をどう変えるか

AI システムへの世界的な支出は 2023 年から 2026 年の間に 2 倍になると予想されており...

これを読めば分かるでしょう。これらは人工知能によって排除されつつある主要な職業です。

AIインテリジェンスは近年急速に発展しており、技術の進歩をもたらす一方で、一部の業界にも影響を与え...

ディープニューラルネットワークを使用して三体問題を1億倍速く解く

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...