CPU で yolov5 を実行します (詳細な手順 + 開始に適しています)

目次

1. 新しい環境を作成する

2.Pytorch ライブラリをインポートする

3. 新規プロジェクト

4. テスト

5. データセットを準備する

六、設定ファイルを修正する

7. トレーニング

8、サンプルテスト

9. 結論


デフォルトでは、誰もが Anaconda と Pycharm をインストールしており、基本的な操作を知っています。

1. 新しい環境を作成する

cmd ウィンドウを開き、conda create -n yolov5 python=3.7 と入力し、Enter キーを押します。

しばらく待って、y と入力し、Enter キーを押します

しばらくすると、done が表示され、新しい環境が正常に作成されたことを示します。

名前は自由に選べますが、私と同じ名前を選ぶことをお勧めします.誰もが初めて始めることができるように、後続のすべての操作が私と一致することをお勧めします. Python インタープリターのバージョンは 3.7 を選択する必要があります. 、3.10 を選択する前に未知の問題に遭遇したため

2.Pytorch ライブラリをインポートする

私のパソコンはR7-5800HのThinkbook14pで、独立したディスプレイがないのでCPU版のPyTorchを使っています

まず、コマンド ウィンドウに conda activate yolov5 と入力し、Enter キーを押して、作成したばかりの新しい環境をアクティブ化します。

パスの前に (yolov5) が表示されていれば、アクティベーションは成功です。

次に、PyTorch公式 Web サイトPyTorchに入り、次の構成を選択します。

コードの最後の行をコマンド ウィンドウにコピーし、Enter キーを押します。

Wait for a while, enter y, press Enter; wait for a while, done と表示され、Pytorch ライブラリが正常にインポートされたことを示します!

3. 新規プロジェクト

まず、この Web サイトから yolov5 インストール パッケージmirrors/ultralytics/yolov5 GitCodeをダウンロードします。

ダウンロードが完了したら、解凍し、解凍したフォルダーを右クリックして、[Pycharm プロジェクトとして開く] を選択します。

開いた Pycharm インターフェイスは次のようになります。

右下隅にある <インタープリターなし> をクリックし、[インタープリターの追加] を選択します。

ポップアップ インターフェイスの左側にある Conda 環境をクリックし、既存の環境をクリックして、以前に作成した新しい環境で python 実行可能ファイルを選択し、[OK] をクリックします。

Pycharm インターフェイスの右下隅が Python3.7 (yolov5) になっていることがわかります。

4. テスト

yolov5 の実行に必要なさまざまなパッケージが含まれている requirements.txt ファイルを開きます。ターミナルで実行するコマンドの最初の行をコピーします

このプロセスは、ネットワークの速度に応じて高速または低速になる可能性があります。静かに待ちます〜いくつかのパッケージのインストールに問題がある可能性がありますが、問題ではありません。CSDN でエラー情報を検索して解決策を見つけることができます!

すべてをインストールしたら、左側の detect.py ファイルを実行します

操作後にエラーが発生せず、次の 2 つの処理済みの画像が左側の runs\detect\exp ディレクトリに表示される場合は、前の操作に問題がないことを意味します。おめでとうございます! 準備は終わり

5. データセットを準備する

私の方法に従って、yolov5-master パスの下に次の空のフォルダーを作成し、その後の管理を容易にしてください。

この記事でブロガーから提供された猫と犬の認識データ セットのトレーニング データZhihu - Zhihuをダウンロードしました。解凍後の写真は 25000 枚あります。最初の 121 枚の猫の写真を選択し、トレーニング セットとして yolov5-master\own_datas\images\train フォルダーにコピーしました。

次に、Pycharm ターミナルで pip install pyqt5 labelme と入力し、Enter キーを押します。これら 2 つのライブラリは、データセットのラベル付けに使用されます

インストールが完了したら、ターミナルに labelme と入力し、Enter キーを押します。

ウィンドウがポップアップし、このウィンドウでトレーニング セットがマークされます。

左上隅にある Open Dir をクリックし、yolov5-master\own_datas\images\train フォルダーを選択すると、トレーニング セット内の画像が表示されます。右クリックして [長方形を作成] を選択し、猫を写真に収めます。

ボックスの選択が完了したら、タグ名 cat を入力し、[OK] をクリックすると、タグが保存されます。複数の猫がいる場合は、引き続き選択してください

額縁全体を選択したら、左側の [次の画像] をクリックし、プロンプトに従って、ラベル ファイルをパス yolov5-master\own_datas\labels\json に保存します。ファイルの形式は .json です。

約30分後…

すべての写真がマークされた後、yolov5-master\own_datas\labels\json フォルダーのトレーニング セットで、同じ数の写真に対応する121 の .json ファイルを確認できます。

yolov5 は .txt 形式のタグしか認識できず、.json ファイルを .txt ファイルに変換する必要があるため、まだ終わっていません。

yolov5-master フォルダーに新しい json2txt.py ファイルを作成します。

次のコードをコピーします。

import json
import os

name2id = {'cat': 0}  # 标签名称


def convert(img_size, box):
    dw = 1. / (img_size[0])
    dh = 1. / (img_size[1])
    x = (box[0] + box[2]) / 2.0 - 1
    y = (box[1] + box[3]) / 2.0 - 1
    w = box[2] - box[0]
    h = box[3] - box[1]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)


def decode_json(json_floder_path, json_name):
    txt_name = 'C:/Users/xieji/Downloads/yolov5-master/own_datas/labels/txt/' + json_name[0:-5] + '.txt'
    # txt文件夹的绝对路径
    txt_file = open(txt_name, 'w')

    json_path = os.path.join(json_floder_path, json_name)
    data = json.load(open(json_path, 'r', encoding='gb2312', errors='ignore'))

    img_w = data['imageWidth']
    img_h = data['imageHeight']

    for i in data['shapes']:

        label_name = i['label']
        if (i['shape_type'] == 'rectangle'):
            x1 = int(i['points'][0][0])
            y1 = int(i['points'][0][1])
            x2 = int(i['points'][1][0])
            y2 = int(i['points'][1][1])

            bb = (x1, y1, x2, y2)
            bbox = convert((img_w, img_h), bb)
            txt_file.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in bbox]) + '\n')


if __name__ == "__main__":

    json_floder_path = 'C:/Users/xieji/Downloads/yolov5-master/own_datas/labels/json/'
    # json文件夹的绝对路径
    json_names = os.listdir(json_floder_path)
    for json_name in json_names:
        decode_json(json_floder_path, json_name)

コメントされている 3 つの場所は、調整が必要な場所です。誰もがまったく同じ方法で私に従っている場合は、C:/Users/xieji/Downloads/ を自分のパスに置き換えてください。

json2txt.py を実行すると、終了後に yolov5-master\own_datas\labels\txt フォルダーに対応する 121 個の .txt ファイルが表示されます。

最後のステップは、txt フォルダー内のすべてのファイルを yolov5-master\own_datas\labels\train フォルダーにコピーすることです。このステップを忘れないでください!そうしないと、トレーニング中にエラーが報告され、ラベルが見つかりません。

六、設定ファイルを修正する

最初に2つのファイルをコピーします

yolov5-master\data パスで coco128.yaml ファイルを見つけて、yolov5-master\own_datas パスにコピーし、名前を cat.yaml に変更します。

coco128 データセットではなく、独自の猫データセットを使用しているためです。本当は変えなくてもいいけど、分かりやすいように変えてみる

yolov5-master\models パスで yolov5s.yaml ファイルを見つけて、yolov5-master\own_datas パスにもコピーします。yolov5s を選択した理由は、あまり効果的ではありませんが、より高速だからです.以前に yolov5l を使用したことがあり、一晩中実行する必要があります...

cat.yaml ファイルを開きます。最初に変更する必要があるのは、次の 3 行です。

# path: ../datasets/coco128  # dataset root dir
train: own_datas/images/train  # train images (relative to 'path') 128 images
val: own_datas/images/train  # val images (relative to 'path') 128 images

最初の行をコメントアウトします

2 行目と 3 行目の相対パスは、まったく同じ方法で私に従っている場合は、私に従ってください

次に、次の 2 行を変更します。

nc: 1  # number of classes
names: ['cat']  # class names

nc はカテゴリの数、names はカテゴリ名です。まったく同じように私をフォローするなら、私に従ってください

coco128 データセットを使用しないため、最後にこの行をコメントアウトします。コメントしなくてもいい、どうでもいい、ただの強迫性障害だから

# download: https://github.com/ultralytics/yolov5/releases/download/v1.0/coco128.zip

yolov5s.yaml ファイルを開き、次の行を変更する必要があります。

nc: 1  # number of classes

7. トレーニング

train.py ファイルを開く

まず、これらの行のデフォルトを変更します。

    parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
    parser.add_argument('--cfg', type=str, default='own_datas/yolov5s.yaml', help='model.yaml path')
    parser.add_argument('--data', type=str, default='own_datas/cat.yaml', help='dataset.yaml path')

まったく同じように私をフォローするなら、私に従ってください

次に、この行のデフォルトを変更します。

    parser.add_argument('--epochs', type=int, default=150)

デフォルト値は 300 ですが、トレーニング時間が長くなります。ここでは 150 に変更しました。

最後に変更するのは、この行のデフォルトです。

parser.add_argument('--workers', type=int, default=0, help='maximum number of dataloader workers')

私のCPUには8コアと16スレッドがあるので、最初はデフォルト値の8を使用しました.この値を私のコンピューターのCPUコアの数に設定すると、トレーニング速度が最も速くなることが他の場所で見られましたが、エラートレーニング中に報告されます.おそらくメモリバーストを意味し、その後0に変更しました

よし、トレーニング開始!

train.py を実行して待ってください...ファンはノンストップで回転します...

3 時間トレーニングしました... CPU の使用が非常に遅いです...最後のエポックの後、[email protected] は 0.995 で停止し、[email protected]:0.95 は 0.904 で停止しました。非常に良好です。

トレーニング関連の情報は、yolov5-master\runs\train\exp フォルダーで確認できます。

weights フォルダー内の best.pt ファイルはトレーニング済みのモデルで、後でテストで使用されます。

8、サンプルテスト

モデルのトレーニングに 3 時間かかりました。どのように機能するか見てみましょう。

テスト用に撮影した猫の動画を使用しました 写真だけでなく、自分で使用することもできます(実際、以前にダウンロードしたデータ セットを直接使用できます。20,000 枚以上の写真を気軽に使用できます)

テスト ファイルを yolov5-master\own_datas\images\test フォルダーに配置します。

detect.py ファイルを開く

次の 2 行のデフォルトを変更します。

    parser.add_argument('--weights', nargs='+', type=str, default='runs/train/exp/weights/best.pt', help='model path(s)')
    parser.add_argument('--source', type=str, default='own_datas/images/test', help='file/dir/URL/glob, 0 for webcam')

最初のデフォルトは、前述のトレーニング済みモデル ファイルの相対パスです。

2 番目のデフォルトは、テスト ファイルが保存されているフォルダーの相対パスです。

まったく同じように私をフォローするなら、私に従ってください

detect.py を実行し、しばらくお待ちください...

終了後、yolov5-master\runs\detect\exp2 フォルダーで結果を確認できます。

ビデオを直接アップロードすることはできません。ビデオからいくつかの写真を撮ってお見せします。

100 枚以上の写真しか訓練されておらず、比較的貧弱な yolov5s ネットワークが使用されています。

9. 結論

私自身は初心者で、深層学習を始めたばかりで、このプロジェクトに数日間取り組んでおり、多くの知識を得ることができました。

下書きを書いた後、今までの作業をすべて削除して、書いた手順通りに再実行したところ、スムーズで問題ありませんでした。

私の工程によれば、1日で完成できそうです(もっと独立したディスプレイがあれば、GPUで実行した方が速いでしょう)。

問題が発生した場合は、CSDN で検索して、自分の知恵を組み合わせれば解決できると思います。

主にこのブログを参考にさせていただきます、ありがとうございます!

【Yolov5】1.6000語のYolov5の乳母レベルのチュートリアルを本気でまとめ、80歳のおばあちゃんにもわかる

おすすめ

転載: blog.csdn.net/weixin_54721509/article/details/122983561