R-FCN: Object Detection via Region-based Fully Convolutional Networks

URL:https://arxiv.org/abs/1605.06409 Github:https://github.com/daijifeng001/r-fcn
R-FCN网络设计的motivation是为了增强物体检测网络位置敏感性,提高物体检测的精度和速度。它的整体结构是一个two stage的网络,RPN网络分支生成Proposal Candidate RoIs ,另一个分支基于此做进一步的refine。

R-FCN网络结构设计的核心是Position-sensitive score maps 和Position-sensitive RoI pooling :

  1. Position-sensitive score maps:不妨假设RoI的大小为wxh,那么将RoI均分成k x k个区域,那么每个区域的大小就约为w/k x h/k,对于C分类任务,最后的输出就有kxkx(C+1)个channel,用来表征各个区域的分类信息。而对于候选框的位置,最后的输出是4xkxk个channel。

  1. Position-sensitive RoI pooling:这一部分主要用来整合Position-sensitive score maps的信息得到最终的结果,Pooling公式中的i,j代表kxk个bin的id信息,c为C个类别中的一个,x0,y0为区域的左上角坐标,那么实际上在整个论文中用的是average pooling,作者也提到max pooling也是可以的。

所以经过Position-sensitive RoI pooling之后输出为kxkx(C + 1), 对于每一个类别c最后的打分是kxk个值的均值,因此最后的输出变成C+1维的向量,最后通过softmax得到最后的分类结果。对于bbox框位置的回归也和分类类似,只是channel数是4xkxk,最后得到4维的向量作为位置信息的偏移量。

  1. 实验结果,速度相比较faster rcnn还是有比较明显的提升,检测效果也不错。

R-FCN网络的设计有一个特点,在得到score maps之后Position-sensitive RoI pooling没有引进其他的参数,无疑有助于train和inference的速度,通过划分区域人为的对位置做细分也有实际的意义,但是个人对regression阶段也用同样的操作不是很理解..

阅读全文
UnitBox: An Advanced Object Detection Network

You can find this paper here

Two Main Contributions:

- IoU Loss

在目前的神经网络训练中,L2 Loss是比较常用的Loss函数,它其实就是欧式距离的计算,L2 Loss有两个比较典型的缺点:

  1. 在L2 Loss中,Bounding Box的四个角被看作相互独立的单元,计算Loss的时候都是分别去优化左上角的坐标和Bounding Box的长、宽,但是实际上在检测问题中一个物体的边界是高度相关的。忽略其中的联系也会导致一些badcase,比如预测的Bounding Box可能有一、两条边和Ground Truth的很接近但是整个预测的Bounding Box偏离的比较离谱。
  2. 标准的L2 Loss是没有normalize的, 那么在训练过程中模型就会更加关注大一点的Bounding Box,当然现在也有了很多normalize的方法被提出来。

基于此,论文作者提出了IoU Loss:
IoU Loss

- UnitBox Network Structure

IoU Loss

阅读全文
Build Hadoop && Spark Cluster

单机配置

  • 创建用户和用户组
    groupadd hadoop//新建用户组
    useradd hadoop -g hadoop//把用户加入用户组
    passwd hadoop//为用户hadoop设置密码然后会提示输入密码和确认密码
  • 修改hostname和hosts
    vim /etc/hostname
    vim /etc/hosts
  • 修改用户权限
    vim /etc/sudoers

  • 配置无密码登录
    cd ~/.ssh/ //如果目录下没有这个文件夹,需要执行以下ssh localhost生成这个文件夹
    ssh-keygen -t rsa //生成key,过程中只管敲回车
    cat ./id_rsa.pub >> ./authorized_keys //授权, 有时候非root用户授权会失败,就是直接执行ssh localhost还是会提示输入密码,那么多半是文件权限的问题:chmod 600 .ssh/authorized_keys 修改权限即可

  • 安装Java JDK
    下载Java JDK: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
    设置环境变量: vim /etc/profile,在文件最后加入:
    #Java Env
    export JAVA_HOME=/usr/local/java/jdk1.8.0_162
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin
    使配置生效: source /etc/profile
    测试java环境:
    java
    java -version
    javac
  • 安装Hadoop
    下载Hadoop: http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz
    解压Hadoop到/usr/local/目录下:tar -zxf ~/hadoop-2.6.5.tar.gz -C /usr/local
    mv hadoop-2.6.5/ hadoop
    chown -R hadoop ./hadoop/ //设置权限
    ./hadoop/bin/hadoop version //查看hadoop安装包是否完整
    配置环境变量,vim /etc/profile,在文件的最后加入:
    export HADOOP_HOME=/usr/local/hadoop
    export PATH=$HADOOP_HOME/bin:/$HADOOP_HOME/sbin:$PATH
  • 配置Hadoop
    • 总共配置6个文件: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
    • slaves: 将作为 DataNode也就是Slave机器的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode。分布式配置可以保留 localhost,也可以删掉,让 Master 节点仅作为 NameNode 使用。 本项目让 Master 节点仅作为 NameNode 使用,因此将文件中原来的 localhost 删除,只添加一行内容:162.105.67.62
    • hadoop-env.sh:添加Java JDK路径

      The java implementation to use.

      export JAVA_HOME=/usr/local/java/jdk1.8.0_162
  • core-site.xml:

    fs.defaultFS
    hdfs://HadoopMaster:9000


    hadoop.tmp.dir
    file:/usr/local/hadoop/tmp
    Abase for other temporary directories.

  • hdfs-site.xml:dfs.replication 一般设为 3,但我们只有一个 Slave 节点,所以 dfs.replication 的值还是设为 1


dfs.namenode.secondary.http-address
HadoopMaster:50090


dfs.replication
1


dfs.namenode.name.dir
file:/usr/local/hadoop/tmp/dfs/name


dfs.datanode.data.dir
file:/usr/local/hadoop/tmp/dfs/data


mapred-site.xml:需要将mapred-site.xml.template文件重命名


mapreduce.framework.name
yarn


mapreduce.jobhistory.address
HadoopMaster:10020


mapreduce.jobhistory.webapp.address
HadoopMaster:19888

yarn-site.xml:




yarn.resourcemanager.hostname
HadoopMaster


yarn.nodemanager.aux-services
mapreduce_shuffle

阅读全文
Build Jitamin in CentOS7

环境:CentOS7

  • 安装相关依赖
  • 安装Jitamin:
    • cd <安装目录>如:cd /usr/local
    • 下载jitamin: git clone https://github.com/jitamin/jitamin.git jitamin
    • cd jitamin/
    • cp .env.example .env
    • 配置.env文件:
      • 修改DB_HOSTNAME,DB_USERNAME等数据库属性
    • 安装相关依赖:composer install -o –no-dev
      • 可能会遇到一些problem:
        • 缺失PHP-gd: yum install php70w-gd
        • 缺失PHP-mbstring: yum install php70w-mbstring
        • 缺失PHP-dom: yum install php70w-dom
    • 创建数据库表: vendor/bin/phinx migrate
    • 安装初始数据: vendor/bin/phinx seed:run
    • 确保bootstrap/cache和storage目录可写:
      • chmod -R 0777 bootstrap/cache
      • chmod -R 0777 storage
    • 同步cache:
      • php artisan config:cache
      • php artisan route:cache
  • 配置web服务器:

    • 主要就是配置apache的配置文件
    • 利用yum安装的apache默认配置文件存放于: /etc/httpd/conf/httpd.conf
    • 我们要做的就是在/etc/httpd/conf.d目录下新建jitamin.conf内容如下:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      <VirtualHost *:80>
      DocumentRoot "/usr/local/jitamin/public"
      DirectoryIndex index.php
      <Directory "/usr/local/jitamin/public">
      AllowOverride all
      Options -Indexes +FollowSymLinks +ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all
      Require all granted
      </Directory>
      </VirtualHost>
      • 最后重启apache即可: service httpd restart
  • 可能会遇到的问题

    • 在创建数据库表和插入数据库数据的时候可能会遇到xxx pdo xxxx相关的问题
      • 解决方法
        • yum install php70w-pdo
        • yum install php70w-mysql
    • 这个时候访问xxx.xxx.xxx.xxx(主机地址)可能会出现500 internal error的问题,查看log会发现是显示PHP无法连接上mysql
      • 解决方法
        • grant授权,本机配置时是直接grant all到所有的机器上
    • 继续访问还是会出现500的error
      • 解决方法
        • 最后发现是selinux的问题
        • setenforce 0
        • setsebool httpd_can_network_connect_db=1
阅读全文
Build Gitlab in CentOS7

预配置相关环境

1
2
3
4
5
6
7
8
sudo yum install curl policycoreutils openssh-server openssh-clients
sudo systemctl enable sshd
sudo systemctl start sshd
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

添加GitLab镜像源并安装

1
2
curl -sS http://packages.gitlab.com.cn/install/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce

或者直接从源下载拷贝到服务器上RPM -ivh xxx.rpm 安装: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

配置并启动 GitLab

1
sudo gitlab-ctl reconfigure

可能遇到的问题

  • 安装GitLab出现ruby_block[supervise_redis_sleep] action run
    • 按住CTRL+C强制结束
    • 运行:sudo systemctl restart gitlab-runsvdir
    • 再次执行:sudo gitlab-ctl reconfigure
  • 有可能遇到全部配置好之后网页访问返回refuse
    • 关闭selinux:setenforce 0
阅读全文