YOLO_V8分割
YOLO安装
pip install ultralytics
YOLO的数据集转化看csdn
数据标注EIseg
-
EIseg这块,正常安装就好,但是numpy和各类包都容易有冲突,python版本装第一点
-
数据标注过程中,记得把JSON和COCO都点上,把自动保存点上,如果标注后需要修改,记得手动点右下角保存,否则“空格”没有存上。
-
预训练模型在
/home/gsh/Projects/Yanbao/dataset/static_hrnet18_ocr64_cocolvis.zip
格式转化
labelme转COCO
-
paddle标注得到的是labelme格式文件,首先由于是多人标注,其中label和imagePath是不一样的,所以需要统一,该格式采用
read_json_save_all.py
脚本修改。在/home/gsh/Projects/Yanbao/dataset/data_for_train_2/read_json_save_all.py
该脚本生成的是每个图片对应的labelme.json文件。需要输入所有标注的labelme文件夹路径,输出保存路径,和图片路径。 -
labelme转COCO采用的是官方脚本:
labelme-json2labelme-coco.py
在~/Projects/PaddleSeg/EISeg/tool
下
python labelme-json2labelme-coco.py [path to json dir] [path to 输出/output] --labels [path to labels.txt]
# 注意,上述的json dir要用统一后的json文件
# 例如:
python /home/gsh/Projects/PaddleSeg/EISeg/tool/labelme-json2labelme-coco.py /home/gsh/Projects/Yanbao/dataset/data_for_train_2/all_data1/tongyi_data /home/gsh/Projects/Yanbao/dataset/output --labels /home/gsh/Projects/Yanbao/dataset/data_for_train_2/all_data1/together/label/labelme/labels.txt
结果如下:
├── annotations.json
├── JPEGImages
└── Visualization
COCO转YOLOV8
- 将上面生成的annotations.json进行处理,将JPEGImages替换为
.
,建议方法是VSCode打开后进行全局查找替换。
- JSON2YOLO库中
general_json2yolo.py
在~/Projects/JSON2YOLO
下
修改一下这里的路径,注意,这里要将上面的annotations.json放到一个文件夹中,然后将文件夹路径输入
cls91to80也改成false
把这里的-1去掉,这样类编号就从0开始了
默认生成的路径是执行代码的路径下,生成new_dir文件夹
也可以改路径,在代码的第258行
生成的是这样的
├── images
└── labels
└── annotations
调整为这样
├── images
│ ├── train
│ └── val
└── labels
├── train
└── val
至此数据处理全部结束
YOLO-seg的训练
-
代码在
/home/gsh/Projects/YOLOV8/segtrain.py
,其中model = YOLO("/home/gsh/Downloads/yolov8l-seg.pt")
这里面的名字写的谁,要么读取本地的,要么直接从网上下,写什么下什么 -
记得修改yaml中的文件夹路径和类别,代码在
/home/gsh/Projects/ultralytics/ultralytics/cfg/datasets/coco8-seg.yaml
-
train的选择参数很多,参考这里
results = model.train(data="/home/gsh/Projects/ultralytics/ultralytics/cfg/datasets/coco8-seg.yaml", epochs=1000, imgsz=640, batch=-1)
整体例子:
# Load a model # model = YOLO("yolov8l-seg.yaml") # build a new model from YAML model = YOLO("/home/gsh/Downloads/yolov8s-seg.pt") # load a pretrained model (recommended for training) # model = YOLO("/home/gsh/Downloads/yolov8l-seg.pt") # load a pretrained model (recommended for training) # model = YOLO("yolov8l-seg.yaml").load("/home/gsh/Downloads/yolov8l-seg.pt") # build from YAML and transfer weights # model = YOLO("yolov8l-seg.yaml").load("/home/gsh/Downloads/yolov8l-seg.pt") # build from YAML and transfer weights # Train the model results = model.train(data="/home/gsh/Projects/ultralytics/ultralytics/cfg/datasets/coco8-seg.yaml", epochs=900, imgsz=640 ,batch=32)
YOLO-seg的预测
predict
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")
# Run inference on an image
results = model("bus.jpg") # results list
# View results
for r in results:
print(r.boxes) # print the Boxes object containing the detection bounding boxes
YOLO-Seg部署模型转化
onnx的部署
X64平台
模型转化代码
from ultralytics import YOLO
model=YOLO("/home/gsh/Projects/YOLOV8/runs/segment/train8/weights/best.pt")
model.export(format="onnx", device=0, int8=True)
报错
Loading /home/gsh/Projects/YOLOV8/runs/segment/train8/weights/best.onnx for ONNX Runtime inference…
[1;31m2024-08-26 09:30:46.347354781 [E:onnxruntime:Default, provider_bridge_ort.cc:1992 TryGetProviderInfo_CUDA] /onnxruntime_src/onnxruntime/core/session/provider_bridge_ort.cc:1637 onnxruntime::Provider& onnxruntime::ProviderLibrary::Get() [ONNXRuntimeError] : 1 : FAIL : Failed to load library libonnxruntime_providers_cuda.so with error: libcudnn.so.9: cannot open shared object file: No such file or directory
[m
[0;93m2024-08-26 09:30:46.347381605 [W:onnxruntime:Default, onnxruntime_pybind_state.cc:965 CreateExecutionProviderInstance] Failed to create CUDAExecutionProvider. Require cuDNN 9.* and CUDA 12.*. Please install all dependencies as mentioned in the GPU requirements page (https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#requirements), make sure they’re in the PATH, and that your GPU is supported.[m
推理
直接替换掉模型路径即可
Jetson AGX
改名字
best.pt改成best-seg.pt(我也不知道为什么要加seg)据说是它模型转化要认这是个什么任务
模型转化代码
from ultralytics import YOLO
model=YOLO("/home/gsh/Projects/YOLOV8/runs/segment/train8/weights/best.pt")
model.export(format="onnx", imgsz=(480,640), device=0, int8=True, simplify=True, task = "segment")
Tensort的部署
官网介绍
模型转化代码
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.export(
format="engine",
dynamic=True,
batch=1,
workspace=10,
int8=True,
data="coco.yaml", # 这个yaml文件要用自己训练的yaml文件
)
# Load the exported TensorRT INT8 model
model = YOLO("yolov8n.engine", task="detect")
# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")
推理
直接替换掉模型路径即可