アプリとサービスのすすめ

アプリやIT系のサービスを中心に書いていきます。たまに副業やビジネス関係の情報なども気ままにつづります

機械学習(ディープラーニング)画像認識・処理のための画像データ数値化&増やし方

今回は機械学習ディープラーニング)で画像データを収集し、それを増やす方法について書きます。

最終的にはDCGANで何かしら作成することを考えており、今回はDCGANのデータセットとして「より少ない手間で、よりたくさんのデータを作成する」をモットーに、画像データ収集法とそのデータを増やす方法(人工データ合成)をまとめておこうと思います。

目次
・画像データ収集方法
・画像のリサイズとラベル付け
・画像データを増やす方法

f:id:trafalbad:20170705152452j:plain



画像データ収集方法
画像のURLを集める
まず画像を集めるために、どっかしらのサイトからwebスクレイピングで画像のURLを収集します。一般的なサイトから画像のURLを取得する方法で、方法はいくつかある。
1.手作業で集める
2.サイトからスクレイピングする
3.Google Custom Search APIで画像を取得する

自分は手作業で集めました。スマホでポンポン保存して、AirDropでPCに送った。2のサイトからスクレイピングは限定的なので、3のGoogle Custom Search APIでのGoogle検索した画像をスクレイピングする方法がメジャーなようです。


ただ画像に著作権がある場合は、慎重になった方が良さそうです。

今回はスクレイピングした画像のURLを取得するケースを考えます。URLから画像を一括で取得するので、フォルダにURLの一覧を保存して、まとめておきます。



URLを画像に戻す
次はターミナルコマンドでフォルダのURLを画像に戻します。ターミナルから、

ls  
cd [保存場所]

でフォルダの場所に移行したら、下記のコマンドを入力します。

cat フォルダ名 | wget -I -

これでフォルダ内のURLが画像に変換され、downloadsに保存されます。一枚一枚保存されますので、新たなフォルダを作って保存し直します。


画像のリサイズとラベル付け


macで画像のリサイズ
次は画像の大きさがバラバラなので、縦、横を同じの正方形にして、好きなサイズにリサイズ。

今回は見やすさも考えて、128×128pxにしました。opencvpythonでリサイズもできますが、mac OSにフォルダ内のデータを一括してリサイズする機能が付属していますので、こちらを使います。

詳しくはこの記事を参照
これでフォルダ内の画像は一括してリサイズされます。



画像のラベル付けについて
画像にラベル付けする作業はとても面倒くさいので、それを簡単にする方法がいくつかあります。

方法1.ruby on railsのアプリを用いた方法
ruby on railsで画像を見ながらラベルをつけるアプリを作成しました。

trafalbad.hatenadiary.jp


画像を確認しながらラベル情報を入力するというのは普通は無理なんですが、それ用のrailsアプリを作った。

画像収集のレギュラーな方法としては、webスクレイピング→ラベル付けの順番でやるのが普通だと思います。


方法2.DCGANで同一カテゴリの画像を生成する方法
これはイレギュラーな方法です。今度試そうと思ってるんですが、DCGANでラベルのカテゴリ毎の画像を作成させる方法です。ラベルの種類が10個あったら、カテゴリ毎にDCGANに画像(つまり10種類の画像)を生成させ、データを増やそうと言うわけです。

まず少量のデータセットをカテゴリ別に作り、次にDCGANでカテゴリ別の画像を大量に作成させます。




こちらは実際にやってる人は見たことないんですが、DCGANの使い方としては非常に有能ではないかと思ってます。なぜなら、ラベル付けも必要ないし、データ収集も少量で済むからです。

本記事ではこの方法は触れませんが、別記事でDCGANの活用方法としてデータセットを増やすことについて触れたいと思ってます。



画像データを増やす方法
画像のデータが集まったら画像を増やしていきます。具体的にはopencvで左右反転させたり、色彩を淡くしたりする方法。画像をベクトルに変換することで、機械学習のデータとしては十分、学習データに値するものになります。


opencvで画像を数値化
まず、opencvのインストール(方法はこちらを参照)。フォルダ内の相対パスを取得して、画像を数値に変換します。

from PIL import Image
import os
import _pickle as cPickle
import os
import sys
import pickle
import numpy as np
import cv2, matplotlib
import numpy as np
import matplotlib.pyplot as plt

path1="フォルダパス"
images = os.listdir(path1)#画像の読み込み
img_batch=[]
for i in images:
    img_batch.append(cv2.imread(path1+'/'+i))#フォルダ内の画像を数値化

今回は変換した画像は300枚。各画像は(128, 128, 3)の形式です。画像を表示するときには、そのまんまmatplotlibで表示できます。



画像の増やす
変換した画像300枚を元手に画像を増やして行きます。今回はQiitaの画像水増しテクニックを使います。opencvで淡くしたり、することもできますが、画質が粗くなるケースがあるので、画像の質を保ちながら画像を増やすテクニックを使います。

方法はねずみ算式に増やしていきます。まず素画像300枚に反転をかけ、600枚に増やします。次に600枚にコントラスト調整をかけ、1200枚にします。この方法でねずみ算式に増やし、200枚の画像を、5000枚に増やすことができました。

本当はもっと増やせたんですが、128pxだと見易さの兼ね合いから平滑化など、の処理は省きました。
画像が見やすいものならQiitaの記事の通りにやって次のようにねずみ算式に300枚の画像を18000枚に増やして問題ないはずです。

コントラスト調整(300×2)
Salt&Pepperノイズ(600×2)
ガンマ変換(1200×2)
平滑化(2400×2)
ガウス分布に基づくノイズ(4800×2)
反転(9600×2)

最後に「反転」をかけるのがコツです。こうすることで、より多くの画像の鮮明度を保持することが可能になります。


matplotlibで100枚を可視化してみる
tensorflowでも複数の画像をまとめて表示する方法があり、そっちの方が見やすいんですよね。ただ、今回は一般的なmatplotlibを使って可視化して見ます。今回は元画像100枚一気に表示させてみます。
f:id:trafalbad:20170705185811p:plain


ピクセル数が小さいのと表示数が多いので、小さく見づらい。

改良の余地ありですが、今のところはどんな画像かを確認するためのもの。なので、そんなに凝らなくていいと思ったので100枚一気に表示させてみました。

pos = 1
for idx in img_contrast[:100]:
    plt.subplot(10, 10, pos)
    plt.imshow(idx.reshape(64, 64,3))
    pos += 1
plt.show()  #淡くしたの100枚可視化



今回は画像のデータを収集&増やす方法を書きました。まあopencvを使えば簡単なのですが、案外まとめてあるサイトがなかったのでまとめました。


この画像を元にDCGANで何かしてみようと思ってます。特にデータセットを増やすことができたら、かなり有用性があるのではと思いますが。そこら辺も含めてDCGANについてはまた別記事で書くつもり。

医薬翻訳で使える英文フレーズ18選-英訳・日英翻訳例文集

日英翻訳(英訳)は英借文とも呼ばれるように、どれだけ良質の英文を覚えてるかが重要になる。特に医薬翻訳のような定式的な文章には、借文の効果はかなり高い。
参考書の英文もいいが、今回は市販では出回ってない翻訳試験の”TQE”と、翻訳学校のテキストの中から「日英翻訳に使える秀逸な表現」が載ってる良質な英文をまとめていく。

英訳する際の表現の幅を広げるのに使えるはずだ。

f:id:trafalbad:20170703143530j:plain


前置詞形から始める文章

1

For effective treatment of chronic pain in cancer patients with analgesics, physicians must follow the basic principles shown in Table 4

がん患者の持続性の痛みを鎮痛薬によって効果的に治療するには、表4に示す基本原則を守らなければならない


文頭を前置詞から初めて、主文を後につなげる表現。主語を節約できるので、極めて効果的だ。forだけでなく、現在進行系、withなど、文頭で使える前置詞は多い。こうした文頭を前置詞から始める表現はかなり使えるので、ぜひ覚えておきたい。




命令文から始まる文

2

Ensure that measures to prevent the adverse effects caused by analgesics are put in place

鎮痛薬の副作用に対する防止策を確実に実施する

よく、マニュアルなどでは「〜する」と主語なしの文章があるが、こういうときは命令文を使う。また主語がない事実の伝達にも命令文は使えるので覚えておきたい。




非制限用法の有効活用

3

Aspirin and other NSAIDs have a peripheral analgesic effect by suppressing the biosynthesis of prostaglandins (PGs), which are pain-inducing substances produced at sites of tissue damage caused by disease or injury

疾患や外傷などによって組織損傷を受けた局所に発痛物質のプロスタグランディン(PG)が生産されるので、アスピリンや非ステロイド性抗炎症鎮痛薬がPGの生合成を抑制することにより、末梢受容レベルでの鎮痛作用を示す



これは「PG」に上手く関係代名詞の非制限用法を用いてある例。

日本語で表現すると長くなってしまう文も関係代名詞(非制限用法)で上手くまとめてあるのポイントに注目したい。よく咀嚼して訳すテクニックを盗もう。



接続詞を上手く用いた文

4

Patients generally like this method because it does not cause excessive sweating while providing a stable analgesic effect

この方法も、発汗が少なく、鎮痛効果が安定しているので、患者に好評である



文中の「この方法」は前文で命令形等で具体的に示すのが普通だ。この文ではbecauseやwhileなど、接続詞をとても上手く使って、表現している。

接続詞として使われるものは限られている。医薬分野では参考書などで体型的にまとまっているので、まとめて知っておきたい。


上手く事実系列で情報を伝達してる文

5

When metabolized in the body, 10% of codeine phosphate is converted into morphine, thereby producing its analgesic effects

体内で代謝され1/10がモルヒネとなり、効果を発揮する


「Aのあと、BしてCになる」という風に、A→B→Cと物事が順番に起こっている文を「時時系列文」というが、この文章はその表現がとてもそれが上手い。

この文の他にもAfter A, B, C and D (A〜Dは主語動詞を含む文)のように使う例もある(後述)。


日本文の1文を英語では2文で表現した例

6

At a dose of 30 mg, oral codeine has an analgesic effect almost equivalent to that of 650 mg of aspirin. The combination of the two medications produces an analgesic effect equal to or greater than 60 mg of codeine

経口コデイン30mgはアスピリン650mgとほぼ同等の鎮痛効果があり、両者を併用すると、その鎮痛効果はコデイン60mgと同等ないしそれ以上となる


この文章では、日本語では1文だが、英語では上手く2文で表現している。

日本語で長い文章を英語では、句読点で区切り、2文で書くことも多いので覚えておきたい。


共通項を上手く使った文章

7

Buprenorphine should generally be administered via the rectum to adult patients at a dose of 0.4 mg in postoperative use and at a dose of either 0.2 mg or 0.4 mg for treatment of a variety of cancers

通常、成人には、術後使用においてはブプレノルフィンとして1回0.4mg、各種がんにおいてはブプレノルフィンとして1回0.2mgまた0.4mgを直腸内に投与する


・「『通常、成人には、術後使用においては』、『を直腸内に投与する』」の部分を共通項
・その間の表現をandで繋げる部分
に分けて、上手く表現している。

この文のように「共通項の部分」と、「andで繋げる部分」を上手く分けて表現している英文は借文にもってこいだ。


「the fact that〜」を使った文章

8

The fact that the average number of reported cases per month is consistently about 50 suggests that the situation cannot be ignored in clinical practice

毎月平均50件前後が恒常的に報告されており、臨床現場で無視できない状況となっている事が示唆される

「SVであることはVである」という風に、「主語動詞を含んだ文章を主語にする」表現は珍しくない。

この文はそれを「the fact that〜」で上手くまとめている。



時時系列で情報を伝達している文その2

9

After a β(beta-)lactam antibiotic has attached to the penicillin-binding protein, the transpeptidation reaction is inhibited, peptidoglycan synthesis is blocked, and the cell dies

Bラクタム薬がペニシリン結合タンパク質に結合すると、ペプチド転移反応が阻害され、ペプチドグリカンの合成が阻害されて菌体が死滅する

こちらは、5と同じように時時系列の表現がとても上手い文だ。

事実系列の表現方法はたくさんあるが、5と9で紹介した2つはかなりよく使うので、紹介した。


無生物主語

10

This drug is generally well tolerated

本剤は一般に忍容性が良好である


医薬翻訳の無生物主語の文で、よく見かける表現。無生物主語は英語特有の表現なので、何を主語にして、動詞に何を使うかをよく考えなければならない。この文ではそれがよくわかる。
この文章は「本剤」を主語にして、「良好である」を動詞にした例。




減少値表現

11

The intravenous injection of the drug decreased the patient's urine specific gravity by 0.013 to 1.011

薬剤の静脈注射によって、患者の尿比重は0.013低下し、1.011となった


「0.013低下し、1.011となった」をby, toで上手く表現した文。このように表現が英語特有のものも多いので、見かけたら定期的にストックしておきたい。




分詞構文

12

The results of urinary protein examination indicated 3+ in the acute nephritis patients, compared with negative in the healthy humans

尿検査の結果、急性腎炎患者の蛋白は3+であったのに対し、健常人では陰性であった



分詞構文は接続詞を用いず、かつ主語を省略できるので、簡潔な文章を書きたいときは必須だ。この文章は平易ながら、分詞構文が使われているので参考にしたい。


形容詞、動詞を4つ使った連続文

13

Myocardial infarction results from occlusion or sudden blood flow decrease in the coronary artery

心筋梗塞の原因は、冠状動脈の閉塞または急激な血流減少である


「急激な血流減少」を「sudden blood flow decrease」と上手く表現している。

形容詞と動詞を並べる表現は多いが、この文は4つの単語を上手くひとまとめにしている。是非英訳の際に真似したい表現。



関係代名詞の代わりにカンマ挿入の修飾文

14

Coronary heart disease, frequently accompanied by hypertension, is responsible in more than 50 percent of cases

冠動脈性心疾患は高血圧を伴っていることが多く、50%以上の症例の原因となっている

普通なら関係代名詞を使うところだが、主語「Coronary heart disease」の後で上手くカンマで挟んで修飾している。

関係代名詞を用いる代わりに、「カンマを挟んで名詞を修飾する表現」は英訳では欠かせない。



関係代名詞を上手く使った例

15

Like enterococci that do not produce penicillinase, E.faecalis strains that produce penicillinase are not susceptible to antistaphylococcal penicillins

ペニシリナーゼを産生しない腸球菌と同様、ペニシリナーゼを産生するE.faecalis株は抗ブドウ球菌ペニシリンには感受性を示さない


これは文中に関係代名詞を2つ用いている文。関係代名詞は多用すると混乱を招くので、使うなら1文につき2つに留めておきたい。



resulting in、などの、また、等の頻出表現を用いた文

16

The covalent alkylation of DNA is mutagenic and carcinogenic, resulting in long-term serious complications including detrimental effects on spermatogenesis and oogenesis, as well as predisposing to the development of secondary leukemias

DNAの共有結合形成によるアルキル化は突然変異誘発性·発癌性であり、精子形成や卵子形成を障害するなど長期にわたる重篤な合併症を誘発し、また、二次性白血病を易発症する


文章の途中で「resulting in、including、as well as」の表現に注目してほしい。

これらは文章をつなげる上でかなり頻繁に使われる。特にresulting inは結果を表す際に接続詞の代わりに使えるので、覚えておくだけで表現の幅が大きく変わる。

文章で便利な接続表現があったら是非ストックしておこう。


toで時時系列を表現した文

17

Gene therapy is essentially the transfer of nucleic acids (DNA, RNA) into target cells to correct or disrupt a pathologie process

遺伝子治療は、本質的に、核酸(DNA, RNA)を標的細胞に導入して、疾患のプロセスを修正または阻害することである



翻訳の泉でも紹介されているが、toは「〜するため」だけではなく、「〜して、〜した」という風に時系列の表現に使われる。

ここでは「導入して〜阻害すること」といった時系列の表現に使われている。英訳の際には覚えておくとかなり便利。



コロンを用いた事実列挙

18

To date, three separate strategies have been pursued: replacement and knockout gene therapy, suicide gene therapy, and immunomodulatory gene therapy

現在のところ、置換およびノックアウト遺伝子治療、自殺遺伝子治療、免疫調節遺伝子治療の3つの戦略が進められている


コロン(:)は事例を列挙する際によく使われる。ここでは「3つの戦略」が上手くコロンの後に並んでいるのがわかると思う。

コロンは使い方を覚えてるかおくとかなり便利だ。医薬翻訳ではカッコ()やセミコロン(;)とともに多用される表現なので、是非覚えておきたい。



今回はTQEや翻訳学校のテキストから英訳で頻繁に使われる表現を載せた良質の英文を選んだ。英訳では例文を覚えておくだけで、スピードも表現の幅も全然違うので、是非借文用の英文をストックしておきたい。

医薬翻訳の必要な英文表現は下記の本にかなり詳しく書いてあるので、興味のある方は是非手にとってほしい

ruby on railsで機械学習用の画像にラベル付けするアプリを作ってみた

普段は機械学習を学んでいてpythonを使っていますが、データ画像にラベル付けをする作業がめんどいのでラベル付け専用のアプリをruby on railsで作成しました。

rails初心者ですが、Githubオープンソースから自力でアプリを動かせるまでにしたこと、またそれをいじくった部分のアプリのコードを紹介しようと思います。

目次
・アプリの概要
・実際にアプリを作ってみた
・いじくった部分のコード

f:id:trafalbad:20170630095800j:plain



アプリの概要
今回作ったのは、機械学習用のデータセット(特に画像)にラベル付けするためのアプリです。機械学習ではデータにラベルをつけていくんですが、画像の場合、画像を見ながらラベルをつけるという作業が非常に面倒くさい。

そこでアプリで画像を見ながら、ラベルを入力できるものを作成しました。

参考ソースコードhttps://github.com/ryo813/tegaki_recog


f:id:trafalbad:20170630095817p:plain

今回アプリを作るまでにやったこと


学習
ほぼオールマイティの人気サイト「ドットインストール
ruby入門(全26回)

・ruby on rails4入門 (全28回)
をやりました。一通り動画を見た。その後、アプリを作りながら、ルーティングやコマンドなどわからないところは復習する感じで何度も見ました。基礎的なことがよくわかるので、オススメです。あと書籍が一冊手元にあれば十分。自分が使ったのはこれ





パーフェクト Ruby on Railsもオススメらしいので、どちらか1つ手元にあれば、後はネット上の情報で十分です。



使用環境
ruby 2.4.0
ruby on rails5.0.0
OS:mac book pro
DB:SQlite
環境:cloud9

htmlの代わりにslimを使いました。(インストールはこちらを参照)



コードの役割理解

・各モデルの役割の理解
モデルが3つ(Image、TmpImage、TextBlock)あるので、その役割を理解。

・controllerのアクションの理解
controller内のアクションを解析すれば、そのアプリがどのようにして動くのか知れるので解読

・ルーティングの理解
名前空間とか、結構突っ込んだ内容だったので、ルーティングも必須

・viewsの理解
controllerの内容を反映するコード。メイン画面とかダウンロード画面など理解しておくのに必要


だいたいmodel、controller、views、ルーティング(routes.rb)の理解は鉄板ですね。逆にこれさえわかれば、後は雛形作ってエラーがでたら対処していけば作れるでしょう。



実際にアプリを作ってみた
実際にGithub内のコードから作ってみました。ただ欲しいのはラベル情報だけなので、画像のxとy成分のラベル情報はいらない。そこでTextBlockのx1、x2、y1、y2に関するところは削ってあります。

Dir.foreachでディレクトリから画像を持ってくると順番通りにならない。そこで画像の名前を1から始まる番号順に変えます。そうすることで、先頭から順番に表示できるように改良してあります。

*まず始めに設計図を作る
modelのテーブル、カラム、データ型はきちんと区分けしておく必要があります。設計段階でこれらがおざなりになっていると、後で誤作動が起きても「手遅れ」なんてことも多いです。



実行手順

あとは作るだけです。簡潔に手順だけまとめるとこんな感じ

1.gemfileでtherubyracerとslimをbundle install

2.modelの作成

3.controllerの作成

4.ルーティングの整理

5.viewsをいじる

6.mkdirでcontrollerとviewsにimageディレクトリを作成してimageと紐付け

7.asset内に画像を入れる


ここまでで、一通りアプリ自体は完成。
あとは
image/resetにアクセス→ラベル情報入力→image/downloadにアクセスでダウンロード→完了

で出来上がりです。
f:id:trafalbad:20170630113344g:plain

rails初心者だけど、かなり基礎から学べたので、オープンソースのみで動くアプリを作ってみると得られるものはデカイです

自分は2週間ぶっ続けでやり通しましたが、1ヶ月分のインプットとアウトプット量の学習ができた感があります。
面倒くさいけど、オープンソースから実装してみるというのは、費用対効果として非常に有益ではないかと思います。


いじくった部分のコード
3つのmodel

#Image
filename: string
is_complete: boolean
is_none: boolean

#TextBlock
image_id: integer 
text: string
image: references

#TmpImage
filename: string 
image_id: integer
#projects_controller.rb
class Image::ProjectsController < ApplicationController
    
    def index
      tmp = TmpImage.first
    @image = tmp[:filename]
    end
  
  def register
    pos = params[:pos]
    text = TextBlock.create(
      image_id: TmpImage.first[:image_id],
      text: pos[:text])
    redirect_to root_path
  end
  
  # *** 前の操作を取り消すメソッド ***
 def delete
    TextBlock.last.delete
    redirect_to root_path
 end
 
 # *** 次の画像に移動するメソッド ***
  def next
    # 現状の画像を完了に
    tmp = TmpImage.first
    image = Image.find_by(filename: tmp[:filename])
    image.update(is_complete: true)
    # 新しい画像に切り替える
    fily = Dir.foreach("app/assets/images/").to_a
    files=fily.sort_by{|x| File.basename(x, File.extname(x)).to_i}
    files.each do |file|
      next unless %w(.jpg .png .jpeg).include?(File.extname(file))
      # ファイル名が既に書き込まれていないか確認
      db_files = Image.where(filename: file)
      if db_files.empty?
        image = Image.create(filename: file)
        TmpImage.first.update(filename: file, image_id: image.id)
        break
      end
    end
    # トップページへ遷移
    redirect_to root_path
  end
  
  # *** ダウンロードページ ***
  def download
    respond_to do |format|
      format.html
      format.csv do
        filename = 'recognition_result'
        headers['Content-Disposition'] = "attachment; filename=\"#{filename}.csv\""
      end
    end
  end


  # *** リセット(初期化)用のページ ***
  def reset
    # データベースの中身を削除する
    Image.delete_all
    TmpImage.delete_all
    TextBlock.delete_all
    # 最初の画像を指定する ※ サンプル画像以外の場合はこちらを書き換え
    image = Image.create(filename:"00asfs1.jpg")
    TmpImage.create(filename:image[:filename], image_id: image.id)
    redirect_to root_path
  end
end
#download.csv.ruby
require 'csv'
CSV.generate do |csv|
  field_names = %w(id filename text )
  csv << field_names
  TextBlock.all.each do |t|
    record = field_names.map do |field_name|
      case field_name
      when "filename"
        Image.find(t.image_id).filename
      else
        t[field_name]
      end
    end
    csv << record
  end
end.encode('CP932')
#index.html.slim
div.top-title
  div.left-button
    = link_to "前の登録を取り消し", image_delete_path, method: :delete, data: {confirm: "取り消しますか?"}, class: "btn btn-danger"
  div.right-button align="right"
    = link_to "次の画像へ", image_next_path, method: :post, class: "btn btn-warning"

div.float2
  div#main-image
    = image_tag @image, id:"image, :size => '100x100'"
    
div.float2
  div.form
    = form_for(:pos, url: image_register_path, method: :post) do |f|
      div.form-group
        = f.label :text, "3.テキスト"
        = f.text_area :text, class:"form-control", style:"height: 200px;"
      div.form-group
        = f.submit "登録", class:"btn btn-primary"

    div
      = link_to "リセット", root_path
      
javascript:
  count = 1  // ボタンで使うカウンター
  document.getElementById( "main-image" ).addEventListener( "click", function( e ) {
     // マウス位置を取得する
     var mouseX = e.pageX ;  // X座標
     var mouseY = e.pageY ;  // Y座標

    
  } ) ;
#routes.rb
Rails.application.routes.draw do

namespace :image do
    post 'register' => 'projects#register'
    post 'next'     => 'projects#next'
    get  'reset'    => 'projects#reset'
    get  'download' => 'projects#download'
    delete 'delete' => 'projects#delete'
  end
root 'image/projects#index'
end 

バドミントン上達のためには基礎スキル(基礎打ち、フットワーク、体幹)のマスターが徹底的に大事な理由をまとめていく

バドミントンに限らず、すべてのスポーツの上達に基礎のマスターは欠かせない。今回はバドミントンの上達方法としてバドミントンの基礎スキル(基礎打ち、フットワーク、体幹)について、なぜこれらを身につけることが重要なのかをまとめておこうと思う。

目次
バドミントンが上手くなるためには
バドミントンの基礎スキル習得方法
応用技について

f:id:trafalbad:20170624212418j:plain

バドミントンが上手くなるためには

バドミントンは限られたコート上で、シャトルを打ち合う競技だ。
ここで、バドミントンの無敵のプレイヤーを想像してみよう。

それは、ショットがミスなく打てて、相手がどこに打っても瞬時に動けて、安定して基礎打ち同様のショットを狙った場所に打てる人だ。(マンガ好きなら、暗殺教室の殺せんせーみたいなキャラが、バドミントンをやってることを想像してみるとわかりやすいかも)。

しかし、人間である以上、どんなショットにも対応するのは実際には不可能だ。しかし、実際には少しでもその理想に近づけたプレーをしたいところ。

これを考えたとき、バドミントン上達のために習得すべき基礎スキルは

・フットワーク
・基礎打ち
体幹

の3つだ。

バドミントンはこの3つができれば、確実に上手くなる。たいていの応用技もこなせるようになるだろう。逆にこの基礎スキルがある人とない人とでは、実力に天と地ほどの差がある。



バドミントンの基礎練について


勉強でもスポーツでもすべてに共通する汎用的な上達方法は、半年間基礎スキルを辛抱強く続けること
参考「年収10倍アップ勉強法


自分の体験談だが、バドミントンでは上手い人の技を真似ようとしても、それを実現できるだけの基礎スキルがないと上手くいかなかった。

また初心者で伸びがメッチャ早い人がいたが、基礎練をひたすらしていたし、部活の一番上手いレギュラーは基礎打ちを高校のときにひたすらやっていたらしい。

勉強でもスポーツでも、短期間で急激に伸びる人に共通することは、基礎を辛抱強く(3ヶ月〜半年)続けたことだ。

繰り返すが、バドミントンを上手くなるためには、基礎打ちがしっかり打てて、どこでも素早く動けるフットワーク、安定して基礎打ち同様ショットを打てる体幹が身についていることだ。バドミントン上達のためには、この基礎スキル(基礎打ち、フットワーク、体幹)を身につけることに専念しよう。




バドミントンの基礎スキル習得方法

基礎打ち

基礎打ちは練習でやる始めのウォーミングアップの打ち合いだ。
ドライブ、ロブ、クリア、ドロップ、プッシュ、スマッシュ、スマッシュレシーブ、ヘアピン.etc。

各打ち方の詳細な学び方は
youtubeで動画を見る
・本を読む
・コーチに教えてもらう


方法がある。

本はバドミントンのスキルが体系立ててまとめてあるので、素早く全体像を知りたいときにオススメだ。個人的にオススメなのはこの本。

基礎打ちの打ち方や、フットワークの動き方など、初心者に必要な知識が丁寧に書いてある。

基礎打ちの練習機会は相手がいないと難しい。なるべく普段の練習のときからヘアピンならヘアピン、スマッシュならスマッシュを基礎打ちの項目ごとに確実にミスなく打てるようにしよう。
手首の回内などの細かいテクニックはミスなく打てるように試行錯誤してる間に気づくし、自然に身につく。大事なのは基礎打ちの項目ごとに確実に打てる技術を身につけることだ。

個人的な基礎打ちのコツは目線を球の軌道に合わせる「直視力」と、飛んでくるシャトルに対して的確にラケットの面をつくることが参考になった。

他にも手首、回内、バランスなど各ショットを意識した手の動きは絶対に必要になってくる。練習のときは、とにかく基礎打ちがミスなく打てるようになることに専念しよう。


体幹

体幹は動いた状態、つまりフットワークをしながらでも、安定して基礎打ち同様にシャトルを打つために必要だ。

つまり基礎打ちとフットワークを結びつけるために必要といえる。体幹が身についている人は、片足で立ったままスマッシュやドライブが打てるのだ。

個人的な練習としては片足で立ちながら、スマッシュを打ち、基礎打ちのスマッシュと同じように、”ヒュン”と鳴るようにラケットを振れるようになること。個人的に10回中9回できれば、身についたことにしていた。


フットワーク練の時も、ラケットの振りを入れてみるのが有効だ。特にスマッシュのときに、基礎打ち同様の素振り音が出せるか。これを意識するだけで体幹はだいぶ変わってくる


フットワーク

フットワークは試合中には意識したくない。というのもコントロールシャトルを追うことを考えると、フットワークに全意識を集中させことは得策ではないからだ。

フットワークに意識がいっては他が疎かになってしまう。そこでフットワークは「無意識化」させるのが最終的な目標になってくる。

人間は勉強でも運動でも「何も考えずに実行できる状態」が究極のゴールと言われている。フットワークを「無意識化」できるかで、試合中に他のことに意識を向ける余裕ができるようになる。

フットワークはまず始めにやり方、つまり正確な足の動きを覚えてから、ひたすら反復練習を繰り返す。足の動きを頭で理解しているといないのとでは、練習の質がまるで違うからだ。


足の動きは動画でも本でもたくさん載ってるので、自分に合うのを身につけたい。



応用技について

応用技は上の基礎スキルの3つができるようになってからでないと、習得時間や精度などが全っく違ってしまう。まずはやるべきことは上の基礎3つを身体に染み込ませることだ。

フットワークで自在に素早く動け、体幹がしっかりしてて、正確なショットが打てるようになれば、それだけで十分強い。あとはシングルスとダブルスに合わせて、戦術を組み立てていく。

例えばシングルスはある程度、クリアを多用して後ろに飛ばすスタイルがみんな嫌いなので、自分は後ろに攻める戦術を常用している。

その他のコースの打ち分けや、上手い人の技の真似などの応用技は基礎ができてからにしよう。



バドミントンの上達方法は、徹底的に基礎スキル(フットワーク、基礎打ち、体幹)を身につけること。各スキルはyoutubeに動画とか散らばってるし、本にも詳しく書いてある。コーチが入れば教えてもらうのもいいだろう。自分にあったスタイルを見つけ、アレンジし、身につける。バドミントン上達は基礎ができてれば間違いないなく上達する。

無理して結婚しなくてもいい生き方-独身でも自由に生きる人生について考えてみる

最近は結婚する人たちを周りでかなり見かけるのに伴い、自分もしなければならないという強迫観念に襲われる。しかし、実際のところ最近では「結婚しなくてもいい」という考えの人も多いので、自分も縛られたくないため、なるべく無理して結婚はしたくない。

そこで結婚しなくても人生を楽しみ、自由に生きていくための方法について、個人的にとても参考になることをまとめていきたい。

目次
・「したくない結婚」はしない方がいい
・結婚しなくても自由な人生を送るために

f:id:trafalbad:20170618011003j:plain


「したくない結婚」はしない方がいい

日本にはまだ昭和の考えが根付いてて、「結婚しないとヤバイよ」という強迫観念がどよめいている。しかし最近では自由な人生を選択するために「結婚」はマストではなくなった

自分は「したくない結婚」はしない方がいいという考えだ。ニュートラルな意見を述べると理由は2つある。



独身はとにかく自由
まず理由の1つは独身生活の利点だ。というのも、「行動や生き方が自由」だからだ。他にも統計データでは、「金銭面で自由」「子供を扶養する責任がなくてラク」「友人関係を保ちやすい」という意見もある。


昔から一人の時間を大切にする方だったし、人間関係も量より質を重視してきた。むしろ1人が好きな人には、無理して結婚することは、QOLを下げることになる。

無理にでも結婚しないと”ヤバイ”という考えに囚われる人は注意が必要だ。というのも自分は、人間において「思考の停止」は死と同義だと考えるからだ。

古い考えに囚われてつまらなくなると、人生自体も終わっていく時代にすでになっている。つまらない人間は人生もつまらない。イヤイヤ結婚して束縛されるなら、いつまでも自由で好奇心を持ち続け、楽しい人生を送っていたいのだ。こう考える人も確実に増えている



結婚という強迫観念が古い
2つめの理由は結婚しなければいけないというのが一種の脅迫観念で、「結婚するのがステータス」な考え方がすでに”クソ”だと思っているため。またそういう人たちが多数いるのも事実だ。

最近では結婚系の記事がを目にすることが多いが、中には「好きでもない人と結婚する人たち」もいるのだ。

現代でも、結婚の理由は親のため、世俗のため、孤独回避のため、子供を持つことに幸せにを感じるため、など人それぞれだが、強迫観念に囚われて結婚するのは、クソ以外の何者でもない

結婚が全てではないし、結婚のあるべき形とは”お互いが望んでするもの”がベストと考えるからだ。

年頃になると結婚について嫌でも考えてしまうが、むしろ結婚は「したくてするもの」で、結婚しなくてもいい選択肢を用意しておくことも絶対に必要だろう



結婚しなくても自由な人生を送るために
結婚という強迫観念は簡単に拭えるものではない。しかし、自由に生きている人たちも絶対数いることを確認した上で、その強迫観念を拭える一助になれたらと思う。


結婚しなくても人生を楽しむ人たち

Twitter

つい最近、Twitterでさわぐちけいすけさんのツイートが話題になっていた。フリーで絵の仕事を始めてから、いろんな人生観に触れている様子を漫画にしている。


このツイートを見てみると

・仕事が楽しくて定年まで結婚しなかった人

・常に人生を楽しんでて結婚は考えない人

・今を大事にして結婚にエネルギーをさくのを避ける人

など、いろんな生き方をしている人たちがいることがわかる。

f:id:trafalbad:20170618011334j:plain



発言小町



同じように発言小町でもこんなコメントがあった。


必死に友達に年賀状や近況報告メール等出して「縁」を繋ぎとめて置く事に精を出しました。彼氏も作ろうとしました。でも好きな人がいる訳でもないのに漠然と彼氏って思っても、自分の気が乗らずダメでした。
ある時「やっぱり自分が自立した人間にならないと始まらない」と思いました。トピ主さんの行きついた所と似てます。

必要とされたいから人と付き合うのではなく、自分で自分の人生を楽しんでいれば自然とその喜びを誰かと共有したいと思うようになります。そうすると、繋ぎ止めの目的ではなく心から友達と遊べるようになりました。
自立さえできれば、結婚しない人生どころかどんな人生が来ても対応できるようになると思うんです。
一部略-引用「結婚しない人生を送る覚悟が欲しい : 恋愛・結婚・離婚 : 発言小町 : YOMIURI ONLINE(読売新聞)



結婚しなくても自由に生きるためには、縁を繋ぎとめようとしたり、無理して人間関係を維持しようとはしないこと。

自分も心底、人生を楽しみ、それを一緒に楽しめる人と共有したり、楽しみあったりすことを目指す生き方。それさえできれば結婚しなくても、十分楽しい人生を送ることができる。

互いの人生を一緒に楽しめるパートナーが見つかれば、結婚したり、同棲したり共に人生を送ればいいだろう。むしろ結婚というステレオタイプは崩壊しているのがわかると思う。

もっと多面的な生き方を、考え方を持った方が人は幸せになれる。

ラフな考え方を持ち、より身軽になるために、こういう人たちが必ずいることを忘れないでおきたい

f:id:trafalbad:20170618011145j:plain



アルバイト先の年配女性に聞いた体験談まとめ


ここで結婚に関して、アルバイトをしていたとき年配の女性の方から、とても参考になる話を聞いたので、簡単にまとめておこうと思う。

「結婚で理想なのはお互いにしばりあわない関係。大概のことなら何をしても互いに常に自由で、かつずっと一緒にいられる関係が一番」

つまり、結婚するパートナーでも、結婚するからといって相手の人生を束縛しない。そしてお互い一緒にいて苦にならない人生関係が理想だということらしい。

友達関係でも依存しすぎのかまってちゃんは嫌われる傾向があるが、結婚という形態でもそれは同じなのだろう。

一個人の人生を束縛せず、かつ一緒にいて楽しい人がいれば、その人は絶対のパートナーになるのではないだろうか。
あらゆる人間関係に当てはまる理想的な関係だと思う。年配の女性に聞いた体験談だが、かなり参考になったので、まとめておいた。




年頃になると結婚はどうしても意識してしまう。しかし「結婚したくないならしない人生も十分にありなんだ」ということを悟ってもらえたら幸いだ。自分へのメッセージとしてもこの記事をまとめておいた。

TensorflowのTensorboardをMac book air(Pro)で開く方法【機械学習】

anacondaで作成したファイルをTensorboardで開く方法をまとめます。現状、Tensorflowを使うのはほとんどanaconda。その際、Tensorboardを開くための方法について、いろんなサイトでバラバラの情報が飛び交っていてわかりにくかったので、Macで開く方法を一括でまとめたいと思います。

使用環境
Mac book air ver.Yosemite
・anaconda

Mac book airで開けるので、この記事の方法はMacのバージョンにすべて対応しているやり方です。WindowsとかLinuxでは、他サイトを参考推奨。

Tensorboardを開く一連の流れ


TensorflowをMacにインストール

anacondaでTensorflowをインストールしますが、anaconda上のターミナルでは開けないのです、Mac本体にもTensorflowをインストールが必要です。
下記コマンドをユーティリティ→ターミナルで開き、貼ればオッケー。

pip install Tensorflow

anacondaでファイルの作成

Tensorflowを使ったファイルを作成します。今回はTensorboardを表示させる方法がメインなので、コードなどの詳細は割愛します。


いろんなサイトで紹介されてますが、Qiitaで詳しいコードが紹介されています。


保存

このファイルをanaconda上の「save as」から保存して、ダウンロードボタンからPC上に保存します。

保存場所によってファイルのパス名が変わってきます。ここでは「Downloads」に保存します。



ターミナルで開く

これで引っかかる人が多いのですが、anaconda上のターミナルではTensorflowは開けません。必ずMacのPC上のターミナルでコマンドを実行して下さい。
UNIXのターミナルコマンドを実行していきます。
1.
まず

ls

これは保存されてるファイル名を表示します。


2.

cd [保存場所]

これは「保存場所」のファイルをいじるために保存場所に”移動”するコマンドです。
今回は「Downloads」に保存してあるので、

cd Downloads

で移動できます。


3.
そしてTensorboardを起動させます。
下記コマンドを入力して下さい。

Tensorboard --logdir=(ファイルの絶対パス)

(ファイルの絶対パス)の部分は「絶対パス」を入力します。
入力するとURLが表示されます。

Starting TensorBoard b'47' at http://0.0.0.0:6006

というメッセージが出てくるので
http://0.0.0.0:6006」をブラウザに入力して飛べば、Tensorboardを開けます。



ファイルの絶対パスの表示方法
これはテキストエディタにファイルをドラッグ&ドロップすれば表示される。

f:id:trafalbad:20170509113431p:plain
Macでの表示方法は下記サイトを参照推奨。
book.mynavi.jp




細かいけど重要な処理


どこのターミナルで開くか

Tensorflow系の本ではターミナルはanaconda上だとか書いてあるものもありますが、MacのPCに備え付けのターミナルでなければ開けません。

ここら辺はwebの知識がないと理解しにくいのですが、そういうものだと割り切るのがいいです。


よくあるエラー「"tensorboard: Command not found"」

これはTensorflowがインストールされてないために起こるコマンドです。TensorflowとTensorboardはセットなので、

pip install Tensorboard

とかしなくてもオッケーというわけです。このエラーが出たらTensorflowをインストールして下さい。



絶対パス相対パス

絶対パスはファイルの正確な居場所です。相対パスはファイルの居場所を簡略化したもの。
住所に例える

東京都庁」の絶対パス相対パス

絶対パス:〒163-8001 東京都新宿区西新宿2丁目8−1

相対パス東京都庁

みたいな感じです。絶対パスは正確にファイルの居場所を記述します。



Tensorboardを開くために意識すべきファイル内のコマンド

最後にこれはおまけですが、Tensorboardを開くためにはただTensorflowを使って結果を出せばいいと言うわけではありません。ちゃんと書かないといけないコマンドがあります。それをちょっと引用。




Tensorboardのを開くために意識すべきコマンド
・with構文を用いたグラフコンテキスト内にPlaceholder、Variable、計算値の定義を記載する

・with構文によるネームスコープを用いて入力層、隠れ層、出力層などの構成要素をグループ化する

・ネットワークグラフに付与するラベル名をコード内で指定する

・グラフに表示するパラメータを宣言して、summaryWriterオブジェクトでデータを書き出す

引用「Tensorflowで学ぶディープラーニング入門」



これでMacならTensorboardを開けるようになります。WindowsとかLinuxとかは多分やり方が違うので、他サイト参照した方がいいです。

anacondaのJupyterでmecabをインストールする方法【Mac】

Mecabとは
mecab形態素解析ツールで文章を単語に分けてくれるツールです。ナイーブベイズ分類器というメールのスパム判定などに用いる機械学習のシステムの学習によく使うと思います。
使用環境
Mac book air
・anaconda

の使用環境で使ってインストールしてみました。Qiitaとかで結構のってるんですが、断片的だったり、anacondaに対応してないサイトもあったり、情報としてまとまってないので、anacondaで使用する方法としてしっかりまとめておこうと思います。

mecabのインストール方法

anacondaのインストール

まず、anacondaのインストールはどこにでも載ってるので、ほぼ割愛。

公式サイトからWindows用か、Mac用に合わせてインストールすればOK。



HomebrewをMacにインストール

mecabをインストールする際にHomebrewというのをMacに読み込ませました。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)

まずこれをインストールしないと、mecabは動作しない。Macのターミナルに公式サイトに掲載されているコマンドをコピペすればインストールができます。
ここら辺はサイトの通り。



anaconda内で仮想環境を作成

anacondaを起動した画面から「Environment」を押して、下の画像のように「create」を押す。今回はmecab用の仮想環境を作ってみました。
f:id:trafalbad:20170429181559j:plain
名前は好きに決めてOK。完成したボタンの右の矢印を押すとターミナルを開けます。



mecabとIP辞書のコマンドをターミナルに実装する

ターミナルが開けたら、mecabと辞書をインストールします

このコマンドでまずmecabをインストール

brew install mecab

次にこのコマンドで辞書をインストールします。

brew install mecab-ipadic

順にターミナルに実装していって下さい。



ライブラリにnatto-pyがインストールされているか確認する

anacondaではnatto-pyのライブラリを使いました。


下記画像の「not installed」を押してインストールされていないライブラリ項目にnatto-pyがあれば、まだインストールされてないので、インストールします。
f:id:trafalbad:20170429181620j:plain


mecabを試してみる


下記コマンドで正常に動くかどうか確認できます。

from natto import MeCab

nm = MeCab()
print(nm.parse('すもももももももものうち'))

>>>
もも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ



anacondaのアクセス権限の影響でmecabがインストールできないとき
すでに別のmecabをインストールしてしまった場合、新しいバージョンをインストールできない場合があります。そんなときはすでにインストール済みのものをアンイストールします。

例えば今回のmecabをインストールしたい場合は
mecabをアンイストール

brew uninstall mecab

辞書をアンイストール

brew uninstall mecab-ipadic

してから再度下記コマンドをターミナルに再び実装するとインストールできます。

brew install mecab
brew install mecab-ipadic

これでmecabがanacondaでも使えるようになります。mecabでは分かち書きなどいろんな出力方法があるので便利。