컨벌루션 신경망(CNN)의 훈련 데이터를 작성하는 툴을 만들어 보았다 - ①이미지 리사이즈

소개


  • 학습에는 많은 양의 훈련 데이터가 필요합니다.
  • 기준으로서 분류의 경우, 1 라벨 훈련 데이터:10,000장. 테스트 데이터 : 3,000장 정도로 귀를 하거나 합니다.
  • 컨벌루션을 할 때는, 자주 화상이 정사각형으로 되어 있습니다. 그러나 이 정사각형 이미지를 준비하는 것은 어렵습니다.
  • 이번에는 무리하게 틈을 메워 사각형 이미지로 리사이즈하기로 했습니다.
  • 단, 이 틈이 학습 결과에 어떻게 영향을 미치는지는 아직 검증중이므로, 보증할 수 없습니다.

  • 프로그램



    resize.py
    #!/usr/local/bin/python3
    #!-*- coding: utf-8 -*-
    
    import argparse
    import os
    import cv2
    import numpy as np
    
    def resizeImages(input_dir, output_dir):
    
        files = os.listdir(input_dir)
    
        for file in files:
    
            name, ext = os.path.splitext(file)
    
            if ext != '.jpg':
                print('[' + file + ']: 不正なファイルが含まれています。')
    
            img = cv2.imread(
                os.path.join(input_dir, file),
                cv2.IMREAD_COLOR
            )
    
            tmp = img[:, :]
            height, width = img.shape[:2]
    
            if (height > width):
                size = height
                limit = width
            else:
                size = width
                limit = height
    
            start = int((size - limit) / 2)
            fin = int((size + limit) / 2)
    
            resized_img = cv2.resize(np.zeros((1, 1, 3), np.uint8), (size, size))
    
            if (size == height):
                resized_img[:, start:fin] = tmp
            else:
                resized_img[start:fin, :] = tmp
    
            cv2.imwrite(
                os.path.join(output_dir, file),
                resized_img
            )
    
    def main():
    
        parser = argparse.ArgumentParser()
        parser.add_argument('--input_dir', default='original')
        parser.add_argument('--output_dir', default='resized')
        args = parser.parse_args()
    
        resizeImages(args.input_dir, args.output_dir)
    
    if __name__ == '__main__':
    
        main()
    

    실행 결과



    좋은 웹페이지 즐겨찾기