-
8月19日,中国科学院院士、清华大学人工智能研究院院长张钹在2022世界机器人大会主论坛上表示,纯粹靠数据学习生成的人工智能不可解释,处于不可控状态,为了避免危险,需要发展安全、可靠、可信的智能机器人。“目前机器是人的奴隶,我们叫它做什么它就做什么。但是我们希望进一步发展智能机器人,这就存在另一种可能性,即机器人会不会成为我们的主人?现在,大家越来越认识到这个可能性是存在的,阿西莫夫、霍金也提出过相关观点,如果机器的智能超过我们,我们就失去对它控制,对于这样的机器人要加以限制,加以治理。”张钹说。张钹表示,当前机器人智能还很低的时候就处于不可控状态,这让人类面临危险。“比如用深度学习的方法处理事情,生成的人工智能算法危险、不鲁棒(鲁棒性,指系统对异常情况的适应能力),没有可靠性保证,如果使用这种人工智能算法,必然会对人类带来伤害,这已经成为现实问题。参考当前人工智能的发展状况,此担心看起来是一个近忧,而不是远虑。”在他看来,(人工智能)纯粹靠数据驱动的方法必然不鲁棒,必然不可解释,必然不可靠。人在从事人工智能工作的时候就一定要考虑到相关的可能性,要解决这类问题,唯一的可能性就是加上知识,加上模型,办法很简单,但执行起来很困难,因为把知识加到数据驱动中去,方法上要有很多改变。张钹表示,我们提出的第三代人工智能就是要解决第二代人工智能算法不安全,不可靠,不可信,不可控的状态。第一代人工智能主要靠知识驱动,第二代人工智能主要靠数据驱动,这两个方法都有片面性,必须把这两个方法加起来,才有可能发展安全的、可靠、可信的智能机器人。--- 一家之言,权做参考吧...
-
当前,数字化、智能化进程大大加速,原来预期5-10年的进程已提前到来,人工智能进入到产业级大模型时代,数字化、网络化、智能化正在给各行各业带来积极变化。尤其在相关就业方面,我国人社部将大数据预处理作为一种新职业,命名为“AI训练师”,预计到2022年全国需要200万AI训练师。然而,数字化转型并非一蹴而就,不同群体面临不同的行业痛点。针对中小企业数字化转型,中国工程院院士邬贺铨认为:“中小企业不见得非要买很多信息化的产品、手段、工具、软件,可以通过政府补贴购买云服务,利用头部公司的AI技术来推动信息化进程”。对国企来说,数据互联互通共享是转型的一大难点。国有企业尽管有很多数据,但是并不擅长数据挖掘。对此,邬贺铨建议,国有企业要和IT企业合作挖掘数据。同时,邬贺铨认为数字化转型是一把手工程,晚转不如早转。--- 2022年全国需要200万AI训练师 .... 不知道市场规模是不是有了这么大?--- 数字化转型是一把手工程,... 确实,必须要一把手抓,一把手代表了重视度
-
虽然效率上还有点问题,但是功能上从逻辑上是已经完成了的。 限于本人水平有限,如果有不合理之处,你也别bb,因为谁也不比谁强多少。 认真的讲,可以揭示许多黑盒的本质问题,而不是对着CPU说明书照本学科。D_BIT_ZERO = '0' D_BIT_ONE = '1' D_TRUE = D_BIT_ONE D_FALSE = D_BIT_ZERO D_TEN_ONE = '1' D_TEN_TWO = '2' D_TEN_THREE = '3' D_TEN_FOUR = '4' D_TEN_FIVE = '5' D_TEN_SIX = '6' D_TEN_SEVEN = '7' D_TEN_EIGHT = '8' D_TEN_NINE = '9' D_TEN_ZERO = '0' D_ONE = '00000001' D_TWO = '00000010' D_THREE = '00000011' D_FOUR = '00000100' D_FIVE = '00000101' D_SIX = '00000110' D_SEVEN = '00000111' D_EIGHT = '00001000' D_NINE = '00001001' D_ZERO = '00000000' D_TEN = '00001010' D_LENGTH = D_EIGHT D_BLANK = '' def d_bit_is(a, b): """位操作-是""" if a == D_BIT_ZERO: if b == D_BIT_ZERO: return D_TRUE if b == D_BIT_ONE: return D_FALSE if a == D_BIT_ONE: if b == D_BIT_ZERO: return D_FALSE if b == D_BIT_ONE: return D_TRUE def d_bit_isnt(a, b): """位操作-非""" return d_bit_not(d_bit_is(a, b)) def d_bit_and(a, b): """位操作-与""" if a == D_BIT_ZERO: if b == D_BIT_ZERO: return D_FALSE if b == D_BIT_ONE: return D_FALSE if a == D_BIT_ONE: if b == D_BIT_ZERO: return D_FALSE if b == D_BIT_ONE: return D_TRUE def d_bit_not(a): """位操作-取反""" if a == D_BIT_ZERO: return D_BIT_ONE if a == D_BIT_ONE: return D_BIT_ZERO def d_bit_or(a, b): """位操作-或""" if a == D_BIT_ZERO: if b == D_BIT_ZERO: return D_FALSE if b == D_BIT_ONE: return D_TRUE if a == D_BIT_ONE: if b == D_BIT_ZERO: return D_TRUE if b == D_BIT_ONE: return D_TRUE def d_bit_xor(a, b): """ 位操作-异或 简单的说,位的异或结果就是相同为0,不同为1 """ return d_bit_or(d_bit_and(d_bit_not(a), b), d_bit_and(a, d_bit_not(b))) def d_xor(m, n): res = '' ml = list(m) nl = list(n) while ml and nl: mlp = ml.pop() nlp = nl.pop() xor = d_bit_xor(mlp, nlp) res = xor + res return res def d_is(m, n): """ 判断两个数相等 数的表示和值是满射,直接复用字符串的比较方法,提升效率 下面段1使用栈的方式更接近本质一点 段2无法避开index的数值运算 段3是异或串联的思路,只要有一位是不同的,串联结果即不同 段4的并行迭代貌似不是扁平了,暂时不讨论了 """ if m == n: return D_TRUE else: return D_FALSE # 段1 # res = D_TRUE # ml = list(m) # nl = list(n) # while ml: # mlp = ml.pop() # nlp = nl.pop() # if d_bit_isnt(mlp, nlp) == D_TRUE: # res = D_FALSE # break # return res # 段2 # res = D_TRUE # i = D_ZERO # # i in range(d_len(num1)) # while D_TRUE == D_TRUE: # if d_not(d_bit_and(d_less_or_is(D_ZERO, i), d_less(i, d_len(num1)))) == D_TRUE: # break # # b1 = num1[i] # b1 = d_index(num1, i) # # b2 = num2[i] # b2 = d_index(num2, i) # if d_bit_isnt(b1, b2) == D_TRUE: # res = D_FALSE # break # i = d_next(i) # 段3 # xor = d_xor(num1, num2) # # 当且仅当xor各位同为0时两数相等 # s_xor = d_serials_or(xor) # if s_xor == D_FALSE: # return D_TRUE # 段4 # for m, n in zip(num1, num2): # if d_bit_is(m, n) == D_FALSE: # return D_FALSE def d_s_and(num): """ 串联与 """ res = D_TRUE for n in num: res = d_bit_and(res, n) return res def d_serials_or(num): """ 串联或 """ res = D_FALSE for n in num: res = d_bit_or(res, n) return res def d_next(num): """ 位操作-后继 注意注释的代码,这里next调用了index,而index又调用了next,这是一个循环算法,导致栈溢出 TODO 自增溢出问题 """ res = '' num_l = list(num) carry = D_TRUE while num_l: b = num_l.pop() if carry == D_TRUE: # 吞掉进位标识 if d_bit_is(b, D_BIT_ZERO) == D_TRUE: carry = D_FALSE # 0变1,1变零(进位自旋) b = d_bit_not(b) res = b + res return res # 失败尝试1 # res = d_xor(num, D_ONE) # return res # 失败尝试2 # # index为-1即length-1 # # res = num[-1] # res = d_index(num, d_prev(d_len(num))) # # 进位标识 # b_carry = D_FALSE # # 如果最低位为1 # if d_bit_is(res, D_BIT_ONE) == D_TRUE: # # 结果最低位置0 # res = D_BIT_ZERO # # 进位 # b_carry = D_BIT_ONE # # 如果最低位为0 # if d_bit_is(res, D_BIT_ZERO) == D_TRUE: # # 结果最低位置1 # res = D_BIT_ONE # # i in range(1, len(num)) # i = D_ONE # while d_bit_and(d_less_or_is(D_ONE, i), d_less(i, d_len(num))) == D_TRUE: # # 自右往左取第i位 # # index = -(i+1) 即 length-1-i # index = d_minus(d_minus(d_len(num), i), D_ONE) # # bi = num[-i - 1] # -2,-3,...,-8 # bi = d_index(num, index) # # 如果第i位为0,且前i-1位进位的情况 # if d_bit_and(d_bit_is(bi, D_BIT_ZERO), d_bit_is(b_carry, D_BIT_ONE)) == D_TRUE: # # 本位置1 # bi = D_BIT_ONE # # 进位标识置0 # b_carry = D_BIT_ZERO # # 低位全置0 TODO # res = d_zero(d_len(res)) # # 如果第i位为1,且前i-1位进位的情况 # if d_bit_and(d_bit_is(bi, D_BIT_ONE), d_bit_is(b_carry, D_BIT_ONE)) == D_TRUE: # # 本位置0,继续进位 # bi = D_BIT_ZERO # res = bi + res # i = d_next(i) # # 溢出 # if b_carry == D_TRUE: # res = d_zero(d_len(res)) # return res def d_bit_less(a, b): """位操作-小于""" if d_bit_is(a, D_BIT_ONE) == D_TRUE: if d_bit_is(b, D_BIT_ZERO) == D_TRUE: return D_FALSE if d_bit_is(a, D_BIT_ZERO) == D_TRUE: if d_bit_is(b, D_BIT_ONE) == D_TRUE: return D_TRUE def d_less_compare(m, n): res = D_FALSE ml = list(m) nl = list(n) # TODO and # TODO 对于等于的讨论 while ml: mlp = ml.pop() nlp = nl.pop() if d_bit_less(mlp, nlp) == D_TRUE: res = D_TRUE if d_bit_less(nlp, mlp) == D_TRUE: res = D_FALSE # TODO 关于负数的特殊讨论 return res def d_less(m, n): if m == d_bound(d_len(m)): # TODO m = d_zero(d_len(m)) # TODO # 先进行有效位数的比较提高效率 m_len = d_len(d_cut_left_zeros(m)) n_len = d_len(d_cut_left_zeros(n)) m_len, n_len = d_alin(m_len, n_len) if d_less_compare(m_len, n_len) == D_TRUE: return D_TRUE return d_less_compare(m, n) def d_less_or_is(num1, num2): """小于等于""" dp = d_less(num1, num2) di = d_is(num1, num2) return d_bit_or(dp, di) def d_plus(m, n): """加法""" # 比较交换,保证左侧是大数 if d_less(m, n) == D_TRUE: m, n = n, m res = m # 溢出标识 of = D_FALSE zero = d_zero(d_len(m)) count = zero while d_less(count, n) == D_TRUE: # 溢出之后,res会归零重新处理 res = d_next(res) if d_bit_is(res, zero): of = D_TRUE # 即使溢出,也继续运算,方便后续处理 count = d_next(count) return res, of def d_zero(n=D_LENGTH): """返回n位的0""" # 8位直接返回常量 if d_is(n, D_EIGHT) == D_TRUE: return D_ZERO # 其他位数直接拼接 # TODO 关于异常输入的判断问题,何时抛异常,何时逻辑处理 else: res = D_BLANK i = D_ZERO while D_TRUE == D_TRUE: if d_is(i, n) == D_TRUE: break # TODO += res = res + D_BIT_ZERO i = d_next(i) return res def d_bound(n): """返回n位的越界数""" return d_ones(n) def d_one(n=D_LENGTH): """返回8位的1""" # TODO 校验方法调用 if d_is(n, D_EIGHT) == D_TRUE: return D_ONE else: res = D_ONE i = D_ZERO # 循环 n-1 次 while D_TRUE == D_TRUE: if d_is(i, n) == D_TRUE: break res = D_ZERO + res i = d_next(i) return res def d_ones(n=D_LENGTH): """返回8位全1""" return d_not(d_zero(n)) def d_one_neg(n=D_LENGTH): """返回负1""" # TODO 校验方法调用 return d_not(d_one(n)) def d_mul(m, n): """ 乘法 效率: 1.比较交换 """ if d_less(m, n): m, n = n, m res = m # 溢出标识 of = D_FALSE # 乘法扩容问题 i = d_next(d_zero(d_len(m))) while D_TRUE == D_TRUE: # jump = d_bit_not(d_less(i, n)) if d_is(i, n) == D_TRUE: break res, off = d_plus(res, m) i = d_next(i) # 越界 if off == D_TRUE: of = D_TRUE # TODO 溢出问题 return res, of def d_power(m, n): """幂""" res = m if d_is(n, d_zero(d_len(m))) == D_TRUE: return d_one(d_len(m)) count = d_one() # 执行n-1次 while D_TRUE == D_TRUE: if d_is(count, n) == D_TRUE: break res, _ = d_mul(res, m) count = d_next(count) return res def d_not(num): """并列取反""" res = D_BLANK for n in num: res = res + d_bit_not(n) return res def d_prev(num): """前一元素""" # one_neg = d_ones_neg() # res, _ = d_plus(num, one_neg) res = D_BLANK # 借位标识 borrow = D_TRUE nl = list(num) while nl: b = nl.pop() if borrow == D_TRUE: if d_bit_is(b, D_BIT_ONE) == D_TRUE: # 共轭 borrow = D_FALSE # 自旋 b = d_bit_not(b) res = b + res return res # # # # i in range(0, d_len(num)) # while d_bit_and(d_less_or_is(D_ZERO, i), d_less(i, d_len(num))) == D_TRUE: # # 自右往左取第i位 # index = d_minus(d_minus(d_len(num), D_ONE), i) # # bi = num[-(i + 1)] # -1, -2,-3,...,-8 # bi = d_index(num, index) # # 如果第i位为1,且前i-1位借位的情况 # if d_bit_and(d_bit_is(bi, D_BIT_ONE), borrow) == D_TRUE: # # 本位置0,借位标识置0,后续位数均置1 # bi = D_BIT_ZERO # borrow = D_FALSE # res = d_ones(d_len(res)) # res = bi + res # i = d_next(i) # # 溢出 # if borrow == D_TRUE: # res = d_zero(d_len(res)) # return res def d_minus(m, n): """减法""" res = m i = d_zero(d_len(m)) # 执行n次 while D_TRUE == D_TRUE: if d_is(i, n) == D_TRUE: break res = d_prev(res) i = d_next(i) # 对于结果为0的特殊处理(存在两个零的问题) TODO 待完善 if d_is(res, d_bound(d_len(n))) == D_TRUE: res = d_zero(d_len(m)) return res def d_right(num): """右移""" res = '0' i = D_ZERO # i in range(d_len(num) - 1) while D_TRUE == D_TRUE: if d_is(i, d_prev(d_len(num))) == D_TRUE: break res = res + d_index(num, i) i = d_next(i) return res def d_left(num): """左移""" res = '0' i = D_ZERO # i in range(d_len(num) - 1) while D_TRUE == D_TRUE: if d_is(i, d_prev(d_len(num))) == D_TRUE: break index = d_minus(d_minus(d_len(num), D_ONE), i) # res = num[-i - 1] + res res = d_index(num, index) + res i = d_next(i) return res def d_frac(m, n): """除法""" # 如: 127/10 127-10=117 if d_less(m, n) == D_TRUE: return d_zero(d_len(m)), m remainder = m quotient = d_zero(d_len(m)) while True: remainder = d_minus(remainder, n) quotient = d_next(quotient) if d_less(remainder, n) == D_TRUE: break return quotient, remainder def d_bin_exp(num): """整数的二进制表示""" exp = D_ZERO i = D_ZERO # i in range(d_len(num)): dlen = d_len(num) while D_TRUE == D_TRUE: if d_is(i, dlen) == D_TRUE: break index = d_minus(d_minus(dlen, D_ONE), i) # b = num[-i-1] b = d_index(num, index) bb = d_ten_to_bin(b) m, _ = d_mul(bb, d_power(D_TEN, i)) exp, _ = d_plus(exp, m) i = d_next(i) return exp def d_ten_exp(num): """ 整数的十进制表示 循环商10取余 以123为例说明: 123/10 = 12...3 12/10 = 1...2 1/10 = 0...1 则3为最低位 2为次位 1为最高位 """ # 以123为例说明: 123/10 = 12...3 12/10 = 1...2 1/10 = 0...1 # 3为最低位 2为次位 1为最高位 exp = D_BLANK while D_TRUE == D_TRUE: num, r = d_frac(num, D_TEN) bt = d_bin_to_ten(r) exp = bt + exp if d_is(D_ZERO, num) == D_TRUE: break if exp == D_BLANK: exp = D_BIT_ZERO return exp def d_cut_right_zeros_align(num): """截掉右侧的零,并对齐""" res = d_cut_right_zeros(num) i = D_ZERO # i in range(d_len(res), d_len(num)) dlen = d_len(num) while D_TRUE == D_TRUE: if d_is(i, dlen) == D_TRUE: break res = D_BIT_ZERO + res i = d_next(i) return res def d_cut_right_zeros(num): """截掉右侧的零""" res = D_BLANK join_flag = D_FALSE i = D_ZERO # i in range(d_len(num)) dlen = d_len(num) while D_TRUE == D_TRUE: if d_is(i, dlen) == D_TRUE: break index = d_minus(d_minus(dlen, D_ONE), i) # b = num[-i-1] b = d_index(num, index) # 出现第一个0后则不再继续截断 if join_flag == D_FALSE: if b == D_BIT_ONE: join_flag = D_TRUE if join_flag == D_TRUE: res = res + b i = d_next(i) return res def d_ten_dec_exp(num): """ 小数部分的十进制表示 放大位数,循环乘二进制的10,截取整数位,直至小数位为0 例如: 0.d1 d2 ... dn = d1*10^-1 + d2*10^-2 + ... + dn*10^-n d1.d2 ... dn = d1 + d2*10^-1 + ... + dn*10^-(n-1) TODO 效率低 """ exp = D_BLANK num_d = num while D_TRUE == D_TRUE: # num_d = 11111110 if d_is(num_d, D_ZERO) == D_TRUE: break num_ex = d_expand_left(num_d) num_mul, _ = d_mul(num_ex, d_expand_left(D_TEN)) num_i, num_d = d_float_bin_parts(num_mul) num_i_ten = d_bin_to_ten(num_i) exp = exp + num_i_ten return exp def d_ten_to_bin(num): """十进制位转为二进制位""" if num == D_TEN_ONE: return D_ONE if num == D_TEN_TWO: return D_TWO if num == D_TEN_THREE: return D_THREE if num == D_TEN_FOUR: return D_FOUR if num == D_TEN_FIVE: return D_FIVE if num == D_TEN_SIX: return D_SIX if num == D_TEN_SEVEN: return D_SEVEN if num == D_TEN_EIGHT: return D_EIGHT if num == D_TEN_NINE: return D_NINE if num == D_TEN_ZERO: return D_ZERO # 表示错误,方便调试,实际应该抛出一个异常 ex = Exception("二进制转换异常!") raise ex def d_bin_to_ten(num): """二进制位转为十进制位""" if d_is(num, D_ONE) == D_TRUE: return D_TEN_ONE if d_is(num, D_TWO) == D_TRUE: return D_TEN_TWO if d_is(num, D_THREE) == D_TRUE: return D_TEN_THREE if d_is(num, D_FOUR) == D_TRUE: return D_TEN_FOUR if d_is(num, D_FIVE) == D_TRUE: return D_TEN_FIVE if d_is(num, D_SIX) == D_TRUE: return D_TEN_SIX if d_is(num, D_SEVEN) == D_TRUE: return D_TEN_SEVEN if d_is(num, D_EIGHT) == D_TRUE: return D_TEN_EIGHT if d_is(num, D_NINE) == D_TRUE: return D_TEN_NINE if d_is(num, D_ZERO) == D_TRUE: return D_TEN_ZERO # 表示错误,方便调试,实际应该抛出一个异常 ex = Exception("十进制转换异常!") raise ex def d_float_ten_exp(num): """浮点数的十进制表示""" i, d = d_float_bin_parts(num) exp_int = d_ten_exp(i) exp_deci = d_ten_dec_exp(d) exp = exp_int + '.' + exp_deci return exp def d_float_bin_exp(num): """浮点数的二进制表示""" dot = '.' dlen = d_len(num) index = d_bin_exp(str(num.index(dot))) # i = num[0:index] i = d_slice(num, D_ZERO, index) # d = num[index + 1:] d = d_slice(num, d_next(index), dlen) exp_i = d_bin_exp(i) exp_d = d_bin_dec_exp(d) return exp_i + exp_d def d_cut_left_zeros(num): res = D_BLANK join_flag = D_FALSE i = D_ZERO # i in range(d_len(num)) dlen = d_len(num) while D_TRUE == D_TRUE: if d_is(i, dlen) == D_TRUE: break # b = num[i] b = d_index(num, i) # 出现第一个0后则不再继续截断 if join_flag == D_FALSE: if b == D_BIT_ONE: join_flag = D_TRUE if join_flag == D_TRUE: res = b + res i = d_next(i) return res def d_cut_left_zeros_align(num): """截掉左侧的零,然后右侧补零""" res = d_cut_left_zeros(num) i = d_len(res) # i in range(d_len(res), d_len(num)) dlen = d_len(num) while D_TRUE == D_TRUE: if d_is(i, dlen) == D_TRUE: break res = res + D_BIT_ZERO i = d_next(i) return res def d_align_right(num): """右侧补零""" # i in range(d_len(num), D_LENGTH) i = d_len(num) while D_TRUE == D_TRUE: if d_is(i, D_LENGTH) == D_TRUE: break num = num + D_BIT_ZERO i = d_next(i) return num def d_float_bin_parts(num): """浮点数整数部分和小数部分的二进制表示""" le = d_len(num) # d_len_half = int(d_len(num) / 2) d_len_half, _ = d_frac(le, D_TWO) # int_part = num[:d_len_half] int_part = d_slice(num, D_ZERO, d_len_half) # decimal_part = num[d_len_half:] # from to # 00000000 00001000 # from to # 00001000 00010000 decimal_part = d_slice(num, d_len_half, le) return int_part, decimal_part def d_mul_float(f1, f2): """ 浮点数乘法 以1.5*1.25为例: i1 = 1 d1=0.5 i2 = 1 d2=0.25 p1 = i1*i2 = 1 p2 = i1*d2 = 0.25 p3 = i2*d1 = 0.5 p4 = 0.5*0.25 = 0.125 """ # 预留浮点数越界标识 TODO 扩容处理, 科学计数法 of = D_FALSE i1, d1 = d_float_bin_parts(f1) i2, d2 = d_float_bin_parts(f2) # 记p1=i1*i2 p2=i1*d2 p3=i2*d1 p4=d1*d2 p1_i, _ = d_mul(i1, i2) # f1整数部分乘f2小数部分 p2_i, p2_d = d_mul_int_dec(i1, d2) # f2整数部分乘f1小数部分 p3_i, p3_d = d_mul_int_dec(i2, d1) # f1小数部分乘f2小数部分 p4_d = d_mul_dec(d1, d2) i, _ = d_plus(p1_i, p2_i) i, _ = d_plus(i, p3_i) d, _ = d_plus(p2_d, p3_d) d, _ = d_plus(d, p4_d) res = i + d return res def d_expand_left(num): """扩容,长度变为原来的二倍,前面补零""" return d_zero(d_len(num)) + num def d_expand_right(num): """扩容,长度变为原来的二倍,后面补零""" return num + d_zero(d_len(num)) def d_cut_right(num): """截掉右侧长度的一半""" # d_len_half = int(d_len(num) / 2) d_len_half, _ = d_frac(d_len(num), D_TWO) # res = num[:d_len] res = d_slice(num, D_ZERO, d_len_half) return res def d_cut_left(num): """截掉左侧长度的一半""" # d_len = int(d_len(num) / 2) d_len_half, _ = d_frac(d_len(num), D_TWO) # res = num[d_len:] res = d_slice(num, d_len_half, d_len(num)) return res def d_mul_int_dec(m, n): """ 整数部分与小数部分相乘 主要考虑越界问题,先扩充位数,再相乘,然后截出整数和小数部分 """ m_ex = d_expand_left(m) n_ex = d_expand_left(n) num, _ = d_mul(m_ex, n_ex) i, d = d_float_bin_parts(num) return i, d def d_mul_dec(m, n): """ 小数部分相乘 0.m * 0.n = m/10 * n/10 = mn/100 """ m_cut = d_cut_right_zeros(m) n_cut = d_cut_right_zeros(n) ma, na = d_alin(m_cut, n_cut) res, _ = d_mul(ma, na) res = d_align_right(res) res = d_right(res) res = d_right(res) return res def d_alin(m, n): """ 两个数对齐 以长度较大的数为基准 """ if d_len(m) < d_len(n): i = D_ZERO # i in range(d_len(n) - d_len(m)) max = d_minus(d_len(n), d_len(m)) while D_TRUE == D_TRUE: if d_is(i, max) == D_TRUE: break m = D_BIT_ZERO + m i = d_next(i) if d_len(m) > d_len(n): i = D_ZERO # i in range(d_len(m) - d_len(n)) max = d_minus(d_len(m), d_len(n)) while D_TRUE == D_TRUE: if d_is(i, max) == D_TRUE: break n = D_BIT_ZERO + n i = d_next(i) return m, n def d_align_right(num): """右侧补零""" i = D_ZERO # i >=0 且 i < D_LENGTH 即i in range(0, D_LENGTH) while D_TRUE == D_TRUE: if d_is(i, D_LENGTH) == D_TRUE: break num = num + D_BIT_ZERO i = d_next(i) return num def d_len(o_set): """ 返回num长度 num可以是任意的有序集合,只需提供一个遍历方法 """ res = D_ZERO for n in o_set: res = d_next(res) return res def d_index_of(o_set, e): """ 返回o_set中元素e的索引 如果不存在则返回负一(注意不是-1) """ i = D_ZERO for n in o_set: if d_is(n, e) == D_TRUE: return i i = d_next(i) return d_one_neg() def d_equal(o1, o2): """ 比较两个集合是否相等 """ i1 = D_ZERO for e1 in o1: i2 = D_ZERO for e2 in o2: if d_is(i2, i1) == D_TRUE: break i2 = d_next(i2) # 元素比较是集合的应有之义 if not e1 == e2: return D_FALSE i1 = d_next(i1) return D_TRUE def d_index(o_set, index): """ 返回index位置的o_set集合元素 index从0开始 """ # TODO 关于ZERO长度不足的问题 # 关于负索引,-i即length-i-1 # TODO 关于负数的规定 i = D_ZERO # while d_bit_and(d_less_or_is(D_ZERO, i), d_less(i, d_len(o_set))) == D_TRUE: for n in o_set: if d_is(i, index) == D_TRUE: return n i = d_next(i) return '-1' def d_slice(o_set, index_from, index_to): res = D_BLANK i = D_ZERO for n in o_set: if d_bit_and(d_less_or_is(index_from, i), d_less(i, index_to)) == D_TRUE: res = res + n i = d_next(i) return res def d_bin_dec_exp(num): # 25 = 2*10^2 + 5*10^1 """ 十进制转二进制小数部分表示 首先取各十进制位t1 t2 ... tn 对于一个形如.t1 t2 ... tn的十进制数,其值为 t1*10^-1 + t2*10^-2 +... + tn*10^-n 乘以10^n转为t1*10^(n-1) + t2*10(n-2) + ... + tn 求出此数的二进制表示,然后除以10^n的二进制表示 如0.25,放大100倍得25 25 = (d*2^-1 + d*2^-2 + ... + d*2^-n) * 100 两侧再同时乘以 2^n 25 * 2^n = (d*2^(n-1) + d*2^(n-2) + ... + d) * 100 然后再用(25 * 2^n)/100,得整数即为要求的小数部分 这里的越界问题用增加位数处理 """ num_bin = d_bin_exp(num) scale_idx = d_bin_exp(str(len(num))) scale = d_power(D_TEN, scale_idx) num_bin_ex = d_expand_left(num_bin) d_ones_expand = d_next(d_expand_left(d_ones())) mul_ex, _ = d_mul(num_bin_ex, d_ones_expand) scale_ex = d_expand_left(scale) q, _ = d_frac(mul_ex, scale_ex) res = d_cut_left(q) return res def test(): global D_LENGTH # test_d_ten_dec_exp() # pass # test_d_mul() # pass # test_d_bin_dec_exp() # pass # test_d_mul_float() # TODO # test_d_float_bin_exp() # pass # test_d_bin_exp() # pass # test_d_float_ten_exp() # pass # test_d_ten_exp() # pass # test_d_next() # pass # test_d_frac() # pass # test_d_minus() # pass # test_d_ones_neg() # pass # test_d_prev() # pass # test_d_plus() # pass # test_d_len() # pass # test_d_index() # pass # test_d_xor() # pass # test_d_bit_xor() # pass # test_d_less() # pass # test_d_zero() # pass # test_py() # test_d_power() # pass def test_d_power(): m = '00001010' n = '00000010' r = d_power(m, n) print(d_ten_exp(r)) def test_d_zero(): n = D_TEN r = d_zero(n) print(r) def test_d_less(): m = '0000000000000001' n = '0000000000001010' r = d_less(m, n) print(r) def test_d_plus(): m = '00000010' n = '00000111' r, _ = d_plus(m, n) print(r) def test_py(): s = '123' sl = list(s) print(sl.pop()) def test_d_bit_xor(): m = '1' n = '1' r = d_bit_xor(m, n) # 0 print(r) m = '0' n = '0' r = d_bit_xor(m, n) # 0 print(r) m = '1' n = '0' r = d_bit_xor(m, n) # 1 print(r) m = '0' n = '1' r = d_bit_xor(m, n) # 1 print(r) def test_d_is(): num1 = "00000000" num2 = "00000010" r = d_is(num1, num2) print(r) def test_d_xor(): # m = n 当且仅当 m xor n = 零 # m = '00000000' # n = '00000000' # r = d_xor(m, n) # # 00000000 # print(r) # m = '11111111' # n = '11111111' # r = d_xor(m, n) # print(r) m = '11111011' n = '11111011' r = d_xor(m, n) print(r) def test_d_index(): num = '123' index = D_TWO r = d_index(num, index) print(r) def test_d_len(): num = '123' l = d_len(num) print(l) def test_d_ten_dec_exp(): num = '00100000' r = d_ten_dec_exp(num) print(r) def test_d_mul(): # m = '4' # n = '4' # m_bin = d_bin_exp(m) # n_bin = d_bin_exp(n) # r, o = d_mul(m_bin, n_bin) # r_ten = d_ten_exp(r) # print(r_ten) # '0000000011111110' # '0000000000001010' m_bin = '0000000011111110' n_bin = '0000000000001010' r, o = d_mul(m_bin, n_bin) # 10011110110 # 0000000100010000' # r_ten = d_ten_exp(r) print(r) def test_d_bin_dec_exp(): m = '25' r = d_bin_dec_exp(m) print(r) def test_d_mul_float(): m = '10.5' n = '10.25' # m = d_float_bin_exp(m) m = '0000101010000000' # n = d_float_bin_exp(n) n = '0000101001000000' r = d_mul_float(m, n) # rt = d_float_ten_exp(r) print(r) def test_d_float_bin_exp(): m = '1.01' r = d_float_bin_exp(m) print(r) def test_d_bin_exp(): m = '127' r = d_bin_exp(m) print(r) def test_d_float_ten_exp(): # '7654321001234567' m = '0000000100011001' r = d_float_ten_exp(m) print(r) m = '0000000110000000' r = d_float_ten_exp(m) print(r) def test_d_ten_exp(): m = '01111111' r = d_ten_exp(m) print(r) def test_d_next(): m = '11111111' r = d_next(m) print('test_d_next: ', r) def test_d_prev(): # m = '01111111' # r = d_prev(m) # print(r) # m = '11111111' # r = d_prev(m) # print(r) m = '00001010' r = d_prev(m) print(r) def test_d_ones_neg(): r = d_one_neg(D_LENGTH) print(r) def test_d_minus(): m = '00000000' n = '00000010' r = d_minus(m, n) print("test_d_minus:", r) def test_d_frac(): m = '01111111' # 127 n = '00001010' # 10 d, r = d_frac(m, n) print("test_d_frac:", d_ten_exp(d), d_ten_exp(r)) def pi_ele(k): kex = d_expand_right(k) ONE = d_expand_right(D_ONE) TWO = d_expand_right(D_TWO) dm, _ = d_mul(TWO, kex) dp, _ = d_plus(dm, ONE) res, _ = d_frac(ONE, dp) return res def pi(k): # pi / 4 = 1 - 1/3 + 1/5 - 1/7 + ..... + (-1)^k (1 / (2k+1) ) + .... pi = d_expand_left(D_ZERO) i = D_ZERO while D_TRUE == D_TRUE: if d_is(i, k) == D_TRUE: break _, r = d_frac(i, D_TWO) if d_is(r, D_ZERO): pi = d_plus(pi, pi_ele(i)) else: pi = d_minus(pi, pi_ele(i)) i = d_next(i) print(pi) # 主方法 if __name__ == '__main__': # TODO 科学计数法解决乘法效率问题 test() pi(D_FOUR)
-
在机器学习、深度学习和数据挖掘的大多数任务中,我们都会假设 training 和 inference 时,采用的数据服从相同的分布(distribution)、来源于相同的特征空间(feature space)。但在现实应用中,这个假设很难成立,往往遇到一些问题: 1、带标记的训练样本数量有限。比如,处理 A 领域(target domain)的分类问题时,缺少足够的训练样本。同时,与 A 领域相关的 B(source domain)领域,拥有大量的训练样本,但 B 领域与 A 领域处于不同的特征空间或样本服从不同的分布。 2、数据分布会发生变化。数据分布与时间、地点或其他动态因素相关,随着动态因素的变化,数据分布会发生变化,以前收集的数据已经过时,需要重新收集数据,重建模型。 这时,知识迁移(knowledge transfer)是一个不错的选择,即把 B 领域中的知识迁移到 A 领域中来,提高 A 领域分类效果,不需要花大量时间去标注 A 领域数据。迁移学习,做为一种新的学习范式,被提出用于解决这个问题。 学习的目的: 1.深入了解神经网络的组成、训练和实现,掌握深度空间特征分布等关键概念; 2.掌握迁移学习的思想与基本形式,了解传统迁移学习的基本方法,对比各种方法的优缺点; 3.握深度迁移学习的思想与组成模块,学习深度迁移学习的各种方法; 4.掌握深度迁移学习的网络结构设计、目标函数设计的前沿方法,了解迁移学习在PDA、Source-Free DA上的应用; 5.掌握深度迁移学习在语义分割、目标检测、行人重识别等任务中的应用,学习图像/视频风格迁移方法,了解风格迁移在实际生活中的应用; 6.掌握小样本学习、Transformer等前沿方法和基本思想,了解小样本学习、Transformer等在实际场景下的应用; 7.通过实操掌握图片视频风格迁移,自动驾驶中的跨域语义分割,目标检测。 学习的课程信息以及目标: 一、机器学习简介与经典机器学习算法 1.什么是机器学习? 2.机器学习框架与基本组成 3.机器学习的训练步骤 4.机器学习问题的分类 5.经典机器学习算法介绍 目标:机器学习是人工智能的重要技术之一,详细了解机器学习的原理、机制和方法,为学习深度学习与迁移学习打下坚实的基础。 二、深度学习简介与经典网络结构介绍 1.神经网络简介 2.神经网络组件简介 3.神经网络训练方法 4.卷积神经网络介绍 5.经典网络结构介绍 目标:深入了解神经网络的组成、训练和实现,掌握深度空间特征分布等关键概念,为深度迁移学习奠定知识基础。 三、迁移学习基础知识 1.迁移学习绪论 2.基于样本的迁移学习 3.基于特征的迁移学习 4.基于分类器适配的迁移学习 目标:掌握迁移学习的思想与基本形式,了解传统迁移学习的基本方法,对比各种方法的优缺点,掌握迁移学习的适用范围。 四、深度迁移学习 1.深度迁移学习概述 2.基于距离函数的深度迁移学习 3.基于对抗网络的深度迁移学习 4.深度异构迁移学习方法介绍 5.深度领域泛化学习介绍 目标:掌握深度迁移学习的思想与组成模块,学习深度迁移学习的各种方法,对比各种方法的优缺点,掌握深度迁移学习的适用范围。 五、迁移学习前沿方法介绍 1.深度迁移网络结构设计 2.深度迁移学习目标函数设计 3.全新场景下的迁移学习 目标:掌握深度迁移学习的网络结构设计、目标函数设计的前沿方法,了解迁移学习在PDA、Source-Free DA上的应用。 六、迁移学习前沿应用 1.迁移学习在语义分割中的应用 2.迁移学习在目标检测中的应用 3.迁移学习在行人重识别中的应用 4.图片与视频风格迁移 目标:掌握深度迁移学习在语义分割、目标检测、行人重识别等任务中的应用,学习图像/视频风格迁移方法,了解风格迁移在实际生活中的应用。 七、小样本学习、Transformer等前沿方法与应用 1.小样本学习概念与基本方法介绍 2.小样本学习应用 3.Transformer概念与基本方法介绍 4.Transformer在图像领域的应用 目标:掌握小样本学习、Transformer等前沿方法和基本思想,了解小样本学习、Transformer等在实际场景下的应用。 八、实验实操之实操环境搭建 1. 硬件准备:GPU显存11GB以上 2. 软件准备:Linux操作系统(Ubuntu16.04以上),显卡驱动安装(512.54),CUDA Toolkit(10.1)和cuDNN加速库(7.6.4),VS Code编辑器安装,Jupyter Notebook 3. 编程语言和框架:Python3.8.5、torch==1..07、torchvision==0.8.2、mmcv-full==1.3.7、opencv-python==4.4.0、matplotlib==3.4.2、numpy==1.19.2、Pillow==8.3.1、scikit-learn==1.0.2 4. 数据集准备:Office-31、IRVI、GTA5、Cityscapes、Foggy cityscapes等 注:硬件准备由主办方提供云服务器 九、实验实操之深度迁移学习实践 1.掌握PyTorch中的基本原理和编程思想。 2.理解在一个新的场景或数据集下,何时以及如何进行迁移学习。 3.利用PyTorch加载数据、搭建模型、训练网络以及进行网络微调操作。 4.给定迁移场景,利用daib库和生成对抗技术独立完成图像分类中的领域适配。 5.迁移效果的可视化,利用机器学习库scikit-learn中的t-SNE对迁移过后的高维数据进行可视化。 十、实验实操之图片与视频风格迁移实践 1.掌握基于生成对抗网络的风格迁移技术。 2.图像/视频风格迁移网络的搭建,重点掌握编码器和解码器的内在逻辑和不同损失函数的运用。 3.实践红外视频转换到可见光视频的风格迁移。 十一、实验实操之自动驾驶中的跨域语义分割实践 1.掌握语义分割发展现状及代表性工作,如FCN,DeepLab系列等。 2.了解常用的语义分割评价指标(PA、mPA、mIoU、FWIoU)和常见数据集(PASCAL VOC2012,ADE20K、BDD100K、Cityscapes、GTA5、Dark Zurich)。 3.语义分割工具箱MMSegmentaion的认识和使用。 4.设计一个分割模型能够从仿真环境中得到的数据迁移到真实场景下产生的数据。 十二、实验实操之目标检测实践 1.掌握目标检测算法的基本框架以及目标检测中的经典模型,如R-CNN系列的两阶段检测模型和YOLO系列的单阶段检测模型。 2.掌握目标检测模型的评测指标(IOU和mAP)、标准评测数据集(Pascal VOC,MS COCO和Cityscapes)以及检测模型中的一些训练技巧,如数据增强、多尺度训练/测试、预测框微调/投票法、在线难例挖掘、软化非极大抑制、RoI对齐和集成。 3.实践基于Transformer的端到端目标检测框架的搭建,并在新的数据集上与基于CNN的网络进行迁移性能的对比。
-
视频AI,给你的宠物加个表情特效
-
随着人工智能的发展和落地应用,以地理空间大数据为基础,利用人工智能技术对遥感数据智能分析与解译成为未来发展趋势。本文以遥感数据转化过程中对观测对象的整体观测、分析解译与规律挖掘为主线,通过综合国内外文献和相关报道,梳理了该领域在遥感数据精准处理、遥感数据时空处理与分析、遥感目标要素分类识别、遥感数据关联挖掘以及遥感开源数据集和共享平台等方面的研究现状和进展。首先,针对遥感数据精准处理任务,从光学、SAR等遥感数据成像质量提升和低质图像重建两个方面对精细化处理研究进展进行了回顾,并从遥感图像的局部特征匹配和区域特征匹配两个方面对定量化提升研究进展进行了回顾。其次,针对遥感数据时空处理与分析任务,从遥感影像时间序列修复和多源遥感时空融合两个方面对其研究进展进行了回顾。再次,针对遥感目标要素分类识别任务,从典型地物要素提取和多要素并行提取两个方面对其研究进展进行了回顾。最后,针对遥感数据关联挖掘任务,从数据组织关联、专业知识图谱构建两个方面对其研究进展进行了回顾。除此之外,面向大智能分析技术发展需求,本文还对遥感开源数据集和共享平台方面的研究进展进行了回顾。在此基础上,对遥感数据智能分析与解译的研究情况进行梳理、总结,给出了该领域的未来发展趋势与展望。 引言近几年来,国内外人工智能的发展和落地应用如火如荼,促成这种现象的原因可以归纳为两个关键词,即“大数据”与“高算力”。在地理空间数据分析与应用领域,这种变化也正在发生着,比如在国家高分辨率对地观测重大科技专项(简称“高分专项”)等国家重大任务的推动下,我们可获取的地理空间数据越来越多,另外,以“云+端”架构为代表的高性能计算框架也在不断发展,促进了算力的提升。在此背景下,以地理空间大数据为基础,利用人工智能技术挖掘其深层信息、赋予其更多的应用模式,将成为未来地理空间数据分析应用领域发展的长期主题。发展遥感数据智能分析技术的目的是将长期积累的遥感数据转化为对观测对象的整体观测、分析、解译,获取丰富准确的属性信息,挖掘目标区域的演化规律,主要包括遥感数据精准处理、遥感数据时空处理与分析、遥感目标要素分类识别、遥感数据关联挖掘等。此外,面向大智能分析技术发展需求,遥感开源数据集和共享平台方面也取得了显著进展(陈述彭等, 2000; 宫辉力等, 2005)。遥感数据精准处理方面,遥感数据精准处理的目的是对传感器获取的光谱反射或雷达散射数据进行成像处理和定标校正,恢复为与地物观测对象某些信息维度精确关联的图像产品。传统方法需要根据卫星、传感器、传输环境、地形地表等先验模型,以及外场定标试验获取定标参数,建立精确的成像模型将观测数据映射为图像产品。随着传感器新技术的发展和分辨率等性能的提升,先验模型的建立越来越困难,外场定标的难度和消耗也越来越大,并且成像处理和定标校正获取的模型和参数与传感器的耦合,只能以一星一议的方式实现,无法多星一体化实现。如何在传统方法的基础上,构建观测数据到精准图像产品的深度学习网络结构,设置面向不同应用的图像优化指标体系,以大量历史数据和标注结果作为输入,实现网络结构对传感器物理模型和参数的精确重构和逼近,形成基于人工智能技术的多星一体化遥感图像精准处理能力。遥感数据时空处理与分析方面,多时相影像相比单一时相的遥感影像,能够进一步展示地表的动态变化和揭示地物的演化规律。然而,一方面受限于遥感自身的时间分辨率与空间分辨率之间的不可兼得;另一方面受气象、地形等成像条件的影响,光学传感器获取的遥感影像往往被云层及其阴影覆盖(特别是在多云多雨地区,如我国西南地区),而难以获取真实的地面信息。这样的数据缺失,严重限制了遥感影像的应用;特别是对于多时相影像的遥感应用(如森林退化、作物生长、城市扩张和湿地流失等监测),云层及其阴影所导致的数据缺失将延长影像获取的时间间隔、造成时序间隔不规则的问题,加大后续时间序列处理与分析的难度。因此,进行遥感影像的时间与空间维度的处理与分析对提高遥感影像数据的可用性、时间序列分析水平和遥感应用的深度广度具有重要意义。遥感目标要素分类识别方面,遥感数据中一般包含大量噪声,大多数现有的处理分析方法并未充分利用计算机强大的自主学习能力,依赖的信息获取和计算手段较为有限,很难满足准确率、虚警率等性能要求。如何在传统的基于人工数学分析的方法基础上,结合人工智能方法,定量描述并分析遥感数据中目标模型失真和背景噪声干扰对于解译精度的影响机理,是遥感智能分析面临的另一项关键科学问题。通过该问题的分析与发展,有望实现构建一个基于深度学习的多源遥感数据自动化分析框架,在统一框架下有机融合模型、算法和知识,提升遥感数据中目标要素提取和识别的智能化水平。遥感数据关联挖掘方面,随着遥感大数据时代的到来,我们可以更方便地获取高分辨率和高时间采集频率的遥感数据,对于目标信息的需求,也由目标静态解译信息,拓展到全维度的综合认知与预测分析。为了满足上述需求,基于海量多源异构遥感数据,实现时间、空间等多维度的信息快速关联组织与分析,是未来遥感解译技术发展的重要方向。遥感开源数据集和共享平台方面,大多数现有数据集仍然存在数据规模较小、缺乏遥感特性的问题,并且现有深度学习平台难以有效支撑遥感特性及应用,领域内数据集算法模型的准确性、实用性、智能化程度也待进一步提高。如何结合遥感数据特性,建设更具遥感特色的开源数据集和共享平台,是遥感智能生态建设的一项重要研究内容。本文主要围绕上述五个方面的研究,论述遥感智能分析技术的发展现状、前沿动态、热点问题和未来趋势。 01国际研究现状1.1遥感数据精准处理利用智能手段开展数据预处理技术,国外将智能技术用于遥感数据(光学、SAR、光谱)配准、校正等的工作。 1.1.1光学/SAR 精细化处理遥感图像为遥感应用分析提供了数据基础,可广泛应用于农林监测、城市规划、军事侦察等领域,遥感数据质量是决定其应用性能的关键。评价遥感数据质量的指标包括图像时间/空间分辨率、图像幅宽、空间特征、光谱特征、辐射几何精度等。高质量遥感影像具有高分辨率、高信噪比等特点。提升遥感影像质量的方法可大致分为两类,一是改进传统成像算法聚焦得到高质量图像;二是将已有的低质量的图像通过去噪去云以及超分辨率重建等技术得到高分辨率高质量图像。与传统的 SAR成像算法比较,基于深度学习的SAR 成像算法可以简化成像过程。Rittenbach等人(2020)提出 RDAnet 神经网络从原始雷达回波数据训练聚焦得到SAR图像,网络经过训练可以匹配距离多普勒算法的性能,算法将SAR成像问题处理为监督学习问题,RDAnet是第一个基于深度学习的SAR 成像算法。Gao等人(2019)提出了一种基于深度网络的线谱估计方法,并将其应用于三维 SAR成像,大大加快了成像过程。Pu(2021)提出了一种深度 SAR 成像算法,减少了 SAR 的采样量,并且提出了一种基于深度学习的 SAR 运动补偿方法,可以有效地消除运动误差的影响。仅依赖遥感卫星载荷能力推动图像分辨率提升,使得高分辨率图像成本大幅提高,给遥感图像大规模应用力带来困难。以超分辨、图像重构等为代表的图像级和信号级处理方法为遥感图像分辨率和质量提升提供了另一种可行的技术途径。Wei 等人(2021)提出了基于 MC-ADM 和基于 PSRI-Net 的两种参数化超分辨率 SAR 图像重建方法,根据预先设计的损耗,深度网络通过端到端训练来学习,可应用于得到高质量 SAR 超分辨率图像的参数估计。Luo 等人(2019)提出了一种基于卷积神经网络的SAR 图像超分辨率重建的方法,针对浮点图像数据采用深度学习对 SAR 图像进行重建,可以更好地重建SAR图像。针对非生成对抗网络在光学遥感图像超分辨重建以及噪声去除中出现的信息损失和对比度降低的问题,Feng(2020)提出了利用生成对抗网络对小波变换域光学遥感图像进行超分辨重建以及噪声去除的方法。Xiong(2021)提出了一种适应于遥感图像超分辨的改进超分辨率生成对抗网络(Super-resolution GAN, SRGAN),增强了模型在跨区域和传感器的迁移能力。Bai 等人(2021)提出一种改进的密集连接网络遥感图像超分辨重建算法。Dong等(2020)提出了一种改进的反投影网络实现遥感图像的超分辨率重建。Tao(2020)提出了一种以 DPSRResNet 作为其超级解析器的 DPSR 框架的遥感图像超分辨重建算法。Yang 等(2020)提出了一种多尺度深度残差网络(MDRN)用于从遥感图像中去除云。Wang 等(2021)构建了 SAR 辅助下光学图像去云数据库,建立了基于条件生成对抗网络的 SAR 辅助下的光学遥感图像去云模型,实现了SAR辅助下光学图像薄云、雾、厚云等覆盖下地物信息的有效复原与重建。目前,人工智能在遥感数据处理和图像质量提升方面的应用主要得益于机器学习技术的引入。基于GAN 网络的方法试图利用生成器克服原始高分辨率遥感图像难以获取的问题,另一些无监督的学习方法则通过学习图像质量退化前后关系试图获取原始的高分辨率遥感图像。由于迁移学习可以从其它域样本中获得先验信息,并且在目标域中进一步优化,借鉴迁移学习和零样本学习的思路可以尝试解决遥感图像质量提升的问题。由于作用距离远,遥感图像分辨率和清晰度相对于自然图像仍有一定的差距,这导致遥感图像细节丢失相对较为严重。为了从遥感图像中获取更为丰富的信息,需要对遥感图像空间特征进行提取(注意力机制、局部-全局联合特征提取等),需要对遥感图像目视效果进行可视化增强(边缘增强、小波变换等)。此外,面向图像细节特征解译的需求,还需要对遥感图像中的弱小目标和细微结构进行检测、提取和增强(弱小目标检测等),提升遥感图像中细节缺失造成的信息损失。 1.1.2光学/SAR 定量化提升可见光、SAR、高光谱等遥感图像的定量化提升主要体现在几何、辐射、光谱、极化等几个方面,通过寻找稳定点来消除成像过程中产生的畸变,改善图像质量,使数据产品能够定量化反映地物的真实信息,以达到定量化提升的效果。在国际主流研究中,神经网络技术主要被应用在提升图像匹配精度方面,并以此带动几何定位精度定量化提升。得益于机器学习方法的引进,遥感图像匹配技术获得了系统性发展,匹配精度获得了显著进步。典型的两种方法为局部特征点匹配方法和区域匹配方法。与全局特征相比,局部特征点与遥感图像获取的大场景松耦合,对大场景的仿射变化、辐射/亮度变化噪声水平不敏感。目前,基于特征点匹配的遥感图像质量提升技术取得了一系列研究成果。典型的特征点匹配包括关键点检测和描述子提取两个部分。深度学习应用于局部特征点匹配可以分成三个阶段,形成了三类代表性方法。第一类方法重点关注和解决关键点检测问题,即如何检测得到特征点的方向、位置、以及尺度信息。关键点检测中响应图的构建是重点,关键点检测的数量和准确性依赖于特征准确、信息丰富的响应图。Savinov 等人(2017)提出了无监督学习的神经网络训练方法,该方法首先将遥感图像目标像素点映射为实值响应图,进而排列得到响应值序列,响应序列的顶部/底部像素点即可以视为关键点。Ma 等人(2019b)采用由粗到细的策略,先用一个卷积神经网络计算近似空间关系,然后在基于局部特征的匹配方法中引入考虑空间关系的匹配策略,同时保证了精度和鲁棒性。第二类方法重点关注和解决描述子提取问题,即用一组特征向量表示描述子,描述子代表了特征点的信息,可以通过端到端训练获得描述子。描述子训练是获得高精度匹配结果的关键。Simo-Serra 等人(2015)提出了 Deep-Desc 特征点描述子提取方法,该方法中神经网络采用了 Siamese 结构(Chopra等, 2005),构造了一种 128 维的描述子,应用于具有一定差异性的图像对匹配问题,通过比较描述子欧氏距离对图像间描述子的相似性进行衡量。第三类方法关注于联合训练关键点检测模块和描述子提取模块。关键点检测和描述子提取两个模块的协同工作和联合训练是该方法重点解决的难点。Yi 等人(2016)提出了基于 LIFT 网络的联合训练,是最早解决关键点检测和描述子提取的联合训练的网络之一。LIFT 网络的输入是以 SIFT 特征点(Lowe, 2004)所在图像块,LIFT 网络的关键点检测效果也与 SIFT算法类似,鲁棒性较好。Ono 等人(2018)提出的LF-Net,采用 Siamese 结构训练整个网络,通过深层特征提取网络产生特征图。Shen 等人(2019)以LF-Net 为的基础,提出了基于感受野的 RF-Net 匹配网络,该网络实现关键点检测时保留了遥感图像低层特征、部分保留了遥感图像高层特征,在描述子提取中采用了与 Hard-Net(Mishchuk 等, 2017)一致的网络结构。与局部特征点相比,区域特征对整体性表征更加完整,对区域形变、区域变化等的稳定性更好。传统区域特征匹配技术的代表为模板匹配方法。深度学习应用于区域特征匹配形成了两类代表性方法。第一类方法的核心思想是用分类技术解决匹配问题。Han 等人(2015)利用 MatchNet 提取图像区域特征,将三个全连接层得到特征的相似性作为输出,对输出采用概率归一化处理(Softmax)进行分类匹配。Zagoruko 等人(2015)重点解决了对光照变化、观测角度具有很好适应性的区域特征提取问题,提出了基于DeepCompare 网络的区域特征提取方法,该方法的匹配性能对于不同时间空间获取的遥感图像具有极佳的稳定性。第二类方法的核心思想是构建合适的描述子解决区域特征匹配问题。Tian 等人(2017)提出了一种 L2-Net网络的区域匹配方,该网络生成了128 维的描述子,在迭代次数较少的约束下,利用递进采样策略,对百万量级的训练样本进行遍历学习,并通过额外引入监督提高学习效率,该网络泛化能力较好。可见,深度学习网络的引入在特征提取、关键点检测和描述子提取等多方面优化了遥感图像匹配能力。考虑到深度学习网络的持续研究,网络结构、训练方式的更新和进步有望进一步提升遥感图像匹配精度,基于深度学习的遥感图像匹配算法仍然具有相当的研究价值和应用前景。除了几何质量定量化提升外,还有少数研究学者开展了利用神经网络技术在辐射、光谱、极化定量化提升方面的研究工作。杨进涛等人(2019)提出了一种基于海量 SAR 数据进行地物散射稳定特性的分析与挖掘,并成功在普通地物中找到一种统计意义下稳定的散射特征量用作定标参考,从而为SAR 系统的常态化辐射定标奠定初步的技术基础。Jiang 等人(2018)考虑到极化观测过程中会受到多种误差的影响,造成极化测量失真,影响数据的极化应用性能,提出一种利用普遍分布的地物进行串扰和幅相不平衡的定量评价方法,该方法不受时间和空间限制,能够实现大量数据极化校正性能的实时、便捷评估,对极化数据质量进行长期监测。和几何定量化提升不同,神经网络技术在这些领域还没有大量的、深入的应用,为后续进一步进行系统性、规模化研究提供了指导方向。 1.2遥感数据时空处理与分析近年来,陆续开展多源遥感时间与空间协同处理与分析方面开展研究工作,力求实现多源数据间互补协同、融合重建,提高遥感时空分析的能力1.2.1遥感影像时间序列修复研究人员构建了大量的时间序列遥感影像修复和重建的方法。根据修复所用参考数据的不同,这些方法大致可以分为三类:基于影像本身的修补方法(self-complementation-based)、基于参考影像的修补方法(reference-complementation-based)和基于多时相影像的修补方法(multi-temporal-complementation-based)。基于影像本身的修复方法利用同一影像上无云/影覆盖区域的数据来修补被云/影覆盖区域的缺失数据;假设影像中数据缺失区域与剩余区域具有相似或相同的统计与几何纹理结构,通过传播局部或非局部无云区域的几何结构来重建云/影区域的缺失数据。依据空间插值与误差传播理论,缺失像素插值(missingpixel interpolation)、影像修补(image inpainting)和模型拟合(model fitting)等多种方法被广泛应用于云影区域的数据重建。虽然能够重建出貌似真实的影像区域,但这些方法对云/影覆盖下地物的类型非常敏感,其修补数据也不适用于进一步的数据分析;并且由于不确定性和误差随着传播而积累,这些方法很难修复大区域或异质缺失数据。为了克服基于影像本身修补方法的瓶颈,Chen 等人(2016)提出了通过模拟参考影像与云/影覆盖影像之间映射与转换关系的基于参考影像修补方法;这类方法依赖于不同光谱数据之间的强相关性,利用多光谱或高光谱影像中对云不敏感的光谱波段来重建被云/影覆盖区域其他波段的缺失数据。比如利用 MODIS数据的第七波段来修复第六波段的数据缺失、利用Landsat 近红外波段来估算水面区域的可见光波段、利用MODIS数据预测 Landsat 影像的缺失数据和利用不受云雨干扰的合成空间雷达数据来重建被云影覆盖的光学数据等。尽管参考影像能够提供云影覆盖区域的缺失信息,但这类方法仍然受到光谱一致性、空间分辨率和成像时间相关性等限制,而难以重建出高质量的用于模拟地表变化的时间序列数据。前两种方法受限于其对重建影像没有渐进变化的假设,这种平稳性假设将成为土地覆盖变化和作物生长监测等时间序列应用中的明显弱点。遥感卫星以固定的重复周期来观测地表,同一区域又不可能总是被云影覆盖,因此很容易获得同一区域的多时相影像。这些同一区域的多时相影像(有云/影覆盖的和无云/影覆盖的)提供了利用多时相影像修复云/影覆盖区域缺失影像的可能(Chen 等, 2011)。基于多时相影像的修补方法包括两个主要步骤:查找有云/影覆盖区域和无云/影覆盖区域相似的像元(pixel)或区域(patch)和利用相似的像元(区域)预测云/影覆盖区域的缺失数据。在查找相似像元中,Roy 等人(2008)深入研究并集成空间、光谱和时相等信息来度量有云/影覆盖区域和无云/影覆盖区域像元的相似性。在重建云/影覆盖像元中,Gao等(2017)提出和发展了诸如多时相直接替换、基于泊松方程的复制、时空加权插值等方法;同时也吸纳用于修复传感器条带修复的方法,如近邻相似像元插值(neighborhood similar pixel interpolator,NSPI)(Zhu 等, 2011)和加权线性回归(weightedlinear regression,WLR)等。近年来,深度学习方法也被运用于云影覆盖影像的修复和重建;Grohnfeldt 等人(2018)利用生成对抗网络(generative adversarial networks)来融合合成空间雷达数据和光学影像生成无云影像;Malek等人(2017)利用自动编码网络(autoencoder neuralnetwork)来构建有云影覆盖区域和无云影覆盖区域影像的映射函数;Zhang 等人(2018a)利用深度卷积网络(deep convolutional neural networks)集成光谱、空间和时相信息来修复缺失数据。虽然现有研究取得了不错的重建效果,但仍存在一些局限性:(1)相对于光谱和空间相似性,多时相影像中的时间趋势能更详细地反映地表覆盖变化,而以往方法(尤其是传统方法)中的简单线性回归或光谱、空间度量很难捕捉复杂的非线性时间趋势;(2)现有的利用深度学习的重建方法多集中运用空间卷积网络 CNN 获取光谱和空间纹理信息(且需要大量的训练样本),少有研究使用循环神经网络 RNN学习跨影像的时间趋势;(3)由于云/影总在不确定的影像区域和不确定的时间上出现,像元级的时间序列难以保证多时相影像的时间间隔相等与时相对齐,加大了现有方法进行时间序列重建的难度。1.2.2多源遥感时空融合遥感图像融合研究可大致分为两个阶段。第一阶段主要集中于全色增强算法研究,即通过融合来自同一传感器的全色波段和多光谱波段进而生成高分辨率的多光谱图像。这类算法研究较多,已形成较为成熟的系列算法。第二阶段则是多源多分辨的时空融合算法研究,即通过融合高空间分辨率遥感数据的空间分辨率特征和高时间分辨率遥感数据的时间分辨率特征,进而生成兼具高时间和高空间分辨率的遥感数据。这类研究从最近十几年才发展起来,仍处于快速发展阶段,研究成果相对较少,但是对遥感数据的应用具有重要意义。时空融合算法研究最早出现在 2006 年美国农业部 Gao(2006)的研究中。其在 Landsat ETM+和MODIS 数据地表反射率的融合中提出一种时空自适应反射率融合模型(Spatial and Temporal AdaptiveReflectance Fusion Model,STARFM),可融合生成具有和 Landsat ETM+数据一样空间分辨率的逐日(和 MODIS 数据时间分辨率一样)地表反射率数据。此后,系列基于 STARFM 或其他理论框架的融合算法相继被提出。当前的时空融合算法根据其融合原理可大致分为三种:基于解混、基于滤波和基于学习的方法。基于解混的方法,通过光谱替换的方式生成融合图像。基于滤波的方法,待预测像元值通过对其一定邻域内光谱相似像元的加权求和获得。而基于学习的方法(Huang 等, 2012; Song 等,2012),首先通过学习待融合传感器图像之间的映射关系,然后将先验图像的信息融入融合模型最终生成融合图像。基于学习的时空融合研究起初多在 MODIS 和Landsat 这两类遥感图像上。如针对这两类数据的融合,Song 等人(2012)提出基于稀疏表示的时空反射融合模型。该模型在已知两对 MODIS 和 Landsat图像对差分域中学习它们的映射关系,形成字典对信息。而因为两者图像的空间分辨率存在较大差异,作者设计了两层融合框架,使得基于稀疏表示的方法大大提高了融合精度,但字典对中存在扰动的问题一直不可忽视。Wu 等人(2015)通过引入误差边界正则化的方法到字段对学习中解决了扰动问题。近年来,因深度卷积神经网络在各类图像领域表现出良好性能,Song 等人(2018)提出基于卷积神经网络的遥感图像时空融合算法(SpatiotemporalSatellite Image Fusion Using Deep ConvolutionalNeural Networks,STFDCNN)。他们的模型分两阶段进行学习,首先学习降采样 Landsat 图像(lowspatial resolution,LSR)与 MODIS 图像之间的非线性映射关系;其次学习 LSR Landsat 图像与原始Landsat 图像之间的超分辨率映射关系。通过这两阶段学习模型实现对遥感图像中丰富细节信息的利用。尽管 STFDCNN 模型在时空融合性能上大幅度超过其他融合算法,但因其神经网络层数较少(仅有 3 个隐藏层),如此浅层的卷积神经网络对存在较大空间尺度差异的不同卫星传感器数据(MODIS-Landsat)间的非线性映射关系的学习仍是有难度的。因此,当前如何处理两类传感器数据(MODIS-Landsat)之间的空间差异变化,以及如何确定深度卷积网络的最优层数和卷积核数目仍旧是卷积神经网络时空融合算法研究中亟待解决的问题。此外,Kim 等人(2016)在超分辨重建研究中,通过利用残差网络结构得以训练一个深度的卷积神经网络模型,这对后续遥感图像融合研究具有一定启发。 1.3遥感目标要素分类识别经典遥感要素分类与识别方法一般为“单输入单输出”的模型架构,面向不同目标要素、不同模态数据或不同分类识别任务时,通常设计不同的专用网络模型。而我们实际面临的应用场景中,常会有不同模态的数据供我们使用,并给出多种类型的决策结果,例如,人类的感知系统会结合听、说、看等多种输入,并给出目标的位置、属性等多种信息。而传统的模型架构难以实现这种“多输入多输出”的能力,主要问题在于,一是传统模型对新场景、新任务的适应能力不足;二是模型对各类数据的特征提取过程相对独立,难以实现不同数据的特征共享从而实现性能增益;三是在多输入多输出情况下,传统模型的简单叠加会导致计算和空间复杂度的显著上升,限制其实用能力。为了解决上述问题,当前的主流发展方向是多要素目标信息并行提取,通过在网络模型中探索多模态数据、多任务多要素特征的共享学习,在降低模型复杂度的同时提升其泛化能力。1.3.1典型遥感目标要素提取传统的遥感目标要素提取方法面向不同目标要素时,通常设计不同的专用的方法流程。这种流程设计主要解决两类问题,一是针对遥感数据本身的特征/特性分析,为构建适合数据特征/特性的模型提供依据;二是适合遥感数据特点的专用网络模型构建,即以通用的网络模型为基础,构建符合遥感数据特点的模型,改进通用模型在遥感数据中的应用能力。遥感数据的获取过程中存在诸多与自然场景图像不同的影响因素,如电磁波散射特性、大气辐射特性、目标反射特性等,因此对于数据的上述特性的分析和表达是构建有效模型的基础。Kusk 等人(2016)和 Hansen 等人(2017)通过对 SAR 成像时地形、回波噪声等要素进行建模,实现基于 3DCAD 对不同类型地物要素的 SAR 图像仿真。Yan等(2019)通过对舰船等目标进行三维模型构建,从而生成仿真的目标点云数据。Ma 等(2019a)提出了一种包含生成和判别结构的网络模型,通过对抗学习实现样本表观真实性的增强。Zhan 等(2017)和 Zhu 等(2018)提出了一种针对高光谱影像分类的生成对抗网络模型。Zhang 等(2018b)设计出一种基于条件模型的生成对抗网络,用于遥感图像中飞机目标的精细仿真。Yan 等人(2019)则基于点云数据在三维空间上进行船舶模型构建,并利用正射投影变换将模型从模型空间投影至海岸遥感图像上进行仿真数据生成。为了进一步提升仿真对象和遥感背景间的适配性,Wang 等人(2020b)则进一步提出利用 CycleGAN 对仿真的飞机目标和背景进行自适应调整,设计了一种用于目标检测任务的建模仿真数据生成框架。在地物要素分类任务上,Kong 等人(2020)则利用 CityEngine 仿真平台的批量建模特性,首次探索在广域范围内进行城市级别的场景建模,并发布了一套用于建筑物分割的遥感仿真数据集 Synthinel-1。面向遥感数据特点的专用网络模型设计方面,主要结合遥感图像中目标旋转、多尺度、目标分布特性等特点,针对性设计网络结构来提升专用模型性能。Zhou 等(2018)设计了一种源域到目标域数据共现特征聚焦结构,提升高光谱图像的语义分割效果。Luo 等(2018)针对高光谱图像语义分割中存在的类内特征分布差异,提出了一种均值差异最大化约束模型。Rao 等(2019)设计了一种自适应距离度量模型,提升高光谱图像地物要素的分类精度。Kampffmeyer 等(2016)针对地物要素数量、空间分布差异大的问题,提出了一种结合区域分组与像素分组的模型训练策略,用于国土资源监测任务。Liu 等(2017)针对遥感目标尺度差异大的特点,提出基于沙漏网络的多尺度特征增强模型,提升光学遥感图像的分类精度。Marcos 等人(2018)提出了基于旋转卷积构建的多源数据提取网络,通过编码图像的旋转不变性特征在多个数据集取得了先进的结果。Peng 等人(2020)基于注意机制和密集连接网络有效融合 DSM 数据和光谱图像并获得了更好的分割效果。Hua 等人(2021)提出了特征和空间关系调节网络,利用稀疏注释,基于无监督的学习信号来补充监督任务,显著提升了语义分割的性能。随着遥感图像分辨率的提升、网络深度的增加、参数的堆叠带来性能的提升,与之相伴的是庞大的模型、巨量的参数和缓慢的算法效率。考虑到星上遥感数据实时处理对计算资源、存储资源的限制,一些工作尝试在保留算法高性能前提下,减少模型参数,提高算法运算速度。Valada 等人(2019)利用分组卷积的设计思想提出了一种高效的带孔空间金字塔池化结构,用于高分辨遥感图像地物要素提取。提出的方法能够减少 87.87%的参数量,减少89.88%每秒浮点运算次数(floating-point operationsper second, FLOPS)。Zhang 等人(2019b)基于深度可分卷积设计了一种面向合成孔径雷达图像的船舶检测算法的特征提取网络,大大提升了检测速度,相比于轻量化前的网络检测速度提高了 2.7 倍。Cao等人(2019)利用深度可分卷积设计了一种用于提取数字表面模型数据的结构,该网络结构无需预训练模型仍可以快速收敛,将网络训练时间降低 50%以上。Wang 等人(2019b)提出一种轻量级网络MFNet,实现对高分辨率航拍数据的地物要素分类任务的高效推理,相比于轻量级网络 ResNet-18,提出的网络在分类精度提升的同时,将参数量减少了40%,推理速度提高了 27%。Ma 等人(2020)针对灾后损毁评估任务,以 ShuffleNet v2 模型为基础,设计了一种轻量化建筑物提取模型,相比传统模型,在精度提升 5.24%的同时,速度提高 5.21f/s。上述方法通过结合遥感目标要素特点,通过提出专用网络结构或特征提取方法,提升传统模型针对遥感数据的应用能力。然而,对于不同类型数据、不同特征/特性,仍缺乏统一的网络结构进行表征,因此多要素信息多任务并行网络和模型仍需进一步研究。1.3.2多要素信息并行提取多要素信息并行提取方法的研究,主要集中于探索如何在一个统一模型中实现多类遥感地物要素目标的类别、位置等属性信息的高精度获取。如前所述,针对这种典型的“多输入多输出”场景,现有方法重点针对多模态输入数据的特征表示和多任务输出特征的共享融合两方面问题开展研究。特征共享研究方面,根据模型共享参数实现方式的区别,现有方法可大致分为硬参数共享( hard-parameter sharing ) 和软参数共享(soft-parameter sharing)两种。硬参数共享方法利用同一个模型实现在输入和输出端的多任务分支模型特征共享融合。Liebel 等(2020)面向城市建设状况分析任务,将多个任务共享同一编码器,并分别解码输出,实现同时输出建筑物位置和深度信息。Papadomanolaki 等(2019)将地物要素重建模型融合到分类模型中,并约束分类模型训练,来提升分类效果。Khalel 等(2019)则在同一个网络模型中同时嵌入图像锐化与地物要素分类两类任务的模型。Rosa 等(2020)设计了一种面向农业生产状况监控的多任务全卷积回归网络。软参数共享方法直接将针对不同任务的多个独立网络通过参数加权连接,实现多类任务的共享输出。Volpi 等(2018)将条件随机场拟合结果与图像同时作为数据,构建类内相似度和边界值预测的两个分支模型,改善地物要素分类结果。Zhang 等(2019a)提出了面向极化 SAR 多通道数据的地物要素分类方法,利用独立的特征提取网络对幅值和相位信息分别建模,利用分类器进行联合约束训练,来提升精度。Shi 等(2020)针对高光谱图像的多类要素分类任务,利用多任务集成学习实现通道选择,获取最优通道组合。针对多模态数据的联合特征表示,如图像纹理特征、三维高程特征、目标要素矢量拓扑特征等,能有效提升各类任务的性能。Chen 等(2019)针对洪灾区域检测任务,提出融合多时相的多模态图像的模型,来提升其检测精度。Fernandez 等(2018)将SAR 图像和多光谱图像作为输入,进行无监督的地物要素分类。Benson 等(2017)在森林冠层三维高度估计任务中,提出利用光谱特性数据的方法,能有效改善传统三维估计方法的精度。
-
8月6日“创未来,享非凡”——昇腾AI开发者创享日·南京站成功举办。作为华为面向昇腾AI产业全栈开发者推出的系列活动,创享日旨在汇聚区域伙伴、客户、高校及科研院所的开发人员,为开发者提供一个深度探讨与交流的平台,共创昇腾AI产业的未来。华为与南京农业大学等单位签约“AI+智慧育种”科研项目合作备忘录。东南大学耿新教授分享了机器学习的“基因”,昇腾CANN首席科学家杜鹏演示了“机器狗+AI臂”的神奇组合,如何完成智慧巡检。带着对城市数字化建设的思考,小视科技朱俊以“构建智慧城市AI中枢,建设智慧城市之脑”为演讲主题,与现场的技术大咖分享了小视如何利用“城市AI中枢”赋能智慧城市的新思路。数据、算力与算法:城市数字化升级的三个难题当下,数字化浪潮已对全球经济社会发展产生深刻影响。各国相继将数字化作为国家战略的制高点,我国“十四五”规划和2035年远景目标纲要均提出要加快数字化发展。城市是科技、人文、经济高度集中的产物,也是数字化进程的第一站。近年来,我国智慧城市建设如火如荼,各类技术难题已浮出水面。数据方面,城市级数据采集量巨大,拉高数据运维成本;算法方面,样本量不足导致算法精度差,无法实现交付即智能;算力方面,各委办局的人工智能应用碎片化,对算力平台与算力资源的要求甚高。“城市AI中枢”具备强大的AI算法能力,可全面赋能感知设备,实现数据统一管理、算法按需分配、事件主动告警,协助各委办局全天候监测全城动态,让城市治理走向“一网统管”。核心优势“城市AI中枢”凭借自身优势,为城市治理和服务提供高效决策新引擎。在部署方式上,平台支持“云、边、端”各类硬件,可进行多形态部署。在数据采集上,平台可采集城市监控、政府信息、政务APP等多渠道来源的数据,进行分析挖掘应用。此外,平台针对紧急事件进行智能告警,各部门及时闭环处置,实现跨部门协同,打破智慧城市各委办局之间的感知壁垒,让感知能力与感知结果共用共享。算法实力算法是城市AI中枢的核心。小视科技算法团队具备从图像采集、图像标注到训练、模型等的一整套能力。基于昇腾MindSpore框架模型,产出效率提升6倍以上。这为算法的高效生产,快速落地部署、应用服务与持续迭代提供了强有力的支撑。若政府各委办局提出定制化算法需求,小视团队能够实现最快1个月内落地算法应用。同时,城市AI中枢支持140+大容量算法种类;算法识别速度快、精度高,还可按需申请、自由分配;开放性API接口,轻松对接第三方算法。算力调配为更好地调配算力,城市AI中枢可以根据时间、天气、突发事件、算力资源等设置相对应的算法模板。平台不仅能够自动设置运行策略,高效分配算力,也支持自主调配算力资源,保证负载均衡。如此一来,算力资源可节省5倍以上,总接入视频路数可达百万级。稳扎稳打:超10个智慧城市落地经验“城市AI中枢”如同我们的神经系统,物理分散而逻辑统一,悄无声息地汇入城市运行的每个环节。在华北地区某市,小视科技的“城市AI中枢”对接城市大脑数据中台,汇集文旅、城管、治安、民生、社区、环保、交通等多维数据,接入数万路视频数据进行统一分析挖掘,已形成AI智能化城市巡检,支撑景区安全、流动人员管理、危化品监管、治安监测、交通梳理、垃圾分类、疫情防控、防汛防台等多种场景的巡查治理。城市监控从“看得见”走向“看得懂”,海量数据得到有效应用,城市在算法赋能之下全面转型升级。
-
功能描述该接口用于向VCM子系统的指定人脸库中添加人脸照片。该照片中应包含指定人员的人脸图片。注意事项同一人员在人脸库的人脸图片不能超过五张。一个人脸库最大支持100万人脸。基本信息接口名称添加人脸图片v1.1接口路径/io-adapter/south/face-recognition/v1.1/face-picture/addHTTP方法POST请求参数请求参数如表1所示。表1 请求消息参数说明参数名称类型必选(M)/可选(O)位置参数含义X-HW-IDStringMHeaderROMA授权的应用ID。X-HW-APPKEYStringOHeaderROMA授权的应用的密钥。说明:如果调用侧在ROMA平台设置了白名单,该参数可不填,如果没有,该参数必填。channelStringMHeader选择的子系统渠道。由上层应用携带,供ROMA平台做路由选择。厂家无需实现。repositoryCodeStringMBody人脸库标识。“增加人脸库”接口返回的人脸库标识。imageUrlStringOBody人脸图片的URL路径与imageBase64二者选一。长度范围:不超过255个字符。imageBase64StringOBody人脸图片内容的BASE64编码的字符串。与imageUrl二者选一。Base64编码后大小不超过5M。图片为JPG/JPEG/BMP/PNG格式。imageIdStringOBody人脸图片的唯一ID,与当前图像绑定。若用户没提供,系统会生成一个。该ID长度范围为1~36位,可以包含字母、数字、中划线或者下划线,不包含其他的特殊字符。VCM不支持personIdStringMBody人脸图片所包含的人员实例的ID。一张人脸照片建议仅包含一个人员的正脸。如果照片中有多个人脸,则表示此人员实例的脸是照片中尺寸最大的那个脸。长度范围:0-9A-Fa-f,长度24个字符extensionobjectOBody扩展对象。用于携带厂家定义的特有字段。表2 extension参数说明参数名称类型必选(M)/可选(O)位置参数含义nameStringOBody人员姓名,支持中文、英文、数字和空格,首位不为特殊字符,长度[1,255]。genderStringOBody人员性别:0:男1:女-1:未知credentialTypeStringOBody证件类型:0:身份证1:护照2:学生证3:军官证4:驾照5:其他credentialNumberStringOBody证件号,支持英文、数字、(),长度[1,255]。请求样例{ "repositoryCode": "5d11c13a066b980884971778", "imageBase64": "/9j/4...", "personId": "5cf8b755066b980884970701" }响应参数响应参数如表3所示。表3 响应消息参数说明参数名称类型参数含义resultoutputs接口响应参数。成功时返回下方结果,失败或者数据为空时,不返回result内部的内容结构,仅返回null。resCodeString返回码。具体请参考“人员匹配错误码”。resMsgString返回消息。originalResInfooriginalResInfo原始响应消息。表4 outputs参数说明参数名称类型参数含义facesFaceStructure[]照片中包含的人脸结构。如果照片中包含多张人脸,则返回一个列表。表5 FaceStructure参数说明参数名称类型参数含义personIdString人脸图片所包含的人员实例的ID固定为24个字符。faceIdString人脸ID。支持1~36个字符。表6 originalResInfo参数说明参数名称类型参数含义originalResCodeString原始返回码。originalResMsgString原始返回消息。响应样例{ "result": { "faces": [ { "faceId": "5d1325f6066b980c1aa4ee6b", "personId": "5cf8b755066b980854970701" } ] }, "resCode": "0", "resMsg": "Success.", "originalResInfo": { "originalResCode": "0", "originalResMsg": "success" } }
-
【活动亮点】计算机视觉是人工智能领域最炙手可热的研究领域,也是在现实世界中落地应用最多的人工智能技术方向。AI应用开发实战营融入专业理论知识和人工智能应用场景案例,带领开发者由浅入深掌握AI技能,做到学以致用。 点击报名 【活动奖品】报名后,点击【分享有礼】按钮,邀请身边好友一起先报名学习,分享者邀请10个新用户即可获得定制保温杯,活动结束后将公布邀请人数及奖励名单。邀请150个新用户且人数最多的分享者可获得1000元京东卡。 【参与流程】一、【在线课程】《AI技术应用场景--视觉处理与识别》本课程包含了数字图像基本原理,以及使用传统方法和深度学习方法完成计算机视觉任务的方法以及应用场景。立即报名学习:https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXE075+Self-paced/about 二、【实践案例】适合新手入门AI开发的ModelArts平台,基于AnimeGANv2可以将现实场景的图片处理为动漫风格,如果你也想看下自己在动漫世界的样子,现在就手把手教你https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=190612&page= 三、【直播课】直播时间:7月27日 20:00-21:00直播老师:胡琦,华为云年度十佳博主直播主题:三步开发聊天机器人,一秒生成漫画头像直播介绍:1、基于 ModelArts 快速验证AnimateGanv2 现实照片动漫化能力2、基于 Flask 快速部署动漫化服务3、基于 Wechaty 快速开发漫画头像的聊天机器人点击观看:https://bbs.huaweicloud.com/signup/aaf6f0369810487eb21cb162bc8ac154 >>>扫码加入学习群 四、【结营颁奖】完成实践案例后,点击申请申请证书:https://devcloud.huaweicloud.com/expertmobile/qtn?id=4df8408af47543aaa45b0011a70dc305 【活动说明】请务必使用个人实名账号参与活动(IAM、企业账号等账号参与无效)。为保证活动的公平公正,华为云有权对恶意刷活动资源(“恶意”是指为获取资源而异常注册账号等**活动公平性的行为,黑产用户不计入活动统计),利用资源从事违法违规行为的用户收回奖励资格,本次活动一个实名认证账号只能对应一个收件人(只能参加一次),如同一账号填写多个不同收件人,不予发放奖励,且每个账号只记录最早的一次回帖,多发无效。排名奖项若有并列,按照完成时间先后顺序排列。本活动规则由华为云在法律规定范围内进行解释。华为云保留不时更新、修改或删除本活动规则的权利。上述更新、修改或删除于公布时即时生效,用户应当主动查阅本活动规则的最新内容。所有参加本活动的用户,均视为认可并同意遵守《华为云用户协议》,包括以援引方式纳入《华为云用户协议》的《可接受的使用政策》、《法律声明》、《隐私政策声明》、相关服务等级协议(华为ModelArts服务声明、SLA等),以及华为云服务网站规定的其他协议和政策(统称为“云服务协议”)的约束。如果您不同意本活动规则和云服务协议的条款,请勿参加本活动。
-
-
【摘要】 将通过对ModelArts、盘古大模型、ModelBox产品技术的解读,帮助开发者更好的了解AI开发生产线。本文分享自华为云社区《【大厂内参】第16期:华为云AI开发生产线,破解AI全流程开发难题》,作者:华为云社区精选 。近日,华为云对AI开发生产线进行服务升级,帮助各行各业的软件开发更简单快速地完成SaaS化,在云上创造更大价值。AI开发生产线,通过 ModelArts 和 AI Gallery , 支持AI开发运维的DevOps全流程。通过预集成盘古大模型和丰富的AI资产,让开发者实现从数据标注、数据处理、模型训练、到部署上线、模型调优等环节全流水线自动衔接,大幅提升效率。1.基于行业算法套件的ModelArts云原生AI开发最佳实践在AI开发的探索阶段,选择合适的环境、便利的工具、按需的算力、一键可运行的算法资源是我们最重要的因素。在环境和算力方面,使用ModelArts提供云化Notebook,配合弹性按需算力资源能力,可以快速地让我们拿到一个带AI计算资源的环境。在算法方面,面向特定领域问题的算法解法集合、AI算法套件,可以让我们快速的在算法间切换,找到合适的并且具备实际应用的自研及开源算法,通过订阅和选择的方式,可以在ModelArts上一键式的运行。在工具方面,我们基于云化的Notebook提供了参数化的开发模式,让你的探索变得更便捷高效。1.1选择合适的AI开发套件,让你的开发事半功倍1.1.1云原生Notebook华为云会选择Notebook作为线上AI开发与探索的首选工具,其优势在于可贯穿整个AI开发探索生命周期,从数据的处理到模型的开发以及验证和调测,都是能够全部覆盖的。Notebook可提供交互式的编程体验,探索过程中的可视化要求,可以快速地进行结果的分享与重现。如上图“Kaggle在2021年机器学习开发者调研数据”所示,可以看到在IDE的流行度里面,Notebook占据很重要的位置。纵观整体业界趋势,各个云化AI开发厂商还是以JupyterLab底座+插件的方式演进,主打资源免费、协作、社交化。ModelArts云化Notebook也是基于此趋势进行演进,并且提供丰富的差异化场景能力。资源切换、CodeLab、云上云下插件等,贴近用户使用习惯,提升AI开发效率。1.1.2算法开发套件我们知道,在AI的算法方面,需要去寻找匹配我们业务场景的合适算法,并且需要进行环境和算法之间的适配开发,以及算法相关参数的调优。ModelArts提供的算法套件是面向一类算法问题解的集合,是针对特定的行业、领域预训练模型、算法实现及数据集。以简单易用为基础正对云边端场景的不同需求,提供相应的内容支持。目前,华为云AI算法套件是通过自研+社区两个方面,确保算法的丰富度。自研方面,结合丰富的真实AI开发经验,提供领域预训练模型、算法实现及数据集。目前已经在图像分类、目标检测、视觉分类、姿态预估等多个领域提供相关的内容,并且后续会持续丰富。用户可以在AI Gallery上一键订阅,在ModelArts上一键运行,提升用户的AI开发和探索效率。社区方面,对于社区的主流算法套件完成了非侵入式的适配,例如MMDetection、MMOCR、MMSegmentation等算法套件,可以像加载自研算法套件一样,在ModelArts中快速加载一键运行。1.1.3算法调优有了工具和算法,接下来就是算法开发的探索和调优。华为云基于ModelArts提供的基于Notebook的参数化、图形化、交互式的能力加速开发过程,帮助开发者在数据处理、模型调优以及模型预测方面进行可视化的操作,低门槛完成多种场景的AI算法开发与应用,配套提供的算法套件可以更加高效进行AI开发。上图是Notebook的Excel,用户可以进行参数化的定义数据处理过程和训练过程,可以图形化查看训练结果,有表格,而不是之前的大篇幅的日志,还可以进行交互式的进行结果调测。不仅如此,Notebook还提供了丰富的基础组件和组件定义能力,用户可以根据自己的使用需求和习惯定义个性化的插件。在开发的资源和算力方面,ModelArts云原生AI开发资源与算力构建在开放的华为云云原生平台之上,基于底层应用、开放自主的相关基础云原生能力,方便开发者按需,低成本,灵活获取到可用的资源和算力。1.2标准化的开发工具,云上云下协同从前面的介绍大家可以了解到,对于华为云AI开发工程师,在AI开发的实验原型和探索阶段是基于ModelArts提供的serverless化的Notebook的交互式参数化能力,配合弹性按需算力、资源和环境,以及丰富的算法套件,帮助我们加速实验原型的探索及开发。面对具体AI团队开发及应用落地时,需要涉及多人和多阶段配合完成从数据处理、算法开发和调优,到模型训练、推理开发及测试,并且在后续运行中涉及反复的迭代,怎么样可以高效地完成这项工作。借鉴传统软件开发经验和实践,华为云通过工程化的AI开发模式,从工具到开发标准,再到代码化工程管理能力,助力开发团队协同完成AI开发及应用落地。在工具方面,为了更加匹配通用的IDE工具使用习惯,使用ModelArts提供VSCode\PyCharm插件,就可以在自己的本地VSCode\PyCharm上进行代码开发,使用插件远程连接云上资源进行远程开发调测,并且可以调用模型训练、模型部署等能力。通过定义AI工程框架,来让AI开发标准化,这个标准化的工程框架是实践的总结和积累。使用ModelArts提供的标准化AI开发工程模板在模板中对于数据、算法、推理等各个环节的结构进行定义,并且还提供了CLI工程脚手架,通过代码与命令的方式与平台功能相结合,全流程完成工程化的AI开发。用户可以基于我们提供的工程结构定义,分工协同,完成不同内容的开发。上图为ModelArts提供的标准化工程结构,可以通过代码化方式完成AI过程、步骤、行为、资源等定义,并且通过代码仓统一管理。例如:用户可以定义workflow、镜像、训练、作业、应用部署等,并且配合统一的资产管理进行工程化的AI开发。前面介绍了云上开发工具的能力,云上的IDE与传统的IDE在能力上还是存在差距的,所以为了更加匹配开发者通用IDE工具的使用习惯,ModelArts使用了基于VSCode\PyCharm+ModelArts插件,满足本地化开发及调测诉求。面对稀缺的GPU资源的诉求,通过远程连接云上资源的能力,打造本地开发远程资源按需使用的能力,插件提供一键式的安装配置等能力,方便我们开发者的使用。后续ModelArts也会提供更加沉浸式的AI开发能力,包含AI计算资源、云上存储预置AI镜像,让用户体验到云上资源便利的同时,也带来本地开发的顺畅感。在远程插件上,可以调用云上的开发、数据、训练、推理等能力,以及提供的工程相关的所有AI开发能力,真正满足一个团队不同用户的诉求。1.3AI Gallery构建丰富活跃的AI生态在正式的AI开发项目中,我们会面临更多的困难和问题。AI Gallery是在ModelArts的基础上构建了开发者生态社区,丰富及活跃的生态是AI开发的基础和推动力。在AI Gallery中,不仅提供了Notebook代码样例、数据集、算法套件、模型等AI数字资产;而且还有学习、实践、交流等板块,方便不同诉求的用户交流。并且在资产方面提供分享和订阅能力,方便AI资产持续更新和迭代。我们希望开发者沉淀更多的资产,帮助更多的AI开发者,提升大家的开发效率,加速AI产业的发展。传统软件开发完成后就是交付运维,AI的软件开发交付后不仅仅是交付运维,还有面临持续的数据更新、模型迭代、难例挖掘,这些流程应该是标准化可信的,并且与开发流程解偶,所以ModelArts提供了工作流的能力。工作流是基于实际业务场景开发的,用于部署AI应用流水线工具,把已经完成好的AI开发业务场景,通过ModelArts Python SDK进行编排和开发,将数据处理、模型训练、模型部署等能力进行编码,然后把流水线发布给业务应用人员。对于应用者来说不一定需要了解整个开发实现细节,他们只需要了解流水线的机制,以及需要存在变化的内容即可。例如:数据的增强、更新或者模型的参数变化,就可以方便地进行模型迭代、上线,这样让开发和运行分离,提高后续业务迭代的效率。综上我们可以看出,ModelArts 致力打造一站式的AI开发平台,让AI开发变得简单、高效。华为云从AI开发全流程出发,在分析设计算法模型探索和实验模型集成与开发以及AI应用运维上提供高效、便捷的能力,并且结合华为云丰富的实践经验,沉淀更多的标准化AI开发流水线,为AI开发者提供更多更好的服务。2.华为云盘古大模型,开启AI工业化开发2025年,企业对AI的采用率将达到86%。所以,AI走进企业的生产核心系统创造更大价值是大势所趋。但与之相对的是,封闭的作坊式AI开发已经无法满足行业高效、高质量的数字化转型需求。因为当企业有了AI需求以后,就需要独立的创建一个场景。在这个场景中,企业要投入专家和开发人员,来针对这个场景去进行专门的研发。这会导致AI应用的开发效率低下,并且它的开发经验,包括产生的一些资产也是无法得到有效积累。针对这样的情况,华为提出了 盘古大模型 。2.1什么是华为盘古大模型华为云盘古大模型,是把海量的数据知识存储在超大型的神经网络中,针对定制化的需求,只需要将这些需求固化成一些流水线。在这个过程中,由于不同的流水线之间大部分的流程都是一样的,仅仅只有小部分的操作或者场景专有的知识是有所不同的,所以就可以把这些知识或者操作像搭积木一样,放在在这个流水线上面进行开发。这样的开发模式比起作坊式的开发模式,就会更加的节省时间和人力。在实际测试当中,盘古大模型进入企业生产系统以后,效率提升是非常明显的。原来需要十个人所做的事情,现在只要一个人就可以把它做完,效率的提升达到十倍以上。2.2五大盘古大模型应用在千行百业为了更好地针对不同领域方面,在盘古大模型中,有视觉、NLP(自然语言处理)、多模态、Graph和科学计算等五个领域的大模型。在不同的行业。场景下,如金融风控、工业质检、时尚设计、案件审核和智慧育种等场景下,设置场景化模型。这些场景化模型都可以适配盘古大模型,最后应用在不同的行业案例中,如违规风险识别、布料质检、流行元素标注等等应用。盘古大模型是通过把算力、研发成本前置到华为云侧,如华为云每年会消耗英伟达V100GPU超过4000张、使用相当于4TB清洗后纯文本数据和10亿张图片去进行训练,配备大量的工程师,经过多年的积累研发了大模型系统,这个大模型系统及可以帮助业界把成本大大减少和降低,不用在耗时耗力重复性的开发算法及模型,应用大模型从而快速的进行AI开发为了让大家更好的认识和熟悉大模型,接下来将为大家展示大模型在不同行业中的应用。2.2.1CV大模型在铁路TFDS进行未知的故障预测的场景中:一辆列车行驶路途中,有个摄像头架设在一个固定地点,通过拍摄列车上各种不同视角不同位置的图像后,快速的去判断列车是否有故障。由于这些故障出现次数较少,故障类型多、拍摄图片质量差等原因,因此很多情况下小模型无法取得很好的应用。很多情况下,工程师要针对每个故障去适配一个小模型,成本就非常高,更不要说未知故障的预测了。通过盘古大模型,可以用一个或者少数几个大模型去适配铁路TFDS中的100多种不同的故障场景。最终保证故障的召回率达到90%,未知故障预测发现率提升1倍以上,同时还能保证单张图片的识别时间小于4ms。2.2.2NLP大模型关于NLP大模型,为大家介绍的是最高检应用项目。在这个项目当中,从最高检获取文本,对法律文书文本进行分析,去理解其中所代表的内容。比如,某一项法律为什么应用在这个判决的这个地方,这中间包含了哪些原因等等。如果是传统小模型,需要适配数据再去适配不同的案例,这就导致时间较长。盘古大模型已经在预训练过程中积累了大量NLP方面的知识,所以基于盘古大模型就可以在很短的时间内,把测试结果不断地从开始的73%提升到最后的测试结果92%,也是高效地完成了项目。除了在最高检的项目应用以外,盘古NLP大模型还在反电炸等场景上得到应用。NLP大模型的迁移性强,对人工的依赖程度小,少量样本、简单调参即可。2.2.3科学计算大模型所谓科学计算就是把AI的能力辐射到其他领域。在科学计算领域,比如气象、医药、航天航空、海洋、工业、地质等不同场景,在这些场景当中所面临的共同问题就是解偏微分方程。在偏微分方程解的过程当中,盘古大模型可以发挥出它自己得天独厚的优势。比如说神经网络体量很大,所以在解方程的时候,科学计算大模型可以捕捉到小模型无法捕捉到的特征,从而得到更精确的解答。相比于传统方法,用数值模拟的方法求解偏微分方程,求解效率会比较高。在一些极端的场景下,求解效率能够从2天缩短到0.1秒,提升4~5个数量级的程度。在这种情况下,就可以用实时预测能力为科学计算应用提供实时预警,比如在海量预测问题上,可使用实时预警能力提供实时预警,从而提升在各个方面应对突发海事情况的能力。接下来位大家展示盘古科学计算大模型的演示demo。该demo主要是进行全球海浪的实时预测,模拟一个地球的形状,包含全球的陆地和海洋数据。通过模拟给定风速后,全球海洋的海浪高度是可以实时地显示在屏幕上,这也是得益于推理速度的加快。因为盘古大模型使用0.1秒就完成预测,因此可以实时把结果显示出来。同时还可以模拟海洋上的突发情况,比如海洋上可能出现的风暴和台风。在demo当中给大家展示实时生成台风的路径,并且调整这台风的强度、风速、生命周期等参数,就能发现台风对海浪的高度等造成的影响。因此就可以去模拟台风对海洋的海浪造成的影响。所以该模型就可以有效的帮助我们去指导海洋上的生产生活,比如指导渔船去避险,发挥它自己所特有的价值。对于大部分海上作业来说,精确的海浪预报具有重要的价值。与基于超级计算机的传统预报模式相比,Al全球海浪预报模型可以以较低的计算成本,灵活的结合短期气象预报更新结果,快速提供相关海域未来数小时的海况。该预报系统可以为航运公司提供服务,通过海浪数据结合航速航向来优化航行路径,减少航行过程中的碳排放,同时避免遭遇极端海况造成人员和财产损失。2.2.4多模态大模型多模态,是指把图像和文本两种不同的模态结合在一起,它们之间可以进行交互,从而可以帮助我们完成各种各样的应用。比如像趋势预测、辅助设计等,这些在时装行业比较重要的应用。都是得益于多模态大模型,把人类所希望做的事情以文本形式表示出来,然后把它体现成图像的形式,让设计师能够以图像生成设计图的方法,交付到生产线,加速最后的生产过程。在这个过程当中,利用大模型这样的思路,使得图像和文本之间能够高效地进行交互,从而最后完成这样的过程。2.2.5Graph大模型盘古Graph大模型,主要是用来处理结构化数据。以企业报表数据为例,华为与广发证券合作中发现,有些广发证券客户会存在这个财务造假的情况。广发证券通过使用盘古大模型,利用数据可以帮助他们高效分析出哪些企业可能存在造假的情况,从而帮助广发证券更好的去完成业务情况。2019年有496家企业被监管处罚、问询或被ST处理和利用。得益于大模型当中所具备的特征抽取及预测的能力,盘古多模态大模型能构建定制化、高效的产业链条,并在企业的生产、生活当中是可以发挥出更加重大的作用。如果大家对盘古大模型感兴趣,包括对前面所展示的这个demo比较感兴趣的话,请与华为商务部门联系。3.ModelBox加速跨平台高性能AI应用开发和落地随着新基建的推进,以及5G通信、云计算、大数据和物联网的快速发展,人工智能应用的场景越来越多,AI正从极具想象力的概念成为具有超大发展前景的商业赛道,并逐渐渗透到各行各业,催生了技术产业新的发展。在深耕行业AI落地的过程中,我们发现AI的大规模应用落地并非一帆风顺,面临着比传统软件更复杂的难题:部署场景、复杂系统架构涉及端边云多种组合。易购计算平台多样,给应用性能优化带来了更高的技能要求。AI基础推理框架的API不统一,带来繁琐的适配工作。为解决这些难题,在今年的这次大会上,我们对AI开发生产线ModelArts进行了重磅升级,发布了ModelBox端边云统一AI应用开发框架。ModelBox是让模型以统一的格式和接口更高效地运行。通过ModelBox开发者无需过多关注底层技术也能开发出跨平台高性能的AI应用,提升开发效率。开发者在华为云AI开发生产线ModelArtes上完成模型的训练和优化之后,均可以将模型通过ModelBox完成应用的开发和集成,并一键部署到端边云场景的不同设备中运行,打通行业AI应用落地最后一公里。为了帮助开发者快速完成AI应用的开发和部署,ModelBox集成了三大核心技术:高性能并发调度引擎。可实现数据计算和资源管理的精细化智能调度,集成了特别优化过的硬件加速单元。译制的应用编排异构计算组件。丰富的组件覆盖了主流芯片、多数操作系统和主流的推理框架,可屏蔽这三个层次的平台差异。框架中提供了端边云AI系统单元,让开发者快速写出格式一致的AI应用,并结合场景需求,一键部署到端边云不同的设备上运行。基于高性能并发调度引擎,开发者无需掌握底层调度机制,也能保证高性能应用优化效果。ModelBox中将所有的任务都以功能单元的形式封装,一个完整的应用就是由多个功能单元构成。华为云自研一套灵活调度策略,在执行过程中,功能单元的计算将统一由线程池并发调度,确保计算单元被分配到对应的一个硬件中执行。同时计算中数据和执行单元绑定,保证数据处理的合理分配和高吞吐量。根据引擎在实际应用案例中,让典型的图片检测场景的数据吞吐量从54QPS提升到了442QPS,处理时延从0.5亿毫秒降到了0.2毫秒。为了带给开发者更好的开发体验,提供了图编排的开发模式,所有API以功能单元的方式提供,应用开发可以做到像搭积木一样方便。同时针对常用的AI推理场景提供了丰富的译制功能单元,做到低代码/零代码就能完成应用开发。一次开发无需改动代码就能实现端边云不同设备的一致部署运行。三大核心技术带来的收益也是明显的,在节约80%左右的开发成本的情况下,还带来2-10倍的推理性能提升。3.1应用编排异构计算组件,缩短跨平台开发和部署成本ModelBox作为AI应用开发框架,华为云始终关注开发者体验。依据ModelBox的技术内核,华为云提供了完整的开发工具链,可以让开发者能够以自己喜欢的IDE上手ModelBox。ModelBox的丰富工程模板可降低开发门槛,对应用的AI开发部分包含功能单元开发和图编排,可以实现对Python、C++等多种语言的灵活支持和可视化编排的低门槛开发模式。同时还提供完整的调试机制以应对开发中的问题。开发完成以后,ModelBox以RPN或者容器镜像的打包方式,一键发布应用。并且,ModelBox格式的应用支持多种部署方式,可以一键发布成ModelArts云上在线推理服务,也可以通过HiLens端云协同服务,远程部署到端边侧运行。为了实际场景需要,ModelBox还提供灵活的插件,帮助开发者实现模型的权限管理和配置等。3.2ModelBox助力智慧出行应用实现高性能提升和快速落地从去年开始,已经陆续有伙伴开始将AI应用牵引到ModelBox框架上来。以智慧出行场景为例,我们与伙伴全面重构了安全出行方案中的AI推理业务。在重构前,其中的疲劳和分神驾驶检测任务是根据传统的方式,进行AI应用开发和部署。由于业务量的增加,AI运算的性能已经满足不了要求,并且基础平台将带来扩容成本的增加。同时,切换品牌代码需要重新开发,难度就随之增加。在双方团队配合中选择了ModelBox重构现有业务,数据吞吐量提升了2-10倍。以抽烟识别为例,从15QPS提升到了150QPS,在不扩容的情况下,业务能力大幅提高,节约了非常高的硬件成本。由于性能提升,我们也可以大胆尝试更强大的算法,使得识别准确率也有超过10%的提升,同时耗时降低78%。3.3华为云助力ModelBox开发者实现商业成功华为云开源ModelBox,是希望通过开源能够与广大伙伴共同构建端边云协同的AI应用生态。2021年,华为云依托旗帜社区平台完成了源码发布,这也是社区中第一个应用框架类项目。经过半年的开源社区化开发,我们的项目更加完善和强大。今年晚些时候,我们将在下一个版本推出更多的用户体验,优化工具。未来,我们计划提供越来越多的ModelBox开源解决方案,让大家可以结合更多的参考样例和项目做到开箱即用。华为云诚挚邀请广大开发者朋友参与到ModelBox的开源项目中来。希望北向的AI算法应用开发者可以贡献自己的能力,来丰富ModelBox的功能单元和应用场景,同时让自己的应用可以被更多硬件高效运行。也希望南向设备厂商把自己的硬件通过开源项目对接到ModelBox项目中来,这样具有丰富的AI应用,可以补充和扩展硬件的AI使用场景。为降低开发者上手门槛,华为云与国办合作推出了ModelBox生态入门级开发板。开发者可以从开发板套件开始体验ModelBox结合硬件和端游协同带来的便利,将自己的IDEA快速变成现实。同时还为开发者准备了丰富的上手课程,包含入门、进阶和高阶课。通过系列课程掌握ModelBox的基础开发概念,上手体验功能单元和图形化编排的开发模式。正是由于ModelBox天生对平台操作系统和推理框架的适配开放能力,结合统一的应用打包格式,让应用不管是云上还是端边侧,可复制性都大大提高,这就给开发者的商业变现提供了更多可能。为了更好的帮助开发者实现商业成功,华为云AI开发生产线ModelArts和华为云应用商店,帮助开发者打通从开发到落地的变现通路。ModelBox开发的AI应用,可以通过云上平台和销售网络以及集成商伙伴,触达更多的行业客户,带来更多的商业机会。最后华为云AI开发生产线已通过中国信通院评测,是中国信通院认证的首批全能力域领先级AI开发平台。通过不断创新,在国内率先支持MLOps,让更多企业上好云、用好云,进而推动AI进入更多核心生产环节,产生更高价值。
-
上新日又没出现要的东西。
-
获奖结果公示见>>>【规则回顾】福利一:报名活动即可参与抽奖点我>>立即报名(秋招特训营活动已结束,为持续给小伙伴们提供交流学习阵地和资源,本训练营报名招通道和部分参与环节仍持续开放~)抽奖将于活动结束后进行,并对抽奖环节及结果进行公示,届时将发布兑奖方式奖品设置:如因缺货等原因导致奖品缺失,将替换为等价值其他奖品(最终解释权归华为云所有)福利二:参与开发神器体验并打卡即可参与抽奖参加HCSD秋招特训营开发神器体验简单易上手、教程超详细、真实体验华为云产品!完成体验并在评论区打卡截图即可参与抽奖!完成多个体验中奖概率随之翻倍哦!开发神器体验内容开发神器体验1:指导书>>体验5分钟开发微信小程序<<规则:提交AppCube零码应用编辑页面截图(需包括右上角华为云账号)打卡截图示例:开发神器体验2:指导书>>0代码4步体验物联网设备上云<<规则:提交完成体验的截图(需包含右上角华为云账号)打卡截图示例:开发神器体验3:指导书>>AnimeGANv2照片动漫化<<规则:提交完成体验的截图打卡截图示例:开发神器体验4:指导书>>10分钟快速入门RDS<<打卡规则:完成体验后,将全屏截图(需含有右上角华为云账号)打卡截图示例:奖品设置:完成任一体验可以领取华为云开发者认证499元代金券>>点我申请华为云开发者认证代金券<<活动规则:完成体验后在评论区反馈打卡截图即可参与抽奖,每个用户最多回复3次不同的体验截图,如反馈多次相同的截图,则不予提高中奖概率;完成多个体验中奖概率翻倍,即完成两个实践2倍中奖概率,完成三个实践4倍中奖概率,完成四个实践8倍中奖概率;抽奖将于活动结束后进行,并对抽奖环节及结果进行公示,届时将发布兑奖方式;如因缺货等原因导致奖品缺失,将替换为等价值其他奖品(最终解释权归华为云所有)福利三:参加模拟机试,抽取华为手表等好礼点击活动页对应的考试链接,参与考试投递简历的同学记得填写简历ID哦(你负责成绩优异,我负责推送简历,Fighting!)每项考试有五次考试机会,入门版拿来练手,实战版直接开冲!点我加入>>Classroom课堂,另有【作业】待你来刷题!!每道题目注意点击【保存并运行】再提交,否则会没有成绩!!完成考试,扫描下方二维码关注公众号 【华为云PaaS服务】回复【秋招】获取抽奖链接奖品设置:完成任一机考可以领取华为云开发者认证499元代金券>>点我申请华为云开发者认证代金券<<如因缺货等原因导致奖品缺失,将替换为等价值其他奖品(最终解释权归华为云所有)活动交流群
华为云PaaS小助手
发表于2022-08-03 15:19:34
2022-08-03 15:19:34
最后回复
yd_296024285
2023-05-20 11:32:55
2450 135 -
#活动已结束,结果告知#【8.6看直播,3台 NOVA10送给星耀的昇腾AI开发者!】##活动已结束,结果已公布##房间标题本轮奖品中奖人账号姓名昇腾AI开发者创享日·南京站华为nova10Ascend2850086000440463519昇腾AI开发者创享日·南京站华为nova10Ascend2850086000519786627韩冰昇腾AI开发者创享日·南京站华为nova10Ascend2850086000485856178杨磊 因Ascend2850086000440463519用户未在抽奖结束后填写收货地址,请尽快私信坛主收货地址进行领奖, 领奖截止时间:8月12日18:00,逾期视为放弃!请所有获奖用户尽快按照:账号中心 - 实名认证 - 个人认证 完成实名认证点击“立即报名”参与【注意事项】1. 请务必使用个人账号参与活动(IAM、企业账号等账号参与无效)。2. 所有获奖用户在兑换奖品前,请在昇腾社区完成实名认证,认证路径为账号中心 - 实名认证 - 个人认证。3 活动结束且用户填写完成领奖信息后,30个工作日内发放奖品,发放时间根据实际情况动态调整,如有延期敬请见谅。4. 本活动最终解释权归昇腾社区所有。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签