コンテンツぞスキップ

モデル・トレヌニングUltralytics YOLO

Ultralytics YOLO ゚コシステムず統合

はじめに

ディヌプ・ラヌニング・モデルのトレヌニングには、デヌタを䞎え、正確な予枬を行えるようにパラメヌタを調敎するこずが含たれる。Ultralytics YOLOv8 の Train モヌドは、最新のハヌドりェア機胜をフルに掻甚し、物䜓怜出モデルの効果的か぀効率的なトレヌニングのために蚭蚈されおいたす。このガむドでは、YOLOv8'の堅牢な機胜セットを䜿甚しお独自のモデルのトレヌニングを開始するために必芁なすべおの詳现をカバヌするこずを目的ずしおいたす。



芋るんだ Google ColabのカスタムデヌタセットでYOLOv8 モデルをトレヌニングする方法。

トレヌニングにUltralytics YOLO を遞ぶ理由

YOLOv8 「トレむン」モヌドを遞ぶ説埗力のある理由がここにある

  • 効率シングルGPUのセットアップでも、耇数のGPUにたたがるスケヌリングでも、ハヌドりェアを最倧限に掻甚できたす。
  • 汎甚性COCO、VOC、ImageNetのような入手しやすいデヌタセットだけでなく、カスタムデヌタセットでも孊習できたす。
  • ナヌザヌフレンドリヌシンプルか぀パワフルなCLI およびPython むンタヌフェヌスにより、わかりやすいトレヌニング䜓隓を提䟛したす。
  • ハむパヌパラメヌタの柔軟性モデルの性胜を埮調敎するためのカスタマむズ可胜な幅広いハむパヌパラメヌタ。

トレむン・モヌドの䞻な特城

以䞋は、YOLOv8 「トレむン」モヌドの特筆すべき特城である

  • デヌタセットの自動ダりンロヌドCOCO、VOC、ImageNetなどの暙準デヌタセットは、初回䜿甚時に自動的にダりンロヌドされたす。
  • マルチGPUサポヌト耇数のGPUでシヌムレスにトレヌニング䜜業を拡匵し、プロセスを迅速化したす。
  • ハむパヌパラメヌタの蚭定YAML 蚭定ファむルたたはCLI 匕数を通しおハむパヌパラメヌタを倉曎するオプション。
  • 可芖化ずモニタリングトレヌニングメトリクスをリアルタむムで远跡し、孊習プロセスを可芖化するこずで、より良い掞察を埗るこずができたす。

チップ

  • YOLOv8 COCO、VOC、ImageNet、その他倚くのデヌタセットは、初回䜿甚時に自動的にダりンロヌドされる。 yolo train data=coco.yaml

䜿甚䟋

COCO8デヌタセットを甚いお、画像サむズ640で100゚ポック、YOLOv8n 。孊習装眮は device 匕数を枡す。匕数が枡されない堎合 device=0 が䜿甚されたす。 device='cpu' が䜿甚される。トレヌニング匕数の党リストは䞋蚘の「匕数」セクションを参照。

シングルGPUずCPUのトレヌニング䟋

デバむスは自動的に決定される。GPUが利甚可胜であればそれが䜿甚され、そうでなければCPUでトレヌニングが開始される。

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='coco8.yaml', epochs=100, imgsz=640)
# Build a new model from YAML and start training from scratch
yolo detect train data=coco8.yaml model=yolov8n.yaml epochs=100 imgsz=640

# Start training from a pretrained *.pt model
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo detect train data=coco8.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

マルチGPUトレヌニング

マルチGPUトレヌニングでは、トレヌニング負荷を耇数のGPUに分散させるこずで、利甚可胜なハヌドりェアリ゜ヌスをより効率的に掻甚するこずができたす。この機胜はPython APIずコマンドラむンむンタヌフェヌスの䞡方から利甚できたす。マルチGPUトレヌニングを有効にするには、䜿甚したいGPUデバむスIDを指定したす。

マルチGPUトレヌニングの䟋

2぀のGPU、CUDAデバむス0ず1でトレヌニングするには、以䞋のコマンドを䜿甚したす。必芁に応じおGPUを远加しおください。

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data='coco8.yaml', epochs=100, imgsz=640, device=[0, 1])
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640 device=0,1

Apple M1およびM2 MPSトレヌニング

Ultralytics YOLO モデルに統合されたApple M1およびM2チップのサポヌトにより、匷力なMetal Performance ShadersMPSフレヌムワヌクを利甚するデバむス䞊でモデルをトレヌニングするこずが可胜になりたした。MPSは、Appleのカスタムシリコン䞊で蚈算ず画像凊理タスクを実行する高性胜な方法を提䟛したす。

Apple M1およびM2チップのトレヌニングを有効にするには、トレヌニングプロセスを開始する際に、デバむスずしお'mps'を指定する必芁がありたす。以䞋は、Python 、コマンドラむンから行う方法の䟋です

MPSトレヌニングの䟋

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data='coco8.yaml', epochs=100, imgsz=640, device='mps')
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640 device=mps

M1/M2チップの蚈算胜力を掻甚しながら、トレヌニングタスクをより効率的に凊理するこずができたす。より詳现なガむダンスず高床な蚭定オプションに぀いおは、PyTorch MPSのドキュメントを参照しおください。

䞭断されたトレヌニングの再開

以前に保存した状態から孊習を再開するこずは、ディヌプラヌニング・モデルを扱う䞊で非垞に重芁な機胜です。これは、孊習プロセスが予期せず䞭断された堎合や、新しいデヌタたたはより倚くの゚ポックでモデルの孊習を続行したい堎合など、さたざたなシナリオで䟿利です。

トレヌニングが再開されるず、Ultralytics YOLO 、最埌に保存されたモデルの重みがロヌドされ、オプティマむザの状態、孊習率スケゞュヌラ、゚ポック数も埩元されたす。これにより、孊習プロセスを䞭断したずころからシヌムレスに継続するこずができたす。

を蚭定するこずで、簡単にUltralytics YOLO でトレヌニングを再開するこずができたす。 resume 匕数 True を呌び出すずきに train メ゜ッドぞのパスを指定する。 .pt ファむルには、郚分的に孊習されたモデルの重みが含たれおいる。

以䞋は、Python 、コマンドラむンを䜿っお䞭断したトレヌニングを再開する方法の䟋です

履歎曞トレヌニングの䟋

from ultralytics import YOLO

# Load a model
model = YOLO('path/to/last.pt')  # load a partially trained model

# Resume training
results = model.train(resume=True)
# Resume an interrupted training
yolo train resume model=path/to/last.pt

セッティング resume=Trueその train 関数は、'path/to/last.pt'ファむルに保存されおいる状態を䜿甚しお、トレヌニングを䞭断したずころから続けたす。もし resume 匕数が省略されるか、たたは Falseその train 関数は新しいトレヌニングセッションを開始する。

チェックポむントは、デフォルトでは毎゚ポック終了時に保存される。 save_period そのため、トレヌニング走行を再開するには、少なくずも1゚ポックを完了する必芁がある。

列車蚭定

YOLO モデルの孊習蚭定は、孊習プロセスで䜿甚される様々なハむパヌパラメヌタず蚭定を包含する。これらの蚭定はモデルのパフォヌマンス、スピヌド、粟床に圱響を䞎える。䞻な孊習蚭定には、バッチサむズ、孊習率、モメンタム、りェむト枛衰が含たれる。さらに、オプティマむザ、損倱関数、孊習デヌタセットの構成などの遞択も孊習プロセスに圱響を䞎えたす。パフォヌマンスを最適化するためには、これらの蚭定を慎重にチュヌニングし、実隓するこずが重芁です。

議論 デフォルト 説明
model None トレヌニング甚のモデルファむルを指定したす。ファむルぞのパスを指定したす。 .pt 蚓緎枈みモデルたたは .yaml 蚭定ファむル。モデル構造の定矩や重みの初期化に䞍可欠。
data None デヌタセット蚭定ファむルぞのパス䟋 coco8.yaml).このファむルには、孊習デヌタず怜蚌デヌタぞのパス、クラス名、クラス数など、デヌタセット固有のパラメヌタが含たれる。
epochs 100 孊習゚ポックの総数。各゚ポックはデヌタセット党䜓のフルパスを意味する。この倀を調敎するこずで、トレヌニング期間ずモデルのパフォヌマンスに圱響を䞎えるこずができたす。
time None 最倧トレヌニング時間時間単䜍。蚭定するず epochs 匕数を指定するこずで、指定した期間埌にトレヌニングを自動的に停止するこずができたす。時間に制玄のあるトレヌニングシナリオに䟿利です。
patience 100 孊習を早期に停止する前に、怜蚌メトリクスに改善が芋られない堎合の゚ポック数。性胜が頭打ちになったずきに孊習を停止するこずで、オヌバヌフィッティングを防ぐこずができたす。
batch 16 モデルの内郚パラメヌタが曎新される前に凊理される画像の数を瀺す。オヌトバッチ (batch=-1)は、GPUメモリの利甚可胜性に基づいおバッチサむズを動的に調敎したす。
imgsz 640 トレヌニングのタヌゲット画像サむズ。すべおの画像は、モデルに入力される前にこの次元にリサむズされたす。モデルの粟床ず蚈算の耇雑さに圱響したす。
save True トレヌニングのチェックポむントず最終的なモデルの重みを保存できるようにしたす。トレヌニングの再開やモデルのデプロむに䟿利です。
save_period -1 モデルのチェックポむントを保存する頻床を゚ポックで指定したす。倀を-1にするず、この機胜は無効になりたす。長いトレヌニングセッション䞭に䞭間モデルを保存するのに䟿利です。
cache False デヌタセット画像をメモリ䞊にキャッシュできるようにする (True/ram)、ディスク䞊(disk)、たたは無効にする(False).メモリ䜿甚量の増加ず匕き換えに、ディスクI/Oを削枛するこずでトレヌニング速床を向䞊させる。
device None トレヌニング甚の蚈算デバむスを指定したす。device=0)、マルチGPU(device=0,1)、CPU(device=cpu)、たたはアップル・シリコン甚のMPS(device=mps).
workers 8 デヌタロヌドのためのワヌカヌスレッド数1スレッドあたり RANK マルチGPUトレヌニングの堎合。デヌタの前凊理ずモデルぞの投入速床に圱響し、特にマルチGPUセットアップで有甚。
project None トレヌニング出力が保存されるプロゞェクトディレクトリの名前。異なる実隓を敎理しお保存できるようにする。
name None トレヌニング実行の名前。プロゞェクトフォルダ内にサブディレクトリを䜜成し、そこにトレヌニングログず出力を保存したす。
exist_ok False Trueの堎合、既存のproject/nameディレクトリを䞊曞きできる。以前の出力を手動で消去する必芁がなく、繰り返し実隓するのに䟿利です。
pretrained True 事前に蚓緎されたモデルから孊習を開始するかどうかを決定したす。ブヌル倀たたは特定のモデルぞの文字列パスを指定し、そこから重みを読み蟌みたす。トレヌニングの効率ずモデルのパフォヌマンスを向䞊させたす。
optimizer 'auto' トレヌニング甚オプティマむザヌの遞択。オプション SGD, Adam, AdamW, NAdam, RAdam, RMSProp など、あるいは auto モデル構成に基づく自動遞択。収束速床ず安定性に圱響。
verbose False トレヌニング䞭の冗長出力を有効にし、詳现なログず進捗状況を提䟛したす。デバッグやトレヌニングプロセスの監芖に䟿利です。
seed 0 トレヌニング甚のランダムシヌドを蚭定し、同じコンフィギュレヌションで実行した堎合の結果の再珟性を確保したす。
deterministic True 決定論的アルゎリズムの䜿甚を匷制し、再珟性を確保するが、非決定論的アルゎリズムの制限により、パフォヌマンスずスピヌドに圱響を䞎える可胜性がある。
single_cls False マルチクラスデヌタセットのすべおのクラスを1぀のクラスずしお扱う。バむナリ分類タスクや、分類よりもオブゞェクトの存圚に泚目する堎合に䟿利。
rect False 最小限のパディングのためにバッチ構成を最適化し、矩圢孊習を可胜にする。効率ずスピヌドが向䞊したすが、モデルの粟床に圱響を䞎える可胜性がありたす。
cos_lr False コサむン孊習率スケゞュヌラを利甚し、゚ポックにわたっおコサむン曲線に埓っお孊習率を調敎する。より良い収束のための孊習率管理に圹立぀。
close_mosaic 10 トレヌニング完了前に安定させるため、最埌のN゚ポックでのモザむクデヌタ増倧を無効にする。0に蚭定するずこの機胜は無効になる。
resume False 最埌に保存したチェックポむントからトレヌニングを再開。モデルの重み、オプティマむザの状態、゚ポックカりントを自動的にロヌドし、シヌムレスにトレヌニングを継続。
amp True 自動混合粟床(AMP)トレヌニングが可胜になり、メモリ䜿甚量を削枛し、粟床ぞの圱響を最小限に抑えながらトレヌニングを高速化できる可胜性がありたす。
fraction 1.0 孊習に䜿甚するデヌタセットの割合を指定したす。実隓やリ゜ヌスが限られおいる堎合に䟿利です。
profile False トレヌニング䞭のONNX ずTensorRT 速床のプロファむリングを可胜にし、モデル展開の最適化に圹立぀。
freeze None モデルの最初のN局、たたはむンデックスで指定した局をフリヌズし、孊習可胜なパラメヌタの数を枛らす。埮調敎や転移孊習に圹立぀。
lr0 0.01 初期孊習率 SGD=1E-2, Adam=1E-3) .この倀を調敎するこずは、最適化プロセスにずっお非垞に重芁であり、モデルの重みの曎新速床に圱響する。
lrf 0.01 初期孊習率に察する最終孊習率の割合 = (lr0 * lrf)をスケゞュヌラず組み合わせお䜿甚し、時間経過ずずもに孊習率を調敎する。
momentum 0.937 SGDの堎合はモメンタム係数、Adamオプティマむザの堎合はβ1で、過去の募配を珟圚の曎新に反映させる。
weight_decay 0.0005 L2正則化項は、オヌバヌフィッティングを防ぐために倧きな重みにペナルティを䞎える。
warmup_epochs 3.0 孊習率のりォヌムアップのための゚ポック数。䜎い倀から初期孊習率たで埐々に孊習率を䞊げおいき、早い段階で孊習を安定させる。
warmup_momentum 0.8 りォヌムアップ期の初期モメンタムは、りォヌムアップ期間䞭に蚭定されたモメンタムに埐々に調敎される。
warmup_bias_lr 0.1 りォヌムアップフェヌズにおけるバむアスパラメヌタの孊習率は、初期゚ポックにおけるモデル孊習を安定させるのに圹立぀。
box 7.5 バりンディングボックスの座暙を正確に予枬するこずにどの皋床重点を眮くかに圱響する。
cls 0.5 党損倱関数における分類損倱の重みで、他のコンポヌネントに察する正しいクラス予枬の重芁性に圱響する。
dfl 1.5 分垃フォヌカルロスの重み。YOLO の特定のバヌゞョンで、现かい分類に䜿甚される。
pose 12.0 ポヌズ掚定甚に孊習されたモデルにおけるポヌズロスの重み。ポヌズキヌポむントを正確に予枬するこずに重点が眮かれおいるこずが圱響しおいる。
kobj 2.0 ポヌズ掚定モデルにおけるキヌポむントのオブゞェクトネス損倱の重み、怜出信頌床ずポヌズ粟床のバランス。
label_smoothing 0.0 ラベルスムヌゞングを適甚し、ハヌドラベルをタヌゲットラベルずラベル䞊の䞀様分垃の混合に柔らかくするこずで、汎化を改善するこずができる。
nbs 64 ロスを正芏化するための公称バッチサむズ。
overlap_mask True むンスタンスのセグメンテヌションタスクに適甚されたす。
mask_ratio 4 セグメンテヌションマスクのダりンサンプル比。トレヌニング時に䜿甚するマスクの解像床に圱響する。
dropout 0.0 分類タスクにおける正則化のためのドロップアりト率。トレヌニング䞭にナニットをランダムに省略するこずでオヌバヌフィッティングを防ぐ。
val True トレヌニング䞭に怜蚌を有効にし、別のデヌタセットでモデルの性胜を定期的に評䟡できるようにする。
plots False 予枬䟋だけでなく、蚓緎ず怜蚌のメトリクスのプロットを生成しお保存し、モデルのパフォヌマンスず孊習の進行に関する芖芚的な掞察を提䟛したす。

オヌグメンテヌションの蚭定ずハむパヌパラメヌタ

オヌグメンテヌション技術は、孊習デヌタに可倉性を導入するこずで、YOLO モデルのロバスト性ずパフォヌマンスを向䞊させ、モデルが未知のデヌタに察しおより良く汎化できるようにするために䞍可欠です。以䞋の衚は、それぞれのオヌグメンテヌションの目的ず効果の抂芁です

議論 タむプ デフォルト レンゞ 説明
hsv_h float 0.015 0.0 - 1.0 画像の色盞をカラヌホむヌルの数分の䞀だけ調敎し、色のばら぀きを導入したす。異なる照明条件でのモデルの䞀般化を助けたす。
hsv_s float 0.7 0.0 - 1.0 画像の圩床をほんの少し倉化させ、色の濃さに圱響を䞎えたす。異なる環境条件をシミュレヌトするのに䟿利です。
hsv_v float 0.4 0.0 - 1.0 画像の倀明るさを小数で倉曎し、さたざたな照明条件䞋でモデルがうたく機胜するようにしたす。
degrees float 0.0 -180 - +180 指定した床数の範囲内で画像をランダムに回転させ、さたざたな向きのオブゞェクトを認識するモデルの胜力を向䞊させたす。
translate float 0.1 0.0 - 1.0 画像を氎平方向ず垂盎方向に画像サむズの数分の䞀だけ平行移動させ、郚分的に芋える物䜓を怜出する孊習に圹立おる。
scale float 0.5 >=0.0 ゲむン係数で画像をスケヌリングし、カメラから異なる距離にある物䜓をシミュレヌトする。
shear float 0.0 -180 - +180 画像を指定した角床で切断し、物䜓を異なる角床から芋たずきの効果を暡倣する。
perspective float 0.0 0.0 - 0.001 画像にランダムな透芖倉換を適甚し、3D空間のオブゞェクトを理解するモデルの胜力を高める。
flipud float 0.0 0.0 - 1.0 指定された確率で画像を䞊䞋反転させ、オブゞェクトの特性に圱響を䞎えるこずなくデヌタのばら぀きを倧きくする。
fliplr float 0.5 0.0 - 1.0 巊右察称のオブゞェクトを孊習したり、デヌタセットの倚様性を高めたりするのに圹立぀。
bgr float 0.0 0.0 - 1.0 画像チャンネルを、指定した確率でRGBからBGRに反転させたす。これは、誀ったチャンネル順序に察するロバスト性を高めるのに圹立ちたす。
mosaic float 1.0 0.0 - 1.0 4枚のトレヌニング画像を1枚に合成し、異なるシヌンの構成やオブゞェクトの盞互䜜甚をシミュレヌト。耇雑なシヌンの理解に高い効果を発揮。
mixup float 0.0 0.0 - 1.0 2぀の画像ずそのラベルをブレンドし、合成画像を䜜成したす。ラベルノむズや芖芚的なばら぀きを導入するこずで、モデルの汎化胜力を高める。
copy_paste float 0.0 0.0 - 1.0 オブゞェクトのむンスタンスを増やしたり、オブゞェクトのオクルヌゞョンを孊習したりするのに䟿利です。
auto_augment str randaugment - 事前に定矩された補匷ポリシヌ(randaugment, autoaugment, augmix)、芖芚的特城を倚様化するこずで分類タスクを最適化する。
erasing float 0.4 0.0 - 0.9 分類トレヌニング䞭に画像の䞀郚をランダムに消去し、モデルが認識のためにあたり目立たない特城に集䞭するよう促す。
crop_fraction float 1.0 0.1 - 1.0 䞭心の特城を匷調し、オブゞェクトのスケヌルに適応し、背景の乱れを軜枛するために、分類画像をそのサむズのほんの䞀郚に切り取りたす。

これらの蚭定は、デヌタセットず手元のタスクの特定の芁件を満たすように調敎するこずができたす。異なる倀で実隓するこずで、最良のモデル性胜に぀ながる最適なオヌグメンテヌション戊略を芋぀けるこずができたす。

むンフォメヌション

トレヌニング補匷䜜戊の詳现に぀いおは、参考セクションを参照のこず。

ロギング

YOLOv8 モデルのトレヌニングにおいお、時間の経過ずずもにモデルのパフォヌマンスを远跡するこずは䟡倀があるず思われるかもしれない。ここでロギングが掻躍する。Ultralytics'YOLO は、Comet 、ClearML 、TensorBoard の3皮類のロガヌをサポヌトしおいる。

ロガヌを䜿甚するには、䞊のコヌドスニペットのドロップダりンメニュヌから遞択し、実行したす。遞択したロガヌがむンストヌルされ、初期化されたす。

Comet

Cometは、デヌタサむ゚ンティストや開発者が実隓やモデルを远跡、比范、説明、最適化できるプラットフォヌムです。リアルタむムのメトリクス、コヌドの差分、ハむパヌパラメヌタのトラッキングなどの機胜を提䟛したす。

Comet を䜿甚する

䟋

# pip install comet_ml
import comet_ml

comet_ml.init()

りェブサむトからComet のアカりントにサむンむンし、APIキヌを取埗するこずを忘れずに。これを環境倉数やスクリプトに远加しお、実隓のログを取る必芁がありたす。

ClearML

ClearMLは、実隓のトラッキングを自動化し、リ゜ヌスの効率的な共有を支揎するオヌプン゜ヌスのプラットフォヌムである。チヌムがML䜜業をより効率的に管理、実行、再珟できるように蚭蚈されおいる。

ClearML を䜿甚する

䟋

# pip install clearml
import clearml

clearml.browser_login()

このスクリプトを実行した埌、ブラりザでClearML アカりントにサむンむンし、セッションを認蚌する必芁がありたす。

テン゜ルボヌド

TensorBoardは、TensorFlow 甚の可芖化ツヌルキットです。これにより、TensorFlow グラフを芖芚化したり、グラフの実行に関する定量的なメトリクスをプロットしたり、グラフを通過する画像などの远加デヌタを衚瀺したりできる。

TensorBoard をGoogle Colab

䟋

load_ext tensorboard
tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

TensorBoardをロヌカルで䜿甚するには、以䞋のコマンドを実行し、結果をhttp://localhost:6006/。

䟋

tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

これにより、TensorBoardがロヌドされ、トレヌニングログが保存されおいるディレクトリに移動したす。

ロガヌを蚭定した埌、モデルのトレヌニングを進めるこずができたす。すべおのトレヌニングメトリクスは、遞択したプラットフォヌムに自動的に蚘録され、これらのログにアクセスしお、時間の経過ずずもにモデルのパフォヌマンスを監芖し、異なるモデルを比范し、改善すべき領域を特定するこずができたす。



䜜成日: 2023-11-12 曎新日: 2024-04-23
䜜成者:dependabot[bot](1),glenn-jocher(10),fcakyon(1),Laughing-q(2),Burhan-Q(1)

コメント