-
智慧城市对气候变化、更明智的决策和提高生活质量的影响较小,下面,我们来看看人工智能帮助实现这一目标的十种方式。城市在人工智能的帮助下不断创新。由于智慧城市中使用的人工智能技术,这些城市能够控制交通、废物和维护,以及预测能源消耗、污染风险和对环境的影响。智慧城市对气候变化、更明智的决策和提高生活质量的影响较小,下面,我们来看看人工智能帮助实现这一目标的十种方式。10.安全当犯罪事件被报道后,监控录像通常会被重新查看,但这并不能预防或阻止犯罪。而使用人工智能的监控摄像头能够实时分析录像,发现犯罪行为,然后立即报告和处理。这些摄像头还可以从衣服上探测到人,从而使该技术能够比以往更快地找到嫌疑人。9.维护一家名为RoadBotics的公司开发了一种利用人工智能的技术,能够分析道路图像,然后评估问题,并产生具有成本效益的解决方案。这使得城市能够知道何时何地需要进行维修,并在省钱的同时进行处理。这种技术也提高了城市的安全,因为问题不会被忽视。8.预测未来的需求利用人工智能技术进行创新的智慧城市能够更好地预测人类未来的需求。使用能源跟踪技术可以让城市知道何时需要新能源,或何时可以实施更可持续的方法。一些人工智能技术还可以预测和帮助规划房地产开发,这意味着房屋会在需要的时候投放市场。7.控制污染科学家已经开发出一种技术,利用人工智能和机器学习来分析当前的污染物,并预测未来2小时的污染水平。这种技术允许负责人提前做出决定,以减少他们对环境的影响。6.停车系统利用车牌识别技术,停车场能够检测到超时停车的车辆,这也可以强制执行付款和罚单。当人工智能系统集成到整个停车场时,停车位就能够呈现给等待的用户,一些更先进的技术还能够根据车辆推荐停车位。5.公共交通公共交通已经通过在智慧城市中使用人工智能进行了创新。这项技术允许公共交通工具接收和访问实时日期和跟踪,从而提高了时间和客户满意度。还计划在城市内使用自动公共汽车,这些可以减少排放,改善路线并增加频率。4.废物管理智慧城市开始在垃圾管理中使用人工智能,这种类型的技术可以让城市跟踪回收,并确定该地区可以回收的物品。悉尼的一些城市在这方面更进一步,使用人工智能机器人来分类垃圾,以及清洁湖泊和河流等区域。3.交通管理人工智能技术正在交通行业中应用,以减少交通和事故。一种名为CIRCLES的交通管理技术具有预测和减少交通的能力,使用深度学习算法,这也可以减少交通造成的污染。人工智能还可以用于整个交通摄像头系统,实时检测道路犯罪,使其更容易处理。2.能量跟踪人工智能可以在智能城市中用于分析和跟踪企业和公民的能源使用情况,然后根据这些数据可以决定在哪里使用可再生能源。这也可以显示出能源被浪费的城市,以及如何节约能源。1.环境智慧城市可以使用人工智能来查看它们对当地环境、全球变暖以及污染水平的影响。在污染控制和能源消耗方面使用人工智能和机器学习,可以让政府和城市做出最有利于环境的知情决定。智慧城市还使用人工智能来检测二氧化碳,从而做出有关交通的决定。责任编辑:庞桂玉 来源: 千家网
-
作者:AI时代前沿最近发布的Gartner 2022 AI in Organizations调查发现,80%的高管认为自动化可以应用于任何商业决策。随着自动化对商业运营变得越来越重要,该调查探讨了企业如何将人工智能的使用作为其长期自动化战略的一部分。报告估计到2025年,人工智能的商业价值将达到51亿美元。Gartner(高德纳)副分析师Erick Brethenoux表示:“该调查显示,企业正从以纯粹的战术方法采用人工智能,转向更有战略性地应用人工智能。”“例如,三分之一的组织正在多个业务部门应用人工智能,通过支持跨业务流程的决策,创造更强大的竞争差异化。”调查发现,平均54%的人工智能项目正在从试验向生产飞跃,高于2019年AI in Organizations调查报告中的53%。尽管这一数字没有显著增加,但部署的人工智能项目的比例已经从2019年的35%上升到最新调查的47%。Gartner将这归功于疫情带来的更灵活的自动化方法,这允许在组织内部更实际地实施人工智能。但扩大人工智能的规模仍然是一个重大挑战。企业仍在努力将他们正在构建的算法与业务价值主张联系起来,IT和业务领导很难证明运营模型所需的投资是合理的。扩大AI规模的一个问题是,部署大量AI模型时需要复杂的治理工作,40%的受访组织报告称部署了数千个,有时甚至数十万个AI模型。更多的模型会带来治理上的挑战,这会使展示价值和ROI变得困难,这一困难被视为人工智能采用的最大障碍。调查还发现,包括寻找合适人才在内的繁琐准入门槛降低了。尽管其他技术领域报告了人才短缺,Gartner的调查发现,对于接受调查的组织来说,AI人才的缺乏并不是采用AI的重大障碍,72%的高管表示,他们已经或可以为他们的项目寻找所需的AI专业人才。最成功的组织会结合内部选拔和外部招聘人工智能人才。这确保了团队通过学习新的AI技能和技术,并考虑来自组织外部的新想法来不断更新自己。安全和隐私问题也不被视为人工智能采用的最大障碍,只有3%的受访者提到了这一点,尽管41%的人披露了之前的人工智能隐私泄露或安全事件。尽管不是人工智能最重要的障碍,但它仍然是一个令人担忧的问题。一半的受访者表示,他们担心竞争对手、合作伙伴或各种第三方获取敏感信息,49%的受访者还担心恶意的外部攻击。有趣的是,60%面临人工智能安全或隐私事件的受访者表示,他们的数据是由内部一方而不是外部来源泄露的。Brethenoux说:“考虑到大多数AI入侵是由内部人士造成的,组织对AI安全的担忧往往是错误的。”“虽然攻击检测和预防很重要,但人工智能的安全努力应该同样侧重于最大限度地降低人类风险。”Gartner于2021年10月至12月在网上进行了这项调查。来自美国、德国、英国的699名应答者都是在3年内已经部署或计划部署AI的企业。Gartner的分析师也在8月24日于奥兰多举行的Gartner数据与分析峰会上讨论了调查结果。责任编辑:华轩 来源: 今日头条
-
作者:Valli Bollavaram在大量高保真临床和索赔数据的支持下,预测分析可以比以往更快、更准确地识别高风险患者。随着医疗保健朝着基于价值的支付和负责任的医疗保健方向发展,医疗服务提供者需要更好的工具来实现人口健康和风险管理。防止不必要的住院的能力是这个谜题的主要部分。做好这项工作意味着主动识别高危患者,并对他们进行护理协调和有针对性的干预。预测分析长期以来一直有望解决这个问题。在大量高保真临床和索赔数据的支持下,预测分析可以比以往更快、更准确地识别高风险患者。以下是预测分析的一些主要优势:提高医院管理效率预测分析允许医院、保险公司和患者共同处理索赔并避免问题。可以减少索赔处理和批准的延迟,以帮助患者更迅速地获得治疗。通过自动化繁琐的操作,医疗机构可??以提供一个无压力的工作环境,让员工能够专注于提供更好、更高效的客户服务。节约成本预测分析允许更早、更成功的医疗干预,以及更有效的医疗保健管理和运营管理,从而降低患者和医疗保健提供者的成本。早期诊断在这个领域,预测分析已经在创造奇迹。通过及早提供治疗,可以在疾病威胁到患者的长期健康之前对其进行治疗。这对于确定哪些癌症患者有更大的康复机会以及如何帮助他们克服可怕的疾病特别有价值。个性化治疗医院可以创建精确的模型来降低死亡率并为患者提供适当的治疗。医生们正在发现使用预测分析为每位患者提供高质量治疗是多么容易。医生可以根据患者的病史来决定某个处方是否适用于患者,或者他们是否可以根据患者的个人需求制定独特的治疗组合。预测不良事件的风险研究人员和科学家可以使用历史和实时数据预测传染病的爆发和传播。这可以帮助政府采取适当和必要的行动来管理流行病并减少社会死亡人数。分析和控制患者健康状况的恶化机器学习算法使得使用基于收集到的有关人的信息的健康图来预测患者结果成为可能。尽管医务人员意识到手术或复杂的医疗过程可能会危及患者的生命,但可以通过预测分析评估准确的风险量,从而进行早期干预。远程医疗预测分析并非医疗保健环境独有。它可用于为无法离开家的人们提供持续的医疗保健服务。许多高危患者住在家里而不是医院。责任编辑:庞桂玉 来源: 千家网
-
赛题描述本次大赛结合医检行业特色,以宫颈癌筛查为主题,提供近1万张辅以病理医生专业标注的宫颈细胞学图片。利用这些图片及标注开发人工智能分类算法,判断图片中细胞的病变程度,并进行分类。 赛题任务任务指标: 识别准确率 = 识别正确的图片数 / 图片总数推理时间要求: 计算资源规格为“CPU: 2 核 8GB”,一小时内完成1800张图像预测数据分析数据处理模型选择总结致谢
-
最近看到一款下棋机器人的产品介绍。价格大约两千元左右。感觉还可以接受。机器人结构上,由棋盘(包含棋子)、机械臂、交互屏、天线和主体躯干等五个部分组成。对战过程中,机器人头部的天线上部署了摄像头,可以精准识别棋盘落子情况及变化,并基于内置的象棋算法,根据对弈者的落子推算招数。推算招数完毕,“中央系统”发出指令,由机械臂完成抓子动作。整个过程看起来很简单,实际上却要做到, 比如摄像头如何精准捕捉到实时动态,就需要搭载特殊的AI视觉算法; 而机械臂如何准确抓取棋子、抓稳放好,又要用到相关的操控算法来进行控制。当然,机械臂在动作的过程中要安全,不能造成伤害,这是最基本的要求。总体感觉是个不错的陪伴、休闲的机器人工具,感兴趣的可以看看~
-
目标:坚持面向世界科技前沿、面向经济主战场、面向国家重大需求、面向人民生命健康,充分发挥人工智能赋能经济社会发展的作用,围绕构建全链条、全过程的人工智能行业应用生态,支持一批基础较好的人工智能应用场景,加强研发上下游配合与新技术集成,打造形成一批可复制、可推广的标杆型示范应用场景。首批支持建设十个示范应用场景。有:智慧农场智能港口智能矿山智能工厂以上4个我觉得行业落地比较好还有智慧家居智能教育自动驾驶智能诊疗智慧法院智能供应链等这些6个个人觉得路还很长自动驾驶的说明:针对自动驾驶从特定道路向常规道路进一步拓展需求,运用车端与路端传感器融合的高准确环境感知与超视距信息共享、车路云一体化的协同决策与控制等关键技术,开展交叉路口、环岛、匝道等复杂行车条件下自动驾驶场景示范应用,推动高速公路无人物流、高级别自动驾驶汽车、智能网联公交车、自主代客泊车等场景发展。
-
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智能化城市巡检,支撑景区安全、流动人员管理、危化品监管、治安监测、交通梳理、垃圾分类、疫情防控、防汛防台等多种场景的巡查治理。城市监控从“看得见”走向“看得懂”,海量数据得到有效应用,城市在算法赋能之下全面转型升级。
上滑加载中
推荐直播
-
华为云码道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华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签