복셀 데이터를 파이썬으로 데이터 확장

데이터 확장이란 기계 학습 모델을 작성할 때 모델의 일반화 성능을 향상시키기 위한 추가 데이터로서 원 데이터에 가공을 실시하여 데이터를 늘리는 것입니다.

예를 들어 이미지의 경우 원본 이미지를 뒤집거나 수평 및 수직으로 픽셀을 이동하고 노이즈를 픽셀 값에 추가하는 방법이 일반적입니다.

3D 데이터의 일종에는 복셀 데이터(x, y, z의 3차원 격자를 가지는, 2차원 화상 데이터의 확장)가 있어, CAD 모델이나 CT 스캔의 데이터가 이 형식으로 표현되는 일이 있습니다.
이 복셀 데이터를 대상으로 하여 3D CNN에서 분류나 세그멘테이션을 하는 등의 경우에 사용되고 있습니다.

이 기사에서는 Python의 scipy와 numpy를 사용하여 복셀 데이터의 확장 데이터를 생성해 보겠습니다.
(확장 데이터를 사용한 학습은 본 기사에서는 다루지 않습니다.)

확장 소스 데이터



PRINCETON MODELNET의 10 클래스의 것을 사용하고 있습니다.
htp : //모두 l네 t. cs. p 린세 톤. 에즈/

MODELNET의 데이터를 32×32×32의 사이즈의 array형으로 해 사용하고 있습니다.
print(type(data))
# >>> <class 'numpy.ndarray'>

print(data.shape)
# >>> (1, 32, 32, 32)

각 격자는, 0 (물체가 존재하지 않는다) or 1 (물체가 존재한다)의 어느 쪽인가의 정수의 값을 가집니다.
아래 그림은 샘플과 그림에 해당하는 각 축의 방향입니다.




※환경
파이썬 3.6.2
scipy 0.19.1
numpy 1.13.3

반전



각 축 방향으로 반전
import numpy as np
# flip: x axis
np.flip(data, 1)

# flip: y axis
np.flip(data, 2)

# flip: z axis
np.flip(data, 3)



시프트



각 축 정방향으로 1변의 길이의 0.3할씩 시프트
from scipy.ndimage.interpolation import shift

# shift: x axis
shift(data, shift=[0, 0.3, 0, 0], cval=0)

# shift: y axis
shift(data, shift=[0, 0, 0.3, 0], cval=0)

# shift: z axis
shift(data, shift=[0, 0, 0, 0.3], cval=0)



확대·축소



확대
각 축 방향을 1.5배로 확대
from scipy.ndimage.interpolation import zoom

# zoom: x axis
zoom(data, zoom=[1, 1.5, 1, 1], cval=0)

# zoom: y axis
zoom(data, zoom=[1, 1, 1.5, 1], cval=0)

# zoom: z axis
zoom(data, zoom=[1, 1, 1, 1.5], cval=0)

zoom에서 반환되는 데이터는 각 축 방향으로 확대율분 사이즈가 커지므로 32×32×32가 되도록 잘라낸 것이 아래 그림



축소
각 축 방향을 0.5배로 축소
from scipy.ndimage.interpolation import zoom

# zoom: x axis
zoom(data, zoom=[1, 0.5, 1, 1], cval=0)

# zoom: y axis
zoom(data, zoom=[1, 1, 0.5, 1], cval=0)

# zoom: z axis
zoom(data, zoom=[1, 1, 1, 0.5], cval=0)

zoom에서 반환되는 데이터는 각 축 방향으로 축소율분 사이즈가 작아지므로 32×32×32가 되도록 잘라낸 것이 아래 그림



회전


from scipy.ndimage import rotate

# Rotate: x axis
rotate(data, axes=(2,3), angle=45, cval=0.0, reshape=False)

# Rotate: y axis
rotate(data, axes=(3,1), angle=45, cval=0.0, reshape=False)

# Rotate: z axis
rotate(data, axes=(1,2), angle=45, cval=0.0, reshape=False)



이상입니다.
scipy의 다차원 데이터 라이브러리와 numpy를 사용하여 복셀 데이터의 데이터 확장이 가능했습니다!

좋은 웹페이지 즐겨찾기