• [知识分享] 详解图像处理的算术运算与逻辑运算
    本文分享自华为云社区《[[Python从零到壹] 三十六.图像处理基础篇之图像算术与逻辑运算详解](https://bbs.huaweicloud.com/blogs/336336?utm_source=csdn&utm_medium=bbs-ex&utm_campaign=other&utm_content=content)》,作者: eastmount 。 # 一.图像加法运算 图像加法运算主要有两种方法。第一种是调用Numpy库实现,目标图像像素为两张图像的像素之和;第二种是通过OpenCV调用add()函数实现。第二种方法的函数原型如下: - dst = add(src1, src2[, dst[, mask[, dtype]]]) – src1表示第一张图像的像素矩阵 – src2表示第二张图像的像素矩阵 – dst表示输出的图像,必须和输入图像具有相同的大小和通道数 – mask表示可选操作掩码(8位单通道数组),用于指定要更改的输出数组的元素。 – dtype表示输出数组的可选深度 注意,当两幅图像的像素值相加结果小于等于255时,则输出图像直接赋值该结果,如120+48赋值为168;如果相加值大于255,则输出图像的像素结果设置为255,如(255+64) 赋值为255。下面的代码实现了图像加法运算。 #coding:utf-8 # By:Eastmount import cv2 import numpy as np #读取图片 img = cv2.imread("luo.png") #图像各像素加100 m = np.ones(img.shape, dtype="uint8")*100 #OpenCV加法运算 result = cv2.add(img, m) #显示图像 cv2.imshow("original", img) cv2.imshow("result", result) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() 输出如图4-1所示,左边为“小珞珞”的原始图像,右边为像素值增加100像素后的图像,输出图像显示更偏白。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20223/18/1647586764453149025.png) # 二.图像减法运算 图像减法运算主要调用subtract()函数实现,其原型如下所示: - dst = subtract(src1, src2[, dst[, mask[, dtype]]]) – src1表示第一张图像的像素矩阵 – src2表示第二张图像的像素矩阵 – dst表示输出的图像,必须和输入图像具有相同的大小和通道数 – mask表示可选操作掩码(8位单通道数组),用于指定要更改的输出数组的元素。 – dtype表示输出数组的可选深度 具体实现代码如下所示: #coding:utf-8 # By:Eastmount import cv2 import numpy as np #读取图片 img = cv2.imread("luo.png") #图像各像素减50 m = np.ones(img.shape, dtype="uint8")*50 #OpenCV减法运算 result = cv2.subtract(img, m) #显示图像 cv2.imshow("original", img) cv2.imshow("result", result) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() 输出如图4-2所示,左边为原始图像,右边为像素值减少50像素后的图像,输出图像显示更偏暗。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20223/18/1647586819068247915.png) # 三.图像与运算 与运算是计算机中一种基本的逻辑运算方式,符号表示为“&”,其运算规则为: - 0&0=0 - 0&1=0 - 1&0=0 - 1&1=1 图像的与运算是指两张图像(灰度图像或彩色图像均可)的每个像素值进行二进制“与”操作,实现图像裁剪。 - dst = bitwise_and(src1, src2[, dst[, mask]]) – src1表示第一张图像的像素矩阵 – src2表示第二张图像的像素矩阵 – dst表示输出的图像,必须和输入图像具有相同的大小和通道数 – mask表示可选操作掩码(8位单通道数组),用于指定要更改的输出数组的元素。 下面代码是通过图像与运算实现图像剪裁的功能。 #coding:utf-8 # By:Eastmount import cv2 import numpy as np #读取图片 img = cv2.imread("luo.png", cv2.IMREAD_GRAYSCALE) #获取图像宽和高 rows, cols = img.shape[:2] print(rows, cols) #画圆形 circle = np.zeros((rows, cols), dtype="uint8") cv2.circle(circle, (int(rows/2),int(cols/2)), 100, 255, -1) print(circle.shape) print(img.size, circle.size) #OpenCV图像与运算 result = cv2.bitwise_and(img, circle) #显示图像 cv2.imshow("original", img) cv2.imshow("circle", circle) cv2.imshow("result", result) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() 输出如图4-3所示,原始图像与圆形进行与运算之后,提取了其中心轮廓。同时输出图像的形状为377×326。注意,两张图像的大小和类型必须一致。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20223/18/1647586887030828167.png) # 四.图像或运算 逻辑或运算是指如果一个操作数或多个操作数为 true,则逻辑或运算符返回布尔值 true;只有全部操作数为false,结果才是 false。图像的或运算是指两张图像(灰度图像或彩色图像均可)的每个像素值进行二进制“或”操作,实现图像裁剪。其函数原型如下所示: - dst = bitwise_or(src1, src2[, dst[, mask]]) – src1表示第一张图像的像素矩阵 – src2表示第二张图像的像素矩阵 – dst表示输出的图像,必须和输入图像具有相同的大小和通道数 – mask表示可选操作掩码(8位单通道数组),用于指定要更改的输出数组的元素。 下面代码是通过图像或运算实现图像剪裁的功能。 #coding:utf-8 # By:Eastmount import cv2 import numpy as np #读取图片 img = cv2.imread("luo.png", cv2.IMREAD_GRAYSCALE) #获取图像宽和高 rows, cols = img.shape[:2] #画圆形 circle = np.zeros((rows, cols), dtype="uint8") cv2.circle(circle, (int(rows/2),int(cols/2)), 100, 255, -1) #OpenCV图像或运算 result = cv2.bitwise_or(img, circle) #显示图像 cv2.imshow("original", img) cv2.imshow("circle", circle) cv2.imshow("result", result) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() 输出如图4-4所示,原始图像与圆形进行或运算之后,提取了图像除中心原形之外的像素值。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20223/18/1647586958574826173.png) # 五.图像非运算 图像非运算就是图像的像素反色处理,它将原始图像的黑色像素点转换为白色像素点,白色像素点则转换为黑色像素点,其函数原型如下: - dst = bitwise_not(src1, src2[, dst[, mask]]) – src1表示第一张图像的像素矩阵 – src2表示第二张图像的像素矩阵 – dst表示输出的图像,必须和输入图像具有相同的大小和通道数 – mask表示可选操作掩码(8位单通道数组),用于指定要更改的输出数组的元素。 图像非运算的实现代码如下所示。 #coding:utf-8 import cv2 import numpy as np #读取图片 img = cv2.imread("Lena.png", cv2.IMREAD_GRAYSCALE) #OpenCV图像非运算 result = cv2.bitwise_not(img) #显示图像 cv2.imshow("original", img) cv2.imshow("result", result) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() 原始图像非运算之后输出如图4-5所示。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20223/18/1647586994311655852.png) # 六.图像异或运算 逻辑异或运算(xor)是一个数学运算符,数学符号为“⊕”,计算机符号为“xor”,其运算法则为:如果a、b两个值不相同,则异或结果为1;如果a、b两个值相同,异或结果为0。 图像的异或运算是指两张图像(灰度图像或彩色图像均可)的每个像素值进行二进制“异或”操作,实现图像裁剪。其函数原型如下所示: - dst = bitwise_xor(src1, src2[, dst[, mask]]) – src1表示第一张图像的像素矩阵 – src2表示第二张图像的像素矩阵 – dst表示输出的图像,必须和输入图像具有相同的大小和通道数 – mask表示可选操作掩码(8位单通道数组),用于指定要更改的输出数组的元素。 图像异或运算的实现代码如下所示。 #coding:utf-8 # By:Eastmount import cv2 import numpy as np #读取图片 img = cv2.imread("luo.png", cv2.IMREAD_GRAYSCALE) #获取图像宽和高 rows, cols = img.shape[:2] #画圆形 circle = np.zeros((rows, cols), dtype="uint8") cv2.circle(circle, (int(rows/2),int(cols/2)), 100, 255, -1) #OpenCV图像异或运算 result = cv2.bitwise_xor(img, circle) #显示图像 cv2.imshow("original", img) cv2.imshow("circle", circle) cv2.imshow("result", result) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() 原始图像与圆形进行异或运算之后输出如图4-6所示。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20223/18/1647587046243483760.png) # 七.总结 本文详细介绍了图像处理的算术运算与逻辑运算,包括图像加法、图像减法、图像与运算、图像或运算、图像非运算与图像异或运算,并以“小珞珞”图像为案例进行讲解,希望对您有所帮助。
  • [技术干货] [Python从零到壹] 三十六.图像处理基础篇之图像算术与逻辑运算详解[转载]
    链接:https://bbs.huaweicloud.com/blogs/336336欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望我们都能在人生路上开心快乐、共同成长。该系列文章主要讲解Python OpenCV图像处理和图像识别知识,前期主要讲解图像处理基础知识、OpenCV基础用法、常用图像绘制方法、图像几何变换等,中期讲解图像处理的各种运算,包括图像点运算、形态学处理、图像锐化、图像增强、图像平滑等,后期研究图像识别、图像分割、图像分类、图像特效处理以及图像处理相关应用。上一篇文章介绍了如何使用OpenCV绘制各类几何图形,包括cv2.line()、v2.circle()、cv2.rectangle()、cv2.ellipse()、cv2.polylines()、cv2.putText()函数。这篇文章将详细讲解图像算法运算与逻辑运算,包括图像加法、图像减法、图像与运算、图像或运算、图像非运算与图像异或运算。让我们来对比下这些运算在图像中能实现什么样的效果。希望文章对您有所帮助,如果有不足之处,还请海涵。文章目录:一.图像加法运算二.图像减法运算三.图像与运算四.图像或运算五.图像非运算六.图像异或运算七.总结下载地址:https://github.com/eastmountyxz/Python-zero2one前文赏析:第一部分 基础语法[Python从零到壹] 一.为什么我们要学Python及基础语法详解[Python从零到壹] 二.语法基础之条件语句、循环语句和函数[Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象第二部分 网络爬虫[Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例[Python从零到壹] 五.网络爬虫之BeautifulSoup基础语法万字详解[Python从零到壹] 六.网络爬虫之BeautifulSoup爬取豆瓣TOP250电影详解[Python从零到壹] 七.网络爬虫之Requests爬取豆瓣电影TOP250及CSV存储[Python从零到壹] 八.数据库之MySQL基础知识及操作万字详解[Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解[Python从零到壹] 十.Selenium爬取在线百科知识万字详解(NLP语料构造必备技能)第三部分 数据分析和机器学习[Python从零到壹] 十一.数据分析之Numpy、Pandas、Matplotlib和Sklearn入门知识万字详解[Python从零到壹] 十二.机器学习之回归分析万字总结[Python从零到壹] 十三.机器学习之聚类分析万字总结全网首发(K-Means、BIRCH、层次聚类、树状聚类)[Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验) [Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解[Python从零到壹] 十六.文本挖掘之词云热点与LDA主题分布分析万字详解[Python从零到壹] 十七.可视化分析之Matplotlib、Pandas、Echarts入门万字详解[Python从零到壹] 十八.可视化分析之Basemap地图包入门详解[Python从零到壹] 十九.可视化分析之热力图和箱图绘制及应用详解[Python从零到壹] 二十.可视化分析之Seaborn绘图万字详解[Python从零到壹] 二十一.可视化分析之Pyechart绘图万字详解[Python从零到壹] 二十二.可视化分析之OpenGL绘图万字详解[Python从零到壹] 二十三.十大机器学习算法之决策树分类分析详解(1)[Python从零到壹] 二十四.十大机器学习算法之KMeans聚类分析详解(2)[Python从零到壹] 二十五.十大机器学习算法之KNN算法及图像分类详解(3)[Python从零到壹] 二十六.十大机器学习算法之朴素贝叶斯算法及文本分类详解(4)[Python从零到壹] 二十七.十大机器学习算法之线性回归算法分析详解(5)[Python从零到壹] 二十八.十大机器学习算法之SVM算法分析详解(6)[Python从零到壹] 二十九.十大机器学习算法之随机森林算法分析详解(7)[Python从零到壹] 三十.十大机器学习算法之逻辑回归算法及恶意请求检测应用详解(8)[Python从零到壹] 三十一.十大机器学习算法之Boosting和AdaBoost应用详解(9)[Python从零到壹] 三十二.十大机器学习算法之层次聚类和树状图聚类应用详解(10)第四部分 Python图像处理基础[Python从零到壹] 三十三.图像处理基础篇之什么是图像处理和OpenCV配置[Python从零到壹] 三十四.OpenCV入门详解——显示读取修改及保存图像[Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形[Python从零到壹] 三十六.图像处理基础篇之图像算术与逻辑运算详解第五部分 Python图像运算和图像增强第六部分 Python图像识别和图像处理经典案例第七部分 NLP与文本挖掘第八部分 人工智能入门知识第九部分 网络攻防与AI安全第十部分 知识图谱构建实战扩展部分 人工智能高级案例一.图像加法运算图像加法运算主要有两种方法。第一种是调用Numpy库实现,目标图像像素为两张图像的像素之和;第二种是通过OpenCV调用add()函数实现。第二种方法的函数原型如下:dst = add(src1, src2[, dst[, mask[, dtype]]])– src1表示第一张图像的像素矩阵– src2表示第二张图像的像素矩阵– dst表示输出的图像,必须和输入图像具有相同的大小和通道数– mask表示可选操作掩码(8位单通道数组),用于指定要更改的输出数组的元素。– dtype表示输出数组的可选深度注意,当两幅图像的像素值相加结果小于等于255时,则输出图像直接赋值该结果,如120+48赋值为168;如果相加值大于255,则输出图像的像素结果设置为255,如(255+64) 赋值为255。下面的代码实现了图像加法运算。输出如图4-1所示,左边为“小珞珞”的原始图像,右边为像素值增加100像素后的图像,输出图像显示更偏白。二.图像减法运算图像减法运算主要调用subtract()函数实现,其原型如下所示:dst = subtract(src1, src2[, dst[, mask[, dtype]]])– src1表示第一张图像的像素矩阵– src2表示第二张图像的像素矩阵– dst表示输出的图像,必须和输入图像具有相同的大小和通道数– mask表示可选操作掩码(8位单通道数组),用于指定要更改的输出数组的元素。– dtype表示输出数组的可选深度具体实现代码如下所示:输出如图4-2所示,左边为原始图像,右边为像素值减少50像素后的图像,输出图像显示更偏暗。三.图像与运算与运算是计算机中一种基本的逻辑运算方式,符号表示为“&”,其运算规则为:0&0=00&1=01&0=01&1=1图像的与运算是指两张图像(灰度图像或彩色图像均可)的每个像素值进行二进制“与”操作,实现图像裁剪。dst = bitwise_and(src1, src2[, dst[, mask]])– src1表示第一张图像的像素矩阵– src2表示第二张图像的像素矩阵– dst表示输出的图像,必须和输入图像具有相同的大小和通道数– mask表示可选操作掩码(8位单通道数组),用于指定要更改的输出数组的元素。下面代码是通过图像与运算实现图像剪裁的功能。输出如图4-3所示,原始图像与圆形进行与运算之后,提取了其中心轮廓。同时输出图像的形状为377×326。注意,两张图像的大小和类型必须一致。四.图像或运算逻辑或运算是指如果一个操作数或多个操作数为 true,则逻辑或运算符返回布尔值 true;只有全部操作数为false,结果才是 false。图像的或运算是指两张图像(灰度图像或彩色图像均可)的每个像素值进行二进制“或”操作,实现图像裁剪。其函数原型如下所示:dst = bitwise_or(src1, src2[, dst[, mask]])– src1表示第一张图像的像素矩阵– src2表示第二张图像的像素矩阵– dst表示输出的图像,必须和输入图像具有相同的大小和通道数– mask表示可选操作掩码(8位单通道数组),用于指定要更改的输出数组的元素。下面代码是通过图像或运算实现图像剪裁的功能。输出如图4-4所示,原始图像与圆形进行或运算之后,提取了图像除中心原形之外的像素值。五.图像非运算图像非运算就是图像的像素反色处理,它将原始图像的黑色像素点转换为白色像素点,白色像素点则转换为黑色像素点,其函数原型如下:dst = bitwise_not(src1, src2[, dst[, mask]])– src1表示第一张图像的像素矩阵– src2表示第二张图像的像素矩阵– dst表示输出的图像,必须和输入图像具有相同的大小和通道数– mask表示可选操作掩码(8位单通道数组),用于指定要更改的输出数组的元素。图像非运算的实现代码如下所示。原始图像非运算之后输出如图4-5所示。六.图像异或运算逻辑异或运算(xor)是一个数学运算符,数学符号为“⊕”,计算机符号为“xor”,其运算法则为:如果a、b两个值不相同,则异或结果为1;如果a、b两个值相同,异或结果为0。图像的异或运算是指两张图像(灰度图像或彩色图像均可)的每个像素值进行二进制“异或”操作,实现图像裁剪。其函数原型如下所示:dst = bitwise_xor(src1, src2[, dst[, mask]])– src1表示第一张图像的像素矩阵– src2表示第二张图像的像素矩阵– dst表示输出的图像,必须和输入图像具有相同的大小和通道数– mask表示可选操作掩码(8位单通道数组),用于指定要更改的输出数组的元素。图像异或运算的实现代码如下所示。原始图像与圆形进行异或运算之后输出如图4-6所示。七.总结本文详细介绍了图像处理的算术运算与逻辑运算,包括图像加法、图像减法、图像与运算、图像或运算、图像非运算与图像异或运算,并以“小珞珞”图像为案例进行讲解,希望对您有所帮助。感谢在求学路上的同行者,不负遇见,勿忘初心。图像处理系列主要包括三部分,分别是:希望能与大家一起在华为云社区共同成长,原文地址:https://blog.csdn.net/Eastmount/article/details/122692101(By:娜璋之家 Eastmount 2022-03-09 夜于武汉)
  • [其他] 机器视觉边缘检测算法详解
    边缘检测相关算法的步骤如下: 1、滤波: 边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能。需要指出,大多数滤波器在降低噪声的同时也导致了边缘强度的损失,因此,增强边缘和降低噪声之间需要折中。 2、增强: 增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将邻域(或局部)强度值有显著变化的点突显出来。边缘增强一般是通过计算梯度幅值来完成的。 3、检测: 在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点。最简单的边缘检测判据是梯度幅值阈值判据。 4、定位:如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来。   边缘检测是机器视觉检测技术的一种,在边缘检测算法中,前三个步骤用得十分普遍。这是因为大多数场合下,仅仅需要边缘检测器指出边缘出现在图像某一像素点的附近,而没有必要指出边缘的精确位置或方向。  边缘检测的实质是采用某种算法来提取出图像中对象与背景问的交界线。我们将边缘定义为图像中灰度发生急剧变化的区域边界。图像灰度的变化情况可以用图像灰度分布的梯度来反映,因此我们可以用局部图像微分技术来获得边缘检测算子。经典的边缘检测方法,是通过对原始图像中像素的某小邻域构造边缘检测算子来达到检测边缘这一目的的。 边缘检测是主要应用有: 检测芯片针脚是否规则整齐、目标定位以及存在/缺陷检测等。基于边缘检测技术的应用,为行业的高精度检测及尺寸测量提供了强大的技术支持。
  • [其他] OpenCV图像处理常用手段
    图像二值化操作 两种方法,全局固定阈值二值化和局部自适应阈值二值化全局固定阈值很容易理解,就是对整幅图像都是用一个统一的阈值来进行二值化;局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。效果:腐蚀操作滤波操作,模糊处理 模糊处理在边沿检测和去噪声方面有较为广泛的应用。OpenCV中提供了4种模糊算法,列举如下:averagemediangaussianbilateral这里我们只列举使用 均值滤波实现图像模糊:
  • [技术干货] 华为云AI论文精读会2021分享汇总帖
    华为云AI论文精读会2021第一期:高效语义分割模型Fast-SCNN分享华为云AI论文精读会2021第二期:d-vector用于说话人变化点检测的论文解析与复现华为云AI论文精读会2021第三期:目标检测模型CrowdDet解读分享华为云AI论文精读会2021第四期:Dynamic RCNN:一种有效提升RCNN系列网络表现的动态训练方法华为云AI论文精读会2021第五期:基于迁移学习的语义分割算法分享华为云AI论文精读会2021第六期:知识蒸馏模型TinyBert解读分享华为云AI论文精读会2021第七期:目标检测算法TSD解耦分类与回归华为云AI论文精读会2021第八期:探讨文字识别中的语言模型华为云AI论文精读会2021第九期:多卡昇腾环境实现MindSpore DenseNet 分类训练华为云AI论文精读会2021第十期:告别互信息:变分蒸馏的跨模态行人重识别华为云AI论文精读会2021第十一期:基于转移的语义Parser分享华为云AI论文精读会2021第十二期:阅读理解模型AoA Reader解读分享华为云AI论文精读会2021第十三期:图像风格处理算法的实操分享华为云AI论文精读会2021第十四期:图像分割模型PointRend解读分享华为云AI论文精读会2021第十五期:M-SQL一种将自然语言转换为SQL语句的多任务表示学习方法华为云AI论文精读会2021第十六期:文档级事件抽取模型Doc2EDAG解读分享华为云AI论文精读会2021第十七期:关系抽取模型LSTM-LSTM-Bias解析与复现华为云AI论文精读会2021第十八期:行人姿态估计经典算法HRNet华为云AI论文精读会2021第十九期:ACGAN-动漫头像生成华为云AI论文精读会2021第二十期:轻量化神经网络MobileNet系列论文精读华为云AI论文精读会2021第二十一期:语音驱动风格可控手势生成华为云AI论文精读会2021第二十二期:可变长度的语音片段情感识别解读分享华为云AI论文精读会2021第二十三期:迁移检测算法DA-Faster-RCNN解读分享华为云AI论文精读会2021第二十四期:图像迁移分类DeepJDOT模型解读分享
  • [技术干货] Cat.1究竟是如何崛起的?中速率到底有什么用?
    2020年是5G商用元年。但是,如果我们在物联网行业内搞一场“2020年最热门通信技术”的评选,5G很可能无法独占冠军。因为,有一匹黑马,在这一年迅速崛起,吸引了整个行业的关注,也成为大众热议的话题。没错,这匹黑马,就是今天这篇文章的主角——LTE Cat.1。根据数据统计,2020年全球LTE Cat.1新增连接数为1500万个。乍一看并不是很多,但它的增长速度极快。行业资讯机构TSR预测,未来几年LTE Cat.1模组会保持3000万台以上的年均出货量。更有专家大胆预测,今年(2021年)就能达到5000万。LTE Cat.1为什么会迅速蹿红?它和其它蜂窝物联网技术相比,有哪些优势?我们现在常说的Cat.1和Cat.1bis,又有什么区别?别急,让我们从头开始说起。▉ LTE Cat.1的发展历程2009年3月,标准组织3GPP发布了Release 8 版本,正式把LTE推到了世人面前。当时,3GPP一共定义了5个终端类别,分别是LTE Cat.1、Cat.2、Cat.3、Cat.4、Cat.5。所谓的Cat,是英文单词“Category”的缩写,意思是“类别、种类”。之所以要搞出这么多UE Category(终端类别),是因为3GPP非常看好物联网市场的发展前景,希望设计出不同速率等级的终端类型,满足物联网不同落地场景的需求。从上图可以看出,LTE Cat.1的上行速率只有大约5Mbps,专门面向对速率要求不高的物联网应用。LTE Cat.1推出之后,并没有获得太多关注。当时,蜂窝物联网的使用场景还不多,用户比较陌生,市场也没有打开。几年后,随着LTE网络覆盖迅速形成规模,厂商们开始重新将视线放到了LTE Cat.1的身上。刚开始的时候,有手机终端厂商针对LTE Cat.1“简配”、低成本的特点,将其用于4G老人智能机。后来,蜂窝物联网应用场景快速增加,LTE Cat.1迎来了机会。2015年4月,第一代智能手表产品正式发售,拉开了价值千亿的可穿戴电子产品市场竞争帷幕。在激烈的市场争夺过程中,可穿戴设备厂商发现,LTE Cat.1并没有办法用于可穿戴设备。原因在于,Cat.1和传统LTE终端一样,设计有两根天线。而可穿戴设备对体积要求很高,必须小而又小,所以无法接受双天线。即便是强行塞入,分集接收效果也会大打折扣。当时,官方具备1Rx(单接收天线)接收规格的终端能力等级,只有Cat.0/Cat.M1/Cat.NB1。但是,这些技术最高只能实现1Mbps的极限吞吐速率,无法满足可穿戴场景的用户体验。于是,设计一种新的适用于可穿戴品类的单天线终端能力等级,就被提上了议事日程。2016年6月至2017年3月,3GPP RAN#73~#75标准全会就该单天线终端能力新等级做了讨论与定义。最终,在2017年3月9日,3GPP Release 13 LTE Cat.1bis核心部分正式冻结,LTE Cat.1bis诞生。除了天线数量之外,LTE Cat.1bis和LTE Cat.1并无太大区别,两者都是上行速率5Mbps,下行10Mbps,链路预算基本一致。这个“bis”,在英文里有“重复、两次、再来一次”的意思。LTE Cat.1bis,既能满足中速人联/物联品类的数据吞吐量需求,又能提供相比传统LTE更优的成本与更小的尺寸。更关键的是,它可以在现有4G接入网几乎零改造的前提下,进行快速部署,大幅削减落地成本。然而,如此完美的LTE Cat.1bis技术,在推出之后的前两年,不仅没有爆发,反而更加沉寂,几乎没有产生实质产业效益。这是为什么呢?原因大概有两个。一方面,是因为LTE Cat.1bis的标准化速度太慢。2018年9月,LTE Cat.1bis才完成合规认证所必要的测试部分(Testing part)冻结,根本没赶上2017年7月的全球首款蜂窝版可穿戴产品上市这波行情。另一方面,R13 Cat.1bis推出之后,业界根本没来得及准备合适的芯片平台。没有芯片,咋推出产品?阴差阳错之下,Cat.1bis最终缺席了原本属于它的可穿戴/中速物联广阔舞台。▉ Cat.1bis的逆袭到了2019年底,情况发生了根本性的变化。之前没有的终端芯片平台,现在有了!2019年11月16日,在第7届中国移动全球合作伙伴大会上,紫光展锐重磅发布了新一代物联网芯片平台——展锐8910DM,这是全球首颗LTE Cat.1bis物联网芯片平台。从功能上来看,展锐8910DM又不仅是一颗LTE Cat.1bis芯片。它采用28nm工艺,具备显著的低功耗优势,支持LTE Cat.1bis和GSM双模,上下行速率分别是5Mbps和10Mbps,拥有高集成度,同时集成了蓝牙通讯和Wi-Fi室内定位,可实现更稳定的连接,支持VoLTE。展锐8910DM的推出,解决了用户在物联网连接中通信、运算、存储、定位等多方面的需求和痛点,引领了行业标准制定和行业生态构建,填补了低功耗窄带物联网与传统宽带物联网之间的蜂窝通信芯片方案空白。芯片平台诞生之后,外部环境也发生了微妙变化,为LTE Cat.1bis的爆发创造了非常有利的条件。什么变化?当然是5G的商用。5G商用,意味着运营商又多了一张网络需要维护,势必增加其网络运维压力。为了减少压力,集中资源建设新网络,运营商会加速2G/3G的退网。2G/3G想要顺利退网,就必须有合适的替代技术,承接海量的中低速物联网终端。NB-IoT是窄带物联网,速度极低,仅可承载部分2G网络物联网终端。“中速率、语音通话、移动连接”的业务需求,自然而然就落在了LTE Cat.1bis 的身上。2020年5月,工信部发布了《关于深入推进移动物联网全面发展的通知》,其中明确指出:“推动2G/3G物联网业务迁移转网,引导新增物联网终端不再使用2G/3G网络,推动存量2G/3G物联网业务向NB-IoT/4G(含Cat.1)/5G网络迁移,建立协同发展的移动物联网综合生态体系。”针对这个协同发展的体系,行业已经形成了普遍共识,那就是物联网连接的“631”结构。所谓“631”,即指:60%的连接通过低速率网络实现,30%的连接通过中速率网络实现,10%的连接通过高速率网络实现。“631”结构LTE Cat.1bis,主要承载的是30%的中速率物联网连接领域。相比于NB-IoT,LTE Cat.1bis速率更高,可以支持标清摄像头、广告屏等应用,也多了移动性的,可以支持共享单车、物流追踪等对移动性有要求的应用。它还支持基本的语音业务,可以用于集群对讲、电话手表等业务。从技术替代趋势来看,NB-IoT将实现对80%以上2G终端的替代,而绝大部分的3G和少部分的2G,将迁移到Cat.1。▉ Cat.1bis的技术革新为了更好地完成自身使命,LTE Cat.1bis一直在进行着技术革新和功能演进。我们还是以紫光展锐的8910DM芯片平台为例。2020年11月,紫光展锐联合中国联通,基于采用8910DM芯片平台的联通雁飞Cat1模组,开展了业界首次Cat.1bis PSM低功耗特性现网规模测试。此前,人们一直以为eDRX/PSM是NB-IoT/eMTC独有的特性。这次测试表明,紫光展锐的Cat.1bis芯片也能够支持扩展非连续接收eDRX和深度睡眠PSM。如此一来,Cat.1bis的功耗表现实现从传统的mA级升级到uA级,大大拓宽了应用领域,可以满足例如智能表计、智能门锁、烟感报警等使用电池供电、对功耗要求苛刻的场景。在覆盖增强方面,8910DM芯片平台也有突破。它已成功实现对R13 coverage enhancement特性的支持,可提供最高15dB的增益。这将非常有利于将Cat.1bis部署于地下车库、地下室、密集城区阴影区等覆盖困难的场所,扩大应用领域。除了性能进一步提升之外,紫光展锐8910DM芯片平台还根据用户使用场景,进行了很多场景专属优化。举例来说,8910DM芯片原本就已支持BLE(蓝牙低功耗)功能,可进行近程设备升级维护和参数配置。如此,8910DM又新增支持了A2DP和HFP等蓝牙媒体协议,让物联网设备也能够进行音乐播放。比如,可以让支付云喇叭同时“变身”成蓝牙音箱、让公网对讲机还能连接蓝牙耳机、让共享两轮出行的路上也能有音乐陪伴。再举个例子,基于8910DM作为主芯片平台的公网对讲机方案,能够完全满足运营商对于公网对讲产品的要求。展锐针对公网对讲机的实网时延和通话音质,进行了大量优化:网络方面,包括支持双卡双待以及实现IP数据包在4G/2G实网下的时延优化;音质方面,通过充分利用芯片的语音处理能力, 对于噪音/回声/啸叫等对讲常见问题进行专项处理。上述这一系列的提升和优化,充分说明了LTE Cat.1bis可以实现功耗、成本、覆盖、功能方面的更完美平衡,给用户带来极致的使用体验。当然,这背后也离不开紫光展锐这样的民族芯片企业,在自主创新技术方面长期坚持不懈的投入。基于这些投入,紫光展锐已经成为国内集成电路设计产业的龙头,全球少数全面掌握2G/3G/4G/5G、Wi-Fi、蓝牙、电视调频、卫星通信等全场景通信技术的企业之一。根据数据显示,紫光展锐目前拥有近5000名员工,其中90%是研发人员,在全球拥有17个技术研发中心。目前,紫光展锐的Cat.1芯片已经实现千万级出货,全国市场占有率超过70%。数十款搭载展锐8910DM芯片的Cat.1bis模组,正在广泛应用于共享经济、金融支付、公网对讲、能源、工业控制等行业场景。▉ 结语2021年,LTE Cat.1bis还将继续火热下去。针对LTE Cat.1bis的生态,将会变得更加成熟。相关的物联网应用,也会越来越多地出现在我们身边。我们有理由相信,随着蜂窝物联网终端连接数的不断增加,“万物智联”的时代将加速向我们走来。整个社会的运作模式将发生根本性的变化,我们的工作效率和生活质量也将迎来难以想象的飞跃。期待这一天的早日到来。翻滚吧,LTE Cat.1bis!
  • [交流吐槽] Cat.1究竟是如何崛起的?中速率到底有什么用?
    2020年是5G商用元年。但是,如果我们在物联网行业内搞一场“2020年最热门通信技术”的评选,5G很可能无法独占冠军。因为,有一匹黑马,在这一年迅速崛起,吸引了整个行业的关注,也成为大众热议的话题。没错,这匹黑马,就是今天这篇文章的主角——LTE Cat.1。根据数据统计,2020年全球LTE Cat.1新增连接数为1500万个。乍一看并不是很多,但它的增长速度极快。行业资讯机构TSR预测,未来几年LTE Cat.1模组会保持3000万台以上的年均出货量。更有专家大胆预测,今年(2021年)就能达到5000万。LTE Cat.1为什么会迅速蹿红?它和其它蜂窝物联网技术相比,有哪些优势?我们现在常说的Cat.1和Cat.1bis,又有什么区别?别急,让我们从头开始说起。▉ LTE Cat.1的发展历程2009年3月,标准组织3GPP发布了Release 8 版本,正式把LTE推到了世人面前。当时,3GPP一共定义了5个终端类别,分别是LTE Cat.1、Cat.2、Cat.3、Cat.4、Cat.5。所谓的Cat,是英文单词“Category”的缩写,意思是“类别、种类”。之所以要搞出这么多UE Category(终端类别),是因为3GPP非常看好物联网市场的发展前景,希望设计出不同速率等级的终端类型,满足物联网不同落地场景的需求。从上图可以看出,LTE Cat.1的上行速率只有大约5Mbps,专门面向对速率要求不高的物联网应用。LTE Cat.1推出之后,并没有获得太多关注。当时,蜂窝物联网的使用场景还不多,用户比较陌生,市场也没有打开。几年后,随着LTE网络覆盖迅速形成规模,厂商们开始重新将视线放到了LTE Cat.1的身上。刚开始的时候,有手机终端厂商针对LTE Cat.1“简配”、低成本的特点,将其用于4G老人智能机。后来,蜂窝物联网应用场景快速增加,LTE Cat.1迎来了机会。2015年4月,第一代智能手表产品正式发售,拉开了价值千亿的可穿戴电子产品市场竞争帷幕。在激烈的市场争夺过程中,可穿戴设备厂商发现,LTE Cat.1并没有办法用于可穿戴设备。原因在于,Cat.1和传统LTE终端一样,设计有两根天线。而可穿戴设备对体积要求很高,必须小而又小,所以无法接受双天线。即便是强行塞入,分集接收效果也会大打折扣。当时,官方具备1Rx(单接收天线)接收规格的终端能力等级,只有Cat.0/Cat.M1/Cat.NB1。但是,这些技术最高只能实现1Mbps的极限吞吐速率,无法满足可穿戴场景的用户体验。于是,设计一种新的适用于可穿戴品类的单天线终端能力等级,就被提上了议事日程。2016年6月至2017年3月,3GPP RAN#73~#75标准全会就该单天线终端能力新等级做了讨论与定义。最终,在2017年3月9日,3GPP Release 13 LTE Cat.1bis核心部分正式冻结,LTE Cat.1bis诞生。除了天线数量之外,LTE Cat.1bis和LTE Cat.1并无太大区别,两者都是上行速率5Mbps,下行10Mbps,链路预算基本一致。这个“bis”,在英文里有“重复、两次、再来一次”的意思。LTE Cat.1bis,既能满足中速人联/物联品类的数据吞吐量需求,又能提供相比传统LTE更优的成本与更小的尺寸。更关键的是,它可以在现有4G接入网几乎零改造的前提下,进行快速部署,大幅削减落地成本。然而,如此完美的LTE Cat.1bis技术,在推出之后的前两年,不仅没有爆发,反而更加沉寂,几乎没有产生实质产业效益。这是为什么呢?原因大概有两个。一方面,是因为LTE Cat.1bis的标准化速度太慢。2018年9月,LTE Cat.1bis才完成合规认证所必要的测试部分(Testing part)冻结,根本没赶上2017年7月的全球首款蜂窝版可穿戴产品上市这波行情。另一方面,R13 Cat.1bis推出之后,业界根本没来得及准备合适的芯片平台。没有芯片,咋推出产品?阴差阳错之下,Cat.1bis最终缺席了原本属于它的可穿戴/中速物联广阔舞台。▉ Cat.1bis的逆袭到了2019年底,情况发生了根本性的变化。之前没有的终端芯片平台,现在有了!2019年11月16日,在第7届中国移动全球合作伙伴大会上,紫光展锐重磅发布了新一代物联网芯片平台——展锐8910DM,这是全球首颗LTE Cat.1bis物联网芯片平台。从功能上来看,展锐8910DM又不仅是一颗LTE Cat.1bis芯片。它采用28nm工艺,具备显著的低功耗优势,支持LTE Cat.1bis和GSM双模,上下行速率分别是5Mbps和10Mbps,拥有高集成度,同时集成了蓝牙通讯和Wi-Fi室内定位,可实现更稳定的连接,支持VoLTE。展锐8910DM的推出,解决了用户在物联网连接中通信、运算、存储、定位等多方面的需求和痛点,引领了行业标准制定和行业生态构建,填补了低功耗窄带物联网与传统宽带物联网之间的蜂窝通信芯片方案空白。芯片平台诞生之后,外部环境也发生了微妙变化,为LTE Cat.1bis的爆发创造了非常有利的条件。什么变化?当然是5G的商用。5G商用,意味着运营商又多了一张网络需要维护,势必增加其网络运维压力。为了减少压力,集中资源建设新网络,运营商会加速2G/3G的退网。2G/3G想要顺利退网,就必须有合适的替代技术,承接海量的中低速物联网终端。NB-IoT是窄带物联网,速度极低,仅可承载部分2G网络物联网终端。“中速率、语音通话、移动连接”的业务需求,自然而然就落在了LTE Cat.1bis 的身上。2020年5月,工信部发布了《关于深入推进移动物联网全面发展的通知》,其中明确指出:“推动2G/3G物联网业务迁移转网,引导新增物联网终端不再使用2G/3G网络,推动存量2G/3G物联网业务向NB-IoT/4G(含Cat.1)/5G网络迁移,建立协同发展的移动物联网综合生态体系。”针对这个协同发展的体系,行业已经形成了普遍共识,那就是物联网连接的“631”结构。所谓“631”,即指:60%的连接通过低速率网络实现,30%的连接通过中速率网络实现,10%的连接通过高速率网络实现。“631”结构LTE Cat.1bis,主要承载的是30%的中速率物联网连接领域。相比于NB-IoT,LTE Cat.1bis速率更高,可以支持标清摄像头、广告屏等应用,也多了移动性的,可以支持共享单车、物流追踪等对移动性有要求的应用。它还支持基本的语音业务,可以用于集群对讲、电话手表等业务。从技术替代趋势来看,NB-IoT将实现对80%以上2G终端的替代,而绝大部分的3G和少部分的2G,将迁移到Cat.1。▉ Cat.1bis的技术革新为了更好地完成自身使命,LTE Cat.1bis一直在进行着技术革新和功能演进。我们还是以紫光展锐的8910DM芯片平台为例。2020年11月,紫光展锐联合中国联通,基于采用8910DM芯片平台的联通雁飞Cat1模组,开展了业界首次Cat.1bis PSM低功耗特性现网规模测试。此前,人们一直以为eDRX/PSM是NB-IoT/eMTC独有的特性。这次测试表明,紫光展锐的Cat.1bis芯片也能够支持扩展非连续接收eDRX和深度睡眠PSM。如此一来,Cat.1bis的功耗表现实现从传统的mA级升级到uA级,大大拓宽了应用领域,可以满足例如智能表计、智能门锁、烟感报警等使用电池供电、对功耗要求苛刻的场景。在覆盖增强方面,8910DM芯片平台也有突破。它已成功实现对R13 coverage enhancement特性的支持,可提供最高15dB的增益。这将非常有利于将Cat.1bis部署于地下车库、地下室、密集城区阴影区等覆盖困难的场所,扩大应用领域。除了性能进一步提升之外,紫光展锐8910DM芯片平台还根据用户使用场景,进行了很多场景专属优化。举例来说,8910DM芯片原本就已支持BLE(蓝牙低功耗)功能,可进行近程设备升级维护和参数配置。如此,8910DM又新增支持了A2DP和HFP等蓝牙媒体协议,让物联网设备也能够进行音乐播放。比如,可以让支付云喇叭同时“变身”成蓝牙音箱、让公网对讲机还能连接蓝牙耳机、让共享两轮出行的路上也能有音乐陪伴。再举个例子,基于8910DM作为主芯片平台的公网对讲机方案,能够完全满足运营商对于公网对讲产品的要求。展锐针对公网对讲机的实网时延和通话音质,进行了大量优化:网络方面,包括支持双卡双待以及实现IP数据包在4G/2G实网下的时延优化;音质方面,通过充分利用芯片的语音处理能力, 对于噪音/回声/啸叫等对讲常见问题进行专项处理。上述这一系列的提升和优化,充分说明了LTE Cat.1bis可以实现功耗、成本、覆盖、功能方面的更完美平衡,给用户带来极致的使用体验。当然,这背后也离不开紫光展锐这样的民族芯片企业,在自主创新技术方面长期坚持不懈的投入。基于这些投入,紫光展锐已经成为国内集成电路设计产业的龙头,全球少数全面掌握2G/3G/4G/5G、Wi-Fi、蓝牙、电视调频、卫星通信等全场景通信技术的企业之一。根据数据显示,紫光展锐目前拥有近5000名员工,其中90%是研发人员,在全球拥有17个技术研发中心。目前,紫光展锐的Cat.1芯片已经实现千万级出货,全国市场占有率超过70%。数十款搭载展锐8910DM芯片的Cat.1bis模组,正在广泛应用于共享经济、金融支付、公网对讲、能源、工业控制等行业场景。▉ 结语2021年,LTE Cat.1bis还将继续火热下去。针对LTE Cat.1bis的生态,将会变得更加成熟。相关的物联网应用,也会越来越多地出现在我们身边。我们有理由相信,随着蜂窝物联网终端连接数的不断增加,“万物智联”的时代将加速向我们走来。整个社会的运作模式将发生根本性的变化,我们的工作效率和生活质量也将迎来难以想象的飞跃。期待这一天的早日到来。翻滚吧,LTE Cat.1bis!
  • [技术干货] Demo分享 | 当自动驾驶遇到ModelArts,ModelArts AI Gallery与HiLens Kit开发
    作者:历天一【摘要】 基于HiLens Kit已经基本开发完成,可部署到HiLens Kit,模型的选择为基于DarkNet53的YOLOv3模型,权重为基于COCO2014训练的数据集,而车道线的检测是基于OpenCV的传统方法实现的,可通过ModelArts AI Gallery与HiLens Kit全流程端云协同开发部署。先来看看最终视频效果吧(PS:请忽略背景音乐)!                                                                 主体流程介绍:(可选,忽略亦可,取决于摄像头质量,对于相机畸变较大的需要先计算相机的畸变矩阵和失真系数,对图片进行校正)图片校正;截取感兴趣区域,仅对包含车道线信息的图像区域进行处理;对感兴趣区域使用透视变换;针对不同颜色的车道线,不同光照条件下的车道线,不同清晰度的车道线,根据不同的颜色空间使用不同的梯度阈值,颜色阈值进行不同的处理。并将每一种处理方式进行融合,得到车道线的二进制图;提取二进制图中属于车道线的像素;对二进制图片的像素进行直方图统计,统计左右两侧的峰值点作为左右车道线的起始点坐标进行曲线拟合;使用二次多项式分别拟合左右车道线的像素点(对于噪声较大的像素点,可以进行滤波处理,或者使用随机采样一致性算法进行曲线拟合);计算车道曲率及车辆相对车道中央的偏离位置;效果显示(可行域显示,曲率和位置显示)。检测驾驶过程中道路中其他车辆状态,显示车辆类别、置信度,并通过YOLOv3进行检测车辆,然后返回的车辆检测框的坐标与当前坐标进行透视变换获取大约的距离作为车辆之间的距离dis。说明:本Demo的主体框架基于HiLens Kit已经基本开发完成,模型的选择为基于DarkNet53的YOLOv3模型,权重为基于COCO2014训练的数据集,而车道线的检测是基于OpenCV的传统方法实现的,所以计算量较大,导致整体速度较慢。关于部署和训练——基于ModelArts 和HiLens Kit的端云协同:考虑到部署,已经测试过部署到HiLens Kit了,对了,也支持在HiLens Stuido运行模拟测试,更推荐在HiLens Studio哦,比较方便,而且不需要硬件支持,只需要在HiLens Kit或HiLens Studio上安装pillow库就行了,关于如何在HiLens Kit和HiLens Studio上安装第三方库,非常简单的哦,可参考:在HiLens Kit上:https://bbs.huaweicloud.com/forum/thread-94316-1-1.html在HiLens Studio上:https://bbs.huaweicloud.com/forum/thread-94317-1-1.html如果想训练或优化,由没有硬件(比如GPU),那么很推荐使用ModelArts了,一站式开发,无缝衔接到HiLens Kit哦,关于ModelArts的介绍可参考:https://www.huaweicloud.com/product/modelarts.html同时也许还能提升下运行速度,这里介绍三种算法,亲测都可以部署到HiLens Kit推理使用哦,就在最新的AI Gallery(原AI市场)中哦,这里除了有算法,还有模型、数据集等等,很丰富,大家可以自己探索一下,同时还可以分享自己的算法给其他开发者,开发者订阅即可创建训练使用,很方便,相比于GitHub,不仅提供了源代码,还提供了用于训练的硬件资源,强大的Tesla V100 32GB版本哦。                                              (1)YOLOv3_Darknet53,没错,就是著名的YOLOv3,经典的目标检测网络,后续又推出了YOLOv4、YOLOv5(暂称此名吧),AI Gallery也推出了YOLOv5的,不过由于PyTorch框架暂不支持模         型转换,所以暂时放弃了。       关于YOLOv3_Darknet53的使用方法,算法界面介绍很详细,这里就不赘述了,可以参考使用,注意模型转换部分请参考这篇博文中模型转换部分哦:https://bbs.huaweicloud.com/blogs/199870       算法备用链接为:https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=2d52a07e-ccbd-420f-8999-2ea7b4bdd691     (2)YOLOv3_Resnet18(GPU),如果我们只想做车辆的检测或者为了简化模型,提高速度,可以选用主干网络为Resnet18的YOLOv3,网络更轻量,速度会快一些哦。       同样给上链接:https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=948196c8-3e7a-4729-850b-069101d6e95c     (3)YOLOv3_Resnet18(Ascend 910),和上面(2)版本差异不大,主要改为由GPU换为Ascend 910训练的,大家可自由选择哦。       链接为:https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=7087008a-7eec-4977-8b66-3a7703e9fd22好了,算法部分解决了,数据怎么办呢?ModelArts的AI Gallery同样想到了,提供了数据集哦,免费订阅,下载到自己的OBS导入就能用了(注意OBS需要一定花费),这里我也提供了开源数据集的5164张人车图片,供大家使用哦,上链接:https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=a337272b-6918-4282-83d6-2b15e2a4c716那么数据集和算法都有了,该训练了吧,在ModelArts上可以很好完成,凭借强大的Tesla V100 32GB或Ascend 910可以很快完成哦。上述整体操作流程部分可参考下述博文完成:https://bbs.huaweicloud.com/blogs/199870运行效果:完成执行如视频中所示处理的一帧需要约300ms,也就是FPS约为3,不较慢,需要优化。我觉得还有很大优化空间,比如:(1)预处理和后处理很费时间,真正推理很快,可以从这方面加速,不知道开启多线程是否有提升,应该有吧;(2)应该可以更好发挥专用硬件,记得好像有DVPP和AIPP吧,可以用来做色域转换的操作;  (3)  YOLOv3的后处理解析比较麻烦,这里用的是COCO的80类,但可以只用person、car两类,或者再加一点,同时nms也比较费时间,如果能用算子实现,融合到om模型中,会提速很多;(4)这里使用的是Python,如果用C++应该会提升一些,执行效率会高很多吧。(5)优化提速要根据硬件性能,对费时的部分做分析,以最大压榨硬件性能,需要做针对性、定制化地优化,我个人理解很浅,希望有熟悉的同学指教。备注:本Demo所用模型、代码均来自开源代码,好像是吴恩达老师的一个课程涉及的项目,但找不到出处了,如果知道的同学,还请在在下方回复指教,谢谢了。本Demo的模型精度以及运行速度不做保证,仅供学习交流使用。其他未尽事宜,还请多多指教。代码会开源的,敬请期待哦,谢谢。来源:华为云社区 https://bbs.huaweicloud.com/blogs/226039
  • [技术干货] 预训练图像处理Transformer:华为诺亚、北大等提出IPT模型,刷榜多项底层视觉任务
    作为自然语言处理领域的主流模型,Transformer 近期频频出现在计算机视觉领域的研究中。例如 OpenAI 的 iGPT、Facebook 提出的 DETR 等,这些跨界模型多应用于图像识别、目标检测等高层视觉任务。而华为、北大、悉大以及鹏程实验室近期提出了一种新型预训练 Transformer 模型——IPT(Image Processing Transformer),用于完成超分辨率、去噪、去雨等底层视觉任务。该研究认为输入和输出维度相同的底层视觉任务更适合 Transformer 处理。预训练模型能否在视觉任务上复刻在自然语言任务中的成功?华为诺亚方舟实验室联合北京大学、悉尼大学、鹏城实验室提出底层视觉 Transformer,使用 ImageNet 预训练,在多项视觉任务上达到 SOTA。与自然语言任务相比,视觉任务在输入形式上有很大差别。Transformer 等模型在自然语言处理任务上展现出了强大的特征学习能力,使用大量数据进行预训练的策略获得了成功。因此,很多研究都在考虑如何在计算机视觉领域发挥 Transformer 模型与预训练的潜力。近日,华为、北大、悉大以及鹏程实验室的研究者提出了一个名为 IPT(Image Processing Transformer)的预训练 Transformer 模型,用于完成超分辨率、去噪、去雨等底层视觉任务。IPT 具备多个头结构与尾结构用于处理不同的任务,不同的任务共享同一个 Transformer 模块。预训练得到的模型经过微调即可在多个视觉任务上大幅超越对应任务上的当前最好模型。 论文链接:https://arxiv.org/pdf/2012.00364.pdfTransformer 真的比 CNN 要好吗?卷积神经网络(CNN)是计算机视觉领域中的常用模型,自然语言处理领域中出类拔萃的 Transformer 模型在应用到计算机视觉任务中时,真的能比 CNN 更好吗?该研究通过一系列实验回答了这个问题。首先,研究者展示了经过预训练的 IPT 模型在不同任务上微调后达到的性能。如图 1 所示,在多项底层视觉任务中,IPT 模型均取得了巨大的性能提升。例如,对于不同倍率的超分辨率任务,IPT 普遍能够提升 0.4dB,而对于去噪和去雨任务则提升更多,提升了 1.6-2.0dB。图 1:IPT 模型与当前各项任务最好结果的对比情况。为了更好地说明为什么要用 Transformer,研究者还设计了一个基于 CNN 的预训练模型作为对照,并在 DIV2K 数据集 2 倍超分辨率的任务上探索了不同预训练数据量对模型性能的影响。图 2 展示了不同的数据量对 CNN 和 Transformer 模型的影响。结果显示,在预训练数据有限时,CNN 模型能获得更好的性能。随着数据量的增大,基于 Transformer 模块的 IPT 模型获得了显著的性能提升,曲线趋势也展现了 IPT 模型令人期待的潜力。图 2:预训练数据量对 CNN 与 IPT 模型的影响。可以看出,Transformer 模型能够更充分地发挥大规模训练数据的优势。自然语言处理领域的成功经验在底层视觉任务上得到了验证。底层视觉任务如何使用 Transformer在自然语言任务中,Transformer 的输入是单词序列,图像数据无法作为输入。解决如何使用 Transformer 处理图像的问题是将 Transformer 应用在视觉任务的第一步。不同于高层视觉语义任务的目标是进行特征抽取,底层视觉任务的输入和输出均为图像。除超分辨率任务之外,大多数底层视觉任务的输入和输出维度相同。相比于高层视觉任务,输入和输出维度匹配这一特性使底层视觉任务更适合由 Transformer 处理。具体而言,研究者在特征图处理阶段引入 Transformer 模块,而图像维度匹配则交给了头结构与尾结构,如图 3 所示:图 3:IPT 模型结构。研究者首先将图片经过一个头结构变换为特征图:这些输出特征再经过整形和拼接操作,还原为与输入相同维度的特征图。如此处理得到的特征图会被送入一个尾结构,被解码为目标图像。有了头结构和尾结构负责维度变换,Transformer 模块可以专心地做特征处理。这使得多任务的扩展变得简单:对于不同的任务,只需要增加新的头结构与尾结构即可,多种任务之间的 Transformer 模块是共享的。为了适应多任务,研究者在 Transformer 的解码模块中加入了一个可学习的任务编码。底层视觉任务的预训练与微调Transformer 的成功离不开大量数据预训练带来的性能提升。在这篇论文中,针对底层视觉任务,研究者提出一种使用 ImageNet 数据集对模型进行预训练的方法。结果显示,经过预训练的模型只需要做一些简单微调即可适用于多种下游任务。研究者使用 ImageNet 数据集生成多种退化图像,构成多种底层视觉任务训练集。具体来说,对 ImageNet 数据集中的自然图像进行下采样即可得到用于超分辨率任务的训练数据;加入噪声可生成用于去噪任务的训练数据;加入雨痕可产生用于去雨任务的训练集等。利用这些人工合成的数据,配以对应任务的多头多尾结构,多个任务的训练数据同时进行训练,整个模型可以通过监督损失函数进行训练:除此之外,为了提升模型在未曾预训练过的任务上的性能(如不同倍率的超分辨率、不同噪声强度的去噪任务),研究者根据特征块之间的相关性引入了对比学习方法作为自监督损失函数。具体来说,来自于同一图像的特征块之间的特征应当相互接近,来自于不同图像的特征块应当远离。这一自监督损失函数如下所示:研究者表示,通过引入这一对比损失函数,模型能够在未经预训练的任务上展现超越传统方法的性能。经过预训练的 IPT 模型,只需要在特定任务的数据集上进行微调,即可在此任务上达到很好的效果。在微调阶段,只有特定任务所对应的头尾结构以及 Transformer 模块被激活训练,与此任务无关的头尾模块被暂时冻结。IPT 刷榜多项底层视觉任务为了证明 IPT 的有效性,研究者在多种底层视觉任务上测试了模型效果,包括 2 倍、3 倍和 4 倍的超分辨率任务、两种强度的去噪任务以及去雨任务。每个具体任务所采用的 IPT 模型均为同一个预训练模型在特定任务上微调得到的。另外,研究者还做了一系列对照实验来确定 Transformer、对比学习损失函数等不同模块的重要性。所有实验都是在英伟达 Tesla V100 GPU 和 PyTorch 上完成的。首先对于超分辨率任务,其预训练样本是将图像进行 bicubic 下采样得到的。研究者报告了在 Set5、Set14、B100 以及 Urban100 四个数据集上的结果,如表 1 所示。表 1:超分辨率任务实验结果。可以看出,IPT 模型在所有设定下均取得了最好的结果。尤其是在 Urban100 数据集上,对比当前最好的超分辨率算法,IPT 模型展现出了大幅度的优势。如表 2 和表 3 所示,在去噪和去雨任务上,IPT 模型也展现出了类似的性能。表 2:去噪任务实验结果。表 3:去雨任务实验结果。下图展示了不同方法在去噪、去雨任务中的处理结果,从中可以看出 IPT 模型的输出结果更接近真值图像:泛化性能随后研究者进一步测试了预训练模型的泛化性能。具体做法是,将 IPT 模型在没有预训练过的任务上进行微调后测试。在表 4 中,对于噪声强度为 10 和 70 的设定下(预训练为 20 和 50),IPT 模型依旧展现出巨大的优势,展示了预训练模型良好的泛化性。表 4:未经预训练任务上的实验结果。控制变量研究除此之外, 为了探究对比损失函数对模型学习表示能力的影响,研究者在 2 倍超分辨率任务上测试了对比损失函数占不同比例时模型的性能。表 5 展示了模型在 Set4 数据集上不同的对比损失函数权重得到的 PSNR。结果显示,相比不加入此损失(λ=0)的情况,对比损失函数能够进一步提升模型学习表示的能力。表 5:对比损失函数的影响。从实验效果中可以看出,Transformer 模型在底层视觉任务上展现出了超过 CNN 的实力,说明 Transformer 在视觉任务中是可行的。不仅如此,它所表现出的因大量训练数据而带来的性能提升,展现出更大数据量、更大的模型在视觉领域的巨大潜力。这一方向值得更多的研究者做更多深入探索。表 5:对比损失函数的影响。从实验效果中可以看出,Transformer 模型在底层视觉任务上展现出了超过 CNN 的实力,说明 Transformer 在视觉任务中是可行的。不仅如此,它所表现出的因大量训练数据而带来的性能提升,展现出更大数据量、更大的模型在视觉领域的巨大潜力。这一方向值得更多的研究者做更多深入探索。
  • [应用开发] acl_yolov3_demo 跑通sample 中 yolo3 问题
    终端报错如下:mo Yolov3 model path: model/yolov3.ominput tensor info:input[0]:    name: data    data type: 4    shape info: dim[0]: 1    dim[1]: 608    dim[2]: 608    dim[3]: 3    input[1]:    name: img_info    data type: 0    shape info: dim[0]: 1    dim[1]: 4    output tensor info:output[0]:    name: detection_out3:0:box_out    data type: 0    shape info: dim[0]: 1    dim[1]: 6144    output[1]:    name: detection_out3:1:box_out_num    data type: 3    shape info: dim[0]: 1    dim[1]: 8    Yolov3 Detect on image: image/demo.jpgResize Failed!yolov3 forward failed!请问图片大小为什么错误,是因为对输入图形有要求?如何调?感谢是图片格式问题,换了个jpg图片已解决
  • [技术干货] Studio2.17——关于“人工智能-Manas引擎-图像识别”系列控件的使用与返回结果的解析
    1. 具体用法可参考附件 Manas_图像识别.zip ;2. 当中举例了身份证、火车票识别,其他类型的识别也是如此 ;3. 因为返回值是python中的dict字典类型,所以可以直接用获取字典值的方式(比如用索引的方式:dict[key], 或get方法,dict.get(key))从返回值中获取想要的字段以及分析等等 。下图为“ Manas_图像识别.zip ”机器人项目中的执行结果:
  • [其他] 傅立叶变换处理图像的原理(1)
    数字图像现在已经成为我们日常生活的一部分。因此,数字图像处理变得越来越重要。如何提高图像的分辨率或降低图像的噪声一直是人们热门话题。傅里叶变换可以帮助我们解决这个问题。我们可以使用傅立叶变换将灰度像素模式的图像信息转换成频域并做进一步的处理。今天,我将讨论在数字图像处理中,如何使用快速傅立叶变换,以及在Python中如何实现它。操作流程如下 (从左到右):1. 实现快速傅立叶变换,将灰度图像转换为频域2. 零频域部分的可视化与集中3. 应用低/高通滤波器过滤频率4. 离散5. 实现快速傅里叶逆变换生成图像数据让我们深入到每一部分,找出这些步骤背后的理论。快速傅里叶逆变换与现实生活中的光波和声波不同,由于像素的不连续性,数字图像是离散的。这意味着我们应该实现离散傅立叶变换(DFT)而不是傅立叶变换。然而,离散傅立叶变换(DFT)常常太慢而不实用,这就是我选择快速傅立叶变换(FFT)进行数字图像处理的原因。
  • [其他] 利用边缘检测计算物体面积(1)
    在农业中,通常希望获取不同土地的面积。虽然获取这些土地的面积操作相对容易,但是却涉及高额的费用。另外,如果对于不规则形状的土地,测量土地面积的大小就变得相对困难。幸运的是,有大量以卫星图像的形式公开提供的农场土地数据。如下图所示就是得到的土地的图片。根据这样的图片,应用图像处理算法,就可以计算得到每块土地的面积。我们可以使用导数滤波器,因为它似乎与人类如何区分土地或地块的方式相匹配。当我们观察物体时,我们使用对比度和阴影来确定物体的形状,种类。类似地,可以使用导数滤波器来寻找对比区域。如果像素值与其周围像素之间的差大于阈值,则将其标记为1,否则标记为0。这将创建一个具有选定原始图像边缘的二进制图像。原始图像中存在大量噪点和细节,这可能会降低算法的成功率。建议在应用导数滤波器操作之前,对图像进行模糊滤波去除噪声。我们可以使用任意的模糊滤波器完成图像去噪。由于我们主要目的是消除噪声和微小的细节,同时保留绘图的颜色以用于对比,因此我们使用了4x4的中值滤波器。之后对图像进行灰度化,得到灰度图像以便后续进行边缘检测。具体结果如下图所示。之后尝试了三种边缘检测方法以找到最佳结果。第一种边缘检测滤波器是Sobel滤波器。该滤波器在图像的每个像素上执行梯度检测。内置的Matlab、opencv函数可在水平和垂直方向上执行操作,并将结果组合在一起。具体结果如下所示。通过结果可以知道生成的图像几乎没有噪点。但是,不幸的是将滤波后的图像与原始图像进行比较,可以看出,地块之间的许多分隔线没有被很好地拾取。在农田的颜色与相邻地块差异不大的地区尤其如此。第二种边缘检测方法是Canny过滤器。滤波结果在下面给出,从Canny滤波结果可以看出Canny滤波器检测了了更多的边缘。但是同样存在缺点,这种方式会产生更多的噪声。考虑到Canny算法将通过幅度阈值函数的像素与通过稍低阈值函数的相邻像素合并,这是可以预期的。Canny算法比简单的Sobel滤波器更为复杂。它还取决于事先要进行的高斯平滑。使用中值滤波器可能会阻止最佳结果。第三种滤波器是高斯滤波器的拉普拉斯算子。该滤波器提取的结果如下图所示。通过结果我们可以发现,无论我们使用什么过滤器,都可以看到大多数突出的道路都被检测到了。但是,农田内部的小区域和靠近道路的房屋是否产生的噪声取决于我们选取的滤波器种类。农田图像的这一特征使其非常适合高斯滤波器的拉普拉斯算子。查看测试结果,可以得出一个比较理想的结果。找到的道路数量最多,噪音最小。为了进一步去除图像中的噪声,去除总像素面积小于平均像素面积值的所有白色区域。这个阈值是我们经过多次试验得到的一个经验值。小伙伴也可以尝试其他的阈值。之后对图像进行反转,得到田地的区域。之后对这个结果进行尺寸位4的膨胀运算,结果如下图所示。有了这个图像,计算每个土地的面积就很简单了。Matlab(或OpenCV)的regionprop函数可用于查找每个区域的面积。仍有少量田地不是真正的田地,有些是道路或其他细节。为了减轻这些面积,我们只计算面积大于平均值减去一个标准偏差的区域。然后为每个区上色,并在其位置打印其像素尺寸。结果可以在下图中看到。打印的尺寸是该区域中像素的数值。除非像素和图像尺寸之间存在已知比例,否则这些值将毫无用处。但是,我们知道卫星图(例如Google Maps)往往带有刻度,这就位像素数值提供了意义。结果还是比较满意。该应用程序能够将大多数地块分成自己的特定区域。但是,有一些例外。例如,像素值47,680的大橙色部分将两个区域融合在一起。这可以通过使用膨胀值来解决。要考虑的另一项内容是,道路的扩张确实侵蚀了农场的像素区域。为了获得更准确的农场价值,可能需要将这种侵蚀的结果添加到农场的总面积中。原文地址:https://towardsdatascience.com/finding-land-area-of-farm-plots-using-edge-detection-5b070cc05c5a作者:Tim Chin
  • [技术干货] php图像处理
    使用 PHP 图像处理函数,需要加载 GD 支持库。请确定 php.ini 加载了 GD 库:Window 服务器上:extension = php_gd2.dllLinux 和 Mac 系统上:extension = php_gd2.so使用 gd_info() 函数可以查看当前安装的 GD 库的信息:<?phpvar_dump(gd_info());?>输出大致如下:array(12) {  ["GD Version"]=>  string(26) "bundled (2.1.0 compatible)"  ["FreeType Support"]=>  bool(true)  ["FreeType Linkage"]=>  string(13) "with freetype"  ["T1Lib Support"]=>  bool(false)  ["GIF Read Support"]=>  bool(true)  ["GIF Create Support"]=>  bool(true)  ["JPEG Support"]=>  bool(true)  ["PNG Support"]=>  bool(true)  ["WBMP Support"]=>  bool(true)  ["XPM Support"]=>  bool(false)  ["XBM Support"]=>  bool(true)  ["JIS-mapped Japanese Font Support"]=>  bool(false)}
  • [其他] 两大图像处理库Halcon和Opencv 的对比
    OpenCVHalcon开发语言C++、C#(emgu)、Python、Ruby、MATLAB等语言C,C++,C#,Visual basic和Delphi等语言应用场合侧重计算机视觉领域,侧重研究领域侧重机器视觉领域,侧重应用领域费用免费收费开放性及版本更新速度开源(可看底层源码),版本和功能更新慢商业软件(底层代码封装),版本和功能更新快对使用者的门槛偏科研,有难度,有深度,完全从底层开发,对使用者门槛高,开发效率低,开发慢偏工程应用,使用封装好的功能函数,对使用者门槛低,开发效率高,开发快资料及技术支持资料少。遇到问题,难以获得技术支持资料多。遇到问题,可以及时、有效的获得技术支持Halcon 在工业视觉领域属于经常使用的软件,相对于opencv的开源精神Halcon属于商业非开源项目并且收费。Halcon起源于德国在国内的工业视觉领域市场占用率遥遥领先。作者在使用halcon的过程中也感受了其软件的人性化,有独立的调试编程环境。对应主流的语言C#、C++、VB等工业上常用的语言都能提供流程的调用。Halcon提供的每一年都有升级,在升级的过程中算子的速度更快能达到汇编级别的加速度,对比opencv在总体的算子性能领先程序在五到十年。与此同时Opencv在调试的过程中没有Halcon方便,opencv的使用需要用户有比较好的编程基础,并且图像并不是实时能够观察调整。Halcon:底层功能算法多,运算性能快,开发需要一定软件功底和图像处理理论。快速学习的做法:研究实例、做实战项目。halcon不能提供相应的界面编程需求,需要和vs来构造界面,才能构成一套完整软件。 OpenCV Opencv:计算机图像方面的图像库,开源的,可以用于商用,在很多高校和科研机构使用比较多,更多的人选择它,是为了写自己的算法,其调试不像Halcon那样方便,其项目开发周期也比Halcon要长,所以在工业应用上,还不是太多。 但是,如果你是搞算法的,并且项目周期长,公司不愿意购买/使用商业视觉软件的,可以考虑Opencv;如果你的项目周期短,公司可以承受商业软件的成本,选择Halcon会是比较明智的选择。
总条数:297 到第
上滑加载中