CoreMLでは画像識別/オブジェクト検出をおこなう機械学習モデルは .mlmodel
または .mlpackage
ファイルである。モデルファイルをダブルクリックするとXcodeが開き、下図のようにメタデータが表示される。
ここに表示されている Class Labels が検出または識別可能なオブジェクトの一覧であるが一括でコピペすることができない。
テキストファイルで Class Labelsの一覧が欲しいので 100個までは手作業で入力あるいは一行ずつコピペしたが、画像識別モデルで有名な MobileNet v2 はラベルが1,000個もありおおよそ現実的ではないと判断して、モデルのメタデータを参照する方法を調べた。
mlmodel ファイルで検出または識別可能なラベルの一覧を取得する
任意の mlmodel ファイルにおいて、オブジェクト検出/画像識別が可能なラベルの一覧を取得する。
if let mlModel = try? MobileNetV2FP16(configuration: MLModelConfiguration()).model { let classLabels = mlModel.modelDescription.classLabels print("### \(mlModel.configuration.modelDisplayName!)\n") classLabels?.forEach({ label in print("\(label)") }) print("\n") }
上記のサンプルコードを実行すると以下のリストが得られる。
### MobileNetV2FP16
background
tench, Tinca tinca
goldfish, Carassius auratus
great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias
tiger shark, Galeocerdo cuvieri
hammerhead, hammerhead shark
... 以下略