画像処理:Tensorflowオブジェクト検出API

過去数年にわたって、ディープニューラルネットワークの開発に真の革命が起こっています。新しいアーキテクチャが登場し、開発者向けのフレームワークが改善され、実験用のハードウェアが完全に無料で入手できるようになりました(たとえば、 Google協力プロジェクトの一環として)。 Tensorflow Object Detection APIリポジトリから事前にトレーニングされたモデルを適用して、Colaboratoryのパワーを使用して問題を解決する方法に興味がある人は誰でも 、catにようこそ。



記事を読みたくない場合は、 リポジトリ内のラップトップをすぐに知ることができます。



トップGPU-すべての人に



大量のデータでニューラルネットワークをトレーニングするには、GPUを使用することをお勧めします。数千のコアにわたる操作の効果的な並列化により、学習速度と推論速度はCPU上よりも速くなります。 最近まで、たとえばAmazonクラウドインスタンスを使用して、計算でカードを使用できました。 しかし、なぜあなたが無料で入手できるものにお金を払うのですか? Google Colaboratoryは、 Tesla K80カードへのアクセスを提供します。



マップへのアクセスは、メニュー[編集]-> [ノートブック設定]-> [ハードウェアアクセラレータ]から取得できます。







このカードを使用すると、ニューラルネットワークですばやく実験を行うことができます。たとえば、DeepPavlovのメンバーからのクールなNLPコースを受講できます。 サービスの唯一のマイナスは、わずか12時間のカードです。将来使用する必要がある場合は、その間のどこかに保存する必要があります。



この記事では、Colaboratoryを使用してモデルをトレーニングし、将来の使用のためにモデルを保存する方法を説明します。 この記事にはコードがほとんどありません。モデルを教育し、Googleドライブと対話する(中間結果を保存する)すべてのコードがリポジトリにあります



行こう!



データセットDeepFashion



実験には、 Deep Fashionデータセットを使用します-これは衣服の80万枚の画像です。







画像にはタグと、写真の境界ボックスが含まれます。 写真の衣服の画像を検出するようにニューラルネットワークをトレーニングします。境界ボックスを描画し、上半身、下半身、全身の3つのクラスのいずれかに分類します。



データ準備



まず、GoogleDriveデータセットのDeepFashionをCategory and Attribute Prediction Benchmarkディレクトリからルートディレクトリにコピーします。 ファイルストレージとしてGoogleDriveを使用して多くの作業を行います。そこからデータをコピーし、作業の結果(モデルチェックポイントなど)をディスクにアップロードします。



まず、コードとともにリポジトリをコピーし、依存関係をインストールします。



!rm -r TFFashionDetection !git clone https://github.com/Dju999/TFFashionDetection.git !pip install lxml !pip install -U -q PyDrive !pip install tqdm
      
      





また、Googleドライブファイルシステムを操作するための補助オブジェクトを作成する必要があります



 from TFFashionDetection.utils.colab_fs import GoogleColabFS fs = GoogleColabFS()
      
      





詳細については、リポジトリのutils.colab_fs.pyファイルを参照してください。



次に、DeepFashionデータセットをダウンロードする必要があります。



 !python3 /content/TFFashionDetection/utils/dataset_download.py
      
      





データセットには3つのディレクトリがあります





私たちのタスクは、ニューラルネットワークに供給するためにこのデータを準備することです。特殊な形式のファイルの説明、トレーニングとテストへの分割です。



テンソルフロー画像検出



Googleは2017年にオブジェクト検出APIを開始しました。これは画像検出用のモデルとツールのセットです。 リポジトリには、トレーニングデータ、トレーニングモデルを準備し、結果を視覚化するための多くのスクリプトがあります-たとえば、境界ボックスの描画



以下のコードは、TFオブジェクト検出APIをgithubリポジトリからGoogleColaboratory環境にインストールします。



 ! cd /content; git clone https://github.com/tensorflow/models.git #    object detection  # https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md !apt-get install protobuf-compiler python-pil python-lxml python-tk !pip install Cython !cd /content; git clone https://github.com/cocodataset/cocoapi.git; cd cocoapi/PythonAPI; make; cp -r pycocotools /content/models/research/ !cd /content/models/research; protoc object_detection/protos/*.proto --python_out=. #  -   !cd /content/models/research; export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim; python object_detection/builders/model_builder_test.py
      
      





次に、データを準備する必要があります。 Imgには複雑なサブディレクトリ構造があり、服の各クラスには独自のカテゴリがあります。 以下のコードは、すべての写真を1つのディレクトリにコピーし、 tf.train.Exampleの形式で各ファイルの説明を準備します。 -検出モデルは、これらすべてについてトレーニングされます



コードにはモデル名ssd_mobilenet_v2_coco_2018_03_29が含まれています。適切なモデルは、 Detection Zooからダウンロードできます。 別のmodelkaをダウンロードできます-ただし、ファイル/content/data_dir/tf_api.configを書き換える必要があります。



 import sys import os import numpy as np API_PATH = os.path.join('/content', 'models/research') sys.path.append(API_PATH) DETECTOR_PATH = os.path.join('/content', 'TFFashionDetection') sys.path.append(DETECTOR_PATH) from TFFashionDetection.data_preparator import DataPreparator from TFFashionDetection.utils.ssd_config import write_config data_preparator = DataPreparator() data_preparator.build() write_config('ssd_mobilenet_v2_coco_2018_03_29')
      
      





セルの実行が終了したら、事前にトレーニングされたモデルをダウンロードして、モデルのトレーニングを開始できます。 Object Detetetionカブからの凍結推論グラフを使用すると、検出器をすばやくトレーニングできます。 モデルグラフのあるディレクトリへのパスをトレーニングスクリプト/object_detection/train.pyに渡す必要があります。



 #   () !python /content/TFFashionDetection/utils/download_tf_zoo_model.py --name ssd_mobilenet_v2_coco_2018_03_29 --dir /content #    !export PYTHONPATH=$PYTHONPATH:/content/models/research/slim:/content/models/research/;python /content/models/research/object_detection/train.py --logtostderr --pipeline_config_path=/content/data_dir/tf_api.config --train_dir=/content/data_dir/checkpoints
      
      





すべてが正しく行われた場合、ログがどのように実行され、反復ごとに損失が減少するかがわかります。 損失関数の減少が停止したことがわかると、学習を停止できます。 モデルグラフは/ content / data_dir / checkpointsディレクトリに保存されます-今後の実験のために保存する必要があります。 モデルトレーニングを1回実行してから、結果のグラフを推論に使用する必要があります。



モデルがトレーニングされたら-Googleディスクに保存する必要があります



 !cd /content/data_dir; zip -r checkpoint_save_20180514.zip checkpoints/* import os fs = GoogleColabFS() file_name = os.path.join('/content/data_dir', 'checkpoint_save_20180514.zip') fs.load_to_drive(file_name)
      
      





同様にGoogleからダウンロードする



 import os fs.load_file_from_drive('/content', 'checkpoint_save_20180514.zip') fs.unzip_file('/content', 'checkpoint_save_20180514.zip') !mkdir /content/deep_detection_model #   !export PYTHONPATH=$PYTHONPATH:/content/models/research/slim:/content/models/research/;python /content/models/research/object_detection/export_inference_graph.py --input_type image_tensor --pipeline_config_path=/content/data_dir/tf_api.config --trained_checkpoint_prefix=/content/checkpoints/model.ckpt-2108 --output_directory inference_graph
      
      





例として、ランダムな写真を選択し、検出のためにネットワークに送ります。



 import sys import os import matplotlib.pyplot as plt plt.switch_backend('agg') sys.path.append(os.path.join('/content', 'models/research')) from object_detection.utils import visualization_utils as vis_util from PIL import Image as Pil_image %matplotlib inline boxes = np.array([oject_detector.img_detections[3]['category_box']]) def load_image_into_numpy_array(image): (im_width, im_height) = image.size return np.array(image.getdata()).reshape( (im_height, im_width, 3)).astype(np.uint8) #       image = Pil_image.open(file_path) image_np = load_image_into_numpy_array(image) #    bounding boxes vis_util.draw_bounding_boxes_on_image_array(image_np, boxes) #     result_file_path = os.path.join('/content', 'test.png') vis_util.save_image_array_as_png(image_np, result_file_path) #  ,   from IPython.display import Image Image(result_file_path)
      
      





検出結果を見る-lower_body garment







おわりに



TF Object Detection APIは、最先端のモデルでメッシュアーキテクチャを使用できるようにするクールなテクノロジーです。 また、Google Colaboratoryは実験用の優れたプラットフォームであり、強力なハードウェアでネットワークをトレーニングできます。 記事のコードはこちらから入手できます



All Articles