目次
リファレンスチュートリアル
予備作業
labelimg でラベルを付ける
- 画像が保存されているフォルダーを選択し、注釈ファイルが保存されているフォルダーを選択します。
- ショートカット キーを柔軟に使用でき、一部のショートカット キーはメニュー バーに表示されます。
W: ボックスを作成し、マウスの左ボタンを押したままドラッグします (または右クリックして長方形のフレームを生成します)、
A/D: 前/次の画像、
スペース: マークされた画像をハイライト表示します、
Ctrl+マウス ホイール: ズーム画像の内外で、
Ctrl + F: 画像を元のサイズに拡大縮小します。
Ctrl + E: 境界ボックスをクリックした後に Ctrl + E を押し、ラベルを編集します。
Ctrl + S: 保存します。
また、ラベルの色を変更することもできます。メニュー バーのバウンディング ボックス、
左側のオプション バーで、保存されたラベル ファイル モード、VOC モードは xml、YOLO モードは txt、および json モードを選択できます。 - ビューでラベリング モードを変更し、自動保存モードを選択すると、1 つの部分にラベルを付けた後、次の部分をクリックして (または D キーを押して) 自動的に保存されます。
ファイルを対応する場所に置きます
- 使用した画像を yolov7-pytorch-master\VOCdevkit\VOC2007\JPEGImages フォルダーに置きます。
- labelimg によって生成されたラベル ファイル (xml 形式) を yolov7-pytorch-master\VOCdevkit\VOC2007\Annotations フォルダーに置きます。
- txt ファイルを yolov7-pytorch-master\model_data に追加し、予測するカテゴリを記述します。
- voc_annotation.py ファイルのclasses_pathを前の記事のtxtファイルのパスに変更し、データセットのサイズに応じてtrainval_percentとtrain_percentを変更し、voc_annotation.pyファイルを実行して次のファイルを生成します
。 , 以上で準備作業は完了です。他のパラメータも変更する必要がある場合があることに注意してください。基本的にそれらのパラメータを変更します。各パラメータには意味が書かれており、状況に応じて変更を選択してください。
訓練
準備
クラウド ディスクをマウントします。
from google.colab import drive
drive.mount('/content/drive')
現在の作業ディレクトリを表示します:
!pwd
パスを変更します。
%cd /content/drive/MyDrive/yolov7-pytorch-master
そして、GPU トレーニングを使用するようにランタイムのタイプを変更します。
train.py ファイル内のいくつかのパラメータを主に変更します。
- model_path: 予測で使用される重みパラメータに対応します。
- classes_path: カテゴリを予測する txt ファイルに対応します。
- エポックとバッチ: トレーニング セットのサイズに従って設定され、通常はステップ > 50000、ステップ = データセット サイズ / バッチ サイズ * エポックが必要です。
- input_shape: 入力画像のサイズ。
- おそらく、これらのいくつかを変更するだけです。
通話の切断を防ぐ
自動クリックすることで通話切れの頻度が減ると聞きました。
Google colab で F12 を押し、Web ページのコンソールをクリックし、次のコードを貼り付けて Enter を押します。
function ConnectButton(){
console.log("Connect pushed");
document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click()
}
setInterval(ConnectButton,60000);
トレーニングを開始する
train.py ファイルを実行します。
3時間以上走りました。
予測する
yolo.py ファイル内のいくつかのパラメータ(主に次のパラメータ) を変更します。
- model_path: 予測で使用される重みパラメータに対応します。これは、logs フォルダーの下で私たち自身がトレーニングした重みファイルです。
- classes_path: 対応するデータセットによって区別されるカテゴリに対応する txt ファイル。
- input_shape: 入力画像のサイズ。train.py のサイズと一致します。
- letterbox_images: 画像にグレーのバーを追加して、画像の本体が歪まないようにします。
- nms_iou: nms (非最大値抑制) は、特定の領域内の同じカテゴリの最大の予測スコアを持つボックスをフィルターします。
nms を小さく設定すると、審査が厳しくなり、最終フレーム数が少なくなります。
予測.py ファイルを実行し、
画像パスを入力し、
結果を表示します。
フォルダーの下にあるすべてのファイルを予測する場合は、
predict.py ファイルのモード パラメーターを変更し、デフォルトで img フォルダーを走査し、img_out フォルダーに保存します。
YOLOv7 ブレークポイントを使用した後もトレーニングを続行する
train.py の 2 つのパラメータを変更します。
-
モデルパス:
-
init_epoch:
colab を使用してデバッグする
最初の行に次のように入力します。
import pdb; pdb.set_trace() # debug mode
b / Break ブレークポイントを設定します。
c / continue ブレークポイントまで実行します
。ブレークポイントがない場合は、すべてを直接実行します。
l / list 現在実行中のコードを表示します。
s / step 関数を入力します。
r / return 現在の関数から戻るまでコードを実行します。
q / exit アボートして終了 (デバッグモードからジャンプ)
n /next 次の行を実行
pp 変数の値を出力
help help
(Pdb) の後にこれらのコマンドを入力して操作します。
データセットを変更した後に変更する必要があるもの
1. voc_annotation.py によって生成された画像、ラベル、ImageSets\Main を、VOCdevkit\VOC2007 フォルダー内の対応する位置に配置します。
2. 変更カテゴリに対応するファイルは、通常、model_data フォルダーに txt ファイルで保存されます。
3. train.py の凍結フェーズと凍結解除フェーズのパラメータの変更に注意してください。
4. train.py のパラメータを変更する必要があるかどうかを全体的に確認し、残りは前回のトレーニング時の準備作業を参照します。
トレーニング上の問題
問題:
トレーニングが数回開始されてから 3 分以内に自動的に停止し、いくつかのエラー レポートに ^C 記号が含まれています。
Epoch 1/450: 23% 6/26 [00:58<01:30, 4.51s/it, loss=10.3, lr=0.000125]^C
理由:
この状況は通常、トレーニング プロセス中に何らかのエラーまたは例外が発生し、プログラムが強制停止されたことを示します。あなたが提供した情報の中に「^C」記号がありました。これは通常、プログラムが中断されたか、強制終了されたことを意味します。
コンピューター リソースの不足、コード内のバグや例外、データセットの問題など、さまざまな理由が考えられます。考えられる回避策は次のとおりです。
-
コードにエラーや例外がないか確認してください。例外やエラー メッセージのプログラムの出力ファイルまたはログ ファイルを表示したり、デバッグ ツールを使用して問題を特定したりできます。
-
コンピューターのリソースが十分であることを確認してください。モデルのトレーニングには、CPU、メモリ、グラフィックス カードなどを含む大量のコンピューティング リソースが必要です。コンピューターのリソースが不十分な場合、プログラムの実行が遅くなったり、クラッシュしたりする可能性があります。コンピューティング リソースの消費を減らすために、バッチ サイズの縮小、モデル サイズの縮小、より効率的なアルゴリズムの使用などを試みることができます。
-
データセットに問題がないか確認してください。データセット内に欠損値、外れ値、重複値などの問題が存在する可能性があり、プログラムが異常に動作する可能性があります。データセットは、欠損値の補充、外れ値の削除などの前処理が可能です。
-
より安定したトレーニング方法を試してください。たとえば、モデルの安定性を向上させるには、より小さい学習率、より小さいバッチ サイズを使用し、正則化を使用します。
結論として、この状況にはさまざまな理由が考えられます。プログラムとデータセットを注意深く調べて問題を探し、プログラムのクラッシュを避けるためにより安定したトレーニング方法を使用するよう試みる必要があります。
解決策:
train.py コードの input_shape の設定が大きすぎるため、処理中にコンピューティング リソースが不足する可能性があります。[1120,1120] に設定し、[800,800] に変更します。