Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
スケッチから3Dモデルを検索してみた / Searching 3D models from ...
Search
Masaki Inaba
August 29, 2022
Technology
990
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
スケッチから3Dモデルを検索してみた / Searching 3D models from sketches
3D何でも勉強会
https://preferred-networks.connpass.com/event/256382/
Masaki Inaba
August 29, 2022
Other Decks in Technology
See All in Technology
Classmethod Company Deck
satoshi7
0
170
NDIでApple Vision Proにリアルタイム映像送信
jyouryuusui
0
100
SREでアラート疲れを 解決しよう!
kairim0
1
230
【Data Engineering Summit2026_登壇資料】医療ビッグデータ×AIエージェントを支えるデータ基盤とハーネスエンジニアリング
jmdc_presentation
0
140
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
370
「Docker Desktop不要の時代」は 来たのか?
ueponx
0
620
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
420
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
880
Loop Engineering これくらいでいい
mikanichinose
0
230
味覇で作るパスタが美味い - 20261001_yabaubuki.dev
livesense
PRO
0
130
Cognition AI Japan - ウェビナー2_テストQA_運用監視
cogakira
0
140
V8のArray.prototype.flatを最大約20倍速くするまでと、巨大OSSへの大規模コミットの道のり
riyaamemiya
0
280
Featured
See All Featured
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
560
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Design in an AI World
tapps
1
350
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
270
Odyssey Design
rkendrick25
PRO
2
870
Technical Leadership for Architectural Decision Making
baasie
3
600
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Navigating Weather and Climate Data
rabernat
0
550
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
600
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
930
Transcript
スケッチから3Dモデルを 検索してみた いなば @ キャディ株式会社 1
自己紹介 • Masaki Inaba | @mi_spindel ◦ お気軽にメッセージください • 某光学機器メーカでマシン/ロボットビジョン
某自動車部品メーカで自動運転/運転支援向けの車載画像認識 某AIスタートアップで様々な受託AI開発 • 2022/7/1にキャディ株式会社に入社しました AI Labで2D/3D図面の認識・検索技術の開発に関わっています 2
やりたいこと※この画像はイメージです クエリ 検索結果 3
スケッチからhogehogeという話は結構ある1 • Sketch2Pose: Estimating a 3D Character Pose from a
Bitmap Sketch, SIGGRAPH2022 4
スケッチからhogehogeという話は結構ある2 • Free2CAD: Parsing Freehand Drawings into CAD Command, SIGGRAPH2022
5
スケッチから既存のCADモデルを 検索できたら嬉しいかもしれない ※工業部品希望 6
お、論文とデータセットがある! • ‘CADSketchNet’ - An Annotated Sketch dataset for 3D
CAD Model Retrieval with Deep Neural Networks, 3DOR2021 7
CADSketchNet, DatasetA • Mechanical Components Benchmark: MCB, ECCV2020がベース ◦ 58,696スケッチ(.png),
58,696モデル(.obj), 68クラス • コンピュータにより生成されたスケッチ(computer-generated sketch: cgs) ◦ 視線は20方向から機械工学で設計を学んだ学生に投票で一つに決めてもらったとのこと ◦ (なぜ1視点しか作らなかったのだろう…) 8
• Engineering Shape Benchmark: ESB, Computer-Aided Design2006がベース ◦ 800スケッチ(.png), 866モデル(.obj),
42クラス • 手書きスケッチ(hand) ◦ 視線はDatasetAと同様に決めて、学生に手書きスケッチを描いてもらった ◦ (800か…少ないな…) CADSketchNet, DatasetB 9
CADSketchNet, Experiment • 何か色々書いてあるけど、(Multi-view) CNN, Siamese-Networkの構成で DatasetA, BともにTop k-Accurasyは90%を超えるとのこと •
ただ、DatasetA内で学習・評価、DatasetB内で学習・評価した実験結果しかなく、 コンピュータ生成スケッチで学習し手書きスケッチを評価したものが気になる 10
実際にやってみた • やったこと ◦ CNN(スケッチ) - Multi-view CNN(3Dモデル)によるSiamese-Network ▪ PyTorch3DによるMulti-view
Rendering ◦ DatasetA(コンピュータ生成スケッチ)による学習⇒DatasetB(手書きスケッチ)の評価 ◦ DatasetB(コンピュータ生成スケッチ)による学習⇒DatasetB(手書きスケッチ)の評価 • やらないこと ◦ CADSketchNetの再現実験 ▪ 公開コードも無く、実験条件の詳細も不明確なので無理。。。 ▪ https://github.com/bharadwaj-manda/CADSketchNet ◦ 検索精度の追及 README only 11
まずは、データセットをダウンロード! • あれ…スケッチの画像データしかないな…(嫌な予感) • MCB, ESBデータセットは別途ダウンロードか • うん、モデルファイル(.obj)しかないよね 各視点のレンダリング画像は無いし、 レンダリング時の視線などのパラメタも無い
各引用論文と同じパラメタ使ってる云々と書いてあるな… DatasetBのファイル名が適当でスケッチとモデルの対応とれないし…悲しい… 12
マルチビューレンダリングをする • Multi-view Convolutional Neural Networks for 3D Shape Recognition,
ICCV2015では”Blender”を使ってるけど、せっかくなので”PyTorch3D”を試用 ◦ 今回はパラメタ固定なので意味ないですが、微分可能(のはず) ◦ 参考: PyTorch3Dチュートリアル, MVTN: Multi-View Transformation Network for 3D Shape Recognition, ICCV2021のコード • レンダリング時のパラメタはMVCNNの条件を参考にする 13
PyTorch3Dによるマルチビューレンダリングコード例1 class MultiViewRenderer(nn.Module): def forward(self, meshes, azim, elev, dist): background_color
= torch.tensor((1.0, 1.0, 1.0)) color = torch.tensor((1.0, 1.0, 1.0)) lights = DirectionalLights(direction = (0, 1.0, 0)) rendered_images, cameras = self.render_meshes( meshes=meshes, color=color, azim=azim, elev=elev, dist=dist, lights=lights, background_color=background_color) return rendered_images, cameras meshes: batch_size * [Pytorch3D.Mesh] azim: (batch_size, nb_views) elev: (batch_size, nb_views) dist: (batch_size, nb_views) rendered_images: (batch_size*nb_views, 3, width, height) 背景色 物体色 y方向無限遠にある点光源 Mathworks 方位角と仰角の視点の設定より 14
def render_meshes(self, meshes, color, azim, elev, dist, lights, background_color=(1.0, 1.0,
1.0)): c_batch_size = len(meshes) verts = [msh.verts_list()[0].cuda() for msh in meshes] faces = [msh.faces_list()[0].cuda() for msh in meshes] for i in range(len(verts)): verts[i] = verts[i] - torch.mean(verts[i], 0) # weighted mean based on face area is better mgn = 1.0 / torch.max(torch.max(verts[i], 0).values - torch.min(verts[i], 0).values) verts[i] = verts[i] * mgn new_meshes = Meshes( verts=verts, faces=faces, textures=None) max_vert = new_meshes.verts_padded().shape[1] new_meshes.textures = Textures( verts_rgb=color.cuda()*torch.ones((c_batch_size, max_vert, 3)).cuda()) R, T = look_at_view_transform(dist=batch_tensor(dist.T, dim=1, squeeze=True), elev=batch_tensor(elev.T, dim=1, squeeze=True), azim=batch_tensor(azim.T, dim=1, squeeze=True)) cameras = FoVPerspectiveCameras(device=meshes.device, R=R, T=T) PyTorch3Dによるマルチビューレンダリングコード例2 中心位置正規化 サイズ正規化 (タスクに依存) テクスチャを設定 元objにはテクスチャがない カメラ位置姿勢を設定 batch_size*nb_views 15
raster_settings = RasterizationSettings( image_size=self.image_size, # 224 blur_radius=0.0, bin_size = 0,
faces_per_pixel=self.faces_per_pixel, # 1 cull_backfaces=self.cull_backfaces # False ) renderer = MeshRenderer( rasterizer=MeshRasterizer( cameras=cameras, raster_settings=raster_settings ), shader=SoftPhongShader( blend_params=BlendParams(background_color=background_color), device=meshes.device, cameras=cameras, lights=lights ) ) new_meshes = new_meshes.extend(self.nb_views) rendered_images = renderer(new_meshes, cameras=cameras, lights=lights) rendered_images = rendered_images[..., 0:3].transpose(1, 3).transpose(2, 3) return rendered_images, cameras PyTorch3Dによるマルチビューレンダリングコード例3 ラスタライズ設定 ポリゴンから画素生成 Phongの反射モデル メッシュをnb_viewsの数 コピーしてレンダリング alphaチャンネル削除 16
レンダリング実行 from pytorch3d.io import load_objs_as_meshes nb_views = 12 obj_path="test.obj" mvr
= MultiViewRenderer(nb_views=nb_views) elev = torch.stack([torch.linspace(30, 30, nb_views)]) azim = torch.stack([torch.linspace(-180, 180-360/nb_views, nb_views)]) dist = torch.stack([torch.Tensor([2.0]*nb_views)]) meshes = load_objs_as_meshes(obj_path).cuda() images, cameras = mvr.forward(meshes, azim, elev, dist) MVCNNと同様の12視点 17
モデル • CNN-MVCNNのSiamese Network風 ResNet18 ResNet18 ResNet18 ResNet18 ResNet18 …
View max pooling Linear LeakyReLU Linear LeakyReLU 128次元 128次元 18
その他、学習条件など • Dataset: DatasetA_cgs, DatasetB_cgs, DatasetB_hand ◦ クラスインバランス対策にWeightedRandomSampler • Optimizer:
Adam, Learning Rate = 1.0e-4 • Batch Size: 8 • LeakyReLU negative slope = 0.01 • Data Augmentation ◦ スケッチのみHorizontal / Vertical Flip • 評価 ◦ Top-k Accuracy 各クラスのデータ数 左: DatasetA, 右: DatasetB 19
学習: DatasetA_cgs_train, 評価: DatasetA_cgs_test • お、まぁまぁできてる • デモ ◦ 定性的にも悪くない
k Top-k Accuracy@DatasetA_cgs_test 1 0.80 3 0.89 5 0.92 20
学習: DatasetA_cgs_train, 評価: DatasetB • やっぱ、ダメだな… • DatasetAとDatasetBでクラス分類の仕方が違うからだろうか k Top-k
Accuracy@DatasetB_cgs Top-k Accuracy@DatasetB_hand 1 0.11 0.06 3 0.21 0.14 5 0.27 0.19 21
学習: DatasetB_cgs, 評価: DatasetB_hand • うーむ、ダメですね… • 単純にスケッチの違いを吸収できていないご様子 k Top-k
Accuracy@DatasetB_hand 1 0.21 3 0.22 5 0.24 22
学習: DatasetB_hand_train, 評価: DatasetB_hand_test • 手書きスケッチを直接学習すればそこそこできる • デモ ◦ 最初にお見せしたやりたいことイメージはこの結果でした
• 手書きスケッチを実際に集めるのは結構辛い… k Top-k Accuracy@DatasetB_hand_test 1 0.80 3 0.85 5 0.89 23
まとめ • スケッチからの3Dモデル検索をやってみた過程を紹介しました ◦ CADSketchNetのデータセットを利用し、 CNN-MVCNNのSiamese Network構成で実際にやってみた ▪ PyTorch3Dによるマルチビューレンダリングの方法も紹介 ◦
結果、コンピュータ生成のスケッチではそれなりに上手くいった ◦ ただ、ナイーブにコンピュータ生成のスケッチを学習したモデルで リアルな手書きのスケッチをクエリとして扱うのは難しいことが分かった • データ拡張、手書き風変換、Domain Adaptationあたりを 頑張ると変わるかもしれない • 手書きスケッチを描く側に制約を入れるのも大事だと思う ◦ 視点位置姿勢の固定、Draw Strokeの補正など 24
ありがとうございました! • CADDiでは2D図面だけでなく、3D図面認識・解析・検索・生成など 様々なことにチャレンジできる環境だと感じています • CADDiのことや今回の話で気になることなどありましたら下記まで • Masaki Inaba |
@mi_spindel ◦ お気軽にメッセージください 25