前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >手把手教你使用yolo进行对象检测

手把手教你使用yolo进行对象检测

原创
作者头像
用户7680342
修改于 2020-09-24 09:11:52
修改于 2020-09-24 09:11:52
2.6K00
代码可运行
举报
文章被收录于专栏:人工智能基础人工智能基础
运行总次数:0
代码可运行

引言

古语云“不进则退,不喜则忧” ,在ai大变革的时代,掌握基本的ai技能是技术人员必备生存之道。本文从对象检测应用出发,一步一步的给出使用yolo进行对象检测的流程。这里主要关注利用已有工具(yolo模型)进行对象检测应用(即模型的推理),不注重原理解析和模型训练。

Yolo简要介绍

Yolo 是“you only look once”的缩写,是2015年提出(joseph redmon和ali farhadi)的目标检测深度网络。2017年提出了yolov2, 主要是基于coco数据集训练的yolov2 和yolo9000(可以检测9000多类物体)模型,对比v1版本v2 增加了bn层,提高了分类器精度(224*224-> 448 * 448),并且增加了anchor boxes,multi-scale等特性.yolov3 使用fpn提高数据表征能力,分类损失使用binary-crossentry,residual等特性,当然网络更深了,backbone 网络是darknet-53。更近一点时间,还陆续诞生了yolov4, yolov5,笔者没用过,这里不说了。更多详细的对比网上资料很多大家自行搜索即可。

我们这里使用yolov3进行对象检测任务的实现,为描述方便,后面直接描述为yolo。

核心知识点

使用yolo 进行目标检测,很自然的要问一下几个问题:

1. 从哪儿里获取模型,

2. 如何加载和使用模型进行推理计算

3. 模型output格式如何,如何使用

4. 如何验证模型是否正常工作。

其实这些问题是使用已有模型进行迁移学习,应用到实际工作中的基础(暂不考虑推理优化,finetune等),如果换成其他网络,进行其他应用,过程也是类似。下面就是针对这些问题和知识点的方式进行一一解答。

模型加载

加载yolo需要三个文件一个模型结构cfg文件描述了模型的网络结构,一个分类标签文件描述了所有标签的名字例如car,truck等,以及网络结构权重文件。

网络结构文件可以从这里下载:

https://github.com/pjreddie/darknet/blob/master/cfg/yolov3.cfg

分类标签文件,我们使用coco数据集的标签:

https://github.com/pjreddie/darknet/blob/master/data/coco.names

权重文件:

https://pjreddie.com/media/files/yolov3.weights

可以大概看下yolov.cfg 结果,你会看到里面是一个全卷积的结构,有一些shortcut和route来实现residual结构。主要到最后一个conv层filter数目为255,后面介绍下这个255的来历。

有了相关文件,如何加载这些文件,变成一个可以推理使用的模型呢?

事实上有很多框架可以选用,tensorflow,pytorch,我们可以根据上述cfg文件,解析并按照定义将网络结构实现出来,之后解析上面的权重文件,将权重一块一块拷贝到对应网络层中。我们这里不会使用这些(主要是根据cfg实现网络比较繁琐,当然可以加深对yolo的理解,pytorch可以参考这篇博文:[2]),而是受用opencv带的ddn模块中,readNetFromDarknet函数。片段如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cfg = “cfg/yolov3.cfg”
weights = “cfg/yolov3.weights”
Net = cv2.dnn. readNetFromDarknet(cfg, weights)
Net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV)
Net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)

这里很清晰,我们准备好下载的cfg和weights,使用cv2提供的函数,指定后端和计算设备之后这里的Net就可以用来推理了。

读取图片数据和推理

图像读取使用opencv的imread即可,得到每帧frame,之后对输入进行调整,变成适合模型输入的格式,如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
blob = cv2.dnn.blobFromImage(frame, 1/255, (416, 416), [0,0,0], 1, crop=False)
 net.setInput(blob)

简单介绍下,第一行对frame进行处理的函数blobFromImage参数:

第一参数:imread读取的图片数据

第二参数:1/255是scalefactor,即对每个通道值除以255,如果通道中值范围是0-255,那么这个操作相当于把该值缩放到了0-1之间

第三参数是将整个图片缩放到对应大小:这里是(416*416)即 模型输入尺寸。

第四参数:[0,0,0] 是每个通道值的mean,函数会先对通道值减去对应的mean之后乘以scalefactor,这里设置为全0

第五参数: 是否进行rgb和bgr顺序翻转,这里选1,进行翻转

第六参数: crop 这里是false不进行裁剪

设置完输入之后就可以进行forward传播推理了,在这之前,我们还需要执行以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
layersNames = net.getLayerNames()
names=[layersNames[i[0] - 1] for i in net.getUnconnectedOutLayers()]

这里第一行把所有层的名字列出来类似:[‘conv_1’,’conv_2’,..]

第二行首先找出所有没有输出层的层,也就是网络输出层列表。然后利用idx找出对应层的名字。

最后通过:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
outs = net.forward(names)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
进行推理计算。
模型输出

推理结果是一个list,每个元素是一个boundingbox相关信息,依次

(Box_center_x, box_center_y, box_width,box_height,detection_confidence, class1_confidence,class2_confidence… class80_confidence)

可以看出前四个字段描述和boundingbox的位置,宽度和高度,第五个字段描述检测的置信度分数,后面80个是该检测对象是某个分类的置信度。

注意到这里和boundingbox相关的四个值都是归一化后的结果,需要和实际图片的对应宽度和高度相乘以后才得到最终在图片中的坐标位置。

发现没有上述字段加起来一共 4+1 + 80 = 85 ,三个通道 3 * 85 = 255,这就解释了上文中神奇数字255的由来。

遍历所有forward out的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for out in outs:
  for detection in out:
   scores = detection[5:]
  classId = np.argmax(scores)
  confidence = scores[classId]
  if confidence > confThreshold:
  center_x = int(detection[0] * frameWidth)
  center_y = int(detection[1] * frameHeight)
   width = int(detection[2] * frameWidth)
  height = int(detection[3] * frameHeight)
  left = int(center_x - width / 2)
  top = int(center_y - height / 2)
  classIds.append(classId)
   confidences.append(float(confidence))
  boxes.append([left, top, width, height])

这里的confThreshold是配置参数用来过滤较低置信度的检测,可以看出,我们使用检测结果的前四个值来计算boundingbox在图片中的像素坐标,检测结果中,从下标5开始,一共80个值,分别对应80个分类的对应置信度,我们取置信度最大的那个分类当前检测的分类结果。

最因为可能存在一个对象被多个boundingbox框住的情况,所以还需要进行一步nms的处理。即只保留框住一个对象中,置信度最高的那个boundingbox

幸好,opencv提供了这样一个函数,我们只需要提供对应的boundingbox和对应的置信度就行了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
indices = cv2.dnn.NMSBoxes(boxes, confidences, confThreshold, nmsThreshold)

这里boxes就是上面得到的所有框,condifences就是对应的置信度值,confThreshold是置信度阈值,nmsthreshold是nms计算时的阈值。

返回的indices是boxes的下标列表,通过它就可以得到最终的所有boundingbox。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final_res = []
for i in indices:
  i = i[0]
  label = classes[classIds[i]] 
  confidence = confidences[i]
  box = boxes[i]
    final_res.append(box,confidence, label)

classes是从coco.names里面得到的名字列表。

检测结果可视化

有了上面的box,我们就可以通过画出图片和对应boundingbox来检查检测的效果了。这块实际上就是对每个box调用opencv的rect 函数,然后显示图片。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for i, newbox in enumerate(boxes):
  result_boxes[i].append(newbox) 
  p1 = (int(newbox[0]), int(newbox[1])) 
  p2 = (int(newbox[0] + newbox[2]), int(newbox[1] + newbox[3]))     cv2.rectangle(frame, p1, p2, colors[i], 2, 1)
cv2.imshow(frame)

注意这里的rectangle的中box的p1和p2 分别是左上角和右下角,需要简单计算一下。

效果 展示

原图:

检测结果图:

Reference

[1] Csdn上yolo 相关网络介绍:

https://blog.csdn.net/weixin_38673554/article/details/106009117

加载

[2] 一片使用pytorch实现yolov3的博文:https://blog.paperspace.com/how-to-implement-a-yolo-v3-object-detector-from-scratch-in-pytorch-part-3/

notebook中的完整例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import os
import cv2
import numpy as np
from IPython.display import Image
import IPython.display
from PIL import Image as p_image
print(os.getcwd())
cfg = "../yolo3/yolov3.cfg"
weights = "../yolo3/yolov3.weights"
labels = "../yolo3/coco.names"
image = '../yolo3/dog-cycle-car.png'
conf_threshold = 0.9
nms_threshold = 0.4
#for f in os.listdir(os.getcwd()):
  #print(f)
os.path.exists(weights)
os.path.exists(cfg)
os.path.exists(labels)
def init_nn():
  nn = cv2.dnn.readNetFromDarknet(cfg, weights)
  nn.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV)
  nn.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)
  classes = []
  with open(labels, 'r') as f:
  for l in f.readlines():
  classes.append(l.strip())
  return classes, nn
def yolo_detect(nn, image_path):
  img = cv2.imread(image_path)
  blob = cv2.dnn.blobFromImage(img, 1/255, (416, 416), [0,0,0], 1, crop=False)
  nn.setInput(blob)
  layersN = nn.getLayerNames()
  names = [layersNames[i[0] - 1] for i in nn.getUnconnectedOutLayers()]
  print("target output layers: ", names)
  outs = nn.forward(names)
  return outs
def nms_filter(yolo_det, image):
  frame = cv2.imread(image)
  confidence = []
  boxes = []
  for dets in yolo_det:
  for d in dets:
  # each is a x,y,w,h,obj_conf,class1_conf,...
  scores = d[5:]
  confi = scores[np.argmax(scores)]
  if confi > conf_threshold:
  confidence.append(float(confi))
  center_x = int(d[0] * frame.shape[1])
  center_y = int(d[1] * frame.shape[0])
  width = int(d[2] * frame.shape[1])
   height = int(d[3] * frame.shape[0])
  left = int(center_x - width / 2)
  top = int(center_y - height / 2)
  boxes.append([left, top, width, height])
  else:
   pass
  #print("ignore det-box, max confidence is too low.")
  print("confidence, ", confidence)
  print("res_d, ", boxes)
  indices = cv2.dnn.NMSBoxes(boxes, confidence, conf_threshold, nms_threshold)
  res = []
  for i in indices:
  idx = i[0]
  confi = confidence[idx]
  bb = boxes[idx]
  res.append([idx, confi, bb])
  return res
def visual_detection(yolo_res, image):
  frame = cv2.imread(image)
  frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
  for dets in yolo_res:
  for d in dets:
  scores = d[5:]
  confi = scores[np.argmax(scores)]
   if confi > conf_threshold:
  center_x = int(d[0] * frame.shape[1])
  center_y = int(d[1] * frame.shape[0])
  width = int(d[2] * frame.shape[1])
  height = int(d[3] * frame.shape[0])
  left = int(center_x - width / 2)
  top = int(center_y - height / 2)
  right = left + width
  down = top  + height
  cv2.rectangle(frame, (left, top), (right, down), (255,0,0), 2)
  print("after detect.")
  display(p_image.fromarray(frame))
def visual_detection_nms(res, image,classes):
  frame = cv2.imread(image)
  frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
  for d in res:
  idx = d[0]
  confi = d[1]
  box  = d[2]
  left = box[0]
  top = box[1]
  right = left + box[2]
  down = top  + box[3]
  cls = classes[idx]
  cv2.rectangle(frame, (left, top), (right, down), (255,0,0), 2)
  print("after detect.")
  display(p_image.fromarray(frame))
#1 init nn
classes,nn = init_nn()
print(names)
#print(nn.getLayerNames())
print("example png: ")
display(Image(filename=image))
#2 do detection
yolo_res = yolo_detect(nn, image)
#nms filter and box transform
detections = nms_filter(yolo_res, image)
# visualize
visual_detection_nms(detections, image,classes)

--技术创作101训练营--

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
AI Agent,为什么是AIGC最后的杀手锏?
AI Agent无疑是当下大模型最激动人心的发展主线,被称为“大模型下一场战事”“最后的杀手产品”“开启新工业革命时代的Agent-centric”。11月7日,OpenAI首届开发者大会(OpenAI DevDay)引爆了AI Agent。OpenAI发布了AI Agent初期形态产品GPTs,并推出了相应的制作工具GPT Builder。用户仅仅通过跟GPT Builder聊天,把想要的GPT功能描述一遍,就能生成专属GPT。专属GPT可以在日常生活、特定任务、工作或家庭中更为适用。为此,OpenAI还开放了大量的新API(包括视觉、图像DALL·E3、语音),以及新推出的Assistants API,让开发者可以更便捷地开发自己专属的GPT。比尔·盖茨最新发表一篇文章明确提出,5年内AI Agent将大行其道,每个用户都将拥有一个专属AI Agent。用户不需要再因为不同的功能需求而使用不同的APP,他只需用日常语言告诉他的Agent想做什么就可以。[1]
小腾资讯君
2023/11/29
2.4K0
AI Agent,为什么是AIGC最后的杀手锏?
[AI安全论文] (32)南洋理工大学刘杨教授——网络空间安全和AIGC整合之道学习笔记及强推(InForSec)
首先祝大家五一节快乐!《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期待与您前行,加油。
Eastmount
2024/05/08
1.2K0
[AI安全论文] (32)南洋理工大学刘杨教授——网络空间安全和AIGC整合之道学习笔记及强推(InForSec)
生成式 AI 的发展方向:Chat 还是 Agent?
随着生成式 AI 技术的不断进步,关于其未来发展方向的讨论也愈发激烈。究竟生成式 AI 的未来是在对话系统(Chat)中展现智慧,还是在自主代理(Agent)中体现能力?这一问题引发了广泛的讨论和探索。本文将从整体介绍、技术对比以及未来展望三个方面,探讨生成式 AI 的发展方向。
正在走向自律
2024/12/18
3460
生成式 AI 的发展方向:Chat 还是 Agent?
浅谈华为SDL软件安全工程能力
谈华为安全,缺一漏万,笔者认为其是在SDL领域国内最强的公司,其建设的难点也同互联网公司迥然不同,在于历史债务如何处理,如何做工程化,下面简单介绍下软件安全能力建设的部分。笔者希望华为可以更多分享一些安全设计的机制、内部的PSIRT运营、全球网络隐私合规、商业安全工具平台、对客户提供的安全解决方案等。以下内容均基于网络公开信息,笔者已脱敏处理:)
安全乐观主义
2020/07/24
2.4K0
浅谈华为SDL软件安全工程能力
[算法前沿]--061-生成式 AI 的发展方向,是 Chat 还是 Agent?
AI Agent是一种超越简单文本生成的人工智能系统。它使用大型语言模型(LLM)作为其核心计算引擎,使其能够进行对话、执行任务、推理并展现一定程度的自主性。简而言之,Agent是一个具有复杂推理能力、记忆和执行任务手段的系统。
AI拉呱
2024/02/09
7710
[算法前沿]--061-生成式 AI 的发展方向,是 Chat 还是 Agent?
数字孪生与网络空间靶场的结合是否已经成熟?
数字孪生(Digital Twin)是物理实体的数字化映像。它是从设计/仿真,延伸到产品全生命周期。建立数字孪生测试床可以在建立的实物测试床基础上,进行更多的破坏性信息安全研究试验,能够基于此挖掘出更多的未知漏洞。数字孪生网络空间靶场可用于指导、测试和评估网络空间靶场的风险评估、漏洞分析、漏洞挖掘等功能。数字孪生靶场将最前沿的技术应用于信息安全领域,服务于信息安全的测试研究,相比较而言,数字孪生比虚拟仿真更加接近真实的实物系统,由于其是实物的1:1映射,因此基于数字孪生技术的网络空间靶场可实现实物测试无法比拟的反复测试、安全检测等优势。
时间之外沉浮事
2019/12/18
3.6K0
数字孪生与网络空间靶场的结合是否已经成熟?
腾讯云 AI 代码助手:AI Agent 构建企业新一代研发范式
本文将探讨腾讯云 AI 代码助手在聚焦产品开发领域的同时基于扩展性能力集成接入用户业务需要 AI Agent 智能体应用完成 SDLC 全过程的衔接完成新一代研发范式落地的解决方案。
腾讯云代码助手 CodeBuddy
2024/12/06
5300
AI Agent,为什么是AIGC最后的杀手锏?
AI Agent无疑是当下大模型最激动人心的发展主线,被称为“大模型下一场战事”“最后的杀手产品”“开启新工业革命时代的Agent-centric”。11月7日,OpenAI首届开发者大会(OpenAI DevDay)引爆了AI Agent。OpenAI发布了AI Agent初期形态产品GPTs,并推出了相应的制作工具GPT Builder。用户仅仅通过跟GPT Builder聊天,把想要的GPT功能描述一遍,就能生成专属GPT。专属GPT可以在日常生活、特定任务、工作或家庭中更为适用。为此,OpenAI还开放了大量的新API(包括视觉、图像DALL·E3、语音),以及新推出的Assistants API,让开发者可以更便捷地开发自己专属的GPT。比尔·盖茨最新发表一篇文章明确提出,5年内AI Agent将大行其道,每个用户都将拥有一个专属AI Agent。用户不需要再因为不同的功能需求而使用不同的APP,他只需用日常语言告诉他的Agent想做什么就可以。[1]
腾讯研究院
2023/12/07
1.8K0
AI Agent,为什么是AIGC最后的杀手锏?
AI+安全,是机遇亦是挑战 | FIT 2019议题前瞻「前沿安全神盾局」
从“互联网+”到“AI+”,信息化时代向新的阶段进化。2018年,人工智能的发展逐渐落到实处,少了许多浮夸和空谈。网络安全战略意义的升级,“网络安全+AI”已经成为了必然的趋势。
FB客服
2018/12/19
8340
AI+安全,是机遇亦是挑战 | FIT 2019议题前瞻「前沿安全神盾局」
大模型未来发展方向大揭秘,你绝对想不到!
导读:在数字化时代,大模型已经成为技术和商业领域的焦点。这些模型在处理和生成文本方面表现出色,为市场营销人员、广告商和创业者等群体提供了强大的工具。随着需求增长、技术的进步,AI将朝着一个更加个性化、多功能、多模态的未来迈进。本文将围绕个性化、多功能以及多模态这三大发展方向进行解读,列举大模型的现状与挑战,分析改进与发展趋势,并畅想未来应用场景,以提供一种前瞻性视角,对大模型的应用部署及优化提供一些参考。
空白诗
2024/11/18
2750
生成式AI之下,软件供应链安全的升级迫在眉睫
随着生成式AI和大语言模型技术的快速发展和广泛应用,尤其是在软件供应链安全领域,AI与软件供应链的深度融合催生了新的安全课题。
软件供应链安全工具推荐
2025/02/21
1350
生成式AI之下,软件供应链安全的升级迫在眉睫
AI猎手:我们用大模型挖到了0day漏洞!【大模型应用实践系列三】
我本是一名普通的小白帽,有一天上班路上,遇到了位神秘老者,他拦住我,问道:小伙子,你是做什么的?
腾讯安全应急响应中心
2025/01/02
5200
AI猎手:我们用大模型挖到了0day漏洞!【大模型应用实践系列三】
2021腾讯犀牛鸟精英科研人才培养计划课题(五)——机器学习及其相关应用研究
12月11日,2021年腾讯犀牛鸟精英科研人才培养计划正式对外发布。计划截止申报时间为2021年1月28日24:00。 本年度精英科研人才计划将延续人工智能领域顶尖科研人才培养,发布包含机器人、AI医疗、量子计算、智慧城市等12个前沿热议方向,71项研究课题。入选学生将由校企导师联合制定专属培养计划,并获得3个月以上到访腾讯开展科研访问的机会,基于真实产业问题及海量数据,验证学术理论、加速成果应用转化、开阔研究视野。同时项目组将为学生搭建线上和线下学习、交流平台,帮助学生挖掘更多潜能。 本期小编整理了该计
腾讯高校合作
2020/12/22
8320
车联网安全技术现状、突破及趋势
据公安部2024年1月11日统计,截至2023年底,全国机动车保有量达4.35亿辆,其中汽车3.36亿辆;机动车驾驶人达5.23亿人,其中汽车驾驶人4.86亿人。伴随汽车的逐步普及,车联网在十年内经历了巨大的技术变革,汽车智能网联功能已成为当前新车标配,百姓对汽车功能的需求越来越多元化,提供座舱娱乐、自动驾驶等功能的新型汽车部件日趋成熟,多种汽车电子电气架构随之涌现。
绿盟科技研究通讯
2024/07/12
6400
车联网安全技术现状、突破及趋势
校招实习JD-安全工程师
蚂蚁集团网商银行是中国首批互联网银行,中国第一家将核心系统架构在金融云上的银行,服务超过2900万小微经营者,其中70%经营者过去从未获得银行贷款。网商银行从事数字金融行业,是对安全极为重视的技术公司,因此对于安全类人才的招聘、培养、发展也极其重视。
蚂蚁安全柳星
2022/10/31
6780
这一仗,互联网大厂和他们打了18年
看看这段澳洲课堂上老师播放的特朗普和蓬莱奥合唱《我爱你中国》的视频就知道,技术就是工具,它可以造假,也可能「失控」。
新智元
2023/01/07
5910
这一仗,互联网大厂和他们打了18年
一文搞懂:RAG、Agent与多模态的行业实践与未来趋势
大模型作为产业变革的核心引擎。通过RAG、Agent与多模态技术正在重塑AI与现实的交互边界。三者协同演进,不仅攻克了数据时效性、专业适配等核心挑战,更推动行业从效率革新迈向业务重构。本文将解析技术演进脉络、实战经验与未来图景,为读者提供前沿趋势的全局视角与产业升级的实践指引。
腾讯云开发者
2025/04/26
5240
一文搞懂:RAG、Agent与多模态的行业实践与未来趋势
AI 技术发展趋势
基于深度学习的人工智能方法在许多场景取得了重要突破,但仍然存在模型可解释性差、对抗样本鲁棒性差、数据与算力需求大、理论基础薄弱等问题。未来,人工智能需要突破的主要领域有:可解释人工智能和鲁棒人工智能理论与方法、通用人工智能理论与方法、安全、可靠、可信及可扩展的人工智能技术、类脑智能等。从感知智能走向认知智能是人工智能技术发展的趋势。
天涯学馆
2024/05/21
2910
AI 技术发展趋势
腾讯混元大模型在研发安全漏洞修复的实践
利用传统方法做漏洞修复提效,只适用于比较简单的场景,比如根据版本号判断使用的开源组件是否存在漏洞,更多高危险的如导致数据泄露的注入类漏洞/账密类等,该方案难以通用。主要原因总结如下:
腾讯技术工程官方号
2024/03/06
1.8K0
腾讯混元大模型在研发安全漏洞修复的实践
我“AI”发文——AI发展现状与未来趋势分析
人工智能(AI)作为当前科技发展的核心领域,正以前所未有的速度影响着各行各业。从自然语言处理(NLP)、计算机视觉(CV),到自动驾驶、智能制造,AI的发展正逐步走向更高的智能化阶段。本文将详细分析AI的现状,并探讨其未来的发展趋势。
LucianaiB
2025/03/23
6020
推荐阅读
相关推荐
AI Agent,为什么是AIGC最后的杀手锏?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验