ディープラーニングで一般物体検出する手法”YOLO”のTensorFlow版で独自データセットを使えるようにしてみた
はじめに
”人工知能””AI”という言葉とともに聞かない日はないくらいに急速に広がりつつある”ディープラーニング”。
ネット上には特に画像認識を中心にいろんなコードがあふれており、これらを活用したいと考えている人も多いかと思います。
が、やはりというか、巷のディープラーニング用コードを転用して業務や趣味で独自データセットを使いたいと思っている人にとってはまだまだ敷居が高いのが現状。
このほど、一般物体検出の手法の一つである”YOLO v1”を使ったコードを改良し、64ビット Windows版Anaconda 4.2.0 + TensorFlow 1.2 + OpenCV環境にて独自データセットを使えるようにしたので、ここで手順を紹介いたします。
コードはたくさん出てるんですが、この”独自データセット”を作成して実際にディープラーニングを実行するところまでをきちんと書いたものがほとんど見当たらないんですよね。
私自身かなり苦労したので、ここではなるべくちゃんと書きます。
まず、元コードは以下のものを使用してます。
https://github.com/hizhangp/yolo_tensorflow
”YOLO v1”という手法は2015年12月時点の技術ですが、対象オブジェクトがめちゃくちゃたくさん出てくる画像でなければ使える手法。
このコード自身は36層のニューラルネットワークからなる、わりと本格的なCNNコードです。
このままでもyolo_small.ckptを使った「test.py」での画像認識や、PASCAL VOC2007のデータを使ったディープラーニングは可能ですが、独自データセットを使おうとするとエラーが出て使用不能でした。
また、Python 2.7用に書かれているようで、Python 3.xでそのまま使うことができません。
なので、Python 3.5で使える、独自データセットが使えるようにすることを目的に元コードの修正を行い、かつ独自データセット作成ツールと作り方を紹介します。
準備
ここではWindowsでの動作を前提に書いてます。が、Linux版でも概ね同じかと思われます。
Windows版のAnaconda 4.2.0入れて、TensorFlowをインストールする手順は「TensorFlow(+Keras)がWindowsで簡単にインストールできた件 - Qiita」を参照ください。
OpenCVも使いますので「Windows Anaconda Python 3.5 への OpenCV 3.1 のインストール - にせねこメモ」を参考にOpenCVも入れておいてください。
さて、先の元コード(https://github.com/hizhangp/yolo_tensorflow)をダウンロード。Windowsなら「Clone or Download」をクリックして「Download Zip」というのをクリックすればZIPファイルが入手できます。Linuxの方なら「git clone ~」で入手可能でしょうか。
適当なフォルダに展開後、以下の3つのコードを修正しました。
・ test.py
・ train.py
3つのコード名を右クリックして”名前を付けてリンク先を保存”としてもらうと、コードが入手できます。
これらのコードを、元コードと入れ替えておいてください。
さて、機械学習に必要な画像のデータセットを作る必要があります。
Linuxな方なら「物体検出用の画像アノテーション正解データ生成に便利なツール - verilog書く人」からツールをダウンロードすればいいんですが、Windows用というのはありませんでした・・・
てことでWindows版アノテーション用ツールをVisual Basic 2005で作ってみました。
これをダウンロードしておいてください。使い方は後述。
画像データセットの作成
さて、ディープラーニング用教師データ作成編です。
例えば犬・猫を識別させたいときは大量の犬・猫の画像、社員とそれ以外の人を区別するAIを作りたいときはたくさんの社員の顔写真などが必要となります。
こればかりは自身でそろえていただくほかはありません。
やみくもにそろえろというのはなんですから、参考資料を載せておきます。
こちらの資料は、ディープラーニング向け教師データ作成に大変参考になります。ぜひご覧ください。
ここでは深層学習用画像ファイルを用意できているという前提で進めます。
さて、画像ファイルをそろえただけではディープラーニングさせることはできません。
画像内にある認識させたい物体の位置とそのラベル名が必要です。
この位置とラベル名を記述したファイルが「アノテーションファイル」と呼ばれるものです。
ちなみにこのコードで使うデータセットの形式は「PASCAL VOC 2007形式」ってのを使ってます。ディープラーニング用コードでは一般的な形式のようです。
この形式のアノテーションをWindows上で作成するためのツールが、先の「AnnotationTool.exe」です。
上にこのツールの外観と手順の番号をざっくり載せました。
使い方を①~⑦の順に書きます。
① まずアノテーションファイル(*.xmlと”trainval.txt”)を保存するフォルダ(作業フォルダ)を作りドラッグ&ドロップ
② アノテーションを作成したい画像ファイルをドラッグ&ドロップ
③ 画像ファイルが出てくるので、物体をマウスで囲みます
④ ”ラベル名”のテキストボックスに物体の名前を書きます(半角英数)
⑤ ”ラベル作成”をクリックすると登録
同一画像内で認識させたい物体の数だけ③~⑤を繰り返します。
⑥ 一通り終わったら「Annotation追加」をクリック
次の画像ファイルを読み込むため、再び②で別の画像を読み込み、⑥までを繰り返します。
すべての画像ファイルのアノテーション登録が終わったら
⑦ ”終了”をクリック
これで作業完了。
できたデータセットを以下の場所に登録。
「作業フォルダ」には以下のようなファイルができているはずです。
ここから”*.xml”のファイルを
(yolo_tensorflowのフォルダ)\data\pascal_voc\VOCdevkit\VOC2007\Annotations
の中へ移動。
ちなみに*.xmlの中身はこんな感じ。
”画像ファイル名.xml”という名前で、ラベル名(<name>)と位置(<bndbox>)が物体の数だけ記載されてます。
これが画像ファイルごとに必要となります。
また、”trainval.txt”というファイルは以下の場所に移動。
(yolo_tensorflowのフォルダ)\data\pascal_voc\VOCdevkit\VOC2007\ImageSets\Main
このフォルダ内で”trainval.txt”をコピーして、”test.txt”という名前のファイルを作成します。
つまり”Main”フォルダ内には”trainval.txt”、”test.txt”の2つのファイル(中身は同じ)が存在した状態にしておきます。
なぜかこうしないと動かないことがあるんですよね・・・プログラム上は”trainval.txt”だけでいいはずなんですが。
で、教師データとなる画像ファイルは以下のフォルダに入れておきます。
(yolo_tensorflowのフォルダ)\data\pascal_voc\VOCdevkit\VOC2007\JPEGImages
これでデータセットは準備完了。
設定
続いて”yolo”フォルダにある”config.py”の中身を記載します。
項目はたくさんありますが、書き換える必要のある項目は以下の
・ CLASSES
この後ろに、アノテーションファイル作成時に登録したラベル名をすべて書き込みます。
(追記 1)
後で書きますが、元々ある「config.py」のラベル(20個)の頭から書き換えて使う方がいいです。
例えば、以下が元々あるオリジナルの”CLASSES”ですが、
CLASSES = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus',
'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse',
'motorbike', 'person', 'pottedplant', 'sheep', 'sofa',
'train', 'tvmonitor']
今回学習したいデータのラベルが”hogehoge”、”haguhagu”だとしたら、
CLASSES = ['hogehoge', haguhagu', 'bird', 'boat', 'bottle', 'bus',
'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse',
'motorbike', 'person', 'pottedplant', 'sheep', 'sofa',
'train', 'tvmonitor']
のように、頭2つを書き換えます。
この方法だと、最大20個までしかできませんが・・・
(追記 1 終了)
・ BATCH_SIZE
デフォルト値は”45”。そのままでもいいですが、ラベル当たりの画像ファイルが45枚より少ない場合は20などとしておいた方がよさそう。
・ MAX_ITER
最大サイクル数です。
いきなり”10000”でもいいですが、最初は10~100程度にして様子見するのがよさそう。
・ SUMMARY_ITER
学習での誤差(losses)のTensorBoard用データの書き込みタイミングです。10~100程度でもいいですが、MAX_ITERを100程度に刻む場合なら1~10としておいた方がいいでしょう。
・ SAVE_ITER
学習データ(save.ckpt-***という名前で保存)を書きだすサイクル数です。MAX_ITERの5~10分の一くらいにしておいた方がよさそうです。
ディープラーニング実行
いよいよディープラーニング実行です。
実行前に確認ですが、新たなデータを使って深層学習するときには、”(yolo_tensorflowのフォルダ)\data\pascal_voc\cache\”にファイルが入ってたら消してください。何もなければOKです。
以下のコマンドを実行します。
> python train.py
(追記 2)
学習済みデータなしでも流れますが、何度やってもまともに収束しません。
この後出てくる「YOLO_small.ckpt」をダウンロードし、これを初期値にして開始します。
YOLO_small.ckpt ダウンロード元:YOLO_small.ckpt - Google ドライブ
コマンドは以下のように打ち込みます。
> python train.py --weights YOLO_small.ckpt
写真系の教師データなら、これでうまくいきます。
(追記 2 終了)
ところで、うちでは以前「GeForce GTX 1050Ti買ってディープラーニングを加速してみた: EeePCの軌跡」でも書いた通り、ディープラーニング用にGeForce GTX1050Tiを導入してます。
ところがこのコードをGeForce GTX1050TiのGPUで実行すると、1050Tiのメモリ(4GB)では全く足りなくて落ちてしまいます。
GTX1080の8GBくらいは必要っぽい、できればGTX1080Tiの11GBくらいないと実行できないも・・・というくらいメモリ馬鹿食いコードです。
仕方がないので、うちではCPUオンリーで実行しました。
CPUのみで実行したい場合は、以下のようなコマンドを打ち込みます。
> python train.py --gpu None
これでCPUのみで動作。
(追記 3)
「YOLO_small.ckpt」を初期値に使うので、このコマンドは
> python train.py --weights YOLO_small.ckpt --gpu None
となります。
(追記 3 終了)
もっとも、GPUの恩恵がなくなるので恐ろしく遅いですが。
また、以前に機械学習を実行して学習データ(save.ckpt-***)がある場合、これを初期値にして続きから機械学習を実行することができます。
その場合は、
”(yolo_tensorflowのフォルダ)\data\pascal_voc\output\(実行日時のフォルダ)”にある学習データ(”save.ckpt-***.data-0000-of-0001”と”save.ckpt-***.index”の2つ)を
”(yolo_tensorflowのフォルダ)\data\pascal_voc\weights\”に入れて
以下のコマンドを実行します。
> python train.py --weights save.ckpt-*** --gpu None
これで続きから実行できます。
実行中の画面は以下。
実は、まだ最後までディープラーニングを流したことがありません。
このためどうやって終了したかをまだ確認したことがないのであれですけど。
この一覧で出てくる”Loss:”の値が小さくなっているならまだ過渡状態。
十分小さくなって、頭打ちになってくれば学習終了状態じゃないかと思われます。
おそらく5000~10000サイクル流さないと収束しないと思われますが、うちの環境でCPUオンリーで実行すると5000~10000分かかることがわかってます。
仮に5000サイクルで終わるとしても、5000分っていうのは・・・要するに3.5日ってことです。
さすがにPCを4日間つけっぱなしで全開運転というのはちょっとできませんねぇ・・・
GTX1080Tiが欲しいと思う、今日この頃です。
(追記 4)
職場で、最後まで回しました。
結果として、上の追記 1~3を加えました。そちらを参照願います。
(追記 4 終了)
一般物体検出・認識コードの実行
さてディープラーニングが終わったという前提で、画像認識の実行に移ります。
機械学習が終わってなくても”yolo_small.ckpt”という学習済みデータを入手すれば、この後の画像認識を実行できます(その場合は設定ファイル”config.py”を、元データの”config.py”に戻しておいてください)。
YOLO_small.ckpt ダウンロード元:YOLO_small.ckpt - Google ドライブ
まず学習済みデータを
”(yolo_tensorflowのフォルダ)\data\weights\”
に入れます。
また認識に使う画像ファイルを
”(yolo_tensorflowのフォルダ)\test\”
に入れておきます。
続いて、以下のコマンドを実行。
> python test.py --weights save.ckpt-***
(--weights の後ろは学習済みデータのファイル名)
すると
こんな感じの画像が出てきます。
(上の画像は、レゴランドの家族写真を”YOLO_small.ckpt”で検出・認識させたもの)
うまく対象物をとらえていれば、枠とラベル、認識率の数値が表示されるはずです。
これで独自データを使った一般物体検出コード”YOLO_TensorFlow”の使い方の説明は終わりです。
教師データとなる画像データをそろえて、ディープラーニングして、実際にテストして・・・を繰り返し、必要な認識精度になるまで繰り返す。
あとは「test.py」をベースにコードを改良し、させたい”動作”をこのコードにつけ加えていくだけです。
しかし、その前にやはり”ハードウェアの強化”は必須ですね。
さすがにディープラーニングの実行に何日もかかるようでは、学習データの調整のための試行錯誤なんてできませんし。
これくらいの深層学習実行にはやはりGPUボードは必須、できればGTX1080Tiの2枚挿しくらいが必要ですね。
« iOS 11パブリックベータ版を使って一週間ほど経ちましたが | トップページ | Interface 2017年8月号は”ディープラーニング特集” »
「数値解析系」カテゴリの記事
- Windows 11でFORTRANをコンパイルしたい!という方への対処法(2025.01.04)
- どこに視線を向けているかを可視化してくれる物体検出器(2024.12.23)
- 2024年まとめ記事(2024.12.31)
- 生成AI解説書籍「ChatGPT & 生成AI」という本を買った(2024.12.08)
- Googleの生成AI「Gemini Advanced」に入ってみた(2024.12.01)
コメント
« iOS 11パブリックベータ版を使って一週間ほど経ちましたが | トップページ | Interface 2017年8月号は”ディープラーニング特集” »
ダウンロードしたファイルにdataフォルダが見当たらないのですが、どうすればよいでしょうか。
投稿: | 2017年11月 8日 (水) 22時44分
こんにちは、??さん。
dataフォルダ以下は自分で作成します。PASCAL VOCとWeight用のファイルを落として入れます。詳しくは、本文をご覧下さい。
投稿: arkouji | 2017年11月10日 (金) 18時02分
deeplearningを実行すると
Traceback (most recent call last):
File "train.py", line 165, in
main()
File "train.py", line 153, in main
pascal = pascal_voc('train')
File "/home/naoya/Documents/yolo_tensorflow/utils/pascal_voc.py", line 27, in __init__
self.prepare()
File "/home/naoya/Documents/yolo_tensorflow/utils/pascal_voc.py", line 56, in prepare
gt_labels = self.load_labels()
File "/home/naoya/Documents/yolo_tensorflow/utils/pascal_voc.py", line 98, in load_labels
label, num = self.load_pascal_annotation(index)
File "/home/naoya/Documents/yolo_tensorflow/utils/pascal_voc.py", line 117, in load_pascal_annotation
h_ratio = 1.0 * self.image_size / im.shape[0]
AttributeError: 'NoneType' object has no attribute 'shape'
上記のエラーが発生します。
pascal_voc.pyを参照したり手順をもう一度確認しましたが、原因がわかりません。
勝手な勘ですが、JPEGImagesの中身が画像ファイルではなく他のものではないかと・・・shape[0]とかshape[1]と指定されているようですが、画像ファイルのみなら2つもshapeする要素が無いように思えるのですが・・・長々とすみませんがご教授願います。
投稿: redbull | 2017年12月14日 (木) 07時32分
こんにちは、redbullさん。
見たことがないエラーですね・・・このコード、一旦画像データを「pascal_~_gt_labels.pkl」というファイルに変換して「./data/pascal_voc/cache」に格納します。その段階でのエラーのようですね。
まずshape[0]とか[1]という部分ですが、これはアノテーションファイルで1つの画像から2つ以上の画像を取り出そうとしている場合もあるので、使っている配列だと思います。
例えば「0005.jpg」というファイルのアノテーションファイル「0005.xml」に~の塊が3つあれば、一つの画像ファイルから3つの画像を取り出していることになります。
ただ、このエラーを見ると、一つも取り出せなかったといっているようですね。考えられるのは「Annotations」と「JPEGImages」に入っているファイル名がアンマッチになっている、「ImageSets/Main」に入っている「trainval.txt」がないか記述が間違っている、などが考えられます。ちなみに、このデータが入っているディレクトリは「./data/pascal_voc/VOCdevkit/VOC2007」の直下になっていますか?
あるいは、「./data/pascal_voc/cache」にキャッシュが残ったまま動かすと変なエラーが出ることがあります。ここをいったん空にするとうまくいくことがあります。
今わかるのは、こんなところでしょうか?
投稿: arkouji | 2017年12月15日 (金) 10時06分
早速の返信ありがとうございます。
shape[ ]の部分に関してはなるほど!納得いたしました。こちらの勉強不足ですみません。
しかしながら同じエラーが表示されます。
言われたように、「Annotations」と「JPEGImages」のファイル名を確認しましたが問題ありませんでした。また、「trainval.txt」の記述と存在の有無も確認しましたが問題ありませんでした。加えてデータのディレクトリも合っております。
naoya@naoya-Vostro-260s:~/Documents/yolo_tensorflow/data/pascal_voc/VOCdevkit/VOC2007$ ls
Annotations ImageSets JPEGImeges
いま現在使用しているのがubuntu16.04でarkoujiさんがこのページで紹介していらっしゃるhttp://segafreder.hatenablog.com/entry/2016/11/27/101541より画像にアノテーションを行っていますが、このxmlファイルの中身がarkoujiさんが見本で示されているxmlファイルの中身と少し異なります。
見本では
・
・
・
となっていますが、linux用のツールでxmlファイル化すると
pic3
001
/home/naoya/Documents/pic3/001.jpg
Unknown
1284
416
3
0
・
・
・
となります。この辺りが原因としてエラーがでるのでしょうか?
投稿: redbull | 2017年12月15日 (金) 21時22分
何度もすみません。ディープラーニングで学習させることができました。ありがとうございます。
原因としましては「Annotation」ファイルのxmlの記述の仕方に問題があったようです。
しかし、今度は検出する際にわからなくなってしまいました。
pascal_vocの階層にoutputというファイルが出来て、中にsave.ckptのファイルがconfigで指定した個数だけ出力されており、どのファイルをweightフォルダに移せば良いのかわかりません。
投稿: redbull | 2017年12月16日 (土) 19時40分
こんにちは、redbullさん。
とりあえず、アノテーションの方は突破されたようですね。
save.ckptですが、基本的には最後の方に出力されたものを持っていけばいいです。例えば1000サイクル流した場合、「save.ckpt-1000.〜」というファイルができてるはずです。同じ数字の.data-0000- of-0001と.indexというファイルをweightに持っていけばいいです。
学習時にloss値が出てると思いますが、できればこの値が小さい時のサイクル数のものを持っていくのがいいです。が、最初のうちはできるだけ長いサイクルのものを持っていけばいいと思います。
投稿: arkouji | 2017年12月17日 (日) 07時16分
こんにちは、コメント失礼します。
とりあえず学習済みのデータでtest.pyを実行してみたのですが、以下のようなエラーが出てしまいました。
Traceback (most recent call last):
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\client\session.py", line 1139, in _do_call
return fn(*args)
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\client\session.py", line 1121, in _run_fn
status, run_metadata)
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\contextlib.py", line 66, in __exit__
next(self.gen)
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 466, in raise_exception_on_not_ok_status
pywrap_tensorflow.TF_GetCode(status))
tensorflow.python.framework.errors_impl.NotFoundError: Unsuccessful TensorSliceReader constructor: Failed to find any matching files for data\weights\YOLO_small.cpkt
[[Node: save/RestoreV2_2 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save/Const_0_0, save/RestoreV2_2/tensor_names, save/RestoreV2_2/shape_and_slices)]]
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "test.py", line 190, in
main()
File "test.py", line 179, in main
detector = Detector(yolo, weight_file)
File "test.py", line 32, in __init__
self.saver.restore(self.sess, self.weights_file)
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\training\saver.py", line 1548, in restore
{self.saver_def.filename_tensor_name: save_path})
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\client\session.py", line 789, in run
run_metadata_ptr)
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\client\session.py", line 997, in _run
feed_dict_string, options, run_metadata)
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\client\session.py", line 1132, in _do_run
target_list, options, run_metadata)
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\client\session.py", line 1152, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.NotFoundError: Unsuccessful TensorSliceReader constructor: Failed to find any matching files for data\weights\YOLO_small.cpkt
[[Node: save/RestoreV2_2 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save/Const_0_0, save/RestoreV2_2/tensor_names, save/RestoreV2_2/shape_and_slices)]]
Caused by op 'save/RestoreV2_2', defined at:
File "test.py", line 190, in
main()
File "test.py", line 179, in main
detector = Detector(yolo, weight_file)
File "test.py", line 31, in __init__
self.saver = tf.train.Saver()
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\training\saver.py", line 1139, in __init__
self.build()
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\training\saver.py", line 1170, in build
restore_sequentially=self._restore_sequentially)
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\training\saver.py", line 691, in build
restore_sequentially, reshape)
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\training\saver.py", line 407, in _AddRestoreOps
tensors = self.restore_op(filename_tensor, saveable, preferred_shard)
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\training\saver.py", line 247, in restore_op
[spec.tensor.dtype])[0])
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\ops\gen_io_ops.py", line 640, in restore_v2
dtypes=dtypes, name=name)
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 767, in apply_op
op_def=op_def)
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\framework\ops.py", line 2506, in create_op
original_op=self._default_original_op, op_def=op_def)
File "C:\Users\simox\Anaconda3\envs\tfyolo\lib\site-packages\tensorflow\python\framework\ops.py", line 1269, in __init__
self._traceback = _extract_stack()
NotFoundError (see above for traceback): Unsuccessful TensorSliceReader constructor: Failed to find any matching files for data\weights\YOLO_small.cpkt
[[Node: save/RestoreV2_2 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save/Const_0_0, save/RestoreV2_2/tensor_names, save/RestoreV2_2/shape_and_slices)]]
エラーの原因は何なのでしょうか?
投稿: xxxx | 2018年1月10日 (水) 03時16分
こんにちは、xxxxさん。
data/weights/YOLO_small.ckpt のファイルが見つからないと言ってるようですね。該当のファイルはdataフォルダの下のweightsフォルダに入ってますでしょうか?
投稿: arkouji | 2018年1月10日 (水) 06時29分
はい。
data/weightsの中に入っています。
投稿: xxxx | 2018年1月10日 (水) 11時14分
こんにちは、xxxxさん。
すいません、いろいろ探してみましたが、よくわかりませんでした。
全く別のコードですが、職場のPCも似たようにデータの読み出しに失敗するものがあって、ちょっと困ってるのがあります。もしかしたら、Anacondaの環境を再構築すると治るかも・・・というところまで来てますが、なかなか大変な作業なので、保留してます。
ちなみに、このYOLOv1よりも高精度なSSDを使う記事をアップしました。
https://arkouji.cocolog-nifty.com/blog/2018/01/tensorflowkeras.html
Kerasを入れないといけませんが、こちらの方が物体検出の精度は高いです。メモリの使用量も少ないので、今はこっちの方がおすすめです。
投稿: arkouji | 2018年1月13日 (土) 10時00分
たびたびすみません。
test.pyの関数がどのような処理を行っているのか、簡単でいいので解説していただけないでしょうか。
投稿: xxxx | 2018年1月28日 (日) 19時13分
こんにちは、xxxxさん。
長らく放置してすいません。test.pyですが、やってることは単純で、train.pyで作成した学習器(*.ckpt)-****)を読み込み → 画像ファイルを読み込み検出・認識を実行(detect.image_detector(imname) )しているだけです。
上のエラーでは、179行目の「detector = Detecetor(yolo, weight_file) 」のところで止まっているようですが、どうやら学習器(*.ckpt*)の読み出しに失敗しているようです。weight_file に書かれたファイルを読んでニューラルネットワークを形成するのに失敗(tensorflowのrestoreに失敗)していると出てます。
このため、以前YOLO.ckptファイルの場所をまちがえてるのではないかとお聞きしたのですが、そうではなさそうなため、こちらでは原因がわからないという状態になってます。
投稿: arkouji | 2018年1月30日 (火) 15時55分
回答ありがとうございます。
ちなみにTensorFlowのバージョンはいくつをお使いでしょうか?
投稿: xxxx | 2018年1月30日 (火) 21時12分
こんにちは、xxxxさん。
回答遅れました。すいません。うちはtensorflow 1.12.0を使ってます。なお、職場では1.14.0も使ってますが、問題なく動いてました。
投稿: arkouji | 2018年2月 4日 (日) 04時20分
こういうのは怒られるかもしれませんが
あまり相手にしない方が良いかと思いますよ。
最初の方も書き方を間違えたようだとおっしゃって
ますが、どう間違えたかはご提示されてません、
自分が判れば良いだけのように思えます。
要はarkoujiさんの貴重な時間を無駄遣い
しているような状況です。ただ、それによって
知識をより理解する為の手段であれば
必ずしも無駄とは言えませんが。
良いように使われているようで。。。
arkoujiさんがやりたいのは教えてあげる事
ではなく、人工知能を活用する事じゃないでしょうか
投稿: mokekyo | 2018年2月 7日 (水) 19時03分
こんにちは、mokekyoさん。
うまくは言えませんが、意外とこういうコメントに応えることが、自身のスキルアップに繋がることがあるんですよ。過去にそういうのがありまして。
ただ、罵ってくるようなコメントには反応いたしません。それは時間の無駄です。努力しようと思ってる方には、なるべく答えてあげたいですね。
投稿: arkouji | 2018年2月 9日 (金) 05時49分
私もxxxxさんと同じエラーで処理が止まってしまい原因を探っていましたが、解決方法を見つけたのでコメントさせていただきます。
結果から言うとYOLO_small.ckptをこのページのリンクからではなく、readmeにあるリンクからダウンロードしたところ、無事動くようになりました。readmeはyolo_tensorflow直下にあります。ダウンロードすると圧縮が2重でかかっていますが、解凍を2回すれば大丈夫です。
これで問題が解決すれば幸いです。
投稿: sumomo | 2018年2月 9日 (金) 17時33分
こんにちは、sumomoさん。
学習器側に問題があるんですね。ありがとうございます。それにしても、なぜこのリンク先のはダメになったんでしょうか?以前は確かにこれでいけてたんですが…
でもそういう原因もあるということは収穫です。コメントありがとうございます。
投稿: arkouji | 2018年2月10日 (土) 18時25分
こんにちはプログラミング初心者です。
機械学習を使ってみたくてサイトを参考に動かそうとしてみたところ、準備のところのtrain.pyやtest.pyのコードがコピーしてもファイルがありませんとなっており、動かせません。古い記事なのでもう使えないのでしょうか。Ubuntuでコピーするとhtmlのコードがコピーされてしまいます。
投稿: ??? | 2022年9月 5日 (月) 15時37分
> ???さん
最近、ココログでは画像以外のファイルが消されてしまうようで、おっしゃる通りtrain.pyなどは消えてしまったようです。
ただ、この記事は流石に古く、もう少し新しいものを使ったほうがいいです。このブログでも、Yolov3やv4などを扱ってます。
Yolov3で参考になるのは、
https://rightcode.co.jp/blog/information-technology/learn-yolov3-image-windows10-object-detection
か、
https://russeng.hatenablog.jp/entry/2019/02/24/180154
あたりでしょうか。
どちらかというと、前者の方がシンプルな記事です。
ご参考まで。
投稿: ディープタイピング | 2022年9月 6日 (火) 22時13分