Datawhale AI夏令营

devtools/2024/9/24 9:18:41/

一、分析CV识别任务

  • 任务分析
    自己研究生期间做过的大多是无监督任务,监督任务做的很少。比如,之前用过yolov5做过滑动验证码的识别,给滑动验证码的缺口打标签是项耗时费力的工作。本次任务相同,是给非机动车、机动车打标签。
    frame_id:不同帧
    event_id:一帧里面出现的不同车辆id
    bbox:车辆位置
  • 模型输入输出猜测
    1)如果识别车辆很容易,那么输入原始音频x,标出每帧的位置作为输出,记为y。放进Model训练即可,表示为:y=model(x)
    2)那如果要对识别的内容进行分类,怎么办?
    输出相应标签内容,即event_id。

二、预处理分析

  • 读取视频
cap = cv2.VideoCapture(video_path) # 获取cap对象
while True:# 读取下一帧ret, frame = cap.read()   # frame(高,寛,通道数)if not ret:breakbreak   
cap.get(cv2.CAP_PROP_FRAME_COUNT) # 获取视频帧总数
  • 框图表示
    值得注意的是,由于是矩形,所以只需要两点就可以确定一个框图。
bbox = [746, 494, 988, 786]pt1 = (bbox[0], bbox[1]) # 左上角
pt2 = (bbox[2], bbox[3])  #右下角color = (0, 255, 0)  # 蓝、绿、红
thickness = 2  # 线条粗细cv2.rectangle(frame, pt1, pt2, color, thickness)  # 框图frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 将BGR转换为RGB
plt.imshow(frame)

三、训练处理

  • 模型数据
    前面提到,输入原始视频,输出检测框图。那么怎么让模型去学习呢?这里已经给了打标签的每一帧数据,所以只需要获取每一帧音频帧,让其和标签对应起来即可。剩下的交给模型处理。所以最后得到的数据形式应该是图片+txt(标签)
    Tips:这里要注意的是,保持代码的鲁棒性,限制要加上。下面是示例:
for anno_path, video_path in zip(train_annos[-3:], train_videos[-3:]):print(video_path)anno_df = pd.read_json(anno_path)cap = cv2.VideoCapture(video_path)frame_idx = 0 while True:ret, frame = cap.read()if not ret:breakimg_height, img_width = frame.shape[:2]frame_anno = anno_df[anno_df['frame_id'] == frame_idx]cv2.imwrite('./yolo-dataset/val/' + anno_path.split('/')[-1][:-5] + '_' + str(frame_idx) + '.jpg', frame)if len(frame_anno) != 0:with open('./yolo-dataset/val/' + anno_path.split('/')[-1][:-5] + '_' + str(frame_idx) + '.txt', 'w') as up:for category, bbox in zip(frame_anno['category'].values, frame_anno['bbox'].values):category_idx = category_labels.index(category)x_min, y_min, x_max, y_max = bboxx_center = (x_min + x_max) / 2 / img_widthy_center = (y_min + y_max) / 2 / img_heightwidth = (x_max - x_min) / img_widthheight = (y_max - y_min) / img_heightup.write(f'{category_idx} {x_center} {y_center} {width} {height}\n')frame_idx += 1
  • 模型训练
    复杂的数据处理完成,便是训练。【个人觉得,深度学习难的是针对问题如何设计模型架构,像数据处理、调参、训练这种,靠的是经验积累。当然,好的Coding确实能提高效率】
model = YOLO("yolov8n.pt")
results = model.train(data="yolo-dataset/yolo.yaml", epochs=2, imgsz=1080, batch=16)
  • 模型测试
    针对给出的数据集进行测试,规范一下输出的格式,将检测结果保存。
from ultralytics import YOLO
model = YOLO("runs/detect/train/weights/best.pt")
import globfor path in glob.glob('测试集/*.mp4'):submit_json = []results = model(path, conf=0.05, imgsz=1080,  verbose=False)for idx, result in enumerate(results):boxes = result.boxes  # Boxes object for bounding box outputsmasks = result.masks  # Masks object for segmentation masks outputskeypoints = result.keypoints  # Keypoints object for pose outputsprobs = result.probs  # Probs object for classification outputsobb = result.obb  # Oriented boxes object for OBB outputsif len(boxes.cls) == 0:continuexywh = boxes.xyxy.data.cpu().numpy().round()cls = boxes.cls.data.cpu().numpy().round()conf = boxes.conf.data.cpu().numpy()for i, (ci, xy, confi) in enumerate(zip(cls, xywh, conf)):submit_json.append({'frame_id': idx,'event_id': i+1,'category': category_labels[int(ci)],'bbox': list([int(x) for x in xy]),"confidence": float(confi)})with open('./result/' + path.split('/')[-1][:-4] + '.json', 'w', encoding='utf-8') as up:json.dump(submit_json, up, indent=4, ensure_ascii=False)

四、Linux命令

  • unar命令
    之前一直用unzip,第一次接触到unar。相比于unzip,unar 是一个更现代的解压缩工具,它不仅支持 .zip 格式,还能够处理 .rar、.7z 等多种压缩格式。unar 的一个显著特点是能够自动识别和处理文件编码问题,减少解压时出现的乱码情况。
  • 处理Json操作
    • 加载Json:json.load(open(…)),这个load必须加载的是文件对象,所以用open。[Tips:不要加载路径]
    • 可视化Json:pd.read_json(),返回的是DataFrame对象。
  • 创建文件夹
    平时都直接用mkdir,学习到了一种更好的指令。
!mkdir -p ~/.config/Ultralytics/  # 创建它以及任何必要的父目录
-p:这个选项告诉 mkdir 命令,如果目录的上级目录不存在,应该一并创建它们。
~ 符号:代表当前用户的主目录
  • 压缩
zip -r result.zip result/ #  创建一个名为 result.zip 的压缩文件,其中包含 result/ 目录下的所有内容和子目录。

http://www.ppmy.cn/devtools/99727.html

相关文章

【非常简单】 猿人学web第一届 第13题 入门级 cookie

查看数据接口 https://match.yuanrenxue.cn/api/match/13 请求参数只携带了 page 页码 请求时需要携带 cookie yuanrenxue_cookie字段 在请求的时将 cookie 中对应的 yuanrenxue_cookie 字段删除 勾选事件监听断点中的脚本断点后刷新页面即可看到 cookie 生成的位置 这段…

BLE mesh model 汇总

Ble Mesh Model Summary mesh model简介 Bluetooth Mesh 模型(Mesh Model)是 Bluetooth Mesh 网络中的一种抽象概念,用于定义设备的行为、功能和交互方式。在 Bluetooth Mesh 网络中,模型是节点(Node)上的…

密码学之哈希算法

文章目录 1. 哈希函数概述1.1 哈希函数的定义1.2 哈希函数的重要性 2. SHA系列算法简介2.1 SHA系列的发展历史2.2 SHA系列的应用场景 3. 主要SHA算法详解3.1 MD5算法3.2 SHA-1算法3.3 SHA-2算法家族3.4 SHA-3算法 4. SHA算法的安全性分析4.1 安全性的重要性4.2 已知的攻击方法4…

对equals()和hashCode()的理解?

equals() 和 hashCode() 是 Java 中用于对象比较和存储的两个重要方法。在使用集合(如 HashMap, HashSet, Hashtable 等)时,这两个方法尤其重要。让我们逐一了解这两个方法的概念和它们之间的关系。 1. equals() 方法 定义:equal…

贪心算法-分数背包问题

贪心算法与分数背包问题详解 目录 贪心算法与分数背包问题详解贪心算法简介分数背包问题问题分析算法步骤流程图代码实现(C)总结 C学习资源 贪心算法简介 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果…

web 3D可视化技术

一.介绍 web 3D可视化技术的发展与应用展开,学习web 3D技术,包括利用js库进行项目搭建,学习图形学知识,掌握web 3D基础概念如点、线、面等,以及深入探讨渲染技术如PBR,材质贴图和环境光等。内容还涉及了与…

Compose(7)交互和动画

在 Jetpack Compose 中,交互和动画是提升用户体验的重要手段。 一、交互 1.点击事件 使用 Button 组件时,可以通过 onClick 参数来处理点击事件。 例如: Composablefun ClickableButton() {Button(onClick {// 处理点击事件的逻辑}) {Te…

国际校企合作|深信服、常州信息职业技术学院、马来西亚汽车工业大学三方国际化人才培养合作签约仪式圆满成功

2024年8月19日,深信服科技股份有限公司与常州信息职业技术学院、马来西亚汽车工业大学正式签署了具有里程碑意义的国际校企合作协议。此次签约不仅是“教随产出、校企同行”理念的一次成功实践,更是中马两国友谊与合作的象征。 常州信息职业技术学院党委…