【目标检测算法】YOLOV8代码复现
一、算法笔记
二、代码复现
2.1 搭建环境
创建虚拟环境
1 | conda create -n yolov8 python=3.7 |
安装PyTorch1.8.0
1 | conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge |
下载作者开源的程序,并安装其他依赖
1 | git clone https://github.com/ultralytics/ultralytics |
2.2 命令行使用教程
(1)语法规则
1 | yolo TASK MODE ARGS |
(2)训练
1 | yolo train data=coco128.yaml model=yolov8n.pt epochs=10 lr0=0.01 |
(3)预测
1 | yolo predict model=yolov8n-seg.pt source='https://youtu.be/Zgi9g1ksQHc' imgsz=320 |
(4)评价
1 | yolo val model=yolov8n.pt data=coco128.yaml batch=1 imgsz=640 |
2.3 Python使用教程
(1)训练
1 | from ultralytics import YOLO |
(2)评价
1 | from ultralytics import YOLO |
(3)预测
获取预测结果
1 | from ultralytics import YOLO |
预测结果分析(results会包含预测所有结果的列表,当有很多图像的时候要注意避免内存溢出,特别是在实例分割时)
1 | # 1. return as a list |
2.3 数据集制作(实例分割)
(1)使用Labelme创建实例分割数据集
安装labelme
1 | pip install labelme |
安装完成后直接在命令行输入labelme
即可打开。
使用label进行标注,将生成的json文件和原始图像jpg,放入同一个文件夹中。
(2)Labelme格式转COCO格式
1 | pip install labelme2coco |
1 | labelme2coco path/to/labelme/dir --train_split_rate 0.85 |
(3)COCO格式转YOLO格式
使用labelme
制作实例分割的coco格式数据集,然后使用ultralytics/JSON2YOLO项目将json文件转换成yolo的训练格式。
1 | git clone https://github.com/ultralytics/JSON2YOLO.git |
创建一个虚拟环境,然后使用下面的命令安装依赖
1 | pip install -r requirements.txt |
修改general_json2yolo.py
的第387行,设置为刚才得到的COCO注释的位置,例如:
1 | if source == 'COCO': |
修改general_json2yolo.py
的第289行,因为不是coco80中的物体类型,是自己设置的,因此需要修改:
1 | # cls = coco80[ann['category_id'] - 1] if cls91to80 else ann['category_id'] - 1 # class |
运行程序将COCO格式json文件转换为YOLO格式txt。
1 | python general_json2yolo.py |
结果保存在new_dir中,需要手动把images复制过去。最后得到的数据集如下:
1 | data_root |
(4)创建数据集的YAML文件
打开目录ultralytics/datasets
,复制一份其中的coco128-seg.yaml
,重命名为custom-seg.yaml
,然后根据自己的数据集进行修改。
例如:
1 | # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] |
2.4 开始训练
新建一个python文件如train.py
,添加内容如下:
1 | from ultralytics import YOLO |
2.5 结果预测
评论