こんにちは、私はステップ4648までyolo-smallモデルをトレーニングしましたが、ほとんどの損失値は1.0より大きく、テストの結果はあまり良くありません。 損失値がどれだけうまくいくか知りたいのですが、トレーニング時にいくつかの重要なパラメータを示してください。たとえば、学習率、トレーニング時間、最終的な損失値などです。
モデルをiMac(4 GHz Inter Core i7、16 GBメモリ)、CPUモードでトレーニングします。
ありがとう!
どのバッチサイズを使用していますか? バッチサイズがないと、ステップ番号はあなたがどこまで進んだかについて何も言うことができないからです。 YOLOの作者によると、彼はかなり強力なマシンを使用しており、トレーニングには2つのステージがあり、最初のステージ(平均的なプールを使用した畳み込みレイヤーのトレーニング)には約1週間かかり
深層ネットのトレーニングは、科学というよりは芸術です。 したがって、私の提案は、最初に小さなデータサイズでモデルをトレーニングして、モデルがトレーニングセットに適合できるかどうかを確認することです。そうでない場合は、先に進む前に解決すべき問題があります。 コードに組み込まれているデータ拡張のため、損失が実際に0.0に達することはありません。
私は自分のコードでいくつかの構成をトレーニングしましたが、損失は> 10.0から約0.5以下にかなり縮小する可能性があります(損失は出力テンソル全体で平均化されるため、パラメーターC、B、Sは関係ありません)。 私は通常、デフォルトの学習率1e-5から始め、バッチサイズ16または8でさえ、損失が減少しなくなり不安定に見えるまで、最初に損失をスピードアップします。
その後、損失が行き詰まったと感じるたびに、学習率は1e-6に低下し、バッチサイズは32と64に増加します(テストではまだ良い結果は得られません)。 ./yolo/train.py/yolo_loss()
編集して、他の適応学習率トレーニングアルゴリズム(Adadelta、Adamなど)に慣れている場合は、それらに切り替えることができます。
.cfgファイル内で、YOLO作成者が使用した学習率ポリシーを確認することもできます。
幸運を祈ります
@thtrieuなんて素敵な提案でしょう!
私も同様の問題に遭遇し、事前にトレーニングされたウェイトが本当に役立つかもしれないことを知りました。 さらに、データの質と量-それ自体は特にyoloスタイルのネットワークをトレーニングするときに非常に重要ですが、うまく収束するのは非常に困難です...
私はまだこれに苦労しています〜'〜
@thtrieuありがとうございます〜
私の最初のトレーニングでは、バッチサイズは12です。患者と言うとポイントがわかります。
私の最終的な目標は、Imagenetにないオブジェクトのバウンディングボックスを見つけることなので、事前にトレーニングされたモデルなしでトレーニングを行います。
再度、感謝します!
ただフレンドリーなping。 4クラスのYOLOのトレーニングを終了しました。興味があれば、トレーニングのプロセスについてメモを書きます。
@thtrieuはい、楽しみにしています。
それ以来、コードを何サイクルも更新しているので、損失値のスケーリングに影響します。 しかし、メカニズムは同じです。 これが私のメモです:
トレーニングされたウェイトを実際に再利用する必要があります。これはdarkflow
サポートされている機能です。 できれば、元のYOLOから取得した2つまたは3つの最初のレイヤーが適切です。
トレーニングの前に、いくつかのトレーニング済みモデルで微調整を実行して、損失値を確認します。 これらは収束した値であるため、これらの数値を回避することが目標です。 (約1.5〜1.7)
先に進む前に、非常に小さなトレーニングデータセットをオーバーフィットするようにしてください。 これにより、ロジックが機能していることを確認できます。
損失値で行き詰まったら、非常に少数のデータトレーニングのセットを再度過剰適合させます。 損失を減らすことができる場合は、モデルが適合していないため、2つのオプションを検討してください。1。レイヤーのサイズを大きくする、2。深さを大きくする。 通常、一般化と速度の点では後者の方が優れています。
時折、予測を視覚化し、モデルがどのような間違いを犯しているかを確認します。 私の場合、データが大きく歪んでいるため、ほとんどすべてのクラスがperson
であると予測していました。 損失目標のクラス期間の重みを徐々に高く設定すると、この間違いはそれほど深刻ではなくなります。 バランスをとるために他のクラスのデータを複製すると、トレーニングデータが不自然に分散されることに注意してください。 だから私はこれに反対することをお勧めします。
幸運を祈ります。あなたのトレーニングからの最新情報をお聞きしたいと思います。
@thtrieu tiny-yolo-vocモデルで微調整を実行しましたが、損失値は1.5〜1.7ではなく約6です。
私はYOLOv2の経験があまりありませんが、おそらく@ ryansun1900の経験があります。
これが、YOLOv2の損失がv1の損失よりもはるかに高い理由です。
13 x 13 x 5 = 845
プロポーザルバウンディングボックスがあり、それぞれに独自の信頼度(オブジェクト性)と条件付きクラス確率項があります。7 x 7 x 2 = 98
プロポーザル境界ボックスのみがあり、同じ信頼項と条件付きクラス確率項を共有します。したがって、v2の出力ボリュームはv1( 21125 vs 1470
)よりもはるかに大きく、損失も大きくなります。
これまでのところ、大規模なデータのトレーニングの経験もあまりありません。
しかし、thtrieuの説明は正しいです。 損失の実装は、yolov1とyolov2で異なります。 損失の差は妥当だと思います。
良いヒントをありがとう:)
こんにちは 、
- 損失値で行き詰まったら、非常に少数のデータトレーニングのセットを再度過剰適合させます。 損失を減らすことができる場合は、モデルが適合していないため、2つのオプションを検討してください。1。レイヤーのサイズを大きくする、2。深さを大きくする。 通常、一般化と速度の点では後者の方が優れています。
@thtrieu深さを増やすとはどういう意味ですか? どうすればいいですか? cfgファイルの何かを変更することによって? 私はyolov2で9つのクラスのトレーニングを行っており、yolov2-tiny-9c.cfgという名前のcfgファイルを作成しました。 だから私はこのファイルまたは元のyolov2-tiny.cfgファイルに変更を加えますか?
1つのクラスyolov3-tiny.cfgのモデルをトレーニングしています。 トレーニングセットは、各jpegに1〜24個のオブジェクトの6800jpegを設定します。 トレーニングセットの画像は720行(高さ)に正規化されていますが、幅は可変です。 バッチサイズ24、サブディビジョン2。画像サイズ512x512。 学習率0.0015。 最大バッチ数は450000です。mAPは高い(約98%)ものの、平均損失は依然として0.5を超えています。 このポイントを超えるとmAPは0.98(98%)で安定しているため、モデルは反復31500で完全にトレーニングされていると思います。
私の疑問は、モデルが一般化されていないために過剰適合であると感じているのか、それとも平均損失がまだ高いために一般化されていないのかということです。
1つのクラスyolov3-tiny.cfgのモデルをトレーニングしています。 トレーニングセットは、各jpegに1〜24個のオブジェクトの6800jpegを設定します。 トレーニングセットの画像は720行(高さ)に正規化されていますが、幅は可変です。 バッチサイズ24、サブディビジョン2。画像サイズ512x512。 学習率0.0015。 最大バッチ数は450000です。mAPは高い(約98%)ものの、平均損失は依然として0.5を超えています。 このポイントを超えるとmAPは0.98(98%)で安定しているため、モデルは反復31500で完全にトレーニングされていると思います。
私の疑問は、モデルが一般化されていないために過剰適合であると感じているのか、それとも平均損失がまだ高いために一般化されていないのかということです。
モデルをトレーニングするときに、このようなグラフを印刷する方法を教えてください。
モデルをトレーニングするときに、このようなグラフを印刷する方法を教えてください。
彼はGUIをサポートするAlexeyABのリポジトリを使用していると思います。
最も参考になるコメント
どのバッチサイズを使用していますか? バッチサイズがないと、ステップ番号はあなたがどこまで進んだかについて何も言うことができないからです。 YOLOの作者によると、彼はかなり強力なマシンを使用しており、トレーニングには2つのステージがあり、最初のステージ(平均的なプールを使用した畳み込みレイヤーのトレーニング)には約1週間かかり
深層ネットのトレーニングは、科学というよりは芸術です。 したがって、私の提案は、最初に小さなデータサイズでモデルをトレーニングして、モデルがトレーニングセットに適合できるかどうかを確認することです。そうでない場合は、先に進む前に解決すべき問題があります。 コードに組み込まれているデータ拡張のため、損失が実際に0.0に達することはありません。
私は自分のコードでいくつかの構成をトレーニングしましたが、損失は> 10.0から約0.5以下にかなり縮小する可能性があります(損失は出力テンソル全体で平均化されるため、パラメーターC、B、Sは関係ありません)。 私は通常、デフォルトの学習率1e-5から始め、バッチサイズ16または8でさえ、損失が減少しなくなり不安定に見えるまで、最初に損失をスピードアップします。
その後、損失が行き詰まったと感じるたびに、学習率は1e-6に低下し、バッチサイズは32と64に増加します(テストではまだ良い結果は得られません)。
./yolo/train.py/yolo_loss()
編集して、他の適応学習率トレーニングアルゴリズム(Adadelta、Adamなど)に慣れている場合は、それらに切り替えることができます。.cfgファイル内で、YOLO作成者が使用した学習率ポリシーを確認することもできます。
幸運を祈ります