ディープラーニングフレームワーク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として明記してください]

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

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

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

人工知能の時代は私たちの生活にどのような影響を与えるのでしょうか?

これは視覚障害者向けに設計された特別な人工知能メガネです。このメガネを通して、視覚障害者は再びこの色...

AI によって自動化された、誰でも使えるオンライン写真編集!北京大学の卒業生がアルゴリズムを新たな高みへ

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

アルゴリズム設計者が新たな人気者になる

Aisle50 の共同創設者であるクリストファー・シュタイナー氏は、新著の中で、デジタルが優位性を...

Google AIが新世代の「物体検出」システムをリリース

[[319182]] 3月19日、Google BrainとAIチームは今週、EfficientDe...

開発速度が20倍にアップしました! GPT Pilot スター プロジェクトが Github のホット リストに掲載され、AI をゼロから構築

新たなスタープロジェクトが誕生! AI 開発者コンパニオンである GPT Pilot を使用すると、...

...

Google AIオープンソース:携帯電話で3D物体検出が可能、しかもリアルタイム

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

2030 年までに人工知能はどのようになるでしょうか?

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

数百万の量子ビットを実現するにはどうすればよいでしょうか?量子コンピューティング企業がユニバーサル量子コンピューティングソリューションを拡大

光ファイバーを光子のメモリとして使用し、光子メモリを使用してフォールトトレラント量子コンピューティン...

エッジAIとエッジコンピューティングについて学ぶ

エッジ人工知能 (EdgeAI) は、人工知能の分野における新しい注目の領域の 1 つです。目標は、...

AIと人間のバンドが初めてコラボしてアルバムをリリース

[[426819]] Dreaming RecordsとXiaoIceチームは共同で、人工知能と人間...

2024 年のコンテナ技術予測: パフォーマンス、AI、セキュリティの採用

パフォーマンス重視のコンテナ技術向けのツールとサービスを提供する Sylabs は、2024 年まで...

今回はホーキングの言うことを聞かなかった!人工知能が人間に取って代わる、これが科学が進む道だ

科学の分野では、人類の科学技術の発展のスピードは実に速く、人工知能と比較すると、すでに基本的に活用で...

自然言語処理の核心:シーケンス学習

人生におけるすべてのことは時間と関連しており、連続性を形成しています。シーケンシャルデータ(テキスト...