精华内容
下载资源
问答
  • 集合了国外30篇左右关于云计算的论文,相信对想研究云计算人来说,还是蛮有帮助,由于只能传15M以下大小文件,所以分成两份!见谅!
  • 我经常看有人发帖问关于软件项目创意点子事,也看到了很多回帖,我自己也回了一些常见软件项目创意。不过我觉得只列出三两个是远远不够,因此就收集并这个软件项目创意列表,大家要找简单编程软件项目创意...

    我经常看有人发帖问关于软件项目创意点子的事,也看到了很多回帖,我自己也回了一些常见的软件项目创意。不过我觉得只列出三两个是远远不够的,因此就收集并这个软件项目创意列表,大家要找简单的编程软件项目创意学习练手的话,可以收藏并扩散本文。这些软件项目创意并不是论文级别的,只是想抛砖引玉让大家能从中受些启发。

    下面你们会看到 120 多个个软件项目创意想法,都是我通过头脑风暴得来的。我将其根据主题分成了10 个分类,但有些软件项目创意其实涵盖了不止一个主题。

    更新:如果你喜欢这些想法的话,你也可以读一下我做的电子书。该书有100多页,包含了200个想法,有很多有用的内容和链接。每个想法都包含一个难度评分,实现该想法的提示以及复杂版的想法。要比下面这些更有深度。另外也请大家阅读下我的另一本书《编码生存手册:习惯和陷阱》,免费的哟。

    文本操作

    • 逆转字符串——输入一个字符串,将其逆转并输出。
    • 拉丁猪文字游戏——这是一个英语语言游戏。基本规则是将一个英语单词的第一个辅音音素的字母移动到词尾并且加上后缀-ay(譬如“banana”会变成“anana-bay”)。可以在维基百科上了解更多内容。
    • 统计元音字母——输入一个字符串,统计处其中元音字母的数量。更复杂点的话统计出每个元音字母的数量。
    • 判断是否为回文——判断用户输入的字符串是否为回文。回文是指正反拼写形式都是一样的词,譬如“racecar”。
    • 统计字符串中的单词数目——统计字符串中单词的数目,更复杂的话从一个文本中读出字符串并生成单词数目统计结果。
    • 文本编辑器——记事本类型的应用,可以打开、编辑、保存文本文档。可以增加单词高亮和其它的一些特性。
    • RSS源创建器——可以从其它来源读取文本并将其以RSS或者Atom的格式发布出去。
    • 实时股价——可以查询股票当前价格。用户可以设定数据刷新频率,程序会用绿色和红色的箭头表示股价走势。
    • 访客留言簿/日志——允许人们添加评论或者日记,可以设置开启/关闭评论,并且可以记录下每一条目的时间。也可以做成喊话器。
    • 新闻和比分播报器——一个桌面应用,可以从网上收集新闻和比赛分数,将结果在屏幕上滚动播出。
    • 占星罗盘——用占星术来预测每天的运程。
    • 密码短信——可以将数据加密解密,并能将其发送给朋友。
    • 帮你挑礼物——输入一堆你可能会送的礼物,当有人过生日时,该程序会随机选择一样礼物。也可以加上一个额外功能,可以告知哪里可以弄到这个礼物。
    • HTML生成器——将 TEXT 文档转换成HTML文件,对制作网页HTML文档很有用。
    • CD-Key生成器——利用某种算法生成一个唯一的key。软件开发者可以用它来作为软件的激活器。
    • 正则表达式查询工具——用户可以输入一段文本,在另外的控件里输入一个正则表达式。运行以后会返回匹配的内容或者正则表达式中的错误。

    网络

    • FTP工具——与远程网络服务器交互文件。
    • 原子钟校时——从网上同步原子钟时间。全世界有很多原子钟,可以把它们都列出来。
    • 聊天应用(IRC或者MSN风格的)——像IRC那样的聊天室软件或者MSN那样的实时聊天软件。更复杂一点的话,可以为聊天制定一套你自己的传输协议。
    • 获取当前天气——获取某个地区当前的天气情况。
    • P2P文件共享应用——像LimeWire、FrostWire、Bearshare或者torrent风格的应用。
    • 端口扫描器——输入某个ip地址和端口区间,程序会逐个尝试区间内的端口,如果能成功连接的话就将该端口标记为open。
    • 邮件检查工具(POP3/IMAP)——用户输入一些账号信息,包括服务器、ip、协议类型(POP3或者IMAP),应用每隔一段时间就会检查下该账号下的邮箱。
    • 数据包嗅探器——侦测电脑上进出的数据包,获取诸如目的地和大小之类的信息。
    • IP注册地查询——输入ip地址,查询该ip是在哪注册的。
    • Whois查询工具——输入一个ip或者主机地址,通过whois查询并将结果返回。
    • 邮编查询——输入邮编,返回使用该邮编的地区名称。
    • 远程登入——远程登入桌面类型的应用,可以查看和控制远程电脑(假如你已经获得权限)。可能需要你自己的网络和两台电脑来进行测试。
    • 网站定时检查器——每隔一段时间或者在预定的时间尝试连接某个网站或者服务器,来检查它是否可以连上,如果连不上了会通过邮件或者桌面通知来告知你。
    • 小型网页服务器——简易版的网页服务器,可以存放包含Javascript和其它形式代码的HTML文件。复杂一点的话可以尝试流媒体视频、创建一种服务器端语言或者其它类型的流媒体。
    • 网络蜘蛛——一个可以自动执行网页上各种任务的程序,任务包括网站检查、页面抓取、数据摘要以及网络邮务。

    • 产品库存管理——创建一个管理产品库存的应用。建立一个产品类,包含价格、id、库存数量。然后建立一个库存类,记录各种产品并能计算库存的总价值。
    • 电影商店——管理录像带租借,记录借出时间、到期时间、逾期费用。复杂一点可以生成逾期用户的账号报告。
    • 航空/酒店预订系统——创建一套预订航班或酒店的预订系统。不同的航班座位和酒店房间收费不一样。譬如头等舱要比经济舱贵。带阁楼的套间要更贵些。记录下何时有空房可供预订。
    • 学生成绩管理器——记录一个班级的学生(创建一个Student类,记录他们的名字、平均分和考试分数)和他们的成绩等级。根据学生的测验和作业的分数计算出平均分和成绩等级。复杂一点可以将数据画在贝尔曲线上。
    • 银行账户管家——创建一个名为“Account”的抽象类,有三个为“CheckingAccount”、“SavingsAccount”和“BusinessAccount”的子类。通过类似ATM的程序来管理这些账户的借贷。
    • 馆藏目录——创建一个图书类,记录书名、页数、国际标准书号、是否借出。用它来管理各种书籍,允许用户进行借出和归还操作。复杂一点的话,可以生成逾期图书和逾期费用的报告。也可以让用户进行预约操作。

    线程处理

    • 下载进度条——创建一个表示下载进度的进度条。进度条由独立的线程操作,通过委托来和主线程进行通讯。
    • 下载管理器——允许程序同时下载数个文件,每个都用单独的线程进行背景下载。主线程会关注下载进度并且在下载完成时通知用户。
    • 聊天软件(远程聊天)——做一个聊天软件,允许你通过ip直接连接到另一台电脑,也允许你的“服务器”程序处理多个请求连接。
    • 批量缩略图生成器——在进行图片转换的处理时会需要很多时间,尤其是图片很大时。做一个图片处理程序,能让你在做其它事的时候在后台线程里将数百张图片转换成某个大小的图片。复杂一点的话可以用一个线程来缩放,用另一个线程来为缩略图重命名。

    Web应用

    • 所见即所得编辑器——创建一个在线编辑器,允许用户移动元素、创建表格、书写文本、设置颜色,而用户不必懂HTML。就像Dreamweaver或者FrontPage。如果需要例子的话,可以参看DIC。
    • 分页浏览器——创建一个可以分页的小型网页浏览器,可以同时浏览几个网页。简化一点的话不要考虑Javascript或者其它客户端代码。
    • 文件下载器——该程序可以从网页上下载各种资源,包括视频和其它文件。用于有很多下载链接的网页。
    • 远程登录——创建一个远程登录的应用,可以通过网络登录服务器并能执行一些基本命令。
    • 在线白板——做一个在线白板程序,你和朋友们可以一起在白板上进行一些操作,画图、写字等等。
    • 带宽监视器——这个小工具可以记录你已经在网上上传和下载多少数据流量了。可以试着做份报告或者图表来展示各时段的使用情况。
    • 书签搜集管理器——该程序可以让用户上传书签并将它们排序,去掉重复的,并能生成书签文件以供Firefox/IE/Safari等使用。复杂一点的话可以试着将书签整理进不同的文件夹。
    • 密码保险箱——用来记录各种密码,并且将它们加密,这样别人就看不到了。
    • iGoogle媒体播放器小部件——做一个iGoogle小部件,可以用来播放本地音乐列表,也可以每天分享一首歌。也许还可以让别人看到你最近听了些什么歌。
    • 基于文本的游戏——做一个像Utopia那样的文本RPG,游戏中,你可以创建一个文明、收集资源、共铸联盟、施放法术、回合制系统。看看是否能够统一王国。
    • 定时自动登录——做一个程序可以在预定的时间登录进某个指定的网页并且执行特定的动作,然后在登出。可以用来检查邮箱、发布常规内容、为其它程序获取信息。
    • 电子卡片生成器——可以让用户制作自己的电子卡片并发送给其他人。可以使用flash也可以不用。可以使用图片库,也可以加上深刻的格言警句。
    • 内容管理系统——像Joomala、Drupal、PHP Nuke这样的内容管理系统。从简单的做起,慢慢增加其它功能。
    • 模板制作器——该网站应用允许用户输入各种颜色代码、元素、尺寸,来为PHPBB、Invision Board、MySpace之类的应用创建模板文件。
    • 验证码生成器——应该在登录时见过有数字有字母的验证码图片吧?这可以防止自动登录和垃圾广告。试着自己做一个,如果使用PHP的话,看下GD的图片函数。

    文件

    • 试卷生成器——该程序可以从文件中随机挑选出不同的题目生成一份试卷。每份试卷可以不一样,通过读取答案来给打分。
    • 快速启动——该工具可以添加各个程序的小图标,点击小图标就可以运行程序。和Windows的快速启动类似。
    • 文件管理器——做一个文件管理器,要加些新特性,更佳的搜索功能、新图标、新外观。
    • 文件记录排序工具——从文件中读取记录,将其排序并写回文件中。允许用户选择排序风格以及排序关键字。
    • 生成财务交易文件并且算出平均值——将财务交易读进文件,按照账户分类、算出各软件项目创意的总量或平均值、理清各账户的借贷数据。
    • Zip文件生成器——用户输入不同文件夹的文件,也许还包括其他电脑中的文件,然后程序将这些文件打包成zip文件。复杂一点的话,打包时对这些文件进行压缩。
    • PDF生成器——从txt、html或其它文件中读取数据生成PDF文件。可以做成一个网页服务,用户上传文件,返回一个pdf版本。
    • 批量文件命名器——程序批量处理一些文件,将根据用户提供的过滤器为它们重命名。譬如用户输入的过滤器为myimage###.jpg,那么会生成至少包含3位数的文件名,譬如myimage001.jpg、myimage145.jpg,甚至是myimage1987.jpg,因为1987也满足了至少包含3位数的条件。
    • MP3标签生成器——修改MP3文件的id3v1标签。还可以试着在MP3文件的头部加入id3v2的标签,譬如album art标签。
    • 日志文件生成器——该程序可以记录指定事件的日志。譬如程序做了什么、系统在干什么、文件什么时候被修改了。
    • Excel分页输出器——做一个在线程序,可以读取文件内容生成一个excel分页。可以通过CVS或者其它文件格式来做。复杂一点的话看看是否能创建公式字段。
    • RPG角色属性生成器——做一个程序来给RPG角色随机分配属性点数,可以由用户制定一些分配规则。可以生成职业、性别、力量/魔法/敏捷点数、额外能力或者贸易技能。把结果保存成文件,这样跑团的时候地下城主可以把它打印出来。
    • 文件复制工具——该工具可以批量处理文件复制和备份操作。

    数据库

    • SQL查询分析器——该工具可以让用户输入一条查询命令,让其运行于本地数据库中。尽量让它运行得更高效。
    • 远程SQL工具——该工具能让你通过网络在远程服务器上执行查询操作。它能接收远程主机地址、验证用户名和密码、执行查询并返回结果。
    • 卡片整理器——创建一个在线应用,用来记录搜集到的卡片。可以让用户输入整套卡片,查看哪些已经有了,哪些还需要搜集。要增加复杂度的话,还可以让用户知道还差多少可以完成,或者已经收集卡片的价值。
    • 报告生成器——该工具可以根据数据库中的表格生成一份报告。譬如根据订单表格生成销售报告。
    • 数据库备份脚本制作器——该程序可以读取数据库的对象、关系、记录和步骤,生成一个sql文件,该文件可以导入另一个数据库或者作为备份文件。
    • 备忘录——该程序可以让用户设置一个日期和某个事件的时间、事件备注并将它们放到日历上。用户可以查看日历、搜索特定的事件。复杂一点的话,可以让用户设置重复发生的事件,譬如每天、每周、每月、每年等等。
    • 预算记录器——该程序可以记录家庭预算。用户可以添加支出、收入,计算一段时间内的收入和支出。复杂一点的话,让用户指定一个时间段,显示该时间段内的家庭收支情况。
    • 电话簿——记录各种联系人和他们的号码、邮箱、备注。复杂一点的话可以让用户连上网将电话簿发布到设置好的网站上。
    • 电视节目记录器——你是否有不想错过的电视节目?但没有录像机或者想之后能找到该电视节目然后录下来,那么可以做个程序寻找各种在线电视导航网站,记录下电视节目名称、播放时间、播放频道,存在数据库中。数据库或者网站到时就会发邮件提醒你,节目就快在某个频道开始了。
    • 旅行计划系统——该系统可以让用户管理旅行路线,记录下航班和酒店安排、感兴趣的地方、预算和时间表。
    • 实体关系图生成器——该程序可以让用户整合实体关系图,并将其保存起来,也可以用它来生成一些基础SQL语句。
    • 数据库翻译器(MySQL<->SQL Server)——该工具可以从数据库A读取数据,生成数据库B使用的SQL语句,将数据存入数据库B。比较常用的是SQL Server和Oracle使用的MySQL服务器。
    • BBS论坛——为你和小伙伴们做一个论坛,可以发帖、管理、分享想法和想法。

    图像和多媒体

    • 幻灯片——做一个以幻灯片形式显示各种图片的程序。为了增加难度可以做些额外的效果,譬如渐进检出、星型擦除、窗口渐隐。
    • 思维导图——允许用户记录下各种想法并且快速地进行头脑风暴将这些想法整合到一张思维导图中。越快越好,因此要让用户能迅速地写下想法,然后将其拖到可视的导图中去,将想法之间的关系展现出来。
    • 导入图片并存成灰度图——该工具将图片上的彩色除尽并保存。可以增加对比度调整、色化等额外功能以增加复杂度。
    • 在线流媒体视频——试着自己做一个在线流媒体视频播放器。
    • MP3播放器(以及其他格式的音乐播放器)——该小程序用来播放你最爱的音乐文件。复杂一点的话看看能否加个播放列表功能和均衡器。
    • 批量图片处理——该程序可以将一个文件夹内的图片进行统一的处理,譬如降低图片色调、转换格式或者修改文件属性。还可以尝试给图片增加标签。
    • CD烧录器——可以轻松烧录CD的工具。
    • YouTube下载器——可以从Youtube.com上下载视频到硬盘中,要支持包括FLV和AVI在内的文件格式。
    • 墙纸管理工具——做一个管理墙纸的程序,可以定时更换刷新墙纸,也可以针对分辨率进行缩放。
    • 截屏程序——做一个可以截屏的工具,复杂一点可以增加一个转发邮件的功能。
    • 图片浏览器——该程序可以查看电脑上各种格式的图片,譬如PNG、GIF、JPG、BMP、TIFF等等。
    • 交通信号灯——试着做一个交通信号灯并且把它放到可以互动的场景中。不要让汽车闯红灯或者撞到其它车。
    • MP3-WAV转换器——MP3格式本质上就是压缩版的WAV。试着将MP3转换成WAV格式以供可以处理WAV格式的程序使用。请记住1MB的MP3大约等于10MB的WAV。
    • 签名生成器——是否在网上见过有人的留言后面有条生成的签名?试着做个程序让用户可以指定背景、文字、颜色和对齐方式来定制一个签名档。
    • 屏保——电脑空闲时会运行的屏保程序。简单版的可以使用一些标准图片,复杂版的可以做出能在屏幕上转来转去的3D物体。
    • 水印——你是否想保护你图片的版权?在图片上加上标志或者文字,这样别人就不能轻易地从你网站上盗图了。做一个程序来给你的图片加上水印吧。
    • 海龟图——创建一个20*20的格子,用命令让一只海龟在格子上画线。可以前进、左转、右转,拿起或放下笔等等。复杂一点的话,允许程序从文件中读取命令列表。可以在网上了解到更多关于“海龟图”的信息。

    游戏

    • 战船——创建两块游戏面板,玩家各占一边,在上面放置一些战船,玩家看不到对方的面板。每艘船都占几个格子,玩家轮流攻击某个格子,如果格子上有船,那就命中目标,否则就是未命中。当一艘船所占的所有格子都被攻击命中了,那么船就被击沉。谁先将对方战船全部击沉就获胜。
    • 象棋跳棋——象棋或者跳棋游戏。可以试着做成可以联网玩,用图形用户界面来实现悔棋、保存走棋过程并且可以回放。
    • 刽子手——从文件中随机选择一个单词,让玩家猜单词中的字母。旁边是一幅隐藏的行绞刑的画,猜错一个单词,画就显示出一部分。画全部显示出来时还没能猜全的话玩家就输了。
    • 填字游戏——创建一个填字游戏,并为每个词提供一个提示信息,让玩家填上所有正确的单词。
    • 青蛙跳——让青蛙跳过河或者马路,过河的话要跳在顺流而下速度各异的木头或者睡莲叶子上,过马路的话要避开速度各异的车子。
    展开全文
  • 验证深度神经网络正确性是困难,我们研究一个关于前馈深度神经网络一般性可达性问题——给定一个输入集合,使用Lipschitz连续函数来计算输出,计算这个函数值上下界。因为神经网络和函数都是利普希茨连续...

    论文内容

    验证深度神经网络的正确性是困难的,我们研究一个关于前馈深度神经网络的一般性可达性问题——给定一个输入集合,使用Lipschitz连续的函数来计算输出,计算这个函数值的上下界。因为神经网络和函数都是利普希茨连续的,所以在这个上下界中的任意数值都是可达的。我们展示了如何通过实例化一个可达性问题来获取安全验证问题,输入范围分析问题和鲁棒性测量问题。我们提出了一种新的基于自适应嵌套优化的算法来解决可达性问题。这个技术已经在一系列深度神经网络上进行了实现和评估,证明了自己的效率,可伸缩性,并且相比现有的最先进的验证方法,能处理类别更广泛的的神经网络。

    1.introduction

    人们对于深度神经网络和使用了深度神经网络元素的系统还有很多忧虑,比如部署在对安全性要求很高的系统上。为了缓解忧虑,获得人们的信任,深度神经网络需要像飞机,汽车一样被检验。作者认为他研究的这个问题很有用,与许多关键问题有关。

    为了验证一个系统,验证方法不仅要提供一个结果,还要提供结果的一个保证,比如误差范围。现存的研究方法包括将问题简化到约束满足问题,这个问题可以被一些方法解决,或者是实行离散向量空间上的搜寻算法。即使它们能够得到一些保证,但有两个缺点。第一,他们的研究主题受到限制,更确切地说,它们只能在进行线性变换(例如卷积层和全连接层)和简单非线性变换(如RELU)的层上奏效,在一些其它重要的层上无法起效,例如sigmod,max pooling和softmax这些广泛运用于最新的神将网络上的层。第二,基于约束的方法的可伸缩性受到求解器的能力和网络大小的显著限制,并且它们只能与只有几百个隐神经元的网络一起工作。然而,最新的神经网络一般都有上百万甚至上亿的隐神经元。

    这篇论文提出了一个最新的方法,没有上述缺点,而且提供误差范围,这个方法的灵感来自于最近在全局优化方面的进展。对于在输入维数集合上定义的输入子空间,提出了一种自适应嵌套优化算法。我们的算法的性能不依赖于网络的大小。因此,它可以扩展到大型网络的工作。

    2.Related work

    安全检验
    对抗样本生成
    输出范围分析

    3.Lipschitz Continuity of DNNs

    作者首先介绍了Lioschitz连续的定义,然后说明已经有论文证明了deep neural networks with half-rectified layers (i.e., convolutional or fully connected layers with ReLU activation functions), max pooling
    and contrast-normalization layers are Lipschitz continuous
    他要证明the softmax layer, sigmoid and Hyperbolic tangent activation functions also satisfy Lipschitz continuity
    随后作者用数学方法进行了证明并计算出了各个类别的层的Lipschitz常数

    4.Problem Formulation

    作者给一些量进行了定义

    输出范围量化了深度神经网络对于一个输入的的特定输出(即对于某个标签J的分类概率),带有误差容忍度(此处误差不知是指输入还是输出,我觉得是输出)
    输入范围分析可以被泛化成分对数范围分析

    作者将展示如何将安全验证问题转化成可达性问题

    作者首先定义了什么是安全,然后提出了安全的对偶问题,只要找出一个反例即可

    定义:如果两个网络有相同的分类任务,但结构不一样,如有不同的层,参数,即被称为homogeneous

    提出了两个关于鲁棒性比较的定义,大概是指误差范围小的鲁棒性比较强

    最终,通过实例化一个函数o,我们可以量化一个网络的输出范围,度量一个网络是否安全,比较两个homogeneous网络的鲁棒性,或者对于一个给定网络,两个不同输入集的鲁棒性

    5.Confidence Reachability with Guarantees

    第三节已经说明一个深度神经网络是利普希茨连续的(与深度,种类,神经元数量无关),所以为了解决可达性问题,必须找出对于给定输入集的全局最大值和最小值

    使w=o.f作为级联函数,为了不失一般性,我们假设输入空间X0是盒约束,这显然是可行的,因为图像在进入神经网络之前通常被归一化为[0,1]矩阵。

    最小值的计算被简化为求解具有保证收敛到全局最小值的优化问题(最大化问题可以转化为最小化问题)。但是这个问题很难解决,因为这个函数是一个高度非凸函数,通过一般的基于梯度下降的优化方法很难达到全局最小。作者从别的论文里得到灵感,设计了另一个连续函数作为原函数的下界

    通过一系列措施,我们可以渐进的获取全局最小值。实际上,我们通过使用一个误差容忍度并迭代多次来控制最终结果.

    在下一节,我们创造一个下界,上界队列,并且证明他可以收敛。为了适用于高维度的深度神经网络,我们的方法是受谋篇论文中自适应嵌套优化思想的启发,在具体算法和收敛性证明上存在显著差异。

    5.1 One-dimensional Case

    设定了一些量,写出了迭代计算的过程,画了个图

    5.1.1 Convergence Analysis

    提出了收敛的两个条件并进行证明

    首先证明下界队列Li是严格单调的,同时也可证明上界队列也是严格单调的

    5.1.2 Dynamically Improving the Lipschitz Constant

    一个接近于kbest的利普希茨常数可以使得算法的收敛过程更加迅速,设计了一个方法可以根据前一个迭代来动态更新利普希茨常数

    5.2 Multi-dimensional Case

    基本思想是把多维优化问题分解为一个内嵌一维优化问题队列,然后将这些一维最小化子问题的最小值反向传播到原始维数,得到最终的全局最小值。

    5.2.1 Convergence Analysis

    使用数学归纳法,从一维推至高维

    证明说明,在一维情况下,嵌套格式的整体误差界仅线性地增加。此外,可以应用自适应逼近来优化其性能,而不影响收敛。关键观察是放松嵌套方案固有的严格从属关系,同时考虑多维优化过程中出现的所有单变量子问题。对于所有产生的积极子问题应用数值测量。然后对多维优化问题进行迭代,选择具有最大测量值的子问题,并在该子问题中进行新的尝试。该措施被定义为由一维优化算法生成的最大间隔特性。

    6 Proof of NP-completeness

    NP完全性:计算复杂性理论中的一个重要概念,它表征某些问题的固有复杂度。一旦确定一类问题具有NP完全性时,就可知道这类问题实际上是具有相当复杂程度的困难问题。

    6.1 Upper Bound

    首先,一维优化实例与误差边界是线性相关的。通过一系列证明,说明每一次迭代的改进相对于误差界是线性的,这意味着优化过程将相对于区域[a,b]的大小在线性时间内收敛。

    对于多维情况,我们注意到,在方程(23)中,为了达到全局最优,不需要改变所有维数Xi,并且维数之间的排序是重要的。因此,我们可以有一个非确定性算法,猜测尺寸的子集连同它们的排序。这些是需要改变从原始输入到全局最优的维度。这个猜测可以在多项式时间内完成。然后,我们可以将一维优化算法从最后一个维度向后应用到第一维。由于一维情形的多项式时间收敛,这个过程可以在多项式时间内完成。因此,整个过程可以用非确定性算法在多项式时间内完成。

    6.2 Lower Bound

    3-SAT问题

    6.2.1 Construction of DNN

    构造一个深度神经网络,有四层,一个输入层,两个隐藏层,一个输出层,有n个输入神经元,m个输出神经元

    6.2.2 Statistical Evaluation Function o

    6.2.3 Reduction

    7 Experiments

    7.1 Comparison with State-of-the-art Methods

    与现存方法的比较,与Reluplex和SHERLOCK 比较

    7.2 Safety and Robustness Verification by Reachability Analysis

    7.3 A Comprehensive Comparison with the State-of-the-arts

    综合比较

    8 Conclusion

    我们提出、设计和实现了一个深层神经网络的可达性分析工具,它具有可证明的保证,可以应用于具有深层和非线性激活函数的神经网络。实验证明,该工具可用于验证深层神经网络的安全性并定量比较其鲁棒性。我们设想,这项工作标志着迈向一个实际的,有保障的DNS安全验证的重要一步。未来的工作包括在GPU中并行化来提高在ImageNet上训练的大规模模型上的可扩展性,并推广到RNs和深度强化学习等其他深度学习模型。

    论文总结

    论文的目的是提出一个方法来验证深度神经网络的安全性,研究了一个一般性的可达性问题——给定一个输入集合,使用Lipschitz连续的函数来计算输出,计算这个函数值的上下界。因为神经网络和函数都是利普希茨连续的,所以在这个上下界中的任意数值都是可达的。

    作者的基本思路是首先介绍了这个选题的重要性,现存方法的优点和缺点,自己提出的这个新方法的优点,用途和重要性。作者首先介绍了Lipschitz连续的定义,然后说明已经有论文证明了一些常用层的函数是Lipschitz连续的,接着用数学方法证明了另外一些常用函数也是Lipschitz连续的。随后,作者提出了神经网络安全性的定义,并提出了安全性的对偶问题,将之转化成可达性问题,(这里其实我还可能理解的不好,还是不怎么清楚他是怎么将安全性问题转化为可达性问题的)由此,通过实例化一个函数o,作者可以量化一个网络的输出范围,度量一个网络是否安全,比较两个homogeneous网络的鲁棒性,或者对于一个给定网络,两个不同输入集的鲁棒性。之后,作者通过数学方法证明可以得到全局最小值,分别对于一维和高维的例子进行了证明,说明了如何求得全局最小值和收敛性的证明。接着,作者证明了这个问题可以用非确定性算法在多项式时间内完成,构造了一个神经网络的例子来佐证。最后,作者将自己的方法与现存的一些方法通过实验进行了全方位的比较,并通过数据和作图来直观的展现差别。

    论文的结论是作者提出、设计和实现了一个深层神经网络的可达性分析工具,可以应用于具有深层和非线性激活函数的神经网络。实验证明,该工具可用于验证深层神经网络的安全性并定量比较其鲁棒性。作者希望将之推广到其他深度学习模型上。

    展开全文
  • Tiny Trainable Instruments是使用微型机器学习并且基于微控制器媒体艺术工具的集合。 Tiny Trainable Instruments是AarónMontoya 硕士学位论文,AarónMontoya 是研究生,也是研究团队和研究助理,在2019-...
  • 对模糊环境下多准则决策问题,指出了采用Vague集进行多准则模糊决策现有记分函数不足, 根据Vague集隶属度、非隶属度之间大小关系,对由Vague值组成的集合进行...
  • 这项研究面临挑战是缺乏互操作性,因为数据,GIS形状文件集合,遥感图像以及聚合和内插时空信息都存储在整体硬件组件中。 对于建模过程,有必要创建一个公共输入文件。 通过将数据源合并在一起,创建了一个结构...
  • 共19篇论文 集合 9、新形势下检察机关服务企业职能 89 10、运用工商行政指导防范中企业发展法律风险 102 11、关于公司董事勤勉义务研究与完善建议 111 12、浙江省“联保贷款”担保制度评析及对策建议 122 ...
  • 线程和进程线程和进程定义:一、进程是具有一定独立功能程序关于某个数据集合一次运行活动,是系统进行资源分配和调度一个独立单位。二、线程是进程一个实体,是CPU调度和分派基本单位,他是比进程更...

    线程和进程

    线程和进程定义:一、进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。

    二、线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程;

    进程和线程的关系:

    (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

    (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。

    (3)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

    (4)处理机分给线程,即真正在处理机上运行的是线程。

    (5)线程是指进程内的一个执行单元,也是进程内的可调度实体。

    线程与进程的区别:

    (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。

    (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。

    (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。

    (4)系统开销:在创建或撤销进程的时候,由于系统都要为之分配和回收资源,导致系统的明显大于创建或撤销线程时的开销。但进程有独立的地址空间,进程崩溃后,在保护模式下不会对其他的进程产生影响,而线程只是一个进程中的不同的执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但是在进程切换时,耗费的资源较大,效率要差些。

    线程的划分尺度小于进程,使得多线程程序的并发性高。

    另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大的提高了程序运行效率。

    线程在执行过程中,每个独立的线程有一个程序运行的入口,顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,有应用程序提供多个线程执行控制。

    从逻辑角度看,多线程的意义子啊与一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

    Java中的线程的生命周期大体可分为5种状态。

    1.新建(NEW):新创建了一个线程对象。

    2.可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。

    3.运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。

    4.阻塞(BLOCKED):阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cpu timeslice 转到运行(running)状态。阻塞的情况分三种:等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。

    同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。

    其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。

    5.死亡(DEAD):线程run()、main() 方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生。

    af43090167df

    线程状态图

    Note:

    1. sleep() 是Thread的静态方法,最好不要用Thread的实例对象调用它,因为它睡眠的始终是当前正在运行的线程,而不是调用它的线程对象,它只对正在运行状态的线程对象有效。

    2. Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。但是不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。使用sleep方法之后,线程是进入阻塞状态的,只有当睡眠的时间结束,才会重新进入到就绪状态,而就绪状态进入到运行状态,是由系统控制的,我们不可能精准的去干涉它,所以如果调用Thread.sleep(1000)使得线程睡眠1秒,可能结果会大于1秒。

    3. yield()方法

    yield()方法和sleep()方法有点相似,也是Thread类提供的一个静态的方法,它也可以让当前正在执行的线程暂停,让出cpu资源给其他的线程。但是和sleep()方法不同的是,它不会进入到阻塞状态,而是进入到就绪状态。

    4. join()方法,线程合并

    线程的合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时,Thread类提供了join方法来完成这个功能,注意,它不是静态方法。从上面的方法的列表可以看到,它有3个重载的方法:

    - void join()

    当前线程等待加入该线程后面,等待该线程终止。即,等待该线程执行完毕后再执行当前线程。

    - void join(long millis)

    当前线程等待该线程终止的时间最长为 millis 毫秒。 如果在millis时间内,该线程没有执行完,那么当前线程进入就绪状态,重新等待cpu调度

    - void join(long millis,int nanos)

    等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。如果在millis时间内,该线程没有执行完,那么当前线程进入就绪状态,重新等待cpu调度

    5.守护线程

    守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程。

    setDaemon方法的详细说明:

    public final void setDaemon(boolean on)将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。该方法必须在启动线程前调用。

    实际上:JRE判断程序是否执行结束的标准是所有的前台执线程行完毕了,而不管后台线程的状态,因此,在使用后台线程(守护线程)时候一定要注意这个问题。

    守护线的好处就是你不需要关心它的结束问题。例如你在你的应用程序运行的时候希望播放背景音乐,如果将这个播放背景音乐的线程设定为非守护线程,那么在用户请求退出的时候,

    不仅要退出主线程,还要通知播放背景音乐的线程退出;如果设定为守护线程则不需要了。

    6.如何结束一个线程

    Thread.stop()、Thread.suspend、Thread.resume、Runtime.runFinalizersOnExit这些终止线程运行的方法已经被废弃了,使用它们是极端不安全的!

    想要安全有效的结束一个线程,只要保证在一定的情况下,run方法能够执行完毕即可。而不是while(true)的无线循环。

    有些时候线程的run()方法不能正常的执行完毕(可能在运行时转成了阻塞),这种情况下可以借助Thread对象的interrupt()方法将中断状态设置为true来结束一个线程。

    当一个线程处于sleep、wait、join这三种状态之一的时候,如果此时他的中断状态为true,那么它就会抛出一个InterruptedException的异常,并将中断状态重新设置为false。

    展开全文
  • 杨 弋 -《从“H小屋”解法谈算法优化》 朱晨光 -《浅析倍增思想在信息学竞赛中应用》 李羽修 -《Hash函数设计优化》 王 俊 -《浅析二分图匹配在信息学竞赛中应用》 唐文斌 -《正难则反——浅谈...
  • Abstract 本文提出了一个新的方法,将目标检测看作一个直接的集合预测问题。...给定一个固定小集合的目标,DETR 会推理出这些目标与全局图像环境的关系,并行地直接输出最终的预测集合。和其它检测器相比,该模型在概念

    Abstract

    本文提出了一个新的方法,将目标检测看作一个直接的集合预测问题。该方法让检测变得更简洁,去除了人为设计的后处理步骤如 NMS 或 anchor 生成,显式地编码了关于任务的先验知识。该框架的主要结构叫做 DEtection TRansformer 或 DETR,基于集合的全局损失,通过二分匹配和一个 transformer 编码器-解码器架构来做到唯一的预测。给定一个固定小集合的目标,DETR 会推理出这些目标与全局图像环境的关系,并行地直接输出最终的预测集合。和其它检测器相比,该模型在概念上很简单,无需一个特别定制的库。DETR 在MS COCO 目标检测数据集上与 Faster R-CNN 做了比较,展现了优异的准确性和速度性能。而且,DETR 可以很容易地泛化到其它任务上,如全景分割。作者证明它能明显地优于其它基线模型。训练代码和预训练模型位于:https://github.com/facebookresearch/detr

    1. Introduction

    目标检测的目的是为感兴趣的目标预测一组边框及其类别标签。现有的检测器都是以一种间接的方式来解决该预测问题,在一个由候选框、anchors或窗口中心点组成的大集合上定义替代的回归问题和分类问题。其表现很大程度上受到后处理步骤影响,通过 anchor 集合的设计和目标框如何赋给 anchor 的启发式规则来消除相邻的重复边框。为了简化这些流程,作者提出了一个直接的集合预测方法,绕过这些代替任务。该端到端的思想极大地推动了一些复杂结构的预测任务的进步,如机器翻译、语音识别,但还没涉及到目标检测:以前的尝试[43,16,4,39] 要么需要其它形式的先验知识,要么在具有挑战性的数据集上表现不佳。

    在这里插入图片描述
    图1. DETR 直接预测(并行地)检测结果的最终集合,它将常见的 CNN 和 transformer 架构结合起来。训练时,二分匹配会给每个 ground-truth 边框分配一个预测框。没有配对的预测框会得到一个“no object”()(\varnothing)的类别预测。

    作者简化了训练流程,将目标检测任务看作为一个直接的集合预测问题。基于序列预测架构 transformer,采用了一个编码器-解码器架构。Transformer 的自注意力机制显式地对序列元素间的相互作用进行建模,特别适合集合预测中的一些约束条件,如去除重复预测框。

    DETR(图1)一次性地预测所有的目标,通过一个集合损失函数来端到端地训练,该损失函数对预测框和 ground-truth 边框做二分匹配。DETR 舍弃了编码先验知识的人为组件(如空间 anchors 或 NMS),简化了检测流程。与大多数现有的目标检测方法不同,DETR 无需任何特殊实现的层,因此可以很容易复现,只要该框架包含了标准的 CNN 类和 transformer 类。

    与之前大多数的直接进行集合预测的方法相比,DETR 的主要特点就是将二分匹配损失和(非自回归)并行解码的 Transformer 结合起来用。而以前的方法则关注在 RNN 自回归解码上。本文的匹配损失函数给 ground-truth 目标框只分配一个预测框,该函数对预测目标的排列是不变的,所以我们可以并行地忽略掉它们。

    作者在 COCO 数据集上评价了 DETR,与 Faster R-CNN 基线模型做比较。Faster R-CNN 迭代设计了多次,性能得到大幅度提升。本文实验表明,DETR 可以取得相同的性能。DETR 对大目标而言,效果要更优,这可能是因为 transformer 中的 non-local 计算造成的。但是,对小目标而言,其表现要差一些。作者期待在将来,可以通过类似于 Faster RCNN 中的 FPN 设计来改善这个问题。

    DETR 的训练设置与标准的目标检测器在多个方面有不同。该模型需要更长的训练时间,需要 transformer 中的解码损失作为辅助。作者仔细地研究了到底哪些组件对性能最重要。

    DETR 的设计思想可以扩展到其它任务上去。在实验中,作者证明在全景分割任务上,一个简单的、基于 DETR 预训练的分割 head 就可以超过基线模型。

    2. Related Work

    本文基于多个领域而构建:用于集合预测的二分匹配损失、基于 transformer 的编码器-解码器架构、并行解码,和目标检测方法。

    2.1 集合预测

    并没有一个经典的深度学习模型来直接预测集合。基本的集合预测任务是多标签分类,其基线方法(one-vs-rest)无法应用到检测问题上,因为元素之间有着潜在的结构(即近似边框)。第一个难点就是避免近似重复。大多数检测器都使用 NMS 来解决这个问题,但是直接的集合预测就不需要后处理了。它们需要一个全局推理机制,对所有预测元素之间的关系建模,避免冗余性。对于大小固定的集合预测,密集的全连接网络可以做到,但是成本太高。一个常用的方法是使用自回归序列模型,如循环神经网络。在所有情形中,损失函数应该对所有预测的排列保持不变。常用的办法是基于匈牙利算法来设计损失函数,找到 ground-truth 和预测框之间的二分匹配。这就有了排列-不变性,确保了每个目标元素只有一个配对。作者遵循了二分匹配损失方法。但是与之前的方法不同,作者没有用自回归模型,而是用 transformer 来并行地解码。

    2.2 Transformers 和并行解码

    Vaswani 等人提出了 Transformer,作为一个新的基于注意力的构建模块,用于机器翻译。注意力机制是能从整个输入序列中聚合信息的神经网络层。Transformers 引入了自注意力层,与 Non-Local 神经网络类似,会扫描一个序列的所有元素,通过融合整个序列的信息来更新它。基于注意力方法的一个主要优势就是它们的全局计算和完美的记忆功能,使之比 RNN 更适合用在长序列上。Transformers 如今在许多自然语言处理、语音处理和计算机视觉问题上替代了 RNN。

    Transformers 首先在自回归模型中被使用,伴随着早期的 sequence-to-sequence 模型,挨个地生成输出 tokens。但是推理成本过高(与输出长度成正比,很难批量化),就有了并行序列生成,比如在语音领域、机器翻译领域、单词表示学习、语音识别等。作者也将 transformers 和并行解码结合起来,从而实现计算成本和集合预测所需全局计算的平衡。

    2.3 目标检测

    目前大多数的目标检测算法都跟初始盲猜有关,再做预测。双阶段检测器会根据区域候选框来做边框预测,而单阶段方法则根据 anchors 来做预测。[52]前不久证明,这些系统的最终表现严重依赖于初始盲猜的方式。本文方法可以去除人为后处理步骤,将检测过程变得更简洁,根据输入图像而非 anchors,直接预测检测边框的集合。

    基于集合的损失函数。有一些检测器[9,25,35]使用二分匹配损失函数。但是,早期的深度学习模型是通过卷积层或全连接层来对不同预测之间的关系建模,需要一个人为设计的 NMS 来提升性能。前不久刚出现的检测器[37,23,53]则在 ground truth 和预测边框之间使用一个非唯一的分配规则及 NMS。

    可学习的NMS方法和关系网络显式地通过注意力机制,对不同预测边框之间的关系建模。它们不需要任何后处理步骤,使用直接的集合损失。但是这些方法都使用了额外的前后关系特征,如候选框坐标,来对检测结果之间的关系建模,而本文则试图降低模型中先验知识的编码。

    循环检测器。与本文最接近的方法是端到端的集合预测,用于目标检测和实例分割。与本文类似,它们也用了二分匹配损失和基于CNN激活的编码器-解码器架构,直接输出边框的集合。但是这些方法只在小规模数据集上验证过,无法达到 SOTA 基线模型的性能。而且它们都基于自回归模型(RNNs),没有使用最近并行解码的 transformers。

    3. DETR 模型

    如果想在检测任务中直接进行集合预测,两个组成最为关键:(1) 集合预测损失,迫使预测结果和 ground-truth 边框之间只有唯一的配对;(2) 能预测一组目标并对其相互关系建模的网络架构。在图2中,作者介绍了该架构。

    在这里插入图片描述
    图2. DETR 使用了一个传统的 CNN 主干网络来学习输入图像的 2D 特征。然后模型会将之 flatten,并用位置编码(positional encoding)来填充,然后传递入一个 transformer 编码器。然后 transformer 解码器会将一个固定个数、不多的位置编码作为输入,作者称之为目标查询,然后输入编码器的输出。最后解码器的每个 embedding 输出会输入进一个共享的前馈网络(FFN),预测检测结果(类别和边框坐标)或 “no object” 类别。

    3.1 目标检测集合预测损失

    DETR 在解码器的单次传播中,会推理出一个固定大小的集合,共包含NN个预测,NN会远远多于图像中目标的常见个数。训练过程中的一个主要难点就是,关于 ground-truth 对预测目标(类别、位置、大小)打分。该损失能在预测边框和 ground-truth 边框之间产生最佳的二分匹配,然后优化边框的损失。

    我们用yy来表示目标的 ground truth 集合,y^={y^i}i=1N\hat y=\{\hat y_i\}_{i=1}^N 表示 NN 个预测的集合。假设 NN 大于图像中目标的个数,我们考虑 yy 也是一个大小为NN的集合,包含\varnothing(no object)。为了在这两个集合之间找到二分配对,我们用最小的代价来搜索 NN 个元素的排列 σGN\sigma \in \mathfrak{G}_N

    σ^=arg minσGNiNLmatch(yi,y^σ(i))\hat \sigma = \argmin_{\sigma\in \mathfrak{G}_N} \sum_i^N \mathcal{L}_{match}(y_i, \hat y_{\sigma(i)})

    其中Lmatch(yi,y^σ(i))\mathcal{L}_{match}(y_i, \hat y_{\sigma(i)})是 ground-truth yiy_i和索引为σ(i)\sigma(i)的预测边框之间的配对代价。通过匈牙利算法可高效率地计算出该最佳配对。

    配对代价既考虑了类别预测,也考虑了预测框和 ground-truth 边框的相似度。Ground-truth 集合中的每个元素ii都可看作为 yi=(ci,bi)y_i = (c_i, b_i),其中cic_i是目标类别标签(可能是\varnothing),bi[0,1]4b_i\in[0,1]^4是定义 ground-truth 边框中心坐标及高度、宽度的向量。对于索引是σ(i)\sigma(i)的边框预测,作者定义了类别cic_i的概率为p^σ(i)(ci)\hat p_{\sigma(i)}(c_i),预测边框为b^σ(i)\hat b_{\sigma(i)}。有了这些记号,作者定义Lmatch(yi,y^σ(i))\mathcal{L}_{match}(y_i, \hat y_{\sigma(i)})1{ci}p^σ(i)(ci)+1{ci}Lbox(bi,b^σ(i))-\mathbb{1}_{\{c_i \neq \varnothing\}} \hat p_{\sigma(i)}(c_i) + \mathbb{1}_{\{c_i \neq \varnothing\}} \mathcal{L}_{box}(b_i, \hat b_{\sigma(i)})

    在现有的检测器中,搜索配对扮演着与启发式分配规则(heuristic assignment rules)相同的角色,为 ground-truth 目标分配候选框或 anchors。主要的不同是,我们要找到直接集合预测中一一对应的配对,没有重复项。

    第二步就是计算损失函数,这里用的是匈牙利损失来计算上一步产生的所有配对。作者定义的损失函数与常用的目标检测器差不多,即类别预测的负 log 概率和边框损失的线性结合:

    LHungarian(y,y^)=i=1N[logp^σ^(i)(ci)+1{ci}Lbox(bi,b^σ^(i))]\mathcal{L}_{Hungarian}(y, \hat y) = \sum_{i=1}^N [-\log \hat p_{\hat \sigma(i)}(c_i) + \mathbb{1}_{\{c_i \neq \varnothing\}} \mathcal{L}_{box}(b_i, \hat b_{\hat \sigma}(i))]

    其中σ\sigma是第一步计算出的最佳配对。实际上出于类别均衡考量,当ci=c_i = \varnothing时,我们将 log-概率那一项的权重除以10。这和 Faster R-CNN 的训练过程相似,通过亚采样来平衡正负样本。注意,目标和\varnothing的配对代价并不取决于预测结果,也就是说该代价是一个常数。在配对代价上,作者使用的是概率 p^σ^(i)(ci)\hat p_{\hat \sigma(i)}(c_i),而非 log-概率。这就使得类别预测项与 Lbox(,)\mathcal{L}_{box}(\cdot, \cdot)等量,我们可以观测到更佳的实验表现。

    边框损失。配对代价的第二部分即匈牙利损失,Lbox(,)\mathcal{L}_{box}(\cdot, \cdot),对边框打分。许多检测器做边框预测时,一开始几乎是盲猜的,而本文方法直接做边框预测。尽管该方法简化了实现过程,它也带来了一个关于相对缩放损失的问题。最常用的1\ell_1损失对于小边框和大边框有着不同的缩放比例,如果它们的相对损失很接近。为了缓解这个问题,作者使用了一个 1\ell_1 损失和 generalized IoU 损失的线性结合,Liou(,)\mathcal{L}_{iou}(\cdot,\cdot)是尺度不变的。总之,该边框损失Lbox(bi,b^σ(i))\mathcal{L}_{box}(b_i, \hat b_{\sigma(i)}) 定义为 λiouLiou(bi,b^σ(i))+λL1bib^σ(i)1\lambda_{iou} \mathcal{L}_{iou}(b_i, \hat b_{\sigma(i)}) + \lambda_{L1} ||b_i - \hat b_{\sigma(i)}||_1,其中λiou,λL1R\lambda_{iou}, \lambda_{L1}\in \mathbb{R} 是超参数。这两个损失都用该batch内目标的个数做了归一化。

    3.2 DETR 架构

    DETR 的整体架构非常简单,如图2所示。它包含3个主要部分,下面会介绍:一个 CNN 主干网络来提取紧致的特征表示,一个编码器-解码器 transformer,一个简单的前馈网络(FFN)做最终的检测预测。

    与现有的检测器不同,DETR 可以用任何一个深度学习框架实现,只要改框架能提供一个通用的 CNN 主干网络和 transformer 架构,实现起来仅需数百行代码。用 PyTorch 实现 DETR 的推理代码甚至少于50行。作者希望,该方法的简洁性会引起更多的研究人员的关注。

    主干网络。输入图像 ximgR3×H0×W0x_{img}\in \mathbb{R}^{3\times H_0\times W_0}(3个颜色通道,输入图像是按batch输入的,所以根据该batch内的最大的图像大小,对其它图片进行0-填充,保证一个batch内图像大小一样),传统 CNN 主干网络会生成一个较低分辨率的激活图fRC×H×Wf\in \mathbb{R}^{C\times H\times W}。本文用的值是C=2048,H=H032,W=W032C=2048,H=\frac{H_0}{32},W=\frac{W_0}{32}

    Transformer encoder。首先,一个1×11\times 1卷积会降低高层级激活图ff的通道维度,从CC降低到一个较小的维度dd,创建出一个新的特征图z0Rd×H×Wz_0 \in \mathbb{R}^{d\times H\times W}。该编码器的输入是一个序列,因此作者将z0z_0的空间维度坍缩为一维,形成一个d×HWd\times HW的特征图。每个编码器层都有一个标准的架构,由一个 multi-head 自注意力模块和前馈网络(FFN)构成。由于 transformer 架构是排列-不变的,我们用固定的位置编码来填充它,加到每一个注意力层的输入后面。在补充材料中作者详细介绍了该架构的设计。

    Transformer decoder。解码器遵循了 transformer 的标准设计,使用 multi-head 自注意力机制和编码器-解码器注意力机制,将 NN 个大小是 dd 的 embeddings 进行变换。和原来的 transformer 不同,本文方法在每个解码层,并行地解码 NN 个目标,而 Vaswani 等则使用了一个自回归模型来一次一个元素地预测序列的输出。在补充材料,作者提供了该内容的介绍。由于解码器也是排列-不变的,要想输出不同的结果,NN个输入 embeddings 必须是不一样的。这些输入 embeddings 是学到的位置编码,作者称之为目标查询,与编码器类似,作者将它们加到每个注意力层的输入后面。NN个目标查询就被解码器转化为一个输出 embedding。然后通过一个前馈网络,它们独立地被解码为边框坐标和类别标签,这样就有了NN个最终预测结果。对这些 embeddings 使用自注意力和编码器-解码器注意力,模型就可通过它们彼此间的关系,全局地推理出所有目标,将整张图像作为前后信息使用。

    预测前馈网络(FFNs)。通过一个三层感知机(带有ReLU激活函数、隐藏维度是dd,并带有线性映射层),最终的预测结果就可计算出来。FFN 预测边框归一化后的中心坐标、高度和宽度,线性层会通过 softmax 函数预测类别标签。由于我们预测一个固定大小NN的边框集合,NN通常要大于图像中的实际目标个数,用一个额外的类别标签\varnothing来表示"no object"类别。该类的角色和标准的目标检测中背景类相似。

    辅助解码损失。训练时在解码器中使用辅助损失是有帮助的,尤其能帮助模型输出每类正确个数的目标。在每个解码层后,作者增加了预测 FFN 和匈牙利损失函数。所有的预测 FFN 共享参数。作者使用了一个额外的共享norm-层,从不同的解码层对预测 FFN 的输入做归一化。

    4. 实验

    Pls read paper for more details.

    A.3 细节架构

    在这里插入图片描述
    图10. DETR 中 transformer 的结构。

    DETR 用到的 transformer 的细节信息如图10所示,每个注意力层都会传入位置编码。CNN 主干网络输出的图像特征会贯穿 transformer 编码器,在每个 multi-head 自注意力层位置上,加进 queries 和 keys 的空间位置编码也会贯穿 transformer 编码器。然后解码器会接收 queries(初始设为0),输出位置编码(目标queries)和编码器记忆,通过多个 multi-head 自注意力和解码器-编码器注意力机制输出最终预测类别标签和边框。第一个解码层中的自注意力层可以忽略。

    展开全文
  • # 国家集训队论文列表(1999-2019) ... - _国家集训队论文列表(1999-2019)_ ...杨 弋 -《从“H小屋”解法谈算法优化》 朱晨光 -《浅析倍增思想在信息学竞赛中应用》 李羽修 -《Hash函数设计优化》 ...
  • 一种用于处理不同类型概念漂移混合算法算法简介数据流与概念漂移概念漂移几种不同类型当前主流几种处理概念漂移方法与不足Algorithm AUE2结 算法简介 随着在传感器网络,...关于这个算法的论文:Reac...
  • 论文题目:用全卷积网络实现超...接下来看百度百科关于超像素定义:在计算机视觉领域,图像分割(Segmentation)指是将数字图像细分为多个图像子区域(像素的集合)(也被称作超像素)过程。超像素由一系列位
  • 谢谢掘金平台和运营优弧对小册校对审核到上架帮助,谢谢粉丝伙伴对傅哥技术内容认可和期待,也谢谢家人在过年和周末期间给我提供时间只干饭不洗完哈哈哈哈,专心码文章。 好嘛,就是在大家帮助、支持、...
  • 关于Spectrum Repacking的论文,该项目是一个优化程序,可以: 给定一个图实例和一个近似算法作为标签来解决分类问题 应用确定算法并输出包含Universe中所有元素最小尺寸集 代码 SetCover
  • 对于神经网络监督学习有多种不同方法。之前一直总结整理多层感知器反向传播算法,可以看做是递归技术应用,这种技术在统计学...关于这一转换数学证明可以追溯到Cover早期论文。通过最小二乘估计来借给定...
  • 近期阅读了关于大尺度优化问题论文:《A Level-Based Learning Swarm Optimizer for Large-Scale Optimization》,是对PSO做出改进,算法容易实现,这里做出简单总结。 一、改进策略 (一)动态层数选择 将...
  • 说明:计算机专业的我在进行项目实训时,除了编写项目代码外,还要有相关文档的撰写,尤其是最后的毕业设计论文,更是集合了软件工程和UML所学的知识。以下就是在我参与撰写文档,使用word时遇到的小问题,做的一点...
  • 尽管研究和教学目的都很好,但是这类系统很少能够通过对正式操作系统的小部分实现来体现操作系统的实际功能。对于操作系统的一些特殊问题,这种折衷系统所能够表现的就更是少得可怜了。在以实际使用为目标的操作系统...
  • Histogram intersection(直方图交叉核)

    千次阅读 2016-01-07 21:14:01
    一开始以为是求两者之间,后来发现是关于直方图方面知识。于是就上网查了下。 在LBP人脸识别里用到了这个方法,是用来对特征图进行相似度匹,原理如下: 假设图片特征可以构成直方图,根据直方图...
  • 暴走时评:斯坦福大学应用加密学小组最近发票了一篇有关于保密交易有效范围证明研究论文,文中提出了一种可以大幅降低区块链存储数据大小(约为十倍)方法——Bulletproofs。ACG团队表示,如果使用集合来验证...
  • 怎么看待大数据?

    千次阅读 2018-08-14 16:42:47
    关于大数据,目前业界并没有...另一个观点,则是来自麦肯锡全球数据分析研究所一篇论文,其中谈到:大数据是指大小超出了典型数据库软件工具收集、存储、管理和分析能力数据集,讲是数据的集合。 那么,该如...
  • 3.1.1 集合的Jaccard相似度 3.1.2 文档的相似度 3.1.3 协同过滤--一个集合相似问题 3.1.4 习题 3.2 文档的Shingling 3.2.1 k-Shingle 3.2.2 shingle大小的选择 3.2.3 对shingle进行哈希 3.2.4 基于词的...
  • 3.1.1 集合的Jaccard相似度 3.1.2 文档的相似度 3.1.3 协同过滤--一个集合相似问题 3.1.4 习题 3.2 文档的Shingling 3.2.1 k-Shingle 3.2.2 shingle大小的选择 3.2.3 对shingle进行哈希 3.2.4 基于词的...
  • 几何原本是一本关于几何里程碑式著作,它以十分严谨标准写成;每个命题 都是通过一个 用三段论链接形式论证 来合理化(虽然它们并不总是严格地遵守亚里士多德模式)。亚里士多德三段论逻辑 加上公理化方法...
  • 实用Python开源模块集合; 简单易懂、示例丰富数据分析教程; 掌握数据可视化、机器学习等高端主题; 新手变身数据分析专家上好读本; 媒体推荐 本书从一系列开源Python模块讲起,介绍了很多实用...
  • 遗传算法 求解 TSP

    热门讨论 2011-05-27 15:32:45
    目前,关于遗传算法研究热潮仍在持续,越来越多从事不同领域研究人员已经或正在置身于有关遗传算法研究或应用之中。 遗传算法(Genetic Algorithm, GA)是近三十年来迅速发展起来一种全新随机搜索与优化...
  • 1.4 关于面向对象方法说明 1.5 C#设计模式 1.6 本书内容组织 第2章 C#语法 2.1 数据类型 2.2 数值与串之间转换 2.3 声明多个变量 2.4 数值常量 2.5 字符常量 2.6 变量 2.7 用于初始化连等号 2.8 一个简单...

空空如也

空空如也

1 2 3
收藏数 41
精华内容 16
关键字:

关于集合的小论文