深圳建设工程交易中心主页,网络网站推广优化,浙江建设培训考试网站,优秀个人网页设计图片YOLOX是在YOLOv3基础上改进而来#xff0c;具有与YOLOv5相媲美的性能#xff0c;其模型结构如下#xff1a; 由于博主只是要用YOLOX做对比试验#xff0c;因此并不需要对模型的结构太过了解。 先前博主调试过YOLOv5,YOLOv7#xff0c;YOLOv8,相比而言#xff0c;YOLOX的环…YOLOX是在YOLOv3基础上改进而来具有与YOLOv5相媲美的性能其模型结构如下 由于博主只是要用YOLOX做对比试验因此并不需要对模型的结构太过了解。 先前博主调试过YOLOv5,YOLOv7YOLOv8,相比而言YOLOX的环境配置是类似的但其参数设置太过分散改动比较麻烦就比如epoch这些参数竟然要放到yolox_base.py文件中去继承而不是直接在train.py中指定。话不多说我们开始调试过程。
环境配置
YOLOX的调试过程基本与YOLOv5类似不同之处在于需要进行一个安装过程。 即执行
python setup.py develop否则在运行是会提示找不到yolox文件 运行成功后结果如下值得注意的是博主在本地很难成功但在服务器上却很容易。 随后便是conda环境配置过程基本与YOLOv5一致可以直接使用命令配置
conda create -n yolox python3.8
source activate yolox
pip install -r requirements.txt数据集配置
YOLOX使用的数据集是COCO但不同在于其训练与测试中没有给出参数进行指定而是直接写在了数据集读取文件中我们只需要按照其要求修改目录即可将数据集放到datasets/COCO文件夹下即可当然也可以像博主这样创建软连接
ln -s /data/datasets/coco/ /home/ubuntu/outputs/yolox/YOLOX-main/datasets/COCO/但这种方法却一直报错
File /home/ubuntu/outputs/yolox/YOLOX-main/yolox/data/datasets/datasets_wrapper.py, line 177, in __del__
if self.cache and self.cache_type ram:
AttributeError: COCODataset object has no attribute cache没办法只能把数据集复制一份到这个目录了。 随后运行报错
assert img is not None, ffile named {img_file} not found
AssertionError: file named /home/ubuntu/outputs/yolox/YOLOX-main/datasets/COCO/val2017/000000567197.jpg not found仔细一看原来是目录结构出了问题没有images这级目录去掉该目录即可。最终的目录结构为 训练模型 class torch.autograd.variable.Variable
RuntimeError: FIND was unable to find an engine to execute this computation这是因为博主安装环境时默认安装torch为2.0导致出错。换个torch版本即可
conda install pytorch1.12.0 torchvision0.13.0 torchaudio0.12.0 cudatoolkit11.6 -c pytorch -c conda-forge随后需要修改几个参数首先是指定模型名称博主使用的是yolox-l
parser.add_argument(-n, --name, typestr, defaultyolox-l, helpmodel name)随后设置yolox-l的配置文件–f代表从该文件读取然后修改对应文件中的参数
parser.add_argument(-f,--exp_file,default/home/ubuntu/outputs/yolox/YOLOX-main/exps/default/yolox_l.py,typestr,helpplz input your experiment description file,)修改/home/ubuntu/outputs/yolox/YOLOX-main/exps/default/yolox_l.pynum_class设置错了博主习惯了DETR类模型加上了背景类实际上应该只有3类。 class Exp(MyExp):def __init__(self):super(Exp, self).__init__()self.depth 1.0self.width 1.0self.exp_name os.path.split(os.path.realpath(__file__))[1].split(.)[0]# Define yourself dataset pathself.train_ann instances_train2017.jsonself.val_ann instances_val2017.jsonself.num_classes 4self.max_epoch 1self.data_num_workers 8self.print_interval1self.eval_interval 1随后便是batch-szie参数了YOLOX所占用显存还是比较大的batch-size设置为6。 训练时间还是蛮快的1个epoch大概45分钟左右。训练1个epoch的结果由于没有使用预训练模型值很低。还有一个问题便是num_class设置错了博主习惯了DETR类模型加上了背景类实际上应该只有3类。 预训练模型微调
我们可以使用YOLOX-L训练好的模型当作预训练模型在该模型上面进行微调从而能够快速收敛训练好的num_class80我们保持原样即可即num_class3模型会自动处理类别不一致的问题。使用预训练模型后迭代速度明显加快并且精度也迅速提升。
parser.add_argument(-c, --ckpt, default/home/ubuntu/outputs/yolox/YOLOX-main/yolox_l.pth.tar, typestr, helpcheckpoint file)使用预训练模型做微调后训练一个epoch的结果。
评估模型
完成eval.py的参数配置
python -m yolox.tools.eval -n yolox-s -c yolox_s.pth -b 64 -d 8 --conf 0.001 [--fp16] [--fuse]当然也可以使用参数主要修改这两个参数即可 随后运行python eval.py命令即可这里发现使用下载的权重文件会报错于是博主自己训练了1个epoch并保存权重结果使用这个则是没有问题的文件保存在YOLOX_outputs中。但似乎发现了一个问题那就是值好低呀。 模型推理
首先我们下载已经训练完成的模型博主这里选择的是YOLOX-L值得注意的是下载这个文件需要翻墙。下载的权重文件为tar文件因此需要解压
tar -xvf yolox_l.pth.tar但没想到却报错了 tar: This does not look like a tar archive tar: Skipping to next header tar: Exiting with failure status due to previous errors 这是个BUG 解决办法:
gzip -d xxxx.tar.gz 对于.tar.gz文件的处理方式
tar -xf xxxx.tar 对于.tar文件处理方式依旧不行没办法博主只能把其后缀名改为zip然后使用unzip的方式解压该文件。但解压后却是一个文件夹这与博主先前所见到的pth文件不同果然在运行时报错 super().init(open(name, mode)) IsADirectoryError: [Errno 21] Is a directory: ‘/home/ubuntu/outputs/yolox/YOLOX-main/yolox_l.pth’ 原来YOLOX的权重文件是不需要解压的直接用即可即在指定文件时为
parser.add_argument(-c, --ckpt, default/home/ubuntu/outputs/yolox/YOLOX-main/yolox_l.pth.tar, typestr, helpckpt for eval)指定size224Demo.py中给出了其参数量与计算量
推理结果如下