SlideShare a Scribd company logo
1 of 15
Download to read offline
外観検査用画像前処理の
コツをコード解説付きで。
2022.8 合格者の会2022/CDLE LT
Akihiro ITO
モチベーション
● 高性能な異常検知モデル「PaDiM」を簡単に使えるようにしたい。
○ PaDiM:https://arxiv.org/pdf/2011.08785.pdf
● 動作環境として、connectome.design社開発のmetabase®を利用する。
データを放り込むだけで、どの程度検知できるか試せるように。
● 撮像したデータをPaDiMの入力に合わせるための前処理が意外と面倒。
→ 汎用的な前処理を作ろう!
FYI:Overview of PaDiM
● 2020年11月に発表された、不良品検知を行
う機械学習モデル。
● 正常品のみの画像から再学習不要で不良
品検知が実装可能。
● 不良品検知のデータセットである MVTec AD
でSOTAを達成。
出展:https://arxiv.org/pdf/2011.08785.pdf
FYI:Overview of MVTec AD
● 2019年6月に公開されたデータセット。
● 15のカテゴリーに分類され、工業製品や農
作物の画像。
● 欠陥領域のセグメンテーションデータも含ま
れる。
出展:https://www.mvtec.com/company/research/datasets/mvtec-ad
今回のターゲット画像。
● コンソメキューブの包み方の外観検査。
● Good / Bad の2値分類。
● 入力画像は、ベルトコンベア上を流れてくる
対象を撮像するため、画像ファイル内での位
置が不定。
→ PaDiMで使える画像にする。
前処理でやること。
1. 物体が画像の中心に配置された、 224 x 224 pxのカラーpngファイルを作る。
2. 精度確認用の、224 x 224 pxのモノクロ2値pngファイルを作る。
3. 各ディレクトリ(=フォルダと同義)への振り分け
※今回は、時間の関係で ”1”のみ紹介。
どう処理するか?
1. 物体を検出して切り出す。 → 最新のDETRを使用
DETR:DEtection Transformer
2020年に発表されたTransformerを使った物体検出手法。
※FasterRCNNも試したが、DETRの方が精度がよかった。
2. PaDiMで使えるように、画像のサイズを揃え、画像の中心に
物体を配置する。
全体の処理構造
result = step1_DetectAndCrop.prePadim_step1(searchpath,
indir, outdir_step1)
if result == 0:
print("Error! Step1. No File Saved to: ", outdir_step1)
return False
result = step2_Align.prePadim_step2(searchpath2,
outdir_step1, outdir_step2, args.bgcolor)
if result == 0:
[エラー処理]
● 途中結果を確認しやすい&再利用しや
すい単位でステップを分割する。
○ Step1:DETRを使って画像の中から物
体を検出し、画像を切り出す。
○ Step2:正しく検出と切り出しができない
画像は捨てて、すべて同じサイズに揃
える。
● ステップごとに必ず処理結果を判定し、
エラー処理を入れること。
ディレクトリ構造の処理のコツ
parser = argparse.ArgumentParser()
parser.add_argument('-d', '--data_path', type=str)
parser.add_argument('-s', '--save_path', type=str)
cwd = os.getcwd()
targetdir_in = os.path.join(args.data_path, args.target)
targetdir_out = os.path.join(args.save_path, args.target)
● 入出力ディレクトリ名は、引数として受け
取れるようにした方が良い。
● 上位の構造に依存しないよう、 Current
Working Directory
を最上位として処理する。
→ フルパス入れちゃダメ。
● パスを組み立てる時は、文字列結合で
はなく、
os.path.join()
を使う。
→ “/”入力の有無を問わないように。
ディレクトリ構造全体から対象ファイルを探すコツ
# 各種定義
filetype = “.png”
wildcard = “/**/*”
searchpath = os.path.join(indir, wildcard + filetype)
if len(glob.glob(searchpath, recursive=True)) == 0:
print("Error! Step1. File Not Found in: ", searchpath)
return False
else:
[実際の処理]
● 特定の数字や文字列( マジックナンバー)
をソースコードの途中に埋め込まず、まと
めて定義する。
● パスに、“ /**/* ”を含めると、配下のディ
レクトリ階層すべてから、対象ファイルを
検出できる。
● 「対象ファルが一つも見つからない場合」
のエラー処理を必ず入れること。
簡易化のため、うまく検出できなかった画像は諦める!
[画像を開いてサイズを配列に入れるループ処理 ]:
size_mean = np.mean(image_size_array, axis=0)
size_std = np.std(image_size_array, axis=0)
size_limit_low = size_mean - size_std
size_limit_high = size_mean + size_std
if limit_low_w <= img.width and img.width <=
limit_high_w and limit_low_h <= img.height and
img.height < limit_high_h:
[実際の処理]
● 検出と切り出しに失敗した画像は、画
像サイズが異なる。
● 平均と分散から、作成すべき基本画像
サイズを求める。
● 画像サイズから平均と標準偏差を計算
し、外れ値となる画像を除く。
同じ背景色・サイズの画像に揃える。
background_color=(0,0,0)
if bgcolor == 'white':
background_color=(255,255,255)
[画像を開くループ処理 ]:
img_new = Image.new(img.mode, box_size,
background_color)
left = int((box_wh - img.width) // 2)
top = int((box_wh - img.height) // 2)
img_new.paste(img, (left, top))
img_new.save(os.path.join(outdirname, os.path.basename(file)))
● 基本画像の背景色を引数から受け取
る。(背景は、黒か白でよいはず)
● 基本画像を生成し、元の画像をその中
心に貼り付ける。
これで、入力画像から学習用画像が生成される。
まとめ
● 今回の例
○ ファイル数:4
○ ソースコードの行数:約250行(空行含む)
● AIのサンプルコードは、パスやファイル名なども含め特定の文字列が直接書き込まれてい
たり、画像サイズや形式も限定されている場合が多い。
● 実務利用に向けて汎用的に使えるようにするためには、課題に合わせて修正する箇所が
極力少なくなるように作り込む必要がある。
● また例えば、 ”for i in range(10):” のようにいわゆるマジックナンバーが埋め込まれてい
るとコードの解読や修正に手間がかかるので、必ず定義すること。
epoch = 10
for i in range(epoch):
ソースコードは、美しく。

More Related Content

What's hot

【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked AutoencodersDeep Learning JP
 
CVPR2022 paper reading - Balanced multimodal learning - All Japan Computer Vi...
CVPR2022 paper reading - Balanced multimodal learning - All Japan Computer Vi...CVPR2022 paper reading - Balanced multimodal learning - All Japan Computer Vi...
CVPR2022 paper reading - Balanced multimodal learning - All Japan Computer Vi...Antonio Tejero de Pablos
 
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic DatasetsDeep Learning JP
 
【DL輪読会】ViT + Self Supervised Learningまとめ
【DL輪読会】ViT + Self Supervised Learningまとめ【DL輪読会】ViT + Self Supervised Learningまとめ
【DL輪読会】ViT + Self Supervised LearningまとめDeep Learning JP
 
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...Deep Learning JP
 
関西CVPRML勉強会2018 岡本大和 Unsupervised Feature Learning Via Non-Parametric Instanc...
関西CVPRML勉強会2018 岡本大和 Unsupervised Feature Learning Via Non-Parametric Instanc...関西CVPRML勉強会2018 岡本大和 Unsupervised Feature Learning Via Non-Parametric Instanc...
関西CVPRML勉強会2018 岡本大和 Unsupervised Feature Learning Via Non-Parametric Instanc...Yamato OKAMOTO
 
[DL輪読会]StyleGAN-NADA: CLIP-Guided Domain Adaptation of Image Generators
[DL輪読会]StyleGAN-NADA: CLIP-Guided Domain Adaptation of Image Generators[DL輪読会]StyleGAN-NADA: CLIP-Guided Domain Adaptation of Image Generators
[DL輪読会]StyleGAN-NADA: CLIP-Guided Domain Adaptation of Image GeneratorsDeep Learning JP
 
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision TransformerYusuke Uchida
 
[Ridge-i 論文よみかい] Wasserstein auto encoder
[Ridge-i 論文よみかい] Wasserstein auto encoder[Ridge-i 論文よみかい] Wasserstein auto encoder
[Ridge-i 論文よみかい] Wasserstein auto encoderMasanari Kimura
 
CycleGANで顔写真をアニメ調に変換する
CycleGANで顔写真をアニメ調に変換するCycleGANで顔写真をアニメ調に変換する
CycleGANで顔写真をアニメ調に変換するmeownoisy
 
Masked Autoencoders Are Scalable Vision Learners
Masked Autoencoders Are Scalable Vision LearnersMasked Autoencoders Are Scalable Vision Learners
Masked Autoencoders Are Scalable Vision LearnersGuoqingLiu9
 
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Yusuke Uchida
 
【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use Tools
【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use Tools【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use Tools
【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use ToolsDeep Learning JP
 
[研究室論文紹介用スライド] Adversarial Contrastive Estimation
[研究室論文紹介用スライド] Adversarial Contrastive Estimation[研究室論文紹介用スライド] Adversarial Contrastive Estimation
[研究室論文紹介用スライド] Adversarial Contrastive EstimationMakoto Takenaka
 
[DL輪読会]Life-Long Disentangled Representation Learning with Cross-Domain Laten...
[DL輪読会]Life-Long Disentangled Representation Learning with Cross-Domain Laten...[DL輪読会]Life-Long Disentangled Representation Learning with Cross-Domain Laten...
[DL輪読会]Life-Long Disentangled Representation Learning with Cross-Domain Laten...Deep Learning JP
 
【DL輪読会】Dropout Reduces Underfitting
【DL輪読会】Dropout Reduces Underfitting【DL輪読会】Dropout Reduces Underfitting
【DL輪読会】Dropout Reduces UnderfittingDeep Learning JP
 
最適化超入門
最適化超入門最適化超入門
最適化超入門Takami Sato
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
深層生成モデルと世界モデル
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデルMasahiro Suzuki
 
【DL輪読会】WIRE: Wavelet Implicit Neural Representations
【DL輪読会】WIRE: Wavelet Implicit Neural Representations【DL輪読会】WIRE: Wavelet Implicit Neural Representations
【DL輪読会】WIRE: Wavelet Implicit Neural RepresentationsDeep Learning JP
 

What's hot (20)

【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
 
CVPR2022 paper reading - Balanced multimodal learning - All Japan Computer Vi...
CVPR2022 paper reading - Balanced multimodal learning - All Japan Computer Vi...CVPR2022 paper reading - Balanced multimodal learning - All Japan Computer Vi...
CVPR2022 paper reading - Balanced multimodal learning - All Japan Computer Vi...
 
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
 
【DL輪読会】ViT + Self Supervised Learningまとめ
【DL輪読会】ViT + Self Supervised Learningまとめ【DL輪読会】ViT + Self Supervised Learningまとめ
【DL輪読会】ViT + Self Supervised Learningまとめ
 
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...
 
関西CVPRML勉強会2018 岡本大和 Unsupervised Feature Learning Via Non-Parametric Instanc...
関西CVPRML勉強会2018 岡本大和 Unsupervised Feature Learning Via Non-Parametric Instanc...関西CVPRML勉強会2018 岡本大和 Unsupervised Feature Learning Via Non-Parametric Instanc...
関西CVPRML勉強会2018 岡本大和 Unsupervised Feature Learning Via Non-Parametric Instanc...
 
[DL輪読会]StyleGAN-NADA: CLIP-Guided Domain Adaptation of Image Generators
[DL輪読会]StyleGAN-NADA: CLIP-Guided Domain Adaptation of Image Generators[DL輪読会]StyleGAN-NADA: CLIP-Guided Domain Adaptation of Image Generators
[DL輪読会]StyleGAN-NADA: CLIP-Guided Domain Adaptation of Image Generators
 
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
 
[Ridge-i 論文よみかい] Wasserstein auto encoder
[Ridge-i 論文よみかい] Wasserstein auto encoder[Ridge-i 論文よみかい] Wasserstein auto encoder
[Ridge-i 論文よみかい] Wasserstein auto encoder
 
CycleGANで顔写真をアニメ調に変換する
CycleGANで顔写真をアニメ調に変換するCycleGANで顔写真をアニメ調に変換する
CycleGANで顔写真をアニメ調に変換する
 
Masked Autoencoders Are Scalable Vision Learners
Masked Autoencoders Are Scalable Vision LearnersMasked Autoencoders Are Scalable Vision Learners
Masked Autoencoders Are Scalable Vision Learners
 
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
 
【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use Tools
【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use Tools【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use Tools
【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use Tools
 
[研究室論文紹介用スライド] Adversarial Contrastive Estimation
[研究室論文紹介用スライド] Adversarial Contrastive Estimation[研究室論文紹介用スライド] Adversarial Contrastive Estimation
[研究室論文紹介用スライド] Adversarial Contrastive Estimation
 
[DL輪読会]Life-Long Disentangled Representation Learning with Cross-Domain Laten...
[DL輪読会]Life-Long Disentangled Representation Learning with Cross-Domain Laten...[DL輪読会]Life-Long Disentangled Representation Learning with Cross-Domain Laten...
[DL輪読会]Life-Long Disentangled Representation Learning with Cross-Domain Laten...
 
【DL輪読会】Dropout Reduces Underfitting
【DL輪読会】Dropout Reduces Underfitting【DL輪読会】Dropout Reduces Underfitting
【DL輪読会】Dropout Reduces Underfitting
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
深層生成モデルと世界モデル
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデル
 
【DL輪読会】WIRE: Wavelet Implicit Neural Representations
【DL輪読会】WIRE: Wavelet Implicit Neural Representations【DL輪読会】WIRE: Wavelet Implicit Neural Representations
【DL輪読会】WIRE: Wavelet Implicit Neural Representations
 

Similar to 20220810_JDLA合格者の会_CDLE_LT_06.pdf

オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021Atsushi Nakamura
 
de:code2018 登壇資料
de:code2018 登壇資料de:code2018 登壇資料
de:code2018 登壇資料Hiroshi Senga
 
【de:code 2020】 Power Platform いまさら聞けないモデル駆動型アプリケーション
【de:code 2020】 Power Platform いまさら聞けないモデル駆動型アプリケーション【de:code 2020】 Power Platform いまさら聞けないモデル駆動型アプリケーション
【de:code 2020】 Power Platform いまさら聞けないモデル駆動型アプリケーション日本マイクロソフト株式会社
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)NTT DATA Technology & Innovation
 
Visual Studio を使わず .NET する
Visual Studio を使わず .NET するVisual Studio を使わず .NET する
Visual Studio を使わず .NET するm ishizaki
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カット「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カットRakuten Group, Inc.
 
Open Hybrid Cloudを検討すべき理由.pdf
Open Hybrid Cloudを検討すべき理由.pdfOpen Hybrid Cloudを検討すべき理由.pdf
Open Hybrid Cloudを検討すべき理由.pdfMasahiko Umeno
 
mago3D, Innovation with 3D by adding Z-axis in your browser!
mago3D, Innovation with 3D by adding Z-axis in your browser!mago3D, Innovation with 3D by adding Z-axis in your browser!
mago3D, Innovation with 3D by adding Z-axis in your browser!SANGHEE SHIN
 
はじめての UWP アプリ開発
はじめての UWP アプリ開発はじめての UWP アプリ開発
はじめての UWP アプリ開発hiyohiyo
 
Towards Total Recall in Industrial Anomaly Detection
Towards Total Recall in Industrial Anomaly DetectionTowards Total Recall in Industrial Anomaly Detection
Towards Total Recall in Industrial Anomaly Detectionharmonylab
 
Cod2012 デバッグ講座
Cod2012 デバッグ講座Cod2012 デバッグ講座
Cod2012 デバッグ講座Masuda Tomoaki
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
 
Android studio で行ってみよう!!
Android studio で行ってみよう!!Android studio で行ってみよう!!
Android studio で行ってみよう!!Kazuaki Ueda
 
20160903predix_cognitiveservices
20160903predix_cognitiveservices20160903predix_cognitiveservices
20160903predix_cognitiveserviceszuhitoslide
 
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...74th
 
Iot algyan jhirono 20190111
Iot algyan jhirono 20190111Iot algyan jhirono 20190111
Iot algyan jhirono 20190111Hirono Jumpei
 

Similar to 20220810_JDLA合格者の会_CDLE_LT_06.pdf (20)

オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
Imaocande LT
Imaocande LTImaocande LT
Imaocande LT
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
 
de:code2018 登壇資料
de:code2018 登壇資料de:code2018 登壇資料
de:code2018 登壇資料
 
【de:code 2020】 Power Platform いまさら聞けないモデル駆動型アプリケーション
【de:code 2020】 Power Platform いまさら聞けないモデル駆動型アプリケーション【de:code 2020】 Power Platform いまさら聞けないモデル駆動型アプリケーション
【de:code 2020】 Power Platform いまさら聞けないモデル駆動型アプリケーション
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
Visual Studio を使わず .NET する
Visual Studio を使わず .NET するVisual Studio を使わず .NET する
Visual Studio を使わず .NET する
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カット「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
 
初心者向けデバイスドライバ講座 (2)
初心者向けデバイスドライバ講座 (2) 初心者向けデバイスドライバ講座 (2)
初心者向けデバイスドライバ講座 (2)
 
Open Hybrid Cloudを検討すべき理由.pdf
Open Hybrid Cloudを検討すべき理由.pdfOpen Hybrid Cloudを検討すべき理由.pdf
Open Hybrid Cloudを検討すべき理由.pdf
 
mago3D, Innovation with 3D by adding Z-axis in your browser!
mago3D, Innovation with 3D by adding Z-axis in your browser!mago3D, Innovation with 3D by adding Z-axis in your browser!
mago3D, Innovation with 3D by adding Z-axis in your browser!
 
はじめての UWP アプリ開発
はじめての UWP アプリ開発はじめての UWP アプリ開発
はじめての UWP アプリ開発
 
Towards Total Recall in Industrial Anomaly Detection
Towards Total Recall in Industrial Anomaly DetectionTowards Total Recall in Industrial Anomaly Detection
Towards Total Recall in Industrial Anomaly Detection
 
Cod2012 デバッグ講座
Cod2012 デバッグ講座Cod2012 デバッグ講座
Cod2012 デバッグ講座
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
Android studio で行ってみよう!!
Android studio で行ってみよう!!Android studio で行ってみよう!!
Android studio で行ってみよう!!
 
20160903predix_cognitiveservices
20160903predix_cognitiveservices20160903predix_cognitiveservices
20160903predix_cognitiveservices
 
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
 
Iot algyan jhirono 20190111
Iot algyan jhirono 20190111Iot algyan jhirono 20190111
Iot algyan jhirono 20190111
 

More from Akihiro ITO

Bootleg_202303_越境してみたときのアウェイ感。.pdf
Bootleg_202303_越境してみたときのアウェイ感。.pdfBootleg_202303_越境してみたときのアウェイ感。.pdf
Bootleg_202303_越境してみたときのアウェイ感。.pdfAkihiro ITO
 
始まりは2017年のG検定。
 始まりは2017年のG検定。 始まりは2017年のG検定。
始まりは2017年のG検定。Akihiro ITO
 
202209_kintoneCafeNagoya_deepkintone.pdf
202209_kintoneCafeNagoya_deepkintone.pdf202209_kintoneCafeNagoya_deepkintone.pdf
202209_kintoneCafeNagoya_deepkintone.pdfAkihiro ITO
 
20220713_JP_Stripes#100-3
20220713_JP_Stripes#100-320220713_JP_Stripes#100-3
20220713_JP_Stripes#100-3Akihiro ITO
 
20200930 CDLE LT#2_COD_AkihiroITO
20200930 CDLE LT#2_COD_AkihiroITO20200930 CDLE LT#2_COD_AkihiroITO
20200930 CDLE LT#2_COD_AkihiroITOAkihiro ITO
 
20200807 Aidemy Meetup
20200807 Aidemy Meetup20200807 Aidemy Meetup
20200807 Aidemy MeetupAkihiro ITO
 
2019_G検定対策_数学講座03_微分
2019_G検定対策_数学講座03_微分2019_G検定対策_数学講座03_微分
2019_G検定対策_数学講座03_微分Akihiro ITO
 
2019_G検定対策_数学講座02_行列とベクトル
2019_G検定対策_数学講座02_行列とベクトル2019_G検定対策_数学講座02_行列とベクトル
2019_G検定対策_数学講座02_行列とベクトルAkihiro ITO
 
2019_G検定対策_数学講座01_ディープラーニングでの基礎計算問題
2019_G検定対策_数学講座01_ディープラーニングでの基礎計算問題2019_G検定対策_数学講座01_ディープラーニングでの基礎計算問題
2019_G検定対策_数学講座01_ディープラーニングでの基礎計算問題Akihiro ITO
 
20190301_SkillUpAI_AI導入スタートへのG検定活用
20190301_SkillUpAI_AI導入スタートへのG検定活用20190301_SkillUpAI_AI導入スタートへのG検定活用
20190301_SkillUpAI_AI導入スタートへのG検定活用Akihiro ITO
 
20181022 abeja cloudai_night_nico_airesourcedev
20181022 abeja cloudai_night_nico_airesourcedev20181022 abeja cloudai_night_nico_airesourcedev
20181022 abeja cloudai_night_nico_airesourcedevAkihiro ITO
 
20181016 ceatec2018 meti_session_nico_ito
20181016 ceatec2018 meti_session_nico_ito20181016 ceatec2018 meti_session_nico_ito
20181016 ceatec2018 meti_session_nico_itoAkihiro ITO
 
201807_AnnotationMeetUp_JetsonTX2での顔認識+Annotation用UIの実装
201807_AnnotationMeetUp_JetsonTX2での顔認識+Annotation用UIの実装201807_AnnotationMeetUp_JetsonTX2での顔認識+Annotation用UIの実装
201807_AnnotationMeetUp_JetsonTX2での顔認識+Annotation用UIの実装Akihiro ITO
 
Jetson TX2での顔認識+Annotation用UIの実装
Jetson TX2での顔認識+Annotation用UIの実装Jetson TX2での顔認識+Annotation用UIの実装
Jetson TX2での顔認識+Annotation用UIの実装Akihiro ITO
 
「G検定」を受けてみた。 2018/6/6 JSAI2018
「G検定」を受けてみた。 2018/6/6 JSAI2018「G検定」を受けてみた。 2018/6/6 JSAI2018
「G検定」を受けてみた。 2018/6/6 JSAI2018Akihiro ITO
 
JDLA Deep Learning for GENERAL 2017(所謂、G検定)はどんなだったか。
JDLA Deep Learning for GENERAL 2017(所謂、G検定)はどんなだったか。JDLA Deep Learning for GENERAL 2017(所謂、G検定)はどんなだったか。
JDLA Deep Learning for GENERAL 2017(所謂、G検定)はどんなだったか。Akihiro ITO
 

More from Akihiro ITO (16)

Bootleg_202303_越境してみたときのアウェイ感。.pdf
Bootleg_202303_越境してみたときのアウェイ感。.pdfBootleg_202303_越境してみたときのアウェイ感。.pdf
Bootleg_202303_越境してみたときのアウェイ感。.pdf
 
始まりは2017年のG検定。
 始まりは2017年のG検定。 始まりは2017年のG検定。
始まりは2017年のG検定。
 
202209_kintoneCafeNagoya_deepkintone.pdf
202209_kintoneCafeNagoya_deepkintone.pdf202209_kintoneCafeNagoya_deepkintone.pdf
202209_kintoneCafeNagoya_deepkintone.pdf
 
20220713_JP_Stripes#100-3
20220713_JP_Stripes#100-320220713_JP_Stripes#100-3
20220713_JP_Stripes#100-3
 
20200930 CDLE LT#2_COD_AkihiroITO
20200930 CDLE LT#2_COD_AkihiroITO20200930 CDLE LT#2_COD_AkihiroITO
20200930 CDLE LT#2_COD_AkihiroITO
 
20200807 Aidemy Meetup
20200807 Aidemy Meetup20200807 Aidemy Meetup
20200807 Aidemy Meetup
 
2019_G検定対策_数学講座03_微分
2019_G検定対策_数学講座03_微分2019_G検定対策_数学講座03_微分
2019_G検定対策_数学講座03_微分
 
2019_G検定対策_数学講座02_行列とベクトル
2019_G検定対策_数学講座02_行列とベクトル2019_G検定対策_数学講座02_行列とベクトル
2019_G検定対策_数学講座02_行列とベクトル
 
2019_G検定対策_数学講座01_ディープラーニングでの基礎計算問題
2019_G検定対策_数学講座01_ディープラーニングでの基礎計算問題2019_G検定対策_数学講座01_ディープラーニングでの基礎計算問題
2019_G検定対策_数学講座01_ディープラーニングでの基礎計算問題
 
20190301_SkillUpAI_AI導入スタートへのG検定活用
20190301_SkillUpAI_AI導入スタートへのG検定活用20190301_SkillUpAI_AI導入スタートへのG検定活用
20190301_SkillUpAI_AI導入スタートへのG検定活用
 
20181022 abeja cloudai_night_nico_airesourcedev
20181022 abeja cloudai_night_nico_airesourcedev20181022 abeja cloudai_night_nico_airesourcedev
20181022 abeja cloudai_night_nico_airesourcedev
 
20181016 ceatec2018 meti_session_nico_ito
20181016 ceatec2018 meti_session_nico_ito20181016 ceatec2018 meti_session_nico_ito
20181016 ceatec2018 meti_session_nico_ito
 
201807_AnnotationMeetUp_JetsonTX2での顔認識+Annotation用UIの実装
201807_AnnotationMeetUp_JetsonTX2での顔認識+Annotation用UIの実装201807_AnnotationMeetUp_JetsonTX2での顔認識+Annotation用UIの実装
201807_AnnotationMeetUp_JetsonTX2での顔認識+Annotation用UIの実装
 
Jetson TX2での顔認識+Annotation用UIの実装
Jetson TX2での顔認識+Annotation用UIの実装Jetson TX2での顔認識+Annotation用UIの実装
Jetson TX2での顔認識+Annotation用UIの実装
 
「G検定」を受けてみた。 2018/6/6 JSAI2018
「G検定」を受けてみた。 2018/6/6 JSAI2018「G検定」を受けてみた。 2018/6/6 JSAI2018
「G検定」を受けてみた。 2018/6/6 JSAI2018
 
JDLA Deep Learning for GENERAL 2017(所謂、G検定)はどんなだったか。
JDLA Deep Learning for GENERAL 2017(所謂、G検定)はどんなだったか。JDLA Deep Learning for GENERAL 2017(所謂、G検定)はどんなだったか。
JDLA Deep Learning for GENERAL 2017(所謂、G検定)はどんなだったか。
 

Recently uploaded

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Recently uploaded (9)

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

20220810_JDLA合格者の会_CDLE_LT_06.pdf

  • 2. モチベーション ● 高性能な異常検知モデル「PaDiM」を簡単に使えるようにしたい。 ○ PaDiM:https://arxiv.org/pdf/2011.08785.pdf ● 動作環境として、connectome.design社開発のmetabase®を利用する。 データを放り込むだけで、どの程度検知できるか試せるように。 ● 撮像したデータをPaDiMの入力に合わせるための前処理が意外と面倒。 → 汎用的な前処理を作ろう!
  • 3. FYI:Overview of PaDiM ● 2020年11月に発表された、不良品検知を行 う機械学習モデル。 ● 正常品のみの画像から再学習不要で不良 品検知が実装可能。 ● 不良品検知のデータセットである MVTec AD でSOTAを達成。 出展:https://arxiv.org/pdf/2011.08785.pdf
  • 4. FYI:Overview of MVTec AD ● 2019年6月に公開されたデータセット。 ● 15のカテゴリーに分類され、工業製品や農 作物の画像。 ● 欠陥領域のセグメンテーションデータも含ま れる。 出展:https://www.mvtec.com/company/research/datasets/mvtec-ad
  • 5. 今回のターゲット画像。 ● コンソメキューブの包み方の外観検査。 ● Good / Bad の2値分類。 ● 入力画像は、ベルトコンベア上を流れてくる 対象を撮像するため、画像ファイル内での位 置が不定。 → PaDiMで使える画像にする。
  • 6. 前処理でやること。 1. 物体が画像の中心に配置された、 224 x 224 pxのカラーpngファイルを作る。 2. 精度確認用の、224 x 224 pxのモノクロ2値pngファイルを作る。 3. 各ディレクトリ(=フォルダと同義)への振り分け ※今回は、時間の関係で ”1”のみ紹介。
  • 7. どう処理するか? 1. 物体を検出して切り出す。 → 最新のDETRを使用 DETR:DEtection Transformer 2020年に発表されたTransformerを使った物体検出手法。 ※FasterRCNNも試したが、DETRの方が精度がよかった。 2. PaDiMで使えるように、画像のサイズを揃え、画像の中心に 物体を配置する。
  • 8. 全体の処理構造 result = step1_DetectAndCrop.prePadim_step1(searchpath, indir, outdir_step1) if result == 0: print("Error! Step1. No File Saved to: ", outdir_step1) return False result = step2_Align.prePadim_step2(searchpath2, outdir_step1, outdir_step2, args.bgcolor) if result == 0: [エラー処理] ● 途中結果を確認しやすい&再利用しや すい単位でステップを分割する。 ○ Step1:DETRを使って画像の中から物 体を検出し、画像を切り出す。 ○ Step2:正しく検出と切り出しができない 画像は捨てて、すべて同じサイズに揃 える。 ● ステップごとに必ず処理結果を判定し、 エラー処理を入れること。
  • 9. ディレクトリ構造の処理のコツ parser = argparse.ArgumentParser() parser.add_argument('-d', '--data_path', type=str) parser.add_argument('-s', '--save_path', type=str) cwd = os.getcwd() targetdir_in = os.path.join(args.data_path, args.target) targetdir_out = os.path.join(args.save_path, args.target) ● 入出力ディレクトリ名は、引数として受け 取れるようにした方が良い。 ● 上位の構造に依存しないよう、 Current Working Directory を最上位として処理する。 → フルパス入れちゃダメ。 ● パスを組み立てる時は、文字列結合で はなく、 os.path.join() を使う。 → “/”入力の有無を問わないように。
  • 10. ディレクトリ構造全体から対象ファイルを探すコツ # 各種定義 filetype = “.png” wildcard = “/**/*” searchpath = os.path.join(indir, wildcard + filetype) if len(glob.glob(searchpath, recursive=True)) == 0: print("Error! Step1. File Not Found in: ", searchpath) return False else: [実際の処理] ● 特定の数字や文字列( マジックナンバー) をソースコードの途中に埋め込まず、まと めて定義する。 ● パスに、“ /**/* ”を含めると、配下のディ レクトリ階層すべてから、対象ファイルを 検出できる。 ● 「対象ファルが一つも見つからない場合」 のエラー処理を必ず入れること。
  • 11. 簡易化のため、うまく検出できなかった画像は諦める! [画像を開いてサイズを配列に入れるループ処理 ]: size_mean = np.mean(image_size_array, axis=0) size_std = np.std(image_size_array, axis=0) size_limit_low = size_mean - size_std size_limit_high = size_mean + size_std if limit_low_w <= img.width and img.width <= limit_high_w and limit_low_h <= img.height and img.height < limit_high_h: [実際の処理] ● 検出と切り出しに失敗した画像は、画 像サイズが異なる。 ● 平均と分散から、作成すべき基本画像 サイズを求める。 ● 画像サイズから平均と標準偏差を計算 し、外れ値となる画像を除く。
  • 12. 同じ背景色・サイズの画像に揃える。 background_color=(0,0,0) if bgcolor == 'white': background_color=(255,255,255) [画像を開くループ処理 ]: img_new = Image.new(img.mode, box_size, background_color) left = int((box_wh - img.width) // 2) top = int((box_wh - img.height) // 2) img_new.paste(img, (left, top)) img_new.save(os.path.join(outdirname, os.path.basename(file))) ● 基本画像の背景色を引数から受け取 る。(背景は、黒か白でよいはず) ● 基本画像を生成し、元の画像をその中 心に貼り付ける。
  • 14. まとめ ● 今回の例 ○ ファイル数:4 ○ ソースコードの行数:約250行(空行含む) ● AIのサンプルコードは、パスやファイル名なども含め特定の文字列が直接書き込まれてい たり、画像サイズや形式も限定されている場合が多い。 ● 実務利用に向けて汎用的に使えるようにするためには、課題に合わせて修正する箇所が 極力少なくなるように作り込む必要がある。 ● また例えば、 ”for i in range(10):” のようにいわゆるマジックナンバーが埋め込まれてい るとコードの解読や修正に手間がかかるので、必ず定義すること。 epoch = 10 for i in range(epoch):