归结原理 人工智能-ABC智慧教研平台上线多门人工智能领域的对象检测算法
目前随着深度学习技术的不断突破,使得各项人工智能技术最终落地并改善人们的生活。作为人工智能领域的分支,计算机视觉在现实生活中最为常见,具有很高的实际应用价值。常见的应用领域有工业生产检测、医疗检测结果判定、人脸识别、视频数据分析、智能驾驶、图片中的文字信息识别以及视 频内容编辑等。ABC智慧教研平台上线了多门人工智能领域的课程,涉及Python开发、机器学习、深度学习、TensorFlow、OpenCV图像处理等多个方向,帮助学生从入门到熟练技能。
随着近几年各项图像处理算法的不断更新迭代,智能监控系统因此得以完善,并且应用领域越来越多。例如在城市交通监控中,智能监控系统可以为交警部门实时统计并分析当前路口的路况信息,辅助交警等工作人员进行交通管理,保障交通安全以及道路畅通。随着近几年智能监控系统领域的不断发展归结原理 人工智能,行人检测和跟踪方向的研究有着较为成熟的硬件支持,而为了满足各个领域对于行人检测和跟踪的需求,开展有关行人检测和跟踪方面的研究显得尤为重要。
ABC平台的教研团队搜集了非常丰富的图像处理案例及对应算法内容,今天给大家带来的是一款名为“YOLO”的对象检测算法介绍:
YOLO将对象检测重新定义为一个回归问题,它将单个卷积神经网络(CNN)应用于整个图像,将图像分成网格,并预测每个网格的类概率和边界框。YOLO非常快,由于检测问题是一个回归问题,所以不需要复杂的管道。
YOLOv8 是 ultralytics 公司在 2023年1月10 号开源的YOLOv5 的下一个重大更新版本,目前支持 图像分类、物体检测和实例分割任务,官方开源地址:
YOLOv8 是一个 SOTA 模型,它建立在以前 YOLO 版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新 的损失函数,可以在从CPU 到 GPU的各种硬件平台上运行。
ultralytics 并没有直接将开源库命名为 YOLOv8,而是直接使用ultralytics 这个词,原因是ultralytics 将这个库定位为算法框架,而非某一个特定算法,一个主要特点是可扩展性。其希望这个库不仅仅能够用于 YOLO 系列模型,而是能够支持非 YOLO 模型以及分类分割姿态估计等各类任务。
ultralytics 库的两个主要优点是:①融合众多当前SOTA技术于一体 ②未来将支持其他YOLO系列以及YOLO之外的更多算法
下表为官方在 COCO Val 2017 数据集上测试的 mAP、参数量和FLOPs结果。可以看出YOLOv8 相比 YOLOv5 精度提升非常多,但是 N/S/M 模型相应的参数量和FLOPs 都增加了不少,从上图也可以看出相比 YOLOV5 大部分模型推理速度变慢了。
具体到 YOLOv8 算法,其核心特性和改动可以归结为如下:
1 )提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于YOLACT 的实例分割模型。和 YOLOv5一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于满足不同场景需求
2 )骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度 流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数,属于对模型结构精心微调,不再是无脑 一套参数应用所有模型,大幅提升了模型性能。不过这个 C2f 模块中存在 Split 等操作对特定硬件部署没有之前那么友好了
3 )Head 部分相比 YOLOv5 改动较大,换成了目前主流的解耦头结构,将分类和检测头分离,同时也从 Anchor-Based 换成了 Anchor-Free
4 )Loss 计算方面采用了TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss
5 )训练的数据增强部分引入了 YOLOX 中的最后 10 epoch 关闭 Mosiac 增强的操作,可以有效地提升精度
从上面可以看出,YOLOv8 主要参考了最近提出的诸如 YOLOX、YOLOv6、YOLOv7 和 PPYOLOE 等算法的相关设计,偏向工程实践,主推的还是 ultralytics 这个框架本身。
模型结构设计
基于YOLOv8的行人检测系统是一款实时、高精度的行人检测工具,适用于智能交通、无人驾驶、视频监控等领域。本系统结合了YOLOv8算法的优势,为用户提供便捷、高效的行人检测服务。
配置要求:
操作系统:Windows 10、 Linux或macOS
内存:8GB及以上
显卡:NVIDIA GeForce GTX 1060 或更高级别
硬盘空间:10GB及以上
如何安装:
在一个 Python>=3.7 环境中,使用 PyTorch>=1.7归结原理 人工智能,通过 pip 安装 ultralytics 软件包以及所有依赖项。
pip install ultralytics
如何准备数据集训练模型:
在COCO数据集上预训练的YOLOv8检测 ,分割和姿态模型可以在这里找到,以及在ImageNet数据 集上预训练的YOLOv8分类模型。所有的检测,分割和姿态模型都支持追踪模式。
如何使用模型:YOLOv8 可以在命令行界面(CLI)中直接使用,只需输入 yolo 命令:
yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg
YOLOv8 也可以在 Python 环境中直接使用,并接受与上述 CLI 示例中相同的参数 :
from ultralytics import YOLO
# 加载模型
model = YOLO("yolov8n.yaml") # 从头开始构建新模型
model = YOLO("yolov8n.pt") # 加载预训练模型(建议用于训练)
# 使用模型
model.train(data="coco128.yaml", epochs=3) # 训练模型
metrics = model.val() # 在验证集上评估模型性能
results = model("https://ultralytics.com/images/bus.jpg") # 对图像进行预测 success = model.export(format="onnx") # 将模型导出为 ONNX 格式
部分源代码:
plots = not evolve # create plots
cuda = device.type != 'cpu'
init_seeds(1 + RANK)
with torch_distributed_zero_first(LOCAL_RANK):
data_dict = data_dict or check_dataset(data) # check if None train_path, val_path = data_dict['train'], data_dict['val']
nc = 1 if single_cls else int(data_dict['nc']) # number of classes
names = ['item'] if single_cls and len(data_dict['names']) != 1 else data_dict['names'] # class names
assert len(names) == nc, f'{len(names)} names found for nc={nc} dataset in {data}' # check
is_coco = isinstance(val_path, str) and
val_path.endswith('coco/val2017.txt') # COCO dataset
# Model
check_suffix(weights, '.pt') # check weights
pretrained = weights.endswith('.pt')
if pretrained:
with torch_distributed_zero_first(LOCAL_RANK):
weights = attempt_download(weights) # download if not found locally ckpt = torch.load(weights, map_location='cpu') # load checkpoint to CPU
to avoid CUDA memory leak
model = Model(cfg or ckpt['model'].yaml, ch=3, nc=nc,
anchors=hyp.get('anchors')).to(device) # create
exclude = ['anchor'] if (cfg or hyp.get('anchors')) and not resume else [] # exclude keys
csd = ckpt['model'].float().state_dict() # checkpoint state_dict as FP32
csd = intersect_dicts(csd, model.state_dict(), exclude=exclude) # intersect
model.load_state_dict(csd, strict=False) # load
LOGGER.info(f'Transferred {len(csd)}/{len(model.state_dict())} items from {weights}') # report
else:
model = Model(cfg, ch=3, nc=nc, anchors=hyp.get('anchors')).to(device)
# create
效果展示:
基于YOLOv8的行人检测系统