CatOneTwo

CatOneTwo 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑

GitHub:CatOneTwo
知乎:CatOneTwo

个人动态

CatOneTwo 发布了文章 · 5月13日

GitHub 小白入门(三)Git 的安装及使用

之前我们了解到 Git 是一个版本控制工具,GitHub 基于 git 完成了版本控制功能。因此,我们要想进行代码托管,或者进行团队协作,这都少不了一个工具,那就是:Git🔓

本篇文章我们将在本地学习 Git 的安装及基础使用,让我们开始吧🎈

1. Git 安装

导读:我的操作系统是 Windows 10,Git 安装比较容易,按默认选项一直 next 即可。

首先,去官网 https://git-scm.com/downloads 下载你的操作系统对应的版本。

点击下载好的安装文件,就是下面这个窗口,然后点击 Next

默认安装在 C 盘的 Program Files 下,你可以选择更改安装路径,比如 D 盘,然后点击 Next

默认安装的组件如下,不用管(如果想创建桌面快捷方式,可以选第一个),直接点击 Next

在开始菜单创建一个 Git 命名的文件夹,默认即可,点击 Next

选择 Git 使用的默认编辑器,有 vim 、notepad 等选项,可以选其他的,我选择了默认的 Vim,点击 Next:

下一步是修改系统的环境变量,三个选项依次为:

  • 仅使用 Git Bash 进行操作;
  • 在选择使用 Git Bash 进行操作的同时,也可以使用 Windows 命令行操作,建议选择此项;
  • 在选择使用 Git 的同时,也把 Unix 工具加入到了我们的配置之中,而且此操作会覆盖 Windows 的一些工具,强烈不建议选择此项。

我们选推荐的第二项就好,点击 Next·:

选择 HTTPS 传输后台,默认即可,点击 Next

配置行结束标志,选择默认即可,点击 Next

配置 Git Bash 的终端模拟器,默认即可,点击 Next

配置补充功能,还是默认即可,点击 Next

下面这个配置实验选项,因为是新功能,它也说不一定稳定,我就先不选了,点击 Install

开始安装啦:

安装成功,完成😊!

我们测试一下,在开始菜单找到这个图标,点击 Git Bash:

输入

git --version

返回版本号说明安装成功!

2. Git 基础

导读:安装好 Git,我们就要学习它的语法了。其实关于 Git 有很多图形化的软件可以操作,但是建议大家从命令行学起,因为这样才能理解每一步操作的意义,之后再用图形软件完全没问题。不要抵触,基本的命令也不多,用几次就记住啦👍

打开 GitBash,我们先输入 git 进行测试:

所有的操作命令都是以 git 开头的,可以看到上面列举了一些常用的命令👆,比如 clone,init,add 等。

为了学习这些命令,我们首先要新建一个文件夹,我选择在 E 盘下建立一个叫 Git Demo 的文件夹。

注意:在进行任何 Git 操作之前,都要先切换到 Git 仓库目录,也就是先要先切换到项目的文件夹目录下。

并在文件夹夹里创建一个文件如 test.txt。

然后我们进入这个文件夹,把它当作我们的 Git 仓库,鼠标右击选择 Git Bash Here

打开的 GitBash 可以看到自动定位到我们的仓库位置,如果在其他位置打开,还得再次定位,这就是我们在仓库/文件夹打开的原因。

下面我们开始 Git 操作的速成学习💪,一共涉及九个操作——

2.1 git status

首先输入 git status 命令,查看仓库状态。可以看到提示,当前目录还不是一个 Git 仓库,它还只是个普通的文件夹。

以后我们可以经常使用 git status 命令查看仓库状态

2.2 git init

既然它还不是 Git 仓库,我们就用 git init 初始化,可以看到初始化完成,它是一个空的 Git 仓库。

我们再用 git status 命令检查一下仓库,发现 Git Demo 目录已经成为一个 Git 仓库了,并且默认进入 Git 仓库的 master分支,即主分支。

返回的三条语句:

  • 进入 Git 仓库的主分支
  • 目前还没有提交过文件(git 是版本控制工具,要记录提交历史的以及每一个版本)
  • 这时最主要的是提示 test.txt 文件是 Untracked files ,就是说 test.txt 这个文件还没有被跟踪,还没有提交在 git 仓库里呢,而且提示你可以使用 git add 去操作你想要提交的文件。

2.3 git add

接下来我们往仓库里添加文件,根据提示,输入 git add test.txt,再输入 git status 看看仓库状态:

虽然仓库没有提交历史,但提示以下文件 Changes to be committed ,意思就是 test.txt 文件等待被提交。

可以看到刚刚 git “不承认” 我们的文件,现在通过 git add 命令”承认“了,并且把它加到一个可提交的列表(临时缓冲区)。

当然你可以使用 git rm --cached 这个命令去移除这个缓存。

2.4 git commit

刚刚我们把文件送到缓冲区,接下来用 git commit 命令将缓存区里的改动给提交到本地的版本库。

每次使用 git commit 命令我们都会在本地版本库生成一个 40 位的哈希值,这个哈希值也叫 commit-id(这个版本的编号),commit-id 在版本回退的时候是非常有用的,它相当于一个索引,可以在未来的任何时候通过与 git reset 的组合命令回到这里。

git commit 不是单独使用的,一般需要参数指定提交方式,我们可以输入 git commit --help 查看使用帮助(会跳转到相关网页)。

输入 git commit -m ”first commit“,我们成功将文件 text.txt 提交到了 Git 仓库。其中, -m 代表提交信息, first commit 是本次提交的信息,需要写在双引号内,提交信息你也可以写成 my commit,text commit 等任意句子。

我们再看看仓库状态,结果显示 nothing to commit, working tree clean,这表示已经没有内容可以提交了,即全部内容已经提交完毕。

为什么不把文件直接提交到仓库呢❓因为我们可能提交一个错误的文件,先 add 再 commit 能有效防止错误提交。就像坐火车需要到候车室(缓冲区)等待一样,直接走到火车群里可能上错车。当然也有办法把这两步合并成一步,不过后面再介绍,建议新手先按部就班的一步步来。

补充👉git commit常见的用法有下面三个:

  • git commit -m “message”,-m 参数表示可以直接输入后面的 “message” ,如果不加 -m 参数,那么是不能直接输入 message的,而是会调用一个编辑器一般是 vim 来让你输入这个 message。
  • git commit -a -m “massage”,加的 -a 参数可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过 git add 添加到缓存区,注意,新加的文件(即没有被 git 系统管理的文件)是不能被提交到本地仓库的。建议一般不要使用 -a 参数,正常的提交还是使用 git add 先将要改动的文件添加到暂存区,再用 git commit 提交到本地版本库。
  • git commit --amend,追加提交,它可以在不增加一个新的commit-id的情况下将新修改的代码追加到前一次的commit-id中

2.5 git log

输入 git log 命令,打印 Git 仓库提交日志,会显示作者、时间和你写的提交信息:

2.6 git branch

branch 是分支的意思,多人合作时,你一个模块,别人一个模块,你们各建一个分支就能保证改动互不干扰,等最后做完,把你们的分支合并起来就好。

git init 会初始化一个主分支 master,也是我们现在的默认分支。

输入 git branch,可以看到我们就在 master 这里:

在此基础上新建分支用 git branch a,其中 a 是我起的分支名字。然后再用 git branch 查看,可以看到 master 有了一个分支,这时候分支 a 跟分支 master 是一模一样的内容。

2.7 git checkout

虽然建立分支,但可以看到 还在 master 上,说明我们还处于主分支。这时候,输入 git checkout a 命令,切换到分支 a 上,再次查看分支, 在 a 前,说明我们处于分支 a ,可以修改分支 a 的内容了。

先新建再切换很麻烦,有一步到位的方法 git checkout -b a,意思是建立分支后自动切换到该分支。

2.8 git merge

你在 a 分支完成了你的部分,但是主分支还是原来那样,这个时候就需要把你的代码合并到主分支 master上来,git merge 就是合并分支用到的命令。

注意,合并分两步 ❗❗❗

  1. 切换到 master 分支,如果你已经在了就不用切换了;
  2. 执行 git merge a ,意思就是把 a 分支的代码合并过来,不出意外,
    这个时候 a 分支的代码就顺利合并到 master 分支来了。

删除分支:有添加就有删除,假如分支新建错了,或者 a 分支的代码已经顺利合并到 master 分支来了,那么 a 分支没用了,用 git branch -d 删除。删除分支 a 的语句为 git branch -d a,这里不再演示。

强制删除分支:上面说了 git branch -d 是删除分支的意思,有些时候可能会删除失败,比如如果 a 分支的代码还没有合并到master,你执行 git branch -d a 是删除不了的,它会智能的提示你a分支还有未合并的代码,但是如果你非要删除,那就执行 git branch -D a 就可以强制删除 a 分支。

2.9 git tag

这是今天学习的最后一个操作,tag 是标签的意思,写报告、写代码都有版本的迭代,比如 1.0,1.1 。git 可以给每个版本打上这样的标签,这样你忽然想看看第一版的报告是什么内容,就可以通过标签切换回去。

git tag v1 代表新建 v1 tag,你可以换成其他名字,git tag 代表查看标签。

如果想切换至某一标签,还是用刚刚学的 git checkout v1 即可,v1 是某版本标签名。

3. 总结

以上全是一些最基本的 git 操作,而且全是在本地环境进行操作的,完全没有涉及到远程仓库,最后总结一下基本 Git 操作:

  • git status :查看仓库状态
  • git init:创建一个空仓库,或者重新初始化一个已有仓库
  • git add:把文件添加到可提交列表(临时缓冲区)
  • git commit:提交改动(增删改)至仓库
  • git log:打印提交日志
  • git branch:查看、添加、删除分支
  • git checkout:切换分支、标签
  • git merge:合并分支
  • git tag:新建、查看标签

返回目录: GitHub 入门教程

查看原文

赞 0 收藏 0 评论 0

CatOneTwo 发布了文章 · 5月13日

GitHub小白入门(二)仓库操作

上一次我们认识了 GitHub 界面,尤其是项目/仓库界面,这一次我们学习仓库的常规操作,比如创建删除重命名,以及特殊的操作提交更改以及查看更改。

让我们开始吧!

1. 创建仓库

导读:当我们往 GitHub 上存东西,我们实际上是往仓库里存放,仓库就类似于我们新建的一个文件夹,它的创建并不复杂

首先我们看看哪些地方可以新建仓库。

个人界面的仓库页面可以新建😊

Image

你登陆后,在 GitHub 主界面也可以新建😊

Image

我们任选一给入口新建仓库,界面如下,步骤也都在上面了,是不是很简单👍

Image

创建好后,我们看看仓库/项目界面,看过上一篇文章应该比较熟悉了。

仓库名为 Hello World,包含 1 个commit,也就是我们通过勾选 Initialize this repository with a README,创建了一个初始化提交文件 README.md,其中文件后缀为 .md,表示文件为 Markdown 格式;包含 1 个branch,为master分支,即主分支;包含 1 个contributor,为贡献者,也就是我们自己。

Image

当我们打开个人界面,就可以在 Overview 看到我们的仓库啦✌

Image

在个人界面的 Responsitory 里也可以看到✌

当然,在主界面的也可以看到✌

Image

总结:经过上面的步骤,我们已经学会了创建仓库,可以感受到,我们像是创建了一个“文件夹”,里面只有说明文档(README),之后,你可以通过往里面提交文件完善它

2. 提交更改

导读:这一部分我们试着改 README 文件,并提交这次修改

提交 Commit 就像是项目中所有文件在特定时间点的快照,创建新仓库时,我们用 README 自述文件对仓库进行了初始化,这是仓库的第一次 Commit。


下面我们改一下 README 文件,并提交这次更改吧😊

点击README.md 右边的那支笔🖊,进入编辑模式,我们会看到 markdown 源文件👇

Image

改一下文件内容

Image

点击 Preview changes 预览更改,我们可以看到新内容以绿色显示

Image

在页面底部,输入一条简短、有意义的提交消息,描述你对文件所作的更改。如果不写这条消息,以后回顾的时候不好追踪。写好之后点击提交。

Image

提交后,页面刷新,显示README更改后的效果,可以看到 README 的标题不一定和仓库名一样,它是可以修改的。
Image

点击仓库名 Hello-World 回到仓库主页面,可以看到提交 commit 的次数增加变为 2,README.md 文件页显示了刚刚的操作。

Image

随着你更新仓库,README 也要及时更新🎈

总结:我们认识到,仓库里的内容不能随便改,你的每次增删改都需要提交/ commit,并且写好本次的操作描述,这样以后才能了解自己更新仓库的历史记录。

3. 查看更改

导读:这部分学习查看提交历史

刚刚我们演示了两次提交(第一次是初始化,第二次更改了文件)。

如果有一天你进入自己或别人的仓库,看到它已经不是最初的模样😂,你想知道究竟发生了什么❓,谁动过这个仓库👨,这时候 Commits 就派上用场。

首先 Commits 数反映了提交更改的次数,点击它,我们就能看到提交历史。


我们看到有两条提交记录,按时间倒序排列,点击最新的一条

Image

我们看到了这条提交记录的具体内容。上面就是这次提交的标题和内容,下面就是改动前后的对比图。

试想,如果有大量的文件修改,而我们提交时不写相关信息,我们回头查看时怎么能清楚做的改动呢?
Image

总结:提交要备注

4. 名称修改

导读:改仓库名

也许有一天,你觉得自己的仓库名不够炫酷,想改掉,怎么办?

进入仓库后,点击右上角的 Settings

最上面就是改名的地方,输入新名称,点击 Rename 按钮。

Image

页面刷新,可以看到我们的仓库已经换成新名字啦!

Image

当然,你也可以改仓库描述,点击描述右边的 Edit 按钮

Image

输入新的描述,保存即可!

Image

总结:更改不难

5. 删除仓库

导读:上面我们只是做个示例,你可能还没想好建一个怎样的仓库,那就先把示例仓库删掉吧

进入仓库后,点击右上角的 Settings

Image

进入的设置页面可删除仓库,删除按钮在页面最下面👇

Image

删除需要你输入作者/仓库名,防止误删。

Image

为了进一步保证安全,如果你是自动登录的话,还要输入密码。

Image

到此为止,就删除了仓库,页面刷新,最上端会有删除成功的提示~

总结:删除需谨慎!

返回目录: GitHub 入门教程

查看原文

赞 0 收藏 0 评论 0

CatOneTwo 发布了文章 · 5月13日

GitHub 小白入门(一)初识界面

和许多小白一样,我也是一个看到大量文字和图片就很头疼的人😂,下面这篇 GitHub 教程,结合我自己的理解,用通俗易懂的方式讲述,目的就是讲明白。

下面,和我一起开始学习吧💪!

1. Git 和 GitHub

导读:我们先来了解一下 Git 和 Github 是什么,有什么功能

先说结论,Git 和 GitHub 是两个东西,Git 是一个软件/工具/系统,GitHub 是一个网站/平台,GitHub 这个网站使用了 Git 这个工具。

1.1 Git

Git是一个分布式版本控制系统

版本控制系统(version control system)像个数据库,它会记录所有对项目文件的更改(比如一个文件,前天加了三段文字,昨天删了一句话,今天改了几个词,这三个版本历史都能保存下来)。 版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制。

使用版本控制系统可以协同合作(多人编辑文件或代码而不出错),版本存储(你改动的每一版本都保存下来,如果改错可以回到之前的版本,如果想加上删除的内容也可以返回去找,也可以对比现在和之前的版本,看改了什么),文件备份(服务器和本地都有完整的历史版本,如果服务器坏了,本地还有一份完整的历史记录)。

总之, Git 可以避免文件丢失,改错,多人合作不同步导致的后果👍。

1.2 GitHub

GitHub 是通过 Git 进行版本控制的软件源代码托管服务平台,可以理解成放代码的地方,但往上放代码时用 Git 进行了版本控制。也就是 GitHub 使用了 Git 完成版本控制,下面来看看 GitHub 有哪些有用的功能!

代码托管:可以单纯地把它当成一个网盘放你的代码,同时使用 Git 功能记录你的代码历史。当然除代码外还能放其他文件。

学习优秀的开源项目:学习别人优秀的源码,写代码之前看别人是怎么写的(比如写作业的时候参考参考),看论文也可以上 GitHub 找源代码,还能找一些开源的软件,插件用。

当资料库:可以查资料,GitHub 上有总结好的面试宝典,入门指南,技术分析,论文合集,课程资料等。这些博客、公众号上有的内容 GitHub 上也有,还可能更全。

多人协作:多个人要一起写个程序,一起写本书,一起翻译一篇文章等,用 GitHub 可以管理项目保证你们的文件同步,写好后提交合并成一个完整的项目。

搭建博客:基于 GitHub Pages 搭建属于你的博客,你可以随心所欲的定制自己的样式,这是一个属于你的空间。

社交:就像微博、知乎一样,在这个网站你可以关注(following)别人,也可以有自己的粉丝(followers),看到好的开源项目可以给他点赞(star),你有啥想法还可以给这个项目改进改进(fork)。

个人简历:如果你的 GitHub 上有不错的项目,或者你改进过别人的项目,这些都能反映到你的账号上。GitHub 一定程度可以反应到你的能力,如果你的项目点赞多(star),还有很多粉丝关注(followers),你就像个大 V 一样,这就是你的另一份简历。

写作:Gitbook 可以写电子书。

GitHub 能做的还远不止这些,等待你的探索发现ji'zhi!

另外,GitHub 不用翻墙,有网就能打开,可能比国内网站反应慢些,这是正常现象;虽然网站都是英语,但模块不是很多,跟着下面的教程就能学会,用几次就会了;网站有很多中国用户,所以你可以搜到很多中文资源,不用担心语言问题😊~

总结:无论你是不是程序员,你都可以用 GitHub。你可以把它当个网盘存包括代码的文件,可以和团队一起做个项目(文件啥的就不用保存一堆迭代版本啦),可以找资源(里面有很多宝藏资源),可以建个博客,也可以像在微博、知乎、博客一样,分享你的东西。

2. 加入 GitHub

导读:注册个账号,看看网站长啥样吧

2.1 注册

打开这个网址 https://github.com/, 如果没有登陆的话,就会看到下面的主界面。、

首先,你没有账号也能搜索(游客模式),Sign in 用来登陆,Sign up 用来注册账号。

image-20200510141808982

现在还没账号,可以直接在上面的页面注册,也可以点击 Sign up 到下面这个页面(其实注册内容都一样,注册网址:https://github.com/join?sourc...)。

image-20200510142923300

输入上面的信息后,点击页面下面的 Create account 即可。

这几年的注册界面有变化,如果创建账号后,让你选择账户类型(pick the plan 或者 choose your plan),你就选择免费(free),公共(public)的那个。

如果需要验证邮箱(verify your email address),就打开刚刚写的邮箱,打开收到的邮件,点击 verify email address 即可。

如果注册有困难,可以看看本年的图文教程。

注册成功你会进入 GitHub 主页面,我们第 2.3 讲。

2.1 登录

当你有账号后,你就可以登陆啦。

登陆是点击上面任意页面的 Sign in 按钮,进入下面这个界面(登录网址:https://github.com/login)。

输入用户名或邮箱,密码,点击 Sign in 或者回车即可。

image-20200510144302781

登录成功你也会进入 GitHub 主页面。

2.3 界面

2.3.1 主界面

登录状态下,网站主界面(网址:https://github.com/)如下:

首先看最上面黑色工具条。

最左边是一个 GitHub 的 logo,点它就返回现在这个主界面。

最右边是和你个人有关的东西(个人,新建,消息),这个和用过的任何软件一类比,就知道功能了。

左边搜索框,和搜索引擎一样用来搜索(搜源码,搜资料)。

中间的四个按钮:

  • Pull requests:你想参与别人的项目,或想改进别人的项目,改进后需要提交申请,用 pull requests。
  • Issues:你发现别人项目的 bug,或者有什么问题,怎么和作者交流呢?提一个 Issue ;别人也可以给你的项目提 Issue 反馈问题。Issue 追踪各种想法,增强功能,任务,bug,有点儿像评论功能。
  • Marketplace:应用商店,里面有免费/收费的开发工具。
  • Explore:你可以理解成软件里的发现页,点进去推荐一些和你相关的话题、项目、新闻等。

再来看看下面的一大块

左边是你的项目/Repository📁。

  • Repository:翻译为仓库,也是你的项目。你可以理解成一个大的文件夹,或者笔记本。一个项目对应一个 Repository。

中间是你关注的人的动态,比如他给别人点赞,他又建了一个项目。

右边类似于推荐页,网站根据你的喜好推荐一些相关项目。

image-20200510151945421

2.3.2 个人界面

刚刚说了右上角那个头像就是个人😀。

点一下头像,就会弹出一个小页面,点击 Settings 可以更改你的资料,Your XXX 都是你创建的一些东西(这里把点赞 star 也理解成你创建的),点击 Your profile 就可以进入你的主页。

image-20200510161207152-1589291948789

由于个人主页面的分布都一样,我的界面又没啥东西😅,我就用 Linux 之父的界面做演示了。

可以看出,在个人界面中,可以看到当前这个人的信息,类似于微博知乎的个人界面。我们自己的个人界面也长这样,不过刚注册,下面的记录一片空白。

看他的粉丝数,就知道这是个大v,这里最能体现 GitHub 的社交属性。

这里又涉及到一些专用词。

  • Projects:它可不是项目,上面说了 Repository 是项目。它可以翻译为项目板,是 project-boards 的简写, 通过项目板可以灵活地创建适合需求的自定义工作流程,说白了是管理项目流程的,一般不常用。
  • Star:就是点赞功能,这里用作动词,它叫 star 是因为点赞图标就是星星⭐。不过这个点赞比较像知乎里的点赞功能,它会记录在你的动态里。由于 GitHub 没有收藏功能,所以 star 可以用来收藏。
  • Follow:就是关注的意思,点击 Followers 看看谁关注了他,点击 Following 看看他关注了谁(大神关注的一般也是大神👍)

image-20200510163023265

2.3.3 项目界面

下面我们看看项目界面。

我们使用 GitHub ,无论存放东西,还是查资料,主要都是看自己或别人的项目/仓库,所以这个界面一定要熟悉。

你可以通过搜索项目、点击别人的界面、推荐页面打开一个项目。

我们以 Python 为例介绍界面,你可以在搜索框输入 Python 搜索,选择第一个项目,看点赞数就知道它是最欢迎的一个。

image-20200510173028731

点进去就是项目/仓库界面啦,我们认识一下主要功能

首先最上面一条我们可以看到这个仓库的信息,像关注点赞都是按钮,点击可以看具体的人。

这里涉及到两个新词语。

  • Watch:关注观察👀,也就是你既可以关注(follow)一个人,也可以关注(watch)一个项目,你关注内容的动态都会显示在主页面。
  • Fork:直译是刀叉,它是指将 GitHub 的某个特定仓库(所有文件)原封不动地复制到自己的账户下。比如你想改进这个项目,加点儿自己的东西,就可以复制一下整个仓库再修改,但是不影响原作者的仓库,你点击 Fork 就能复制。

下面一条是标签页,比如默认的一个标签页 Code 就是展示代码的页面;如果你想看别人提的问题就点击 Issues 页,也许你遇到的问题别人提过并且解决了;有的人想参与这个项目,他改好后就向作者发起了 Pull Requests,希望作者接受他的改进,点进去可以看谁提交过什么样的改进,作者是否采纳。

下面这个主要部分就是仓库里的东西了,你可以看到就是一个个文件夹或文件,里面可能是代码文件,也可能是其他文档,图片什么的。点击可以看,你也可以点击 Clone or downloads 下载到本地,具体学习。

image-20200510174118915

滑到最下面,可以看到一个叫 README.md 的一段文字,仔细看,它就是仓库里的一个文件,只不过展示出来了。它就像产品说明书,或者是一个介绍页,告诉你这个仓库的有关信息,让你对仓库有了简单的了解。

image-20200510175229670

以后你要建个仓库,为了方便别人了解,也要写这样的文件。

2.4 名称

这里再总结一下 GitHub 的基本名称,都是上面提到的,光看字面意思不好理解,总结一下方便查询。

名称功能
Pull Request你想参与别人的项目,或想改进别人的项目,改进后需要提交申请,用 pull requests。
Repository翻译为仓库,也是你的项目。你可以理解成一个大的文件夹,或者笔记本。一个项目对应一个 Repository。
IssueIssue 追踪各种想法,增强功能,任务,bug,有点儿像评论留言功能。
Star就是给项目点赞
Fork将 GitHub的某个特定仓库(所有文件)原封不动地复制到自己的账户下(但不会与原仓库相同)。以此实现分散式版本管理
Follow关注人,关注后主页有他的动态
Watch关注项目,关注后主页有项目的动态
Gist上面没有提到,但是主界面点击头像可以看到 Your Gist。如果你没有一个项目,只是单纯地想分享一些代码片段,就可以写 Gist。
README.md每当创建项目、初始化时,都会帮你自动生成 README.md 文件并显示在仓库首页。一般都是使用 Markdown 语法(准确来说应该是GitHub Flavored Markdown(GFM)语法)来描述项目的概要、使用流程、许可协议等。
总结:这一部分我们学会了注册登录,认识了主要界面,知道了怎么查找需要的资料,相信到这里,你已经可以认识到它的搜索功能了。

返回目录:GitHub 入门教程

查看原文

赞 1 收藏 0 评论 0

CatOneTwo 发布了文章 · 5月13日

高效工作神器——电脑软件篇

推荐几款提高学习工作效率的电脑软件,这几款我一直在用,操作系统是 Windows 10。

特点:简洁,免费,美观,易操作,无广告(我很不喜欢广告弹窗!)

一、输入法:手心输入法

网址:手心输入法

以前用的是搜狗输入法,无奈有广告弹窗,而且搜索会转到搜狗搜索,给我带来一些困扰。后来看到推荐说手心输入法没广告,我就想试试。一用就用到现在,很好用,输入法功能和搜狗无差别,满足我对输入法的需求,输入法就选它了。
在这里插入图片描述

二、截图软件:Snipaste

网址:Snipaste - 截图 + 贴图

之前用过 windows 自带的截图软件,以及微信QQ聊天窗口的截图软件,截图编辑当然能满足需求,就是用的时候打开比较麻烦。Snipaste 可以停留在后台,需要截图时按快捷键 F11 就可以启动截屏,不用打开或者去哪里找它。

除截屏之外,它还有三个很有用的功能。

  1. 截图识别:截图时遇到一些矩形区域,它可以自动识别定位该区域(或者说识别到边界),不用手动拖动至边界,这样截的图比较精准。

在这里插入图片描述

  1. 截图编辑:截完图点击鼠标左键,就会看到右下角的编辑区。我们能在截图上输入文字,打马赛克,用画笔写,画箭头折线,用矩形或椭圆标注等。

在这里插入图片描述

  1. 贴图功能:一般截图软件没有这个功能。截图后点击右下角编辑区的图钉按钮,就能贴到电脑上,可放大缩小,像在电脑上贴了一个便利贴,永远在窗口最顶端。把需要参考的东西贴到旁边,就不用来回切换页面。贴图不用了,可以右击选择保存,复制,保存等。

在这里插入图片描述

三、快速启动软件:Wox

网址:Wox

这是一款还你干净桌面的软件。

启动软件的常规操作是点击桌面的快捷方式,这种方式需要把常用的软件放在桌面上,可能造成混乱,但有了快速启动软件,你就不需要放在桌面了,用快捷方式就能启动软件了。

它的功能除快速启动软件外,还可以网页搜索,自定义快捷方式,当计算器等,不过我最常用的功能是自定义快捷方式和快速启动软件。你可以自定义快捷方式启动它,不用的时候隐藏它。

【左】我的桌面【右】按 ALT+space 启动/隐藏 Wox

<center><img data-original="https://img-blog.csdnimg.cn/20200505093914793.png"> <center><img data-original="https://img-blog.csdnimg.cn/20200505094006107.png">

【左】自定义快捷键 ALT+W 启动微信【右】自定义快捷键 ALT+P 启动 pycharm,回车或点击都能打开

<center><img data-original="https://img-blog.csdnimg.cn/20200505094132392.png"> <center><img data-original="https://img-blog.csdnimg.cn/20200505094219160.png">

【左】输入 > 启动命令行【右】输入control panel 启动控制面板,Wox 能启动 windows 自带的那些组件(设置,此电脑,回收站等)

<center><img data-original="https://img-blog.csdnimg.cn/20200505094459150.png"> <center><img data-original="https://img-blog.csdnimg.cn/20200505094543987.png">

【左】指定谷歌搜索【右】指定百度搜索

<center><img data-original="https://img-blog.csdnimg.cn/20200505095052178.png"> <center><img data-original="https://img-blog.csdnimg.cn/20200505095234726.png">

右击搜索框或输入 settings 进入设置页面,可以查看插件功能以及自定义快捷键/热键。

<center><img data-original="https://img-blog.csdnimg.cn/20200505095635271.png"> <center><img data-original="https://img-blog.csdnimg.cn/20200505095644940.png">

桌面上空空如也,按几个键就能启动软件,是不是感觉很炫酷?!类似的快速启动软件还有 Listary,大家可以自行对比选择。

四、文件资源管理软件:Listary

网址:Listary

Listary 可以搜索文件,启动程序,搜索网页,和 Wox 差不多,这里只介绍它独有的功能。

可以全局搜索,也可以局部搜索。全局搜索类似于Everything。局部搜索,在任意的文件夹下,输入文件夹名,就会弹出搜索框。

<center><img data-original="https://img-blog.csdnimg.cn/20200509140951935.png"> <center><img data-original="https://img-blog.csdnimg.cn/20200509141023345.png">

常用文件夹可以加入收藏夹,设置快捷键/或者设置关键词,就可以像快速启动软件一样,快速打开文件夹。

<center><img data-original="https://img-blog.csdnimg.cn/20200509141509651.png"> <center><img data-original="https://img-blog.csdnimg.cn/20200509142004981.png">

不设置快捷键也可以,用快捷键打开弹窗,里面就有收藏文件夹。

<center><img data-original="https://img-blog.csdnimg.cn/20200510093351332.png"> <center><img data-original="https://img-blog.csdnimg.cn/20200510093429221.png">

总之,我认为 Listary 的这三个功能最好用:全局搜索+局部搜索+文件收藏,全局搜索加上局部搜索比 Everything 更全面些,有了文件收藏,常用软件就不用放在桌面或每次搜索打开。


<font color=red>Listary 与 Wox

Listary 经常和 Wox 一起出现,因为它俩的功能非常像。我一直用的是 Wox,后来才亲自使用了 Listary,经过使用说说它们的异同。

==同==

启动软件:两者都可以,但是 Wox 可以自定义快捷键,比如启动微信,用 Listary 的步骤是:双击 ctrl → 输入“微信”,用 Wox 的步骤是:用我自定义的快捷键 ALT+W 直接打开。所以从启动应用的角度,我觉得 Wox 更便捷。

<center><img data-original="https://img-blog.csdnimg.cn/20200505094132392.png"> <center><img data-original="https://img-blog.csdnimg.cn/20200509133312981.png">

网页搜索:两者都能用除法关键字搜索网页,比如都用百度搜索壁纸,差不多。

<center><img data-original="https://img-blog.csdnimg.cn/20200509133549720.png"> <center><img data-original="https://img-blog.csdnimg.cn/20200509133719376.png">

搜索文件:两者都可以,Wox 的全局搜索功能基于插件 Everything,但是不如 Everything 方便。Listary 的全局搜索 比 Wox 方便。
主体颜色:都能修改。
系统命令:用关键字完成开关机,重启锁屏等命令,打开控制面板,此电脑,设置等 windows 自带功能。

==异==
Wox 可以安装插件,比如当计算器,可以设置快捷键启动软件,这是我觉得最方便的地方。

Listary 启动软件可以设置关键字,不过我不喜欢打开东西的时候打字;Listary 的优势在于文件搜索和文件管理,搜索文件的功能可以替代下面的 everything,文件管理就是独有的功能,其中你收藏的文件可以设置快捷键启动。

美观简洁上,Wox做的更好,Listary 看似功能多,但快捷键的设置不多,还需要配合鼠标或手动输入关键字,功能越多显得越臃肿。

总之,两个软件相比, Wox 用于软件快速启动最便捷,Listary 用于文件管理最便捷,两者各有侧重,使用场景不同,所以我把两者搭配使用。

原先我使用 Wox + Everything,如果不需要频繁打开特定的文件夹,这两个足够;但现在有几个文件夹经常用,Listary 可以收藏常用文件夹,直接打开,就不用全局搜索或者放在桌面上。

五、文件快速搜索:Everything

网址:Everything

这个应该很多人听说过,就是搜文件的。如果你不想一个个打开文件夹找文件,就像通过搜索找。但 windows 自带的搜索功能太慢,而这个软件能快速搜到,很高效。

软件外观,说实话没那么美观,但不妨碍它好用。
在这里插入图片描述
输入你的文件名或关键词,立马出结果。你可以通过鼠标点击或上下键加回车打开。在这里插入图片描述

你可以设置快捷键启动会隐藏,比如我用的是 ALT+A 打开,ESC 退出。

六、英文词典:欧陆词典

网址:欧陆词典

以前用的是网易有道词典,也是因为有弹窗,试了一款新软件,看网上评论都说好用。这个词典没广告,查单词完全没问题。你可以设置快捷键,比如按快捷键就能显示/隐藏迷你窗口,也可以划词/取词等,把单词加入生词本。

常规词典的功能都有,手机电脑都有这款软件,登陆账号可以同步生词本背单词,它家推出的每日英语听力APP也很好用。当然我选它的主要原因还是无弹窗,界面简洁。
在这里插入图片描述

七、文件预览软件:Seer

网址:Seer (下载免费版就行)

当你想浏览一下文件夹里有啥,就可以使用这款软件。你不需要打开文件夹,启动 Seer 后只需要按一下空格键就能一件预览。

比如我要看看 C 盘。鼠标
按下空格键/space 就能一键预览,再按一下就能退出 。
在这里插入图片描述
除此之外,它还能一键预览照片和 PDF,很方便的。

如果文章对你有帮助,请点赞收藏,我将继续分享干货文章!

查看原文

赞 0 收藏 0 评论 0

CatOneTwo 发布了文章 · 5月13日

高效科研神器——文献阅读篇

分享我在用的科研神器,有了它们,文献阅读更高效!

操作系统:Windows 10

工具特点:免费,简洁,无广告

软件分类:

阅读:Mendeley,Adobe Acrobat Reader DC

翻译:欧路词典,copytranslator

笔记:印象笔记,Typora,mindmaster

绘图:processOn, draw.io

1. 阅读

1.1 文献管理软件——Mendeley

网址:Mendeley

读文献,你会把论文怎么管理呢?是不是还在用文件夹分类保存呢?这样不高效,你需要一款文献管理软件!

文献管理软件可以帮你下载需要的论文并归类,同时提取论文关键信息,你还可以用它读论文,搜论文,保存到本地及云端等。今天分享的文献管理软件就是 Mendeley,这是比较下来我最终选定的,因为它能满足我的阅读需求。

Mendeley 有 2G 的免费的在线存储空间,目前是够用的。

它有网页版,客户端,chrome 插件,windows 插件等,我目前用它来搜集下载阅读文献,所以只用客户端和 chrome 插件。

下面是客户端界面。

左边:可以看到论文分类存储,你只需要点击的文件夹,就可以找相应的论文,你也可以拖动更改论文的分类。

右边:每篇文献都自动提取了相关信息,你做的笔记也可以在 Notes 里找到

中间:文献列表,双击打开 PDF。你既可以在 Mendeley 阅读,也可以用外置的 PDF 阅读器阅读。
在这里插入图片描述

阅读PDF:可以看到它当阅读器比较简陋,笔记的话只能高亮和写一个文本,不喜欢的话可以用外置的PDF 阅读器打开。不过用它自身做的笔记会上传到云端,你在另一个地方登陆下载PDF后笔记还在,用外置PDF阅读器做的笔记,只能在本地看到。

在这里插入图片描述

下载PDF:你既可以在网上用chrome插件下载,也可以下载后手动拖到对应的文件夹(手动下载的不在云端)。我演示一下插件下载,它下载好PDF会传到云盘。

在这里插入图片描述

我们看看下载好的论文,需要在客户端点击同步,把文件下载到本地。

在这里插入图片描述

有了Mendeley,文献管理就方便多了。

因为 Mendeley 适用于多个操作系统,所以你在不同的电脑,平板,手机上登陆账号,就能看到自己的文献库啦。

其实类似的软件还有 EndNote,不过它收费😟,我就选择这个了。

1.2 PDF 阅读器——Adobe Acrobat Reader DC

网址:Adobe Acrobat Reader

PDF 阅读器很多,我用过的有文电通、极速。最后选择了这款 Adobe 出品的阅读器,有基本的阅读标记功能,我主要是觉得简洁。
在这里插入图片描述

2. 翻译

2.1 英语词典——欧陆词典

网址:欧陆词典

以前用的是网易有道词典,也是因为有弹窗,试了一款新软件,看网上评论都说好用。这个词典没广告,查单词完全没问题。你可以设置快捷键,比如按快捷键就能显示/隐藏迷你窗口,也可以划词/取词等,把单词加入生词本。

常规词典的功能都有,手机电脑都有这款软件,登陆账号可以同步生词本背单词,它家推出的每日英语听力 APP 也很好用。当然我选它的主要原因还是无弹窗,界面简洁。

在这里插入图片描述

2.2 文献翻译软件——copytranslator

网址:copytranslator

它是一款翻译软件,它的优点:复制好的东西自动粘贴翻译;PDF 格式不会乱,不用手动调空格回车;可以选择翻译源;专注模式就是中文窗口,也就是你复制一段英文,窗口直接显示中文。

缺点:有时候卡,反应慢,要关掉重开几次。
在这里插入图片描述

3. 笔记

3.1 电子笔记——印象笔记

网址:印象笔记

插件:印象笔记

笔记软件我只推荐印象笔记和 OneNote,印象笔记的优势是搜集信息方便,当资源库,输入格式多样;OneNote 的优势是书写随意,文件夹分层合理。我现在常用的是印象笔记,因为我还没有很多分类。

使用印象笔记,可以把看到的公众号以及各个软件上的文章保存下来,在浏览器上也可以用插件把文章裁剪进去。

在这里插入图片描述

用印象笔记插件保存网页文章。

在这里插入图片描述

它还可以写各种形式的笔记,比如 Markdown 和 思维导图。

在这里插入图片描述

Markdown 相对于普通笔记的优势是自动生成目录,格式规范,我用来记录整篇文献的思路。

在这里插入图片描述

思维导图的优势在于结构清晰,关键点突出,我用来记录综述类文献中提到的模型,这样方便看分类。

在这里插入图片描述

不过印象笔记普通用户对同时登陆的设备、思维导图的节点个数有限制,可以去某宝上买会员比较便宜,也可以使用我下面推荐的这两款软件写 Markdown 和 思维导图,把印象笔记当作一个普通笔记本和资源库。

3.2 Markdown 编辑器——Typora

网址:Typora

markdown 是一种标记语言,比 word 排版简单好看,语法简单,很多地方都用。很多markdown编辑器都是左边写markdown,右边渲染出呈现的格式,而今天推荐的编辑器 Typora 是实时渲染的,而且表格可以像 word 里那样插入,简单方便。我的这篇文章就是用 Typora 写的,比印象笔记写起来方便多啦!

在这里插入图片描述

3.3 思维导图——mindmaster

网址:mindmaster

思维导图软件有很多,不过有的收费,我是看到知乎上有推荐这款软件。软件的免费功能是够用的,成图美观,可以调颜色,还有很多主题可以选择。

在这里插入图片描述

支持跨平台同步,做好的思维导图上传到云空间,登录账号就可以在不同设备上同步文件了。导出功能非常强大;包括了我们学生党或者是工作人士经常使用的有道笔记,印象笔记等等。

在这里插入图片描述

不过免费版导出的图和 PDF 有水印,也不能导出到印象笔记。

我使用的话可能会截图,必要的时候再买个会员完成导出功能。

4. 作图

无论是汇报还是总结,图表都是很直观的表示形式,其实 PPT 就能做出很美观的图,不过它需要你手动调整,比较辛苦,这里推荐两款作图的在线软件,如果没有作图工具可以使用。

4.1 在线作图——ProcessOn

网址:ProcessOn

在这里插入图片描述

新建形式也挺多的,也能做思维导图,不过没有 mindmaster 那么好看,还有免费版文件数量有限制(9个),如果满了把不用的删了就能接着用。

在这里插入图片描述

这个思维导图下载后没水印,免费的下载格式够用

在这里插入图片描述

4.2 在线作图——draw.io

网址:draw.io

可以做各种类型的图。

在这里插入图片描述

里面有很多形状,和 office 一样,可以调整边框,填充颜色,粗细等。

在这里插入图片描述

导出的图片无水印,也很实用!

今天介绍的工具都和阅读文献有关,以后我写作,会把写作利器补充上,如果有用,点个赞吧!
查看原文

赞 0 收藏 0 评论 0

CatOneTwo 发布了文章 · 5月13日

一文读懂 R-CNN,Fast R-CNN,Faster R-CNN 发展史

R-CNN 系列算法是目标检测 two-stage 类的代表算法,本文将从 问题背景,创新点,框架模块,训练流程,检测流程五个方面比较,了解它们的的发展历程,以及发展原因。

一、任务描述

目标检测是为了解决图像里的物体是什么,在哪里的问题。输入一幅图像,输出的是图像里每个物体的类别和位置,其中位置用一个包含物体的框表示。
查看源图像

需要注意,我们的目标,同时也是论文中常说的感兴趣的物体,指我们关心的类别(行人检测只检测人,交通检测只关心交通工具等),或者数据集包含的类别,并不是图像里所有的物体都是目标,比如建筑,草坪也是物体,但他们常常是背景。

从计算机视觉的角度看,目标检测是分类+定位,从机器学习的角度看,目标检测是分类+回归

二、设计思路

今天介绍的 R-CNN 系列算法,都基于深度学习,它们把目标检测大致分为四部分完成:

  • 先从整幅图里选取最可能有物体的一些候选区域,这些区域一般用长方形框表示,这一步能缩小寻找范围
  • 既然用到深度学习,那就需要学习图像的深层特征,这里我们只关心上一步选出区域的图像特征,提取的特征可用于分类回归任务
  • 分类就是常规的分类方法,不过这里是多分类
  • 第一步给的候选框经过筛选后,不一定精准,还需要根据 ground truth 作调整
  • 分类和定位任务可以同时训练,也可以依次训练

在这里插入图片描述

三、名词解释

  • Selective Search:一种产生候选区的方法,没有用到深度学习,需要在 CPU 上训练,比较耗时,简称 SS。
  • Region proposal:直译为成区域建议(有些别扭),就是生成候选区的过程,类似于比赛前的海选,其中的 region 是矩形区。方法有 Selective Search,论文中产生 2000 个候选区,下面简称这部分产生的区域为候选区。
  • Bounding box:直译为边界框,就是最后输出定位的那个矩形框。严格来说,分为人工标注的 ground truth 和 predicted 两种类型。有时候简称为 BB。
  • Region of interest(ROI):感兴趣的区域,有时候论文把 region proposal 产生的区域叫 ROI。
  • Non maximum suppression(NMS):非极大值抑制,简称为 NMS 算法,其思想是搜素局部最大值,抑制极大值,在目标检测的目的是输出最合适的边界框。
  • Fully connected layer:全连接层,我下面简写为 FC 层。
  • Feature map:卷积层的输出,可翻译为特征图。

四、比较说明

下面我将从问题背景,创新点,框架模块,训练流程,检测流程五个方面比较介绍他们的发展过程。我更侧重它们的宏观思路,而没有介绍具体细节,也没有涉及实验和代码。

五、发展历程

首先用一张图说明三个架构的区别。
在这里插入图片描述
可以看出,他们的发展是从训练分散到统一的过程,开始还需要借助外部的模块 SS,后来可以构造一个联合框架。

从训练的角度,开始的训练是多阶段的(multi-satge:生成候选区→提取特征→分类→定位),后来的训练中,提取特征+分类+定位一次性完成。

从是否需要 region proposal 的角度,它们都是需要的,是 region based 方法,统称为 two-stage 方法,而其他方法如 YOLO 不需要这个阶段,是 one-stage 方法。

1. R-CNN

问题背景——

  • 传统视觉特征 SIFT 和 HOG 用于检测系统,性能提升缓慢
  • CNN 用于分类效果好,能否提升检测性能

创新点——

  • 把 CNN 用于生成 region proposal,用 CNN 提取的特征代替 SIFT 和 HOG 这些传统特征;
  • 采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题。

框架模块——

  • 生成候选区模块
  • 提取特征的 CNN 模块
  • 用于分类的 SVM 模块
  • 修正边界框模块

训练流程——

  • 有监督的预训练:在大型辅助数据集(ILSVRC2012 classification)上进行 CNN 预训练,得到一个分类器(CNN)
  • 特定领域的微调:根据检测任务微调 CNN,把最后 1000 维的分类层替换成 N+1 维的分类层(N 是检测数据集的类别数,1 是背景)
  • SVM 分类器训练:由于SVM是二分类器,需要为每个类别训练单独的SVM。对于某一类,一片区域包含该类物体为正样本,不包含为负样本。如何判断是否为正?设定 IOU 阈值,低于阈值的为负样本
  • 边界框回归训练:提高定位精度

检测流程——

  • 输入一张多目标图像
  • 采用 selective search 算法提取约 2000 个建议框,对区域 / 框变形
  • 处理后的区域/框输入 CNN 提取特征
  • 对区域进行分类,用非极大抑制提取分数最高(最可能的类)的框
  • 对框进行回归修正,选择分数最高的框

2. Fast R-CNN

问题背景——

  • R-CNN 的训练是多阶段的(multi-stage):预训练 CNN→针对检测微调→训练分类器→训练边界框回归器
  • R-CNN 的时间空间消耗大:为了训练 SVM 分类器和边界框回归器,每个区域的特征都要提取出来,并且存到磁盘上
  • R-CNN 检测慢:检测时需要提取每个区域的特征,但生成的区域有重叠,所以计算也有重叠。

创新点——

  • 与 R-CNN、SPPnet 相比有更高的检测精度(mAP)
  • 训练是单阶段的(single-stage),损失是多任务的(multi-task),指把预训练的 CNN 针对检测任务微调后,分类和回归任务能一起完成
  • 训练可以更新所有网络层
  • 特征缓存不需要磁盘存储

框架模块——

与R-CNN 模块大致相同,相比 R-CNN 模块有一些改变。

  • 网络输入:图片组以及每幅图片的一组 RoI
  • CNN 模块:最后一个最大池化层由 RoI 池化层代替
  • 分类模块:Fast R-CNN 使用 softmax classifier,R-CNN 和 SPPnet 使用 one-vs-rest linear SVMs。
  • 分类和定位:CNN 网络的最后一个全连接层和 softmax 替换为两个同级层,R-CNN 是独立的两个模块,需要单独训练

训练流程——

  • 有监督的预训练,得到 CNN
  • 特定领域的微调:首先改变模型,就是上面提到的输入改变,CNN 的 ROI 池化引入,还有分类回归模块的改变;
  • 接着,输入图片和区域后,就能实现端到端的多任务训练,不需要单独训练分类和回归模块。

检测流程——

  • 输入一张多目标图像
  • 采用 selective search 得到的预选区域
  • 用卷积层和池化层处理这幅图片,生成 feature map;
  • 对于每个候选区域,用一个 RoI 池化层从上一层的 feature map 中提取定长的特征向量;
  • 同时完成分类回归任务:每个 feature vector 送入一系列全连接层,这些全连接层最后会分支成 two sibling output layers: 一个可以在K个对象类以及一个笼统的“背景”类上生成 softmax 概率估计;另一层为 K 个对象类中的每一个输出四个实数值(编码精确的边界框位置)。

与 R-CNN 相比

  • R-CNN 先用 SS 从图片生成候选区(然后图片就不用了),把候选区输入CNN 提取特征,因为生成的区域有重叠,所以计算重复;Fast R-CNN 先用 SS 从图片生成 候选区,兵分两路,先把整幅图输入 CNN 一次性提取特征生成特征图,对于每个候选区,用一个 RoI 池化层从上一层的 特征图中提取定长的特征向量。
  • R-CNN 对分类和回归模块分别训练,Fast R-CNN 网络末尾采用并行的两个全连接层,可同时输出分类结果和边界框的回归结果,实现了端到端的多任务训练。

3. Faster R-CNN

问题背景——

  • 继Fast R-CNN后,在CPU上实现的区域建议算法 Selective Search、EdgeBoxes 等成了物体检测速度提升上的最大瓶颈。

创新点——

  • 设计 Region Proposal Networks(RPN),利用 CNN 卷积操作后的特征图生成候选区,代替了Selective Search、EdgeBoxes 等方法,速度上提升明显;
  • 训练 Region Proposal Networks 与检测网络(Fast R-CNN)共享卷积层,大幅提高网络的检测速度。

框架模块——

  • PRN + Fast R-CNN
  • Fast R-CNN 生成候选区域需要外部的 SS 模块,而 Faster R-CNN 是一个统一的模块,region proposal 部分由 PRN 完成

训练流程——

四步交替训练:

  • 训练PRN:使用 ImageNet-pre-trained model 初始化,针对 region proposal 任务微调
  • 用第一步得到的 PRN 训练 Fast R-CNN:其中 Fast R-CNN 也用 ImageNet-pre-trained model 初始化(此时两个网络还没有共享特征)。
  • 用 Fast R-CNN 初始化 PRN:固定共享的卷积层,仅微调 RPN 特有的层(此时两个网络开始共享)
  • 在保持共享卷积层固定不变的情况下,微调 Fast R-CNN 的特有层。(两个网络共享相同的卷积层并形成统一的网络)

检测流程——

  • 输入一张多目标图像
  • 图像经过 CNN 网络生成特征图
  • 特征图分两路,一路经过 PRN 得到候选区域(经过 NMS ),另一路继续向后传播。
  • 上一步得到的高维特征图和区域建议同时输入 RoI 池化层,提取对应区域建议的特征
  • 区域特征通过全连接层后,输出该区域的分类得分以及回归后的 bounding-box

五、总结

在这里插入图片描述

查看原文

赞 1 收藏 1 评论 0

CatOneTwo 发布了文章 · 5月13日

一文读懂 YOLOv1,v2,v3,v4 发展史

YOLO 系列算法是目标检测 one-stage 类的代表算法,本文将从 问题背景,创新点等方面比较,了解它们的的发展历程。

一、任务描述

目标检测是为了解决图像里的物体是什么,在哪里的问题。输入一幅图像,输出的是图像里每个物体的类别和位置,其中位置用一个包含物体的框表示。
查看源图像

需要注意,我们的目标,同时也是论文中常说的感兴趣的物体,指我们关心的类别(行人检测只检测人,交通检测只关心交通工具等),或者数据集包含的类别,并不是图像里所有的物体都是目标,比如建筑,草坪也是物体,但他们常常是背景。

从计算机视觉的角度看,目标检测是分类+定位,从机器学习的角度看,目标检测是分类+回归

二、设计思想

目标检测架构分为两种,一种是two-stage,一种是one-stage,区别就在于 two-stage 有region proposal 过程,类似于一种海选过程,网络会根据候选区域生成位置和类别,而 one-stage 直接从图片生成位置和类别。

今天提到的 YOLO 就是一种 one-stage 方法。

YOLO 是 You Only Look Once 的缩写,意思是神经网络只需要看一次图片,就能输出结果。

img

YOLO 一共发布了四个版本,其中 YOLOv1 奠定了整个系列的基础,后面的系列就是在第一版基础上的改进,只为提升性能。

YOLO的检测方法如下:

  • 将输入图像划分为 S×S 网格(grid),比如这里划分成 7×7=49 个 grid,如果目标的中心落入网格单元,则该网格单元负责检测该目标。注意不是整个物体落入单元格,只需要物体中心在即可。

在这里插入图片描述

  • 每个网格单元预测 B(文中 B=2) 个边界框和这些框的置信度得分。这个分数反映这个框包含物体的概率 Pr(Object) 以及预测框的位置准确性 IOU,所以置信分数也由这两部分定义:
  • 每个 bounding box 都要包含 5 个预测值,x, y, w, h, confidence。(x,y)框中心是相对于网格单元的坐标,w 和 h 是框相当于整幅图的宽和高,confidence 代表该框与 ground truth 之间的 IOU(框里没有物体分数直接为 0 )

在这里插入图片描述

  • 因为位置和类别需要同时预测,所以每个单元格除了输出 bounding box 也输出物体的条件概率(该物体属于某一类的概率,当然这些概率以包含对象的网格单元为条件)。每个网格单元输出一个概率集合,不考虑这个 grid 预测几个 bounding box。

在这里插入图片描述

  • 测试阶段,在测试时,我们将条件分类概率与各个框的置信度预测相乘,作为每个框特定于每个类的置信分数(这个分数编码了类别和位置两部分信息)。

与 R-CNN 系列方法相比:

  • R-CNN 及其变体采用 region proposals 而不是滑动窗口法找物体,是一种多阶段方法。调网络的时候需要分开调,运行慢。
  • YOLO 与 R-CNN 相似的地方是在网格单元找可能的边界框,用 CNN 提取特征。不同的是,加在网格单元的空间限制有助于防止同一个目标的重复检测,预测的边界框也少(98 个),还有把多个阶段结合成一个阶段。

三、发展历程

1. YOLOv1

问题背景

之前 two-stage 方法如 R-CNN 把检测问题分成两部分,先生成候选区域(region proposal),再用分类器对区域分类,多阶段训练导致不易优化。

创新点

把检测当作回归问题,用一个网络输出位置和类别,实现了一个 unified system,从检测的角度是 one-stage的

训练流程

和 R-CNN 差不多

  • 首先 ImageNet 1000类 竞赛数据集上对卷积层进行预训练
  • 然后再把网络根据检测任务微调

检测流程

  • 输入一幅多目标图像
  • 将图像划分成多个网格
  • 通过网络得到每个网格的分类概率,以及各网格预测的框+置信度
  • 针对每个框,把概率与置信分数相乘,作为每个框特定于每个类的置信分数
  • 输出位置和类别信息

优点

  • 快。因为回归问题没有复杂的流程(pipeline)。
  • 可以基于整幅图像预测(看全貌而不是只看部分)。与基于滑动窗口和区域提议的技术不同,YOLO在训练和测试期间会看到整个图像,因此它隐式地编码有关类及其外观的上下文信息。因为能看到图像全貌,与 Fast R-CNN 相比,YOLO 预测背景出错的次数少了一半。
  • 学习到物体的通用表示(generalizable representations),泛化能力好。因此,当训练集和测试集类型不同时,YOLO 的表现比 DPM 和 R-CNN 好得多,应用于新领域也很少出现崩溃的情况。

缺点

  • 空间限制:一个单元格只能预测两个框和一个类别,这种空间约束必然会限制预测的数量;
  • 难扩展:模型根据数据预测边界框,很难将其推广到具有新的或不同寻常的宽高比或配置的对象。由于输出层为全连接层,因此在检测时,YOLO 训练模型只支持与训练图像相同的输入分辨率。
  • 网络损失不具体:无论边界框的大小都用损失函数近似为检测性能,物体 IOU 误差和小物体 IOU 误差对网络训练中 loss 贡献值接近,但对于大边界框来说,小损失影响不大,对于小边界框,小错误对 IOU 影响较大,从而降低了物体检测的定位准确性。

2. YOLOv2

问题背景

  • YOLOv1 检测性能低
  • 当前的检测任务受数据集标签的限制(数据集必须有标签或通过分类赋予标签)。但是,标记检测图像比标记分类图像昂贵得多,所以检测数据和分类数据不是一个规模。

创新点

  • 针对第一个问题,使用一些方法提升 YOLOv1 的性能,得到 YOLOv2。
  • 针对第二个问题,提出了 ImageNet 和 COCO 数据集的结合方法,以及联合训练方法,训练 YOLOv2 后得到的模型叫 YOLO9000。

提升性能的方法

  • Accuracy: Batch Normalization, High Resolution Classifier, Convolutional With Anchor Boxes, , Direct location prediction, Fine-Grained Features, Multi-Scale Training
  • Speed: 提出一个新网络 Darknet-19

训练流程
论文提出了一种联合训练算法,该算法可以在检测和分类数据上训练目标检测器。 利用标记的检测图像来学习精准定位,同时使用分类图像来增加其“词汇量”和健壮性。

  • 分类检测数据集结合方法:

    检测数据集的标签少且普通,分类数据集的标签多且具体,如果我们想在两个数据集上训练,就得把它们的标签合并起来。很多分类方法都用一个 softmax layer ,但它的前提是假设所有类互斥,但我们的数据集类别是不都是互斥的(有可能是包含关系,例如狗和金毛犬),所以我们使用了一个多标签模型来组合数据集(无互斥的要求),及使用多个 softmax 。

    大多数分类方法都假定标签采用扁平结构,但是对于组合数据集我们需要层次化的结构。
    ImageNet 标签采用有向图结构。在这里,作者把数据集的结构简化为结构树(hierarchical tree)。

    通过改造图,最后得到一个 WordTree,这样每个节点/标签都有自己的概率,解决了类别之间不互斥的问题,就能在检测集和分类集上联合训练。

  • 联合训练方法:

    把检测和分类数据混合,训练过程中遇到带标签的检测图像,就基于 YOLOv2 整个损失函数进行反向传播,遇到分类图像,只反向传播网络的分类损失。

3. YOLOv3

问题背景

  • YOLOv3 的提出不是为了解决什么问题,整篇论文其实是技术报告。
  • YOLOv3 在 YOLOv2 基础上做了一些小改进,文章篇幅不长,核心思想和 YOLOv2、YOLO9000差不多。

模型改进

  • 边界框预测:定位任务采用 anchor box 预测边界框的方法,YOLOv3 使用逻辑回归为每个边界框都预测了一个分数 objectness score,打分依据是预测框与物体的重叠度。如果某个框的重叠度比其他框都高,它的分数就是 1,忽略那些不是最好的框且重叠度大于某一阈值(0.5)的框
  • 类别预测:和 YOLOv2 一样,YOLOv3 仍然采取多标签分类
  • 多尺度预测
  • 使用新网络 Darknet-53 提取特征

4. YOLOv4

问题背景

  • YOLO 原作者之前宣布退出CV界,YOLOv4 的作者其实不是前三篇 YOLO 的一作
  • YOLOv4 是对 YOLOv3 的一个改进。它的改进方法就是总结了几乎所有的检测技巧,又提出一点儿技巧,然后经过筛选,排列组合,挨个实验(ablation study)哪些方法有效。
  • 值得注意的是文章第二部分相关工作,简直就是目标检测的一个简单综述,阅读该部分,你就能了解模型及方法,如果它提到的每个方法你都了解,说明你在这个方向的研究较全面深入(我没达到)。

框架方法
下面这幅论文中的图介绍了 YOLOv4 检测器的构成及使用的训练方法,这些是经过大量实验选出的性能最好的组合

四、总结

回顾 YOLO 系列的发展,我们可以看出 YOLO 后期没有提出新颖的想法,更重视应用落地。
在这里插入图片描述

查看原文

赞 2 收藏 0 评论 0

CatOneTwo 发布了文章 · 5月13日

面向小白的深度学习论文术语

引言:刚开始看深度学习的论文,会遇到有一些没见过的科研论文术语(例如 state-of-the-art),看得多了才能慢慢理解。

下面我列举的一些论文术语以及评估指标,我刚开始遇到是不太懂的。我结合网络和自己的理解给出合理解释,供参考~

附:

一、论文

1.A-G

Ablation study
直接翻译为消融实验。实际上是一种对比实验,控制变量法。研究哪些部分对网络性能产生,选择一些可能的因素,分别对比去除和加上的网络性能。

An ablation study typically refers to removing some “feature” of the model or algorithm, and seeing how that affects performance.

Anchor
字面意思是锚,CV 中是锚点或锚框,目标检测中常出现的 anchor box是锚框,表示固定的参考框。参考:目标检测中的Anchor

Baseline
翻译为基线,是研究的一个参照物。你以 baseline 为基础,在上面加了一些东西构成新模型,就要看看你的模型比 baseline 的性能提高了多少,你的改进有没有效果。(在 baseline 的基础上纵向比较)

a line serving as a basis

Benchmark
翻译为基准,在测试中可以比较计算机或程序的性能、可靠性的既定参考点,是评价算法好坏的一种规则和标准。(与比较牛的模型 benchmark 横向比较)

an established point of reference against which computers or programs can be measured in tests comparing their performance, reliability, etc.

Backbone
可翻译为骨干(eg. backbone network)

the most important part of something, providing support for everything else

Batch
可翻译为批。模型训练的一次迭代(即一次梯度更新)中使用的样本集。(一个批次的样本数是 batch size)拓展:epoch,batch,iteration

a group of jobs, data, or programs treated as a unit for computer processing

<font color=steelblue size=4>End-to-end</font>
端到端,输入原始数据,输出得到想要的结果,使用一个单独的网络模型训练,不用考虑多阶段处理。(eg. end-to-end learning, end-to-end network)

End-to-end describes a process that takes a system or service from beginning to end and delivers a complete functional solution, usually without needing to obtain anything from a third party.

Ensemble model
可翻译为融合模型,是一种提高模型性能的方法。

multiple diverse models are created to predict an outcome, either by using many different modeling algorithms or using different training data sets. The ensemble model then aggregates the prediction of each base model and results in once final prediction for the unseen data.

Epoch
可翻译为代,使用训练集额全部数据对模型进行一次完整训练是一个 epoch。拓展:epoch,batch,iteration

a particular period of time marked by distinctive features, events

Fine tune
翻译为微调(eg. fine tune a network)

to make very small changes to something in order to make it work as well as possible.

Feature map
可翻译为特征图,指 CNN 中卷积层的输出。

The feature map is the output of one filter applied to the previous layer.

Ground truth
可理解为设定的一个正确的真实值。图像分类中,标签为 ground truth。

In machine learning, the term "ground truth" refers to the accuracy of the training set's classification for supervised learning techniques.

2.H-N

Hyperparameter
超参数。模型参数是根据数据自动估算的,例如权重。但模型超参数是手动设置的,并且在过程中用于帮助估计模型参数,例如学习率。

3.O-T

Pipeline
直译是流水线,论文中会称一些框架为 pipeline,说明这个框架分为几个阶段。

Short connection
shortcut 翻译为捷径。传统的 CNN 在不相邻的层间传递需要经过中间层,但深度残差网络提出在两层之间直接连一个线,跳过了中间层,跳过的这些层就是 short connection,skip connection 就是一种跳跃式传递。

State-of-the-art (SOTA)
可翻译为最先进的,最高水平。

the latest and most sophisticated or advanced stage of a technology, art, or science.

Region of interest(ROI)
可翻译为感兴趣区域,从图像中选择的一片图像区域,里面包含感兴趣的目标。比如一个数据集类别只有人和动物,用这个数据集作目标检测,如果一片区域有这些类别的物体,它才是 ROI,并不是有物体就是 ROI。

samples within a data set identified for a particular purpose

Receptive field(RF)
翻译为感受野(感受域),指的是神经网络中神经元“看到的”输入区域。CNN 的 feature map上某个元素的计算受输入图像上某个区域的影响,这个区域即该元素的感受野。

The receptive field is defined as the region in the input space that a particular CNN’s feature is looking at.

4.U-Z

Without bells and whistles
没有花里胡哨的方法(不添加不必要,冗余的东西)

It refers to non-essential but often engaging features added to a piece of technical equipment or a computer program to make it seem more superficially attractive without enhancing its main function

二、指标

1. CV

FPS
Frames Per Second 的缩写,翻译为“每秒传输帧数”,也就是“每秒中填充图像的帧数(帧/秒)”

AP(Average Percision)
平均精度,指的是所有图片内的具体某一类的PR曲线下的面积。

mAP(Mean Average Precision)
均值平均精度,指的是所有图片内的所有类别的AP的平均值,目前,在目标检测类里用的最多的是 mAP。

IOU(Intersection over Union)
交并比,指的是 ground truth bbox与 predict bbox 的交集面积占两者并集面积的一个比率,IoU值越大说明预测检测框的模型算法性能越好.

Top-1 error
预测输出的概率最高的类别,是否和人工标注的类别一致,如果不一致,此时的概率。常用于 ImageNet 数据集。

Top-5 error
预测输出的概率最高的前5个类别当中,有没有和人工标注的类别不一致,当5个都不一致时错误次数占总次数的概率。

COCO 数据集指标 → 链接
不同条件下的 AP 和 AR,比如不同的 IOU,不同的大小。
论文中会把 AP^IOU=50^ 简写为 AP~50~ ,AP^small^ 简写为 AP~S~ 。
在这里插入图片描述

2. ML

Accuracy
准确率,正确预测的样本数总预测样本数的比值

Precision
精确率,正确预测的正样本数占所有预测为正样本的数量的比值

Recall
召回率,正确预测的正样本数真实正样本总数的比值

F1-Score
F1分数,是统计学中用来衡量二分类模型精确度的一种指标,它被定义为精确率和召回率的调和平均数

查看原文

赞 0 收藏 0 评论 0

CatOneTwo 关注了用户 · 5月13日

stormzhang @stormzhang

GitHub: stormzhang
个人博客: http://stormzhang.com
微信公众号: stormzhang

关注 1161

CatOneTwo 关注了用户 · 5月13日

江南一点雨 @lenve

《Spring Boot+Vue全栈开发实战》作者
公众号:江南一点雨
微信:a_java_boy
专注于Spring Boot、Spring Cloud、前端Vue等技术

关注 2759

认证与成就

  • 获得 4 次点赞
  • 获得 1 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 1 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 5月13日
个人主页被 123 人浏览