別の Yolox 記事、Voc データ セットでの AP の解決は 0 です: YOLOX のトレーニング時に AP を解決するのは 0 です
友人が coco データセットをトレーニングしているとき、AP は 0 になります。実際、私はこの問題に遭遇したことがありません。ここでテストしたところ、正常に実行できました。しかし、何人かの友人が質問したので、ここでその方法をまとめておきます。 Coco データセットをトレーニングしましょう。..
次のように進めます
- まず、Coco データセットが正しい形式であることを確認してください。
Animals_Coco ├─annotations ├─train2017 └─val2017
annotations
フォルダーの下に2 つのinstances_train2017.json
重要なファイルが含まれており、トレーニングと検証用の画像データinstances_val2017.json
が含まれていますtrain2017
val2017
- 次に、 を変更し
yolox/data/datasets/coco_classes.py
、独自のデータセットのカテゴリに変更します。COCO_CLASSES = ( "tiger", "panda", )
- その後、必要に応じて変更します
yolox/exp/yolox_base.py
(または変更しません)。(这里应该也可以不用修改,因为后面的exps/example/yolox_voc/yolox_s.py会对self.num_classes进行重载) 将self.num_classes修改为自己的类别数 self.num_classes = 2 (我的数据集是 2) 你还可以修改 self.inputsize, self.random_size 改变训练尺寸大小 你还可以修改 self.test_size 改变测试的尺寸大小
- 改訂
exps/example/custom/yolox_s.py
修改数据集地址 self.data_dir self.data_dir = "D:/Z_Data/Animals_Coco" 修改类别 self.num_classes self.num_classes = 2 剩下的 self.max_epoch,self.data_num_workers,self.eval_interval 可自行选择修改
- 最後に
tools/train.py
パラメータ設定を変更します。设置 default="Animals_Coco", 训练后结果就会保存在 tools/YOLOX_outputs/Animals_Coco下 parser.add_argument("-expn", "--experiment-name", type=str, default=None) 设置 model_name,我也不太清楚这是不是必须项 (我觉得不是) parser.add_argument("-n", "--name", type=str, default="yolox-s", help="model name") 设置 batch_size parser.add_argument("-b", "--batch-size", type=int, default=64, help="batch size") 设置gpu,因为我只有一张卡,所以设 default=0 parser.add_argument( "-d", "--devices", default=0, type=int, help="device for training" ) 设置你的数据配置的路径,default="../exps/example/custom/yolox_s.py" parser.add_argument( "-f", "--exp_file", default="../exps/example/custom/yolox_s.py", type=str, help="plz input your expriment description file", ) 设置预训练权重路径, default="../weights/yolox_s.pth" parser.add_argument("-c", "--ckpt", default="../weights/yolox_s.pth", type=str, help="checkpoint file")
上記の操作を行った後、下図のように正常に動作していることが分かりますが、
この一連の操作を行ってもAPが0のままであれば、json
ファイルの内容に問題があると個人的に推測しています。
テスト結果を見てみましょう
一般的に言えば、速度と精度はまだ問題ありません。
最後に、トレーニング プロセスでTypeError: 'numpy.float64' object cannot be interpreted as an integer
見つかっAnaconda3\Lib\site-packages\pycocotools\cocoeval.py
た場合は pycahrm
、行を変更External Libraries
します。site-packages\pycocotools\cocoeval.py
507、508
self.iouThrs = np.linspace(.5, 0.95, np.round((0.95 - .5) / .05) + 1, endpoint=True)
self.recThrs = np.linspace(.0, 1.00, np.round((1.00 - .0) / .01) + 1, endpoint=True)
修改为
self.iouThrs = np.linspace(.5, 0.95, 10, endpoint=True)
self.recThrs = np.linspace(.0, 1.00, 101, endpoint=True)