Otro artículo de Yolox, resolver el AP es 0 bajo el conjunto de datos Voc: Resolver el AP es 0 al entrenar YOLOX
Cuando un amigo está entrenando el conjunto de datos de coco, el AP es 0. De hecho, no he encontrado este problema. Lo probé aquí y puede ejecutarse normalmente, pero algunos amigos preguntaron, así que resumiré cómo hacerlo aquí. Entrenemos el conjunto de datos de Coco. ..
Proceder de la siguiente
- En primer lugar, asegúrese de que el conjunto de datos de Coco tenga el formato correcto.
Contiene dosAnimals_Coco ├─annotations ├─train2017 └─val2017
annotations
archivos importantes en la carpeta y contiene datos de imágenes para entrenamiento y verificacióninstances_train2017.json
.instances_val2017.json
train2017
val2017
- Luego modifique
yolox/data/datasets/coco_classes.py
, modifique a la categoría de su propio conjunto de datosCOCO_CLASSES = ( "tiger", "panda", )
- Luego modifique según sus propias necesidades
yolox/exp/yolox_base.py
(o no modifique)(这里应该也可以不用修改,因为后面的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 改变测试的尺寸大小
- Revisar
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 可自行选择修改
- Finalmente modifique
tools/train.py
la configuración de parámetros en设置 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")
Después de las operaciones anteriores, se puede ver en la figura siguiente que se puede ejecutar normalmente.
Si después de esta serie de operaciones, el AP sigue siendo 0, mi suposición personal es que hay json
un problema con el contenido del archivo.
Veamos los resultados de la prueba.
En términos generales, la velocidad y la precisión siguen siendo buenas.
Finalmente, si encuentra o encuentra en el proceso de formación , modifique la líneaTypeError: '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)