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

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

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

ブログ    
ブログ    

推薦する

...

Yunqi CapitalのChen Yu氏:AI投資家を惹きつけてターゲットにする方法

[51CTO.comより引用] 2017年7月21日から22日まで、51CTO主催の人工知能をテーマ...

AIとIoTを活用したスマートサプライチェーン

デジタル時代では、サプライチェーンのインテリジェンスのレベルが企業の生産効率とパーソナライズされたサ...

機械学習が医療に革命を起こす

その中で、ヘルスケア業界は強力なスポンサーであり、新しいテクノロジーを積極的に導入してきました。人工...

大規模言語モデルとAIコードジェネレータの台頭

翻訳者 |李睿レビュー | Chonglouこの記事の著者であるMartin Heller は、 W...

APIなしでは「AI」が成功できない理由

クラウド、携帯電話時代、メタバース、そして現在の人工知能などのテクノロジーのトレンドはすべて、表面下...

商品受け取り時の顔認証システムを小学生が“クラック”!鳳超が緊急オフラインに

[[279460]]最近、「#小学生がアイテム拾いの顔認証のバグを発見#」という話題が注目を集めてい...

Jetson - Nano Opencv の基本的な使用方法

序文:前回のJetson Nanoの記事では、学習のためのアイデアや教材を紹介しました。今日は、引き...

保険会社、パンデミックによりAI自動化を導入

Star Health と ICICI Lombard は、医療保険契約者に対する請求の事前承認プロ...

欧州はAI規制を推進

先週、欧州の議員らは画期的な人工知能規制であるEU AI法案を圧倒的多数で賛成票を投じた。この法案は...

...

NBA スターと機械学習が出会うと...

[[282801]]私はバスケットボールが好きです。私はバスケットボールをしたり、観戦したり、バス...

...

ガイドはここにあります! GPT3.5を微調整して大規模モデルをカスタマイズしましょう!

著者 | 崔昊レビュー | Chonglou一般的なモデルは優れていますが、技術者は、独自の大規模な...

多国籍食品流通会社Sysco CIDO:当社の成長の秘訣はIT中心

トム・ペック氏がCOVID-19パンデミックの真っ只中にシスコに入社したとき、彼の主な目標は世界最大...