Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

新手提问,想要把识别出的内容作下一步操作 #5

Open
zhongkunh opened this issue Oct 31, 2024 · 4 comments
Open

新手提问,想要把识别出的内容作下一步操作 #5

zhongkunh opened this issue Oct 31, 2024 · 4 comments

Comments

@zhongkunh
Copy link

请问如果要直接返回一个数组比如[True,True,False]代表各个值该怎么改main函数呢

最近才开始接触yolo所以问题很简单:( 如果可以解答的话就太感谢了!

@LIU42
Copy link
Owner

LIU42 commented Oct 31, 2024

其实我已经将整个识别器封装成了 RulesRecognizer 类,可以这样创建它的实例:

recognizer = RulesRecognizer(configs)

其中构造参数 configs 为 configs/config.yaml 中的配置字典,可以这样加载它:

import yaml

with open('configs/config.yaml', 'r') as configs_file:
    configs = yaml.safe_load(configs_file)

也可以直接硬编码到程序中:

# 一个配置的例子

configs = {
    'device': 'CPU',
    'precision': 'fp32',
    'detector': {
        'conf-threshold': 0.25,
        'iou-threshold': 0.45,
    },
    'filter': {
        'weights': [0.05, 5, 2, 2],
        'threshold': 40,
    },
    'strategy': 'conservative',
}

调用 recognizer 对象,传入 opencv 加载的待识别图像:

import cv2

image = cv2.imread('your_image_path')
signals, directs = recognizer(image)

调用返回的结果包含两部分,其中第一个返回值 signals 为所有识别到的有效交通信号灯列表,它的每一个元素均为一个交通信号灯对象:

for signal in signals:
    signal.x                # 左上角横坐标
    signal.y                # 左上角纵坐标
    signal.w                # 宽度
    signal.h                # 高度
    signal.center_x         # 中心点横坐标
    signal.center_y         # 中心点纵坐标
    signal.color            # 颜色
    signal.shape            # 箭头的形状

第二个返回值为三个方向上的通行规则对象:

directs.left        # 是否能够左转(bool类型,下同)
directs.right       # 是否能够右转
directs.straight    # 是否能够直行

对于你需要一个数组,可以这么做:

results = [directs.left, directs.straight, directs.right]

@zhongkunh
Copy link
Author

非常感谢!很明白的解释。作者万圣节快乐!
还有一个小问题,数据集里classifier貌似没有data.yaml,这样该怎么自己用Ultralytics训练数据集呢。

@LIU42
Copy link
Owner

LIU42 commented Nov 1, 2024

classifier 执行的是分类任务,它需要的数据集格式和常规的图像分类数据集是一样的,就像下面这样:

dataset-/
|
|-- train/
|   |-- class1/
|   |   |-- xxx.png
|   |   |-- xxx.png
|   |   |-- ...
|   |
|   |-- class2/
|   |   |-- xxx.png
|   |   |-- xxx.png
|   |   |-- ...
|   |
|   |-- ...
|
|-- test/
|   |-- class1/
|   |   |-- xxx.png
|   |   |-- xxx.png
|   |   |-- ...
|   |
|   |-- class2/
|   |   |-- xxx.png
|   |   |-- xxx.png
|   |   |-- ...
|   |
|   |-- ...
|
|-- val/
    |-- class1/
    |   |-- xxx.png
    |   |-- xxx.png
    |   |-- ...
    |
    |-- class2/
    |   |-- xxx.png
    |   |-- xxx.png
    |   |-- ...
    |
    |-- ...

具体参见 Image Classification Datasets Overview - Ultralytics YOLO Docs ,另外我用来训练的数据集也放在了 Releases 中,可以参考它的格式。

@LIU42
Copy link
Owner

LIU42 commented Nov 1, 2024

训练的命令大概是这样的:

yolo classify train data=path/to/your/dataset model=yolov8n-cls.pt epochs=100 imgsz=64

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants