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

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

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

ブログ    
ブログ    
ブログ    

推薦する

自然言語処理 (NLP) とは何ですか?

[[399636]] 【51CTO.com クイック翻訳】自然言語処理 (NLP) の定義自然言語...

イェール大学教授を征服したアルゴリズムプログラマーを見て、「人間本位」を実践してスマートコミュニティの脳を開発するにはどうすればよいのでしょうか?

自宅の高齢者が階段を降りる途中で誤って転倒したり、地域でいたずらっ子が走り回ってトラブルを起こしたり...

アントチェーン、AI + ブロックチェーン技術でオリジナル作品を共同保護するデジタル著作権サービスプラットフォームの開設を発表

10月22日、アントチェーンはデジタル著作権サービスプラットフォームを社会全体に開放することを正式に...

自動運転車におけるセンサー応用に関する重要な考慮事項

[[348758]]運転支援運転システム (ADAS) や自律走行車 (AV) 向けのセンシング技術...

...

...

AIと5Gテクノロジーがスマートグリッドのセキュリティ課題解決に貢献

[[334279]]この記事の主な内容:マイクログリッド、発電機、太陽光パネルなどのスマートグリッド...

Java プログラミング スキル - データ構造とアルゴリズム「バイナリ ソート ツリー」

[[390181]]基本的な紹介バイナリ ソート (検索) ツリー: バイナリ ソート ツリー内の...

人工知能は良いものだが、企業はAIの適用時に4つの大きな間違いを犯している。

問題は正確には何ですか? これらのエラーを回避する方法はありますか?今日、人工知能 (AI)、機械学...

AIRankingsが世界の大学AIランキングを発表

今年も大学入試シーズンがやってきました。私が大学受験をしていた頃には、この言葉が流行っていたのを覚え...

...

河南省鄭州市:自動運転オンライン配車サービス車両が一般公開

[[408894]]河南省鄭州市では7月1日、鄭東新区で自動運転バスと自動運転乗用車が運用開始され、...

AI大学院生は年間50万元を稼ぐことができるが、彼らの給料は学校を卒業する前からすでに奪われている。

先週末、人工知能が素晴らしい動きを披露した。ボストン・ダイナミクスのロボット「アトラス」は完璧なバク...

自動運転マシンビジョンの4つの基本タスクを理解するための1万語

ディープラーニングは、機械学習の中で最も急速に成長し、最もエキサイティングな分野の 1 つになりまし...