前两篇已经用10行Python代码展现了Hello AI World强大而且简便的物件检测识别能力,虽然大部分的人都将目光集中在了深度学习的三大推理识别(图像分类、物件检测、语义分割),但是在整个项目中,其实还有两个非常重要的功臣功能,那就是videoSource()与videoOutput()这两个专司输入与输出的接口。
如果你认为这两个功能只是简单地负责数据接收与显示的话,这就大大浪费了项目作者的心血结晶,因此我们在进入本项目另外两个深度学习推理应用之前,先要把这两个幕后功臣的内涵展现出来,因为这与后面的应用息息相关。
本文先就videoSource()这个功能进行说明。
有经验的开发人员都清楚,输入源的种类十分多样,并且格式非常繁琐,其中还包括图像的颜色空间(color space)变化,要全部集成在一个函数中去调用,已经是非常高难度的事情了,如果这个函数还能为我们集成Jetson的编解码芯片的调用,以及将许多非常图像处理的计算交由CUDA核去计算,这就是一个值得我们为之欢呼的功能了。
videoSource()功能是项目作者一个集大成的作品,具备以下特点:
这样一列出来,是否已经感受到了这一功能的强大呢?由于集成这么多特点,可以使代码的调用变得异常简单,而且完全发挥Jetson Nano 2GB的硬件计算资源,兼具“易用”与“高效”两个极端的特色。接下来我们就用几个简单的代码,带着大家体验一下这个工具的用法。
现在请大家先回忆一下用openCV建立CSI摄像头对象的代码,如下:
1 |
cameraCsi = cv2.VideoCapture( "nvarguscamerasrc sensor-id=0 ! " "video/x-raw(memory:NVMM), width=(int)1280, height=(int)720, " "format=(string)NV12, framerate=(fraction)60/1 ! " "nvvidconv flip-method=0 ! " "video/x-raw, width=(int)1280, height=(int)720, format=(string)BGRx ! " "videoconvert ! video/x-raw, format=(string)BGR ! appsink" ) |
这种调用是非常艰涩而且容易出错的,对大部分初学者来说的确比较痛苦,导致很多人一开始都不愿意使用性能较好、功耗较低的CSI摄像头。但是在videoSource()这里,只需要简单填入 ”csi://0” 就能创建。
在前面“10lines.py”代码中,已经提供了CSI摄像头、USB摄像头,以及视频文件的调用方式,事实上类似的方法也适用于RTP/RTSP视频流以及图像文件作为输入源。
然而这里面增加一个对“文件夹”的支持,更是一个非常实用的功能,不过在“图像分类”、”物件识别“与“语义分割”的应用中,都有很大部分的使用场景是针对“众多独立图像”的推理,如果每次都只能一张一张的读入然后识别,就会显得十分没效率。
下面将“10lines.py”做简单的修改,以jetson-inferencet提供的图像文件为例,让大家体验一下这个功能的好处:
import jetson.utils input = jetson.utils.videoSource("source") output = jetson.utils.videoOutput("detection")
import jetson.inference net = jetson.inference.detectNet("ssd-mobilenet-v2", threshold=0.5)
while output.IsStreaming(): img = input.Capture() detections = net.Detect(img) output.Render(img) |
上面代码中,将输入源与输出标的设为两个不同的目录,执行之前先将这个代码复制到~/jetson-inference/data/images/去,并且为source目录添加一些图片。完整的执行指令如下:
1 2 3 4 5 |
|
这样就会开始从source目录读入图像文件,执行物件识别推理后,将结果输出到detection目录中(如下图)。
这里之所以不选择输出到显示器,是因为显示的过程太快,没法在显示器上暂留,所以输出到另一个目录存成图片,会是比较合适的方法。
执行完成后,进入detection目录中,可以浏览到如下图的输出结果。
最后还有一个重点,就是调用NVDEC硬解码器的时机,前面提到videoSourec()会自动根据输入源的类型,去调用合适的解码器,不过这部分细节在作者的使用文档中并没有讲解,只能靠不断地尝试。
要检查解码器的启动与否,我们可以使用一开始教大家的jetson-stats检测工具,打开之后关注左下角“NVDEC”的变化,大部分时候都是处于[OFF],但当我们的输入源是视频文件、RTP/RTSP这三种类型时,“NVDEC”后面会出现主频的变化(如下图),表示这时候已经被启动。
本文有条理地将videoSource()的重要特色进行了说明,就是为了后面执行其他推理识别应用时会使用到,也希望能让读者学会更多的用法。
好文章,需要你的鼓励
zip2zip是一项创新技术,通过引入动态自适应词汇表,让大语言模型在推理时能够自动组合常用词组,显著提高处理效率。由EPFL等机构研究团队开发的这一方法,基于LZW压缩算法,允许模型即时创建和使用"超级tokens",将输入和输出序列长度减少20-60%,大幅提升推理速度。实验表明,现有模型只需10个GPU小时的微调即可适配此框架,在保持基本性能的同时显著降低计算成本和响应时间,特别适用于专业领域和多语言场景。
这项研究创新性地利用大语言模型(LLM)代替人类标注者,创建了PARADEHATE数据集,用于仇恨言论的无毒化转换。研究团队首先验证LLM在无毒化任务中表现可与人类媲美,随后构建了包含8000多对仇恨/非仇恨文本的平行数据集。评估显示,在PARADEHATE上微调的模型如BART在风格准确性、内容保留和流畅性方面表现优异,证明LLM生成的数据可作为人工标注的高效替代方案,为创建更安全、更具包容性的在线环境提供了新途径。
这项研究由中国科学技术大学的研究团队提出了Pro3D-Editor,一种新型3D编辑框架,通过"渐进式视角"范式解决了现有3D编辑方法中的视角不一致问题。传统方法要么随机选择视角迭代编辑,要么同时编辑多个固定视角,都忽视了不同编辑任务对应不同的"编辑显著性视角"。Pro3D-Editor包含三个核心模块:主视角采样器自动选择最适合编辑的视角,关键视角渲染器通过创新的MoVE-LoRA技术将编辑信息传递到其他视角,全视角精修器修复并优化最终3D模型。实验证明该方法在编辑质量和准确性方面显著优于现有技术。
这项研究提出了ComposeAnything,一个无需重新训练的框架,可显著提升AI图像生成模型处理复杂空间关系的能力。该技术由INRIA、巴黎高师和CNRS的研究团队开发,通过三个创新步骤工作:首先利用大型语言模型创建包含深度信息的2.5D语义布局,然后生成粗略的场景合成图作为先验指导,最后通过物体先验强化和空间控制去噪引导扩散过程。在T2I-CompBench和NSR-1K基准测试中,该方法远超现有技术,特别是在处理复杂空间关系和多物体场景时表现卓越,为AI辅助创意设计开辟新可能。