H264和H265的CRF
简单说CRF类似JPG中的quality,根据设置的值自动控制质量和压缩率,根据视频内容自动生成每秒码率。
在优先保证画面质量(也不太在乎转码时间)的情况下,使用-crf参数来控制转码是比较适宜的。这个参数的取值范围为051,其中0为无损模式,数值越大,画质越差,生成的文件却越小。从主观上讲,1828是一个合理的范围。18被认为是视觉无损的(从技术角度上看当然还是有损的),它的输出视频质量和输入视频相当。
ffmpeg -i D:\src.mov -c:v libx264 -preset veryslow -crf 18 -c:a copy D:\dest1.mp4
意思是:将D盘的源文件src.mov,以“非常慢”的速度重新编码成H.264格式,保存为D:\dest1.mp4。其中,-preset指定的编码速度越慢,获得的压缩效率就越高。而-c:a copy又是什么意思呢?因为音频的码率一般都比较小,我们就不折腾它了,况且解码后重新编码也会损害音质,于是,就将音频数据从源文件中以原有编码格式直接拷入目标文件吧。
有个小疑问:既然不在乎等待时间,为什么不给-p ...
图像标注工具
labelme 地址:https://github.com/wkentaro/labelme
labelme 是一个基于 python 的开源图像多边形标注工具,可用于手动标注图像以进行对象检测、分割和分类。它是在线 LabelMe 的离线分支,最近关闭了新用户注册选项。所以,在这篇文章中,我们只考虑 labelme(小写)。
该工具是具有直观用户界面的轻量级图形应用程序。使用 labelme,您可以创建:多边形、矩形、圆、线、点或线带。通常,能够以众所周知的格式(例如 COCO、YOLO 或 PASCAL VOL)导出注释以供后续使用通常很方便。但是,在 labelme 中,标签只能直接从应用程序保存为 JSON 文件。如果要使用其他格式,可以使用 labelme 存储库中的 Python 脚本将注释转换为 PASCAL VOL。尽管如此,它还是一个相当可靠的应用程序,具有用于手动图像标记和广泛的计算机视觉任务的简单功能。
labelImg 地址:https://github.com/tzutalin/labelImg
labelImg 是一种广泛使用的开源 ...
神经网络训练失败的原因
在面对模型不收敛的时候,首先要保证训练的次数够多。在训练过程中,loss并不是一直在下降,准确率一直在提升的,会有一些震荡存在。只要总体趋势是在收敛就行。若训练次数够多(一般上千次,上万次,或者几十个epoch)没收敛,再考虑采取措施解决。
数据与标签方面
没有对数据进行预处理。数据分类标注是否准确?数据是否干净?
没有对数据进行归一化。由于不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。此外,大部分神经网络流程都假设输入输出是在0附近的分布,从权值初始化到激活函数、从训练到训练网络的优化算法。将数据减去均值并除去方差。
样本的信息量太大导致网络不足以fit住整个样本空间。样本少只可能带来过拟合的问题,你看下你的training set上的loss收敛了吗?如果只是validate set上不收敛那就说明overfitting了,这时候就要考虑各种anti-overfit的trick了,比如dropo ...
深度学习如何训练优秀模型
深度学习在近年来得到了广泛的应用,从图像识别、语音识别到自然语言处理等领域都有了卓越的表现。但是,要训练出一个高效准确的深度学习模型并不容易。不仅需要有高质量的数据、合适的模型和足够的计算资源,还需要根据任务和数据的特点进行合理的超参数调整、数据增强和模型微调。
数据 从数据层面上, 能够影响模型性能的有二个因素:
数据集的质量
数据增强
数据集质量 数据质量:数据应该是准确,完整,无误,且具有代表性。如果数据集有错误或缺失,将会影响模型的性能,选择分辨率越高肯定对模型是越好的,但是也要考虑到模型训练占用的内存够不够,因为分辨率越高,数据量就越大
数据量:更多的数据通常可以提高模型的性能,因为它使得模型更具有代表性和泛化能力。但是,数据集的大小也会影响训练时间和资源要求。但对模型训练收敛来说,数据量大小对于模型收敛没有决定性的影响,只能说数据量越大,同时数据多样性分布性很好,模型是一定会泛化
数据多样性:为了获得更好的泛化能力,数据集应该具有多样性。这意味着应该包含不同的样本,以便模型可以学习到数据中的各种模式。对于样本多样性来说,每一个类别的样本数量应该 ...
AI算力芯片基础知识
AI芯片是智能计算的核心基础设施,对于大模型和其他人工智能技术的发展起着至关重要的作用。
AI计算是一种计算机器学习算法的数学密集型流程,通过加速系统和软件,从大量数据集中提取新的见解并在此过程中学习新能力。
AI计算的三个主要过程包括:
提取/转换/加载数据(ETL):数据科学家需要整理和准备数据集。
选择或设计AI模型:数据科学家选择或设计最适合其应用的AI模型,一些公司会从一开始就设计并训练自己的模型,另一些公司可能采用预训练模型并根据需求进行自定义。
AI推理:企业通过模型对数据进行筛选,AI在此过程中提供可行的洞察与见解。
算力及AI算力主要芯片的分类 算力通常是指计算机处理信息的能力,特别是在进行数学运算、数据处理和执行程序时的速度和效率。根据使用设备和提供算力强度的不同,算力可分为:基础算力、智能算力、超算算力。智能算力即AI算力,是面向AI应用,提供AI算法模型训练与模型运行服务的计算机系统能力,其算力芯片通常包括GPU、ASIC、FPGA、NPU等各类专用芯片。
基础算力:由基于CPU芯片的服务器所提供的算力,主要用于基础 ...
视频转码的实时转码和离线转码区别
由于视频的编码格式,封装协议非常多,在视频播放的过程中,会有很多编码不兼容的问题。这种情况下就需要对视频进行转码。
视频转码分为离线转码和实时转码,它们的工作方式和具体的业务要求是完全不同的,其应用的场景也是完全不一样的。所以我们在项目中,如果需要对视频进行转码,需要搞清楚具体的视频转码是要应用在哪种场景下,需要解决什么问题。
离线转码 离线转码的应用非常广泛,我们日常在视频网站追剧,都需要对视频进行转码。还有我们都有这样的经历,从网上下载了一个视频文件,结果无法播放,这都需要对视频进行转码后,让原来的视频适合现有的播放器。
离线转码一般针对视频文件,也就是说我们有一个视频文件比如,MP4,MKV,AVI,FLV,MOV,WEBM,WMV使用不同的封装协议,不同的分辨率和编码格式。如果遇到不兼容的问题,就需要对这些文件进行转码。
这种转码对实时性要求不高,比如我们上传到视频直播平台一个视频文件,其未来适应观看用户的不同分辨率设备,不同格式播放器,会提前将文件转码为几个不同的文件,方便用户播放时快速的适配,这种转码无需很高的实时性,什么时候转换完成,什么时候 ...
GAN网络训练技巧
当判别网络能力过强,传递给生成网络的“提示”信息太少,导致训练网络梯度消失,无法学习;
当判别网络能力太差,颠倒是否,训练网络无法稳定学习,还会扬长避短,“钻空”判别网络弱点,丢失生成样本的多样性(模型崩溃);
判别器因监督学习而提升,生成器因判别器而提升,同时两者都不能把对方放倒,一旦完全放倒对方,自己就独孤求败了,无法再次提升技能。
从原理上来说,生成器和判别器从一开始都是非常弱的,因此一般不会在训练一开始两者损失就非常剧烈的波动。在训练一段时间达到稳定期后,生成器和判别器的损失都应该在一个小区间内波动,而不会有明显的持续上升/下降趋势。 如果生成器损失持续明显上升,表明其无法学习怎么欺骗判别器,体现在结果上就是开始生成噪声。 如果判别器损失持续明显上升,表示其无法学习怎么识别生成器,体现在结果上就是生成器可能会生成一致的,无意义的但是能欺骗判别器的图像(比如直接输出训练集中的样本)。 因此正确的训练曲线一般是生成器和判别器一开始不怎么波动,然后损失下降,最后稳定。
提高训练稳定性和成功率的trick:
生成器预训练;
软标签和带噪声的 ...
Pytorch的Variable
pytorch两个基本对象:Tensor(张量)和Variable(变量)
其中,tensor不能反向传播,variable可以反向传播。
tensor的算术运算和选取操作与numpy一样,与numpy相似的运算操作都可以迁移过来。
Variable variable是一种可以不断变化的变量,符合反向传播,参数更新的属性。pytorch的variable是一个存放会变化值的地理位置,里面的值会不停变化,像装糖果(糖果就是数据,即tensor)的盒子,糖果的数量不断变化。
在PyTorch中计算图的特点总结如下:autograd根据用户对Variable的操作来构建其计算图。
variable默认是不需要被求导的,即requires_grad属性默认为False,如果某一个节点的requires_grad为True,那么所有依赖它的节点requires_grad都为True。
variable的volatile属性默认为False,如果某一个variable的volatile属性被设为True,那么所有依赖它的节点volatile属性都为True。vola ...
音视频编解码常用知识
视频播放器原理 视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步。他们的过程如下:
解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。
解封装的作用,就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。
解码的作用,就是将视频/ ...
tmux
Tmux 是 Terminal Multiplexer 的简称,它是一款优秀的终端复用软件,类似 GNU screen,但比screen更出色。tmux来自于OpenBSD,采用BSD授权。
Tmux 可用于在一个终端窗口中运行多个终端会话。不仅如此,还可以通过 Tmux 使终端会话运行于后台或是按需接入、断开会话,这个功能非常实用。
Tmux安装sudo apt-get install tmux # ubuntuyum install -y tmux # centostmux -V # 查看版本
基本配置,打开配置文件 ~/.tmux.conf,添加配置:
set -g mouse on # 用鼠标自由调整窗格大小,还可以通过右键实现一些基本操作。set -g default-terminal "screen-256color" 设置默认终端模式为256co1or。set -g history-limit 20000 # 设置回滚缓冲区大小为20000行
Tmux的使用 安装完成后输入命令tmux即可打开软件 ...