proxyのお勉強
プロキシとは、企業などの内部ネットワークとインターネットの境界にあり、内部のコンピュータの「代理」(proxy)としてインターネット上のコンピュータへ接続を行うコンピュータのこと。また、そのような機能を持つサーバソフトウェア。
http://wa3.i-3-i.info/word1752.html
わかりやすい参考
proxy環境下の設定(ubuntu 14.04) - Qiita
$ export https_proxy="http://username:password@your.proxy.address:proxy.port/"
環境変数の引き継ぎ
sudo -E apt-get ~
環境変数の削除
$ unset https_proxy
avahiのお勉強
avahi
Avahi(アバヒ)は、Zeroconfのフリーソフトウェア実装であり、マルチキャストDNS/DNS-SD サービスディレクトリのためのシステムを含む。
avahi-daemon - The Avahi mDNS/DNS-SD daemon - Linux Man Pages (8)
[Ubuntu] Avahiのコマンド一覧 - Life with IT
hostnameの重複を許す
enable-reflector=yes
ホスト名のコンフリクトについて
avahi daemonは、起動時にはコンフリクトメッセージを出さずにホスト名を取得します。 また、一度ホスト名を決定した後は、ホスト名をキャッシュし、ifup/downで同じホスト名を使い続けるので 一度ホスト名が決まってしまえば 下記のような場合を除いてifup/downで衝突は起きません。
hostname conflict with avahi (post 3.0) · Issue #1426 · pi-hole/pi-hole · GitHub
avahi-daemonのシステムログの内容について | アットマークテクノ ユーザーズサイト
linux - Avahi Hostname Resolution: Is it caching somewhere? - Stack Overflow
How do I flush out the DNS resolver cache? - Ask Ubuntu
Re: [DNG] how to clear DNS cache
-> /etc/resolv.conf
DNSキャッシュのクリア
How To: Flush Your Local DNS Cache – Liquid Web Knowledge Base
sudo service dns-clean restart
/etc/hosts
127.0.1.1 robonchu
/etc/nsswitch.conf
名前解決の参照順位が設定されている
hosts: files mdns4_minimal [NOTFOUND=return] dns nis
mdns:マルチキャストDNS
JVNVU#98589419: マルチキャスト DNS (mDNS) 実装が外部からのユニキャストクエリに応答する問題
nis
UNIXコマンド、シェルスクリプトのお勉強
- Unix Command
- vim
- link
- user, group
- permission
- command make
- pathを通す
- 管理者user
- chown
- text operation
- redirection,pipe
- ワイルドカード
- find,xargs
- ブレース展開
- shell
- ディレクトリ
- 参考
Unix Command
mkdir app{1..40}
clear
cd
rmdir
ls
cat text.txt : 全文表示
less text.txt
- /<検索したいワード>
mv
ctrl+r :直近のコマンドを探す
history : 履歴を呼び出す
!<historyで出たID> : 履歴のコマンドを実行
cd !$ : commadに渡した最後の文字を利用する
!pw : pwから始まる直近のコマンドを実行できる
man ls
mkdir --help
touch
vim
vi
command mode: esc key
保存->:w
抜ける->:q
編集モード: i
link
ln -s
unlink
user, group
cat /etc/passwd
cat /etc/group
groups
permission
rwxrw-r--
rwx : user
rw- : group
r-- : other
read,write,execute
chmod g+x
chmod go+x
chmod a-x
rwx : 4+2+1 = 7
rw- : 4+2+0 = 6
r-- : 4+0+0 = 4
chmod 764
command make
type cat
vi hi
#!/bin/bash echo "hi!"
chmod u+x hi
./hi
pathを通す
- echo $PATH
ここから探してコマンドを実行する
printenv
export PATH=/
:$PATH hi
which hi
管理者user
ls -l /var/log/message
cat !$
su -l : root userに切り替える
cat /var/log/messages
sudo cat /var/log/messages
chown
cp /var/log/messages .
sudo !!
cat messages
sudo chown
: messages cat messages
text operation
wc -l messages
head messages
head -n 3 messages
tail -n 3 messages
grep 'etc' messages
redirection,pipe
echo "date" > cmd.txt
cat cmd.txt
echo "free" >> cmd.txt
bash < cmd.txt
bash < cmd.txt > result.txt
cat result.txt
ワイルドカード
ls /etc/*.conf
ls /etc/c??.*
find,xargs
find /etc -name "http*"
sudo !!
find /etc -name "http*" -type f -exec wc -l {} +
find /etc -name "http*" -type f | xargs wc -l
ブレース展開
echo {a,b,c}
echo {1..10}
echo {1..10}{a..g}
make test && cd test
mkdir app{1..5}
touch app{1..5}/test{1..3}{.txt,.jpeg,.gif}
rm app{1..5}/test{1..3}{.jpeg,.gif}
shell
./hello a aa aaa
#!/bin/bash # comment # $1, $2, ... echo "hello $1" echo $0 # ./hello echo $# # 3 echo $@ # $* a aa aaa greeting="hello" #space入れちゃダメ! echo "hello world" echo 'hello world' echo "hello robot" echo "$greeting world" echo '$greeting world' #展開されない echo "${greeting}robot" echo "foo"; echo "bar"
ディレクトリ
bin:実行コマンド
etc:設定
home:各ユーザー
sbin:システム管理用のコマンド
usr:一般的なアプリケーション
var:システムのログファイル
参考
Dockerのお勉強
概要
Build once, run anywhere
Docker - Build, Ship, and Run Any App, Anywhere
VagrantでUbuntuを用意する
Vagrantは、開発環境の構築と共有を簡単に行うためのツールです。どこでも同じ環境を再現できるように仮想マシン環境を管理する機能と、Atlasを通して共有する仕組みが提供されています。
開発環境の構築・共有を簡単にするVagrant入門 | Think IT(シンクイット)
A list of base boxes for Vagrant - Vagrantbox.es
Official Ubuntu 14.04 daily Cloud Image amd64 (Development release, No Guest Additions) をインストール
sudo apt-get install vagrant vagrant box add trusty64 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box sudo apt-get install virtualbox mkdir Docker && cd Docker vagrant init vagrant up vagrant ssh
こうするとvagrant user で以下のように起動できていることが確認できる
vagrant@vagrant-ubuntu-trusty-64:~$
Dockerで環境構築
docker-ceのインストール
Get Docker CE for Ubuntu | Docker Documentation
UbuntuにDocker CEをインストールする - Qiita
確認:sudo docker --version
imageの操作
sudo docker search centos sudo docker pull centos sudo docker images sudo docker inspect centos:latest sudo docker rmi <id> sudo docker run centos echo "hello world" sudo docker ps -a -n=5 (a:過去を表示、-n:最新5つ) sudo docker rm <id> sudo docker run -d centos free -s 3 sudo docker ps sudo docker logs <id> sudo docker attach --sig-proxy=false <id> sudo docker kill <id> sudo docker start <id> sudo docker run -i -t centos /bin/bash (-i:インタラクティブ, -t:ターミナル) touch hello.txt exit sudo docker ps -a sudo docker commit <id> robonchu/hello sudo docker images sudo docker run -i -t robonchu/hello /bin/bash ls
これでhello.txtがあることが確認できる
docker build
emacs -nw Dockerfile
FROM centos MAINTAINER robonchu <robonchu@gmail.com> # RUN: build時に実行 RUN echo "now building..." # CMD: run時に実行 # CMD echo "now running..." CMD ["echo", "now running..."]
以下でrun commitの動作、つまりimageからcontainer、そして、imageにする動作が行えることが確認できる
sudo docker build -t robonchu/echo . sudo docker run robonchu/echo
さらに emacs -nw Dockerfile
RUN yum install -y httpd ADD ./index.html /var/www/html/ EXPOSE 80 CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
emacs -nw index.html
<html> hello from Docker! </html>
sudo docker build -t robonchu/httpd . sudo docker run -p 8080:80 -d robonchu/httpd
ウェブページを開いて、192.168.55.44:8080でhello from Docker!がでていることを確認
Imageをpush
上記の登録が必要
sudo docker login sudo docker push robonchu/httpd
参考
https://dotinstall.com/lessons/basic_docker
Dockerでよく使うコマンドまとめ | 酒と涙とRubyとRailsと
さわって理解するDocker入門 第1回 | オブジェクトの広場
機械学習のお勉強(自作データセットでCNN by pytorch)
- Pytorch tutorial
- DataSetの作成
- DataLoader
- Model Definition
- Training
- total evaluation
- each class evaluation
CNNを用いた簡単な2class分類をしてみる
Pytorch tutorial
Training a Classifier — PyTorch Tutorials 1.4.0 documentation
Transfer Learning for Computer Vision Tutorial — PyTorch Tutorials 1.4.0 documentation
Writing Custom Datasets, DataLoaders and Transforms — PyTorch Tutorials 1.4.0 documentation
DataSetの作成
https://download.pytorch.org/tutorial/hymenoptera_data.zip
ここからアリさんとハチさんのデータセットをダウンロード
ディレクトリ構成
train
- ants
- bees
val
- ants
- beets
となっている。
このように自分で作ったデータセットを用意してあげる。
DataLoader
# -*- coding: utf-8 -*- import torch from torchvision import transforms, datasets # 取り込んだデータに施す処理を指定 data_transform = transforms.Compose([ transforms.RandomSizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # train data読み込み hymenoptera_dataset = datasets.ImageFolder(root='hymenoptera_data/train', transform=data_transform) dataset_loader = torch.utils.data.DataLoader(hymenoptera_dataset, batch_size=4, shuffle=True, num_workers=4) # test data読み込み hymenoptera_testset = datasets.ImageFolder(root='hymenoptera_data/val', transform=data_transform) dataset_testloader = torch.utils.data.DataLoader(hymenoptera_testset, batch_size=4, shuffle=False, num_workers=4) classes = ('ants', 'bees')
データセットの形は
for i, data in enumerate(dataset_loader, 0): inputs, labels = data print inputs.size() print labels.size() -> (4L, 3L, 224L, 224L) (4L,)
となる。
自作transformsの使い方
class Crop(object): """Crop the image. Args: left_up (tuple): Desired crop left up position. right_down (tuple): Desired crop right down position. """ def __init__(self, left_up, right_down): self._left_up = left_up self._right_down = right_down def __call__(self, img): image = img.crop((self._left_up[0], self._left_up[1], self._right_down[0], self._right_down[1])) return image
これを以下のように使用すれば良い
data_transform = transforms.Compose([ transforms.Scale(224), Crop((50,100),(100,200)), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) ])
PILの使い方
pytorchの画像の読み込み、処理はPILを使っている
Model Definition
from torch.autograd import Variable import torch.nn as nn import torch.nn.functional as F class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 53 * 53, 120) # (((224 - 4) / 2 ) - 4) / 2 = 53 self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 2) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = x.view(-1, 16 * 53 * 53) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x net = Net()
Training
import torch.optim as optim criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) for epoch in range(1): # loop over the dataset multiple times running_loss = 0.0 for i, data in enumerate(dataset_loader, 0): # get the inputs inputs, labels = data # wrap them in Variable inputs, labels = Variable(inputs), Variable(labels) # zero the parameter gradients optimizer.zero_grad() # forward + backward + optimize outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() # print statistics running_loss += loss.data[0] if i % 10 == 9: # print every 10 mini-batches print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 10)) running_loss = 0.0 print('Finished Training')
total evaluation
correct = 0 total = 0 for data in dataset_testloader: images, labels = data outputs = net(Variable(images)) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum() print('Accuracy of the network on the test images: %d %%' % ( 100 * correct / total))
each class evaluation
class_correct = list(0. for i in range(2)) class_total = list(0. for i in range(2)) for data in dataset_testloader: images, labels = data outputs = net(Variable(images)) _, predicted = torch.max(outputs.data, 1) c = (predicted == labels).squeeze() try: for i in range(4): label = labels[i] class_correct[label] += c[i] class_total[label] += 1 except: break for i in range(2): print('Accuracy of %5s : %2d %%' % ( classes[i], 100 * class_correct[i] / class_total[i]))
Gitのお勉強
公式DOCS
Gitの構成
Gitの設定
git config --global user.name "robo nchu" git config --global user.email "robonchu@gmail.com" git config --global color.ui true
ヘルプ:git config --help
はじめてのGit
git init git add <file> git commit <file> addとcommitをまとめて実行:git commit -am "" git log ワンラインで表示:git log --oneline 変更点を表示:git log -p どのファイルに変更が加えられたか:git log --stat git status 変更分を消す:git checkout -- <file> 変更分の確認:git diff ステージングエリア上のdiff:git diff --cached すべてadd:git add . 削除:git rm <file> 移動:git mv <file> 上げたくないファイルがあるとき:.gitignoreファイルを作り、*.logなどを記入。おいた場所の下位すべてに適応される。 git commit -m "message" 直前のコミットの変更:git commit --amend 直前のコミットを取り消す:git reset --hard HEAD ひとつまえまでのコミットを取り消す:git reset --hard HEAD^ ひとつ前に消したコミットを取り戻す:git reset --hard ORIG_HEAD git branch hoge git checkout hoge masterにhogeを統合:git checkout master -> git merge hoge branchの削除:git branch -d hoge git checkout -b hogehoge
コンフリクトの解決
コンフリクトが起きたファイルを開く
>>> or <<< のどちらかを消すor修正する
add
commit
tag
commit jankfdjbnkdlnbk~ のcommit idに名前をつける
直前のコメットにtagをつける:git tag v1.0 git tag -> v1.0 tagをつけたcommitを見る:git show v1.0 任意のコミットにtagをつける:git tag v0.9 jankfdjbnkdlnbk tagの消し方:git tag -d v0.9
aliasの設定
git config --global alias.co checkout git config --global alias.st status -> git st 設定を見る:git config -l
共有レポジトリの作成
共有レポジトリ:share_robot.git cd share_robot.git git init --bare cd ./../my_robot git remote add origin ./../share_robot.git/ git config -l > core.repositoryformatversion=0 > core.filemode=true > core.bare=false > core.logallrefupdates=true > remote.origin.url=./../share_robot.git/ > remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* リモート消すとき:git remote rm origin origin(share)にpushするとき:git push origin master clone: git clone ./share_robot.git/ my_robot2 cd my_robot2 modify something git add . git commit -m "modify something" git push origin master cd ./../my_robot git pull origin master そうするとmy_robot2での変更がmy_robotで反映されていることが確認できる
stash
変更を一時的に退避
一時退避:git stash save 退避した内容確認:git stash list -p 退避した作業を復元:git stash pop
Stash | 逆引きGit | サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ
cherry-pick & rebase
わかりやすすぎる👇
初心者でもわかる!リベースの使い方を解説します | Git編:一歩踏み出すフロントエンド入門
ex:
rebase -i HEAD~~
参考
初心者でもほぼ無料でGitの使い方を学べるコンテンツ7選 - paiza開発日誌
Git 学習コース Ⅰ | プログラミングの入門なら基礎から学べるProgate[プロゲート]
機械学習のお勉強(姿勢推定)
DeepPose
PyTorchでDeepPoseを実装してみた PartⅡ - Qiita
Leeds Sports Pose Datasetのデータセットがインストール出来無い...
https://engineering.leeds.ac.uk/info/20132/school_of_computing
データセットのインストール先がわかる方教えてくださいm( )m
OpenPose
全般参考
ROS x OpenPose
GitHub - stevenjj/openpose_ros: A ros wrapper for the CMU openpose library
image_recognition/openpose_ros at master · tue-robotics/image_recognition · GitHub
Docker x OpenPose
GitHub - garyfeng/docker-openpose: DockerFile for CMU openpose
https://hub.docker.com/r/garyfeng/docker-openpose/~/dockerfile/
PyOpenPose
keras x OpenPose
pytorch x OpenPose 1
使い方
Dropbox - pose_model.pthからモデルをダウンロード
git clone https://github.com/tensorboy/pytorch_Realtime_Multi-Person_Pose_Estimation.git
ダウンロードしたpytorchモデルをmodelに移動
python web_demo.py
my pc のgpuの性能が低いので、とてもゆっくり。。。
pytorch x OpenPose 2
GitHub - bearpaw/pytorch-pose: A PyTorch toolkit for 2D Human Pose Estimation.
try中