2017年9月21日木曜日

日常の活動を記録した加速度データセット

手首に付けた加速度センサーで日常の活動を記録したデータセットが公開されています。

https://archive.ics.uci.edu/ml/datasets/Dataset+for+ADL+Recognition+with+Wrist-worn+Accelerometer

大量のデータというわけではありませんが、合計839ファイルあり、ファイル単位でラベルが付いています。 クラス数は14です。具体的には、

  • 歯磨き
  • 階段を上る
  • 髪を梳く
  • 階段を下りる
  • 飲み物を飲む
  • 肉を食べる
  • スープを飲む
  • ベッドから起きる
  • ベッドで横になる
  • 水を注ぐ
  • 椅子に座る
  • 椅子から立ち上がる
  • 電話する
  • 歩く
です。バランス良く収録されているわけではなく、クラスによってファイル数に偏りがあります。

このデータとKerasで色々と試してみたいので、学習用データと検証用データに分けてみました。 きちんと色々と調べるには交差検証で行ったほうが良いのですが、少し試してみたいだけですので、4/5を学習用データに、1/5を検証用データとします。

分割には次のスクリプトを用いました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
DATADIR="ADL_Dataset/HMP_Dataset"

# Collect all files
find $DATADIR -iname "Accelerometer*.txt" | grep -v MODEL | sed 's#^.*/c/#/#' > all.list

# Make a category list
sed 's/.*Accelerometer-[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}-//' all.list | \
  sed 's/-.*//' | sort | uniq | awk 'BEGIN{c=0}{print c" "$1; c+=1}' > id2cat.list

# Make a category-ID mapper
declare -A CAT2ID
exec < id2cat.list
while read id cat
do
    CAT2ID[$cat]=$id
done
echo ${CAT2ID[getup_bed]}

# Add category ID into all.list and randomize it
{
while read line
do
    category=${line%-*}
    category=${category##*-}
    echo ${CAT2ID[$category]}" "$line 
done < all.list
} | sort -R > all.random.list

# Make training set and validation set
N=$(wc -l all.list | awk '{print $1}')
TRAIN=$((N*4/5))
VAL=$((N-TRAIN))
head -n $TRAIN all.random.list > train.list
tail -n $VAL all.random.list > val.list

実際に実行してみると、少ないクラスのファイルが検証用リスト(val.list)に含まれませんでしたので、何度が実行して、train.list、val.listともに全てのクラスが含まれるようにしました。

生成したファイルリストの中身については train.listval.list を参照ください。

train.listとval.listの各クラスのファイル数は、

Class ID # of train
files
# of val
files
0 10 2
1 74 28
2 27 4
3 35 7
4 83 17
5 2 3
6 1 2
7 80 21
8 22 6
9 83 17
10 82 18
11 85 17
12 11 2
13 76 24

となりました。クラス5と6はファイル数が学習データのほうが少ないので、学習が難しそうです。

0 件のコメント :