- 1. 概要
- 2. データ取得
- 3. 学習
- 4. ソース作成
- 5. モデルの評価
- 6. 参考
1. 概要
前ページで、作成した環境では、下記の判定を行う、サンプルが用意されています。
| コード | 内 容 | 備 考 |
| dogs vs cats | 画像が犬か猫か判定する | |
| camvid_unet | 車載カメラで撮影された画像 | 何をするかはよくわからない |
| cifar | 画像認識 | |
| rps | グー・チョキ・パーの手の画像を識別 | |
| mnist | 0~9 の手書き文字を判定 | |
| svhn | 家にある番号(日本の表札?)を判定 | |
ここでは、「dogs vs cats」を使用してみます。
本ページは、下記のサイトを参考にさせていただきました。
「cannot import name 'preserve_channel_dim' from 'albucore.utils' · Issue #426 · Gourieff/comfyui-reactor-node」
2. データ取得
サンプルで使用する、データを取得します。
下記のサイトへアクセスします。
「dogs vs cats」
アカウントの登録が必要になります。
アカウントを登録したら、「Download」で、ダウンロードできます。

「archive.zip」というファイルがダウンロードされます。
この中に、下記のフォルダが存在します。
dogs_vs_cats
test
train
「dogs_vs_cats」を展開します。
圧縮率が非常に高く、展開には、気の遠くなるような時間がかかりますので、展開し始めたら、いったん別の作業をして、次の日まで待つような忍耐が必要です。
展開した、「dogs_vs_cats」を前ページで作成した、下記のディレクトリへ展開します。
ai8x-training/data/cats_vs_dogs
なんでか、「dogs_vs_cats」を「cats_vs_dogs」と名前を変えるのであります。
どういうことかは、わかりませぬ。
3. 学習
前ページで作成した環境で。
cd ai8x-training/
source .venv/Scripts/activate
scripts/train_catsdogs.sh
これが、末尾に書いているエラーになるので、参考サイトを読んで。
python -m pip install albucore==0.0.16
再度。
scripts/train_catsdogs.sh
ここは、おそっろしく時間がかかります。
12時間以上かかる、覚悟が必要かと思います。
ところどころ。
INFO:albumentations.check_version:A new version of Albumentations is available: 1.4.18 (you have 1.4.12). Upgrade using: pip install -U albumentations. To disable automatic update checks, set the environment variable NO_ALBUMENTATIONS_UPDATE to 1.
ちゅうのが、やたら出力されるので、下記を先に流しておいた方がいいかもしれません。
python -m pip install albumentations==1.4.18
終了すると、下記のようなメッセージが出力されます。
(YYYY.MM.DD-HHMMSS は、年.月.日-時分秒)
(当然、日時的なものはそのときの値になります)
Log file for this run: ドライブ:\パス\ai8x-training\logs\YYY.MM.DD-HHMMSS\YYY.MM.DD-HHMMSS.log
実行時に出力されていたメッセージは、「.log」で確認することができるかと思います。
実行結果として、「ドライブ:\パス\ai8x-training\logs\YYYY.MM.DD-HHMMSS」配下に、下記のファイルが作成されます。
configs\schedule-catsdogs.yaml
2024.10.11-142258.log
best.pth.tar
checkpoint.pth.tar
qat_best.pth.tar
qat_checkpoint.pth.tar
「.tar」は、重みファイル(らしい)。
下記で終了します。
deactivate
4. ソース作成
前項で作成したものをもとにして、「MAX78000」の組み込み用のソースを作成します。
(ここ、実はよう理解していません)
cd ../ai8x-synthesis
source .venv/Scripts/activate
前項で作成した、重みファイルを量子化(?)します。
python quantize.py ../ai8x-training/logs/YYYY.MM.DD-HHMMSS/qat_best.pth.tar trained/qat_best-q-YYYYMMDD-HHMMSS.pth.tar --device MAX78000
新たに、下記のファイルが作成されます。
ai8x-synthesis/trained/qat_best-q-YYYYMMDD.pth.tar
プログラム作成。
(下記は、1行で入力なので、注意)
python ai8xize.py --test-dir sdk/Examples/MAX78000/CNN --prefix cats-dogs --checkpoint-file trained/qat_best-q-YYYYMMDD-HHMMSS.pth.tar --config-file networks/cats-dogs-hwc.yaml --fifo --softmax --device MAX78000 --timer 0 --display-checkpoint --verbose "$@"
下記のような出力がありまして。
(「WARNING」が気にはなりますが・・・)
Following Github server redirection from /repos/MaximIntegratedAI/ai8x-synthesis to /repositories/265377030
Configuring device: MAX78000
Reading networks/cats-dogs-hwc.yaml to configure network...
WARNING: Cannot run "yamllint" linter to check networks/cats-dogs-hwc.yaml
Reading ../ai8x-training/logs/2024.10.11-142258/qat_best-q.pth.tar to configure network weights...
Checkpoint for epoch 175, model ai85cdnet - weight and bias data:
InCh OutCh Weights Quant Shift Min Max Size Key Bias Quant Min Max Size Key
3 16 (48, 3, 3) 8 -1 -96 127 432 conv1.op.weight N/A 0 0 0 0 N/A
16 32 (512, 3, 3) 8 -1 -97 88 4608 conv2.op.weight N/A 0 0 0 0 N/A
32 64 (2048, 3, 3) 8 -1 -110 81 18432 conv3.op.weight N/A 0 0 0 0 N/A
64 32 (2048, 3, 3) 8 -1 -107 103 18432 conv4.op.weight N/A 0 0 0 0 N/A
32 32 (1024, 3, 3) 8 -1 -111 97 9216 conv5.op.weight N/A 0 0 0 0 N/A
32 16 (512, 3, 3) 8 -1 -114 122 4608 conv6.op.weight N/A 0 0 0 0 N/A
1024 2 (1, 2, 1024) 8 -2 -74 91 2048 fc.op.weight (2,) 8 -31 27 2 fc.op.bias
TOTAL: 7 parameter layers, 57,778 parameters, 57,778 bytes
Configuring data set: cats_vs_dogs.
cats-dogs...
Arranging weights... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100%
Storing weights... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100%
Creating network... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100%
この結果。
ai8x-synthesis\sdk\Examples\MAX78000\CNN\cats-dogs
というフォルダの下に、下記のようなファイルが作成されます。
.settings
.vscode
.cproject
.project
cats-dogs.launch
cnn.c
cnn.h
log.txt
main.c
Makefile
project.mk
sampledata.h
sampleoutput.h
softmax.c
weights.h
これが、「MAX78000」に組み込むためのソースファイル一式になるはずなのだ。
環境設定をリセットしておきます。
deactivate
5. モデルの評価
下記で、「量子化したチェックポイントを使って組込むモデルの評価」ができる(らしい)。
cd ../ai8x-training
source .venv/Scripts/activate
python train.py --model ai85cdnet --dataset cats_vs_dogs --confusion --evaluate --exp-load-weights-from ../ai8x-synthesis/trained/qat_best-q-YYYY.MM.DD-HHMMSS.pth.tar -8 --device MAX78000 "$@"
結果、下記のような出力があります。
(日時の表記は、量子化ファイル出力時の日時とプログラム実行時の日が混在しますので、ご注意ください)
(パスの部分も伏字にしています)
Log file for this run: パス\ai8x-training\logs\YYYY.MM.DD-HHMMSS\YYYY.MM.DD-HHMMSS.log
Configuring device: MAX78000, simulate=True.
No CUDA, ROCm, or MPS hardware acceleration, training will be slow
=> loading checkpoint ../ai8x-synthesis/trained/qat_best-q-YYYY.MM.DD-HHMMSS.pth.tar
=> Checkpoint contents:
+----------------------+-------------+-----------+
| Key | Type | Value |
|----------------------+-------------+-----------|
| arch | str | ai85cdnet |
| compression_sched | dict | |
| epoch | int | 184 |
| extras | dict | |
| optimizer_state_dict | dict | |
| optimizer_type | type | Adam |
| state_dict | OrderedDict | |
+----------------------+-------------+-----------+
=> Checkpoint['extras'] contents:
+-----------------+--------+---------------+
| Key | Type | Value |
|-----------------+--------+---------------|
| best_epoch | int | 184 |
| best_mAP | int | 0 |
| best_top1 | float | 80.0 |
| clipping_method | str | MAX_BIT_SHIFT |
| current_mAP | int | 0 |
| current_top1 | float | 80.0 |
+-----------------+--------+---------------+
Loaded compression schedule from checkpoint (epoch 184)
=> loaded 'state_dict' from checkpoint '../ai8x-synthesis/trained/qat_best-q-YYYY.MM.DD-HHMMSS.pth.tar'
Optimizer Type: <class 'torch.optim.sgd.SGD'>
Optimizer Args: {'lr': 0.1, 'momentum': 0.9, 'dampening': 0, 'weight_decay': 0.0001, 'nesterov': False, 'maximize': False, 'foreach': None, 'differentiable': False, 'fused': None}
torch.compile() not available, using "eager" mode
Dataset sizes:
test=59
--- test (ckpt) ---------------------
59 samples (256 per mini-batch)
Test: [ 1/ 1] Loss 1.585910 Top1 50.847458
==> Top1: 50.847 Loss: 1.586
==> Confusion:
[[18 12]
[17 12]]
Log file for this run: パス\ai8x-training\logs\YYYY.MM.DD-HHMMSS\YYYY.MM.DD-HHMMSS.log
この意味については、まだ、わかっていません。
わかったら、記述したいのですが・・・追而書。
6. 参考
scripts/train_catsdogs.sh
これが、下記のようなエラーになります。
Traceback (most recent call last):
File "C:\Users\ユーザ名\AppData\Local\Programs\Python\Python311\Lib\pydoc.py", line 457, in safeimport
module = __import__(path)
^^^^^^^^^^^^^^^^
File "ai8x-training\datasets\cats_vs_dogs.py", line 25, in <module>
import albumentations as album
File "ai8x-training\.venv\Lib\site-packages\albumentations\__init__.py", line 6, in <module>
from .augmentations import *
File "ai8x-training\.venv\Lib\site-packages\albumentations\augmentations\__init__.py", line 1, in <module>
from .blur.functional import *
File "ai8x-training\.venv\Lib\site-packages\albumentations\augmentations\blur\__init__.py", line 1, in <module>
from .functional import *
File "ai8x-training\.venv\Lib\site-packages\albumentations\augmentations\blur\functional.py", line 9, in <module>
from albucore.utils import clipped, maybe_process_in_chunks, preserve_channel_dim
ImportError: cannot import name 'preserve_channel_dim' from 'albucore.utils' (ai8x-training\.venv\Lib\site-packages\albucore\utils.py)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "ai8x-training\train.py", line 1523, in <module>
main()
File "ai8x-training\train.py", line 173, in main
ds = locate('datasets.' + name[:-3])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\kitay\AppData\Local\Programs\Python\Python311\Lib\pydoc.py", line 1802, in locate
nextmodule = safeimport('.'.join(parts[:n+1]), forceload)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\kitay\AppData\Local\Programs\Python\Python311\Lib\pydoc.py", line 472, in safeimport
raise ErrorDuringImport(path, sys.exc_info())
pydoc.ErrorDuringImport: problem in datasets.cats_vs_dogs - ImportError: cannot import name 'preserve_channel_dim' from 'albucore.utils' (ai8x-training\.venv\Lib\site-packages\albucore\utils.py)
ここは、参考サイトを読んで。
python -m pip install albucore==0.0.16
|