knaka Tech-Blog

AI, IoT, DIYエレクトロニクス, データサイエンスについて投稿予定です。

ディープラーニングで画像認識 実装(4)、keras CNNで、自前準備した画像の学習(2)

index:

概要

前回は、自前で準備した画像で、ImageDataGenerator flow_from_directory()
を使用して、学習用/ 評価用データを準備しましたが。
評価時の、正解率などが。よく把握できなかったので
画像読み込み処理を含めて、全面的に再作成しました。

今回も、画像データの学習に時間がかかったので
google colabを、使用させて頂きました。(作業pcと比較して、かなり高速でした)

環境

keras : 2.1.3
tensorflow : 1.4
python : 3.5.2

画像データ

フォルダ構成は、前回と同じ
data フォルダ下に配置

train : 学習用
validation : 検証用
を作成し、
各フォルダの下に、
各クラス単位のフォルダ、その下に、学習用の画像を配置

・前処理は、前回と同じ手法で
 train 下に、水増し画像を多目に作成しておきます。

C:\tmp\2017_tmp\python35\tensorflow\img_data_test>tree data
フォルダー パスの一覧:  ボリューム Acer
ボリューム シリアル番号は 7221-E6BF です
C:\TMP\2017_TMP\PYTHON35\TENSORFLOW\IMG_DATA_TEST\DATA
├─train
│  ├─bird
│  ├─cat
│  ├─dog
│  └─flower
└─validation
    ├─bird
    ├─cat
    ├─dog
    └─flower

コード

https://github.com/kuc-arc-f/img_data_test2


・img_loader.py
 data/train , validation の下層
のフォルダを、クラスとして生成し、
画像データは、numpy arrayに変換します。

・train.py
 keras のNN で学習、
 モデルで、ニューロン数は
入力: 128 * 128 * 3
隠れ層: 64
出力層: クラスの数

・エポック数は,30~40 で、
 正解率は、95%以上まで上昇できました。

#モデルを構築
model=Sequential()

model.add(Conv2D(32,(3,3),padding='same',input_shape=(128, 128,3)))
model.add(Activation('relu'))
model.add(Conv2D(32,(3,3),padding='same'))
model.add(Activation('relu'))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Dropout(0.25))

model.add(Conv2D(64,(3,3),padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64,(3,3),padding='same'))
model.add(Activation('relu'))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense( num_classes ,activation='softmax'))

model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])

batch_size=32
epoch_num=20
#fit
history=model.fit(x_train,y_train
    ,batch_size=batch_size
    ,nb_epoch=epoch_num
    ,verbose=1,validation_split=0.1)

・評価
predict.py

    # モデルの評価
    loss, acc = model.evaluate(x_test, y_test, verbose=0)
    print('Test loss:', loss)
    print('Test acc:', acc)
    print("#end_acc")

実行ログ

・学習、エポック=30

((264, 128, 128, 3), (264,))
((24, 128, 128, 3), (24,))
dog
24
/usr/local/lib/python2.7/dist-packages/ipykernel_launcher.py:70: UserWarning: The `nb_epoch` argument in `fit` has been renamed `epochs`.
Train on 237 samples, validate on 27 samples
Epoch 1/30
237/237 [==============================] - 3s 12ms/step - loss: 2.4715 - acc: 0.3291 - val_loss: 1.7619 - val_acc: 0.0000e+00
Epoch 2/30
237/237 [==============================] - 1s 4ms/step - loss: 1.2486 - acc: 0.4177 - val_loss: 1.3408 - val_acc: 0.0000e+00
Epoch 3/30
237/237 [==============================] - 1s 4ms/step - loss: 1.0142 - acc: 0.4852 - val_loss: 1.6289 - val_acc: 0.0741
Epoch 4/30
237/237 [==============================] - 1s 4ms/step - loss: 0.7425 - acc: 0.6667 - val_loss: 1.0257 - val_acc: 0.3333
Epoch 5/30
237/237 [==============================] - 1s 4ms/step - loss: 0.4779 - acc: 0.8354 - val_loss: 1.0483 - val_acc: 0.4815
Epoch 6/30
237/237 [==============================] - 1s 4ms/step - loss: 0.2758 - acc: 0.8945 - val_loss: 0.8937 - val_acc: 0.7037
Epoch 7/30
237/237 [==============================] - 1s 4ms/step - loss: 0.3764 - acc: 0.8354 - val_loss: 0.4036 - val_acc: 0.8519
Epoch 8/30
237/237 [==============================] - 1s 4ms/step - loss: 0.2776 - acc: 0.8903 - val_loss: 0.4373 - val_acc: 0.7778
Epoch 9/30
237/237 [==============================] - 1s 4ms/step - loss: 0.2141 - acc: 0.9367 - val_loss: 0.5481 - val_acc: 0.8148
Epoch 10/30
237/237 [==============================] - 1s 4ms/step - loss: 0.2487 - acc: 0.8987 - val_loss: 0.6807 - val_acc: 0.7778
Epoch 11/30
237/237 [==============================] - 1s 4ms/step - loss: 0.2253 - acc: 0.9030 - val_loss: 0.4038 - val_acc: 0.8148
Epoch 12/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0826 - acc: 0.9831 - val_loss: 0.8256 - val_acc: 0.7407
Epoch 13/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0598 - acc: 0.9747 - val_loss: 1.3040 - val_acc: 0.5556
Epoch 14/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0431 - acc: 0.9831 - val_loss: 0.6250 - val_acc: 0.7778
Epoch 15/30
237/237 [==============================] - 1s 4ms/step - loss: 0.3783 - acc: 0.8945 - val_loss: 2.8109 - val_acc: 0.1852
Epoch 16/30
237/237 [==============================] - 1s 4ms/step - loss: 0.3372 - acc: 0.9030 - val_loss: 0.4436 - val_acc: 0.8889
Epoch 17/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0945 - acc: 1.0000 - val_loss: 0.9048 - val_acc: 0.6296
Epoch 18/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0356 - acc: 0.9958 - val_loss: 0.5516 - val_acc: 0.7407
Epoch 19/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0263 - acc: 0.9916 - val_loss: 0.3969 - val_acc: 0.8148
Epoch 20/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0127 - acc: 0.9958 - val_loss: 0.5036 - val_acc: 0.8148
Epoch 21/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0073 - acc: 0.9958 - val_loss: 0.5929 - val_acc: 0.8148
Epoch 22/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0123 - acc: 0.9958 - val_loss: 0.5014 - val_acc: 0.8519
Epoch 23/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0783 - acc: 0.9958 - val_loss: 0.3049 - val_acc: 0.8889
Epoch 24/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0062 - acc: 1.0000 - val_loss: 0.7293 - val_acc: 0.8519
Epoch 25/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0058 - acc: 1.0000 - val_loss: 0.6191 - val_acc: 0.8148
Epoch 26/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0049 - acc: 1.0000 - val_loss: 0.4268 - val_acc: 0.8519
Epoch 27/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0056 - acc: 1.0000 - val_loss: 0.3985 - val_acc: 0.8889
Epoch 28/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0011 - acc: 1.0000 - val_loss: 0.5152 - val_acc: 0.8889
Epoch 29/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0714 - acc: 0.9958 - val_loss: 0.6255 - val_acc: 0.8519
Epoch 30/30
237/237 [==============================] - 1s 4ms/step - loss: 0.0013 - acc: 1.0000 - val_loss: 0.7043 - val_acc: 0.7778

・評価
正解: 約 95.83%

('Test loss:', 0.04905049502849579)
('Test acc:', 0.9583333134651184)

ディープラーニングで画像認識 実装(3)、keras で、CIFAR-10データの学習

index:

概要

前回は、自前で準備した画像の
keras で画像認識の学習、評価、を行いました。
mnist以外のデータで、CIFAR-10データ を試してみたいと思います

環境

keras : 2.1.3
tensorflow : 1.4
python : 3.5.2

画像データ

kerasの場合、cifar10関連の処理を読み込むと、
カンタンに、学習用データとしてロード可能でした。

下記の import
from keras.datasets import cifar10

50000 枚が学習用、残り 10000 枚が評価用
素数 32x32 で RGB


f:id:knaka0209:20181203163604p:plain

・画像が小さく、画素数が少ない為。
 種類によっては、人が見てもよく判別できない物もありそうです

・種類は、10種類で下記内容
airplane; 飛行機
automobile; 自動車
bird; 鳥
cat; 猫
deer; 鹿
dog; 犬
frog; 蛙
horse; 馬
ship; 船, 舟
truck; 大型トラック

コード

https://github.com/kuc-arc-f/img_CIFAR

・今回は、開発PCで処理時間が長くなりそうで、
 google colabで、学習処理を行いました。

train_colab.py

・ データのロード

if __name__ == '__main__':
    #cifar10をダウンロード
    (x_train,y_train),(x_test,y_test)=cifar10.load_data()
    #
    print(x_train.shape, y_train.shape )
    print(x_test.shape  , y_test.shape )
    #画像を0-1の範囲で正規化
    x_train=x_train.astype('float32')/255.0
    x_test=x_test.astype('float32')/255.0

    #正解ラベルをOne-Hot表現に変換
    y_train=np_utils.to_categorical(y_train,10)
    y_test=np_utils.to_categorical(y_test,10)

・学習の処理

batch_size=32
epoch_num=10
#fit
history=model.fit(x_train,y_train
    ,batch_size=batch_size
    ,nb_epoch=epoch_num
    ,verbose=1,validation_split=0.1)

・ 実行ログ

Using TensorFlow backend.
((50000, 32, 32, 3), (50000, 1))
((10000, 32, 32, 3), (10000, 1))
/usr/local/lib/python2.7/dist-packages/ipykernel_launcher.py:62: UserWarning: The `nb_epoch` argument in `fit` has been renamed `epochs`.
Train on 45000 samples, validate on 5000 samples
Epoch 1/10
45000/45000 [==============================] - 26s 578us/step - loss: 1.4947 - acc: 0.4553 - val_loss: 1.0340 - val_acc: 0.6320
Epoch 2/10
45000/45000 [==============================] - 22s 490us/step - loss: 1.0413 - acc: 0.6291 - val_loss: 0.8798 - val_acc: 0.6878
Epoch 3/10
45000/45000 [==============================] - 22s 495us/step - loss: 0.8964 - acc: 0.6855 - val_loss: 0.7888 - val_acc: 0.7224
Epoch 4/10
45000/45000 [==============================] - 22s 492us/step - loss: 0.8000 - acc: 0.7178 - val_loss: 0.7154 - val_acc: 0.7528
Epoch 5/10
45000/45000 [==============================] - 22s 489us/step - loss: 0.7319 - acc: 0.7452 - val_loss: 0.6705 - val_acc: 0.7704
Epoch 6/10
45000/45000 [==============================] - 22s 494us/step - loss: 0.6809 - acc: 0.7605 - val_loss: 0.6391 - val_acc: 0.7810
Epoch 7/10
45000/45000 [==============================] - 22s 490us/step - loss: 0.6376 - acc: 0.7781 - val_loss: 0.6564 - val_acc: 0.7762
Epoch 8/10
45000/45000 [==============================] - 22s 490us/step - loss: 0.6069 - acc: 0.7881 - val_loss: 0.6671 - val_acc: 0.7802
Epoch 9/10
45000/45000 [==============================] - 22s 496us/step - loss: 0.5759 - acc: 0.7948 - val_loss: 0.6474 - val_acc: 0.7846
Epoch 10/10
45000/45000 [==============================] - 22s 489us/step - loss: 0.5380 - acc: 0.8104 - val_loss: 0.6407 - val_acc: 0.7904
('Test loss:', 0.6536725306987763)
('Test acc:', 0.7773)


評価の、正解率は、 約77%で、いまいちな結果に。
エポック数は、10で少なめです。(GPUでも、数分かかりましたが。)

精度をあげるには、エポック数を増やしたり、
他の、パラメータ変更の必用がありそうですが
試行錯誤したいと思います。

・保存済みの学習ファイル、モデルのロードと、
 評価の処理
predict.py
 => 学習時に、保存したファイルをロード、その後に、評価

    model_file = "cifar10_cnn.json"
    with open(model_file, 'r') as fp:
        model = model_from_json(fp.read())
    model.load_weights("cifar10_cnn.h5")
    model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
#    model.summary()

    # モデルの評価
    loss, acc = model.evaluate(x_test, y_test, verbose=0)
    print('Test loss:', loss)
    print('Test acc:', acc)

関連

KerasでCIFAR-10の一般物体認識
http://aidiary.hatenablog.com/entry/20161127/1480240182

http://kikei.github.io/ai/2018/03/25/cifer10-cnn1.html

cifar10とKerasを使ってCNN(Convolutional Neural Network)を実装してみる
https://qiita.com/God_KonaBanana/items/10fa8bb58cdd1dbd2e59

ディープラーニングで画像認識 実装(2)、画像の前処理

index:

概要

前回は、keras で画像認識の学習、検証(画像認識の判定結果出力)等、
一連の流れを記載しましたが。
ディープラーニングで画像認識で、認識精度を向上させる為に、
学習画像数を増やしたり、前処理での作業を追加する場合がありそうですので、
ImageDataGeneratorを使用して、前処理(画像の水増し)を実施する内容です

・水増し処理なしで、十分な画像を準備できて、
認識精度も予想値以上に、向上している場合は。
不要な処理になりそうですので、精度向上面等で必用な場合は参考頂ければ
と思います。

環境

keras : 2.1.3
tensorflow : 1.4
python : 3.5.2

コード

前回のpushに含まれていますが。
before_proc.py
https://github.com/kuc-arc-f/img_data_test/blob/master/before_proc.py



・ImageDataGenerator の定義、
 元の画像の指定(水増しする元画像)

#
datagen = ImageDataGenerator(
        rotation_range=40,
        width_shift_range=0.2,
        height_shift_range=0.2,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True,
        fill_mode='nearest')

img = load_img('neko_13.jpg')

.flow を使用して、ループ処理
指定回数で、処理を抜けます
save_to_dir: 保存先のフォルダ
save_prefix: ヘッダ文字

#
img_num = 20
i = 0
#for batch in datagen.flow(x, batch_size=1,
#                          save_to_dir='preview', save_prefix='tori', save_format='jpg'):
for batch in datagen.flow(x, batch_size=1,
                          save_to_dir='data/train/cat', save_prefix='neko_13', save_format='jpg'):

    i += 1
    if i > img_num:
        break

実行結果

f:id:knaka0209:20181201150536p:plain

水増し画像が追加されました。
前回の、画像の学習用データも。
同様の手法で作成した形となります

まとめ

上記の画像処理も、比較的カンタンに実装できて
kerase ImageDataGeneratorを使うと、前処理含めて
画像の学習処理ができそうです。

ディープラーニングで画像認識 実装、keras  ImageDataGenerator

index:

概要

mnist 等のサンプル以外で、画像認識の実装テストを行いました。
条件として、自前の画像を準備(カメラ撮影、ネット検索等で取得)し、
ラベル情報を追加して、教師データとして。学習する実践編の形となります。

環境

keras : 2.1.3
tensorflow : 1.4
python : 3.5.2

処理の流れ

・学習
・学習結果、保存
・学習結果、ロード
・検証(predict)
=>画像認識(判定ラベルの出力)

前処理については、次回以降で記載したいと思います。

コード

github.com


上記に、コミットしています。

学習データの配置

data フォルダの下に、
train : 学習用
validation : 検証用
を作成し、
各フォルダの下に、
認識ラベル単位のフォルダ、その下に、学習用の画像を配置

C:\tmp\2017_tmp\python35\tensorflow\img_data_test>tree data
フォルダー パスの一覧:  ボリューム Acer
ボリューム シリアル番号は 7221-E6BF です
C:\TMP\2017_TMP\PYTHON35\TENSORFLOW\IMG_DATA_TEST\DATA
├─train
│  ├─bird
│  ├─cat
│  ├─dog
│  └─flower
└─validation
    ├─bird
    ├─cat
    ├─dog
    └─flower

ファイル一覧、の一部。
学習用(train)、cat (ネコ) 種類の画像を配置
その他の認識させたい、単位でフォルダを作成し
検証用も、同様に。配置します

C:\tmp\2017_tmp\python35\tensorflow\img_data_test>dir data\train\cat

2018/11/27  09:51    <DIR>          .
2018/11/27  09:51    <DIR>          ..
2018/11/26  15:46            29,476 cat_0_1.jpg
2018/11/26  15:46            24,597 cat_0_1016.jpg
2018/11/26  15:46            27,204 cat_0_1027.jpg
2018/11/26  15:46            25,610 cat_0_1213.jpg
2018/11/26  15:46            22,106 cat_0_1290.jpg
2018/11/26  15:46            25,508 cat_0_1396.jpg
2018/11/26  15:46            22,789 cat_0_1464.jpg
2018/11/26  15:46            24,569 cat_0_1548.jpg
2018/11/26  15:46            23,503 cat_0_1951.jpg
2018/11/26  15:46            28,274 cat_0_1960.jpg
2018/11/26  15:46            23,413 cat_0_1986.jpg
2018/11/26  15:46            27,176 cat_0_2018.jpg
2018/11/26  15:46            23,045 cat_0_2026.jpg
2018/11/26  15:46            27,157 cat_0_2090.jpg
2018/11/26  15:46            24,045 cat_0_2145.jpg
2018/11/26  15:46            23,925 cat_0_2208.jpg
2018/11/26  15:46            25,596 cat_0_2324.jpg
2018/11/26  15:46            23,728 cat_0_2454.jpg
2018/11/26  15:46            23,944 cat_0_2714.jpg
2018/11/26  15:46            26,649 cat_0_2750.jpg

実行方法

・ train.py
=> 学習処理、学習済みファイルの保存

・predict.py
=> 検証(画像判定)の処理、検証したい画像ファイルを指定します。
 例: python predict.py ファイル名

説明など

・学習
ImageDataGenerator で、学習/検証 各フォルダの、画像リサイズ、
ラベル(class)を生成します
epochs 数は、適等に修正下さい。

flow_from_directory は、フォルダを指定すると、
学習に必用なデータに、変換してくれそうですので
便利でしたが。変換後の数値データ等が、カンタンに見れないようで
いまいち、不安が残りました。
class_mode='categorical' を指定すると、3種類以上のカテゴリにも
対応されるようです

train.py

batch_size = 32
epochs = 5
#epochs = 1
#
#ImageDataGenerator
train_datagen = ImageDataGenerator(
    rescale=1.0 / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1.0 / 255)
#
train_generator = train_datagen.flow_from_directory(
        'data/train',
        target_size=(128, 128),
        batch_size=batch_size,
        class_mode='categorical')
label_dict = train_generator.class_indices
print( label_dict )
num_categ =len(label_dict)
#
validation_generator = test_datagen.flow_from_directory(
        'data/validation',
        target_size=(128, 128),
        batch_size=batch_size,
         class_mode='categorical')

・モデル作成、実行。結果の保存。

#model
model_cls= Img_Model(num_categ)
model= model_cls.get_model()
model.compile(loss='categorical_crossentropy',
        optimizer='adam',
        metrics=['accuracy'])

#fit
history = model.fit_generator(
        train_generator,
        samples_per_epoch=800,
        nb_epoch=epochs,
        validation_data=validation_generator,
        nb_val_samples=200)
model.save_weights('img_test.h5')  

・ 検証
predict.py
学習済ファイルのロード、
モデルの コンパイル
・ predict で、検証。
numpy arrayが、出力され、各class (フォルダ単位の種類)
ごとの正解率が出力されますので、class を検索して出力します。

#
model_cls= Img_Model(num_categ)
model= model_cls.get_model()

model.load_weights( 'img_test.h5')

model.compile(loss='categorical_crossentropy',
        optimizer='adam',
        metrics=['accuracy'])

pred  = model.predict(x)[0]

ログ等

・検証の結果
neko_13.jpg で、ネコの画像を検証
class=cat
=> ネコの判定が、出力されました、(正解です)

python   predict.py neko_13.jpg

Using TensorFlow backend.
neko_13.jpg
Found 243 images belonging to 4 classes.
{'cat': 1, 'dog': 2, 'bird': 0, 'flower': 3}
2018-11-27 17:04:02.157415: I C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\35\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU
 compiled to use: AVX
predict:
[  8.98553699e-05   9.68049169e-01   3.16024683e-02   2.58460728e-04]
max= 0.968049
dict-value:
1
class=cat

・train の実行ログ
学習画像は、少なめですが。
エポック単位で、110秒ほど処理していますので
作業用のwinPCでは、画像の増加や、パラメータ変更を行う場合。
かなり処理時間が必用かもしれません。

f:id:knaka0209:20181127170943p:plain

カスタムテーマで色調を変更する。 Hexoで高速サイトを構築する(5)

概要

前回の、Hexo 静的サイトジェネレーターの関連となりますが、
カスタムテーマの色調を、変更しやすくできるように修正しました。

前回と同様、bootstrap3 + CSS3 でレスポンシブ構成ですが。
lessを使用、色のRGB値を変数に設定し。
一括して色の値を、変更できるように検討しました。
色は、マテリアルデザインの色を参考にしています。

lessc main.less main.css
lessc main-sp.less main-sp.css

lessc (コンパイラ)で、CSS生成します

設定方法など

less ファイルに、色の各設定を記載しておきます。
マテリアルデザイン
メインカラー、サブカラー、アクセントカラーの、3色に対応してます。

@mycolor-main  : #757575;
@mycolor-sub   : #9E9E9E;
@mycolor-accent: #FF7043;

node.js テンプレートから、設定する色の CSSを読み込みます。

  <%- css('css/main.css?A3') %>
  <link href="<%- config.root %>css/main-sp.css?A3" rel="stylesheet" media="screen and (max-width: 480px)">

generate して、サイトにコピーします。

Github

修正版のテーマ公開しました。
https://github.com/kuc-arc-f/theme_ex5github.com

カスタムテーマを追加しました。サイドバー付 Hexoで高速サイトを構築する(4)

f:id:knaka0209:20180708135701p:plain

概要

前回の、Hexo 静的サイトジェネレーターの関連となりますが、
カスタムテーマを追加しました。

前回と同様、bootstrap3 + CSS3 でレスポンシブ構成
1) top画面サイドバー付、2カラムのレイアウト
2) 色調は、グレー系としました。

デモURL

https://kuc-arc-f.github.io/hexo_4/

Github pages で公開しています。

カスタムテーマ

github で公開しました。
github.com

カスタムテーマを更新しました。 Hexoで高速サイトを構築する(3)

f:id:knaka0209:20180707165113p:plain

概要

前回の、Hexo 静的サイトジェネレーターの関連となりますが、
カスタムテーマ更新版を公開しました。

前回と同様、bootstrap3 + CSS3 でレスポンシブ構成
1) 投稿(post)詳細の、サイドバー追加。レイアウト調整
2) カテゴリ一覧の、レイアウト調整

デモURL

https://kuc-arc-f.github.io/hexo_3/

Github pages で公開しています。

カスタムテーマ

github.com

プロジェクト/themes/ 下に配置し、コンフィグでテーマ設定、
ジェネレート(hexo generate)します。