ひらめの日常

日常のメモをつらつらと

HHKB Pro JPでKarabiner Elementsを設定する

事の発端

キーボードのリマッピングをしてくれるツールです。
自分のブログでもこの回で紹介しています。
hiramekun.hatenablog.com
ところが、先日HHKB Pro JPキーボードを買って設定したところ、以下のキーが押しても反応しなくなりました。

  • 英数キー
  • かなキー
  • 右command

結論と解決

専用ドライバのアンインストール、Karabiner Elementsのアンインストールなど試しましたが一向に状況は改善されず、泣く泣くKarabinerを使うことを諦めようと思った時でした。

同じ悩みを持った人のissueをKarabiner Elementsで発見!
For HHKB Professional JP keyboard, "right-cmd" and "lang" keys are not detected
f:id:thescript1210:20180318152734p:plain

この画像のようにSimple Modificationを設定したところ、めでたく上の3つのキーを認識してくれるようになりました。
f:id:thescript1210:20180318152907p:plain

Sierraで機械学習時に用いる物体検出用アノテーション作成

物体検出用データセット

概要

SSD, YOLO, Faster R-CNN等、物体検出のディープラーニングアルゴリズムは多々ありますが、それらの多くが学習時に「imagenetの重みで初期化→PASCAL VOCのデータセットで学習」という流れを踏んでいます。

PASCAL VOCは、The PASCAL Visual Object Classes Challenge 2007 (VOC2007) Development Kitに各アノテーションの説明が書いてあります。

データセットの例

アノテーションxmlファイル形式で、以下にその一部を挙げます。これは鳥が表示されている画像ですね。 大事なのは、どこに何が位置しているのかをきちんと説明できるフォーマットになっているところです。
f:id:thescript1210:20180318122852j:plain

  • 物体のクラス名(name)
  • 物体の座標(bndbox)
  • 写真そのもので判断できるか(difficult)
<annotation>
    <folder>VOC2007</folder>
    <filename>000040.jpg</filename>
    <source>
        <database>The VOC2007 Database</database>
        <annotation>PASCAL VOC2007</annotation>
        <image>flickr</image>
        <flickrid>97167996</flickrid>
    </source>
    <owner>
        <flickrid>ResQgeek</flickrid>
        <name>?</name>
    </owner>
    <size>
        <width>500</width>
        <height>332</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    <object>
        <name>bird</name>
        <pose>Right</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>1</xmin>
            <ymin>52</ymin>
            <xmax>384</xmax>
            <ymax>290</ymax>
        </bndbox>
    </object>
</annotation>

自作のデータセットを作る

なぜ作る必要があるのか

VOCのデータセットにクラスがあればいいのですが、必ずしもあるとは限りません。
例えば、トラの物体検出を行いたいと考えた時に、トラのデータセットは存在していません。

その時は、自分で画像に対してbounding boxを作って1画像に対して1つのxmlファイルを作成しなければなりません。そのツールとして「物体検出用の画像アノテーション正解データ作成に便利なツール」で取り上げられていたものが見つかりました。
tzutalin/labelImg
f:id:thescript1210:20180318123606p:plain 手動で囲った結果を自動的にPASCAL VOCと同じ形式のxmlファイルとして出力、保存してくれます。

インストール

インストールですが、前述のサイトの通りに行ってもうまくいきませんでした。

$ brew install qt
$ brew install pyqt
$ make qt4py2
make: *** No rule to make target `qt4py2'. Stop.

こちらのissue(Installation in macOS SIerra: No rule to make target qt4py2. Stop.)と同様のエラーが出てmakeできません。pythonのversionやqtのversionを変更していじってみましたが、同様のエラーが出ます。

時間を取られすぎていたので、下のこちらの方が提示してくれているパッケージをインストールし、アプリとして使いました。
jiyeqian/labelImg labelImg_qt5py3_mac_latest
f:id:thescript1210:20180318125127p:plain

エラーが出ている理由をきちんと突き止めてはいない(3/18現在、githubのissueもopenのままです)ので、わかりしたいアップデートしたいと思います。

データ前処理で使うLinuxコマンドをまとめる

コマンドで分析する理由

データを処理するときに、やろうと思えばfinderから確認したり、エクセルで開いたりすることはできます。ですが、非常にファイルが大きくなり数GB程度にもなると、GUIで確認するのは非常に困難です。
実際に自分も1GB程度のデータが書き込まれたcsvファイルをエクセルで開こうとしましたが、エクセルがカクカクしてろくに作業することもできませんでした。

そう言った意味でも、CUIからデータを閲覧、操作できるようにしておきましょう。

ファイル閲覧

  • cat:ファイルを閲覧する。ファイルの中身全てがコマンドに表示されるので、大きなデータだと非常に読みにくくなります。
  • head:ファイル先頭10行表示する。
  • tail:データをファイル末尾10行表示する。
  • less:ファイルの中身を1画面後のに表示するコマンド。

文字コードの確認, 変更

①現在の文字コードを調べる
env | grep LANG で、現在の環境を読み込み、その中からgrepコマンドで文字コード設定のもののみを抽出します。

nkfコマンドを使う

  • ファイルの文字コードを確認する
    nkf -g hoge.csv
  • ファイルの文字コードUTF-8に変更して別ファイルに書き出す
    nkf -w hoge.csv > hoge_utf-8.csv

ここで、別ファイルに書き出す理由は、データ加工を間違えたときに元データからやり直せるようにするためです。

データの加工

①データを取得する
curl -s http://hoge > hoge.jsonと打って、APIからデータをダウンロードしてきます。

②ファイルを確認する
jsonファイルを取得したとします。jqコマンド(別途ダウンロードが必要です)を使うと、jsonファイルが見やすくなります。

# 例)hoge.jsonファイルを、色付きで行番号もつけて閲覧
$ json . hoge.json -C | less -NR

③データの加工

  • sed:文字列の置換や行の削除を簡単に行えるもの。
# 例)1行目から26行目まで削除する。
$ sed -e '1, 26d' hoge.csv > hoge_deleted.csv
  • awkcsvやtsvに対して、必要なデータだけを抽出するのに便利なもの。
# 特定の条件を満たした対象に対して処理ができる。
$ awk -F 区切り文字 '条件 {実行文}' ファイル名' 

参考

こちらの本を参考にしました。

データサイエンティスト養成読本 登竜門編 (Software Design plus)

データサイエンティスト養成読本 登竜門編 (Software Design plus)

10分でtmuxコマンドをまとめる

tmuxとは

端末多重化ソフトウェアと呼ばれます。pc内に仮想端末を立ち上げることができます。

機械学習をサーバーで走らせる時などは必須で、「sshログイン→tmux立ち上げる→学習走らせる→sshログアウト」としても、サーバー上で立ち上げた仮想端末が動き続けているので学習が止まることはありません。のちにログインしてもう一度その仮想端末にアタッチすることで、以前アタッチした時の状態の端末に入ることができます。

こちらの記事のtmuxとはという項目がとても参考になりました。
tmuxを使い始めたので基本的な機能の使い方とかを整理してみた

tmuxコマンド

# tmux新規セッション開始
$ tmux

# セッション名の名前のついたtmuxの仮想端末を新しく立ち上げます。
$ tmux new -s [セッション名]  

# セッション一覧表示
$ tmux ls

# セッションを再開する
$ tmux a

# セッションを名前をつけて再開する
$ tmux a -t [セッション名]

プレフィックスキーを用いた操作

デフォルトはctrl + bで、これを押した後に入力することで以下の操作が可能になります。

# セッションからデタッチ
d

# 横にペイン分割
%

# 縦にペイン分割
"

# ペイン間の移動
o

# ペインの破棄
x

# ペインの入れ替え
ctrl + o

# コピーモードに入る(履歴を遡ることができるようになります。)
[

【感想】日本人の9割が知らない遺伝の真実

日本人の9割が知らない遺伝の真実

はじめに

この本は、(若干タイトルで釣ろうとしている感が否めませんが)遺伝の影響について事前知識のない人にもわかりやすく説明されています。

以下はAmazonに載っていた概要です。知能への遺伝のきよは日本では若干タブー視されているかと思いますが、その話題を中心として取り上げていることがわかりますね。

  • いま注目の「行動遺伝学」からわかってきた、遺伝と環境、才能と努力、本当の関係!
  • 教育学では、遺伝と学力の関係を無視してきたが、「知能指数は80%遺伝」という衝撃をどう捉えればいいか? 身長や体重など身体的な特徴だけではなく、IQや性格への遺伝的影響も大きいことがわかってきた。ならば、勉強することには意味がないのか? しかし、遺伝的なものが自発的に発現するとは限らず、教育環境も重要である。

筆者の安藤寿康さんは、行動遺伝学の第一人者として紹介されています。

印象の残ったところメモ

遺伝の作用

人間のほとんど全ての心理的側面には遺伝が無視することのできない大きな影響を与えている。

そもそも知能とは、「問題解決能力」「観察した事柄から法則性を抽出し、それを別の事柄に適用する論理的な能力」などと説明されている。
知能には、2つの大きな立場がある。

  1. 多重知能理論で、知能には複数の種類があるという立場。
  2. 一般知能理論で、頭の良さのベースとなる「一般知能」が存在しており、この能力に大きな個人差がある。

能力とは

あくまでも、どんな能力も社会的に認知されて初めて「能力」として定義される。

遺伝作用の実験方法

実験方法は、
遺伝子が100%同じ一卵性双生児と50%類似している二卵性双生児。同じ環境で育った一卵性双生児と二卵性双生児の類似性を比べて、もし一卵性双生児の方が似ているのであれば、それは遺伝の影響によるものだと考えられる。

何を共有環境として扱うか?

青年期のIQの個人差は、遺伝54%、共有環境19%、非共有環境27%によって作られている。
何が共有環境として働き、何が非共有環境として働くのかは、状況によって異なる。一見同じ場に居合わせて同じものを見ていても、違った意味づけをしているかもしれない。

遺伝の影響の割合

知能や性格、そして様々な分野における才能についても、遺伝は大きな影響を与えています。

  • IQ:50%
  • 勤勉性:50%
  • 数学:85%
  • スポーツ:80%

親と子

親の特徴がそのまま子供に受け継がれるわけではない。

勉強するのは無駄か?

能力は平等に配分されているわけではなく、各々が到達できるレベルには限界があるとされています。

どの領域でどの程度のレベルに行けるかどうかが、各人の遺伝的な素養のよって、ある程度規定されている

感想

遺伝と学力については自分の興味分野でしたので、スイスイ読み進めることができました。学力の経済学と読み比べるのもいいかもしれません。
遺伝ってこんなに作用しているんだという驚きと、その遺伝を見つけ出す為にも様々な経験をして遺伝的素養を発現させるのが大切だという筆者の言葉はとても納得のいくものになりました。

fish shellでsource activateが使えない時の対処法

fishでsource activateできない

anacondaをインストールして、fish shellで仮想環境を立ち上げようと、source activate envをしました。

すると、次のようなエラーが、、、

>> source activate chainercv
source: Error encountered while sourcing file 'activate':
source: No such file or directory

解決方法

config.fishに次の一行を追加して解決しました。

source (conda info --root)/etc/fish/conf.d/conda.fish

次に、configファイルを読み込み直します。

 source ~/.config/fish/config.fish

すると、activateコマンドを使って仮想環境を立ち上げることができました。

[/Users/hiramekun]
>> activate chainercv
[/Users/hiramekun]  (chainercv)
>>             

こちらのリンクを参考にしました。