首页 > 其他分享 >11月智能汽车AI挑战赛——智能驾驶汽车虚拟仿真视频数据理解

11月智能汽车AI挑战赛——智能驾驶汽车虚拟仿真视频数据理解

时间:2023-11-14 21:01:25浏览次数:32  
标签:11 clip AI unknown image 智能 json video import

赛题理解:

赛题任务:

  • 输入:元宇宙仿真平台生成的前视摄像头虚拟视频数据(8-10秒左右);
  • 输出:对视频中的信息进行综合理解,以指定的json文件格式,按照数据说明中的关键词(key)填充描述型的文本信息(value,中文/英文均可以);

赛题只提供了测试集,所以我们要通过预训练模型预测,或者直接使用外部数据训练后进行预测

要解题,先对视频进行抽帧,接下来就要将图像与文本进行匹配

导入所需第三方库
import paddle
from PIL import Image
from clip import tokenize, load_model
import glob, json, os
import cv2
from PIL import Image
from tqdm import tqdm_notebook
import numpy as np
from sklearn.preprocessing import normalize
import matplotlib.pyplot as plt
导入预训练模型 匹配文本 提交格式
model, transforms = load_model('ViT_B_32', pretrained=True)

en_match_words = {
"scerario" : ["suburbs","city street","expressway","tunnel","parking-lot","gas or charging stations","unknown"],
"weather" : ["clear","cloudy","raining","foggy","snowy","unknown"],
"period" : ["daytime","dawn or dusk","night","unknown"],
"road_structure" : ["normal","crossroads","T-junction","ramp","lane merging","parking lot entrance","round about","unknown"],
"general_obstacle" : ["nothing","speed bumper","traffic cone","water horse","stone","manhole cover","nothing","unknown"],
"abnormal_condition" : ["uneven","oil or water stain","standing water","cracked","nothing","unknown"],
"ego_car_behavior" : ["slow down","go straight","turn right","turn left","stop","U-turn","speed up","lane change","others"],
"closest_participants_type" : ["passenger car","bus","truck","pedestrain","policeman","nothing","others","unknown"],
"closest_participants_behavior" : ["slow down","go straight","turn right","turn left","stop","U-turn","speed up","lane change","others"],
}

submit_json = {
    "author" : "abc" ,
    "time" : "231011",
    "model" : "model_name",
    "test_results" : []
}
导入视频,保存路径,并使用opencv库对视频进行抽帧,并把图片形状转化成适合模型的输入
paths = glob.glob('./初赛测试视频/*')
paths.sort()

for video_path in paths:
    print(video_path)
clip_id = video_path.split('/')[-1]
cap = cv2.VideoCapture(video_path)
img = cap.read()[1]
image = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
image = Image.fromarray(image)
image = transforms(image).unsqueeze(0)

single_video_result = {
    "clip_id": clip_id,
    "scerario" : "cityroad",
    "weather":"unknown",
    "period":"night",
    "road_structure":"ramp",
    "general_obstacle":"nothing",
    "abnormal_condition":"nothing",
    "ego_car_behavior":"turning right",
    "closest_participants_type":"passenger car",
    "closest_participants_behavior":"braking"
}
使用预训练模型进行分类,并存储到结果json中
for keyword in en_match_words.keys():
    if keyword not in ["weather", "road_structure"]:
        continue
        
    texts = np.array(en_match_words[keyword])

    with paddle.no_grad():
        logits_per_image, logits_per_text = model(image, tokenize(en_match_words[keyword]))
        probs = paddle.nn.functional.softmax(logits_per_image, axis=-1)

    probs = probs.numpy()        
    single_video_result[keyword] = texts[probs[0].argsort()[::-1][0]]
    
submit_json["test_results"].append(single_video_result)
with open('clip_result.json', 'w', encoding='utf-8') as up:
    json.dump(submit_json, up, ensure_ascii=False)

baseline中使用的模型为一种基于对比文本-图像对的预训练方法。CLIP用文本作为监督信号来训练可迁移的视觉模型,使得最终模型的zero-shot效果堪比ResNet50,泛化性非常好,预训练好的模型不需要进行训练与微调就可以实现特别好的效果

跑完baseline得分为93.00,暂未尝试进行提升

对于提分步骤在看完直播课后得到以下方式进行提升:

1.对于标签的选择还可以进行调整,选择适合从图片角度进行识别的标签;

2.clip的版本不同会对版本造成些许影响;

3.可以考虑使用多次抽帧,进行多次判断最后投票得出分类;

4.clip的prompt文本会对效果产生影响;

5.思考如何让clip回复unknown


标签:11,clip,AI,unknown,image,智能,json,video,import
From: https://blog.51cto.com/u_16196891/8378439

相关文章

  • Oracle启动数据库报ORA-01102解决办法
    1.机器启动之后登录服务器使用sqlplus/assysdba登录数据库发现数据库并没有启动之前把数据库服务添加过开机自启动![在这里插入图片描述](https://img-blog.csdnimg.cn/c25a5e40f3274621b708d974065bf650.png)2.使用startup命令启动数据库报错了SYS@orcl>startup;ORACLE例程已......
  • 【GJOI 2023.11.13 T2】 字符串匹配
    字符串匹配题意:给出两个字符串\(a,b\),求:\[\sum_{1\lel\ler\len}\sum_{l\lei\lej\ler}(a[l...r]回文)(a[i...j]==b)\times(r-l+1)mod2\]其中\(n,m\le10^6\)。解题思路首先,因为\(a[l..r]\)长度为奇数,它又要回文,所以它一定是要有一个回文中心的。那我......
  • 11月14日三元运算
    目录三元运算三元运算三元运算在js中是一种紧凑的条件语句,用于根据条件的真假来返回两个可能的值之一。一般语法条件?表达式1:表达式2;如果条件为真(true),则返回表达式1的值。如果条件为加(false),则返回表达式2的值。这里提供简单的例子代码varage=20;varjieguo......
  • 《满江红》为什么这样“红”?揭秘华为视频AiMax背后的硬核技术
    近日,华为视频AiMax影视品鉴会第一期在华为旗舰店·深圳万象天地举行。在现场,华为视频业务部部长及产品总监、《毒舌电影》主编“硬核卡子”和现场观众共同探讨了《满江红》为什么这样“红”,一同揭秘了AiMax影院级观影体验背后的技术内核。 据华为视频业务部部长介绍,华为视频Ai......
  • 文心一言 VS 讯飞星火 VS chatgpt (135)-- 算法导论11.3 1题
    一、用go语言,假设我们希望查找一个长度为n的链表,其中每一个元素都包含一个关键字k并具有散列值h(k)。每一个关键字都是长字符串。那么在表中查找具有给定关键字的元素时,如何利用各元素的散列值呢?文心一言:在Go语言中,你可以通过使用一个哈希表来存储关键字的散列值,并在查找具有给......
  • Tailwind CSS那些事儿
    ❝积土而为山,积水而为海。——《荀子·儒效》❞大家好,我是「柒八九」。前言在回望过去,展望未来-2024React生态一览表中讲到CSS时,我们提到过TailwindCSS,并且也说会有相关的文章。在文章中介绍到,TailwindCSS的受欢迎程度还是很高的。。不能说是遥遥领先,但是也是和另外的css解决......
  • 无涯教程-Dart - remainder函数
    在将两个数字相除后,它将返回截断的余数。remainder-语法Number.remainder(x)x-表示分隔线remainder-返回值返回除法的余数。remainder-示例voidmain(){vara=10;varb=17;print(a.remainder(2));print(b.remainder(2));}它将产......
  • 文心一言 VS 讯飞星火 VS chatgpt (135)-- 算法导论11.3 1题
    一、用go语言,假设我们希望查找一个长度为n的链表,其中每一个元素都包含一个关键字k并具有散列值h(k)。每一个关键字都是长字符串。那么在表中查找具有给定关键字的元素时,如何利用各元素的散列值呢?文心一言:在Go语言中,你可以通过使用一个哈希表来存储关键字的散列值,并在查找具有......
  • 每日总结11.14
    实验2熟悉常用的HDFS操作  1.实验目的(1)理解HDFS在Hadoop体系结构中的角色;(2)熟练使用HDFS操作常用的Shell命令;(3)熟悉HDFS操作常用的JavaAPI。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);(2)Hadoop版本:3.1.3;(3)JDK版本:1.8;(4)JavaIDE:Eclipse。3.实验步骤(一)编......
  • 每日总结11.14
    (二)编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。首先启动hdfs集群然后创建maven项目MyFSDataInputStream类:package......