Pythonによるデータ分析・機械学習ブログ

Pythonによるデータの前処理・グラフ化、機械学習、統計解析、画像処理、Webスクレイピング、自然言語処理の基礎について紹介していきます。

MENU

【第21回】YOLOv10で自作データセットを用いて学習

はじめに

 近年、AI(Artificial Intelligence:人工知能)の急速な発展に伴い、それらを用いた技術が活用され始めています。例えば、AIによる画像認識技術として物体検出などがあります。物体検出は「画像の中から特定の物体の位置、種類、個数などの情報を認識する技術」であり、AIを用いて比較的高速に画像内の物体情報を取得することができます。この技術を用いて製造業では品質評価、外観検査、異常検知などに活用されています。

 リアルタイムに物体検出を行うアルゴリズムにYOLO(You Only Look Onse)と呼ばれるものがあり、CNN(Convolutional Neural Network:畳み込みニューラルネットワーク)を用いたアルゴリズムとなっています。2024年5月に最新の物体検出モデルYOLOv10が公開されています。

 本記事では、YOLOv10で自作データセットを用いて学習を行う方法を簡単に紹介します。

推論デモについての内容は下記の記事をご覧ください。

chantastu.hatenablog.com

 

1. YOLOv10のリポジトリ

YOLOv10のGithubリポジトリは以下です。

github.com

2. 動作環境構築

以下のコマンドで動作環境を構築できます。

 

3. データセットの用意

Roboflowで学習のテストを実施するためのサンプルデータセットを用意しました。アノテーション内容としては画像20枚に対してpersonとpotted plantの2クラスに対して矩形付与をしており、学習:検証:テスト=7:2:1の割合になっています。下記がアノテーション画像例です。

 

下記リンクからZipファイルがダウンロードできます。

https://app.roboflow.com/ds/Cmu0SZTXY7?key=VwBP4N8NgZ

また、以下のコマンドでディレクトリにダウンロードできます。

次にダウンロードした中のdata.yamlファイルの一部を修正します。

data.yamlを開くと、下記のようにtrain、valid、testのパスが書かれた行があるかと思います。

この部分のパスを修正します。上記でデータセットを「datasets/detect-test-1」内にダウンロードしたので、その部分を反映させます。さらに以下のように絶対パスに修正します。

 

4. 事前学習済みモデルの取得

 次に推論で使用するYOLOv10で提供されている事前学習済みモデル「yolov10s.pt」をダウンロードします。今回はyolov10ディレクトリ直下にモデルをダウンロードします。

 

5. 学習実行

 それでは学習を実行していきます。下記のコマンドを実行することで学習が実行されます。dataはデータセット内のdata.yaml相対パス、epochはエポック数、batchはバッチ数、imgszはモデルの入力サイズを指定できるので適宜変更してください。

実行すると下記のようなログが表示されます。最後の方を見ると「runs/detect/train/weights/best.pt」のパスに学習時の精度が良かったモデルが保存されていることが確認できます。

 

6. 検証

次にバリデーションをしていきます。ここでは学習したモデルの品質を評価します。下記のコマンドで実行します。batchはバッチ数を指定できるので適宜変更してください。

dataはデータセット内のdata.yaml相対パスを、modelは学習したモデルが格納されたパスを指定します。

上記プログラムを実行すると下記内容が表示されます。

 

7. カスタムモデルで推論

最後にカスタムモデルで推論をしていきます。下記のコマンドで推論を実行します。ここでconfは信頼度スコア、modelには学習したモデルのパス、--sourceにはテスト画像が格納されたディレクト相対パスやテスト画像の相対パスを指定します。

推論実行後、「/runs/detect/predict{No.}※No.は任意の数字」に推論結果の画像が保存されます。今回の結果は下図のようになります。

 

オススメ書籍

物体・画像認識と時系列データ処理入門

現場で使える!PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装

PyTorchで作る!深層学習モデル・AIアプリ開発入門

 

おわりに

 本記事では、YOLOv10で自作データセットを用いて学習を行う方法を簡単に紹介しました。最新のYOLOv10は非常に使いやすい印象です。アノテーション・学習をご自身でも行ってみて、目的達成のために物体検出を活用してみてください。

 

【第20回】YOLOv10による物体検出:動作環境の構築と推論デモ

はじめに 

 近年、AI(Artificial Intelligence:人工知能)の急速な発展に伴い、それらを用いた技術が活用され始めています。例えば、AIによる画像認識技術として物体検出などがあります。物体検出は「画像の中から特定の物体の位置、種類、個数などの情報を認識する技術」であり、AIを用いて比較的高速に画像内の物体情報を取得することができます。この技術を用いて製造業では品質評価、外観検査、異常検知などに活用されています。

 リアルタイムに物体検出を行うアルゴリズムにYOLO(You Only Look Onse)と呼ばれるものがあり、CNN(Convolutional Neural Network:畳み込みニューラルネットワーク)を用いたアルゴリズムとなっています。2024年5月に最新の物体検出モデルYOLOv10が公開されています。

 本記事では、物体検出モデルYOLOv10で物体検出の動作環境構築と推論デモの実行を行います。

 

1. YOLOv10のリポジトリ

YOLOv10のGithubリポジトリは以下です。

github.com

2. 動作環境構築

以下のコマンドで動作環境を構築できます。

 

3. 推論デモ用の画像ダウンロード

次に推論で使用するサンプル画像を用意します。今回は下の画像を用います。こちらをyolov10ディレクトリの直下に置きます。

 

4. 物体検出モデルのダウンロード

次に推論で使用するYOLOv10で提供されている事前学習済みモデル「yolov10n.pt」をダウンロードします。今回はyolov10ディレクトリ直下にモデルをダウンロードします。他のモデルを使用する際には、10nのところを10sなどに置き換えてください。

 

5. 物体検出の推論

では、最後に推論デモを実行したいと思います。「--model」で推論モデルを、「--source」の引数で画像の相対パスを、「--conf」で信頼度スコア閾値を指定しています。この引数に動画の相対パスを指定すると動画の推論が可能です。

上記のコマンドを実行すると、runs/detectの中にフォルダが作成されていると思います。そのフォルダの中のpredictの中に推論結果画像が保管されています。

オススメ書籍

物体・画像認識と時系列データ処理入門

現場で使える!PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装

PyTorchで作る!深層学習モデル・AIアプリ開発入門

 


おわりに

本記事では、物体検出モデルYOLOv10の動作環境構築と推論デモの実行を行いました。かなりユーザーに優しい使用性ですので、どんどん活用が進みそうですね。

 

【第19回】YOLOv9で自作データセットを用いて学習

はじめに

 近年、AI(Artificial Intelligence:人工知能)の急速な発展に伴い、それらを用いた技術が活用され始めています。例えば、AIによる画像認識技術として物体検出などがあります。物体検出は「画像の中から特定の物体の位置、種類、個数などの情報を認識する技術」であり、AIを用いて比較的高速に画像内の物体情報を取得することができます。この技術を用いて製造業では品質評価、外観検査、異常検知などに活用されています。

 リアルタイムに物体検出を行うアルゴリズムにYOLO(You Only Look Onse)と呼ばれるものがあり、CNN(Convolutional Neural Network:畳み込みニューラルネットワーク)を用いたアルゴリズムとなっています。2024年2月に最新の物体検出モデルYOLOv9が公開されています。

 本記事では、YOLOv9で自作データセットを用いて学習を行う方法を簡単に紹介します。

推論デモについての内容は下記の記事をご覧ください。

chantastu.hatenablog.com

 

1. YOLOv9のリポジトリ

YOLOv9のGithubリポジトリは以下です。

github.com

 

2. 動作環境構築

以下のコマンドで動作環境を構築できます。

 

3. データセットの用意

Roboflowで学習のテストを実施するためのサンプルデータセットを用意しました。アノテーション内容としては画像20枚に対してpersonとpotted plantの2クラスに対して矩形付与をしており、学習:検証:テスト=7:2:1の割合になっています。下記がアノテーション画像例です。

 

下記リンクからZipファイルがダウンロードできます。

https://app.roboflow.com/ds/Cmu0SZTXY7?key=VwBP4N8NgZ

また、以下のコマンドでディレクトリにダウンロードできます。

次にダウンロードした中のdata.yamlファイルの一部を修正します。

data.yamlを開くと、下記のようにtrain、valid、testのパスが書かれた行があるかと思います。

この部分のパスを修正します。上記でデータセットを「datasets/detect-test」内にダウンロードしたので、その部分を反映させます。以下のように内容を修正します。

 

4. 事前学習済みモデルの取得

 次に推論で使用するYOLOv9で提供されている事前学習済みモデル「gelan-c.pt」をダウンロードします。今回はyolov9ディレクトリ直下にweightsフォルダを作成し、そこにモデルをダウンロードします。

 

5. 学習実行

 それでは学習を実行していきます。下記のコマンドを実行することで学習が実行されます。--batchはバッチ数、--epochはエポック数を指定できるので適宜変更してください。

実行すると下記のようなログが表示されます。最後の方を見ると「runs/train/exp8/weights/best.pt」のパスに学習時の精度が良かったモデルが保存されていることが確認できます。

 

6. 検証

次にバリデーションをしていきます。ここでは学習したモデルの品質を評価します。下記のコマンドで実行します。--batchはバッチ数、--confは信頼度スコアの閾値、--iouはNMSの閾値を指定できるので適宜変更してください。

--dataは先ほど修正したdata.yaml相対パスを、--weightsは学習したモデルが格納された相対パスを指定します。

上記プログラムを実行すると下記内容が表示されます。

 

7. カスタムモデルで推論

最後にカスタムモデルで推論をしていきます。下記のコマンドで推論を実行します。ここで--confは信頼度スコア、--weightsには学習したモデルの相対パス、--sourceにはテスト画像が格納されたディレクト相対パスやテスト画像の相対パスを指定します。

推論実行後、「/runs/detect/exp{No.}※No.は任意の数字」に推論結果の画像が保存されます。今回の結果は下図のようになります。

 

オススメ書籍

物体・画像認識と時系列データ処理入門

現場で使える!PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装

PyTorchで作る!深層学習モデル・AIアプリ開発入門

 

おわりに

 本記事では、YOLOv9で自作データセットを用いて学習を行う方法を簡単に紹介しました。最新のYOLOv9は非常に使いやすい印象です。アノテーション・学習をご自身でも行ってみて、目的達成のために物体検出を活用してみてください。

 

【第18回】YOLOv9による物体検出:動作環境の構築と推論デモ

はじめに 

 近年、AI(Artificial Intelligence:人工知能)の急速な発展に伴い、それらを用いた技術が活用され始めています。例えば、AIによる画像認識技術として物体検出などがあります。物体検出は「画像の中から特定の物体の位置、種類、個数などの情報を認識する技術」であり、AIを用いて比較的高速に画像内の物体情報を取得することができます。この技術を用いて製造業では品質評価、外観検査、異常検知などに活用されています。

 リアルタイムに物体検出を行うアルゴリズムにYOLO(You Only Look Onse)と呼ばれるものがあり、CNN(Convolutional Neural Network:畳み込みニューラルネットワーク)を用いたアルゴリズムとなっています。2024年2月に最新の物体検出モデルYOLOv9が公開されています。

 本記事では、物体検出モデルYOLOv9で物体検出の動作環境構築と推論デモの実行を行います。

 

1. YOLOv9のリポジトリ

YOLOv9のGithubリポジトリは以下です。

github.com

2. 動作環境構築

以下のコマンドで動作環境を構築できます。

 

3. 推論デモ用の画像ダウンロード

次に推論で使用するサンプル画像をダウンロードします。今回は下記リンクの犬の画像を使用します。

https://media.roboflow.com/notebooks/examples/dog.jpeg

今回はyolov9ディレクトリ直下にdataフォルダを作成し、そこに画像を置きます。

 

4. 物体検出モデルのダウンロード

次に推論で使用するYOLOv9で提供されている事前学習済みモデル「gelan-c.pt」をダウンロードします。今回はyolov9ディレクトリ直下にweightsフォルダを作成し、そこにモデルをダウンロードします。

 

5. 物体検出の推論

では、最後に推論デモを実行したいと思います。「--source」の引数で画像の相対パスを指定しています。この引数に動画の相対パスを指定すると動画の推論が可能です。

上記のコマンドを実行すると、runs/detectの中にフォルダが作成されていると思います。そのフォルダの中に推論画像が保管されています。

「--source」の引数に動画ファイルの相対パスを指定して実行した際の推論結果動画の例は下記のようになります。

youtu.be

 

オススメ書籍

物体・画像認識と時系列データ処理入門

現場で使える!PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装

PyTorchで作る!深層学習モデル・AIアプリ開発入門

 


おわりに

本記事では、物体検出モデルYOLOv9の動作環境構築と推論デモの実行を行いました。かなりユーザーに優しい使用性ですので、どんどん活用が進みそうですね。

 

【Python】QRコードの生成と読み取り

1. はじめに

 本記事では、Pythonライブラリの「qrcodeを用いたQRコードの生成」と「pyzbarを用いたQRコードの読み取り」の基本的な手法を紹介します。

 

2. qrcodeを用いたQRコードの生成

まずはライブラリのインストールです。

qrcodeを用いたQRコードの生成は以下のプログラムでできます。

textの内容を変更することで様々な情報を埋め込むことができます。今回は本ブログのURLをtextとして設定し、QRコードを作成していきます。

 

上記のプログラムを実行すると、下記のようなQRコードが生成・保存されます。スマホ等のカメラアプリで読み込んでいただくと本ブログが表示されると思います。

 

3. pyzbarを用いたQRコードの読み取り

まずはライブラリのインストールです。

pyzbarを用いたQRコードの読み取りは以下のプログラムでできます。QRコードの読み取りデータからQRコードの座標、読み取ったデータ内容を再度画像に描画しています。ここでは上記で作成したQRコードを読み込んでいます。

上記を実行すると下図のような画像データが保存されます。QRコードの周囲を緑色の線で囲み、読み取ったデータを上部に記載しています。

なお、上記プログラムを実行した際のdecode_dataの中身は下記になっています。dataは読み取ったデータ、rectはQRコードの左上座標(left, top)と幅高さ(width、height)の長さ、polygonは多角形の座標を示しています。上記では多角形の座標を採用して描画しています。

 

なお、スマホカメラ、Webカメラ、IPカメラなどで撮影したカメラでは斜めになったり、そのままの画像ではダメで前処理が必要だったりするので、ご注意ください。

 

4. 参考ページ

qrcode · PyPI

pyzbar · PyPI

QRコードの生成と保存 | Python学習講座

【簡単】QRコードの作成と読み取り in Python #Python - Qiita

 

5. おわりに

 本記事では、Pythonライブラリの「qrcodeを用いたQRコードの生成」と「pyzbarを用いたQRコードの読み取り」の基本的な手法を紹介しました。QRコードを物体に貼付してカメラなどで読み取ることで、その物の判定ができたりするなど非常に便利なツールだと思うので、ぜひ活用してみてください。なお、スマホカメラ、Webカメラ、IPカメラなどで撮影したカメラでは斜めになったり、そのままの画像ではダメで前処理が必要だったりするので、ご注意ください。

PythonのTenacityを用いてリトライ処理

はじめに

 本記事では、Tenacityを用いたリトライ処理について簡単に紹介します。Tenacityは再試行動作を簡素的に実装できるライブラリで、2023年8月現在でもアップデートされています。

 本記事では基本的な処理として、以下を紹介します。

  1. リトライ処理の停止条件の設定
  2. リトライ処理の間の待機条件の設定
  3. 上記2つの組み合わせ

SAMURAI TERAKOYA

 

1. Tenacityについて

公式ドキュメントは以下になります。

Tenacity — Tenacity documentation

また、Githubリポジトリは以下になります。

github.com

ライブラリのインストールは下記のコマンドで実施できます。

 

2. リトライ処理の基本

リトライ処理の基本としては下記になります。リトライ処理対象の関数に「@retry」を付与します。なお、今回は「raise Exception」にて例外(エラー)を発生させて動作を確認します。

 

3. リトライ処理の停止条件の設定

 処理の再試行をしたい際に停止条件がない場合、永遠に処理を再試行します。そこで、停止条件を設けることで再試行を一定の条件で停止させます。なお、今回は「raise Exception」にて例外(エラー)を発生させて動作を確認します。

まず、下記は「5回再試行後に停止」する例です。「stop=stop_after_attempt(5)」を指定してあげることで5回再試行後にリトライ処理を停止することができます。

次に、「再試行を6秒実施したのちに停止」する例です。「stop=stop_after_delay(6)」を指定してあげることで6秒間再試行後にリトライ処理を停止することができます。

 

4. リトライ処理の間の待機条件の設定

続いては待機条件です。処理の再試行をしたい際にどのようなタイミングで再試行するかを設定できます。なお、今回は「raise Exception」にて例外(エラー)を発生させて動作を確認します。

まずは、「2秒間待機して再試行」する例です。「wait=wait_fixed(2)」を指定してあげることで、2秒ごとに再試行することができます。

次に、「ランダムな秒数待機して再試行」する例です。「wait=wait_random(min=1, max=2)」を指定してあげることで、1~2秒の間の時間で再試行することができます。

 

5. リトライ処理の停止条件と待機条件の組み合わせの設定

最後に、停止条件と待機条件の両方を設定してみます。なお、今回は「raise Exception」にて例外(エラー)を発生させて動作を確認します。

上記で示した5「5回再試行後に停止」と「2秒間ごとに再試行」の両条件を指定します。停止条件はstopで、待機条件はwaitでそれぞれ指定することで両条件を指定できます。下記の例を実行することで、それが実現できます。

 

SAMURAI TERAKOYA

おわりに

本記事では、Tenacityを用いたリトライ処理について簡単に紹介しました。システムからデータを出力する際やシステム間の接続の際に、出力ファイルが開かれている、接続の失敗で再試行をするケースが考えられます。その際に役立てれば幸いです。