LoginSignup
0
3

More than 5 years have passed since last update.

GCP で tensorflow 遊び5.2

Posted at

今更ながら、データの確認の話

データの shape さえ分かっていれば中身は見なくてもネットは組めるし、教師データとの突き合わせであとは勝手に学習されてなにがしかの結果は出てくるんですが、一応データを見るところもやっておく。

このシリーズで扱っているデータは、某コンペのゴルフ場検出という例題で、 landsat-8 の 7 channel 画像というもので、format は tiff なんだが、普通に viewer で見ようとするとみんな固まってくれる。
最悪 C で手で loader 書くかとフォーマット調べてて、なんだこれ?フォーマット壊れてね?ってしばらく悩んだが、od -h を hexdump の替わりに使ってはダメだったというオチでした。
去年はこの辺でやる気が8割方尽きた。

結局、散々探し回って scikit-image でなら以下のようにして読めるのでした。

#! /usr/bin/env python

import sys
from skimage import io
import matplotlib.pyplot as plt

im = io.imread(sys.argv[1])

print(im.shape, im.dtype)
print(im.max(), im.min())

io.imshow(im[:,:,0])
io.show()

7 channel あるので、rgb 仮定した普通の viewer じゃ表示させられないので、以下のようにして並べてみるとなんとなく構造が見えてくる。

#! /usr/bin/env python

import sys
from skimage import io
import matplotlib.pyplot as plt
import cv2
import numpy as np

im = io.imread(sys.argv[1])

mean = im.mean()

im20 = np.ones(im[:,:,0].shape, im[:,:,0].dtype)
im20 *= mean
print(im20.shape, im20.dtype)

im21 = cv2.hconcat([im[:,:,0], im[:,:,1], im[:,:,2], im[:,:,3]])
im22 = cv2.hconcat([im[:,:,4], im[:,:,5], im[:,:,6], im20])

im2 = cv2.vconcat([im21, im22])

io.imshow(im2)
io.show()

去年参考にした資料

発掘された去年の読解メモ

hexdump による先頭部分

0000000 49 49 2a 00 08 00 00 00 0c 00 00 01 03 00 01 00
0000010 00 00 20 00 00 00 01 01 03 00 01 00 00 00 20 00
0000020 00 00 02 01 03 00 07 00 00 00 9e 00 00 00 03 01
0000030 03 00 01 00 00 00 01 00 00 00 06 01 03 00 01 00
0000040 00 00 01 00 00 00 11 01 04 00 08 00 00 00 cc 00
0000050 00 00 15 01 03 00 01 00 00 00 07 00 00 00 16 01
0000060 03 00 01 00 00 00 04 00 00 00 17 01 04 00 08 00
0000070 00 00 ac 00 00 00 1c 01 03 00 01 00 00 00 01 00
0000080 00 00 52 01 03 00 06 00 00 00 ec 00 00 00 53 01
0000090 03 00 07 00 00 00 f8 00 00 00 00 00 00 00 40 00
00000a0 40 00 40 00 40 00 40 00 40 00 40 00 00 1c 00 00

先頭が 4949なのでリトルエンディアン。後続は 2a0008000000
tiffのフォーマット通り。続く 0c00 はタグが12個あることを示している。
各タグは12byteあるので

00 01 03 00 01 00 00 00 20 00 00 00
01 01 03 00 01 00 00 00 20 00 00 00
02 01 03 00 07 00 00 00 9e 00 00 00
03 01 03 00 01 00 00 00 01 00 00 00
06 01 03 00 01 00 00 00 01 00 00 00
11 01 04 00 08 00 00 00 cc 00 00 00
15 01 03 00 01 00 00 00 07 00 00 00
16 01 03 00 01 00 00 00 04 00 00 00
17 01 04 00 08 00 00 00 ac 00 00 00
1c 01 03 00 01 00 00 00 01 00 00 00
52 01 03 00 06 00 00 00 ec 00 00 00
53 01 03 00 07 00 00 00 f8 00 00 00

のように並んでいる。タグ構造は2+2+4+4byteで、エンディアンを考慮すると先頭3行は

0100h, 0003h, 00000001h, 00000020h
0101h, 0003h, 00000001h, 00000020h
0102h, 0003h, 00000007h, 0000009eh

となる。これらが順にイメージの幅と高さ、色深度でshortで表現されており(0003h)幅と高さは(即値で)20h=32、色深度の方は7layerあって9ehに実体がある。
000009eh から読み進めれば

40 00 40 00 40 00 40 00 40 00 40 00 40 00

があり、エンディアン考慮して 0040h がbit数で、64bitすなわち8byte整数であるとわかる。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3