ADAS-车用全景解决方案 - TID3X -4
Loading the player...
将在30s后自动为您播放下一课程
接下来的话我将 详细介绍一下 TDA3x 有关快速启动的一些特点 TDA3x 作为一个单片机 它可以做一个非常快速的启动 因为里面运行的全部都是RTOS 也就是TI提供的 SYS/BIOS 操作系统 在这颗芯片里面我们没有Linux 没有窗口管理 只有非常可靠非常稳定 运行速度非常快的一个实时操作系统 并且这个系统完全可以 向更高安全等级的系统中集成 从冷启动到3D显示 我们最高纪录可以达到1.8秒 也就说在上电1.8秒之后 全景拼接图像就已经能够往外输出 这一点八秒钟 我们还包含了摄像头的500毫秒的配置 如果说有的摄像头 可以更短的时间初始化 我们将会做到更快的速度 另一方面的话 为了适应车机对高安全性 和快速的 CAN 响应的一些需求 我们目前是可以做到 在80毫秒内做到 CAN 的一个冷启动 也就是说 TDA3 具有单片机级的 一个软件的简易程度和稳定程度 也有像处理器及的一个性能 提供了 DSP 和 EVE 非常强大的一个计算能力 这个是目前 TDA3 3D 全景的一个最大优势 下面的话将会详细介绍一下 TI 提供的针对 TDA 芯片家族的 一个统一的软件架构 这张图画出的是 TI RTOS 软件架构 也就是说所有核心上运行的 全部是 TI 的 RTOS 即使是包含 A15 的 TDA2 系列 也就是说在 TDA2 中 才会包含有A15核心 然后其他核心是 TDA2 和 TDA3 所共有的 在这张图中 所有的核心将会运行 SYS/BIOS 操作系统 在操作系统之上 我们又提供了非常丰富全面的驱动层 像核间通信 IPC 像网络的 NDK AVB 和其他的像 I2C 的一些驱动 以及包括图像编解码 还有图像视频处理的一些加速函数库 包括像目前学术界用的比较多的 open CV 和open CL一些软件框架 这些都是包含在我们整个系统框架内的 在此基础之上 我们提供了 VisionSDK 的框架 也就是说所有的算法 将会成为一个单独的个体 每一个个体称为一个 Link 每一个 Link 能够完成他自己 所需要做的一件事情 然后整个软件功能 将会由多个 Link 进行串联 形成一个数据流 从数据输入由数据驱动 按照节拍进行计算 最终到显示的输出 整个数据流的控制 可以在 M4 上 也可以在 A15 上 这是基于 RTOS 的一个软件架构 这张图是基于通用 Linux 软件架构 也就是说 VisionSDK 我们既支持 RTOS 的操作系统 也支持 Linux 操作系统 对于 Linux 操作系统 我们必须运行在 A15 上 因为 M4 目前是不支持 Linux 操作系统 也就是说这一页 PPT 是针对 TDA2x TDA2E 和 TDA2P 进行讲解的 我们在 A15 上将会运行 Linux 操作系统 在 Linux 之上 我们提供基于 Linux 的 IPC 驱动 基于 Linux 的硬件驱动 包括像 I2C 包括像 SPI 包括像摄像头的一些数据输入驱动 这些我们都是支持的 然后另一方面的话 其他核心像 M4 或 C66 DSP 或者 EVE 他们的软件架构 和 RTOS 的软件架构几乎一致 在这种架构情况下 所有的 Link 同样是完全相同的 只是在 Linux 情况下 Linux 的 Link 是运行在 Linux 用户台 整个芯片整个系统的功能 也就是也是在 Linux 上 进行一个创建控制 从这些整个统一架构可以看出 TDA2 TDA3 整个 TDA 芯片系列 他们的软件架构是可裁剪的 也就是说我有这个核心的时候 可以把这个核心带上 如果没有这个核心的时候 可以直接把它去掉 然后整个系统的控制 都是由某一个核心进行一个分发 然后整个系统运行过程中 是只有数据流进行一个驱动 这也是 VisionSDK 的一大特点 那么 VisionSDK 在哪里下载呢 如果你可以通过搜索引擎搜索的话 你可以搜尝试搜索 processorsdk vision processorsdk vision 是 VisionSDK 的一个全称 目前是开放下载的 可以直接从 TI 的官网 进行下载安装和编译 此外对于 VisionSDK 和整个芯片 我们 TI 将会提供一个全球团队 7×24 小时的一个技术支持 也就是我们 TI 最常用的一个论坛 叫做 E2E 在 E2E 论坛你可以通过 processors 和 automotive processors 寻找 DRA 系列和 TDA 系列 对于每一个系列 我们都可以提出与你们产品相关 或者说与软件硬件相关的一些问题 这些问题将会由我们国内国外 印度美国欧洲各个团队 进行全天候的支持 尽可能保证每一个问题 有人问就一定会有人答 那么有的人就会比较好奇 VisionSDK 为什么要用 VisionSDK 因为在多核异构的情况下 软件才是整个系统的 工作最复杂的部分 按照我们的经验 非常多的客户可能只用过像 只有 ARM A 系列处理器的芯片 通过堆叠 A 系列处理器的数量 来提高整个芯片的性能 而 TI 提出了一种异构多核的情况 每一个核心做它所对应的一件事情 这样的话能够充分发挥整个芯片 各个核心的高效的计算能力 而发挥异构多核的一个能力 所带来的问题就是 软件结构将会非常复杂 比如说你的数据有可能从DSP到A15 A15完之后再回到DSP 有可能再去到M4 或者说再去到 EVE 来来回回可能要来回折腾 这样的话对于软件内存 还有一些通讯结构 这些提出了非常高的要求 所以说 TI 针对异构多核的系统 从过去的DSP系统中 积累出一套比较完善的一套软件结构 目前我们将它称之为 VisionSDK 目前可以支持客户开发 非常多种的算法同时运行 目前我们接触到的客户 有开发十几个或者二十几个算法的 或者说上二三十个 link 同时存在于整个系统中 每一个处理器上的 link 数量 是没有限制的 只要说你的内存或者说是处理能力足够 软件上是没有限制的 另一方面的话 我们由于异构多核 所以说 EVE 它有一部分擅长的计算 DSP 也有他所擅长的计算 所以说我们可以将 绝大多数 EVE 最擅长的计算 分配到 EVE 上进行 计算完成之后我们再返回给 DSP 这样充分发挥不同的核心 不同的计算能力 这样也有利于车厂 或者 TIER1 将部分的核心交由供应商来深度开发 然后我们将目前这一套 LINK 和 usecase 的一套软件架构 称为 Links and Chains 也就是说每一个算法功能 我们称为一个 link 最后我们会将所有的 Link 连成一个 chain 一个数据流 来实现整个功能 此外 VisionSDK 还提供了 非常完备的像编译操作系统 核间通信 驱动 网络协议栈 编码器和一些算法加速器在内的 各种各样的软件 SDK 包 这些包如果说在传统的系统中开发 你可能要一个一个往系统中集成 但是 VisionSDK 已经 全部把他们都集成好了 VisionSDK 的目标是 让更多的客户能够快速的使用 DSP 或者说 EVE 算法加速函数 来快速的验证它们的原型样机 此外提供一个和平台无关 或者说和芯片型号无关的一个 API 也就说你相同 同样一个 Link 你可以在 TDA2 TDA3 TDA2P 以及 TDA 以后的 下一代产品中使用 另一方面的话 VisionSDK 目前 设计是非常高度优化的 我们将内存拷贝和内存申请释放 降低到最低程度 这样的话能够保证 即使你的系统中集成了30到50个算法 都不会由于框架的开销 或者说是每秒钟一千次的调用 带来非常复杂的问题 目前 VisionSDK 已经在 欧洲中国美国全世界各个车厂中 大量的车型都在量产 所以说 VisionSDK 的代码质量是可靠的 下面将具体讲解一下 就是有关 VisionSDK 的一些功能特点 比如说设计的一些 比较有优势的一些功能 首先是我们整个框架 提供了相当于一个中间件的一个功能 它能够帮助客户在不同核心上 运行相同的代码 或者说是快速的在某些核心上开发代码 而不需要从零开始学习这一科 这一个比如说像 EVE 的一个编程 完全摒弃了这一套传统的流程 我们只需要在这一套框架之上进行开发 比如说你的内存申请内存释放 你的一些上一级传来的数据 和你将会发出去的下一级数据 这些操作都会将统一的接口进行一个封装 而且即使你是非常复杂的算法 我们在提供的 Link 中 也会提供一些现有的一些 比如说像开关的一些 Link 可这些 Link 可以控制一些算法 在不需要运行的时候关闭掉 另一方面的话 我们目前由印度和美国团队 共同开发的 VisionSDK 具有非常高的软件质量 已经有非常多的车厂都在量产 并且在设计的时候 已经考虑到汽车中的一些要求 比如说像在运行过程中 我们是没有动态内存申请释放的 另一方面的话 我们也有非常多的一些 静态的代码分析 能够保证我们 deliver 或者 release 出去的 VisionSDK 是一个非常可靠的一个系统 这里需要强调一点 就是目前 VisionSDK 里面 提供了很多图像处理算法 这些算法可以供大家进行参考 但是并不供客户进行一个量产 嵌入式系统中最复杂的可能就是 内存管理和 DMA 的控制 这一部分是还有核间通信 这一部分也是 VisionSDK 提供的一个一大特点 首先我们所有的每一个核心 都会有一小块区域 用来存放它的数据段和代码段 然后剩下的一大块区域 将会由某一个核心进行一个统一管理 所有的核心凡是需要申请释放内存的时候 都需要经由这颗处理器来处理 这样的话所有的 buffer 都将被统一管理 然后核心与核心之间的数据传递 也不存在内存拷贝 只需要在核间进行一个指针的传递 由于整个系统在内存上 是一个共享的一个区域 所以说直接通过指针的传递 就可以实现一个非常高效的一个核间通信 另一方面的话 DMA 我们在 VisionSDK 里面 提供了非常灵活非常方便的一些 API 调用 避免了传统的配置结构体的方式 另一方面不仅是数据流 控制流也是一个系统最重要的一个环节 我们目前 VisionSDK 也可以用户增加他自己的一个控制流程 比如说发消息或者说是 其他一些自定义的一些功能 这些也是通过 VisionSDK 框架来实现 而不是说我需要调用到一个 非常非常底层的一个函数 这是不需要的 你只需要了解 VisionSDK Link 通信的一个函数接口即可 另一方面的话 我们的 VisionSDK 能够非常 快速的集成现有的一些算法 比如说我们将会提供在 DSP 上的 VLIB 像 EVE 上的 EVE SW 等等算法 以及第三方提供的一些图像处理函数库 这些函数可以 非常灵活地集成到 VisionSDK 中 直接通过函数调用的方式来实现 接下来的话由于不同的项目 可能有不同的需求 比如说有的项目是以太网系统 以太网进入到芯片中 有的系统是通过 LVDS 进入到系统中 这里我们提供了一个 非常灵活的一个接口 也就说 VisionSDK 对于 Link 之间的传递 是一个完全解耦和的一个状态 不管你是以太网进来 还是通过读文件 还是通过网络输入 还是通过 LVDS 进来 后面的算法可以完全不需要修改 只需要更换一个 Link 即可 比如说更换 Link 也只需要 将某一个 link 的编号 给修改掉就可以了 最后有关 VisionSDK 在这里不同的处理器 从现在的 TDA3 即使是 TDA3 中的最精简版本 到 TDA2x 或 TDA2P 他们最复杂的版本 只需要在一个配置文件中把它使能 就可以在不同平台间进行一个切换 另外对内存的一个修改 我们也是一个非常灵活的一个配置 可以通过修改某一个配置文件 可以快速的扩大 某一个核心的堆栈大小 或者说是扩大整个系统的内存布局 VisionSDK 目前也在不停的向前发展 在小版本之间 API 是不会发生变化的 在大版本之间可能会有比较大的变化 但是我们目前的 VisionSDK 已经发展到 3.4 版本 在 3.4 之后 我们将不会有特别大的一个变化 所以说你在 3.2 上开发的一个算法 可以非常快速的迁移到 3.4 上 这也是 VisionSDK 的一个优势 另外 VisionSDK 可以支持 很多硬件参考板 比如说 TI 提供的 EVM 板 以及 EVM 板上配套的一些 Vision 子板 或者说是 Vision 子板再加上一个板卡 然后在板卡之上 我们又可以再接入六路全景镜头 以及 TI 代码中支持的一些摄像头 这些摄像头和硬件板卡 可以通过第三方进行购买 然后可以将原生的代码直接运行 就可以看到 TI 算法的一个效果 对于 TDA2 和 TDA2P 或者 TDA2E 可能有一些客户会对用户界面有一些需求 所以说我们也在 VisionSDK 中 提供了 Linux 的支持 在最新版 3.4 版本中 我们加入了 Virtual DRM 功能 这个功能可以使得Linux 独立推送它的屏幕 然后 M4 也可以同时也推送它的屏幕 然后这个屏幕 最终由 M4 来进行一个合成 由它来最终控制这个显示界面 比如说是显示 Linux 界面 还是在 Linux 之上 再叠加 M4 的界面 还是说是他们之间 会有一个透明度的一个变换 这个是目前 3.4 版本带来的一个新功能 这个新功能化带来一个非常大的一个优势 就是极大地提高了整个系统的安全性 比如说 Linux 系统可能是不稳定的 然后我们将显示控制器放在 M4 上 这样的话就可以 在 Linux 出现故障的时候 由M4来接管整个显示 不会使得整个系统全部挂起 在 Linux 上我们目前支持 像 DRM openGL 等等一些 非常复杂的一些用户界面 这些用户界面可以由客户自由定制 此外对于开发过程中 我们可能更需要的是一个 非常快速的一个开发工具 或者说开发方式 我目前在 Vision SDK 里面 也集成了很多以太网的开发方式 比如说以太网的Linux启动 以太网的数据传输 即使是 SYS/BIOS 系统 我们也可以将数据 通过以太网传输到上位机上 由上位机进行一个debug或者说控制 另一方面的话 我们也提供了很多像烧写 Flash 或者说是启动从 QSPI 或者说 SD 卡启动的一些示例程序 这些程序可以快速地帮助大家 在搭建出一个方便调试的一个平台 然后 VisionSDK 目前 我们是从以前的 DVR 或者说是 IP Camera 系统中演进而来 而之后我们也将更多的 投入到像行车记录仪 或者说是车机的一些 复杂自动驾驶系统中 下面我们以这个例子为 以这个图作为一个例子 来从头开始讲一下 Link chain 的一个开发流程 我们可以看到 我们在原型系统设计的过程中 有四路镜头和一个 LCD 屏 比如说我们四路镜头 需要通过 VIP 方式进入到 VIP 方式进入到芯片中 然后由 VPE 进行一个缩放 然后可能会有一些 相对复杂的一些 2D 3D 的一些图像处理 然后这些图像处理 可能还是在原型阶段 只是在 PC 机上验证 还没有在板卡上 DSP 或者 EVE 上进行移植 所以说我们先画出这样的一个 简单的一个数据流 下一步我们根据具体的项目需求 具体把每一个算法每一个步骤 放置在特定的核心上 这里我们假设我们的项目 切换到 AVB 的系统 只需要把 VIP 输入换成 AVB 的收取 然后增加一个图像的解码器 图像解码器输出的图像 和刚才的 VIP 的输出是一致的 它通过 VPE Link 进行一个缩放 通过 IPC Link 进行 核间的 BUFFER 的一个转移传递 传递给 DSP 然后由 DSP 做一些全景的一些计算 然后又通过 IPC 传递到 EVE 里面 进行进一步的一些更复杂的一些计算 最终将拼接的图像通过 Display link 这个 Display link 是运行在 M4 上的 显示到 LCD 屏幕上 这是一个初步的一个系统 也就是说你可以将你PC上的代码 逐步的向这个系统中 DSP 上 EVE 上进行移植 分模块的调用 EVE 上 提供的一些加速函数 DSP 上那些加速函数 或者说直接在 DSP 上 使用 openCV 也可以 接下来的话如果发现 DSP 上的算法太过复杂 导致帧率下降 我们可以快速的将 DSP 刚才位于同一个DSP上的另一个link 我们可以快速的迁移到另一个 DSP 上 这样的修改是非常小的 只需要修改它的 DSP 编号即可 当然普通的项目是不可能只有一个全景的 当整个系统扩充到六路 AVB 全景的时候 包括两路 比如说前置或者说是盲区的一些镜头 这些镜头需要做一些非常复杂的一些算法 在这个时候我们可以加入一些 像数据流控制的一些 Link 包括像上面的那个 sync Link 它可以做一个软件上的一个同步 针对时间戳的一个软件同步 Select Link 可以将前置 或者说是盲区的镜头进行一个挑选 图像挑选出来 分发给 EVE 进行向车道线识别 像交通标志识别等等一些 ADAS 算法 最后可以由传递到用户的一些信息 比如说收取到倒车信号 或者说是收到超声波的一些信息 这些信息都可以由用户的APP进行收取 结合 EVE 算法算出来的结果 绘制在全景图片上 显示通过 Display Link 进行显示 这是一个相对复杂的一个应用 也就是也是目前 客户比较常见的一个应用场景 但是不同功能或者说不同产品 可能整个系统规模可能不完全一样 然后针对 ADAS 的软件 我们刚才也提到说 我们 DSP 上是支持 openCV 的 我们这里提供了非常多的 有关 ADAS 的一些软件结构 首先是我们提供了 CCS 工具 基于 eclipse 的 CCS 可能很多同事也在使用 目前 TDA 系列也是通过 CCS 进行一个 JTAG 调试 此外的话 目前的编译器是支持 C 和 C++ 的 然后所有核心 都会基于一个 SYS/BIOS 操作系统 SYS/BIOS 操作系统是一个 TI 开源的一个操作系统 可以根据客户的不同需求进行定制 对于 SYS/BIOS 的话 TI 有一个非常丰富的一个 workshop 可以在这个链接上找到 或者说在网上直接搜索 因为 SYS/BIOS 和 C6000 都是 TI 开发多年非常成熟的技术 SYS/BIOS 能够提供非常丰富的 多线程和包括像 外设抽象文件系统的读写 还有一些 Task 之间的通信同步 还有图形化的一个 操作系统的一个设计 中断响应和一些外设驱动等等一些 一些 TI 提供的一些驱动 这些都是非常完备的 另一方面的话 对于安全性要求更高的一些系统 我们可以由第三方提供一些 虚拟化的一些支持 另外 TI 提供一些 通用 Linux 的一些颗 Kernel 和驱动 能够保证 TDR 和 TDA 系列芯片能够正常运行 然后此外我们针对 C6000 和 EVE 提供了非常非常丰富的算法加速函数 因为目前绝大多数客户 是不会有非常多的人力物力 进行一个比如说针对 DSP 的一个 非常深度的优化 或者说针对 EVE 的一个 从零开始的学习 所以说我们提供了 非常多的一个加速函数库 这些加速函数库 都可以在 VisionSDK 里面获得 另外由于 VisionSDK 的体积 我还有一些像 DSP Lib 等等一些图像函数库 可以直接从网上下载 快速地集成到 VisionSDK 里面 此外我们对 openGL 也提供了 非常完备的支持 可以帮助客户做到非常复杂的 3D 效果 另外对于开放计算 包括像 openVX openCL openCV 目前我们都在 TDA 系列芯片中有支持 目前 openVX 支持 1.1 版本 openCL openCV 它有两种 在 SYS/BIOS 跟 Linux 上 会有两种架构形式 具体细节可以参考 VisionSDK 里面的设计 下面具体介绍一下 DSP 和 EVE 提供的这些算法类型 由于 DSP 和 EVE 非常擅长于 图像和信号处理方面的计算 所以说我们针对图像和信号处理计算 提供了非常高效非常丰富的一些接口 这些计算也是对整个系统非常 关键的一些环节 比如说像滤波器 FFT 矩阵的一个计算和分解 特殊的变换 数学像 sin cos 一些变换 包括像图像的一个透视变换 或者边缘检测直方图 或者说是二值化 还有图像的压缩和解压缩等等 还有包括像 EVE 提供的 非常高速的一些计算 包括高度集成化的一些 比如说像 Har 特征的计算 HOB 特征的计算 像一些函数接口 这些都是这些函数库 已经通过 API 的方式提供 接下来的话 有关 TI 的 SYS/BIOS 我们可以通过 CCS 工具 可以通过图形化的方式来修改整个系统 通过图形化的方式 获取整个系统的运行状态 有关这部分的资料 大家可以通过网上的 开放的一些资料进行查询 有经验的相关同事 可能会更快的上手整个系统 目前 SYS/BIOS 支持 TDA 芯片中的 DSP ARM 和 EVE 以及 M4 也就是说整个 TDA 芯片中 所有处理器上都是支持 SYS/BIOS 的 每一个处理器上都会运行一个操作系统 下面将会介绍一下 有关 TDA3 ADAS 图像处理的一些功能 首先这边的这几张图 都是我们和供应商 和第三方进行一个合作 实现一些效果 首先是对全景图像的一个运动物体检测 可以将距离车身 五米以内的运动人 和运动物体进行一个检测 以及包括像 APA 这种 高复杂度的一些计算 我们也是能够做到 此外还有基于算法的一些行人检测 车辆检测 盲区检测 的一些 BSD 下面这些资料是来自于TI的第三方 KPIT 他们提供的一些参考设计 比如说像 2D 3D 全景 像运动物体检测 像前行人识别 像停车位的一个检测 这些都是国内有非常多的供应商 可以提供他们所最擅长的一部分 那么我们看 一下 TDA3 能做哪些东西 首先我们将产品分为 以下几个等级 我们对于最简单的 3D 全景 和单路的行人检测 我们只需要一颗低频的 DSP 和一颗低频的 EVE 就可以实现 其中 PD 的话帧率在 10FPS 然后对于更复杂的系统 可能会要求有三路的 mod 基于全景三路镜头的一个 mod 可能需要一个中等频率的 DSP 和一个中等频率的 EVE 就可以实现 对于更复杂一些的 像一个 3D 全景 还需要带有三路的 mod 以及单路的行人检测 我们可能需要一个中高频的一个 DSP 或者说一个以及一个中高频的 EVE 可以做到十帧的一个 mod 和十帧的一个 PD 对于高端平台可能需要三路的 mod 这里面还包括了 3D 全景 以及单路的 PD 和两路的 psd 我们可能需要两颗高频的 DSP 和一颗高频的 EVE 这样就可以实现一个 非常复杂的一个 ADAS 功能 同时整个系统的 BOM 成本将会非常低 接下来的话是介绍一下 TI 在深度学习方面的一些 目前的成果和以后的规划 深度学习是目前各个车厂 以及 TIER1 包括像一些互联网公司 都在强调的一些功能 因为深度学习有关 将会有关自动驾驶 包括像语义的识别 整个空间的重建 以及自动驾驶决策的制定 这些都是非常相关的 所以说 TI 利用 DSP 和 EVE 进行了深度学习函数库的开发 也就是说我们可以看到最左 从左边开始是一个训练的过程 训练的过程是在 PC 上 通过我们目前最常见的像 flow 像 caffe 和 torch 等等一些 训练框架训练出一个结果 将这个结果通过上面 TI 开放的一个 模型转换工具 通过这个工具 我们可以将现有的一些 非常常见的深度学习网络 包括各个客户他们自己的 一些定制化的一些网络 包括像 TI 优化过的一些网络 这些网络的训练结果 转换成 TI TDA 芯片能够识别的格式 将这个参数文件和网络文件 放入在 TDA 芯片中 TDA 芯片就可以实现这个网络的功能 并且在下一步下一代 或者说是下几个版本中 我们可能会有 open VX1.2 等版本的升级 这些版本的升级 将会更多的支持深度学习的一些 函数接口或者说是网络层 然后这里是 TI 在 2017 年 CES 上 展出的一个深度学习相关的 Demo 这个 Demo 是运行在 TDA2x 上 它做到了一个语义分割 做到了一个 1024×512 的 一个语义分割的一个实时的计算 整个芯片发热量非常小 只用到了 EVE 两颗 DSP 和两颗 A15 都是空闲的 整个语义分割 包含 41 层 对五个类型进行一个识别 最终输出每一个像素点它的分类结果 可以看出目前 TI 的深度学习 已经是一个 ready 的状态 可以接收各个供应商 或者说是算法研究团队 他们提出的各种各样的网络 当然这些网络是需要进行一个 嵌入式平台的优化 因为嵌入式平台的计算量 并不是PC平台上的 和 PC 平台并不是一个数量级 这是有关深度学习方面的 OK 谢谢各位抽出时间参加这次 TI 培训 直播的视频和演讲材料 将会在一周内发布在 E2E 社区 然后大家可以通过留言 或者说是有商务合作的话 可以通过左下角这个邮箱提出您的问题 下面的话我我会在留言区进行一个回复
接下来的话我将 详细介绍一下 TDA3x 有关快速启动的一些特点 TDA3x 作为一个单片机 它可以做一个非常快速的启动 因为里面运行的全部都是RTOS 也就是TI提供的 SYS/BIOS 操作系统 在这颗芯片里面我们没有Linux 没有窗口管理 只有非常可靠非常稳定 运行速度非常快的一个实时操作系统 并且这个系统完全可以 向更高安全等级的系统中集成 从冷启动到3D显示 我们最高纪录可以达到1.8秒 也就说在上电1.8秒之后 全景拼接图像就已经能够往外输出 这一点八秒钟 我们还包含了摄像头的500毫秒的配置 如果说有的摄像头 可以更短的时间初始化 我们将会做到更快的速度 另一方面的话 为了适应车机对高安全性 和快速的 CAN 响应的一些需求 我们目前是可以做到 在80毫秒内做到 CAN 的一个冷启动 也就是说 TDA3 具有单片机级的 一个软件的简易程度和稳定程度 也有像处理器及的一个性能 提供了 DSP 和 EVE 非常强大的一个计算能力 这个是目前 TDA3 3D 全景的一个最大优势 下面的话将会详细介绍一下 TI 提供的针对 TDA 芯片家族的 一个统一的软件架构 这张图画出的是 TI RTOS 软件架构 也就是说所有核心上运行的 全部是 TI 的 RTOS 即使是包含 A15 的 TDA2 系列 也就是说在 TDA2 中 才会包含有A15核心 然后其他核心是 TDA2 和 TDA3 所共有的 在这张图中 所有的核心将会运行 SYS/BIOS 操作系统 在操作系统之上 我们又提供了非常丰富全面的驱动层 像核间通信 IPC 像网络的 NDK AVB 和其他的像 I2C 的一些驱动 以及包括图像编解码 还有图像视频处理的一些加速函数库 包括像目前学术界用的比较多的 open CV 和open CL一些软件框架 这些都是包含在我们整个系统框架内的 在此基础之上 我们提供了 VisionSDK 的框架 也就是说所有的算法 将会成为一个单独的个体 每一个个体称为一个 Link 每一个 Link 能够完成他自己 所需要做的一件事情 然后整个软件功能 将会由多个 Link 进行串联 形成一个数据流 从数据输入由数据驱动 按照节拍进行计算 最终到显示的输出 整个数据流的控制 可以在 M4 上 也可以在 A15 上 这是基于 RTOS 的一个软件架构 这张图是基于通用 Linux 软件架构 也就是说 VisionSDK 我们既支持 RTOS 的操作系统 也支持 Linux 操作系统 对于 Linux 操作系统 我们必须运行在 A15 上 因为 M4 目前是不支持 Linux 操作系统 也就是说这一页 PPT 是针对 TDA2x TDA2E 和 TDA2P 进行讲解的 我们在 A15 上将会运行 Linux 操作系统 在 Linux 之上 我们提供基于 Linux 的 IPC 驱动 基于 Linux 的硬件驱动 包括像 I2C 包括像 SPI 包括像摄像头的一些数据输入驱动 这些我们都是支持的 然后另一方面的话 其他核心像 M4 或 C66 DSP 或者 EVE 他们的软件架构 和 RTOS 的软件架构几乎一致 在这种架构情况下 所有的 Link 同样是完全相同的 只是在 Linux 情况下 Linux 的 Link 是运行在 Linux 用户台 整个芯片整个系统的功能 也就是也是在 Linux 上 进行一个创建控制 从这些整个统一架构可以看出 TDA2 TDA3 整个 TDA 芯片系列 他们的软件架构是可裁剪的 也就是说我有这个核心的时候 可以把这个核心带上 如果没有这个核心的时候 可以直接把它去掉 然后整个系统的控制 都是由某一个核心进行一个分发 然后整个系统运行过程中 是只有数据流进行一个驱动 这也是 VisionSDK 的一大特点 那么 VisionSDK 在哪里下载呢 如果你可以通过搜索引擎搜索的话 你可以搜尝试搜索 processorsdk vision processorsdk vision 是 VisionSDK 的一个全称 目前是开放下载的 可以直接从 TI 的官网 进行下载安装和编译 此外对于 VisionSDK 和整个芯片 我们 TI 将会提供一个全球团队 7×24 小时的一个技术支持 也就是我们 TI 最常用的一个论坛 叫做 E2E 在 E2E 论坛你可以通过 processors 和 automotive processors 寻找 DRA 系列和 TDA 系列 对于每一个系列 我们都可以提出与你们产品相关 或者说与软件硬件相关的一些问题 这些问题将会由我们国内国外 印度美国欧洲各个团队 进行全天候的支持 尽可能保证每一个问题 有人问就一定会有人答 那么有的人就会比较好奇 VisionSDK 为什么要用 VisionSDK 因为在多核异构的情况下 软件才是整个系统的 工作最复杂的部分 按照我们的经验 非常多的客户可能只用过像 只有 ARM A 系列处理器的芯片 通过堆叠 A 系列处理器的数量 来提高整个芯片的性能 而 TI 提出了一种异构多核的情况 每一个核心做它所对应的一件事情 这样的话能够充分发挥整个芯片 各个核心的高效的计算能力 而发挥异构多核的一个能力 所带来的问题就是 软件结构将会非常复杂 比如说你的数据有可能从DSP到A15 A15完之后再回到DSP 有可能再去到M4 或者说再去到 EVE 来来回回可能要来回折腾 这样的话对于软件内存 还有一些通讯结构 这些提出了非常高的要求 所以说 TI 针对异构多核的系统 从过去的DSP系统中 积累出一套比较完善的一套软件结构 目前我们将它称之为 VisionSDK 目前可以支持客户开发 非常多种的算法同时运行 目前我们接触到的客户 有开发十几个或者二十几个算法的 或者说上二三十个 link 同时存在于整个系统中 每一个处理器上的 link 数量 是没有限制的 只要说你的内存或者说是处理能力足够 软件上是没有限制的 另一方面的话 我们由于异构多核 所以说 EVE 它有一部分擅长的计算 DSP 也有他所擅长的计算 所以说我们可以将 绝大多数 EVE 最擅长的计算 分配到 EVE 上进行 计算完成之后我们再返回给 DSP 这样充分发挥不同的核心 不同的计算能力 这样也有利于车厂 或者 TIER1 将部分的核心交由供应商来深度开发 然后我们将目前这一套 LINK 和 usecase 的一套软件架构 称为 Links and Chains 也就是说每一个算法功能 我们称为一个 link 最后我们会将所有的 Link 连成一个 chain 一个数据流 来实现整个功能 此外 VisionSDK 还提供了 非常完备的像编译操作系统 核间通信 驱动 网络协议栈 编码器和一些算法加速器在内的 各种各样的软件 SDK 包 这些包如果说在传统的系统中开发 你可能要一个一个往系统中集成 但是 VisionSDK 已经 全部把他们都集成好了 VisionSDK 的目标是 让更多的客户能够快速的使用 DSP 或者说 EVE 算法加速函数 来快速的验证它们的原型样机 此外提供一个和平台无关 或者说和芯片型号无关的一个 API 也就说你相同 同样一个 Link 你可以在 TDA2 TDA3 TDA2P 以及 TDA 以后的 下一代产品中使用 另一方面的话 VisionSDK 目前 设计是非常高度优化的 我们将内存拷贝和内存申请释放 降低到最低程度 这样的话能够保证 即使你的系统中集成了30到50个算法 都不会由于框架的开销 或者说是每秒钟一千次的调用 带来非常复杂的问题 目前 VisionSDK 已经在 欧洲中国美国全世界各个车厂中 大量的车型都在量产 所以说 VisionSDK 的代码质量是可靠的 下面将具体讲解一下 就是有关 VisionSDK 的一些功能特点 比如说设计的一些 比较有优势的一些功能 首先是我们整个框架 提供了相当于一个中间件的一个功能 它能够帮助客户在不同核心上 运行相同的代码 或者说是快速的在某些核心上开发代码 而不需要从零开始学习这一科 这一个比如说像 EVE 的一个编程 完全摒弃了这一套传统的流程 我们只需要在这一套框架之上进行开发 比如说你的内存申请内存释放 你的一些上一级传来的数据 和你将会发出去的下一级数据 这些操作都会将统一的接口进行一个封装 而且即使你是非常复杂的算法 我们在提供的 Link 中 也会提供一些现有的一些 比如说像开关的一些 Link 可这些 Link 可以控制一些算法 在不需要运行的时候关闭掉 另一方面的话 我们目前由印度和美国团队 共同开发的 VisionSDK 具有非常高的软件质量 已经有非常多的车厂都在量产 并且在设计的时候 已经考虑到汽车中的一些要求 比如说像在运行过程中 我们是没有动态内存申请释放的 另一方面的话 我们也有非常多的一些 静态的代码分析 能够保证我们 deliver 或者 release 出去的 VisionSDK 是一个非常可靠的一个系统 这里需要强调一点 就是目前 VisionSDK 里面 提供了很多图像处理算法 这些算法可以供大家进行参考 但是并不供客户进行一个量产 嵌入式系统中最复杂的可能就是 内存管理和 DMA 的控制 这一部分是还有核间通信 这一部分也是 VisionSDK 提供的一个一大特点 首先我们所有的每一个核心 都会有一小块区域 用来存放它的数据段和代码段 然后剩下的一大块区域 将会由某一个核心进行一个统一管理 所有的核心凡是需要申请释放内存的时候 都需要经由这颗处理器来处理 这样的话所有的 buffer 都将被统一管理 然后核心与核心之间的数据传递 也不存在内存拷贝 只需要在核间进行一个指针的传递 由于整个系统在内存上 是一个共享的一个区域 所以说直接通过指针的传递 就可以实现一个非常高效的一个核间通信 另一方面的话 DMA 我们在 VisionSDK 里面 提供了非常灵活非常方便的一些 API 调用 避免了传统的配置结构体的方式 另一方面不仅是数据流 控制流也是一个系统最重要的一个环节 我们目前 VisionSDK 也可以用户增加他自己的一个控制流程 比如说发消息或者说是 其他一些自定义的一些功能 这些也是通过 VisionSDK 框架来实现 而不是说我需要调用到一个 非常非常底层的一个函数 这是不需要的 你只需要了解 VisionSDK Link 通信的一个函数接口即可 另一方面的话 我们的 VisionSDK 能够非常 快速的集成现有的一些算法 比如说我们将会提供在 DSP 上的 VLIB 像 EVE 上的 EVE SW 等等算法 以及第三方提供的一些图像处理函数库 这些函数可以 非常灵活地集成到 VisionSDK 中 直接通过函数调用的方式来实现 接下来的话由于不同的项目 可能有不同的需求 比如说有的项目是以太网系统 以太网进入到芯片中 有的系统是通过 LVDS 进入到系统中 这里我们提供了一个 非常灵活的一个接口 也就说 VisionSDK 对于 Link 之间的传递 是一个完全解耦和的一个状态 不管你是以太网进来 还是通过读文件 还是通过网络输入 还是通过 LVDS 进来 后面的算法可以完全不需要修改 只需要更换一个 Link 即可 比如说更换 Link 也只需要 将某一个 link 的编号 给修改掉就可以了 最后有关 VisionSDK 在这里不同的处理器 从现在的 TDA3 即使是 TDA3 中的最精简版本 到 TDA2x 或 TDA2P 他们最复杂的版本 只需要在一个配置文件中把它使能 就可以在不同平台间进行一个切换 另外对内存的一个修改 我们也是一个非常灵活的一个配置 可以通过修改某一个配置文件 可以快速的扩大 某一个核心的堆栈大小 或者说是扩大整个系统的内存布局 VisionSDK 目前也在不停的向前发展 在小版本之间 API 是不会发生变化的 在大版本之间可能会有比较大的变化 但是我们目前的 VisionSDK 已经发展到 3.4 版本 在 3.4 之后 我们将不会有特别大的一个变化 所以说你在 3.2 上开发的一个算法 可以非常快速的迁移到 3.4 上 这也是 VisionSDK 的一个优势 另外 VisionSDK 可以支持 很多硬件参考板 比如说 TI 提供的 EVM 板 以及 EVM 板上配套的一些 Vision 子板 或者说是 Vision 子板再加上一个板卡 然后在板卡之上 我们又可以再接入六路全景镜头 以及 TI 代码中支持的一些摄像头 这些摄像头和硬件板卡 可以通过第三方进行购买 然后可以将原生的代码直接运行 就可以看到 TI 算法的一个效果 对于 TDA2 和 TDA2P 或者 TDA2E 可能有一些客户会对用户界面有一些需求 所以说我们也在 VisionSDK 中 提供了 Linux 的支持 在最新版 3.4 版本中 我们加入了 Virtual DRM 功能 这个功能可以使得Linux 独立推送它的屏幕 然后 M4 也可以同时也推送它的屏幕 然后这个屏幕 最终由 M4 来进行一个合成 由它来最终控制这个显示界面 比如说是显示 Linux 界面 还是在 Linux 之上 再叠加 M4 的界面 还是说是他们之间 会有一个透明度的一个变换 这个是目前 3.4 版本带来的一个新功能 这个新功能化带来一个非常大的一个优势 就是极大地提高了整个系统的安全性 比如说 Linux 系统可能是不稳定的 然后我们将显示控制器放在 M4 上 这样的话就可以 在 Linux 出现故障的时候 由M4来接管整个显示 不会使得整个系统全部挂起 在 Linux 上我们目前支持 像 DRM openGL 等等一些 非常复杂的一些用户界面 这些用户界面可以由客户自由定制 此外对于开发过程中 我们可能更需要的是一个 非常快速的一个开发工具 或者说开发方式 我目前在 Vision SDK 里面 也集成了很多以太网的开发方式 比如说以太网的Linux启动 以太网的数据传输 即使是 SYS/BIOS 系统 我们也可以将数据 通过以太网传输到上位机上 由上位机进行一个debug或者说控制 另一方面的话 我们也提供了很多像烧写 Flash 或者说是启动从 QSPI 或者说 SD 卡启动的一些示例程序 这些程序可以快速地帮助大家 在搭建出一个方便调试的一个平台 然后 VisionSDK 目前 我们是从以前的 DVR 或者说是 IP Camera 系统中演进而来 而之后我们也将更多的 投入到像行车记录仪 或者说是车机的一些 复杂自动驾驶系统中 下面我们以这个例子为 以这个图作为一个例子 来从头开始讲一下 Link chain 的一个开发流程 我们可以看到 我们在原型系统设计的过程中 有四路镜头和一个 LCD 屏 比如说我们四路镜头 需要通过 VIP 方式进入到 VIP 方式进入到芯片中 然后由 VPE 进行一个缩放 然后可能会有一些 相对复杂的一些 2D 3D 的一些图像处理 然后这些图像处理 可能还是在原型阶段 只是在 PC 机上验证 还没有在板卡上 DSP 或者 EVE 上进行移植 所以说我们先画出这样的一个 简单的一个数据流 下一步我们根据具体的项目需求 具体把每一个算法每一个步骤 放置在特定的核心上 这里我们假设我们的项目 切换到 AVB 的系统 只需要把 VIP 输入换成 AVB 的收取 然后增加一个图像的解码器 图像解码器输出的图像 和刚才的 VIP 的输出是一致的 它通过 VPE Link 进行一个缩放 通过 IPC Link 进行 核间的 BUFFER 的一个转移传递 传递给 DSP 然后由 DSP 做一些全景的一些计算 然后又通过 IPC 传递到 EVE 里面 进行进一步的一些更复杂的一些计算 最终将拼接的图像通过 Display link 这个 Display link 是运行在 M4 上的 显示到 LCD 屏幕上 这是一个初步的一个系统 也就是说你可以将你PC上的代码 逐步的向这个系统中 DSP 上 EVE 上进行移植 分模块的调用 EVE 上 提供的一些加速函数 DSP 上那些加速函数 或者说直接在 DSP 上 使用 openCV 也可以 接下来的话如果发现 DSP 上的算法太过复杂 导致帧率下降 我们可以快速的将 DSP 刚才位于同一个DSP上的另一个link 我们可以快速的迁移到另一个 DSP 上 这样的修改是非常小的 只需要修改它的 DSP 编号即可 当然普通的项目是不可能只有一个全景的 当整个系统扩充到六路 AVB 全景的时候 包括两路 比如说前置或者说是盲区的一些镜头 这些镜头需要做一些非常复杂的一些算法 在这个时候我们可以加入一些 像数据流控制的一些 Link 包括像上面的那个 sync Link 它可以做一个软件上的一个同步 针对时间戳的一个软件同步 Select Link 可以将前置 或者说是盲区的镜头进行一个挑选 图像挑选出来 分发给 EVE 进行向车道线识别 像交通标志识别等等一些 ADAS 算法 最后可以由传递到用户的一些信息 比如说收取到倒车信号 或者说是收到超声波的一些信息 这些信息都可以由用户的APP进行收取 结合 EVE 算法算出来的结果 绘制在全景图片上 显示通过 Display Link 进行显示 这是一个相对复杂的一个应用 也就是也是目前 客户比较常见的一个应用场景 但是不同功能或者说不同产品 可能整个系统规模可能不完全一样 然后针对 ADAS 的软件 我们刚才也提到说 我们 DSP 上是支持 openCV 的 我们这里提供了非常多的 有关 ADAS 的一些软件结构 首先是我们提供了 CCS 工具 基于 eclipse 的 CCS 可能很多同事也在使用 目前 TDA 系列也是通过 CCS 进行一个 JTAG 调试 此外的话 目前的编译器是支持 C 和 C++ 的 然后所有核心 都会基于一个 SYS/BIOS 操作系统 SYS/BIOS 操作系统是一个 TI 开源的一个操作系统 可以根据客户的不同需求进行定制 对于 SYS/BIOS 的话 TI 有一个非常丰富的一个 workshop 可以在这个链接上找到 或者说在网上直接搜索 因为 SYS/BIOS 和 C6000 都是 TI 开发多年非常成熟的技术 SYS/BIOS 能够提供非常丰富的 多线程和包括像 外设抽象文件系统的读写 还有一些 Task 之间的通信同步 还有图形化的一个 操作系统的一个设计 中断响应和一些外设驱动等等一些 一些 TI 提供的一些驱动 这些都是非常完备的 另一方面的话 对于安全性要求更高的一些系统 我们可以由第三方提供一些 虚拟化的一些支持 另外 TI 提供一些 通用 Linux 的一些颗 Kernel 和驱动 能够保证 TDR 和 TDA 系列芯片能够正常运行 然后此外我们针对 C6000 和 EVE 提供了非常非常丰富的算法加速函数 因为目前绝大多数客户 是不会有非常多的人力物力 进行一个比如说针对 DSP 的一个 非常深度的优化 或者说针对 EVE 的一个 从零开始的学习 所以说我们提供了 非常多的一个加速函数库 这些加速函数库 都可以在 VisionSDK 里面获得 另外由于 VisionSDK 的体积 我还有一些像 DSP Lib 等等一些图像函数库 可以直接从网上下载 快速地集成到 VisionSDK 里面 此外我们对 openGL 也提供了 非常完备的支持 可以帮助客户做到非常复杂的 3D 效果 另外对于开放计算 包括像 openVX openCL openCV 目前我们都在 TDA 系列芯片中有支持 目前 openVX 支持 1.1 版本 openCL openCV 它有两种 在 SYS/BIOS 跟 Linux 上 会有两种架构形式 具体细节可以参考 VisionSDK 里面的设计 下面具体介绍一下 DSP 和 EVE 提供的这些算法类型 由于 DSP 和 EVE 非常擅长于 图像和信号处理方面的计算 所以说我们针对图像和信号处理计算 提供了非常高效非常丰富的一些接口 这些计算也是对整个系统非常 关键的一些环节 比如说像滤波器 FFT 矩阵的一个计算和分解 特殊的变换 数学像 sin cos 一些变换 包括像图像的一个透视变换 或者边缘检测直方图 或者说是二值化 还有图像的压缩和解压缩等等 还有包括像 EVE 提供的 非常高速的一些计算 包括高度集成化的一些 比如说像 Har 特征的计算 HOB 特征的计算 像一些函数接口 这些都是这些函数库 已经通过 API 的方式提供 接下来的话 有关 TI 的 SYS/BIOS 我们可以通过 CCS 工具 可以通过图形化的方式来修改整个系统 通过图形化的方式 获取整个系统的运行状态 有关这部分的资料 大家可以通过网上的 开放的一些资料进行查询 有经验的相关同事 可能会更快的上手整个系统 目前 SYS/BIOS 支持 TDA 芯片中的 DSP ARM 和 EVE 以及 M4 也就是说整个 TDA 芯片中 所有处理器上都是支持 SYS/BIOS 的 每一个处理器上都会运行一个操作系统 下面将会介绍一下 有关 TDA3 ADAS 图像处理的一些功能 首先这边的这几张图 都是我们和供应商 和第三方进行一个合作 实现一些效果 首先是对全景图像的一个运动物体检测 可以将距离车身 五米以内的运动人 和运动物体进行一个检测 以及包括像 APA 这种 高复杂度的一些计算 我们也是能够做到 此外还有基于算法的一些行人检测 车辆检测 盲区检测 的一些 BSD 下面这些资料是来自于TI的第三方 KPIT 他们提供的一些参考设计 比如说像 2D 3D 全景 像运动物体检测 像前行人识别 像停车位的一个检测 这些都是国内有非常多的供应商 可以提供他们所最擅长的一部分 那么我们看 一下 TDA3 能做哪些东西 首先我们将产品分为 以下几个等级 我们对于最简单的 3D 全景 和单路的行人检测 我们只需要一颗低频的 DSP 和一颗低频的 EVE 就可以实现 其中 PD 的话帧率在 10FPS 然后对于更复杂的系统 可能会要求有三路的 mod 基于全景三路镜头的一个 mod 可能需要一个中等频率的 DSP 和一个中等频率的 EVE 就可以实现 对于更复杂一些的 像一个 3D 全景 还需要带有三路的 mod 以及单路的行人检测 我们可能需要一个中高频的一个 DSP 或者说一个以及一个中高频的 EVE 可以做到十帧的一个 mod 和十帧的一个 PD 对于高端平台可能需要三路的 mod 这里面还包括了 3D 全景 以及单路的 PD 和两路的 psd 我们可能需要两颗高频的 DSP 和一颗高频的 EVE 这样就可以实现一个 非常复杂的一个 ADAS 功能 同时整个系统的 BOM 成本将会非常低 接下来的话是介绍一下 TI 在深度学习方面的一些 目前的成果和以后的规划 深度学习是目前各个车厂 以及 TIER1 包括像一些互联网公司 都在强调的一些功能 因为深度学习有关 将会有关自动驾驶 包括像语义的识别 整个空间的重建 以及自动驾驶决策的制定 这些都是非常相关的 所以说 TI 利用 DSP 和 EVE 进行了深度学习函数库的开发 也就是说我们可以看到最左 从左边开始是一个训练的过程 训练的过程是在 PC 上 通过我们目前最常见的像 flow 像 caffe 和 torch 等等一些 训练框架训练出一个结果 将这个结果通过上面 TI 开放的一个 模型转换工具 通过这个工具 我们可以将现有的一些 非常常见的深度学习网络 包括各个客户他们自己的 一些定制化的一些网络 包括像 TI 优化过的一些网络 这些网络的训练结果 转换成 TI TDA 芯片能够识别的格式 将这个参数文件和网络文件 放入在 TDA 芯片中 TDA 芯片就可以实现这个网络的功能 并且在下一步下一代 或者说是下几个版本中 我们可能会有 open VX1.2 等版本的升级 这些版本的升级 将会更多的支持深度学习的一些 函数接口或者说是网络层 然后这里是 TI 在 2017 年 CES 上 展出的一个深度学习相关的 Demo 这个 Demo 是运行在 TDA2x 上 它做到了一个语义分割 做到了一个 1024×512 的 一个语义分割的一个实时的计算 整个芯片发热量非常小 只用到了 EVE 两颗 DSP 和两颗 A15 都是空闲的 整个语义分割 包含 41 层 对五个类型进行一个识别 最终输出每一个像素点它的分类结果 可以看出目前 TI 的深度学习 已经是一个 ready 的状态 可以接收各个供应商 或者说是算法研究团队 他们提出的各种各样的网络 当然这些网络是需要进行一个 嵌入式平台的优化 因为嵌入式平台的计算量 并不是PC平台上的 和 PC 平台并不是一个数量级 这是有关深度学习方面的 OK 谢谢各位抽出时间参加这次 TI 培训 直播的视频和演讲材料 将会在一周内发布在 E2E 社区 然后大家可以通过留言 或者说是有商务合作的话 可以通过左下角这个邮箱提出您的问题 下面的话我我会在留言区进行一个回复
接下来的话我将
详细介绍一下 TDA3x
有关快速启动的一些特点
TDA3x 作为一个单片机
它可以做一个非常快速的启动
因为里面运行的全部都是RTOS
也就是TI提供的 SYS/BIOS 操作系统
在这颗芯片里面我们没有Linux
没有窗口管理
只有非常可靠非常稳定
运行速度非常快的一个实时操作系统
并且这个系统完全可以
向更高安全等级的系统中集成
从冷启动到3D显示
我们最高纪录可以达到1.8秒
也就说在上电1.8秒之后
全景拼接图像就已经能够往外输出
这一点八秒钟
我们还包含了摄像头的500毫秒的配置
如果说有的摄像头
可以更短的时间初始化
我们将会做到更快的速度
另一方面的话
为了适应车机对高安全性
和快速的 CAN 响应的一些需求
我们目前是可以做到
在80毫秒内做到 CAN 的一个冷启动
也就是说 TDA3 具有单片机级的
一个软件的简易程度和稳定程度
也有像处理器及的一个性能
提供了 DSP 和 EVE
非常强大的一个计算能力
这个是目前 TDA3
3D 全景的一个最大优势
下面的话将会详细介绍一下
TI 提供的针对 TDA 芯片家族的
一个统一的软件架构
这张图画出的是 TI RTOS 软件架构
也就是说所有核心上运行的
全部是 TI 的 RTOS
即使是包含 A15 的 TDA2 系列
也就是说在 TDA2 中
才会包含有A15核心
然后其他核心是 TDA2 和 TDA3 所共有的
在这张图中
所有的核心将会运行 SYS/BIOS 操作系统
在操作系统之上
我们又提供了非常丰富全面的驱动层
像核间通信 IPC
像网络的 NDK AVB
和其他的像 I2C 的一些驱动
以及包括图像编解码
还有图像视频处理的一些加速函数库
包括像目前学术界用的比较多的
open CV 和open CL一些软件框架
这些都是包含在我们整个系统框架内的
在此基础之上
我们提供了 VisionSDK 的框架
也就是说所有的算法
将会成为一个单独的个体
每一个个体称为一个 Link
每一个 Link 能够完成他自己
所需要做的一件事情
然后整个软件功能
将会由多个 Link 进行串联
形成一个数据流
从数据输入由数据驱动
按照节拍进行计算
最终到显示的输出
整个数据流的控制
可以在 M4 上
也可以在 A15 上
这是基于 RTOS 的一个软件架构
这张图是基于通用 Linux 软件架构
也就是说 VisionSDK 我们既支持
RTOS 的操作系统
也支持 Linux 操作系统
对于 Linux 操作系统
我们必须运行在 A15 上
因为 M4 目前是不支持 Linux 操作系统
也就是说这一页 PPT
是针对 TDA2x TDA2E
和 TDA2P 进行讲解的
我们在 A15 上将会运行 Linux 操作系统
在 Linux 之上
我们提供基于 Linux 的 IPC 驱动
基于 Linux 的硬件驱动
包括像 I2C 包括像 SPI
包括像摄像头的一些数据输入驱动
这些我们都是支持的
然后另一方面的话
其他核心像 M4
或 C66 DSP 或者 EVE
他们的软件架构
和 RTOS 的软件架构几乎一致
在这种架构情况下
所有的 Link 同样是完全相同的
只是在 Linux 情况下
Linux 的 Link 是运行在 Linux 用户台
整个芯片整个系统的功能
也就是也是在 Linux 上
进行一个创建控制
从这些整个统一架构可以看出
TDA2 TDA3 整个 TDA 芯片系列
他们的软件架构是可裁剪的
也就是说我有这个核心的时候
可以把这个核心带上
如果没有这个核心的时候
可以直接把它去掉
然后整个系统的控制
都是由某一个核心进行一个分发
然后整个系统运行过程中
是只有数据流进行一个驱动
这也是 VisionSDK 的一大特点
那么 VisionSDK 在哪里下载呢
如果你可以通过搜索引擎搜索的话
你可以搜尝试搜索 processorsdk vision
processorsdk vision 是
VisionSDK 的一个全称
目前是开放下载的
可以直接从 TI 的官网
进行下载安装和编译
此外对于 VisionSDK 和整个芯片
我们 TI 将会提供一个全球团队
7×24 小时的一个技术支持
也就是我们 TI 最常用的一个论坛
叫做 E2E
在 E2E 论坛你可以通过 processors
和 automotive processors
寻找 DRA 系列和 TDA 系列
对于每一个系列
我们都可以提出与你们产品相关
或者说与软件硬件相关的一些问题
这些问题将会由我们国内国外
印度美国欧洲各个团队
进行全天候的支持
尽可能保证每一个问题
有人问就一定会有人答
那么有的人就会比较好奇
VisionSDK 为什么要用 VisionSDK
因为在多核异构的情况下
软件才是整个系统的
工作最复杂的部分
按照我们的经验
非常多的客户可能只用过像
只有 ARM A 系列处理器的芯片
通过堆叠 A 系列处理器的数量
来提高整个芯片的性能
而 TI 提出了一种异构多核的情况
每一个核心做它所对应的一件事情
这样的话能够充分发挥整个芯片
各个核心的高效的计算能力
而发挥异构多核的一个能力
所带来的问题就是
软件结构将会非常复杂
比如说你的数据有可能从DSP到A15
A15完之后再回到DSP
有可能再去到M4
或者说再去到 EVE
来来回回可能要来回折腾
这样的话对于软件内存
还有一些通讯结构
这些提出了非常高的要求
所以说 TI 针对异构多核的系统
从过去的DSP系统中
积累出一套比较完善的一套软件结构
目前我们将它称之为 VisionSDK
目前可以支持客户开发
非常多种的算法同时运行
目前我们接触到的客户
有开发十几个或者二十几个算法的
或者说上二三十个 link
同时存在于整个系统中
每一个处理器上的 link 数量
是没有限制的
只要说你的内存或者说是处理能力足够
软件上是没有限制的
另一方面的话
我们由于异构多核
所以说 EVE 它有一部分擅长的计算
DSP 也有他所擅长的计算
所以说我们可以将
绝大多数 EVE 最擅长的计算
分配到 EVE 上进行
计算完成之后我们再返回给 DSP
这样充分发挥不同的核心
不同的计算能力
这样也有利于车厂 或者 TIER1
将部分的核心交由供应商来深度开发
然后我们将目前这一套 LINK
和 usecase 的一套软件架构
称为 Links and Chains
也就是说每一个算法功能
我们称为一个 link
最后我们会将所有的 Link
连成一个 chain 一个数据流
来实现整个功能
此外 VisionSDK 还提供了
非常完备的像编译操作系统
核间通信 驱动 网络协议栈
编码器和一些算法加速器在内的
各种各样的软件 SDK 包
这些包如果说在传统的系统中开发
你可能要一个一个往系统中集成
但是 VisionSDK 已经
全部把他们都集成好了
VisionSDK 的目标是
让更多的客户能够快速的使用 DSP
或者说 EVE 算法加速函数
来快速的验证它们的原型样机
此外提供一个和平台无关
或者说和芯片型号无关的一个 API
也就说你相同
同样一个 Link 你可以在
TDA2 TDA3 TDA2P 以及 TDA 以后的
下一代产品中使用
另一方面的话
VisionSDK 目前
设计是非常高度优化的
我们将内存拷贝和内存申请释放
降低到最低程度
这样的话能够保证
即使你的系统中集成了30到50个算法
都不会由于框架的开销
或者说是每秒钟一千次的调用
带来非常复杂的问题
目前 VisionSDK 已经在
欧洲中国美国全世界各个车厂中
大量的车型都在量产
所以说 VisionSDK 的代码质量是可靠的
下面将具体讲解一下
就是有关 VisionSDK 的一些功能特点
比如说设计的一些
比较有优势的一些功能
首先是我们整个框架
提供了相当于一个中间件的一个功能
它能够帮助客户在不同核心上
运行相同的代码
或者说是快速的在某些核心上开发代码
而不需要从零开始学习这一科
这一个比如说像 EVE 的一个编程
完全摒弃了这一套传统的流程
我们只需要在这一套框架之上进行开发
比如说你的内存申请内存释放
你的一些上一级传来的数据
和你将会发出去的下一级数据
这些操作都会将统一的接口进行一个封装
而且即使你是非常复杂的算法
我们在提供的 Link 中
也会提供一些现有的一些
比如说像开关的一些 Link
可这些 Link 可以控制一些算法
在不需要运行的时候关闭掉
另一方面的话
我们目前由印度和美国团队
共同开发的 VisionSDK
具有非常高的软件质量
已经有非常多的车厂都在量产
并且在设计的时候
已经考虑到汽车中的一些要求
比如说像在运行过程中
我们是没有动态内存申请释放的
另一方面的话
我们也有非常多的一些
静态的代码分析
能够保证我们 deliver
或者 release 出去的 VisionSDK
是一个非常可靠的一个系统
这里需要强调一点
就是目前 VisionSDK 里面
提供了很多图像处理算法
这些算法可以供大家进行参考
但是并不供客户进行一个量产
嵌入式系统中最复杂的可能就是
内存管理和 DMA 的控制
这一部分是还有核间通信
这一部分也是 VisionSDK
提供的一个一大特点
首先我们所有的每一个核心
都会有一小块区域
用来存放它的数据段和代码段
然后剩下的一大块区域
将会由某一个核心进行一个统一管理
所有的核心凡是需要申请释放内存的时候
都需要经由这颗处理器来处理
这样的话所有的 buffer 都将被统一管理
然后核心与核心之间的数据传递
也不存在内存拷贝
只需要在核间进行一个指针的传递
由于整个系统在内存上
是一个共享的一个区域
所以说直接通过指针的传递
就可以实现一个非常高效的一个核间通信
另一方面的话 DMA
我们在 VisionSDK 里面
提供了非常灵活非常方便的一些 API 调用
避免了传统的配置结构体的方式
另一方面不仅是数据流
控制流也是一个系统最重要的一个环节
我们目前 VisionSDK
也可以用户增加他自己的一个控制流程
比如说发消息或者说是
其他一些自定义的一些功能
这些也是通过 VisionSDK 框架来实现
而不是说我需要调用到一个
非常非常底层的一个函数
这是不需要的
你只需要了解 VisionSDK
Link 通信的一个函数接口即可
另一方面的话
我们的 VisionSDK 能够非常
快速的集成现有的一些算法
比如说我们将会提供在 DSP 上的 VLIB
像 EVE 上的 EVE SW 等等算法
以及第三方提供的一些图像处理函数库
这些函数可以
非常灵活地集成到 VisionSDK 中
直接通过函数调用的方式来实现
接下来的话由于不同的项目
可能有不同的需求
比如说有的项目是以太网系统
以太网进入到芯片中
有的系统是通过 LVDS 进入到系统中
这里我们提供了一个
非常灵活的一个接口
也就说 VisionSDK
对于 Link 之间的传递
是一个完全解耦和的一个状态
不管你是以太网进来
还是通过读文件
还是通过网络输入
还是通过 LVDS 进来
后面的算法可以完全不需要修改
只需要更换一个 Link 即可
比如说更换 Link 也只需要
将某一个 link 的编号
给修改掉就可以了
最后有关 VisionSDK
在这里不同的处理器
从现在的 TDA3
即使是 TDA3 中的最精简版本
到 TDA2x 或 TDA2P
他们最复杂的版本
只需要在一个配置文件中把它使能
就可以在不同平台间进行一个切换
另外对内存的一个修改
我们也是一个非常灵活的一个配置
可以通过修改某一个配置文件
可以快速的扩大
某一个核心的堆栈大小
或者说是扩大整个系统的内存布局
VisionSDK 目前也在不停的向前发展
在小版本之间 API 是不会发生变化的
在大版本之间可能会有比较大的变化
但是我们目前的 VisionSDK
已经发展到 3.4 版本
在 3.4 之后
我们将不会有特别大的一个变化
所以说你在 3.2 上开发的一个算法
可以非常快速的迁移到 3.4 上
这也是 VisionSDK 的一个优势
另外 VisionSDK 可以支持
很多硬件参考板
比如说 TI 提供的 EVM 板
以及 EVM 板上配套的一些 Vision 子板
或者说是 Vision 子板再加上一个板卡
然后在板卡之上
我们又可以再接入六路全景镜头
以及 TI 代码中支持的一些摄像头
这些摄像头和硬件板卡
可以通过第三方进行购买
然后可以将原生的代码直接运行
就可以看到 TI 算法的一个效果
对于 TDA2 和 TDA2P 或者 TDA2E
可能有一些客户会对用户界面有一些需求
所以说我们也在 VisionSDK 中
提供了 Linux 的支持
在最新版 3.4 版本中
我们加入了 Virtual DRM 功能
这个功能可以使得Linux
独立推送它的屏幕
然后 M4 也可以同时也推送它的屏幕
然后这个屏幕
最终由 M4 来进行一个合成
由它来最终控制这个显示界面
比如说是显示 Linux 界面
还是在 Linux 之上
再叠加 M4 的界面
还是说是他们之间
会有一个透明度的一个变换
这个是目前 3.4 版本带来的一个新功能
这个新功能化带来一个非常大的一个优势
就是极大地提高了整个系统的安全性
比如说 Linux 系统可能是不稳定的
然后我们将显示控制器放在 M4 上
这样的话就可以
在 Linux 出现故障的时候
由M4来接管整个显示
不会使得整个系统全部挂起
在 Linux 上我们目前支持
像 DRM openGL 等等一些
非常复杂的一些用户界面
这些用户界面可以由客户自由定制
此外对于开发过程中
我们可能更需要的是一个
非常快速的一个开发工具
或者说开发方式
我目前在 Vision SDK 里面
也集成了很多以太网的开发方式
比如说以太网的Linux启动
以太网的数据传输
即使是 SYS/BIOS 系统
我们也可以将数据
通过以太网传输到上位机上
由上位机进行一个debug或者说控制
另一方面的话
我们也提供了很多像烧写 Flash
或者说是启动从 QSPI
或者说 SD 卡启动的一些示例程序
这些程序可以快速地帮助大家
在搭建出一个方便调试的一个平台
然后 VisionSDK 目前
我们是从以前的 DVR
或者说是 IP Camera 系统中演进而来
而之后我们也将更多的
投入到像行车记录仪
或者说是车机的一些
复杂自动驾驶系统中
下面我们以这个例子为
以这个图作为一个例子
来从头开始讲一下
Link chain 的一个开发流程
我们可以看到
我们在原型系统设计的过程中
有四路镜头和一个 LCD 屏
比如说我们四路镜头
需要通过 VIP 方式进入到
VIP 方式进入到芯片中
然后由 VPE 进行一个缩放
然后可能会有一些
相对复杂的一些
2D 3D 的一些图像处理
然后这些图像处理
可能还是在原型阶段
只是在 PC 机上验证
还没有在板卡上 DSP
或者 EVE 上进行移植
所以说我们先画出这样的一个
简单的一个数据流
下一步我们根据具体的项目需求
具体把每一个算法每一个步骤
放置在特定的核心上
这里我们假设我们的项目
切换到 AVB 的系统
只需要把 VIP 输入换成 AVB 的收取
然后增加一个图像的解码器
图像解码器输出的图像
和刚才的 VIP 的输出是一致的
它通过 VPE Link 进行一个缩放
通过 IPC Link 进行
核间的 BUFFER 的一个转移传递
传递给 DSP
然后由 DSP 做一些全景的一些计算
然后又通过 IPC 传递到 EVE 里面
进行进一步的一些更复杂的一些计算
最终将拼接的图像通过 Display link
这个 Display link 是运行在 M4 上的
显示到 LCD 屏幕上
这是一个初步的一个系统
也就是说你可以将你PC上的代码
逐步的向这个系统中
DSP 上 EVE 上进行移植
分模块的调用 EVE 上
提供的一些加速函数
DSP 上那些加速函数
或者说直接在 DSP 上
使用 openCV 也可以
接下来的话如果发现
DSP 上的算法太过复杂
导致帧率下降
我们可以快速的将 DSP
刚才位于同一个DSP上的另一个link
我们可以快速的迁移到另一个 DSP 上
这样的修改是非常小的
只需要修改它的 DSP 编号即可
当然普通的项目是不可能只有一个全景的
当整个系统扩充到六路 AVB 全景的时候
包括两路
比如说前置或者说是盲区的一些镜头
这些镜头需要做一些非常复杂的一些算法
在这个时候我们可以加入一些
像数据流控制的一些 Link
包括像上面的那个 sync Link
它可以做一个软件上的一个同步
针对时间戳的一个软件同步
Select Link 可以将前置
或者说是盲区的镜头进行一个挑选
图像挑选出来
分发给 EVE 进行向车道线识别
像交通标志识别等等一些 ADAS 算法
最后可以由传递到用户的一些信息
比如说收取到倒车信号
或者说是收到超声波的一些信息
这些信息都可以由用户的APP进行收取
结合 EVE 算法算出来的结果
绘制在全景图片上
显示通过 Display Link 进行显示
这是一个相对复杂的一个应用
也就是也是目前
客户比较常见的一个应用场景
但是不同功能或者说不同产品
可能整个系统规模可能不完全一样
然后针对 ADAS 的软件
我们刚才也提到说
我们 DSP 上是支持 openCV 的
我们这里提供了非常多的
有关 ADAS 的一些软件结构
首先是我们提供了 CCS 工具
基于 eclipse 的 CCS
可能很多同事也在使用
目前 TDA 系列也是通过 CCS
进行一个 JTAG 调试
此外的话
目前的编译器是支持 C 和 C++ 的
然后所有核心
都会基于一个 SYS/BIOS 操作系统
SYS/BIOS 操作系统是一个
TI 开源的一个操作系统
可以根据客户的不同需求进行定制
对于 SYS/BIOS 的话
TI 有一个非常丰富的一个 workshop
可以在这个链接上找到
或者说在网上直接搜索
因为 SYS/BIOS 和 C6000
都是 TI 开发多年非常成熟的技术
SYS/BIOS 能够提供非常丰富的
多线程和包括像
外设抽象文件系统的读写
还有一些 Task 之间的通信同步
还有图形化的一个
操作系统的一个设计
中断响应和一些外设驱动等等一些
一些 TI 提供的一些驱动
这些都是非常完备的
另一方面的话
对于安全性要求更高的一些系统
我们可以由第三方提供一些
虚拟化的一些支持
另外 TI 提供一些
通用 Linux 的一些颗 Kernel 和驱动
能够保证 TDR
和 TDA 系列芯片能够正常运行
然后此外我们针对 C6000 和 EVE
提供了非常非常丰富的算法加速函数
因为目前绝大多数客户
是不会有非常多的人力物力
进行一个比如说针对 DSP 的一个
非常深度的优化
或者说针对 EVE 的一个
从零开始的学习
所以说我们提供了
非常多的一个加速函数库
这些加速函数库
都可以在 VisionSDK 里面获得
另外由于 VisionSDK 的体积
我还有一些像 DSP Lib
等等一些图像函数库
可以直接从网上下载
快速地集成到 VisionSDK 里面
此外我们对 openGL 也提供了
非常完备的支持
可以帮助客户做到非常复杂的 3D 效果
另外对于开放计算
包括像 openVX openCL openCV
目前我们都在 TDA 系列芯片中有支持
目前 openVX 支持 1.1 版本
openCL openCV 它有两种
在 SYS/BIOS 跟 Linux 上
会有两种架构形式
具体细节可以参考 VisionSDK 里面的设计
下面具体介绍一下
DSP 和 EVE 提供的这些算法类型
由于 DSP 和 EVE 非常擅长于
图像和信号处理方面的计算
所以说我们针对图像和信号处理计算
提供了非常高效非常丰富的一些接口
这些计算也是对整个系统非常
关键的一些环节
比如说像滤波器 FFT
矩阵的一个计算和分解 特殊的变换
数学像 sin cos 一些变换
包括像图像的一个透视变换
或者边缘检测直方图
或者说是二值化
还有图像的压缩和解压缩等等
还有包括像 EVE 提供的
非常高速的一些计算
包括高度集成化的一些
比如说像 Har 特征的计算
HOB 特征的计算
像一些函数接口
这些都是这些函数库
已经通过 API 的方式提供
接下来的话
有关 TI 的 SYS/BIOS
我们可以通过 CCS 工具
可以通过图形化的方式来修改整个系统
通过图形化的方式
获取整个系统的运行状态
有关这部分的资料
大家可以通过网上的
开放的一些资料进行查询
有经验的相关同事
可能会更快的上手整个系统
目前 SYS/BIOS 支持 TDA 芯片中的
DSP ARM 和 EVE 以及 M4
也就是说整个 TDA 芯片中
所有处理器上都是支持 SYS/BIOS 的
每一个处理器上都会运行一个操作系统
下面将会介绍一下
有关 TDA3 ADAS 图像处理的一些功能
首先这边的这几张图
都是我们和供应商
和第三方进行一个合作
实现一些效果
首先是对全景图像的一个运动物体检测
可以将距离车身
五米以内的运动人
和运动物体进行一个检测
以及包括像 APA 这种
高复杂度的一些计算
我们也是能够做到
此外还有基于算法的一些行人检测
车辆检测 盲区检测 的一些 BSD
下面这些资料是来自于TI的第三方
KPIT 他们提供的一些参考设计
比如说像 2D 3D 全景 像运动物体检测
像前行人识别
像停车位的一个检测
这些都是国内有非常多的供应商
可以提供他们所最擅长的一部分
那么我们看 一下 TDA3 能做哪些东西
首先我们将产品分为
以下几个等级
我们对于最简单的 3D 全景
和单路的行人检测
我们只需要一颗低频的 DSP
和一颗低频的 EVE 就可以实现
其中 PD 的话帧率在 10FPS
然后对于更复杂的系统
可能会要求有三路的 mod
基于全景三路镜头的一个 mod
可能需要一个中等频率的 DSP
和一个中等频率的 EVE
就可以实现
对于更复杂一些的
像一个 3D 全景
还需要带有三路的 mod
以及单路的行人检测
我们可能需要一个中高频的一个 DSP
或者说一个以及一个中高频的 EVE
可以做到十帧的一个 mod
和十帧的一个 PD
对于高端平台可能需要三路的 mod
这里面还包括了 3D 全景
以及单路的 PD 和两路的 psd
我们可能需要两颗高频的 DSP
和一颗高频的 EVE
这样就可以实现一个
非常复杂的一个 ADAS 功能
同时整个系统的 BOM 成本将会非常低
接下来的话是介绍一下
TI 在深度学习方面的一些
目前的成果和以后的规划
深度学习是目前各个车厂
以及 TIER1 包括像一些互联网公司
都在强调的一些功能
因为深度学习有关
将会有关自动驾驶
包括像语义的识别
整个空间的重建
以及自动驾驶决策的制定
这些都是非常相关的
所以说 TI 利用 DSP 和 EVE
进行了深度学习函数库的开发
也就是说我们可以看到最左
从左边开始是一个训练的过程
训练的过程是在 PC 上
通过我们目前最常见的像 flow
像 caffe 和 torch 等等一些
训练框架训练出一个结果
将这个结果通过上面 TI 开放的一个
模型转换工具
通过这个工具
我们可以将现有的一些
非常常见的深度学习网络
包括各个客户他们自己的
一些定制化的一些网络
包括像 TI 优化过的一些网络
这些网络的训练结果
转换成 TI TDA 芯片能够识别的格式
将这个参数文件和网络文件
放入在 TDA 芯片中
TDA 芯片就可以实现这个网络的功能
并且在下一步下一代
或者说是下几个版本中
我们可能会有 open VX1.2 等版本的升级
这些版本的升级
将会更多的支持深度学习的一些
函数接口或者说是网络层
然后这里是 TI 在 2017 年 CES 上
展出的一个深度学习相关的 Demo
这个 Demo 是运行在 TDA2x 上
它做到了一个语义分割
做到了一个 1024×512 的
一个语义分割的一个实时的计算
整个芯片发热量非常小
只用到了 EVE
两颗 DSP 和两颗 A15 都是空闲的
整个语义分割
包含 41 层 对五个类型进行一个识别
最终输出每一个像素点它的分类结果
可以看出目前 TI 的深度学习
已经是一个 ready 的状态
可以接收各个供应商
或者说是算法研究团队
他们提出的各种各样的网络
当然这些网络是需要进行一个
嵌入式平台的优化
因为嵌入式平台的计算量
并不是PC平台上的
和 PC 平台并不是一个数量级
这是有关深度学习方面的
OK 谢谢各位抽出时间参加这次 TI 培训
直播的视频和演讲材料
将会在一周内发布在 E2E 社区
然后大家可以通过留言
或者说是有商务合作的话
可以通过左下角这个邮箱提出您的问题
下面的话我我会在留言区进行一个回复
接下来的话我将 详细介绍一下 TDA3x 有关快速启动的一些特点 TDA3x 作为一个单片机 它可以做一个非常快速的启动 因为里面运行的全部都是RTOS 也就是TI提供的 SYS/BIOS 操作系统 在这颗芯片里面我们没有Linux 没有窗口管理 只有非常可靠非常稳定 运行速度非常快的一个实时操作系统 并且这个系统完全可以 向更高安全等级的系统中集成 从冷启动到3D显示 我们最高纪录可以达到1.8秒 也就说在上电1.8秒之后 全景拼接图像就已经能够往外输出 这一点八秒钟 我们还包含了摄像头的500毫秒的配置 如果说有的摄像头 可以更短的时间初始化 我们将会做到更快的速度 另一方面的话 为了适应车机对高安全性 和快速的 CAN 响应的一些需求 我们目前是可以做到 在80毫秒内做到 CAN 的一个冷启动 也就是说 TDA3 具有单片机级的 一个软件的简易程度和稳定程度 也有像处理器及的一个性能 提供了 DSP 和 EVE 非常强大的一个计算能力 这个是目前 TDA3 3D 全景的一个最大优势 下面的话将会详细介绍一下 TI 提供的针对 TDA 芯片家族的 一个统一的软件架构 这张图画出的是 TI RTOS 软件架构 也就是说所有核心上运行的 全部是 TI 的 RTOS 即使是包含 A15 的 TDA2 系列 也就是说在 TDA2 中 才会包含有A15核心 然后其他核心是 TDA2 和 TDA3 所共有的 在这张图中 所有的核心将会运行 SYS/BIOS 操作系统 在操作系统之上 我们又提供了非常丰富全面的驱动层 像核间通信 IPC 像网络的 NDK AVB 和其他的像 I2C 的一些驱动 以及包括图像编解码 还有图像视频处理的一些加速函数库 包括像目前学术界用的比较多的 open CV 和open CL一些软件框架 这些都是包含在我们整个系统框架内的 在此基础之上 我们提供了 VisionSDK 的框架 也就是说所有的算法 将会成为一个单独的个体 每一个个体称为一个 Link 每一个 Link 能够完成他自己 所需要做的一件事情 然后整个软件功能 将会由多个 Link 进行串联 形成一个数据流 从数据输入由数据驱动 按照节拍进行计算 最终到显示的输出 整个数据流的控制 可以在 M4 上 也可以在 A15 上 这是基于 RTOS 的一个软件架构 这张图是基于通用 Linux 软件架构 也就是说 VisionSDK 我们既支持 RTOS 的操作系统 也支持 Linux 操作系统 对于 Linux 操作系统 我们必须运行在 A15 上 因为 M4 目前是不支持 Linux 操作系统 也就是说这一页 PPT 是针对 TDA2x TDA2E 和 TDA2P 进行讲解的 我们在 A15 上将会运行 Linux 操作系统 在 Linux 之上 我们提供基于 Linux 的 IPC 驱动 基于 Linux 的硬件驱动 包括像 I2C 包括像 SPI 包括像摄像头的一些数据输入驱动 这些我们都是支持的 然后另一方面的话 其他核心像 M4 或 C66 DSP 或者 EVE 他们的软件架构 和 RTOS 的软件架构几乎一致 在这种架构情况下 所有的 Link 同样是完全相同的 只是在 Linux 情况下 Linux 的 Link 是运行在 Linux 用户台 整个芯片整个系统的功能 也就是也是在 Linux 上 进行一个创建控制 从这些整个统一架构可以看出 TDA2 TDA3 整个 TDA 芯片系列 他们的软件架构是可裁剪的 也就是说我有这个核心的时候 可以把这个核心带上 如果没有这个核心的时候 可以直接把它去掉 然后整个系统的控制 都是由某一个核心进行一个分发 然后整个系统运行过程中 是只有数据流进行一个驱动 这也是 VisionSDK 的一大特点 那么 VisionSDK 在哪里下载呢 如果你可以通过搜索引擎搜索的话 你可以搜尝试搜索 processorsdk vision processorsdk vision 是 VisionSDK 的一个全称 目前是开放下载的 可以直接从 TI 的官网 进行下载安装和编译 此外对于 VisionSDK 和整个芯片 我们 TI 将会提供一个全球团队 7×24 小时的一个技术支持 也就是我们 TI 最常用的一个论坛 叫做 E2E 在 E2E 论坛你可以通过 processors 和 automotive processors 寻找 DRA 系列和 TDA 系列 对于每一个系列 我们都可以提出与你们产品相关 或者说与软件硬件相关的一些问题 这些问题将会由我们国内国外 印度美国欧洲各个团队 进行全天候的支持 尽可能保证每一个问题 有人问就一定会有人答 那么有的人就会比较好奇 VisionSDK 为什么要用 VisionSDK 因为在多核异构的情况下 软件才是整个系统的 工作最复杂的部分 按照我们的经验 非常多的客户可能只用过像 只有 ARM A 系列处理器的芯片 通过堆叠 A 系列处理器的数量 来提高整个芯片的性能 而 TI 提出了一种异构多核的情况 每一个核心做它所对应的一件事情 这样的话能够充分发挥整个芯片 各个核心的高效的计算能力 而发挥异构多核的一个能力 所带来的问题就是 软件结构将会非常复杂 比如说你的数据有可能从DSP到A15 A15完之后再回到DSP 有可能再去到M4 或者说再去到 EVE 来来回回可能要来回折腾 这样的话对于软件内存 还有一些通讯结构 这些提出了非常高的要求 所以说 TI 针对异构多核的系统 从过去的DSP系统中 积累出一套比较完善的一套软件结构 目前我们将它称之为 VisionSDK 目前可以支持客户开发 非常多种的算法同时运行 目前我们接触到的客户 有开发十几个或者二十几个算法的 或者说上二三十个 link 同时存在于整个系统中 每一个处理器上的 link 数量 是没有限制的 只要说你的内存或者说是处理能力足够 软件上是没有限制的 另一方面的话 我们由于异构多核 所以说 EVE 它有一部分擅长的计算 DSP 也有他所擅长的计算 所以说我们可以将 绝大多数 EVE 最擅长的计算 分配到 EVE 上进行 计算完成之后我们再返回给 DSP 这样充分发挥不同的核心 不同的计算能力 这样也有利于车厂 或者 TIER1 将部分的核心交由供应商来深度开发 然后我们将目前这一套 LINK 和 usecase 的一套软件架构 称为 Links and Chains 也就是说每一个算法功能 我们称为一个 link 最后我们会将所有的 Link 连成一个 chain 一个数据流 来实现整个功能 此外 VisionSDK 还提供了 非常完备的像编译操作系统 核间通信 驱动 网络协议栈 编码器和一些算法加速器在内的 各种各样的软件 SDK 包 这些包如果说在传统的系统中开发 你可能要一个一个往系统中集成 但是 VisionSDK 已经 全部把他们都集成好了 VisionSDK 的目标是 让更多的客户能够快速的使用 DSP 或者说 EVE 算法加速函数 来快速的验证它们的原型样机 此外提供一个和平台无关 或者说和芯片型号无关的一个 API 也就说你相同 同样一个 Link 你可以在 TDA2 TDA3 TDA2P 以及 TDA 以后的 下一代产品中使用 另一方面的话 VisionSDK 目前 设计是非常高度优化的 我们将内存拷贝和内存申请释放 降低到最低程度 这样的话能够保证 即使你的系统中集成了30到50个算法 都不会由于框架的开销 或者说是每秒钟一千次的调用 带来非常复杂的问题 目前 VisionSDK 已经在 欧洲中国美国全世界各个车厂中 大量的车型都在量产 所以说 VisionSDK 的代码质量是可靠的 下面将具体讲解一下 就是有关 VisionSDK 的一些功能特点 比如说设计的一些 比较有优势的一些功能 首先是我们整个框架 提供了相当于一个中间件的一个功能 它能够帮助客户在不同核心上 运行相同的代码 或者说是快速的在某些核心上开发代码 而不需要从零开始学习这一科 这一个比如说像 EVE 的一个编程 完全摒弃了这一套传统的流程 我们只需要在这一套框架之上进行开发 比如说你的内存申请内存释放 你的一些上一级传来的数据 和你将会发出去的下一级数据 这些操作都会将统一的接口进行一个封装 而且即使你是非常复杂的算法 我们在提供的 Link 中 也会提供一些现有的一些 比如说像开关的一些 Link 可这些 Link 可以控制一些算法 在不需要运行的时候关闭掉 另一方面的话 我们目前由印度和美国团队 共同开发的 VisionSDK 具有非常高的软件质量 已经有非常多的车厂都在量产 并且在设计的时候 已经考虑到汽车中的一些要求 比如说像在运行过程中 我们是没有动态内存申请释放的 另一方面的话 我们也有非常多的一些 静态的代码分析 能够保证我们 deliver 或者 release 出去的 VisionSDK 是一个非常可靠的一个系统 这里需要强调一点 就是目前 VisionSDK 里面 提供了很多图像处理算法 这些算法可以供大家进行参考 但是并不供客户进行一个量产 嵌入式系统中最复杂的可能就是 内存管理和 DMA 的控制 这一部分是还有核间通信 这一部分也是 VisionSDK 提供的一个一大特点 首先我们所有的每一个核心 都会有一小块区域 用来存放它的数据段和代码段 然后剩下的一大块区域 将会由某一个核心进行一个统一管理 所有的核心凡是需要申请释放内存的时候 都需要经由这颗处理器来处理 这样的话所有的 buffer 都将被统一管理 然后核心与核心之间的数据传递 也不存在内存拷贝 只需要在核间进行一个指针的传递 由于整个系统在内存上 是一个共享的一个区域 所以说直接通过指针的传递 就可以实现一个非常高效的一个核间通信 另一方面的话 DMA 我们在 VisionSDK 里面 提供了非常灵活非常方便的一些 API 调用 避免了传统的配置结构体的方式 另一方面不仅是数据流 控制流也是一个系统最重要的一个环节 我们目前 VisionSDK 也可以用户增加他自己的一个控制流程 比如说发消息或者说是 其他一些自定义的一些功能 这些也是通过 VisionSDK 框架来实现 而不是说我需要调用到一个 非常非常底层的一个函数 这是不需要的 你只需要了解 VisionSDK Link 通信的一个函数接口即可 另一方面的话 我们的 VisionSDK 能够非常 快速的集成现有的一些算法 比如说我们将会提供在 DSP 上的 VLIB 像 EVE 上的 EVE SW 等等算法 以及第三方提供的一些图像处理函数库 这些函数可以 非常灵活地集成到 VisionSDK 中 直接通过函数调用的方式来实现 接下来的话由于不同的项目 可能有不同的需求 比如说有的项目是以太网系统 以太网进入到芯片中 有的系统是通过 LVDS 进入到系统中 这里我们提供了一个 非常灵活的一个接口 也就说 VisionSDK 对于 Link 之间的传递 是一个完全解耦和的一个状态 不管你是以太网进来 还是通过读文件 还是通过网络输入 还是通过 LVDS 进来 后面的算法可以完全不需要修改 只需要更换一个 Link 即可 比如说更换 Link 也只需要 将某一个 link 的编号 给修改掉就可以了 最后有关 VisionSDK 在这里不同的处理器 从现在的 TDA3 即使是 TDA3 中的最精简版本 到 TDA2x 或 TDA2P 他们最复杂的版本 只需要在一个配置文件中把它使能 就可以在不同平台间进行一个切换 另外对内存的一个修改 我们也是一个非常灵活的一个配置 可以通过修改某一个配置文件 可以快速的扩大 某一个核心的堆栈大小 或者说是扩大整个系统的内存布局 VisionSDK 目前也在不停的向前发展 在小版本之间 API 是不会发生变化的 在大版本之间可能会有比较大的变化 但是我们目前的 VisionSDK 已经发展到 3.4 版本 在 3.4 之后 我们将不会有特别大的一个变化 所以说你在 3.2 上开发的一个算法 可以非常快速的迁移到 3.4 上 这也是 VisionSDK 的一个优势 另外 VisionSDK 可以支持 很多硬件参考板 比如说 TI 提供的 EVM 板 以及 EVM 板上配套的一些 Vision 子板 或者说是 Vision 子板再加上一个板卡 然后在板卡之上 我们又可以再接入六路全景镜头 以及 TI 代码中支持的一些摄像头 这些摄像头和硬件板卡 可以通过第三方进行购买 然后可以将原生的代码直接运行 就可以看到 TI 算法的一个效果 对于 TDA2 和 TDA2P 或者 TDA2E 可能有一些客户会对用户界面有一些需求 所以说我们也在 VisionSDK 中 提供了 Linux 的支持 在最新版 3.4 版本中 我们加入了 Virtual DRM 功能 这个功能可以使得Linux 独立推送它的屏幕 然后 M4 也可以同时也推送它的屏幕 然后这个屏幕 最终由 M4 来进行一个合成 由它来最终控制这个显示界面 比如说是显示 Linux 界面 还是在 Linux 之上 再叠加 M4 的界面 还是说是他们之间 会有一个透明度的一个变换 这个是目前 3.4 版本带来的一个新功能 这个新功能化带来一个非常大的一个优势 就是极大地提高了整个系统的安全性 比如说 Linux 系统可能是不稳定的 然后我们将显示控制器放在 M4 上 这样的话就可以 在 Linux 出现故障的时候 由M4来接管整个显示 不会使得整个系统全部挂起 在 Linux 上我们目前支持 像 DRM openGL 等等一些 非常复杂的一些用户界面 这些用户界面可以由客户自由定制 此外对于开发过程中 我们可能更需要的是一个 非常快速的一个开发工具 或者说开发方式 我目前在 Vision SDK 里面 也集成了很多以太网的开发方式 比如说以太网的Linux启动 以太网的数据传输 即使是 SYS/BIOS 系统 我们也可以将数据 通过以太网传输到上位机上 由上位机进行一个debug或者说控制 另一方面的话 我们也提供了很多像烧写 Flash 或者说是启动从 QSPI 或者说 SD 卡启动的一些示例程序 这些程序可以快速地帮助大家 在搭建出一个方便调试的一个平台 然后 VisionSDK 目前 我们是从以前的 DVR 或者说是 IP Camera 系统中演进而来 而之后我们也将更多的 投入到像行车记录仪 或者说是车机的一些 复杂自动驾驶系统中 下面我们以这个例子为 以这个图作为一个例子 来从头开始讲一下 Link chain 的一个开发流程 我们可以看到 我们在原型系统设计的过程中 有四路镜头和一个 LCD 屏 比如说我们四路镜头 需要通过 VIP 方式进入到 VIP 方式进入到芯片中 然后由 VPE 进行一个缩放 然后可能会有一些 相对复杂的一些 2D 3D 的一些图像处理 然后这些图像处理 可能还是在原型阶段 只是在 PC 机上验证 还没有在板卡上 DSP 或者 EVE 上进行移植 所以说我们先画出这样的一个 简单的一个数据流 下一步我们根据具体的项目需求 具体把每一个算法每一个步骤 放置在特定的核心上 这里我们假设我们的项目 切换到 AVB 的系统 只需要把 VIP 输入换成 AVB 的收取 然后增加一个图像的解码器 图像解码器输出的图像 和刚才的 VIP 的输出是一致的 它通过 VPE Link 进行一个缩放 通过 IPC Link 进行 核间的 BUFFER 的一个转移传递 传递给 DSP 然后由 DSP 做一些全景的一些计算 然后又通过 IPC 传递到 EVE 里面 进行进一步的一些更复杂的一些计算 最终将拼接的图像通过 Display link 这个 Display link 是运行在 M4 上的 显示到 LCD 屏幕上 这是一个初步的一个系统 也就是说你可以将你PC上的代码 逐步的向这个系统中 DSP 上 EVE 上进行移植 分模块的调用 EVE 上 提供的一些加速函数 DSP 上那些加速函数 或者说直接在 DSP 上 使用 openCV 也可以 接下来的话如果发现 DSP 上的算法太过复杂 导致帧率下降 我们可以快速的将 DSP 刚才位于同一个DSP上的另一个link 我们可以快速的迁移到另一个 DSP 上 这样的修改是非常小的 只需要修改它的 DSP 编号即可 当然普通的项目是不可能只有一个全景的 当整个系统扩充到六路 AVB 全景的时候 包括两路 比如说前置或者说是盲区的一些镜头 这些镜头需要做一些非常复杂的一些算法 在这个时候我们可以加入一些 像数据流控制的一些 Link 包括像上面的那个 sync Link 它可以做一个软件上的一个同步 针对时间戳的一个软件同步 Select Link 可以将前置 或者说是盲区的镜头进行一个挑选 图像挑选出来 分发给 EVE 进行向车道线识别 像交通标志识别等等一些 ADAS 算法 最后可以由传递到用户的一些信息 比如说收取到倒车信号 或者说是收到超声波的一些信息 这些信息都可以由用户的APP进行收取 结合 EVE 算法算出来的结果 绘制在全景图片上 显示通过 Display Link 进行显示 这是一个相对复杂的一个应用 也就是也是目前 客户比较常见的一个应用场景 但是不同功能或者说不同产品 可能整个系统规模可能不完全一样 然后针对 ADAS 的软件 我们刚才也提到说 我们 DSP 上是支持 openCV 的 我们这里提供了非常多的 有关 ADAS 的一些软件结构 首先是我们提供了 CCS 工具 基于 eclipse 的 CCS 可能很多同事也在使用 目前 TDA 系列也是通过 CCS 进行一个 JTAG 调试 此外的话 目前的编译器是支持 C 和 C++ 的 然后所有核心 都会基于一个 SYS/BIOS 操作系统 SYS/BIOS 操作系统是一个 TI 开源的一个操作系统 可以根据客户的不同需求进行定制 对于 SYS/BIOS 的话 TI 有一个非常丰富的一个 workshop 可以在这个链接上找到 或者说在网上直接搜索 因为 SYS/BIOS 和 C6000 都是 TI 开发多年非常成熟的技术 SYS/BIOS 能够提供非常丰富的 多线程和包括像 外设抽象文件系统的读写 还有一些 Task 之间的通信同步 还有图形化的一个 操作系统的一个设计 中断响应和一些外设驱动等等一些 一些 TI 提供的一些驱动 这些都是非常完备的 另一方面的话 对于安全性要求更高的一些系统 我们可以由第三方提供一些 虚拟化的一些支持 另外 TI 提供一些 通用 Linux 的一些颗 Kernel 和驱动 能够保证 TDR 和 TDA 系列芯片能够正常运行 然后此外我们针对 C6000 和 EVE 提供了非常非常丰富的算法加速函数 因为目前绝大多数客户 是不会有非常多的人力物力 进行一个比如说针对 DSP 的一个 非常深度的优化 或者说针对 EVE 的一个 从零开始的学习 所以说我们提供了 非常多的一个加速函数库 这些加速函数库 都可以在 VisionSDK 里面获得 另外由于 VisionSDK 的体积 我还有一些像 DSP Lib 等等一些图像函数库 可以直接从网上下载 快速地集成到 VisionSDK 里面 此外我们对 openGL 也提供了 非常完备的支持 可以帮助客户做到非常复杂的 3D 效果 另外对于开放计算 包括像 openVX openCL openCV 目前我们都在 TDA 系列芯片中有支持 目前 openVX 支持 1.1 版本 openCL openCV 它有两种 在 SYS/BIOS 跟 Linux 上 会有两种架构形式 具体细节可以参考 VisionSDK 里面的设计 下面具体介绍一下 DSP 和 EVE 提供的这些算法类型 由于 DSP 和 EVE 非常擅长于 图像和信号处理方面的计算 所以说我们针对图像和信号处理计算 提供了非常高效非常丰富的一些接口 这些计算也是对整个系统非常 关键的一些环节 比如说像滤波器 FFT 矩阵的一个计算和分解 特殊的变换 数学像 sin cos 一些变换 包括像图像的一个透视变换 或者边缘检测直方图 或者说是二值化 还有图像的压缩和解压缩等等 还有包括像 EVE 提供的 非常高速的一些计算 包括高度集成化的一些 比如说像 Har 特征的计算 HOB 特征的计算 像一些函数接口 这些都是这些函数库 已经通过 API 的方式提供 接下来的话 有关 TI 的 SYS/BIOS 我们可以通过 CCS 工具 可以通过图形化的方式来修改整个系统 通过图形化的方式 获取整个系统的运行状态 有关这部分的资料 大家可以通过网上的 开放的一些资料进行查询 有经验的相关同事 可能会更快的上手整个系统 目前 SYS/BIOS 支持 TDA 芯片中的 DSP ARM 和 EVE 以及 M4 也就是说整个 TDA 芯片中 所有处理器上都是支持 SYS/BIOS 的 每一个处理器上都会运行一个操作系统 下面将会介绍一下 有关 TDA3 ADAS 图像处理的一些功能 首先这边的这几张图 都是我们和供应商 和第三方进行一个合作 实现一些效果 首先是对全景图像的一个运动物体检测 可以将距离车身 五米以内的运动人 和运动物体进行一个检测 以及包括像 APA 这种 高复杂度的一些计算 我们也是能够做到 此外还有基于算法的一些行人检测 车辆检测 盲区检测 的一些 BSD 下面这些资料是来自于TI的第三方 KPIT 他们提供的一些参考设计 比如说像 2D 3D 全景 像运动物体检测 像前行人识别 像停车位的一个检测 这些都是国内有非常多的供应商 可以提供他们所最擅长的一部分 那么我们看 一下 TDA3 能做哪些东西 首先我们将产品分为 以下几个等级 我们对于最简单的 3D 全景 和单路的行人检测 我们只需要一颗低频的 DSP 和一颗低频的 EVE 就可以实现 其中 PD 的话帧率在 10FPS 然后对于更复杂的系统 可能会要求有三路的 mod 基于全景三路镜头的一个 mod 可能需要一个中等频率的 DSP 和一个中等频率的 EVE 就可以实现 对于更复杂一些的 像一个 3D 全景 还需要带有三路的 mod 以及单路的行人检测 我们可能需要一个中高频的一个 DSP 或者说一个以及一个中高频的 EVE 可以做到十帧的一个 mod 和十帧的一个 PD 对于高端平台可能需要三路的 mod 这里面还包括了 3D 全景 以及单路的 PD 和两路的 psd 我们可能需要两颗高频的 DSP 和一颗高频的 EVE 这样就可以实现一个 非常复杂的一个 ADAS 功能 同时整个系统的 BOM 成本将会非常低 接下来的话是介绍一下 TI 在深度学习方面的一些 目前的成果和以后的规划 深度学习是目前各个车厂 以及 TIER1 包括像一些互联网公司 都在强调的一些功能 因为深度学习有关 将会有关自动驾驶 包括像语义的识别 整个空间的重建 以及自动驾驶决策的制定 这些都是非常相关的 所以说 TI 利用 DSP 和 EVE 进行了深度学习函数库的开发 也就是说我们可以看到最左 从左边开始是一个训练的过程 训练的过程是在 PC 上 通过我们目前最常见的像 flow 像 caffe 和 torch 等等一些 训练框架训练出一个结果 将这个结果通过上面 TI 开放的一个 模型转换工具 通过这个工具 我们可以将现有的一些 非常常见的深度学习网络 包括各个客户他们自己的 一些定制化的一些网络 包括像 TI 优化过的一些网络 这些网络的训练结果 转换成 TI TDA 芯片能够识别的格式 将这个参数文件和网络文件 放入在 TDA 芯片中 TDA 芯片就可以实现这个网络的功能 并且在下一步下一代 或者说是下几个版本中 我们可能会有 open VX1.2 等版本的升级 这些版本的升级 将会更多的支持深度学习的一些 函数接口或者说是网络层 然后这里是 TI 在 2017 年 CES 上 展出的一个深度学习相关的 Demo 这个 Demo 是运行在 TDA2x 上 它做到了一个语义分割 做到了一个 1024×512 的 一个语义分割的一个实时的计算 整个芯片发热量非常小 只用到了 EVE 两颗 DSP 和两颗 A15 都是空闲的 整个语义分割 包含 41 层 对五个类型进行一个识别 最终输出每一个像素点它的分类结果 可以看出目前 TI 的深度学习 已经是一个 ready 的状态 可以接收各个供应商 或者说是算法研究团队 他们提出的各种各样的网络 当然这些网络是需要进行一个 嵌入式平台的优化 因为嵌入式平台的计算量 并不是PC平台上的 和 PC 平台并不是一个数量级 这是有关深度学习方面的 OK 谢谢各位抽出时间参加这次 TI 培训 直播的视频和演讲材料 将会在一周内发布在 E2E 社区 然后大家可以通过留言 或者说是有商务合作的话 可以通过左下角这个邮箱提出您的问题 下面的话我我会在留言区进行一个回复
接下来的话我将
详细介绍一下 TDA3x
有关快速启动的一些特点
TDA3x 作为一个单片机
它可以做一个非常快速的启动
因为里面运行的全部都是RTOS
也就是TI提供的 SYS/BIOS 操作系统
在这颗芯片里面我们没有Linux
没有窗口管理
只有非常可靠非常稳定
运行速度非常快的一个实时操作系统
并且这个系统完全可以
向更高安全等级的系统中集成
从冷启动到3D显示
我们最高纪录可以达到1.8秒
也就说在上电1.8秒之后
全景拼接图像就已经能够往外输出
这一点八秒钟
我们还包含了摄像头的500毫秒的配置
如果说有的摄像头
可以更短的时间初始化
我们将会做到更快的速度
另一方面的话
为了适应车机对高安全性
和快速的 CAN 响应的一些需求
我们目前是可以做到
在80毫秒内做到 CAN 的一个冷启动
也就是说 TDA3 具有单片机级的
一个软件的简易程度和稳定程度
也有像处理器及的一个性能
提供了 DSP 和 EVE
非常强大的一个计算能力
这个是目前 TDA3
3D 全景的一个最大优势
下面的话将会详细介绍一下
TI 提供的针对 TDA 芯片家族的
一个统一的软件架构
这张图画出的是 TI RTOS 软件架构
也就是说所有核心上运行的
全部是 TI 的 RTOS
即使是包含 A15 的 TDA2 系列
也就是说在 TDA2 中
才会包含有A15核心
然后其他核心是 TDA2 和 TDA3 所共有的
在这张图中
所有的核心将会运行 SYS/BIOS 操作系统
在操作系统之上
我们又提供了非常丰富全面的驱动层
像核间通信 IPC
像网络的 NDK AVB
和其他的像 I2C 的一些驱动
以及包括图像编解码
还有图像视频处理的一些加速函数库
包括像目前学术界用的比较多的
open CV 和open CL一些软件框架
这些都是包含在我们整个系统框架内的
在此基础之上
我们提供了 VisionSDK 的框架
也就是说所有的算法
将会成为一个单独的个体
每一个个体称为一个 Link
每一个 Link 能够完成他自己
所需要做的一件事情
然后整个软件功能
将会由多个 Link 进行串联
形成一个数据流
从数据输入由数据驱动
按照节拍进行计算
最终到显示的输出
整个数据流的控制
可以在 M4 上
也可以在 A15 上
这是基于 RTOS 的一个软件架构
这张图是基于通用 Linux 软件架构
也就是说 VisionSDK 我们既支持
RTOS 的操作系统
也支持 Linux 操作系统
对于 Linux 操作系统
我们必须运行在 A15 上
因为 M4 目前是不支持 Linux 操作系统
也就是说这一页 PPT
是针对 TDA2x TDA2E
和 TDA2P 进行讲解的
我们在 A15 上将会运行 Linux 操作系统
在 Linux 之上
我们提供基于 Linux 的 IPC 驱动
基于 Linux 的硬件驱动
包括像 I2C 包括像 SPI
包括像摄像头的一些数据输入驱动
这些我们都是支持的
然后另一方面的话
其他核心像 M4
或 C66 DSP 或者 EVE
他们的软件架构
和 RTOS 的软件架构几乎一致
在这种架构情况下
所有的 Link 同样是完全相同的
只是在 Linux 情况下
Linux 的 Link 是运行在 Linux 用户台
整个芯片整个系统的功能
也就是也是在 Linux 上
进行一个创建控制
从这些整个统一架构可以看出
TDA2 TDA3 整个 TDA 芯片系列
他们的软件架构是可裁剪的
也就是说我有这个核心的时候
可以把这个核心带上
如果没有这个核心的时候
可以直接把它去掉
然后整个系统的控制
都是由某一个核心进行一个分发
然后整个系统运行过程中
是只有数据流进行一个驱动
这也是 VisionSDK 的一大特点
那么 VisionSDK 在哪里下载呢
如果你可以通过搜索引擎搜索的话
你可以搜尝试搜索 processorsdk vision
processorsdk vision 是
VisionSDK 的一个全称
目前是开放下载的
可以直接从 TI 的官网
进行下载安装和编译
此外对于 VisionSDK 和整个芯片
我们 TI 将会提供一个全球团队
7×24 小时的一个技术支持
也就是我们 TI 最常用的一个论坛
叫做 E2E
在 E2E 论坛你可以通过 processors
和 automotive processors
寻找 DRA 系列和 TDA 系列
对于每一个系列
我们都可以提出与你们产品相关
或者说与软件硬件相关的一些问题
这些问题将会由我们国内国外
印度美国欧洲各个团队
进行全天候的支持
尽可能保证每一个问题
有人问就一定会有人答
那么有的人就会比较好奇
VisionSDK 为什么要用 VisionSDK
因为在多核异构的情况下
软件才是整个系统的
工作最复杂的部分
按照我们的经验
非常多的客户可能只用过像
只有 ARM A 系列处理器的芯片
通过堆叠 A 系列处理器的数量
来提高整个芯片的性能
而 TI 提出了一种异构多核的情况
每一个核心做它所对应的一件事情
这样的话能够充分发挥整个芯片
各个核心的高效的计算能力
而发挥异构多核的一个能力
所带来的问题就是
软件结构将会非常复杂
比如说你的数据有可能从DSP到A15
A15完之后再回到DSP
有可能再去到M4
或者说再去到 EVE
来来回回可能要来回折腾
这样的话对于软件内存
还有一些通讯结构
这些提出了非常高的要求
所以说 TI 针对异构多核的系统
从过去的DSP系统中
积累出一套比较完善的一套软件结构
目前我们将它称之为 VisionSDK
目前可以支持客户开发
非常多种的算法同时运行
目前我们接触到的客户
有开发十几个或者二十几个算法的
或者说上二三十个 link
同时存在于整个系统中
每一个处理器上的 link 数量
是没有限制的
只要说你的内存或者说是处理能力足够
软件上是没有限制的
另一方面的话
我们由于异构多核
所以说 EVE 它有一部分擅长的计算
DSP 也有他所擅长的计算
所以说我们可以将
绝大多数 EVE 最擅长的计算
分配到 EVE 上进行
计算完成之后我们再返回给 DSP
这样充分发挥不同的核心
不同的计算能力
这样也有利于车厂 或者 TIER1
将部分的核心交由供应商来深度开发
然后我们将目前这一套 LINK
和 usecase 的一套软件架构
称为 Links and Chains
也就是说每一个算法功能
我们称为一个 link
最后我们会将所有的 Link
连成一个 chain 一个数据流
来实现整个功能
此外 VisionSDK 还提供了
非常完备的像编译操作系统
核间通信 驱动 网络协议栈
编码器和一些算法加速器在内的
各种各样的软件 SDK 包
这些包如果说在传统的系统中开发
你可能要一个一个往系统中集成
但是 VisionSDK 已经
全部把他们都集成好了
VisionSDK 的目标是
让更多的客户能够快速的使用 DSP
或者说 EVE 算法加速函数
来快速的验证它们的原型样机
此外提供一个和平台无关
或者说和芯片型号无关的一个 API
也就说你相同
同样一个 Link 你可以在
TDA2 TDA3 TDA2P 以及 TDA 以后的
下一代产品中使用
另一方面的话
VisionSDK 目前
设计是非常高度优化的
我们将内存拷贝和内存申请释放
降低到最低程度
这样的话能够保证
即使你的系统中集成了30到50个算法
都不会由于框架的开销
或者说是每秒钟一千次的调用
带来非常复杂的问题
目前 VisionSDK 已经在
欧洲中国美国全世界各个车厂中
大量的车型都在量产
所以说 VisionSDK 的代码质量是可靠的
下面将具体讲解一下
就是有关 VisionSDK 的一些功能特点
比如说设计的一些
比较有优势的一些功能
首先是我们整个框架
提供了相当于一个中间件的一个功能
它能够帮助客户在不同核心上
运行相同的代码
或者说是快速的在某些核心上开发代码
而不需要从零开始学习这一科
这一个比如说像 EVE 的一个编程
完全摒弃了这一套传统的流程
我们只需要在这一套框架之上进行开发
比如说你的内存申请内存释放
你的一些上一级传来的数据
和你将会发出去的下一级数据
这些操作都会将统一的接口进行一个封装
而且即使你是非常复杂的算法
我们在提供的 Link 中
也会提供一些现有的一些
比如说像开关的一些 Link
可这些 Link 可以控制一些算法
在不需要运行的时候关闭掉
另一方面的话
我们目前由印度和美国团队
共同开发的 VisionSDK
具有非常高的软件质量
已经有非常多的车厂都在量产
并且在设计的时候
已经考虑到汽车中的一些要求
比如说像在运行过程中
我们是没有动态内存申请释放的
另一方面的话
我们也有非常多的一些
静态的代码分析
能够保证我们 deliver
或者 release 出去的 VisionSDK
是一个非常可靠的一个系统
这里需要强调一点
就是目前 VisionSDK 里面
提供了很多图像处理算法
这些算法可以供大家进行参考
但是并不供客户进行一个量产
嵌入式系统中最复杂的可能就是
内存管理和 DMA 的控制
这一部分是还有核间通信
这一部分也是 VisionSDK
提供的一个一大特点
首先我们所有的每一个核心
都会有一小块区域
用来存放它的数据段和代码段
然后剩下的一大块区域
将会由某一个核心进行一个统一管理
所有的核心凡是需要申请释放内存的时候
都需要经由这颗处理器来处理
这样的话所有的 buffer 都将被统一管理
然后核心与核心之间的数据传递
也不存在内存拷贝
只需要在核间进行一个指针的传递
由于整个系统在内存上
是一个共享的一个区域
所以说直接通过指针的传递
就可以实现一个非常高效的一个核间通信
另一方面的话 DMA
我们在 VisionSDK 里面
提供了非常灵活非常方便的一些 API 调用
避免了传统的配置结构体的方式
另一方面不仅是数据流
控制流也是一个系统最重要的一个环节
我们目前 VisionSDK
也可以用户增加他自己的一个控制流程
比如说发消息或者说是
其他一些自定义的一些功能
这些也是通过 VisionSDK 框架来实现
而不是说我需要调用到一个
非常非常底层的一个函数
这是不需要的
你只需要了解 VisionSDK
Link 通信的一个函数接口即可
另一方面的话
我们的 VisionSDK 能够非常
快速的集成现有的一些算法
比如说我们将会提供在 DSP 上的 VLIB
像 EVE 上的 EVE SW 等等算法
以及第三方提供的一些图像处理函数库
这些函数可以
非常灵活地集成到 VisionSDK 中
直接通过函数调用的方式来实现
接下来的话由于不同的项目
可能有不同的需求
比如说有的项目是以太网系统
以太网进入到芯片中
有的系统是通过 LVDS 进入到系统中
这里我们提供了一个
非常灵活的一个接口
也就说 VisionSDK
对于 Link 之间的传递
是一个完全解耦和的一个状态
不管你是以太网进来
还是通过读文件
还是通过网络输入
还是通过 LVDS 进来
后面的算法可以完全不需要修改
只需要更换一个 Link 即可
比如说更换 Link 也只需要
将某一个 link 的编号
给修改掉就可以了
最后有关 VisionSDK
在这里不同的处理器
从现在的 TDA3
即使是 TDA3 中的最精简版本
到 TDA2x 或 TDA2P
他们最复杂的版本
只需要在一个配置文件中把它使能
就可以在不同平台间进行一个切换
另外对内存的一个修改
我们也是一个非常灵活的一个配置
可以通过修改某一个配置文件
可以快速的扩大
某一个核心的堆栈大小
或者说是扩大整个系统的内存布局
VisionSDK 目前也在不停的向前发展
在小版本之间 API 是不会发生变化的
在大版本之间可能会有比较大的变化
但是我们目前的 VisionSDK
已经发展到 3.4 版本
在 3.4 之后
我们将不会有特别大的一个变化
所以说你在 3.2 上开发的一个算法
可以非常快速的迁移到 3.4 上
这也是 VisionSDK 的一个优势
另外 VisionSDK 可以支持
很多硬件参考板
比如说 TI 提供的 EVM 板
以及 EVM 板上配套的一些 Vision 子板
或者说是 Vision 子板再加上一个板卡
然后在板卡之上
我们又可以再接入六路全景镜头
以及 TI 代码中支持的一些摄像头
这些摄像头和硬件板卡
可以通过第三方进行购买
然后可以将原生的代码直接运行
就可以看到 TI 算法的一个效果
对于 TDA2 和 TDA2P 或者 TDA2E
可能有一些客户会对用户界面有一些需求
所以说我们也在 VisionSDK 中
提供了 Linux 的支持
在最新版 3.4 版本中
我们加入了 Virtual DRM 功能
这个功能可以使得Linux
独立推送它的屏幕
然后 M4 也可以同时也推送它的屏幕
然后这个屏幕
最终由 M4 来进行一个合成
由它来最终控制这个显示界面
比如说是显示 Linux 界面
还是在 Linux 之上
再叠加 M4 的界面
还是说是他们之间
会有一个透明度的一个变换
这个是目前 3.4 版本带来的一个新功能
这个新功能化带来一个非常大的一个优势
就是极大地提高了整个系统的安全性
比如说 Linux 系统可能是不稳定的
然后我们将显示控制器放在 M4 上
这样的话就可以
在 Linux 出现故障的时候
由M4来接管整个显示
不会使得整个系统全部挂起
在 Linux 上我们目前支持
像 DRM openGL 等等一些
非常复杂的一些用户界面
这些用户界面可以由客户自由定制
此外对于开发过程中
我们可能更需要的是一个
非常快速的一个开发工具
或者说开发方式
我目前在 Vision SDK 里面
也集成了很多以太网的开发方式
比如说以太网的Linux启动
以太网的数据传输
即使是 SYS/BIOS 系统
我们也可以将数据
通过以太网传输到上位机上
由上位机进行一个debug或者说控制
另一方面的话
我们也提供了很多像烧写 Flash
或者说是启动从 QSPI
或者说 SD 卡启动的一些示例程序
这些程序可以快速地帮助大家
在搭建出一个方便调试的一个平台
然后 VisionSDK 目前
我们是从以前的 DVR
或者说是 IP Camera 系统中演进而来
而之后我们也将更多的
投入到像行车记录仪
或者说是车机的一些
复杂自动驾驶系统中
下面我们以这个例子为
以这个图作为一个例子
来从头开始讲一下
Link chain 的一个开发流程
我们可以看到
我们在原型系统设计的过程中
有四路镜头和一个 LCD 屏
比如说我们四路镜头
需要通过 VIP 方式进入到
VIP 方式进入到芯片中
然后由 VPE 进行一个缩放
然后可能会有一些
相对复杂的一些
2D 3D 的一些图像处理
然后这些图像处理
可能还是在原型阶段
只是在 PC 机上验证
还没有在板卡上 DSP
或者 EVE 上进行移植
所以说我们先画出这样的一个
简单的一个数据流
下一步我们根据具体的项目需求
具体把每一个算法每一个步骤
放置在特定的核心上
这里我们假设我们的项目
切换到 AVB 的系统
只需要把 VIP 输入换成 AVB 的收取
然后增加一个图像的解码器
图像解码器输出的图像
和刚才的 VIP 的输出是一致的
它通过 VPE Link 进行一个缩放
通过 IPC Link 进行
核间的 BUFFER 的一个转移传递
传递给 DSP
然后由 DSP 做一些全景的一些计算
然后又通过 IPC 传递到 EVE 里面
进行进一步的一些更复杂的一些计算
最终将拼接的图像通过 Display link
这个 Display link 是运行在 M4 上的
显示到 LCD 屏幕上
这是一个初步的一个系统
也就是说你可以将你PC上的代码
逐步的向这个系统中
DSP 上 EVE 上进行移植
分模块的调用 EVE 上
提供的一些加速函数
DSP 上那些加速函数
或者说直接在 DSP 上
使用 openCV 也可以
接下来的话如果发现
DSP 上的算法太过复杂
导致帧率下降
我们可以快速的将 DSP
刚才位于同一个DSP上的另一个link
我们可以快速的迁移到另一个 DSP 上
这样的修改是非常小的
只需要修改它的 DSP 编号即可
当然普通的项目是不可能只有一个全景的
当整个系统扩充到六路 AVB 全景的时候
包括两路
比如说前置或者说是盲区的一些镜头
这些镜头需要做一些非常复杂的一些算法
在这个时候我们可以加入一些
像数据流控制的一些 Link
包括像上面的那个 sync Link
它可以做一个软件上的一个同步
针对时间戳的一个软件同步
Select Link 可以将前置
或者说是盲区的镜头进行一个挑选
图像挑选出来
分发给 EVE 进行向车道线识别
像交通标志识别等等一些 ADAS 算法
最后可以由传递到用户的一些信息
比如说收取到倒车信号
或者说是收到超声波的一些信息
这些信息都可以由用户的APP进行收取
结合 EVE 算法算出来的结果
绘制在全景图片上
显示通过 Display Link 进行显示
这是一个相对复杂的一个应用
也就是也是目前
客户比较常见的一个应用场景
但是不同功能或者说不同产品
可能整个系统规模可能不完全一样
然后针对 ADAS 的软件
我们刚才也提到说
我们 DSP 上是支持 openCV 的
我们这里提供了非常多的
有关 ADAS 的一些软件结构
首先是我们提供了 CCS 工具
基于 eclipse 的 CCS
可能很多同事也在使用
目前 TDA 系列也是通过 CCS
进行一个 JTAG 调试
此外的话
目前的编译器是支持 C 和 C++ 的
然后所有核心
都会基于一个 SYS/BIOS 操作系统
SYS/BIOS 操作系统是一个
TI 开源的一个操作系统
可以根据客户的不同需求进行定制
对于 SYS/BIOS 的话
TI 有一个非常丰富的一个 workshop
可以在这个链接上找到
或者说在网上直接搜索
因为 SYS/BIOS 和 C6000
都是 TI 开发多年非常成熟的技术
SYS/BIOS 能够提供非常丰富的
多线程和包括像
外设抽象文件系统的读写
还有一些 Task 之间的通信同步
还有图形化的一个
操作系统的一个设计
中断响应和一些外设驱动等等一些
一些 TI 提供的一些驱动
这些都是非常完备的
另一方面的话
对于安全性要求更高的一些系统
我们可以由第三方提供一些
虚拟化的一些支持
另外 TI 提供一些
通用 Linux 的一些颗 Kernel 和驱动
能够保证 TDR
和 TDA 系列芯片能够正常运行
然后此外我们针对 C6000 和 EVE
提供了非常非常丰富的算法加速函数
因为目前绝大多数客户
是不会有非常多的人力物力
进行一个比如说针对 DSP 的一个
非常深度的优化
或者说针对 EVE 的一个
从零开始的学习
所以说我们提供了
非常多的一个加速函数库
这些加速函数库
都可以在 VisionSDK 里面获得
另外由于 VisionSDK 的体积
我还有一些像 DSP Lib
等等一些图像函数库
可以直接从网上下载
快速地集成到 VisionSDK 里面
此外我们对 openGL 也提供了
非常完备的支持
可以帮助客户做到非常复杂的 3D 效果
另外对于开放计算
包括像 openVX openCL openCV
目前我们都在 TDA 系列芯片中有支持
目前 openVX 支持 1.1 版本
openCL openCV 它有两种
在 SYS/BIOS 跟 Linux 上
会有两种架构形式
具体细节可以参考 VisionSDK 里面的设计
下面具体介绍一下
DSP 和 EVE 提供的这些算法类型
由于 DSP 和 EVE 非常擅长于
图像和信号处理方面的计算
所以说我们针对图像和信号处理计算
提供了非常高效非常丰富的一些接口
这些计算也是对整个系统非常
关键的一些环节
比如说像滤波器 FFT
矩阵的一个计算和分解 特殊的变换
数学像 sin cos 一些变换
包括像图像的一个透视变换
或者边缘检测直方图
或者说是二值化
还有图像的压缩和解压缩等等
还有包括像 EVE 提供的
非常高速的一些计算
包括高度集成化的一些
比如说像 Har 特征的计算
HOB 特征的计算
像一些函数接口
这些都是这些函数库
已经通过 API 的方式提供
接下来的话
有关 TI 的 SYS/BIOS
我们可以通过 CCS 工具
可以通过图形化的方式来修改整个系统
通过图形化的方式
获取整个系统的运行状态
有关这部分的资料
大家可以通过网上的
开放的一些资料进行查询
有经验的相关同事
可能会更快的上手整个系统
目前 SYS/BIOS 支持 TDA 芯片中的
DSP ARM 和 EVE 以及 M4
也就是说整个 TDA 芯片中
所有处理器上都是支持 SYS/BIOS 的
每一个处理器上都会运行一个操作系统
下面将会介绍一下
有关 TDA3 ADAS 图像处理的一些功能
首先这边的这几张图
都是我们和供应商
和第三方进行一个合作
实现一些效果
首先是对全景图像的一个运动物体检测
可以将距离车身
五米以内的运动人
和运动物体进行一个检测
以及包括像 APA 这种
高复杂度的一些计算
我们也是能够做到
此外还有基于算法的一些行人检测
车辆检测 盲区检测 的一些 BSD
下面这些资料是来自于TI的第三方
KPIT 他们提供的一些参考设计
比如说像 2D 3D 全景 像运动物体检测
像前行人识别
像停车位的一个检测
这些都是国内有非常多的供应商
可以提供他们所最擅长的一部分
那么我们看 一下 TDA3 能做哪些东西
首先我们将产品分为
以下几个等级
我们对于最简单的 3D 全景
和单路的行人检测
我们只需要一颗低频的 DSP
和一颗低频的 EVE 就可以实现
其中 PD 的话帧率在 10FPS
然后对于更复杂的系统
可能会要求有三路的 mod
基于全景三路镜头的一个 mod
可能需要一个中等频率的 DSP
和一个中等频率的 EVE
就可以实现
对于更复杂一些的
像一个 3D 全景
还需要带有三路的 mod
以及单路的行人检测
我们可能需要一个中高频的一个 DSP
或者说一个以及一个中高频的 EVE
可以做到十帧的一个 mod
和十帧的一个 PD
对于高端平台可能需要三路的 mod
这里面还包括了 3D 全景
以及单路的 PD 和两路的 psd
我们可能需要两颗高频的 DSP
和一颗高频的 EVE
这样就可以实现一个
非常复杂的一个 ADAS 功能
同时整个系统的 BOM 成本将会非常低
接下来的话是介绍一下
TI 在深度学习方面的一些
目前的成果和以后的规划
深度学习是目前各个车厂
以及 TIER1 包括像一些互联网公司
都在强调的一些功能
因为深度学习有关
将会有关自动驾驶
包括像语义的识别
整个空间的重建
以及自动驾驶决策的制定
这些都是非常相关的
所以说 TI 利用 DSP 和 EVE
进行了深度学习函数库的开发
也就是说我们可以看到最左
从左边开始是一个训练的过程
训练的过程是在 PC 上
通过我们目前最常见的像 flow
像 caffe 和 torch 等等一些
训练框架训练出一个结果
将这个结果通过上面 TI 开放的一个
模型转换工具
通过这个工具
我们可以将现有的一些
非常常见的深度学习网络
包括各个客户他们自己的
一些定制化的一些网络
包括像 TI 优化过的一些网络
这些网络的训练结果
转换成 TI TDA 芯片能够识别的格式
将这个参数文件和网络文件
放入在 TDA 芯片中
TDA 芯片就可以实现这个网络的功能
并且在下一步下一代
或者说是下几个版本中
我们可能会有 open VX1.2 等版本的升级
这些版本的升级
将会更多的支持深度学习的一些
函数接口或者说是网络层
然后这里是 TI 在 2017 年 CES 上
展出的一个深度学习相关的 Demo
这个 Demo 是运行在 TDA2x 上
它做到了一个语义分割
做到了一个 1024×512 的
一个语义分割的一个实时的计算
整个芯片发热量非常小
只用到了 EVE
两颗 DSP 和两颗 A15 都是空闲的
整个语义分割
包含 41 层 对五个类型进行一个识别
最终输出每一个像素点它的分类结果
可以看出目前 TI 的深度学习
已经是一个 ready 的状态
可以接收各个供应商
或者说是算法研究团队
他们提出的各种各样的网络
当然这些网络是需要进行一个
嵌入式平台的优化
因为嵌入式平台的计算量
并不是PC平台上的
和 PC 平台并不是一个数量级
这是有关深度学习方面的
OK 谢谢各位抽出时间参加这次 TI 培训
直播的视频和演讲材料
将会在一周内发布在 E2E 社区
然后大家可以通过留言
或者说是有商务合作的话
可以通过左下角这个邮箱提出您的问题
下面的话我我会在留言区进行一个回复
视频报错
手机看
扫码用手机观看
收藏本课程
视频简介
ADAS-车用全景解决方案 - TID3X -4
所属课程:ADAS-车用全景解决方案 - TID3X
发布时间:2018.08.24
视频集数:4
本节视频时长:00:43:21
360°环视全景已经成为汽车的标配,逐步走进千家万户,极大地方便了我们低速行驶和泊车,避免了人身伤害和财产损失。德州仪器致力于推广并普及汽车安全驾驶辅助系统,推出了 TDA3X 处理器以及配套的全景解决方案,是目前成本最低、性价比最高的 3D 全景解决方案,并且在全景的基础上还可以集成更多的复杂 ADAS 算法。
//=$v1;?>
//=$v['id']?>//=$v['down_category']?>//=$v['link']?>//=$v['is_dl']?>//=$v['link']?>//=$v['name']?>//=$v['name']?>
//=$v['id']?>//=$v['down_category']?>//=$v['path']?>//=$v['is_dl']?>//=$v['path']?>//=$v['name']?>//=$v['name']?>
////=count($lesson['bbsinfo'])?>
//=$elink?>//=$elink?>//=$tags[0]?>//=$tags[0]?>//=$elink?>//= $elink?>//=$tags[1]?>//=$tags[1]?>
//=$lesson['bbs'];?>
//=count($lesson['bbsinfo'])?>